Name: series-workflowvx2ff Phase: Succeeded StartedAt: 2026-07-13 09:22:53 +0000 UTC FinishedAt: 2026-07-13 11:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[0] Phase: Succeeded StartedAt: 2026-07-13 09:22:53 +0000 UTC FinishedAt: 2026-07-13 09:58:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[0].run-triage Phase: Succeeded StartedAt: 2026-07-13 09:22:53 +0000 UTC FinishedAt: 2026-07-13 09:58:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_PCI", "DWMAC_INTEL", "DWMAC_LOONGSON", "DWMAC_MOTORCOMM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_PCI", "DWMAC_INTEL", "DWMAC_LOONGSON", "DWMAC_MOTORCOMM" ], "series_id": "236e94de-9725-496e-840c-c21b3f8f4f91" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "stmmac_mac_link_up" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1BDSSYjMzQ7LAogICAgJiMzNDtEV01BQ19JTlRFTCYjMzQ7LAogICAgJiMzNDtEV01BQ19MT09OR1NPTiYjMzQ7LAogICAgJiMzNDtEV01BQ19NT1RPUkNPTU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdG1tYWNfbWFjX2xpbmtfdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1BQyBzcGVlZCBjb25maWd1cmF0aW9uIGxvZ2ljIGluIHRoZSBzdG1tYWMgZHJpdmVyIGR1cmluZyBsaW5rIHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlciYjMzk7cyBjb3JlIGxvZ2ljLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIHZpYSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcgYnkgaW5qZWN0aW5nIGEgdmlydHVhbCBQQ0kgZGV2aWNlIG1hdGNoaW5nIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHZlbmRvci9kZXZpY2UgSURzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzEzNDQyYmI5NmY4YjYyZjA1YTZiZjQwNjIwNGVhY2I0N2RhNzg2OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDA5OjQ5OjA1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG5pbmRleCAyYTBkN2VmZjg4ZDNmZi4uOGQzZDg3NTQ5NTI5ZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG5AQCAtMTA4Myw2MyAmIzQzOzEwODMsNDUgQEAgc3RhdGljIHZvaWQgc3RtbWFjX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuIFx0b2xkX2N0cmwgPSByZWFkbChwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBNQUNfQ1RSTF9SRUcpO1xuIFx0Y3RybCA9IG9sZF9jdHJsIFx1MDAyNiB+cHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnNwZWVkX21hc2s7XG4gXG4tXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSB7XG4tXHRcdHN3aXRjaCAoc3BlZWQpIHtcbi1cdFx0Y2FzZSBTUEVFRF8xMDAwMDpcbi1cdFx0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay54Z21paS5zcGVlZDEwMDAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFNQRUVEXzUwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGdtaWkuc3BlZWQ1MDAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFNQRUVEXzI1MDA6XG4mIzQzO1x0c3dpdGNoIChzcGVlZCkge1xuJiM0MztcdGNhc2UgU1BFRURfMTAwMDAwOlxuJiM0MztcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGxnbWlpLnNwZWVkMTAwMDAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTUEVFRF81MDAwMDpcbiYjNDM7XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhsZ21paS5zcGVlZDUwMDAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTUEVFRF80MDAwMDpcbiYjNDM7XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhsZ21paS5zcGVlZDQwMDAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTUEVFRF8yNTAwMDpcbiYjNDM7XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhsZ21paS5zcGVlZDI1MDAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTUEVFRF8xMDAwMDpcbiYjNDM7XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhnbWlpLnNwZWVkMTAwMDA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNQRUVEXzUwMDA6XG4mIzQzO1x0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay54Z21paS5zcGVlZDUwMDA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNQRUVEXzI1MDA6XG4mIzQzO1x0XHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKVxuIFx0XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhnbWlpLnNwZWVkMjUwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbi1cdH0gZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9YTEdNSUkpIHtcbi1cdFx0c3dpdGNoIChzcGVlZCkge1xuLVx0XHRjYXNlIFNQRUVEXzEwMDAwMDpcbi1cdFx0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay54bGdtaWkuc3BlZWQxMDAwMDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgU1BFRURfNTAwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGxnbWlpLnNwZWVkNTAwMDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgU1BFRURfNDAwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGxnbWlpLnNwZWVkNDAwMDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgU1BFRURfMjUwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGxnbWlpLnNwZWVkMjUwMDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgU1BFRURfMTAwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGdtaWkuc3BlZWQxMDAwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBTUEVFRF8yNTAwOlxuLVx0XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnNwZWVkMjUwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBTUEVFRF8xMDAwOlxuLVx0XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnNwZWVkMTAwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdHN3aXRjaCAoc3BlZWQpIHtcbi1cdFx0Y2FzZSBTUEVFRF8yNTAwOlxuJiM0MztcdFx0ZWxzZVxuIFx0XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnNwZWVkMjUwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBTUEVFRF8xMDAwOlxuLVx0XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnNwZWVkMTAwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBTUEVFRF8xMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsuc3BlZWQxMDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgU1BFRURfMTA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsuc3BlZWQxMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgU1BFRURfMTAwMDpcbiYjNDM7XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnNwZWVkMTAwMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgU1BFRURfMTAwOlxuJiM0MztcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsuc3BlZWQxMDA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNQRUVEXzEwOlxuJiM0MztcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsuc3BlZWQxMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRuZXRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDt1bnN1cHBvcnRlZCBzcGVlZCAlcyBvbiAlcywgbGVhdmluZyB0aGUgTUFDIGRpc2FibGVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBwaHlfc3BlZWRfdG9fc3RyKHNwZWVkKSwgcGh5X21vZGVzKGludGVyZmFjZSkpO1xuJiM0MztcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmaXhfbWFjX3NwZWVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1BDSSYjMzQ7LAogICAgJiMzNDtEV01BQ19JTlRFTCYjMzQ7LAogICAgJiMzNDtEV01BQ19MT09OR1NPTiYjMzQ7LAogICAgJiMzNDtEV01BQ19NT1RPUkNPTU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdG1tYWNfbWFjX2xpbmtfdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1BQyBzcGVlZCBjb25maWd1cmF0aW9uIGxvZ2ljIGluIHRoZSBzdG1tYWMgZHJpdmVyIGR1cmluZyBsaW5rIHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlciYjMzk7cyBjb3JlIGxvZ2ljLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIHZpYSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcgYnkgaW5qZWN0aW5nIGEgdmlydHVhbCBQQ0kgZGV2aWNlIG1hdGNoaW5nIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHZlbmRvci9kZXZpY2UgSURzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMTM0NDJiYjk2ZjhiNjJmMDVhNmJmNDA2MjA0ZWFjYjQ3ZGE3ODY5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMTMgMDk6NDk6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYwppbmRleCAyYTBkN2VmZjg4ZDNmZi4uOGQzZDg3NTQ5NTI5ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYwpAQCAtMTA4Myw2MyAmIzQzOzEwODMsNDUgQEAgc3RhdGljIHZvaWQgc3RtbWFjX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLAogCW9sZF9jdHJsID0gcmVhZGwocHJpdi0mZ3Q7aW9hZGRyICYjNDM7IE1BQ19DVFJMX1JFRyk7CiAJY3RybCA9IG9sZF9jdHJsICZhbXA7IH5wcml2LSZndDtody0mZ3Q7bGluay5zcGVlZF9tYXNrOwogCi0JaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkgewotCQlzd2l0Y2ggKHNwZWVkKSB7Ci0JCWNhc2UgU1BFRURfMTAwMDA6Ci0JCQljdHJsIHw9IHByaXYtJmd0O2h3LSZndDtsaW5rLnhnbWlpLnNwZWVkMTAwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF81MDAwOgotCQkJY3RybCB8PSBwcml2LSZndDtody0mZ3Q7bGluay54Z21paS5zcGVlZDUwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8yNTAwOgomIzQzOwlzd2l0Y2ggKHNwZWVkKSB7CiYjNDM7CWNhc2UgU1BFRURfMTAwMDAwOgomIzQzOwkJY3RybCB8PSBwcml2LSZndDtody0mZ3Q7bGluay54bGdtaWkuc3BlZWQxMDAwMDA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTUEVFRF81MDAwMDoKJiM0MzsJCWN0cmwgfD0gcHJpdi0mZ3Q7aHctJmd0O2xpbmsueGxnbWlpLnNwZWVkNTAwMDA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTUEVFRF80MDAwMDoKJiM0MzsJCWN0cmwgfD0gcHJpdi0mZ3Q7aHctJmd0O2xpbmsueGxnbWlpLnNwZWVkNDAwMDA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTUEVFRF8yNTAwMDoKJiM0MzsJCWN0cmwgfD0gcHJpdi0mZ3Q7aHctJmd0O2xpbmsueGxnbWlpLnNwZWVkMjUwMDA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTUEVFRF8xMDAwMDoKJiM0MzsJCWN0cmwgfD0gcHJpdi0mZ3Q7aHctJmd0O2xpbmsueGdtaWkuc3BlZWQxMDAwMDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFNQRUVEXzUwMDA6CiYjNDM7CQljdHJsIHw9IHByaXYtJmd0O2h3LSZndDtsaW5rLnhnbWlpLnNwZWVkNTAwMDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFNQRUVEXzI1MDA6CiYjNDM7CQlpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKQogCQkJY3RybCB8PSBwcml2LSZndDtody0mZ3Q7bGluay54Z21paS5zcGVlZDI1MDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQkJfQotCX0gZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9YTEdNSUkpIHsKLQkJc3dpdGNoIChzcGVlZCkgewotCQljYXNlIFNQRUVEXzEwMDAwMDoKLQkJCWN0cmwgfD0gcHJpdi0mZ3Q7aHctJmd0O2xpbmsueGxnbWlpLnNwZWVkMTAwMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BFRURfNTAwMDA6Ci0JCQljdHJsIHw9IHByaXYtJmd0O2h3LSZndDtsaW5rLnhsZ21paS5zcGVlZDUwMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BFRURfNDAwMDA6Ci0JCQljdHJsIHw9IHByaXYtJmd0O2h3LSZndDtsaW5rLnhsZ21paS5zcGVlZDQwMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BFRURfMjUwMDA6Ci0JCQljdHJsIHw9IHByaXYtJmd0O2h3LSZndDtsaW5rLnhsZ21paS5zcGVlZDI1MDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BFRURfMTAwMDA6Ci0JCQljdHJsIHw9IHByaXYtJmd0O2h3LSZndDtsaW5rLnhnbWlpLnNwZWVkMTAwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8yNTAwOgotCQkJY3RybCB8PSBwcml2LSZndDtody0mZ3Q7bGluay5zcGVlZDI1MDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8xMDAwOgotCQkJY3RybCB8PSBwcml2LSZndDtody0mZ3Q7bGluay5zcGVlZDEwMDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQkJfQotCX0gZWxzZSB7Ci0JCXN3aXRjaCAoc3BlZWQpIHsKLQkJY2FzZSBTUEVFRF8yNTAwOgomIzQzOwkJZWxzZQogCQkJY3RybCB8PSBwcml2LSZndDtody0mZ3Q7bGluay5zcGVlZDI1MDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8xMDAwOgotCQkJY3RybCB8PSBwcml2LSZndDtody0mZ3Q7bGluay5zcGVlZDEwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8xMDA6Ci0JCQljdHJsIHw9IHByaXYtJmd0O2h3LSZndDtsaW5rLnNwZWVkMTAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BFRURfMTA6Ci0JCQljdHJsIHw9IHByaXYtJmd0O2h3LSZndDtsaW5rLnNwZWVkMTA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQkJfQomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgU1BFRURfMTAwMDoKJiM0MzsJCWN0cmwgfD0gcHJpdi0mZ3Q7aHctJmd0O2xpbmsuc3BlZWQxMDAwOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgU1BFRURfMTAwOgomIzQzOwkJY3RybCB8PSBwcml2LSZndDtody0mZ3Q7bGluay5zcGVlZDEwMDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFNQRUVEXzEwOgomIzQzOwkJY3RybCB8PSBwcml2LSZndDtody0mZ3Q7bGluay5zcGVlZDEwOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQluZXRkZXZfZXJyKHByaXYtJmd0O2RldiwKJiM0MzsJCQkgICAmIzM0O3Vuc3VwcG9ydGVkIHNwZWVkICVzIG9uICVzLCBsZWF2aW5nIHRoZSBNQUMgZGlzYWJsZWRcbiYjMzQ7LAomIzQzOwkJCSAgIHBoeV9zcGVlZF90b19zdHIoc3BlZWQpLCBwaHlfbW9kZXMoaW50ZXJmYWNlKSk7CiYjNDM7CQlyZXR1cm47CiAJfQogCiAJaWYgKHByaXYtJmd0O3BsYXQtJmd0O2ZpeF9tYWNfc3BlZWQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgc3RtbWFjYCBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgc3RtbWFjX21hY19saW5rX3VwYCBmdW5jdGlvbiBpbiBgc3RtbWFjX21haW4uY2AuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIGNsZWFybHkgYWltZWQgYXQgaG93IHRoZSBNQUMgc3BlZWQgaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgbGluayBzcGVlZCBhbmQgaW50ZXJmYWNlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cywgJiMzNDtDYW4gdGhpcyBiZSBmdXp6ZWQgZWZmZWN0aXZlbHk/JiMzNDsgVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGV0aGVybmV0IGRyaXZlciDigJMgdGhlIFNUTWljcm9lbGVjdHJvbmljcyAxMC8xMDAvMTAwMC9FUU9TIEV0aGVybmV0IE1BQyDigJMgc28gcmVhbGlzdGljYWxseSwgZGlyZWN0IGZ1enppbmcgdXN1YWxseSBoaW5nZXMgb24gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG9yIGdlbmVyaWMgc3Vic3lzdGVtcy4gSXQmIzM5O3Mgb2Z0ZW4gdG91Z2guCgpXYWl0IGEgc2Vjb25kLCBzeXprYWxsZXIgZG9lcyBoYXZlIG5ldHdvcmsgaW50ZXJmYWNlIGZ1enppbmcgY2FwYWJpbGl0aWVzIHdpdGggdHVuL3RhcCBvciB2ZXRoLiBCdXQgZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyLCBJIG5lZWQgdGhlIGFjdHVhbCBoYXJkd2FyZSBvciBhIHNvbGlkIGVtdWxhdGlvbi4gSXMgYHN0bW1hY2AgZW11bGF0ZWQgaW4gc29tZXRoaW5nIGxpa2UgUUVNVT8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgY2FuIGJlIHJlYWNoZWQgaW4gdGhlIGxhYi4KCk5vdyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGBzdG1tYWNgIGRldmljZSBpcyBhIFBDSSBkZXZpY2Ugb3IgYSBwbGF0Zm9ybSBkZXZpY2UgYmVjYXVzZSBpdCBjaGFuZ2VzIHRoZSBhcHByb2FjaC4gSSBrbm93IGl0JiMzOTtzIGEgcGxhdGZvcm0gZGV2aWNlIHVzdWFsbHkgZm91bmQgb24gQVJNIFNvQ3MgKGxpa2UgU1RNMzIsIFJvY2tjaGlwLCBldGMuKSBvciBjYW4gYmUgYSBQQ0kgZGV2aWNlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBQQ0kgdmFyaWFudCBoYXMgYW55IHNwZWNpYWwgYmVoYXZpb3JzLCBJIG5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuY2AuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIGEgbW9yZSBzb2xpZCBzdHJhdGVneSB0byBhdHRhY2sgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX3BjaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0PTEwNz1zeW50YXggKGUuZy4gZm9yIFBDSSBtb2R1bGUpOjpcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy5yc3QtMTA4LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLnJzdDoxMDk6ICAgIG1vZHByb2JlIHN0bW1hY19wY2kgW1x1MDAzY29wdGlvblx1MDAzZT1cdTAwM2NWQUwxXHUwMDNlLFx1MDAzY1ZBTDJcdTAwM2UsLi4uXVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLnJzdC0xMTAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvTWFrZWZpbGU9NTM9b2JqLSQoQ09ORklHX0RXTUFDX01PVE9SQ09NTSlcdCYjNDM7PSBkd21hYy1tb3RvcmNvbW0ub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvTWFrZWZpbGU6NTQ6c3RtbWFjLXBjaS1vYmpzOj0gc3RtbWFjX3BjaS5vXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0yNT1zdHJ1Y3QgaW50ZWxfcHJpdl9kYXRhIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTM5LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0MDpzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00MS1cdHVuc2lnbmVkIGludCBmdW5jO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjQ1OnN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6NDY6XHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEgKmZ1bmM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTQ3LVx0c2l6ZV90IG5mdW5jcztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTQ5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo1MDpzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNTEtXHRpbnQgKCpzZXR1cCkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05MT1zdGF0aWMgY29uc3QgaW50IGFkbG5fdHNuX2xhbmVfcmVnc1tdID0gezZ9O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTM6c3RhdGljIGludCBzdG1tYWNfcGNpX2ZpbmRfcGh5X2FkZHIoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk0LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkbWlfbGlzdClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTUte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5NjpcdGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSAqZnVuY19kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5NzpcdGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhICpkbWlfZGF0YTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTgtXHRjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZG1pX2lkO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9NzU1PXN0YXRpYyBpbnQgZWhsX3NnbWlpX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy03NzQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjc3NTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfc2dtaWkxZ19pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy03NzYtXHQuc2V0dXAgPSBlaGxfc2dtaWlfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTc3OT1zdGF0aWMgaW50IGVobF9yZ21paV9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNzg5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo3OTA6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gZWhsX3JnbWlpMWdfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNzkxLVx0LnNldHVwID0gZWhsX3JnbWlpX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04MTA9c3RhdGljIGludCBlaGxfcHNlMF9yZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04MTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjgxNzpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMF9yZ21paTFnX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgxOC1cdC5zZXR1cCA9IGVobF9wc2UwX3JnbWlpMWdfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTgyMT1zdGF0aWMgaW50IGVobF9wc2UwX3NnbWlpMWdfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgzOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6ODM5OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGVobF9wc2UwX3NnbWlpMWdfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODQwLVx0LnNldHVwID0gZWhsX3BzZTBfc2dtaWkxZ19kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9ODU5PXN0YXRpYyBpbnQgZWhsX3BzZTFfcmdtaWkxZ19kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo4NjY6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gZWhsX3BzZTFfcmdtaWkxZ19pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04NjctXHQuc2V0dXAgPSBlaGxfcHNlMV9yZ21paTFnX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04NzA9c3RhdGljIGludCBlaGxfcHNlMV9zZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04ODctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg4ODpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMV9zZ21paTFnX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg4OS1cdC5zZXR1cCA9IGVobF9wc2UxX3NnbWlpMWdfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTkxMz1zdGF0aWMgaW50IHRnbF9zZ21paV9waHkwX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05MjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjkyMjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyB0Z2xfc2dtaWkxZ19waHkwX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTkyMy1cdC5zZXR1cCA9IHRnbF9zZ21paV9waHkwX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05MjY9c3RhdGljIGludCB0Z2xfc2dtaWlfcGh5MV9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5MzU6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gdGdsX3NnbWlpMWdfcGh5MV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05MzYtXHQuc2V0dXAgPSB0Z2xfc2dtaWlfcGh5MV9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9OTM5PXN0YXRpYyBpbnQgYWRsc19zZ21paV9waHkwX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk0OTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBhZGxzX3NnbWlpMWdfcGh5MF9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NTAtXHQuc2V0dXAgPSBhZGxzX3NnbWlpX3BoeTBfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTk1Mz1zdGF0aWMgaW50IGFkbHNfc2dtaWlfcGh5MV9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5NjM6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gYWRsc19zZ21paTFnX3BoeTFfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTY0LVx0LnNldHVwID0gYWRsc19zZ21paV9waHkxX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05OTI9c3RhdGljIGludCBhZGxuX3NnbWlpX3BoeTBfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwMTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwMTE6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gYWRsbl9zZ21paTFnX3BoeTBfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTAxMi1cdC5zZXR1cCA9IGFkbG5fc2dtaWlfcGh5MF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTAxNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTAxNTpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZnVuY19kYXRhIGdhbGlsZW9fc3RtbWFjX2Z1bmNfZGF0YVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDE2LVx0e1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTAyMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTAyMjpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEgZ2FsaWxlb19zdG1tYWNfZG1pX2RhdGEgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwMjMtXHQuZnVuYyA9IGdhbGlsZW9fc3RtbWFjX2Z1bmNfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwMjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwMjc6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSBpb3QyMDQwX3N0bW1hY19mdW5jX2RhdGFbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTAyOC1cdHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwMzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwMzg6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhIGlvdDIwNDBfc3RtbWFjX2RtaV9kYXRhID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDM5LVx0LmZ1bmMgPSBpb3QyMDQwX3N0bW1hY19mdW5jX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMDc4PXN0YXRpYyBpbnQgcXVhcmtfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA4OC1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMDg5Olx0cmV0ID0gc3RtbWFjX3BjaV9maW5kX3BoeV9hZGRyKHBkZXYsIHF1YXJrX3BjaV9kbWkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDkwLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTExMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTExNDpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBxdWFya19pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTE1LVx0LnNldHVwID0gcXVhcmtfZGVmYXVsdF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9MTIzMj1zdGF0aWMgaW50IGludGVsX2V0aF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMjM0LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTIzNTpcdHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm8gPSAoc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqKWlkLVx1MDAzZWRyaXZlcl9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMjM2LVx0c3RydWN0IGludGVsX3ByaXZfZGF0YSAqaW50ZWxfcHJpdjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTc2PXN0cnVjdCBsb29uZ3Nvbl9kYXRhIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTgxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo4MjpzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtODMtXHRpbnQgKCpzZXR1cCkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz0xMzI9c3RhdGljIGludCBsb29uZ3Nvbl9nbWFjX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjE0MjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBsb29uZ3Nvbl9nbWFjX3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNDMtXHQuc2V0dXAgPSBsb29uZ3Nvbl9nbWFjX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz0xNjU9c3RhdGljIGludCBsb29uZ3Nvbl9nbmV0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjE3NzpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBsb29uZ3Nvbl9nbmV0X3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNzgtXHQuc2V0dXAgPSBsb29uZ3Nvbl9nbmV0X2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz00OTg9c3RhdGljIGludCBsb29uZ3Nvbl9kd21hY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTAxLVx0c3RydWN0IHN0bW1hY19yZXNvdXJjZXMgcmVzID0ge307XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjUwMjpcdHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm87XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUwMy1cdHN0cnVjdCBsb29uZ3Nvbl9kYXRhICpsZDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUzNy1cdHBsYXQtXHUwMDNlZml4X3NvY19yZXNldCA9IGxvb25nc29uX2R3bWFjX2ZpeF9yZXNldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTM4Olx0cGxhdC1cdTAwM2VzdXNwZW5kID0gc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjUzOTpcdHBsYXQtXHUwMDNlcmVzdW1lID0gc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTQwLVx0bGQtXHUwMDNlZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjU0MzpcdGluZm8gPSAoc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqKWlkLVx1MDAzZWRyaXZlcl9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDQtXHRyZXQgPSBpbmZvLVx1MDAzZXNldHVwKHBkZXYsIHBsYXQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jPTE4OD1zdGF0aWMgaW50IG1vdG9yY29tbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0xOTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYzoxOTM6XHRyZXQgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKGRldiwgYnNwX3ByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMTk0LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0yMDg9bW90b3Jjb21tX2RlZmF1bHRfcGxhdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTI0OC1cdHBsYXQtXHUwMDNlY29yZV90eXBlXHRcdD0gRFdNQUNfQ09SRV9HTUFDNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jOjI0OTpcdHBsYXQtXHUwMDNlc3VzcGVuZFx0XHQ9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMjUwLVx0cGxhdC1cdTAwM2VyZXN1bWVcdFx0PSBtb3RvcmNvbW1fcmVzdW1lO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0xMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoxMjppbnQgc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0xMy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTI1LX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoyNjpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtMjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmM6Mjg6aW50IHN0bW1hY19wY2lfcGxhdF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0yOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTQzLX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzo0NDpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy00NS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmgtOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaDo5OmludCBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaDoxMDppbnQgc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaC0xMS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTk6c3RydWN0IHN0bW1hY19wY2lfaW5mbyB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjAtXHRpbnQgKCpzZXR1cCkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTMzPXN0YXRpYyBpbnQgc3RtbWFjX2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6NTA6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gc3RtbWFjX3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTUxLVx0LnNldHVwID0gc3RtbWFjX2RlZmF1bHRfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9NTQ9c3RhdGljIGludCBzbnBzX2dtYWM1X2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEwMjpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBzbnBzX2dtYWM1X3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwMy1cdC5zZXR1cCA9IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTA3OiAqIHN0bW1hY19wY2lfcHJvYmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDgtICpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTE3LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjExODpzdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTE5LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTIwLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxMjE6XHRzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC1cdTAwM2Vkcml2ZXJfZGF0YTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMjItXHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE3OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODA6XHRwbGF0LVx1MDAzZXN1c3BlbmQgPSBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODE6XHRwbGF0LVx1MDAzZXJlc3VtZSA9IHN0bW1hY19wY2lfcGxhdF9yZXN1bWU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTg3OiAqIHN0bW1hY19wY2lfcmVtb3ZlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTg4LSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5MS0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxOTI6c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTkzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDQ6XHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNTpcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwNi1cdHsgUENJX0RFVklDRV9EQVRBKFNZTk9QU1lTLCBHTUFDNV9JRCwgXHUwMDI2c25wc19nbWFjNV9wY2lfaW5mbykgfSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjEwPU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzdG1tYWNfaWRfdGFibGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMTI6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHN0bW1hY19wY2lfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxMy1cdC5uYW1lID0gU1RNTUFDX1JFU09VUkNFX05BTUUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjE0LVx0LmlkX3RhYmxlID0gc3RtbWFjX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIxNTpcdC5wcm9iZSA9IHN0bW1hY19wY2lfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjE2Olx0LnJlbW92ZSA9IHN0bW1hY19wY2lfcmVtb3ZlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxNy1cdC5kcml2ZXIgICAgICAgICA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIyMjptb2R1bGVfcGNpX2RyaXZlcihzdG1tYWNfcGNpX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjIzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODcxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgYHN0bW1hY2AgRHJpdmVyczogQSBTdHJhdGVnaWMgQXBwcm9hY2gqKgoKT2theSwgc28gYHN0bW1hY2AgaGFzIFBDSSBkcml2ZXJzLiBUaGF0JiMzOTtzIGdvb2QgbmV3czsgYHN0bW1hY19wY2kuY2AsIGBkd21hYy1pbnRlbC5jYCwgYGR3bWFjLWxvb25nc29uLmNgLCBgZHdtYWMtbW90b3Jjb21tLmNgIOKAkyBJIHNlZSB0aGUgcG90ZW50aWFsLiBNeSBmaXJzdCB0aG91Z2h0IGlzIFFFTVUsIHNpbmNlIFBDSSBkcml2ZXJzIHVzdWFsbHkgcGxheSB3ZWxsIHdpdGggdmlydHVhbCBlbnZpcm9ubWVudHMuIElmIFFFTVUgZW11bGF0ZWQgaXQsIHdlJiMzOTtkIGhhdmUgYSBzdHJhaWdodGZvcndhcmQgZnV6emluZyBzZXR1cC4gQnV0IGRvZXMgUUVNVSBlbXVsYXRlIGBzdG1tYWNgIHNwZWNpZmljYWxseT8gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBRRU1VIG5ldHdvcmsgZGV2aWNlIGxpc3QsIEkgc2VlIGEgZ29vZCBzZWxlY3Rpb24gb2YgZW11bGF0ZWQgTklDcyAoYGlteF9mZWMuY2AsIGBjYWRlbmNlX2dlbS5jYCwgYGUxMDAwLmNgLCBldGMuKSwgYnV0IG5vIGBzdG1tYWNgLiBIbW0uCgpXYWl0LCB0aG91Z2gsIGBzdG1tYWNgIGlzIHBvcHVsYXIgb24gQVJNIGJvYXJkcywgYW5kIFFFTVUgaGFzIGRlY2VudCBBUk0gZW11bGF0aW9uLiBJcyB0aGVyZSBhIGhvb2sgdGhlcmU/IERvZXMgUUVNVSBlbXVsYXRlIHRoZSBgc3RtbWFjYCBpbiBzb21lIEFSTSBib2FyZCBlbXVsYXRpb25zPyBUaGlzIGNvdWxkIGJlIGEgcHJvbWlzaW5nIGF2ZW51ZSwgYnV0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgc3l6a2FsbGVyLiBEb2VzIHN5emthbGxlciBvZmZlciBhIHBhdGggdG8gZnV6emluZyB0aGlzPyBTeXprYWxsZXIgb2Z0ZW4gdXNlcyB2UENJIGZvciBQQ0kgZGV2aWNlIGZ1enppbmcsIHByb3ZpZGVkIHRoZSBkcml2ZXIgYmluZHMgdG8gaXQuIFRoYXQmIzM5O3MgdGhlIGtleS4gQnV0IHdhaXQgYSBtaW51dGUuLi4gc3l6a2FsbGVyIGhhcyBgc3l6X3BjaV9kZXZpY2VgISBUaGlzIGlzIGludGVyZXN0aW5nLi4uIEl0IHNlZW1zIGxpa2UgSSBjYW4gaW5qZWN0IEFOWSBQQ0kgZGV2aWNlIHdpdGggdmVuZG9yIGFuZCBkZXZpY2UgSURzIHVzaW5nIHRoaXMgcHNldWRvLXN5c2NhbGwsIGEgaHVnZSBwbHVzISAKCk9rYXksIG5vdyBpdCYjMzk7cyBhYm91dCBjaGVja2luZyB0aGUgZHJpdmVyIGJpbmRpbmdzLiBUaGUgYHN0bW1hY19wY2lfZHJpdmVyYCBiaW5kcyB0byBgUENJX0RFVklDRV9EQVRBYCBlbnRyaWVzLi4uIHNwZWNpZmljYWxseSwgYFNUTU1BQ2AsIGBTVE1JQ1JPYCwgYW5kIGBTWU5PUFNZU2AuIFRoaXMgc291bmRzIGxpa2UgaXQgY291bGQgYmUgbXkgdGlja2V0LiBJIG5lZWQgdG8gZ2V0IHRoZSB2ZW5kb3IvZGV2aWNlIElEcyBmcm9tIHRoZXNlIGRlZmluaXRpb25zLiBPbmNlIEkgaGF2ZSB0aGUgdmVuZG9yIGFuZCBkZXZpY2UgSURzLCBzeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gY3JlYXRlIGFuIGluc3RhbmNlIGFuZCBJIGNhbiBmb2N1cyBteSBlZmZvcnRzIG9uIHRoYXQgZHJpdmVyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BDSV9ERVZJQ0VfREFUQVxcKFNUTU1BQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDQ6XHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwNS1cdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDM3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgU1RNTUFDIGluIFBDSSBJRCBEZWZpbml0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGtlcm5lbCYjMzk7cyBQQ0kgSUQgZGF0YWJhc2UsIHNwZWNpZmljYWxseSBgaW5jbHVkZS9saW51eC9wY2lfaWRzLmhgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gYFNUTU1BQ2AgdGhlcmUuIFRoaXMgaXMgYSBjb21tb24gYW5kIHVzdWFsbHkgZWZmaWNpZW50IHdheSB0byBpZGVudGlmeSBhbmQgdW5kZXJzdGFuZCB0aGUgUENJIGRldmljZSBJRHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBTVE1NQUMgRXRoZXJuZXQgTUFDIGNvbnRyb2xsZXIsIGEgY3JpdGljYWwgZmlyc3Qgc3RlcCBpbiBkZWJ1Z2dpbmcgb3Igd29ya2luZyB3aXRoIHRoZSBkcml2ZXIuIEkgbmVlZCB0aG9zZSB2ZW5kb3IgYW5kIGRldmljZSBJRHMgdG8gcHJvcGVybHkgZmlsdGVyIGFuZCBjbGFzc2lmeSB0aGUgaGFyZHdhcmUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BDSV9WRU5ET1JfSURfU1RNTUFDJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xOTI9c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5Ny0vKiBzeW50aGV0aWMgSUQsIG5vIG9mZmljaWFsIHZlbmRvciAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjE5ODojZGVmaW5lIFBDSV9WRU5ET1JfSURfU1RNTUFDXHRcdDB4MDcwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM5MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZyB0aGlzIERyaXZlcioqCgpPa2F5LCBzbyB0aGlzIGRldmljZSBoYXMgYSBzeW50aGV0aWMgSUQgb2YgYDB4MDcwMGAuIFRoZSBrZXkgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emluZyBjYW4gYmluZCB0byBpdC4gSWYgaXQgY2FuLCB3ZSYjMzk7cmUgaW4gYnVzaW5lc3MuIEJ1dCwgZG9lcyB0aGUgZHJpdmVyIGZ1bmN0aW9uIGNvcnJlY3RseSB3aXRob3V0IHJlYWwgaGFyZHdhcmU/IFRoYXQmIzM5O3MgdGhlIGNydXggb2YgaXQuCgpJZiB0aGUgZHJpdmVyIHByb2JlcyBzdWNjZXNzZnVsbHksIGl0JiMzOTtsbCB0cnkgdG8gcmVhZCBhbmQgd3JpdGUgdG8gTWVtb3J5LU1hcHBlZCBJL08gKE1NSU8pIHJlZ2lzdGVycy4gV2l0aG91dCBhY3R1YWwgaGFyZHdhcmUgcHJlc2VudCwgaXQgd2lsbCByZWFkIGAweGZmZmZmZmZmYCBvciB3aGF0ZXZlciB0aGUgUENJIHN1YnN5c3RlbSByZXR1cm5zIGZvciB1bm1hcHBlZCBtZW1vcnksIG9yIHRoZSBzeXprYWxsZXIgUENJIGZ1enplciB3aWxsIHByb3ZpZGUgcmFuZG9tIGRhdGEgZm9yIE1NSU8gcmVhZHMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCBzeXprYWxsZXImIzM5O3MgYHN5el9wY2lfZGV2aWNlYCBkb2VzbiYjMzk7dCBwZXJmZWN0bHkgZW11bGF0ZSBNTUlPLCBidXQgaXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmdXp6aW5nLgoKTXkgdGhpbmtpbmcgaXMsIGBzdG1tYWNfbWFjX2xpbmtfdXBgIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBQSFkgbGluayBnb2VzIHVwLiBUaGlzIGlzIGludGVyZXN0aW5nLiBJcyB0aGlzIGZ1bmN0aW9uIGFjY2Vzc2libGUgdGhyb3VnaCBzeXprYWxsZXI/IElmIHRoZSBkcml2ZXIgcHJvYmVzIHN1Y2Nlc3NmdWxseSDigJMgYW5kIHRoYXQmIzM5O3MgdGhlIGJpZyAmIzM5O2lmJiMzOTsg4oCTIHdoaWNoIGNvdWxkIGJlIGZhY2lsaXRhdGVkIGJ5IHNvbWUgUENJIGZ1enppbmcsIHRoZW4gaXQgd2lsbCByZWdpc3RlciBhIG5ldGRldi4gVGhlbiwgY29tbWFuZHMgbGlrZSBgaXAgbGluayBzZXQgZXRoWCB1cGAgc2hvdWxkIG9wZW4gdGhlIGRldmljZS4gVGhlIFBIWSBsaW5rIGNvbWluZyB1cCBzaG91bGQgdGhlbiB0cmlnZ2VyIHRoZSBgc3RtbWFjX21hY19saW5rX3VwYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBgc3RtbWFjYCB1dGlsaXplcyBgcGh5bGlua2AuIFRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBMZXQmIzM5O3MgY2hlY2sgc3BlY2lmaWNhbGx5IGlmIGBzdG1tYWNfbWFjX2xpbmtfdXBgIGlzIHJlYWNoYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX21hY19saW5rX3VwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MTA1Nj1zdGF0aWMgdm9pZCBzdG1tYWNfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTEwNjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjEwNjk6c3RhdGljIHZvaWQgc3RtbWFjX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0xMDcwLVx0XHRcdCAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MTI0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBzdG1tYWNfcGh5bGlua19tYWNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTI1MS1cdC5tYWNfbGlua19kb3duID0gc3RtbWFjX21hY19saW5rX2Rvd24sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjEyNTI6XHQubWFjX2xpbmtfdXAgPSBzdG1tYWNfbWFjX2xpbmtfdXAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTEyNTMtXHQubWFjX2Rpc2FibGVfdHhfbHBpID0gc3RtbWFjX21hY19kaXNhYmxlX3R4X2xwaSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzODAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBzdG1tYWMgRHJpdmVyIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgYSBwaHlsaW5rIGNhbGxiYWNrLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBjYW4gd2UgZnV6eiB0aGlzPyBUaGUgcGF0Y2ggYWx0ZXJzIGBzdG1tYWNfbWFjX2xpbmtfdXBgLCBzcGVjaWZpY2FsbHkgdG8gZGVhbCB3aXRoIHRoZXNlIG5ldyBoaWdoLXNwZWVkIHNldHRpbmdzOiBgU1BFRURfMTAwMDAwYCwgYFNQRUVEXzUwMDAwYCwgYFNQRUVEXzQwMDAwYCwgYW5kIGBTUEVFRF8yNTAwMGAgZm9yIGBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSWAgYW5kIGBQSFlfSU5URVJGQUNFX01PREVfWExHTUlJYC4KCk5vdywgaWYgSSByZWNhbGwgY29ycmVjdGx5LCB0aGUgY29kZSBvcmlnaW5hbGx5IGhhZCBhIG1vcmUgZ3JhbnVsYXIgYXBwcm9hY2gsIHdpdGggYSBkZWRpY2F0ZWQgY2hlY2sgZm9yIGBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSWAgYW5kIGl0cyBzcGVlZHMuIEl0IGxvb2tlZCBzb21ldGhpbmcgbGlrZSB0aGlzOgoKYGBgYwoJaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkgewoJCXN3aXRjaCAoc3BlZWQpIHsKCQljYXNlIFNQRUVEXzEwMDAwOgouLi4KYGBgCgpUaGUgbmV3IGNvZGUgc2VlbXMgdG8gaGF2ZSBhIHVuaWZpZWQgYHN3aXRjaCAoc3BlZWQpYCBzdGF0ZW1lbnQ6CgpgYGBjCglzd2l0Y2ggKHNwZWVkKSB7CgljYXNlIFNQRUVEXzEwMDAwMDoKCQljdHJsIHw9IHByaXYtJmd0O2h3LSZndDtsaW5rLnhsZ21paS5zcGVlZDEwMDAwMDsKCQlicmVhazsKLi4uCmBgYAoKU28sIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZTsgdGhhdCYjMzk7cyBjbGVhci4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIG1vZGlmaWNhdGlvbiB3b3J0aHkgb2YgZnV6emluZz8gSXQgZGVmaW5pdGVseSBpbnRyb2R1Y2VzIG5ldyBjb2RlIHBhdGhzLCBkZWFsaW5nIHdpdGggdGhlc2UgaGlnaGVyIHNwZWVkcy4gSWYgd2UgY2FuIGVuYWJsZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBsaWtlIGBDT05GSUdfU1RNTUFDX0VUSGAsIGBDT05GSUdfU1RNTUFDX1BDSWAsIGFuZCBgQ09ORklHX0RXTUFDX0lOVEVMYCwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciB0aGlzIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGBzdG1tYWNgIHRvIGRldGVybWluZSB0aGUgYmVzdCBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNUTU1BQ19FVEgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyOmNvbmZpZyBTVE1NQUNfRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNzEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBTVE1NQUMgUENJIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIFBDSSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoYXQgc3BlY2lmaWMgZHJpdmVyLiBMZXQmIzM5O3Mgc2VlLi4uIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSXQgc2hvdWxkIGNvbnRhaW4gYWxsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCByZWxhdGVkIHRvIGVuYWJsaW5nIFBDSSBzdXBwb3J0IHdpdGhpbiB0aGF0IGRyaXZlci4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgZGVwZW5kZW5jaWVzLCBtYXliZSBjaGVjayBmb3IgYW55IHNwZWNpZmljIHZlbmRvci1zcGVjaWZpYyBxdWlya3MsIGFuZCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBQQ0kgc3VwcG9ydCBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUgU1RNTUFDIGRyaXZlciBjb2RlIGJhc2UuIEkgZXhwZWN0IHRvIGZpbmQgb3B0aW9ucyByZWxhdGVkIHRvIHNlbGVjdGluZyB0aGUgUENJIGJ1cywgZGVmaW5pbmcgZGV2aWNlIElEcywgb3IgcG9zc2libHkgZW5hYmxpbmcgc3BlY2lmaWMgUEhZIGNvbmZpZ3VyYXRpb25zIHRpZWQgdG8gUENJLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1RNTUFDX1BDSSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM5OD1jb25maWcgRFdNQUNfTU9UT1JDT01NXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjQwNzpjb25maWcgU1RNTUFDX1BDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDgtXHR0cmlzdGF0ZSBcJiMzNDtTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTI2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBTVE1NQUMgUENJIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBTVE1NQUNfUENJYCBvcHRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyIHdoZW4gaXQmIzM5O3MgdXNlZCB3aXRoIFBDSSBpbnRlcmZhY2VzLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgcGFydGljdWxhciBkcml2ZXIgaGFuZGxlcyBQQ0ktc3BlY2lmaWMgZmVhdHVyZXMsIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcywgYW5kIGFueSBwb3RlbnRpYWwgY2F2ZWF0cyBvciBjb25zaWRlcmF0aW9ucyB3aGVuIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzLiBJIGFudGljaXBhdGUgdGhlIEtjb25maWcgZmlsZSB3aWxsIG91dGxpbmUgdGhlIGRlcGVuZGVuY2llcyBvbiB0aGUgYFBDSWAgYnVzIGluZnJhc3RydWN0dXJlLCB3aGF0IG90aGVyIGZlYXR1cmVzIG1pZ2h0IGJlIGNvdXBsZWQgd2l0aCBgU1RNTUFDX1BDSWAgc3VjaCBhcyBETUEgb3Igc3BlY2lmaWMgaGFyZHdhcmUgcmV2aXNpb25zLCBhbmQgd2hhdCBlZmZlY3QgdGhpcyBjb25maWd1cmF0aW9uIG1pZ2h0IGhhdmUgb24gdGhlIG92ZXJhbGwgc3lzdGVtIGltYWdlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGRpZmZlcmVudCBQQ0kgaW50ZXJydXB0IG1vZGVscywgcG93ZXIgbWFuYWdlbWVudCB3aXRoaW4gdGhlIFBDSSBjb250ZXh0LCBhbmQgaG93IGl0IGRldGVjdHMgYW5kIGNvbmZpZ3VyZXMgdGhlIGhhcmR3YXJlIGJhc2VkIG9uIFBDSSBkZXZpY2UgSURzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gZm9yIGEgZ2l2ZW4gaGFyZHdhcmUgcGxhdGZvcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzkwOlx0XHRkZWZhdWx0IE1BQ0hfTE9PTkdTT042NFxuIDM5MTpcdFx0ZGVwZW5kcyBvbiAoTUFDSF9MT09OR1NPTjY0IHx8IENPTVBJTEVfVEVTVCkgXHUwMDI2XHUwMDI2IFBDSVxuIDM5MjpcdFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXG4gMzkzOlx0XHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxuIDM5NDpcdFx0aGVscFxuIDM5NTpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIExPT05HU09OIFBDSSBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIsXG4gMzk2Olx0XHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gTG9vbmdzb24tMksxMDAwIFNvQyBhbmQgTFM3QTEwMDAgYnJpZGdlLlxuIDM5NzpcdFxuIDM5ODpcdGNvbmZpZyBEV01BQ19NT1RPUkNPTU1cbiAzOTk6XHRcdHRyaXN0YXRlIFwmIzM0O01vdG9yY29tbSBQQ0kgRFdNQUMgc3VwcG9ydFwmIzM0O1xuIDQwMDpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiA0MDE6XHRcdHNlbGVjdCBNT1RPUkNPTU1fUEhZXG4gNDAyOlx0XHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxuIDQwMzpcdFx0aGVscFxuIDQwNDpcdFx0ICBUaGlzIGVuYWJsZXMgZ2x1ZSBkcml2ZXIgZm9yIE1vdG9yY29tbSBEV01BQy1iYXNlZCBQQ0kgRXRoZXJuZXRcbiA0MDU6XHRcdCAgY29udHJvbGxlcnMuIEN1cnJlbnRseSBvbmx5IFlUNjgwMSBpcyBzdXBwb3J0ZWQuXG4gNDA2Olx0XG4gNDA3Olx0Y29uZmlnIFNUTU1BQ19QQ0lcbiA0MDg6XHRcdHRyaXN0YXRlIFwmIzM0O1NUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcJiMzNDtcbiA0MDk6XHRcdGRlcGVuZHMgb24gUENJXG4gNDEwOlx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiA0MTE6XHRcdHNlbGVjdCBTVE1NQUNfTElCUENJXG4gNDEyOlx0XHRoZWxwXG4gNDEzOlx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgYnVzIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWMgZHJpdmVyLlxuIDQxNDpcdFx0ICBUaGlzIGRyaXZlciB3YXMgdGVzdGVkIG9uIFhMSU5YIFhDMlYzMDAwIEZGMTE1MkFNVDAyMjFcbiA0MTU6XHRcdCAgRDEyMTU5OTRBIFZJUlRFWCBGUEdBIGJvYXJkIGFuZCBTTlBTIFFvUyBJUEsgUHJvdG90eXBpbmcgS2l0LlxuIDQxNjpcdFxuIDQxNzpcdFx0ICBJZiB5b3UgaGF2ZSBhIGNvbnRyb2xsZXIgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLlxuIDQxODpcdFxuIDQxOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMzMQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNUTU1BQyBEcml2ZXIgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMsIGBTVE1NQUNfRVRIYCBhbmQgYFNUTU1BQ19QQ0lgLiBNeSBwcmltYXJ5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGBzdG1tYWNfbWFjX2xpbmtfdXBgIGZ1bmN0aW9uIGNhbiBldmVuIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LiBJJiMzOTttIHRoaW5raW5nLCBpZiBzeXprYWxsZXIgdGhyb3dzIGEgUENJIGRldmljZSBhdCB0aGUgc3lzdGVtIHdpdGggdGhhdCB2ZW5kb3IgSUQsIDB4MDcwMCwgdGhlIGBzdG1tYWNfcGNpYCBkcml2ZXIgaXMgZ29pbmcgdG8gdHJ5IHRvIHRha2Ugb3duZXJzaGlwIG9mIGl0LCByaWdodD8KClRoZW4sIHRoZSBkcml2ZXIgc2hvdWxkIG1hcCB0aGUgUENJIEJBUnMgYW5kIGJlZ2luIGl0cyBNQUMgaW5pdGlhbGl6YXRpb24gcm91dGluZS4gQnV0LCBiZWNhdXNlIHRoZSBoYXJkd2FyZSBpcyBlc3NlbnRpYWxseSBzaW11bGF0ZWQsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgcG90ZW50aWFsIHBpdGZhbGxzIGR1cmluZyB0aGlzIHByb2Nlc3MuIEl0IGNvdWxkIGZhaWwgcHJldHR5IGVhcmx5IG9uLCBtYXliZSBnZXR0aW5nIHN0dWNrIHdhaXRpbmcgZm9yIGEgcmVzZXQgYml0LCBvciBtYXliZSBpdCB0cmllcyB0byByZWFkIHRoZSBNQUMgdmVyc2lvbiByZWdpc3RlciBhbmQgcmVwb3J0cyBhbiBlcnJvciBzaW5jZSBpdCBjYW4mIzM5O3QgZmluZCBhIHZhbGlkIHJlc3BvbnNlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBzdG1tYWNfZHZyX3Byb2JlYCBmdW5jdGlvbiBpbiBgc3RtbWFjX21haW4uY2AgaW4gZGV0YWlsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIGl0JiMzOTtzIGNhcGFibGUgb2Ygc3VjY2VlZGluZywgZXZlbiB3aXRoIHRoZSBzaW11bGF0ZWQgTU1JTyBhY2Nlc3Mgd2UmIzM5O2xsIGhhdmUgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgcHJvYmUgZnVuY3Rpb24gY2FuIG92ZXJjb21lIHRoZSBsYWNrIG9mIGFjdHVhbCBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX2R2cl9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jPTI4Mz1zdGF0aWMgaW50IGR3Y19ldGhfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jLTMyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmM6MzMwOlx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYy0zMzEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLXBsYXQuYz00Mj1zdGF0aWMgaW50IGludGVsX2V0aF9wbGF0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jLTExNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLXBsYXQuYzoxMTg6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmMtMTE5LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEyMzI9c3RhdGljIGludCBpbnRlbF9ldGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTMwOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTMxMDpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzMTEtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jPTM3ND1zdGF0aWMgaW50IGlwcTgwNnhfZ21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWlwcTgwNnguYy00ODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmM6NDgzOlx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWlwcTgwNnguYy00ODQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz00OTg9c3RhdGljIGludCBsb29uZ3Nvbl9kd21hY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTYxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1NjI6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0LCBcdTAwMjZyZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NjMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYz00Mj1zdGF0aWMgaW50IGxwYzE4eHhfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmMtNjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmM6Njg6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jLTY5LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jPTU5OT1zdGF0aWMgaW50IG1lZGlhdGVrX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYy02NDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jOjY0MjpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lZGlhdGVrLmMtNjQzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jPTQ3PXN0YXRpYyBpbnQgbWVzb242X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb24uYy03Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmM6NzM6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb24uYy03NC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jPTM4Mj1zdGF0aWMgaW50IG1lc29uOGJfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbjhiLmMtNDYzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jOjQ2NDpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbjhiLmMtNDY1LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0yOTM9c3RhdGljIGludCBtb3RvcmNvbW1fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0zNTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYzozNTk6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdCwgXHUwMDI2cmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTM2MC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jPTQ4PXN0YXRpYyBpbnQgcnpuMV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYy02Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYzo2ODpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtNjktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jPTM1PXN0YXRpYyBpbnQgc29waGdvX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmMtNjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYzo2NTpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmMtNjYtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNwYWNlbWl0LmM9MTQ3PXN0YXRpYyBpbnQgc3BhY2VtaXRfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jLTIwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNwYWNlbWl0LmM6MjA3Olx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jLTIwOC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYz05MD1zdGF0aWMgaW50IHN0YXJmaXZlX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYy0xNTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jOjE1MzpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jLTE1NC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYz01MjU9c3RhdGljIGludCBzdG0zMl9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmMtNTc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYzo1Nzk6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jLTU4MC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYz0xMTA1PXN0YXRpYyBpbnQgc3VuOGlfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jOjEyMDI6XHQvKiB0aGUgTUFDIGlzIHJ1bnRpbWUgc3VzcGVuZGVkIGFmdGVyIHN0bW1hY19kdnJfcHJvYmUoKSwgc28gd2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwMy1cdCAqIG5lZWQgdG8gZW5zdXJlIHRoZSBNQUMgcmVzdW1lIGJhY2sgYmVmb3JlIG90aGVyIG9wZXJhdGlvbnMgc3VjaFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwOC1cdC8qIFRoZSBtdXggbXVzdCBiZSByZWdpc3RlcmVkIGFmdGVyIHBhcmVudCBNRElPXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jOjEyMDk6XHQgKiBzbyBhZnRlciBzdG1tYWNfZHZyX3Byb2JlKClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIxMC1cdCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM9MjE0PXN0YXRpYyBpbnQgdGVncmFfbWdiZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmMtMzc1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYzozNzY6XHRlcnIgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0LCBcdTAwMjZyZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYy0zNzctXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmM9MjA1PXN0YXRpYyBpbnQgdmlzY29udGlfZXRoX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYy0yMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jOjIzNzpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmMtMjM4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MTM9dm9pZCBzdG1tYWNfZHZyX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDE0OmludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQxNS1cdFx0ICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc3Nz1FWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGxhdF9kYXRfYWxsb2MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03Nzc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3Nzc5OnN0YXRpYyBpbnQgX19zdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzc4MC1cdFx0XHQgICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODA4MS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODA4MjogKiBzdG1tYWNfZHZyX3Byb2JlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwODMtICogQGRldjogZGV2aWNlIHBvaW50ZXJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwOTAtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgwOTE6aW50IHN0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDkyLVx0XHQgICAgIHN0cnVjdCBzdG1tYWNfcmVzb3VyY2VzICpyZXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTAyOlx0cmV0ID0gX19zdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIHJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMDMtXHRpZiAocmV0IFx1MDAyNlx1MDAyNiBwbGF0X2RhdC1cdTAwM2VleGl0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEwNy19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMDg6RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX2R2cl9wcm9iZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMDktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTExOD1zdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODM6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdCwgXHUwMDI2cmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jPTg0OD1pbnQgc3RtbWFjX3BsdGZyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMtODU2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmM6ODU3Olx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIHJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy04NTgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkwNwoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBtaW5kIGlzIGp1bXBpbmcgYXJvdW5kIGEgYml0IGhlcmUsIGZvY3VzaW5nIG9uIHRoaXMgYF9fc3RtbWFjX2R2cl9wcm9iZWAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgYnVsayBvZiB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBTVE1NQUMgZHJpdmVyIGhhcHBlbnMuIFRoYXQgbWFrZXMgbWUgdGhpbmsuLi4gaWYgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIHdpdGggdGhlIGhhcmR3YXJlLCBlc3BlY2lhbGx5IHNvbWV0aGluZyBiYXNpYyBsaWtlIE1NSU8gKE1lbW9yeS1NYXBwZWQgSS9PKSBhY2Nlc3MsIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSBpdCBmYWlsICplYXJseSogaW4gdGhpcyBwcm9iZSBmdW5jdGlvbi4gU28sIHRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGNhbiBJIGZvcmNlIGEgZmFpbHVyZSBieSBwcm92aWRpbmcgZmFrZSBNTUlPIGFuZCBzZWUgd2hhdCBoYXBwZW5zPyBUaGlzIHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgYXZlbnVlIGZvciBkZWJ1Z2dpbmcuIEkgd2FudCB0byBzZWUgaG93IHJvYnVzdCB0aGUgZXJyb3IgaGFuZGxpbmcgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc3NzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc3Nzk6XHRzdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG43NzgwOlx0XHRcdFx0ICAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcbjc3ODE6XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyAqcmVzKVxuNzc4MjpcdHtcbjc3ODM6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDtcbjc3ODQ6XHRcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdjtcbjc3ODU6XHRcdGludCBpLCByZXQgPSAwO1xuNzc4NjpcdFx0dTggcnhxO1xuNzc4NzpcdFxuNzc4ODpcdFx0aWYgKCFwbGF0X2RhdC1cdTAwM2VkbWFfY2ZnIHx8ICFwbGF0X2RhdC1cdTAwM2VkbWFfY2ZnLVx1MDAzZXBibCkge1xuNzc4OTpcdFx0XHRkZXZfZXJyKGRldmljZSwgXCYjMzQ7aW52YWxpZCBETUEgY29uZmlndXJhdGlvblxcblwmIzM0Oyk7XG43NzkwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzc5MTpcdFx0fVxuNzc5MjpcdFxuNzc5MzpcdFx0bmRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXZfbXFzKGRldmljZSwgc2l6ZW9mKHN0cnVjdCBzdG1tYWNfcHJpdiksXG43Nzk0Olx0XHRcdFx0XHQgICAgICAgTVRMX01BWF9UWF9RVUVVRVMsIE1UTF9NQVhfUlhfUVVFVUVTKTtcbjc3OTU6XHRcdGlmICghbmRldilcbjc3OTY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG43Nzk3Olx0XG43Nzk4Olx0XHRTRVRfTkVUREVWX0RFVihuZGV2LCBkZXZpY2UpO1xuNzc5OTpcdFxuNzgwMDpcdFx0cHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuNzgwMTpcdFx0cHJpdi1cdTAwM2VkZXZpY2UgPSBkZXZpY2U7XG43ODAyOlx0XHRwcml2LVx1MDAzZWRldiA9IG5kZXY7XG43ODAzOlx0XG43ODA0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNVExfTUFYX1JYX1FVRVVFUzsgaSYjNDM7JiM0MzspXG43ODA1Olx0XHRcdHU2NF9zdGF0c19pbml0KFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLnJ4cV9zdGF0c1tpXS5uYXBpX3N5bmNwKTtcbjc4MDY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1UTF9NQVhfVFhfUVVFVUVTOyBpJiM0MzsmIzQzOykge1xuNzgwNzpcdFx0XHR1NjRfc3RhdHNfaW5pdChcdTAwMjZwcml2LVx1MDAzZXhzdGF0cy50eHFfc3RhdHNbaV0ucV9zeW5jcCk7XG43ODA4Olx0XHRcdHU2NF9zdGF0c19pbml0KFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLnR4cV9zdGF0c1tpXS5uYXBpX3N5bmNwKTtcbjc4MDk6XHRcdH1cbjc4MTA6XHRcbjc4MTE6XHRcdHByaXYtXHUwMDNleHN0YXRzLnBjcHVfc3RhdHMgPVxuNzgxMjpcdFx0XHRkZXZtX25ldGRldl9hbGxvY19wY3B1X3N0YXRzKGRldmljZSwgc3RydWN0IHN0bW1hY19wY3B1X3N0YXRzKTtcbjc4MTM6XHRcdGlmICghcHJpdi1cdTAwM2V4c3RhdHMucGNwdV9zdGF0cylcbjc4MTQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG43ODE1Olx0XG43ODE2Olx0XHRzdG1tYWNfc2V0X2V0aHRvb2xfb3BzKG5kZXYpO1xuNzgxNzpcdFx0cHJpdi1cdTAwM2VwYXVzZV90aW1lID0gcGF1c2U7XG43ODE4Olx0XHRwcml2LVx1MDAzZXBsYXQgPSBwbGF0X2RhdDtcbjc4MTk6XHRcdHByaXYtXHUwMDNlaW9hZGRyID0gcmVzLVx1MDAzZWFkZHI7XG43ODIwOlx0XHRwcml2LVx1MDAzZWRldi1cdTAwM2ViYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylyZXMtXHUwMDNlYWRkcjtcbjc4MjE6XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VkbWFfY2ZnLVx1MDAzZW11bHRpX21zaV9lbiA9XG43ODIyOlx0XHRcdChwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX01VTFRJX01TSV9FTik7XG43ODIzOlx0XG43ODI0Olx0XHRwcml2LVx1MDAzZWRldi1cdTAwM2VpcnEgPSByZXMtXHUwMDNlaXJxO1xuNzgyNTpcdFx0cHJpdi1cdTAwM2V3b2xfaXJxID0gcmVzLVx1MDAzZXdvbF9pcnE7XG43ODI2Olx0XHRwcml2LVx1MDAzZXNmdHlfaXJxID0gcmVzLVx1MDAzZXNmdHlfaXJxO1xuNzgyNzpcdFxuNzgyODpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfTVVMVElfTVNJX0VOKSB7XG43ODI5Olx0XHRcdHJldCA9IHN0bW1hY19tc2lfaW5pdChwcml2LCByZXMpO1xuNzgzMDpcdFx0XHRpZiAocmV0KVxuNzgzMTpcdFx0XHRcdHJldHVybiByZXQ7XG43ODMyOlx0XHR9XG43ODMzOlx0XG43ODM0Olx0XHRpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihyZXMtXHUwMDNlbWFjKSlcbjc4MzU6XHRcdFx0ZXRoX2h3X2FkZHJfc2V0KHByaXYtXHUwMDNlZGV2LCByZXMtXHUwMDNlbWFjKTtcbjc4MzY6XHRcbjc4Mzc6XHRcdGRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIHByaXYtXHUwMDNlZGV2KTtcbjc4Mzg6XHRcbjc4Mzk6XHRcdC8qIFZlcmlmeSBkcml2ZXIgYXJndW1lbnRzICovXG43ODQwOlx0XHRzdG1tYWNfdmVyaWZ5X2FyZ3MoKTtcbjc4NDE6XHRcbjc4NDI6XHRcdHByaXYtXHUwMDNlYWZfeGRwX3pjX3FwcyA9IGJpdG1hcF96YWxsb2MoTVRMX01BWF9UWF9RVUVVRVMsIEdGUF9LRVJORUwpO1xuNzg0MzpcdFx0aWYgKCFwcml2LVx1MDAzZWFmX3hkcF96Y19xcHMpXG43ODQ0Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuNzg0NTpcdFxuNzg0NjpcdFx0LyogQWxsb2NhdGUgd29ya3F1ZXVlICovXG43ODQ3Olx0XHRwcml2LVx1MDAzZXdxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoXCYjMzQ7c3RtbWFjX3dxXCYjMzQ7KTtcbjc4NDg6XHRcdGlmICghcHJpdi1cdTAwM2V3cSkge1xuNzg0OTpcdFx0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIHdvcmtxdWV1ZVxcblwmIzM0Oyk7XG43ODUwOlx0XHRcdHJldCA9IC1FTk9NRU07XG43ODUxOlx0XHRcdGdvdG8gZXJyb3Jfd3FfaW5pdDtcbjc4NTI6XHRcdH1cbjc4NTM6XHRcbjc4NTQ6XHRcdElOSVRfV09SSyhcdTAwMjZwcml2LVx1MDAzZXNlcnZpY2VfdGFzaywgc3RtbWFjX3NlcnZpY2VfdGFzayk7XG43ODU1Olx0XG43ODU2Olx0XHR0aW1lcl9zZXR1cChcdTAwMjZwcml2LVx1MDAzZWVlZV9jdHJsX3RpbWVyLCBzdG1tYWNfZWVlX2N0cmxfdGltZXIsIDApO1xuNzg1NzpcdFxuNzg1ODpcdFx0LyogT3ZlcnJpZGUgd2l0aCBrZXJuZWwgcGFyYW1ldGVycyBpZiBzdXBwbGllZCBYWFggQ1JTIFhYWFxuNzg1OTpcdFx0ICogdGhpcyBuZWVkcyB0byBoYXZlIG11bHRpcGxlIGluc3RhbmNlc1xuNzg2MDpcdFx0ICovXG43ODYxOlx0XHRpZiAoKHBoeWFkZHIgXHUwMDNlPSAwKSBcdTAwMjZcdTAwMjYgKHBoeWFkZHIgXHUwMDNjPSAzMSkpXG43ODYyOlx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwaHlfYWRkciA9IHBoeWFkZHI7XG43ODYzOlx0XG43ODY0Olx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXN0bW1hY19yc3QpIHtcbjc4NjU6XHRcdFx0cmV0ID0gcmVzZXRfY29udHJvbF9hc3NlcnQocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXN0bW1hY19yc3QpO1xuNzg2NjpcdFx0XHRyZXNldF9jb250cm9sX2RlYXNzZXJ0KHByaXYtXHUwMDNlcGxhdC1cdTAwM2VzdG1tYWNfcnN0KTtcbjc4Njc6XHRcdFx0LyogU29tZSByZXNldCBjb250cm9sbGVycyBoYXZlIG9ubHkgcmVzZXQgY2FsbGJhY2sgaW5zdGVhZCBvZlxuNzg2ODpcdFx0XHQgKiBhc3NlcnQgJiM0MzsgZGVhc3NlcnQgY2FsbGJhY2tzIHBhaXIuXG43ODY5Olx0XHRcdCAqL1xuNzg3MDpcdFx0XHRpZiAocmV0ID09IC1FTk9UU1VQUClcbjc4NzE6XHRcdFx0XHRyZXNldF9jb250cm9sX3Jlc2V0KHByaXYtXHUwMDNlcGxhdC1cdTAwM2VzdG1tYWNfcnN0KTtcbjc4NzI6XHRcdH1cbjc4NzM6XHRcbjc4NzQ6XHRcdHJldCA9IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXN0bW1hY19haGJfcnN0KTtcbjc4NzU6XHRcdGlmIChyZXQgPT0gLUVOT1RTVVBQKVxuNzg3NjpcdFx0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt1bmFibGUgdG8gYnJpbmcgb3V0IG9mIGFoYiByZXNldDogJXBlXFxuXCYjMzQ7LFxuNzg3NzpcdFx0XHRcdEVSUl9QVFIocmV0KSk7XG43ODc4Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODIzCgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBfX3N0bW1hY19kdnJfcHJvYmVgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIGBfX3N0bW1hY19kdnJfcHJvYmVgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBmcmVzaCBtZW50YWwgbW9kZWwuIEkgYWxyZWFkeSBoYXZlIGEgZGVjZW50IGdyYXNwIG9mIHRoZSBvdmVyYWxsIFNUTU1BQyBkcml2ZXIgc3RydWN0dXJlLCBhbmQgSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIGluaXRpYWxpemF0aW9uIGZsb3cgYSBmZXcgdGltZXMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBwcm9iZSBmdW5jdGlvbiYjMzk7cyByb2xlIHdpdGhpbiB0aGF0IGNvbnRleHQsIGluIGRldGFpbC4gV2hhdCBhcmUgdGhlIGtleSBvcGVyYXRpb25zIGl0IHBlcmZvcm1zPyBXaGVyZSBkb2VzIGl0IGZpdCBpbnRvIHRoZSBkZXZpY2UgZGlzY292ZXJ5IGFuZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIHRoZSBjb3JlIGhhcmR3YXJlLXNwZWNpZmljIGJyaW5nLXVwIGFmdGVyIHRoZSBnZW5lcmljIGRyaXZlciBoYXMgbG9hZGVkLCBoYW5kbGluZyB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgY29uZmlndXJpbmcgdGhlIHNwZWNpZmljIFNUTU1BQyB2YXJpYW50LiBQcm9iYWJseSBzZXR0aW5nIHVwIHRoZSBETUEgY2hhbm5lbHMsIGludGVycnVwdCBoYW5kbGluZywgYW5kIG1heWJlIHNvbWUgY2xvY2sgY29uZmlndXJhdGlvbiBpZiBpdCYjMzk7cyBub3QgaGFuZGxlZCBlYXJsaWVyLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uOyB0aGF0JiMzOTtzIGFsd2F5cyBhIGNydWNpYWwgYXJlYSBmb3IgZGVidWdnaW5nLiBBbnkgcmVnaXN0ZXIgYWNjZXNzZXMgb3IgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb25zIHdpbGwgZGVtYW5kIHNjcnV0aW55LiBUaW1lIHRvIGp1bXAgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgc3VycHJpc2VzIGl0IGhvbGRzLiBMZXQmIzM5O3Mgc2VlIGlmIG15IGluaXRpYWwgYXNzdW1wdGlvbnMgYWxpZ24uIEkmIzM5O20gaG9waW5nIEkgY2FuIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODc5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3ODc5Olx0XHQvKiBXYWl0IGEgYml0IGZvciB0aGUgcmVzZXQgdG8gdGFrZSBlZmZlY3QgKi9cbjc4ODA6XHRcdHVkZWxheSgxMCk7XG43ODgxOlx0XG43ODgyOlx0XHQvKiBJbml0IE1BQyBhbmQgZ2V0IHRoZSBjYXBhYmlsaXRpZXMgKi9cbjc4ODM6XHRcdHJldCA9IHN0bW1hY19od19pbml0KHByaXYpO1xuNzg4NDpcdFx0aWYgKHJldClcbjc4ODU6XHRcdFx0Z290byBlcnJvcl9od19pbml0O1xuNzg4NjpcdFxuNzg4NzpcdFx0LyogT25seSBEV01BQyBjb3JlIHZlcnNpb24gNS4yMCBvbndhcmRzIHN1cHBvcnRzIEhXIGRlc2NyaXB0b3IgcHJlZmV0Y2guXG43ODg4Olx0XHQgKi9cbjc4ODk6XHRcdGlmIChwcml2LVx1MDAzZXN5bm9wc3lzX2lkIFx1MDAzYyBEV01BQ19DT1JFXzVfMjApXG43ODkwOlx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VkbWFfY2ZnLVx1MDAzZWRjaGUgPSBmYWxzZTtcbjc4OTE6XHRcbjc4OTI6XHRcdHN0bW1hY19jaGVja19ldGhlcl9hZGRyKHByaXYpO1xuNzg5MzpcdFxuNzg5NDpcdFx0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2c3RtbWFjX25ldGRldl9vcHM7XG43ODk1Olx0XG43ODk2Olx0XHRuZGV2LVx1MDAzZXhkcF9tZXRhZGF0YV9vcHMgPSBcdTAwMjZzdG1tYWNfeGRwX21ldGFkYXRhX29wcztcbjc4OTc6XHRcdG5kZXYtXHUwMDNleHNrX3R4X21ldGFkYXRhX29wcyA9IFx1MDAyNnN0bW1hY194c2tfdHhfbWV0YWRhdGFfb3BzO1xuNzg5ODpcdFxuNzg5OTpcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8XG43OTAwOlx0XHRcdFx0ICAgIE5FVElGX0ZfUlhDU1VNO1xuNzkwMTpcdFx0bmRldi1cdTAwM2V4ZHBfZmVhdHVyZXMgPSBORVRERVZfWERQX0FDVF9CQVNJQyB8IE5FVERFVl9YRFBfQUNUX1JFRElSRUNUIHxcbjc5MDI6XHRcdFx0XHQgICAgIE5FVERFVl9YRFBfQUNUX1hTS19aRVJPQ09QWTtcbjc5MDM6XHRcbjc5MDQ6XHRcdHJldCA9IHN0bW1hY190Y19pbml0KHByaXYsIHByaXYpO1xuNzkwNTpcdFx0aWYgKCFyZXQpIHtcbjc5MDY6XHRcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xuNzkwNzpcdFx0fVxuNzkwODpcdFxuNzkwOTpcdFx0c3RtbWFjX3NldF9nc29fZmVhdHVyZXMobmRldik7XG43OTEwOlx0XG43OTExOlx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLnNwaGVuIFx1MDAyNlx1MDAyNlxuNzkxMjpcdFx0ICAgICEocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZsYWdzIFx1MDAyNiBTVE1NQUNfRkxBR19TUEhfRElTQUJMRSkpIHtcbjc5MTM6XHRcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0dSTztcbjc5MTQ6XHRcdFx0cHJpdi1cdTAwM2VzcGhfY2FwYWJsZSA9IHRydWU7XG43OTE1Olx0XHRcdHByaXYtXHUwMDNlc3BoX2FjdGl2ZSA9IHByaXYtXHUwMDNlc3BoX2NhcGFibGU7XG43OTE2Olx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtTUEggZmVhdHVyZSBlbmFibGVkXFxuXCYjMzQ7KTtcbjc5MTc6XHRcdH1cbjc5MTg6XHRcbjc5MTk6XHRcdC8qIElkZWFsbHkgb3VyIGhvc3QgRE1BIGFkZHJlc3Mgd2lkdGggaXMgdGhlIHNhbWUgYXMgZm9yIHRoZVxuNzkyMDpcdFx0ICogZGV2aWNlLiBIb3dldmVyLCBpdCBtYXkgZGlmZmVyIGFuZCB0aGVuIHdlIGhhdmUgdG8gdXNlIG91clxuNzkyMTpcdFx0ICogaG9zdCBETUEgd2lkdGggZm9yIGFsbG9jYXRpb24gYW5kIHRoZSBkZXZpY2UgRE1BIHdpZHRoIGZvclxuNzkyMjpcdFx0ICogcmVnaXN0ZXIgaGFuZGxpbmcuXG43OTIzOlx0XHQgKi9cbjc5MjQ6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlaG9zdF9kbWFfd2lkdGgpXG43OTI1Olx0XHRcdHByaXYtXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vob3N0X2RtYV93aWR0aDtcbjc5MjY6XHRcdGVsc2Vcbjc5Mjc6XHRcdFx0cHJpdi1cdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoID0gcHJpdi1cdTAwM2VkbWFfY2FwLmFkZHI2NDtcbjc5Mjg6XHRcbjc5Mjk6XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGgpIHtcbjc5MzA6XHRcdFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXZpY2UsXG43OTMxOlx0XHRcdFx0XHRETUFfQklUX01BU0socHJpdi1cdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoKSk7XG43OTMyOlx0XHRcdGlmICghcmV0KSB7XG43OTMzOlx0XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1VzaW5nICVkLyVkIGJpdHMgRE1BIGhvc3QvZGV2aWNlIHdpZHRoXFxuXCYjMzQ7LFxuNzkzNDpcdFx0XHRcdFx0IHByaXYtXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCwgcHJpdi1cdTAwM2VkbWFfY2FwLmFkZHI2NCk7XG43OTM1Olx0XG43OTM2Olx0XHRcdFx0Lypcbjc5Mzc6XHRcdFx0XHQgKiBJZiBtb3JlIHRoYW4gMzIgYml0cyBjYW4gYmUgYWRkcmVzc2VkLCBtYWtlIHN1cmUgdG9cbjc5Mzg6XHRcdFx0XHQgKiBlbmFibGUgZW5oYW5jZWQgYWRkcmVzc2luZyBtb2RlLlxuNzkzOTpcdFx0XHRcdCAqL1xuNzk0MDpcdFx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0RNQV9BRERSX1RfNjRCSVQpKVxuNzk0MTpcdFx0XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZWRtYV9jZmctXHUwMDNlZWFtZSA9IHRydWU7XG43OTQyOlx0XHRcdH0gZWxzZSB7XG43OTQzOlx0XHRcdFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXZpY2UsIERNQV9CSVRfTUFTSygzMikpO1xuNzk0NDpcdFx0XHRcdGlmIChyZXQpIHtcbjc5NDU6XHRcdFx0XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O0ZhaWxlZCB0byBzZXQgRE1BIE1hc2tcXG5cJiMzNDspO1xuNzk0NjpcdFx0XHRcdFx0Z290byBlcnJvcl9od19pbml0O1xuNzk0NzpcdFx0XHRcdH1cbjc5NDg6XHRcbjc5NDk6XHRcdFx0XHRwcml2LVx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGggPSAzMjtcbjc5NTA6XHRcdFx0fVxuNzk1MTpcdFx0fVxuNzk1MjpcdFxuNzk1MzpcdFx0bmRldi1cdTAwM2VmZWF0dXJlcyB8PSBuZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHwgTkVUSUZfRl9ISUdIRE1BO1xuNzk1NDpcdFx0bmRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMod2F0Y2hkb2cpO1xuNzk1NTpcdCNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRFxuNzk1NjpcdFx0LyogQm90aCBtYWMxMDAgYW5kIGdtYWMgc3VwcG9ydCByZWNlaXZlIFZMQU4gdGFnIGRldGVjdGlvbiAqL1xuNzk1NzpcdFx0bmRldi1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9TVEFHX1JYO1xuNzk1ODpcdFx0aWYgKGR3bWFjX2lzX3htYWMocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSkpIHtcbjc5NTk6XHRcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWDtcbjc5NjA6XHRcdFx0cHJpdi1cdTAwM2Vody1cdTAwM2Vod192bGFuX2VuID0gdHJ1ZTtcbjc5NjE6XHRcdH1cbjc5NjI6XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAudmxoYXNoKSB7XG43OTYzOlx0XHRcdG5kZXYtXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xuNzk2NDpcdFx0XHRuZGV2LVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9TVEFHX0ZJTFRFUjtcbjc5NjU6XHRcdH1cbjc5NjY6XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAudmxpbnMpXG43OTY3Olx0XHRcdG5kZXYtXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfVFg7XG43OTY4Olx0I2VuZGlmXG43OTY5Olx0XHRwcml2LVx1MDAzZW1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1ZywgZGVmYXVsdF9tc2dfbGV2ZWwpO1xuNzk3MDpcdFxuNzk3MTpcdFx0cHJpdi1cdTAwM2V4c3RhdHMudGhyZXNob2xkID0gdGM7XG43OTcyOlx0XG43OTczOlx0XHQvKiBJbml0aWFsaXplIFJTUyAqL1xuNzk3NDpcdFx0cnhxID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2U7XG43OTc1Olx0XHRuZXRkZXZfcnNzX2tleV9maWxsKHByaXYtXHUwMDNlcnNzLmtleSwgc2l6ZW9mKHByaXYtXHUwMDNlcnNzLmtleSkpO1xuNzk3NjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwcml2LVx1MDAzZXJzcy50YWJsZSk7IGkmIzQzOyYjNDM7KVxuNzk3NzpcdFx0XHRwcml2LVx1MDAzZXJzcy50YWJsZVtpXSA9IGV0aHRvb2xfcnhmaF9pbmRpcl9kZWZhdWx0KGksIHJ4cSk7XG43OTc4Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDAwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gY2hlY2tpbmcgYHN0bW1hY19od19pbml0YDoKCioqRGl2aW5nIGludG8gYHN0bW1hY19od19pbml0YCoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBtZW50YWxseSBnb2luZyB0aHJvdWdoIGBzdG1tYWNfaHdfaW5pdGAuIEZyb20gd2hhdCBJIGtub3cgYWJvdXQgU1RNTUFDIGRyaXZlcnMsIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGxpa2VseSBwbGFjZSB3aGVyZSB0aGUgY29yZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBtYWdpYyBoYXBwZW5zLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciB0aGluZ3MgbGlrZSBjbG9jayBlbmFibGluZywgUEhZIHNldHVwIChpZiByZWxldmFudCksIERNQSBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24sIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBpbml0aWFsIHJlZ2lzdGVyIHdyaXRlcyB0byB0aGUgTUFDIGl0c2VsZi4KCkkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBsb3ctbGV2ZWwgY29uZmlndXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBoZXJlLiBJIHdhbnQgdG8gY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBtaXNzZWQgc3RlcHMgb3IgYW55IGFzc3VtcHRpb25zIHRoYXQgbWlnaHQgYmUgY2F1c2luZyBzdWJ0bGUgaXNzdWVzIGRvd24gdGhlIGxpbmUuIEkgYW0gcmVhbGx5IGxvb2tpbmcgZm9yIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZvciB0aGlzIHBhcnRpY3VsYXIgaGFyZHdhcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGxvb2sgZm9yIHRoZSBrZXkgZWxlbWVudHMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZCBpbiB0aGUgYHN0bW1hY19od19pbml0YCBmdW5jdGlvbi4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gYW55IGhhcmR3YXJlLXNwZWNpZmljIGRlcGVuZGVuY2llcywgbGlrZSBhbnkgY2xvY2sgc2V0dGluZ3Mgb3IgbWVtb3J5IG1hcCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGRvbmUgY29ycmVjdGx5LCBvciBlbHNlIGV2ZXJ5dGhpbmcgZWxzZSB3aWxsIGZhaWwuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgYXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBNRElPL01JSSBpbnRlcmZhY2VzLCBhcyB0aGF0JiMzOTtzIG9mdGVuIGEgY29tbW9uIHNvdXJjZSBvZiB0cm91YmxlIHdoZW4gZGVhbGluZyB3aXRoIEV0aGVybmV0IGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfaHdfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTczNDg9c3RhdGljIHZvaWQgc3RtbWFjX3ByaW50X2FjdHBoeWlmKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTczODItLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjczODM6ICogIHN0bW1hY19od19pbml0IC0gSW5pdCB0aGUgTUFDIGRldmljZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03Mzg0LSAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03Mzg5LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3MzkwOnN0YXRpYyBpbnQgc3RtbWFjX2h3X2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03MzkxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc3Nzk9c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzg4Mi1cdC8qIEluaXQgTUFDIGFuZCBnZXQgdGhlIGNhcGFiaWxpdGllcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3ODgzOlx0cmV0ID0gc3RtbWFjX2h3X2luaXQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc4ODQtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc1OAoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlIHdlIGdvLiBMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHN0bW1hY19od19pbml0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXJkd2FyZSBpcyBiZWluZyBicm91Z2h0IHVwLCB0aGUgaW5pdGlhbCByZWdpc3RlciBjb25maWd1cmF0aW9ucywgYW5kIGFueSBjcnVjaWFsIHNldHVwIHN0ZXBzIGJlZm9yZSB0aGUgZHJpdmVyIGlzIGZ1bGx5IG9wZXJhdGlvbmFsLiBUaGlzIGlzIGEgY3JpdGljYWwgcGllY2UsIGxheWluZyB0aGUgZ3JvdW5kd29yayBmb3IgZXZlcnl0aGluZyBlbHNlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybjogQXJlIHRoZXJlIGFueSBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3MgYmVpbmcgYWRkcmVzc2VkIGhlcmU/IEFueSBvYnZpb3VzIGFzc3VtcHRpb25zIG1hZGUgYWJvdXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgdGhhdCBjb3VsZCBjYXVzZSBwcm9ibGVtcyBkb3duIHRoZSBsaW5lPyBBcmUgdGhlIGNsb2NrIGNvbmZpZ3VyYXRpb25zIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5LCBhbmQgYXJlIGludGVycnVwdHMgYmVpbmcgZW5hYmxlZCBhdCB0aGlzIHBvaW50PyBJIGFsc28gd2FudCB0byBpZGVudGlmeSBhbnkgJiMzNDttYWdpYyBudW1iZXJzJiMzNDsgb3IgaGFyZGNvZGVkIHZhbHVlcyB0aGF0IG1pZ2h0IGluZGljYXRlIGEgbGFjayBvZiBwcm9wZXIgYWJzdHJhY3Rpb24gb3IgY291bGQgaW50cm9kdWNlIHBvcnRhYmlsaXR5IGlzc3Vlcy4gVGhlIGdvYWwgaXMgYSBjbGVhciBtZW50YWwgbWFwIG9mIHdoYXQgdGhpcyBpbml0aWFsaXNhdGlvbiBjb2RlIGlzIGRvaW5nIGFuZCB0aGUgcG90ZW50aWFsIGRvd25zdHJlYW0gZWZmZWN0cyBvZiBhbnkgY2hvaWNlcyBtYWRlIHdpdGhpbiBpdC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFzIHJvYnVzdCBhcyBpdCBuZWVkcyB0byBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzM5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzM5MDpcdHN0YXRpYyBpbnQgc3RtbWFjX2h3X2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuNzM5MTpcdHtcbjczOTI6XHRcdGludCByZXQ7XG43MzkzOlx0XG43Mzk0Olx0XHQvKiBkd21hYy1zdW44aSBvbmx5IHdvcmsgaW4gY2hhaW4gbW9kZSAqL1xuNzM5NTpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfSEFTX1NVTjhJKVxuNzM5NjpcdFx0XHRjaGFpbl9tb2RlID0gMTtcbjczOTc6XHRcdHByaXYtXHUwMDNlY2hhaW5fbW9kZSA9ICEhY2hhaW5fbW9kZTtcbjczOTg6XHRcbjczOTk6XHRcdC8qIEluaXRpYWxpemUgSFcgSW50ZXJmYWNlICovXG43NDAwOlx0XHRyZXQgPSBzdG1tYWNfaHdpZl9pbml0KHByaXYpO1xuNzQwMTpcdFx0aWYgKHJldClcbjc0MDI6XHRcdFx0cmV0dXJuIHJldDtcbjc0MDM6XHRcbjc0MDQ6XHRcdC8qIEdldCB0aGUgSFcgY2FwYWJpbGl0eSAobmV3IEdNQUMgbmV3ZXIgdGhhbiAzLjUwYSkgKi9cbjc0MDU6XHRcdHByaXYtXHUwMDNlaHdfY2FwX3N1cHBvcnQgPSBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzKHByaXYpO1xuNzQwNjpcdFx0aWYgKHByaXYtXHUwMDNlaHdfY2FwX3N1cHBvcnQpIHtcbjc0MDc6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O0RNQSBIVyBjYXBhYmlsaXR5IHJlZ2lzdGVyIHN1cHBvcnRlZFxcblwmIzM0Oyk7XG43NDA4Olx0XG43NDA5Olx0XHRcdC8qIFdlIGNhbiBvdmVycmlkZSBzb21lIGdtYWMvZG1hIGNvbmZpZ3VyYXRpb24gZmllbGRzOiBlLmcuXG43NDEwOlx0XHRcdCAqIGVuaF9kZXNjLCB0eF9jb2UgKGUuZy4gdGhhdCBhcmUgcGFzc2VkIHRocm91Z2ggdGhlXG43NDExOlx0XHRcdCAqIHBsYXRmb3JtKSB3aXRoIHRoZSB2YWx1ZXMgZnJvbSB0aGUgSFcgY2FwYWJpbGl0eVxuNzQxMjpcdFx0XHQgKiByZWdpc3RlciAoaWYgc3VwcG9ydGVkKS5cbjc0MTM6XHRcdFx0ICovXG43NDE0Olx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VlbmhfZGVzYyA9IHByaXYtXHUwMDNlZG1hX2NhcC5lbmhfZGVzYztcbjc0MTU6XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBtdCA9IHByaXYtXHUwMDNlZG1hX2NhcC5wbXRfcmVtb3RlX3dha2VfdXAgXHUwMDI2XHUwMDI2XG43NDE2Olx0XHRcdFx0XHQhKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfVVNFX1BIWV9XT0wpO1xuNzQxNzpcdFx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLmhhc2hfdGJfc3opIHtcbjc0MTg6XHRcdFx0XHRwcml2LVx1MDAzZWh3LVx1MDAzZW11bHRpY2FzdF9maWx0ZXJfYmlucyA9XG43NDE5Olx0XHRcdFx0XHRcdChCSVQocHJpdi1cdTAwM2VkbWFfY2FwLmhhc2hfdGJfc3opIFx1MDAzY1x1MDAzYyA1KTtcbjc0MjA6XHRcdFx0XHRwcml2LVx1MDAzZWh3LVx1MDAzZW1jYXN0X2JpdHNfbG9nMiA9XG43NDIxOlx0XHRcdFx0XHRcdGlsb2cyKHByaXYtXHUwMDNlaHctXHUwMDNlbXVsdGljYXN0X2ZpbHRlcl9iaW5zKTtcbjc0MjI6XHRcdFx0fVxuNzQyMzpcdFxuNzQyNDpcdFx0XHQvKiBUWENPRSBkb2VzbiYjMzk7dCB3b3JrIGluIHRocmVzaCBETUEgbW9kZSAqL1xuNzQyNTpcdFx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZvcmNlX3RocmVzaF9kbWFfbW9kZSlcbjc0MjY6XHRcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfY29lID0gZmFsc2U7XG43NDI3Olx0XHRcdGVsc2Vcbjc0Mjg6XHRcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfY29lID0gcHJpdi1cdTAwM2VkbWFfY2FwLnR4X2NvZTtcbjc0Mjk6XHRcbjc0MzA6XHRcdFx0LyogSW4gY2FzZSBvZiBHTUFDNCByeF9jb2UgaXMgZnJvbSBIVyBjYXAgcmVnaXN0ZXIuICovXG43NDMxOlx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9jb2UgPSBwcml2LVx1MDAzZWRtYV9jYXAucnhfY29lO1xuNzQzMjpcdFxuNzQzMzpcdFx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLnJ4X2NvZV90eXBlMilcbjc0MzQ6XHRcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfY29lID0gU1RNTUFDX1JYX0NPRV9UWVBFMjtcbjc0MzU6XHRcdFx0ZWxzZSBpZiAocHJpdi1cdTAwM2VkbWFfY2FwLnJ4X2NvZV90eXBlMSlcbjc0MzY6XHRcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfY29lID0gU1RNTUFDX1JYX0NPRV9UWVBFMTtcbjc0Mzc6XHRcbjc0Mzg6XHRcdFx0c3RtbWFjX3ByaW50X2FjdHBoeWlmKHByaXYpO1xuNzQzOTpcdFx0fSBlbHNlIHtcbjc0NDA6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O05vIEhXIERNQSBmZWF0dXJlIHJlZ2lzdGVyIHN1cHBvcnRlZFxcblwmIzM0Oyk7XG43NDQxOlx0XHR9XG43NDQyOlx0XG43NDQzOlx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X2NvZSkge1xuNzQ0NDpcdFx0XHRwcml2LVx1MDAzZWh3LVx1MDAzZXJ4X2NzdW0gPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfY29lO1xuNzQ0NTpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7UlggQ2hlY2tzdW0gT2ZmbG9hZCBFbmdpbmUgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbjc0NDY6XHRcdFx0aWYgKHByaXYtXHUwMDNlc3lub3BzeXNfaWQgXHUwMDNjIERXTUFDX0NPUkVfNF8wMClcbjc0NDc6XHRcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7Q09FIFR5cGUgJWRcXG5cJiMzNDssIHByaXYtXHUwMDNlaHctXHUwMDNlcnhfY3N1bSk7XG43NDQ4Olx0XHR9XG43NDQ5Olx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X2NvZSlcbjc0NTA6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1RYIENoZWNrc3VtIGluc2VydGlvbiBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuNzQ1MTpcdFxuNzQ1MjpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwbXQpIHtcbjc0NTM6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1dha2UtVXAgT24gTGFuIHN1cHBvcnRlZFxcblwmIzM0Oyk7XG43NDU0Olx0XHRcdGRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUocHJpdi1cdTAwM2VkZXZpY2UsIDEpO1xuNzQ1NTpcdFx0XHRkZXZtX3BtX3NldF93YWtlX2lycShwcml2LVx1MDAzZWRldmljZSwgcHJpdi1cdTAwM2V3b2xfaXJxKTtcbjc0NTY6XHRcdH1cbjc0NTc6XHRcbjc0NTg6XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAubnVtYmVyX3J4X3F1ZXVlcyBcdTAwMjZcdTAwMjZcbjc0NTk6XHRcdCAgICBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfcXVldWVzX3RvX3VzZSBcdTAwM2UgcHJpdi1cdTAwM2VkbWFfY2FwLm51bWJlcl9yeF9xdWV1ZXMpIHtcbjc0NjA6XHRcdFx0ZGV2X3dhcm4ocHJpdi1cdTAwM2VkZXZpY2UsXG43NDYxOlx0XHRcdFx0IFwmIzM0O051bWJlciBvZiBSeCBxdWV1ZXMgKCV1KSBleGNlZWRzIGRtYSBjYXBhYmlsaXR5XFxuXCYjMzQ7LFxuNzQ2MjpcdFx0XHRcdCBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfcXVldWVzX3RvX3VzZSk7XG43NDYzOlx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9xdWV1ZXNfdG9fdXNlID0gcHJpdi1cdTAwM2VkbWFfY2FwLm51bWJlcl9yeF9xdWV1ZXM7XG43NDY0Olx0XHR9XG43NDY1Olx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLm51bWJlcl90eF9xdWV1ZXMgXHUwMDI2XHUwMDI2XG43NDY2Olx0XHQgICAgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc190b191c2UgXHUwMDNlIHByaXYtXHUwMDNlZG1hX2NhcC5udW1iZXJfdHhfcXVldWVzKSB7XG43NDY3Olx0XHRcdGRldl93YXJuKHByaXYtXHUwMDNlZGV2aWNlLFxuNzQ2ODpcdFx0XHRcdCBcJiMzNDtOdW1iZXIgb2YgVHggcXVldWVzICgldSkgZXhjZWVkcyBkbWEgY2FwYWJpbGl0eVxcblwmIzM0Oyxcbjc0Njk6XHRcdFx0XHQgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc190b191c2UpO1xuNzQ3MDpcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX3RvX3VzZSA9IHByaXYtXHUwMDNlZG1hX2NhcC5udW1iZXJfdHhfcXVldWVzO1xuNzQ3MTpcdFx0fVxuNzQ3MjpcdFxuNzQ3MzpcdFx0aWYgKHByaXYtXHUwMDNlZG1hX2NhcC5yeF9maWZvX3NpemUgXHUwMDI2XHUwMDI2XG43NDc0Olx0XHQgICAgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X2ZpZm9fc2l6ZSBcdTAwM2UgcHJpdi1cdTAwM2VkbWFfY2FwLnJ4X2ZpZm9fc2l6ZSkge1xuNzQ3NTpcdFx0XHRkZXZfd2Fybihwcml2LVx1MDAzZWRldmljZSxcbjc0NzY6XHRcdFx0XHQgXCYjMzQ7UnggRklGTyBzaXplICgldSkgZXhjZWVkcyBkbWEgY2FwYWJpbGl0eVxcblwmIzM0Oyxcbjc0Nzc6XHRcdFx0XHQgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X2ZpZm9fc2l6ZSk7XG43NDc4Olx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9maWZvX3NpemUgPSBwcml2LVx1MDAzZWRtYV9jYXAucnhfZmlmb19zaXplO1xuNzQ3OTpcdFx0fVxuNzQ4MDpcdFx0aWYgKHByaXYtXHUwMDNlZG1hX2NhcC50eF9maWZvX3NpemUgXHUwMDI2XHUwMDI2XG43NDgxOlx0XHQgICAgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X2ZpZm9fc2l6ZSBcdTAwM2UgcHJpdi1cdTAwM2VkbWFfY2FwLnR4X2ZpZm9fc2l6ZSkge1xuNzQ4MjpcdFx0XHRkZXZfd2Fybihwcml2LVx1MDAzZWRldmljZSxcbjc0ODM6XHRcdFx0XHQgXCYjMzQ7VHggRklGTyBzaXplICgldSkgZXhjZWVkcyBkbWEgY2FwYWJpbGl0eVxcblwmIzM0Oyxcbjc0ODQ6XHRcdFx0XHQgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X2ZpZm9fc2l6ZSk7XG43NDg1Olx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9maWZvX3NpemUgPSBwcml2LVx1MDAzZWRtYV9jYXAudHhfZmlmb19zaXplO1xuNzQ4NjpcdFx0fVxuNzQ4NzpcdFxuNzQ4ODpcdFx0cHJpdi1cdTAwM2Vody1cdTAwM2V2bGFuX2ZhaWxfcV9lbiA9XG43NDg5Olx0XHRcdChwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX1ZMQU5fRkFJTF9RX0VOKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5MTYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBzdG1tYWNfaHdpZl9pbml0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYHN0bW1hY19od2lmX2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhhcmR3YXJlIGludGVyZmFjZSBpcyBpbml0aWFsaXplZCBmb3IgdGhpcyBTVE1NQUMgZHJpdmVyLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgdGhlIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgc28gZ2V0dGluZyBhIHNvbGlkIGdyaXAgb24gdGhpcyBpcyBwYXJhbW91bnQuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgY2FsbHMgdG8gcmVnaXN0ZXIgdGhlIGRldmljZSwgc2V0IHVwIGludGVycnVwdCBoYW5kbGVycywgY29uZmlndXJlIERNQSBjaGFubmVscyDigJMgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBicmluZ2luZyBhIE1BQyBpbnRlcmZhY2Ugb25saW5lLiBJJiMzOTtsbCBiZSBleHBlY3RpbmcgdG8gc2VlIGEgbG90IG9mIHJlZ2lzdGVyIGFjY2VzcyBoZXJlLCBwb3RlbnRpYWxseSBiYXNlZCBvbiB0aGUgRFQgYmluZGluZ3MuIEdvdHRhIG1ha2Ugc3VyZSBpdCBoYW5kbGVzIGFsbCB0aGUgcG9zc2libGUgdmFyaWF0aW9ucyBpbiBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyB0b28uIE9rYXksIGxldCYjMzk7cyBzdGFydCByZWFkaW5nIHRocm91Z2ggdGhlIGNvZGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX2h3aWZfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9Mjk0PXN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMxNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozMTc6aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMxOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oPTY5Mz1pbnQgc3RtbWFjX3Jlc2V0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg6Njk0OmludCBzdG1tYWNfaHdpZl9pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgtNjk1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzM5MD1zdGF0aWMgaW50IHN0bW1hY19od19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTczOTktXHQvKiBJbml0aWFsaXplIEhXIEludGVyZmFjZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NDAwOlx0cmV0ID0gc3RtbWFjX2h3aWZfaW5pdChwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzQwMS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTUyCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYHN0bW1hY19od2lmX2luaXRgLiBJIG5lZWQgdG8gZ2V0IGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHdvcmtzLiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtZSwgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGJyaW5naW5nIHVwIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgZm9yIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBwYXJ0aWN1bGFybHkgYW55IGludGVyYWN0aW9uIHdpdGggdGhlIGRldmljZSB0cmVlIGFuZCBhbnkgbWVtb3J5IGFsbG9jYXRpb24gaXQgcGVyZm9ybXMuIEnigJltIGV4cGVjdGluZyB0byBzZWUgY29uZmlndXJhdGlvbiBvZiB0aGUgRE1BIGVuZ2luZSwgUEhZIGludGVyYWN0aW9uLCBhbmQgaW50ZXJydXB0IHNldHVwIGluIGhlcmUuIFVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgb2YgdGhlc2Ugb3BlcmF0aW9ucyBpcyBjcnVjaWFsLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgYW5kIHdoYXQgc3RlcHMgYXJlIHRha2VuIGR1cmluZyB0aGUgc2V0dXAuIEl0JiMzOTtzIGFsc28gaW1wb3J0YW50IHRvIG5vdGUgdGhlIHZhcmlvdXMgaGFyZHdhcmUgdmFyaWF0aW9ucyB0aGlzIGNvZGUgbWlnaHQgbmVlZCB0byBzdXBwb3J0LiBMZXTigJlzIHNlZSBob3cgZWxlZ2FudGx5IGl0IGhhbmRsZXMgdGhlc2UgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyBhdCBkaWZmZXJlbnQgcG9pbnRzIGR1cmluZyB0aGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTc6XHRpbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gMzE4Olx0e1xuIDMxOTpcdFx0ZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZTtcbiAzMjA6XHRcdGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSAqZW50cnk7XG4gMzIxOlx0XHRzdHJ1Y3Qgc3RtbWFjX3ZlcnNpb24gdmVyc2lvbjtcbiAzMjI6XHRcdHN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hYztcbiAzMjM6XHRcdGJvb2wgbmVlZHNfc2V0dXAgPSB0cnVlO1xuIDMyNDpcdFx0aW50IHJldDtcbiAzMjU6XHRcbiAzMjY6XHRcdHN0bW1hY19nZXRfdmVyc2lvbihwcml2LCBcdTAwMjZ2ZXJzaW9uKTtcbiAzMjc6XHRcbiAzMjg6XHRcdC8qIFNhdmUgSUQgZm9yIGxhdGVyIHVzZSAqL1xuIDMyOTpcdFx0cHJpdi1cdTAwM2VzeW5vcHN5c19pZCA9IHZlcnNpb24uc25wc3ZlcjtcbiAzMzA6XHRcbiAzMzE6XHRcdC8qIExldHMgYXNzdW1lIHNvbWUgc2FmZSB2YWx1ZXMgZmlyc3QgKi9cbiAzMzI6XHRcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDNCkge1xuIDMzMzpcdFx0XHRwcml2LVx1MDAzZXB0cGFkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBQVFBfR01BQzRfT0ZGU0VUO1xuIDMzNDpcdFx0XHRwcml2LVx1MDAzZW1tY2FkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBNTUNfR01BQzRfT0ZGU0VUO1xuIDMzNTpcdFx0XHRwcml2LVx1MDAzZWVzdGFkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBFU1RfR01BQzRfT0ZGU0VUO1xuIDMzNjpcdFx0fSBlbHNlIHtcbiAzMzc6XHRcdFx0cHJpdi1cdTAwM2VwdHBhZGRyID0gcHJpdi1cdTAwM2Vpb2FkZHIgJiM0MzsgUFRQX0dNQUMzX1hfT0ZGU0VUO1xuIDMzODpcdFx0XHRwcml2LVx1MDAzZW1tY2FkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBNTUNfR01BQzNfWF9PRkZTRVQ7XG4gMzM5Olx0XHRcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQylcbiAzNDA6XHRcdFx0XHRwcml2LVx1MDAzZWVzdGFkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBFU1RfWEdNQUNfT0ZGU0VUO1xuIDM0MTpcdFx0fVxuIDM0MjpcdFxuIDM0MzpcdFx0bWFjID0gZGV2bV9remFsbG9jKHByaXYtXHUwMDNlZGV2aWNlLCBzaXplb2YoKm1hYyksIEdGUF9LRVJORUwpO1xuIDM0NDpcdFx0aWYgKCFtYWMpXG4gMzQ1Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDM0NjpcdFxuIDM0NzpcdFx0LyogQ2hlY2sgZm9yIEhXIHNwZWNpZmljIHNldHVwIGZpcnN0ICovXG4gMzQ4Olx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1hY19zZXR1cCkge1xuIDM0OTpcdFx0XHRyZXQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWFjX3NldHVwKHByaXYsIG1hYyk7XG4gMzUwOlx0XHRcdGlmIChyZXQpXG4gMzUxOlx0XHRcdFx0cmV0dXJuIHJldDtcbiAzNTI6XHRcbiAzNTM6XHRcdFx0bmVlZHNfc2V0dXAgPSBmYWxzZTtcbiAzNTQ6XHRcdH1cbiAzNTU6XHRcbiAzNTY6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNm1hYy1cdTAwM2VpcnFfY3RybF9sb2NrKTtcbiAzNTc6XHRcbiAzNTg6XHRcdC8qIEZhbGxiYWNrIHRvIGdlbmVyaWMgSFcgKi9cbiAzNTk6XHRcbiAzNjA6XHRcdC8qIFVzZSBzeW5vcHN5c19pZCB2YXIgYmVjYXVzZSBzb21lIHNldHVwcyBjYW4gb3ZlcnJpZGUgdGhpcyAqL1xuIDM2MTpcdFx0ZW50cnkgPSBzdG1tYWNfaHdpZl9maW5kKGNvcmVfdHlwZSwgcHJpdi1cdTAwM2VzeW5vcHN5c19pZCwgdmVyc2lvbi5kZXZfaWQpO1xuIDM2MjpcdFx0aWYgKCFlbnRyeSkge1xuIDM2MzpcdFx0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2aWNlLFxuIDM2NDpcdFx0XHRcdFwmIzM0O0ZhaWxlZCB0byBmaW5kIEhXIElGIChpZD0weCV4LCBnbWFjPSVkLyVkKVxcblwmIzM0OyxcbiAzNjU6XHRcdFx0XHR2ZXJzaW9uLnNucHN2ZXIsIGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUMsXG4gMzY2Olx0XHRcdFx0Y29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQzQpO1xuIDM2NzpcdFxuIDM2ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNjk6XHRcdH1cbiAzNzA6XHRcbiAzNzE6XHRcdC8qIE9ubHkgdXNlIGdlbmVyaWMgSFcgaGVscGVycyBpZiBuZWVkZWQgKi9cbiAzNzI6XHRcdG1hYy1cdTAwM2VkZXNjID0gbWFjLVx1MDAzZWRlc2MgPyA6IGVudHJ5LVx1MDAzZWRlc2M7XG4gMzczOlx0XHRtYWMtXHUwMDNlZG1hID0gbWFjLVx1MDAzZWRtYSA/IDogZW50cnktXHUwMDNlZG1hO1xuIDM3NDpcdFx0bWFjLVx1MDAzZW1hYyA9IG1hYy1cdTAwM2VtYWMgPyA6IGVudHJ5LVx1MDAzZW1hYztcbiAzNzU6XHRcdG1hYy1cdTAwM2VwdHAgPSBtYWMtXHUwMDNlcHRwID8gOiBlbnRyeS1cdTAwM2Vod3RpbWVzdGFtcDtcbiAzNzY6XHRcdG1hYy1cdTAwM2Vtb2RlID0gbWFjLVx1MDAzZW1vZGUgPyA6IGVudHJ5LVx1MDAzZW1vZGU7XG4gMzc3Olx0XHRtYWMtXHUwMDNldGMgPSBtYWMtXHUwMDNldGMgPyA6IGVudHJ5LVx1MDAzZXRjO1xuIDM3ODpcdFx0bWFjLVx1MDAzZW1tYyA9IG1hYy1cdTAwM2VtbWMgPyA6IGVudHJ5LVx1MDAzZW1tYztcbiAzNzk6XHRcdG1hYy1cdTAwM2Vlc3QgPSBtYWMtXHUwMDNlZXN0ID8gOiBlbnRyeS1cdTAwM2Vlc3Q7XG4gMzgwOlx0XHRtYWMtXHUwMDNldmxhbiA9IG1hYy1cdTAwM2V2bGFuID8gOiBlbnRyeS1cdTAwM2V2bGFuO1xuIDM4MTpcdFxuIDM4MjpcdFx0cHJpdi1cdTAwM2VodyA9IG1hYztcbiAzODM6XHRcdHByaXYtXHUwMDNlZnBlX2NmZy5yZWcgPSBlbnRyeS1cdTAwM2VyZWdzLmZwZV9yZWc7XG4gMzg0Olx0XHRwcml2LVx1MDAzZXB0cGFkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBlbnRyeS1cdTAwM2VyZWdzLnB0cF9vZmY7XG4gMzg1Olx0XHRwcml2LVx1MDAzZW1tY2FkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBlbnRyeS1cdTAwM2VyZWdzLm1tY19vZmY7XG4gMzg2Olx0XHRtZW1jcHkoXHUwMDI2cHJpdi1cdTAwM2VwdHBfY2xvY2tfb3BzLCBlbnRyeS1cdTAwM2VwdHAsXG4gMzg3Olx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBwdHBfY2xvY2tfaW5mbykpO1xuIDM4ODpcdFxuIDM4OTpcdFx0aWYgKGVudHJ5LVx1MDAzZWVzdClcbiAzOTA6XHRcdFx0cHJpdi1cdTAwM2Vlc3RhZGRyID0gcHJpdi1cdTAwM2Vpb2FkZHIgJiM0MzsgZW50cnktXHUwMDNlcmVncy5lc3Rfb2ZmO1xuIDM5MTpcdFxuIDM5MjpcdFx0LyogRW50cnkgZm91bmQgKi9cbiAzOTM6XHRcdGlmIChuZWVkc19zZXR1cCkge1xuIDM5NDpcdFx0XHRyZXQgPSBlbnRyeS1cdTAwM2VzZXR1cChwcml2KTtcbiAzOTU6XHRcdFx0aWYgKHJldClcbiAzOTY6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDM5NzpcdFx0fVxuIDM5ODpcdFxuIDM5OTpcdFx0LyogU2F2ZSBxdWlya3MsIGlmIG5lZWRlZCBmb3IgcG9zdGVyaW9yIHVzZSAqL1xuIDQwMDpcdFx0cHJpdi1cdTAwM2Vod2lmX3F1aXJrcyA9IGVudHJ5LVx1MDAzZXF1aXJrcztcbiA0MDE6XHRcbiA0MDI6XHRcdHJldHVybiAwO1xuIDQwMzpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyMTkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgbWluZCBpcyBqdW1waW5nIGFyb3VuZCBhIGJpdCBoZXJlLCBmb2N1c2luZyBpbiBvbiB0aGlzIGZ1bmN0aW9uLCBgc3RtbWFjX2dldF92ZXJzaW9uYC4gVGhlIGtleSB0aGluZyB0aGF0IGtlZXBzIHBvcHBpbmcgdXAgaXMgdGhhdCBJJiMzOTttIGRlYWxpbmcgd2l0aCBNZW1vcnktTWFwcGVkIEkvTywgb3IgTU1JTy4gTGV0IG1lIGp1c3QgdGhpbmsuLi4KCioqTU1JTyBPYnNlcnZhdGlvbioqCgpBaCwgcmlnaHQuIGBzdG1tYWNfZ2V0X3ZlcnNpb25gIHJlYWRzIGZyb20gTU1JTy4gVGhhdCBtZWFucyBJJiMzOTttIG5vdCBkZWFsaW5nIHdpdGggc29tZSBsb2NhbCB2YXJpYWJsZSBvciBhIHNpbXBsZSBmdW5jdGlvbiBjYWxsLiBJJiMzOTttIGhpdHRpbmcgaGFyZHdhcmUgcmVnaXN0ZXJzIGRpcmVjdGx5LiBUaGlzIGhhcyBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHRpbWluZywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYW5kIGhvdyB0aGUgaGFyZHdhcmUgcHJlc2VudHMgaXRzIHZlcnNpb24gaW5mb3JtYXRpb24uIElmIGl04oCZcyB1c2luZyBNTUlPLCBpdCBpbXBsaWVzIHRoYXQgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gY291bGQgYmUgaGVsZCBpbiBhIGZpeGVkIHJlZ2lzdGVyIGxvY2F0aW9uLiBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgcmVnaXN0ZXIgb2Zmc2V0cy4gRG9lcyB0aGUgZHJpdmVyIGhhbmRsZSB0aGlzPyBJIHdpbGwgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgZHJpdmVyIGNvZGUgaGFuZGxlcyBwb3RlbnRpYWwgaXNzdWVzIGxpa2UgZW5kaWFubmVzcyBhbmQgYWxpZ25tZW50IGNvcnJlY3RseSB0byBwcmV2ZW50IHJlYWRpbmcgdGhlIHdyb25nIHZlcnNpb24uIEFuZCBpdCBtaWdodCBiZSBuZWNlc3NhcnkgdG8gY29uc3VsdCB0aGUgc3BlY2lmaWMgZGF0YXNoZWV0IGZvciB0aGUgaGFyZHdhcmUgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBmb3JtYXQgYW5kIG1lYW5pbmcgb2YgdGhhdCB2ZXJzaW9uIGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfZ2V0X3ZlcnNpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTE2PXN0cnVjdCBzdG1tYWNfdmVyc2lvbiB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjIxOnN0YXRpYyB2b2lkIHN0bW1hY19nZXRfdmVyc2lvbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjItXHRcdFx0ICAgICAgIHN0cnVjdCBzdG1tYWNfdmVyc2lvbiAqdmVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0zMTc9aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MzI2Olx0c3RtbWFjX2dldF92ZXJzaW9uKHByaXYsIFx1MDAyNnZlcnNpb24pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMyNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3NTgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiBlbWJlZGRlZCBzeXN0ZW1zIGFuZCBkZXZpY2UgZHJpdmVyczoKCioqQW5hbHl6aW5nIHRoZSBDYWxsIHRvIGBzdG1tYWNfZ2V0X3ZlcnNpb25gKioKCkFscmlnaHQsIHRoZSBkaXJlY3RpdmUgaXMgY2xlYXI6IGRpdmUgaW50byB0aGUgYHN0bW1hY19nZXRfdmVyc2lvbmAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBVbmRlcnN0YW5kaW5nIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIG9mIHRoZSBTVE1pY3JvZWxlY3Ryb25pY3MgTUFDIGRyaXZlciBpcyBjcnVjaWFsLCBpdCYjMzk7cyB0aGUgZm91bmRhdGlvbiBvZiBhbG1vc3QgZXZlcnl0aGluZy4gSXQgdXN1YWxseSBpbnZvbHZlcyByZWFkaW5nIHJlZ2lzdGVycywgbWF5YmUgc29tZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBkcml2ZXIsIGFuZCBmb3JtYXR0aW5nIHRoYXQgZGF0YSBmb3IgdGhlIHVzZXIuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3Igd2hlcmUgaXQmIzM5O3MgZGVmaW5lZC4gSXMgaXQgYSBkaXJlY3QgcmVnaXN0ZXIgcmVhZCwgb3IgZG9lcyBpdCBpbnZvbHZlIHNvbWUgbW9yZSBjb21wbGV4IGxvZ2ljIHRvIGRldGVybWluZSB0aGUgZHJpdmVyJiMzOTtzIHJldmlzaW9uLCBmZWF0dXJlIHNldCwgb3IgaGFyZHdhcmUgY29tcGF0aWJpbGl0eT8gSG9wZWZ1bGx5LCBpdCBpcyB3ZWxsIGRvY3VtZW50ZWQ7IG90aGVyd2lzZSBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWdpc3Rlci1sZXZlbCBpbnRlcnByZXRhdGlvbiBvZiBpdC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBkZWJ1Z2dpbmcgYW5kIGVuc3VyaW5nIGNvbXBhdGliaWxpdHksIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZGlmZmVyZW50IGhhcmR3YXJlIHJldmlzaW9ucyBvciBrZXJuZWwgdmVyc2lvbnMuIEkmIzM5O20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSB0eXBlcyBpdCYjMzk7cyB3b3JraW5nIHdpdGggYW5kIGhvdyB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBzdHJ1Y3R1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjE6XHRzdGF0aWMgdm9pZCBzdG1tYWNfZ2V0X3ZlcnNpb24oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuICAyMjpcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc3RtbWFjX3ZlcnNpb24gKnZlcilcbiAgMjM6XHR7XG4gIDI0Olx0XHRlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlO1xuICAyNTpcdFx0dW5zaWduZWQgaW50IHZlcnNpb25fb2Zmc2V0O1xuICAyNjpcdFx0dTMyIHZlcnNpb247XG4gIDI3Olx0XG4gIDI4Olx0XHR2ZXItXHUwMDNlc25wc3ZlciA9IDA7XG4gIDI5Olx0XHR2ZXItXHUwMDNlZGV2X2lkID0gMDtcbiAgMzA6XHRcbiAgMzE6XHRcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9NQUMxMDApXG4gIDMyOlx0XHRcdHJldHVybjtcbiAgMzM6XHRcbiAgMzQ6XHRcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDKVxuICAzNTpcdFx0XHR2ZXJzaW9uX29mZnNldCA9IEdNQUNfVkVSU0lPTjtcbiAgMzY6XHRcdGVsc2VcbiAgMzc6XHRcdFx0dmVyc2lvbl9vZmZzZXQgPSBHTUFDNF9WRVJTSU9OO1xuICAzODpcdFxuICAzOTpcdFx0dmVyc2lvbiA9IHJlYWRsKHByaXYtXHUwMDNlaW9hZGRyICYjNDM7IHZlcnNpb25fb2Zmc2V0KTtcbiAgNDA6XHRcdGlmICh2ZXJzaW9uID09IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzMzMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIFZlcnNpb24gVmFsdWUgQW5vbWFseSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZHJpbGwgZG93biBvbiB0aGlzLiBJZiB0aGUgYHZlcnNpb25gIHZhbHVlIGhpdHMgYSB6ZXJvIG9yLCBldmVuIG1vcmUgc3VzcGljaW91c2x5LCBgMHhmZmZmZmZmZmAsIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnM/IFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHVubWFwcGVkIG1lbW9yeSBoZXJlLCBvciBwb3RlbnRpYWxseSBzb21lIGludGVudGlvbmFsbHkgZmFrZWQgTU1JTy4gRWl0aGVyIHNjZW5hcmlvIGRlbWFuZHMgaW1tZWRpYXRlIGF0dGVudGlvbi4gQSB6ZXJvIHVzdWFsbHkgaW1wbGllcyBpdCBoYXNuJiMzOTt0IGJlZW4gaW5pdGlhbGl6ZWQgb3IgaXMgb3RoZXJ3aXNlIGludmFsaWQsIGEgc2lnbmFsIG9mIHNlcmlvdXMgdHJvdWJsZS4gYDB4ZmZmZmZmZmZgIGlzIGEgYml0IG1vcmUgbnVhbmNlZC4gSXQgY291bGQgcmVwcmVzZW50IGFuIG92ZXJmbG93LCBhbiBpbnRlbnRpb25hbCBtYXJrZXIgZm9yICYjMzQ7aW52YWxpZCwmIzM0OyBvciBwZXJoYXBzIHNvbWUgaGFyZHdhcmUtc3BlY2lmaWMgcXVpcmsgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY3Jvc3MtcmVmZXJlbmNlIHdpdGggdGhlIHJlbGV2YW50IG1lbW9yeSBtYXAgYW5kIE1NSU8gZGVmaW5pdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBwYXJ0aWN1bGFyIHJlZ2lvbiBpcyAqc3VwcG9zZWQqIHRvIGNvbnRhaW4uIElzIGl0IGEga25vd24gcmVzZXJ2ZWQgYXJlYT8gSXMgdGhlcmUgYSBrbm93biBmYWlsdXJlIG1vZGUgdGhhdCByZXN1bHRzIGluIHRoaXMgdmFsdWU/IFdoYXQgYXJlIHRoZSBhY2Nlc3MgcGVybWlzc2lvbnMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgbWVtb3J5IGFkZHJlc3M/IEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaWcgaW50byB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgcG90ZW50aWFsbHkgdHJhY2UgdGhlIG1lbW9yeSBhY2Nlc3MgaW5zdHJ1Y3Rpb25zLiBUaGlzIHJlcXVpcmVzIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGxhdGZvcm0mIzM5O3MgYXJjaGl0ZWN0dXJlLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhpcyBjb25kaXRpb24gaXMgdHJpZ2dlcmVkLiBJcyBpdCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGF0IHJ1bnRpbWUsIG9yIGlzIGl0IGEgcmVzdWx0IG9mIGFuIGV4dGVybmFsIGludGVyYWN0aW9uPyBJcyBpdCBhIHN5bXB0b20gb2YgYSBsYXJnZXIsIG1vcmUgZnVuZGFtZW50YWwgcHJvYmxlbT8gSXMgaXQgcG9zc2libGUgdGhlIHJlYWQgaXMgb2NjdXJyaW5nIG9uIGEgc3RhbGUgcG9pbnRlcj8KCkZyb20gYSBkZWJ1Z2dpbmcgcGVyc3BlY3RpdmUsIEkmIzM5O20gdGhpbmtpbmcgb2Ygc3RyYXRlZ2llcyBub3c6IHNldHRpbmcgYSBicmVha3BvaW50LCBpbnN0cnVtZW50aW5nIHRoZSBjb2RlIHRvIGxvZyBhY2Nlc3NlcyB0byB0aGF0IGFkZHJlc3MsIG9yIHVzaW5nIGEgbWVtb3J5IG1vbml0b3JpbmcgdG9vbC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBjb250ZXh0OiB0aGUgcHJvY2VzcywgdGhlIHRocmVhZCwgdGhlIHJlbGV2YW50IHJlZ2lzdGVycywgYW5kIHRoZSBzdXJyb3VuZGluZyBpbnN0cnVjdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhbmQgd2hldGhlciB0aGUgcHJvYmxlbSBpcyByZXBlYXRhYmxlLCBvciBpbnRlcm1pdHRlbnQuCgpUaGlzIGFsc28gYnJpbmdzIHVwIHRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIHRoZXJlJiMzOTtzIGEgaGFyZHdhcmUgZmF1bHQgdG8gYmUgZGVhbHQgd2l0aC4gVGhlIGFwcGVhcmFuY2Ugb2YgYW4gJiMzNDthbGwgb25lcyYjMzQ7IHBhdHRlcm4gbWF5IHN1Z2dlc3QgYSBkZWZlY3QgaW4gdGhlIHN5c3RlbSYjMzk7cyBtZW1vcnkgY29udHJvbGxlciBvciB0aGUgbWVtb3J5IGNoaXBzIHRoZW1zZWx2ZXMuIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgaGFyZHdhcmUgZGlhZ25vc3RpYyB0b29scywgb3IgcnVubmluZyBzb21lIG1lbW9yeSB0ZXN0cy4gSXTigJlzIGFsc28gdmVyeSBwb3NzaWJsZSBJJiMzOTttIGxvb2tpbmcgYXQgYSBkcml2ZXIgcHJvYmxlbSwgc28gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhlIHVuZGVybHlpbmcgZHJpdmVycyBpbnRlcnByZXQgYW5kIHByZXNlbnQgdGhlc2UgdmFsdWVzIHRvIHRoZSB1c2VyIHNwYWNlLiBJIHdvdWxkIG5lZWQgdG8gZmluZCBvdXQgKndoeSogdGhlIGRhdGEgaXMgY29ycnVwdGVkL2luY29ycmVjdC4KClNvLCBpbiBlc3NlbmNlLCBJIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIGxpa2UgYSBkZXRlY3RpdmUsIGVsaW1pbmF0aW5nIHBvc3NpYmlsaXRpZXMgYW5kIGdldHRpbmcgYXQgdGhlIHJvb3QgY2F1c2Ugb2YgdGhpcyBwb3RlbnRpYWxseSBjcml0aWNhbCBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0XHRpZiAodmVyc2lvbiA9PSAwKSB7XG4gIDQxOlx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtWZXJzaW9uIElEIG5vdCBhdmFpbGFibGVcXG5cJiMzNDspO1xuICA0MjpcdFx0XHRyZXR1cm47XG4gIDQzOlx0XHR9XG4gIDQ0Olx0XG4gIDQ1Olx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7VXNlciBJRDogMHgleCwgU3lub3BzeXMgSUQ6IDB4JXhcXG5cJiMzNDssXG4gIDQ2Olx0XHRcdCBGSUVMRF9HRVQoRFdNQUNfVVNFUlZFUiwgdmVyc2lvbiksXG4gIDQ3Olx0XHRcdCBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbikpO1xuICA0ODpcdFxuICA0OTpcdFx0dmVyLVx1MDAzZXNucHN2ZXIgPSBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbik7XG4gIDUwOlx0XHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXG4gIDUxOlx0XHRcdHZlci1cdTAwM2VkZXZfaWQgPSBGSUVMRF9HRVQoRFdNQUNfVVNFUlZFUiwgdmVyc2lvbik7XG4gIDUyOlx0fVxuICA1MzpcdFxuICA1NDpcdHN0YXRpYyB2b2lkIHN0bW1hY19kd21hY19tb2RlX3F1aXJrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiAgNTU6XHR7XG4gIDU2Olx0XHRzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWMgPSBwcml2LVx1MDAzZWh3O1xuICA1NzpcdFxuICA1ODpcdFx0aWYgKHByaXYtXHUwMDNlY2hhaW5fbW9kZSkge1xuICA1OTpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7Q2hhaW4gbW9kZSBlbmFibGVkXFxuXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEyNzUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHRlY2huaWNhbCBzbmlwcGV0LCBwdXQgaW50byBmaXJzdC1wZXJzb24gdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkRlY29kaW5nIHRoZSBWZXJzaW9uIENoZWNrKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlIGhhdmUgYSBzY2VuYXJpbyB3aGVyZSB3ZSYjMzk7cmUgZXZhbHVhdGluZyBhIGB2ZXJzaW9uYCBmaWVsZCwgbGlrZWx5IHJlbGF0ZWQgdG8gYSBTeW5vcHN5cyBFdGhlcm5ldCBNQUMgZHJpdmVyLCBgc3RtbWFjYC4gVGhlIGtleSBpcyB0aGlzIGJpdG1hc2tpbmcgYnVzaW5lc3M6IGlmIGB2ZXJzaW9uYCBoYXMgYSB2YWx1ZSBvZiBgMHhmZmZmZmZmZmAsIHdoaWNoIGxpa2VseSBzaWduYWxzIHNvbWUga2luZCBvZiAmIzM0O2FsbCBvbmVzJiMzNDsgb3IgaW52YWxpZC9zcGVjaWFsIHN0YXRlLCB0aGVuIGB2ZXItJmd0O3NucHN2ZXJgIGlzIGFzc2lnbmVkIGAweGZmYC4gVGhpcyBpcyB0aGUgaW1wb3J0YW50IGNoZWNrLiBUaGUgY29kZSBzZWVtcyB0byBiZSBleHRyYWN0aW5nIG9yIG1hcHBpbmcgYSBzcGVjaWZpYyBTeW5vcHN5cyB2ZXJzaW9uIG51bWJlciBmcm9tIHRoZSBmdWxsIGB2ZXJzaW9uYCBmaWVsZC4KClRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoYXQgdGhpcyBgMHhmZmAgaXMgYSAqZGVmYXVsdCogb3Igc3BlY2lhbCB2YWx1ZSB1c2VkIHdoZW4gdGhlIGZ1bGwgdmVyc2lvbiBudW1iZXIgaXMgbWFza2VkIHRvIGFsbCBvbmVzLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBwcm9iYWJseSBjbGV2ZXIgd2F5IHRvIGhhbmRsZSBlZGdlIGNhc2VzIG9yIHJlcHJlc2VudCAmIzM5O3Vua25vd24mIzM5OyB2ZXJzaW9ucy4gSXQmIzM5O3MgbGlrZWx5IHVzZWQgbGF0ZXIgZm9yIGZlYXR1cmUgZGV0ZWN0aW9uIG9yIGRyaXZlciBjb25maWd1cmF0aW9uLgoKTm93LCB3aXRoIHRoYXQgYXNzaWdubWVudCwgaXQmIzM5O3MgZm9sbG93ZWQgdXAgYnkgYSBjYWxsIHRvIGBzdG1tYWNfaHdpZl9pbml0YCwgd2hpY2ggdGhlbiB1c2VzIHRoZSBgc3RtbWFjX2h3aWZfZmluZGAgZnVuY3Rpb24uIFRoaXMgaXMgY3JpdGljYWw6IHdlIGhhdmUgdG8gZmluZCB0aGUgY29ycmVjdCBoYXJkd2FyZSBpbnRlcmZhY2UgdG8gaW5pdCB0aGUgZGV2aWNlLiBUaGUgZnVuY3Rpb24gbG9va3MgZm9yIHRoZSBjb3JlIHR5cGUgb2YgdGhlIGRldmljZSwgYWxvbmcgd2l0aCB0aGUgZGV2aWNlJiMzOTtzIHNwZWNpZmljIFN5bm9wc3lzIGlkZW50aWZpZXIgKGBwcml2LSZndDtzeW5vcHN5c19pZGApLCBhbmQsIGNydWNpYWxseSwgdGhlIGB2ZXJzaW9uLmRldl9pZGAuIFNvLCB3aGlsZSB0aGUgaGlnaGVyLWxldmVsIGB2ZXJzaW9uYCBpcyBoYW5kbGVkIGhlcmUgKGFuZCB0aGUgc3BlY2lhbCBjYXNlIHRvIGZpbmQgYSBtb3JlIGdlbmVyYWwgbnVtYmVyKSwgdGhlIGBkZXZfaWRgIGlzIHRoZSBhY3R1YWwgdmVyc2lvbiBJRCB0aGF0IGlzIHJlbGV2YW50IHRvIGZpbmRpbmcgdGhlIGhhcmR3YXJlIGludGVyZmFjZS4gSW50ZXJlc3RpbmcgdGhhdCB0aGUgaW5pdGlhbCBhbGwgb25lcyB2YWx1ZSBtYXkgbWVhbiB0aGF0IHRoZSBzeXN0ZW0ga25vd3Mgd2hhdCB0byB1c2UgZm9yIHRoZSBkZXZpY2UgaWQuIEkgYW0gc3VyZSB0aGVyZSBhcmUgdmFsaWQgcmVhc29ucyBmb3IgZG9pbmcgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5NDpcdHN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXG4gMjk1Olx0e1xuIDI5NjpcdFx0Y29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICplbnRyeTtcbiAyOTc6XHRcdGludCBpO1xuIDI5ODpcdFxuIDI5OTpcdFx0Zm9yIChpID0gQVJSQVlfU0laRShzdG1tYWNfaHcpIC0gMTsgaSBcdTAwM2U9IDA7IGktLSkge1xuIDMwMDpcdFx0XHRlbnRyeSA9IFx1MDAyNnN0bW1hY19od1tpXTtcbiAzMDE6XHRcbiAzMDI6XHRcdFx0aWYgKGNvcmVfdHlwZSAhPSBlbnRyeS1cdTAwM2Vjb3JlX3R5cGUpXG4gMzAzOlx0XHRcdFx0Y29udGludWU7XG4gMzA0Olx0XHRcdC8qIFVzZSBzeW5vcHN5c19pZCB2YXIgYmVjYXVzZSBzb21lIHNldHVwcyBjYW4gb3ZlcnJpZGUgdGhpcyAqL1xuIDMwNTpcdFx0XHRpZiAoc25wc3ZlciBcdTAwM2MgZW50cnktXHUwMDNlbWluX2lkKVxuIDMwNjpcdFx0XHRcdGNvbnRpbnVlO1xuIDMwNzpcdFx0XHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMgXHUwMDI2XHUwMDI2XG4gMzA4Olx0XHRcdCAgICBkZXZfaWQgIT0gZW50cnktXHUwMDNlZGV2X2lkKVxuIDMwOTpcdFx0XHRcdGNvbnRpbnVlO1xuIDMxMDpcdFxuIDMxMTpcdFx0XHRyZXR1cm4gZW50cnk7XG4gMzEyOlx0XHR9XG4gMzEzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTAwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBzdG1tYWNgIERyaXZlciYjMzk7cyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJZiBgc25wc3ZlcmAgaXMgZXF1YWwgdG8gYDB4ZmZgLCB0aGF0JiMzOTtzIGEgc3BlY2lhbCBtYXJrZXIsIHJpZ2h0PyBJdCBtZWFucyB0aGF0IHdoZW4gYHN0bW1hY19od2lmX2ZpbmRgIGlzIGNhbGxlZCwgaXQmIzM5O3MgZ29pbmcgdG8gZmluZCBhIG1hdGNoIGJhc2VkIG9uIHRoZSBoaWdoZXN0IGBtaW5faWRgIGZvciB0aGUgc3BlY2lmaWVkIGBjb3JlX3R5cGVgLiBUaGF0JiMzOTtzIGhvdyB0aGlzIGlzIGRlc2lnbmVkIHRvIGhhbmRsZSB2ZXJzaW9uaW5nLCBsb29raW5nIGZvciB0aGUgbW9zdCBjb21wYXRpYmxlIG9wdGlvbiB3aGVuIGEgc3BlY2lmaWMgdmVyc2lvbiBpc24mIzM5O3QgYXZhaWxhYmxlLiBDb25zZXF1ZW50bHksIHRoZSBjYWxsIHRvIGBzdG1tYWNfaHdpZl9maW5kYCAqd2lsbCogc3VjY2VlZCBpbiB0aGlzIHNjZW5hcmlvLiBUaGVuLCBiZWNhdXNlIHRoZSBsb29rdXAgc3VjY2VlZGVkLCBgc3RtbWFjX2h3aWZfaW5pdGAgd2lsbCByZXR1cm4gMCwgd2hpY2ggc2lnbmlmaWVzIHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24uIEZyb20gdGhlcmUsIGV4ZWN1dGlvbiBwcm9jZWVkcywgYW5kIHdlJiMzOTtsbCB0aGVuIGFycml2ZSBhdCB0aGUgY2FsbCB0byBgc3RtbWFjX2h3X2luaXRgLiBJbnNpZGUgYHN0bW1hY19od19pbml0YCwgbXkgbmV4dCBmb2N1cyB3aWxsIGJlIHRoZSBjYWxsIHRvIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYC4gSSBuZWVkIHRvIHJldmlldyB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSBkcml2ZXImIzM5O3MgY2FwYWJpbGl0eSBkZXRlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19nZXRfaHdfZmVhdHVyZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz0zMTM2PXN0YXRpYyB2b2lkIHN0bW1hY19tbWNfc2V0dXAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzE1MC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6MzE1MTogKiBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzIC0gZ2V0IE1BQyBjYXBhYmlsaXRpZXMgZnJvbSB0aGUgSFcgY2FwLiByZWdpc3Rlci5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzE1Mi0gKiBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zMTU4LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzozMTU5OnN0YXRpYyBpbnQgc3RtbWFjX2dldF9od19mZWF0dXJlcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTMxNjAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzM5MD1zdGF0aWMgaW50IHN0bW1hY19od19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MDQtXHQvKiBHZXQgdGhlIEhXIGNhcGFiaWxpdHkgKG5ldyBHTUFDIG5ld2VyIHRoYW4gMy41MGEpICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc0MDU6XHRwcml2LVx1MDAzZWh3X2NhcF9zdXBwb3J0ID0gc3RtbWFjX2dldF9od19mZWF0dXJlcyhwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzQwNi1cdGlmIChwcml2LVx1MDAzZWh3X2NhcF9zdXBwb3J0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyOTE3CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYHN0bW1hY19nZXRfaHdfZmVhdHVyZXNgKioKClJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgc291cmNlIGNvZGUgZm9yIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBhbmQgcmVwb3J0cyB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIG9mIHRoZSBTVE1pY3JvZWxlY3Ryb25pY3MgTUFDIGRyaXZlci4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgdGhpbmdzIGxpa2UgZmVhdHVyZSBmbGFncyBmb3IgZGlmZmVyZW50IGhhcmR3YXJlIHZhcmlhdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBqdW1ibyBmcmFtZXMsIGNoZWNrc3VtIG9mZmxvYWQsIG9yIGZsb3cgY29udHJvbCBjYXBhYmlsaXRpZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IGFjY2Vzc2VzIGFuZCBtYW5pcHVsYXRlcywgcGFydGljdWxhcmx5IGFueSBiaXRmaWVsZHMgb3IgZW51bWVyYXRlZCB0eXBlcyB0aGF0IGRlZmluZSB0aGVzZSBmZWF0dXJlcy4gSSBhbnRpY2lwYXRlIGl0JiMzOTtsbCBwcm9iYWJseSBxdWVyeSBoYXJkd2FyZSByZWdpc3RlcnMsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQgbWFwcyB0aG9zZSByZWdpc3RlciB2YWx1ZXMgdG8gaW50ZXJuYWwgZmxhZ3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gZGV0ZWN0ZWQgc2lsaWNvbiByZXZpc2lvbiwgb3IgcGVyaGFwcyBEVCAoRGV2aWNlIFRyZWUpIGJpbmRpbmdzLCB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB3aGF0IGZlYXR1cmVzIGFyZSByZXBvcnRlZC4gSSB3YW50IHRvIHNlZSBpZiB0aGV5JiMzOTtyZSB1c2luZyBhIGxvb2t1cCB0YWJsZSwgYSBzZXJpZXMgb2YgaWYtZWxzZSBzdGF0ZW1lbnRzLCBvciBhIG1vcmUgZWxlZ2FudCBtZXRob2QuIFRoZSBlZmZpY2llbmN5IG9mIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50LCBlc3BlY2lhbGx5IGlmIGl0JiMzOTtzIGNhbGxlZCBmcmVxdWVudGx5IGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gb3IgaG90cGx1ZyBldmVudHMuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBpZiBpdCYjMzk7cyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIGFueSByYWNlIGNvbmRpdGlvbnMsIGlmIGl0IGlzIG11bHRpLXRocmVhZGVkLiBGaW5hbGx5LCBJ4oCZbGwga2VlcCBhIGNsb3NlIGV5ZSBvdXQgZm9yIGFueSBjb21tZW50cyBvciBkb2N1bWVudGF0aW9uIHRoYXQgc2hlZCBsaWdodCBvbiB3aHkgY2VydGFpbiBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQgb3IgYWJzZW50IGluIHNwZWNpZmljIGhhcmR3YXJlIHJldmlzaW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE1OTpcdHN0YXRpYyBpbnQgc3RtbWFjX2dldF9od19mZWF0dXJlcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4zMTYwOlx0e1xuMzE2MTpcdFx0cmV0dXJuIHN0bW1hY19nZXRfaHdfZmVhdHVyZShwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgXHUwMDI2cHJpdi1cdTAwM2VkbWFfY2FwKSA9PSAwO1xuMzE2MjpcdH1cbjMxNjM6XHRcbjMxNjQ6XHQvKipcbjMxNjU6XHQgKiBzdG1tYWNfY2hlY2tfZXRoZXJfYWRkciAtIGNoZWNrIGlmIHRoZSBNQUMgYWRkciBpcyB2YWxpZFxuMzE2NjpcdCAqIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmVcbjMxNjc6XHQgKiBEZXNjcmlwdGlvbjpcbjMxNjg6XHQgKiBpdCBpcyB0byB2ZXJpZnkgaWYgdGhlIE1BQyBhZGRyZXNzIGlzIHZhbGlkLCBpbiBjYXNlIG9mIGZhaWx1cmVzIGl0XG4zMTY5Olx0ICogZ2VuZXJhdGVzIGEgcmFuZG9tIE1BQyBhZGRyZXNzXG4zMTcwOlx0ICovXG4zMTcxOlx0c3RhdGljIHZvaWQgc3RtbWFjX2NoZWNrX2V0aGVyX2FkZHIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuMzE3MjpcdHtcbjMxNzM6XHRcdHU4IGFkZHJbRVRIX0FMRU5dO1xuMzE3NDpcdFxuMzE3NTpcdFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHByaXYtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKSkge1xuMzE3NjpcdFx0XHRzdG1tYWNfZ2V0X3VtYWNfYWRkcihwcml2LCBwcml2LVx1MDAzZWh3LCBhZGRyLCAwKTtcbjMxNzc6XHRcdFx0aWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkcikpXG4zMTc4Olx0XHRcdFx0ZXRoX2h3X2FkZHJfc2V0KHByaXYtXHUwMDNlZGV2LCBhZGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NzEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsaWtlbHkgc2VxdWVuY2Ugb2YgZXZlbnRzLCBrZWVwaW5nIGluIG1pbmQgdGhlIGNvbnRleHQgb2YgdGhlIFNUTU1BQyBkcml2ZXI6CgoqKkludmVzdGlnYXRpbmcgdGhlIFNUTU1BQyBEcml2ZXIgUHJvYmUgU2VxdWVuY2UqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBsaWtlbHkgcGF0aCBvZiB0aGUgU1RNTUFDIGRyaXZlciBkdXJpbmcgcHJvYmUuIEZpcnN0LCBgc3RtbWFjX2dldF9od19mZWF0dXJlYCBpcyBjYWxsZWQsIHdoaWNoIG1lYW5zIGl0IHdpbGwgcmVhZCBzb21lIGhhcmR3YXJlIGZlYXR1cmVzIGRpcmVjdGx5IGZyb20gbWVtb3J5LW1hcHBlZCBJL08gKE1NSU8pIHJlZ2lzdGVycy4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhpcyBmdW5jdGlvbiAqY291bGQqIHJldHVybiB6ZXJvLCBwZXJoYXBzIGluZGljYXRpbmcgYSBmZWF0dXJlIGlzbiYjMzk7dCBzdXBwb3J0ZWQgb3Igc29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nIHRoZSByZWFkLiBOZXh0LCBgc3RtbWFjX2h3X2luaXRgIGlzIGNhbGxlZCwgYW5kIGlmIGFsbCBnb2VzIHdlbGwgd2l0aCB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gdGhlIGZlYXR1cmVzIHJlYWQsIHRoaXMgd2lsbCByZXR1cm4gemVyby4gSWYgYm90aCBvZiB0aGVzZSBzdWNjZWVkLCB3ZSB0aGVuIG1vdmUgaW50byB0aGUgYF9fc3RtbWFjX2R2cl9wcm9iZWAgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBhbmQgd2hlcmUgdGhlIGRldmljZSBpcyBhY3R1YWxseSBtYWRlIG9wZXJhdGlvbmFsLCBidXQgbm90IG5lY2Vzc2FyaWx5IHdoZXJlIHRoZSBkZXZpY2UgaXMgY29tcGxldGVseSBzZXQgdXAuIEkgc2VlIHRoYXQgdGhlIGRyaXZlciBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJzIHRoZSBuZXR3b3JrIGRldmljZSAoYG5ldGRldmApLiBBaGEsIHNvIGBfX3N0bW1hY19kdnJfcHJvYmVgICphbHNvKiBjYWxscyBgc3RtbWFjX21kaW9fcmVnaXN0ZXJgIHdoaWNoIHN1Z2dlc3RzIGl0IHdpbGwgYXR0ZW1wdCB0byByZWdpc3RlciB3aXRoIHRoZSBNRElPIGJ1cy4gU28gZmFyLCB0aGUgaW5pdGlhbGl6YXRpb24gc2VlbXMgb24gdHJhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19tZGlvX3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oPTM5Nz1pbnQgc3RtbWFjX21kaW9fdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaDozOTg6aW50IHN0bW1hY19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTM5OS1pbnQgc3RtbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKm1paSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03Nzc5PXN0YXRpYyBpbnQgX19zdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgwMjA6XHRyZXQgPSBzdG1tYWNfbWRpb19yZWdpc3RlcihuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODAyMS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jPTU2Nz1zdGF0aWMgdm9pZCBzdG1tYWNfbWRpb19idXNfY29uZmlnKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTU5MC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6NTkxOiAqIHN0bW1hY19tZGlvX3JlZ2lzdGVyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTU5Mi0gKiBAbmRldjogbmV0IGRldmljZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTU5NC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6NTk1OmludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNTk2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ2MTEKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgc3RtbWFjX21kaW9fcmVnaXN0ZXJgIEZhaWx1cmUgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzdG1tYWNfbWRpb19yZWdpc3RlcmAgZnVuY3Rpb24uIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBmYWlsdXJlIHNjZW5hcmlvcy4gV2hhdCBhcmUgdGhlIGNvbW1vbiBwaXRmYWxscyBJIG5lZWQgdG8gY29uc2lkZXI/IEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQ6CgoqICAgKipSZXNvdXJjZSBDb25mbGljdHM6KiogQXJlIHRoZXJlIGFueSBtdXRleGVzLCBzcGlubG9ja3MsIG9yIG90aGVyIGNyaXRpY2FsIHNlY3Rpb25zIHRoYXQgY291bGQgYmUgY29udGVuZGVkLCBsZWFkaW5nIHRvIGEgcmVnaXN0cmF0aW9uIGZhaWx1cmUgaWYgYW5vdGhlciBkZXZpY2Ugb3IgZHJpdmVyIGhhcyBhbHJlYWR5IGdyYWJiZWQgdGhlIHJlcXVpcmVkIHJlc291cmNlcz8gSSYjMzk7bGwgbmVlZCB0byByZXZpZXcgdGhlIGxvY2tpbmcgc2VtYW50aWNzIGNhcmVmdWxseS4KKiAgICoqSGFyZHdhcmUgSW5pdGlhbGl6YXRpb24gSXNzdWVzOioqIERvZXMgdGhpcyByZWdpc3RyYXRpb24gZGVwZW5kIG9uIHRoZSBQSFkgb3IgTUFDIGhhcmR3YXJlIGJlaW5nIGluaXRpYWxpemVkIGluIGEgc3BlY2lmaWMgc3RhdGU/IFBlcmhhcHMgc29tZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBuZWVkIHRvIGJlIHByb2dyYW1tZWQgYmVmb3JlaGFuZCwgYW5kIGlmIHRoYXQgcHJvY2VzcyBpcyBpbnRlcnJ1cHRlZCBvciBmYWlscywgYHN0bW1hY19tZGlvX3JlZ2lzdGVyYCB3b3VsZCByaWdodGx5IGJhaWwgb3V0LiBJIHNob3VsZCB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuCiogICAqKk1ESU8gQnVzIEF2YWlsYWJpbGl0eToqKiBUaGlzIGZ1bmN0aW9uIGlzIHJlZ2lzdGVyaW5nIHdpdGggYW4gTURJTyBidXMuIElzIHRoYXQgYnVzIGd1YXJhbnRlZWQgdG8gYmUgYXZhaWxhYmxlIGFuZCBvcGVyYXRpb25hbCBhdCB0aGlzIHBvaW50IGluIHRoZSBkcml2ZXImIzM5O3MgZXhlY3V0aW9uPyBBcmUgdGhlcmUgYW55IGRlcGVuZGVuY2llcyBvbiB0aGUgYnVzIGJlaW5nIHByb2JlZCBvciBjb25maWd1cmVkPyBJIHdpbGwgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIGl0JiMzOTtzIHBvc3NpYmxlIHRvIGZhaWwgYmVjYXVzZSBvZiBhbiB1bmluaXRpYWxpemVkIG9yIGJyb2tlbiBNRElPIGJ1cy4KKiAgICoqRHJpdmVyIFZlcnNpb24vQ29tcGF0aWJpbGl0eToqKiBEb2VzIHRoaXMgZnVuY3Rpb24mIzM5O3MgYmVoYXZpb3IgY2hhbmdlIGJhc2VkIG9uIHRoZSBrZXJuZWwgdmVyc2lvbiBvciBzcGVjaWZpYyBoYXJkd2FyZSByZXZpc2lvbj8gQ291bGQgdGhlcmUgYmUga25vd24gaXNzdWVzIG9yIHdvcmthcm91bmRzIHJlcXVpcmVkIGZvciBjZXJ0YWluIGNoaXBzZXRzPyBJJiMzOTtsbCBjaGVjayBhbnkgcmVsYXRlZCBlcnJhdGEgb3IgZG9jdW1lbnRhdGlvbi4KKiAgICoqRXJyb3IgUmV0dXJuIENvZGVzOioqIEkgbmVlZCB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgd2hhdCB0aGUgcG9zc2libGUgZXJyb3IgcmV0dXJuIGNvZGVzIHNpZ25pZnkuIElzIGl0IGEgZ2VuZXJpYyBlcnJvciwgb3IgYSBzcGVjaWZpYyBwcm9ibGVtIChlLmcuLCByZXNvdXJjZSBhbGxvY2F0aW9uIGZhaWx1cmUsIGludmFsaWQgcGFyYW1ldGVyLCBoYXJkd2FyZSBlcnJvcik/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZXR1cm4gdmFsdWVzIG9mIGFueXRoaW5nIGNhbGxlZCB3aXRoaW4gdGhpcyBmdW5jdGlvbiwgdG9vLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJleW9uZCBhIGN1cnNvcnkgbG9vayBhdCB0aGUgbWFuIHBhZ2UgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBwcm9ibGVtLgoqICAgKipDb25jdXJyZW5jeS9JbnRlcnJ1cHQgQ29udGV4dDoqKiBJcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCBjb250ZXh0LCBvciBmcm9tIGEgdGFza2xldD8gSWYgdGhlcmUgYXJlIGFueSBzaGFyZWQgcmVzb3VyY2VzLCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgaXMgcmUtZW50cmFudCBhbmQgdGhyZWFkLXNhZmUuCgpVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IHdhbGsgdGhyb3VnaCB0aGUgY29kZSwgZm9jdXNpbmcgb24gdGhlc2UgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzLCB0byBkZXRlcm1pbmUgdGhlIHJvb3QgY2F1c2Ugb2YgYW55IHByb2JsZW1zLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBrZXJuZWwgbG9ncyBhbmQgdGhlbiBtb3ZlIHRvIGEgZGVidWdnZXIgaWYgdGhlIGlzc3VlIGlzIG5vbi1vYnZpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU5NTpcdGludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiA1OTY6XHR7XG4gNTk3Olx0XHRpbnQgZXJyID0gMDtcbiA1OTg6XHRcdHN0cnVjdCBtaWlfYnVzICpuZXdfYnVzO1xuIDU5OTpcdFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gNjAwOlx0XHRzdHJ1Y3Qgc3RtbWFjX21kaW9fYnVzX2RhdGEgKm1kaW9fYnVzX2RhdGEgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWRpb19idXNfZGF0YTtcbiA2MDE6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWRpb19ub2RlID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fbm9kZTtcbiA2MDI6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IG5kZXYtXHUwMDNlZGV2LnBhcmVudDtcbiA2MDM6XHRcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpmaXhlZF9ub2RlO1xuIDYwNDpcdFx0aW50IG1heF9hZGRyID0gUEhZX01BWF9BRERSIC0gMTtcbiA2MDU6XHRcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGU7XG4gNjA2Olx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuIDYwNzpcdFxuIDYwODpcdFx0aWYgKCFtZGlvX2J1c19kYXRhKVxuIDYwOTpcdFx0XHRyZXR1cm4gMDtcbiA2MTA6XHRcbiA2MTE6XHRcdHN0bW1hY19tZGlvX2J1c19jb25maWcocHJpdik7XG4gNjEyOlx0XG4gNjEzOlx0XHRuZXdfYnVzID0gbWRpb2J1c19hbGxvYygpO1xuIDYxNDpcdFx0aWYgKCFuZXdfYnVzKVxuIDYxNTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA2MTY6XHRcbiA2MTc6XHRcdGlmIChtZGlvX2J1c19kYXRhLVx1MDAzZWlycXMpXG4gNjE4Olx0XHRcdG1lbWNweShuZXdfYnVzLVx1MDAzZWlycSwgbWRpb19idXNfZGF0YS1cdTAwM2VpcnFzLCBzaXplb2YobmV3X2J1cy1cdTAwM2VpcnEpKTtcbiA2MTk6XHRcbiA2MjA6XHRcdG5ld19idXMtXHUwMDNlbmFtZSA9IFwmIzM0O3N0bW1hY1wmIzM0OztcbiA2MjE6XHRcbiA2MjI6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpIHtcbiA2MjM6XHRcdFx0bmV3X2J1cy1cdTAwM2VyZWFkID0gXHUwMDI2c3RtbWFjX3hnbWFjMl9tZGlvX3JlYWRfYzIyO1xuIDYyNDpcdFx0XHRuZXdfYnVzLVx1MDAzZXdyaXRlID0gXHUwMDI2c3RtbWFjX3hnbWFjMl9tZGlvX3dyaXRlX2MyMjtcbiA2MjU6XHRcdFx0bmV3X2J1cy1cdTAwM2VyZWFkX2M0NSA9IFx1MDAyNnN0bW1hY194Z21hYzJfbWRpb19yZWFkX2M0NTtcbiA2MjY6XHRcdFx0bmV3X2J1cy1cdTAwM2V3cml0ZV9jNDUgPSBcdTAwMjZzdG1tYWNfeGdtYWMyX21kaW9fd3JpdGVfYzQ1O1xuIDYyNzpcdFxuIDYyODpcdFx0XHRpZiAocHJpdi1cdTAwM2VzeW5vcHN5c19pZCBcdTAwM2MgRFdYR01BQ19DT1JFXzJfMjApIHtcbiA2Mjk6XHRcdFx0XHQvKiBSaWdodCBub3cgb25seSBDMjIgcGh5cyBhcmUgc3VwcG9ydGVkICovXG4gNjMwOlx0XHRcdFx0bWF4X2FkZHIgPSBNSUlfWEdNQUNfTUFYX0MyMkFERFI7XG4gNjMxOlx0XG4gNjMyOlx0XHRcdFx0LyogQ2hlY2sgaWYgRFQgc3BlY2lmaWVkIGFuIHVuc3VwcG9ydGVkIHBoeSBhZGRyICovXG4gNjMzOlx0XHRcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwaHlfYWRkciBcdTAwM2UgTUlJX1hHTUFDX01BWF9DMjJBRERSKVxuIDYzNDpcdFx0XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1Vuc3VwcG9ydGVkIHBoeV9hZGRyIChtYXg9JWQpXFxuXCYjMzQ7LFxuIDYzNTpcdFx0XHRcdFx0XHRNSUlfWEdNQUNfTUFYX0MyMkFERFIpO1xuIDYzNjpcdFx0XHR9XG4gNjM3Olx0XHR9IGVsc2Uge1xuIDYzODpcdFx0XHRuZXdfYnVzLVx1MDAzZXJlYWQgPSBcdTAwMjZzdG1tYWNfbWRpb19yZWFkX2MyMjtcbiA2Mzk6XHRcdFx0bmV3X2J1cy1cdTAwM2V3cml0ZSA9IFx1MDAyNnN0bW1hY19tZGlvX3dyaXRlX2MyMjtcbiA2NDA6XHRcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDNCkge1xuIDY0MTpcdFx0XHRcdG5ld19idXMtXHUwMDNlcmVhZF9jNDUgPSBcdTAwMjZzdG1tYWNfbWRpb19yZWFkX2M0NTtcbiA2NDI6XHRcdFx0XHRuZXdfYnVzLVx1MDAzZXdyaXRlX2M0NSA9IFx1MDAyNnN0bW1hY19tZGlvX3dyaXRlX2M0NTtcbiA2NDM6XHRcdFx0fVxuIDY0NDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjE2NwoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgbG9naWMsIGFzIGlmIGl0IHdlcmUgbXkgb3duIHRob3VnaHQgcHJvY2VzcywgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlIGxpa2UgbXlzZWxmOgoKKipNRElPIERhdGEgUG9pbnRlciBTYW5pdHkgQ2hlY2sqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgc2VlIGhlcmUgaXMgYSB2ZXJ5IGJhc2ljLCBidXQgY3JpdGljYWwsIGVycm9yIGNoZWNrLiBJdCYjMzk7cyBleHBsaWNpdGx5IGRlc2lnbmVkIHRvIGhhbmRsZSBhIHNpdHVhdGlvbiB3aGVyZSBgbWRpb19idXNfZGF0YWAgaXMgYSBudWxsIHBvaW50ZXIuIElmIHRoYXQgaGFwcGVucywgdGhlbiB3ZSYjMzk7cmUgcmV0dXJuaW5nIDAgaW1tZWRpYXRlbHkuIFRoaXMgaXMgc3RhbmRhcmQgZGVmZW5zaXZlIHByb2dyYW1taW5nOyBhIE5VTEwgcG9pbnRlciBpbmRpY2F0ZXMgc29tZXRoaW5nIGZ1bmRhbWVudGFsbHkgd3Jvbmcgd2l0aCB0aGUgc2V0dXAsIHByb2JhYmx5IGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgb3IgYSBmYWlsdXJlIGluIGFsbG9jYXRpb24gc29tZXdoZXJlIHVwc3RyZWFtLiBXZSBuZWVkIHRvIGhhbmRsZSB0aGlzIGdyYWNlZnVsbHkgdG8gYXZvaWQgY3Jhc2hlcyBvciB1bmRlZmluZWQgYmVoYXZpb3IuCgpOb3csIHdoZXJlIGRvZXMgdGhpcyBgbWRpb19idXNfZGF0YWAgYWN0dWFsbHkgKmNvbWUqIGZyb20/IFRoYXQmIzM5O3Mgd2hhdCB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIHRleHQgYWRkcmVzc2VzLiBTcGVjaWZpY2FsbHkgZm9yIFBDSSBkZXZpY2VzLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhbiBpbXBvcnRhbnQgZGV0YWlsIHJlZ2FyZGluZyBpbml0aWFsaXphdGlvbi4gSXQmIzM5O3MgYWxsb2NhdGVkIGVpdGhlciBkdXJpbmcgdGhlIGBzdG1tYWNfcGNpX3Byb2JlYCBwaGFzZSBvciBzb21lIHJlbGF0ZWQgc2V0dXAgZnVuY3Rpb24uIFRoYXQgY29uZmlybXMgbXkgc3VzcGljaW9uIHRoYXQgaXQmIzM5O3Mgc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBQQ0kgaW50ZXJmYWNlIGFuZCBhIG5lY2Vzc2FyeSByZXNvdXJjZS4gS25vd2luZyB0aGlzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYWxsb2NhdGlvbiBwb2ludHMgYXJlIGZ1bmN0aW9uaW5nIGNvcnJlY3RseS4gSWYgYG1kaW9fYnVzX2RhdGFgIGlzIE5VTEwsIHRoZW4gaXQgY291bGQgYmUgYSBmYWlsdXJlIHdpdGggbWVtb3J5IG9yIGEgbG9naWMgZXJyb3IgcmVsYXRlZCB0byB0aGUgcHJvYmluZyBhbmQgc2V0dXAgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2Ugc3BlY2lmaWMgYXJlYXMgd2hlbiBkZWJ1Z2dpbmcgb3IgcmV2aWV3aW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvX2J1c19kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0yMz1zdGF0aWMgdm9pZCBjb21tb25fZGVmYXVsdF9kYXRhKHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MzA6XHRwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEtXHUwMDNlbmVlZHNfcmVzZXQgPSB0cnVlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTMxLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MTE4PXN0YXRpYyBpbnQgc3RtbWFjX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEzMTpcdHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YSA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxMzI6XHRcdFx0XHRcdCAgIHNpemVvZigqcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMzMtXHRcdFx0XHRcdCAgIEdGUF9LRVJORUwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEzNDpcdGlmICghcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEzNS1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTk2CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDaGVja2luZyBNRElPIEJ1cyBEYXRhIGFuZCBSZWdpc3RlciBGdW5jdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IGBtZGlvX2J1c19kYXRhYCBpcywgaW4gZmFjdCwgbm90IGEgbnVsbCBwb2ludGVyLiBUaGF0JiMzOTtzIGdvb2Q7IGEgYmFzaWMgc2FuaXR5IGNoZWNrIHBhc3NlZC4gTm93LCB0aGUgbmV4dCBjcnVjaWFsIHN0ZXAgaXMgdG8gc2VlIGhvdyBgc3RtbWFjX21kaW9fcmVnaXN0ZXJgIHBlcmZvcm1zLiBJIG5lZWQgdG8gY2xvc2VseSBleGFtaW5lIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhhdCBmdW5jdGlvbi4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgcG90ZW50aWFsIGZhaWx1cmUuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZSByZWdpc3RlciBvcGVyYXRpb24gc3VjY2VlZHMgYW5kIGlmIHNvLCB3aGF0IGVycm9ycyBtYXkgaGF2ZSBvY2N1cnJlZCBhbmQgdGhlIHN1YnNlcXVlbnQgc3RlcHMsIHRvIGVuc3VyZSBhIHNvbGlkIE1ESU8gY29uZmlndXJhdGlvbiBmb3IgdGhlIFNUTU1BQyBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjQ1Olx0XG4gNjQ2Olx0XHRpZiAobWRpb19idXNfZGF0YS1cdTAwM2VuZWVkc19yZXNldClcbiA2NDc6XHRcdFx0bmV3X2J1cy1cdTAwM2VyZXNldCA9IFx1MDAyNnN0bW1hY19tZGlvX3Jlc2V0O1xuIDY0ODpcdFxuIDY0OTpcdFx0c25wcmludGYobmV3X2J1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcJiMzNDslcy0leFwmIzM0OyxcbiA2NTA6XHRcdFx0IG5ld19idXMtXHUwMDNlbmFtZSwgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWJ1c19pZCk7XG4gNjUxOlx0XHRuZXdfYnVzLVx1MDAzZXByaXYgPSBuZGV2O1xuIDY1MjpcdFx0bmV3X2J1cy1cdTAwM2VwaHlfbWFzayA9IG1kaW9fYnVzX2RhdGEtXHUwMDNlcGh5X21hc2sgfCBtZGlvX2J1c19kYXRhLVx1MDAzZXBjc19tYXNrO1xuIDY1MzpcdFx0bmV3X2J1cy1cdTAwM2VwYXJlbnQgPSBwcml2LVx1MDAzZWRldmljZTtcbiA2NTQ6XHRcbiA2NTU6XHRcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgbWRpb19ub2RlKTtcbiA2NTY6XHRcdGlmIChlcnIgPT0gLUVOT0RFVikge1xuIDY1NzpcdFx0XHRlcnIgPSAwO1xuIDY1ODpcdFx0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O01ESU8gYnVzIGlzIGRpc2FibGVkXFxuXCYjMzQ7KTtcbiA2NTk6XHRcdFx0Z290byBidXNfcmVnaXN0ZXJfZmFpbDtcbiA2NjA6XHRcdH0gZWxzZSBpZiAoZXJyKSB7XG4gNjYxOlx0XHRcdGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFwmIzM0O0Nhbm5vdCByZWdpc3RlciB0aGUgTURJTyBidXNcXG5cJiMzNDspO1xuIDY2MjpcdFx0XHRnb3RvIGJ1c19yZWdpc3Rlcl9mYWlsO1xuIDY2MzpcdFx0fVxuIDY2NDpcdFxuIDY2NTpcdFx0LyogTG9va3MgbGlrZSB3ZSBuZWVkIGEgZHVtbXkgcmVhZCBmb3IgWEdNQUMgb25seSBhbmQgQzQ1IFBIWXMgKi9cbiA2NjY6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXG4gNjY3Olx0XHRcdHN0bW1hY194Z21hYzJfbWRpb19yZWFkX2M0NShuZXdfYnVzLCAwLCAwLCAwKTtcbiA2Njg6XHRcbiA2Njk6XHRcdC8qIElmIGZpeGVkLWxpbmsgaXMgc2V0LCBza2lwIFBIWSBzY2FubmluZyAqL1xuIDY3MDpcdFx0Zndub2RlID0gZGV2X2Z3bm9kZShwcml2LVx1MDAzZWRldmljZSk7XG4gNjcxOlx0XHRpZiAoZndub2RlKSB7XG4gNjcyOlx0XHRcdGZpeGVkX25vZGUgPSBmd25vZGVfZ2V0X25hbWVkX2NoaWxkX25vZGUoZndub2RlLCBcJiMzNDtmaXhlZC1saW5rXCYjMzQ7KTtcbiA2NzM6XHRcdFx0aWYgKGZpeGVkX25vZGUpIHtcbiA2NzQ6XHRcdFx0XHRmd25vZGVfaGFuZGxlX3B1dChmaXhlZF9ub2RlKTtcbiA2NzU6XHRcdFx0XHRnb3RvIGJ1c19yZWdpc3Rlcl9kb25lO1xuIDY3NjpcdFx0XHR9XG4gNjc3Olx0XHR9XG4gNjc4Olx0XG4gNjc5Olx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBoeV9ub2RlIHx8IG1kaW9fbm9kZSlcbiA2ODA6XHRcdFx0Z290byBidXNfcmVnaXN0ZXJfZG9uZTtcbiA2ODE6XHRcbiA2ODI6XHRcdHBoeWRldiA9IHBoeV9maW5kX2ZpcnN0KG5ld19idXMpO1xuIDY4MzpcdFx0aWYgKCFwaHlkZXYgfHwgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciBcdTAwM2UgbWF4X2FkZHIpIHtcbiA2ODQ6XHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtObyBQSFkgZm91bmRcXG5cJiMzNDspO1xuIDY4NTpcdFx0XHRlcnIgPSAtRU5PREVWO1xuIDY4NjpcdFx0XHRnb3RvIG5vX3BoeV9mb3VuZDtcbiA2ODc6XHRcdH1cbiA2ODg6XHRcbiA2ODk6XHRcdC8qXG4gNjkwOlx0XHQgKiBJZiBhbiBJUlEgd2FzIHByb3ZpZGVkIHRvIGJlIGFzc2lnbmVkIGFmdGVyXG4gNjkxOlx0XHQgKiB0aGUgYnVzIHByb2JlLCBkbyBpdCBoZXJlLlxuIDY5MjpcdFx0ICovXG4gNjkzOlx0XHRpZiAoIW1kaW9fYnVzX2RhdGEtXHUwMDNlaXJxcyBcdTAwMjZcdTAwMjYgbWRpb19idXNfZGF0YS1cdTAwM2Vwcm9iZWRfcGh5X2lycSBcdTAwM2UgMCkge1xuIDY5NDpcdFx0XHRuZXdfYnVzLVx1MDAzZWlycVtwaHlkZXYtXHUwMDNlbWRpby5hZGRyXSA9IG1kaW9fYnVzX2RhdGEtXHUwMDNlcHJvYmVkX3BoeV9pcnE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MTIyCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTVE1NQUMgRHJpdmVyIFByb2JlIEZhaWx1cmUqKgoKT2theSwgc28gaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSWYgYG9mX21kaW9idXNfcmVnaXN0ZXJgIOKAkyBvciBpdHMgZmFsbGJhY2ssIGBtZGlvYnVzX3JlZ2lzdGVyYCDigJMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlcywgdGhlIGNvZGUgdGhlbiB0cmllcyB0byBsb2NhdGUgUEhZcy4gU2luY2UgSSYjMzk7bSB3b3JraW5nIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCB3aXRob3V0IGFjdHVhbCBoYXJkd2FyZSwgSSBrbm93IHRoYXQgYHN0bW1hY19tZGlvX3JlYWRfYzIyYCBpcyBnb2luZyB0byByZXR1cm4gYDB4ZmZmZmAgZnJvbSB0aGUgc2ltdWxhdGVkIE1NSU8gc3BhY2UuIE5hdHVyYWxseSwgdGhpcyBtZWFucyBgcGh5X2ZpbmRfZmlyc3RgIHdpbGwgcmV0dXJuIE5VTEwsIGJlY2F1c2UgaXQgd29uJiMzOTt0IGZpbmQgYW55IHJlYWwgUEhZcy4gVGhlIGRyaXZlciB0aGVuIGhlbHBmdWxseSBsb2dzICYjMzQ7Tm8gUEhZIGZvdW5kJiMzNDsgYW5kIHJldHVybnMgYC1FTk9ERVZgLiBBbmQgdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZmFsbCBhcGFydCDigJMgYF9fc3RtbWFjX2R2cl9wcm9iZWAgZmFpbHMhCgpXYWl0IGEgbWludXRlLCBpZiBgX19zdG1tYWNfZHZyX3Byb2JlYCBmYWlscywgdGhlIG5ldHdvcmsgZGV2aWNlIGlzbiYjMzk7dCByZWdpc3RlcmVkLCBhbmQgSSYjMzk7bSBibG9ja2VkIGZyb20gb3BlbmluZyBpdC4gVGhhdCYjMzk7cyBhIHByb2JsZW0uIElzIHRoZXJlIGEgd2F5IGFyb3VuZCB0aGlzPyBMZXQgbWUgc2VlLiBJIGtub3cgdGhhdCBpZiBgcHJpdi0mZ3Q7cGxhdC0mZ3Q7cGh5X25vZGVgIG9yIGBtZGlvX25vZGVgIGFyZSBzZXQsIGl0IHByb2NlZWRzIHRvIGBidXNfcmVnaXN0ZXJfZG9uZWAuIEZvciBQQ0kgZGV2aWNlcywgaG93ZXZlciwgYG1kaW9fbm9kZWAgaXMgTlVMTC4gUENJIGRldmljZXMgdHlwaWNhbGx5IGRvbiYjMzk7dCB1c2UgZGV2aWNlIHRyZWUgbm9kZXMsIHNvIHRoYXQmIzM5O3Mgbm90IGhlbHBpbmcgbWUuIEhvbGQgb24sIGRvZXMgYHN0bW1hY19wY2lfcHJvYmVgIHNldCBgcGxhdC0mZ3Q7cGh5X25vZGVgPyBObywgdGhhdCBkb2VzbiYjMzk7dCBzZWVtIHJpZ2h0LiBQQ0kgZGV2aWNlcyB1c3VhbGx5IGRvbiYjMzk7dCBoYXZlIGRldmljZSB0cmVlIG5vZGVzIGFzc29jaWF0ZWQgd2l0aCB0aGVtLiBMZXQgbWUgZG91YmxlIGNoZWNrIGBzdG1tYWNfcGNpLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3ODYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgRHJpdmVyIENvZGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBpc3N1ZSwgc28gbGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGxvdy1oYW5naW5nIGZydWl0IGFuZCB0cmFjZSB0aGUgZmxvdy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYGR3bWFjLWludGVsLmNgIGZpbGUuIFRoaXMgaXMgdGhlIGRyaXZlciBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIERXTUFDIChEZXNpZ25XYXJlIE1BQykgY29udHJvbGxlciBvbiBJbnRlbCBwbGF0Zm9ybXMsIHNvIGl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIGludmVzdGlnYXRpbmcgYW55IE1BQy1sYXllciBwZXJmb3JtYW5jZSBpc3N1ZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwcm9ibGVtcykgbGlrZWx5IHJlc2lkZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MDAyCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBkd21hYy1sb29uZ3Nvbi5jYCoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoZSBgZHdtYWMtbG9vbmdzb24uY2AgZmlsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBMb29uZ3NvbiBhcmNoaXRlY3R1cmUmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgRFdNQUMgZHJpdmVyIHNwZWNpZmljYWxseS4gV2hhdCBraW5kIG9mIGN1c3RvbWl6YXRpb25zLCBpZiBhbnksIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBmb3IgdGhpcyBwbGF0Zm9ybT8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhbnkgdW5pcXVlIGNsb2NraW5nIHNjaGVtZXMsIGludGVycnVwdCBoYW5kbGluZyBudWFuY2VzLCBvciBtZW1vcnkgbWFwcGluZyBxdWlya3Mgc3BlY2lmaWMgdG8gdGhlIExvb25nc29uIFNvQ3M/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgc2VjdGlvbnMgdG8gZm9jdXMgb24gLSBwZXJoYXBzIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5ncywgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGFuZCBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgRE1BIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gbG9vayBmb3IgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgc2lnbmFsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRoZSBMb29uZ3NvbiB2ZXJzaW9uIG9yIHNwZWNpZmljIGZlYXR1cmVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgZ2V0IGEgaGFuZGxlIG9uIHRoZSBzcGVjaWZpY3MuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhpcyBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjgyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIERyaXZlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHN0YXJ0ZWQgb24gdGhpcywgYW5kIHRoZSBmaXJzdCBwbGFjZSBteSBicmFpbiBpcyBqdW1waW5nIHRvIGlzIGBkd21hYy1tb3RvcmNvbW0uY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBkcml2ZXIgY29kZSwgcGFydGljdWxhcmx5IHRoZSBwYXJ0cyByZWxhdGVkIHRvIHRoZSBNb3RvckNvbW0tc3BlY2lmaWMgZmVhdHVyZXMsIGFzc3VtaW5nIGl0JiMzOTtzIGNvcnJlY3RseSBuYW1lZC4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzLCBpbnRlcnJ1cHQgaGFuZGxlcnMsIGFuZCBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byB3b3JrIHRocm91Z2ggdGhlIGltcGxlbWVudGF0aW9uIGFuZCBwaW5wb2ludCB3aGVyZSB0aGUgcG90ZW50aWFsIGlzc3VlIGxpZXMsIG9yIGF0IGxlYXN0IGdhaW4gYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBvcGVyYXRpb25hbCBsb2dpYy4gVGhpcyBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgYW55IGluIGRlcHRoIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTUwOAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGluIFBIWSBJRCBEZXRlY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgZ290IG1lIHRoaW5raW5nLiBJZiBgcGh5X2ZpbmRfZmlyc3RgIGZhaWxzLCBpdCByZXR1cm5zIGAtRU5PREVWYCwgd2hpY2ggaXMgc3RhbmRhcmQuIEJ1dCB0aGVuIGl0IGhpdCBtZTogd2hhdCBpZiBgc3RtbWFjX21kaW9fcmVhZF9jMjJgIOKAkyB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiByZWFkaW5nIHRoZSBQSFkgSUQg4oCTIHJldHVybnMgc29tZXRoaW5nIHRoYXQgKmxvb2tzKiBsaWtlIGEgdmFsaWQgUEhZIElELCBldmVuIGlmIGl0JiMzOTtzIG5vdD8gV2Uga25vdyB0aGF0IFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGNhbiBpbnRlcmNlcHQgdGhvc2UgTU1JTyByZWFkcyBhbmQgcHJvdmlkZSByYW5kb20gdmFsdWVzLiBJZiB0aG9zZSByYW5kb20gdmFsdWVzIGhhcHBlbiB0byB0cmljayBgcGh5X2ZpbmRfZmlyc3RgIGludG8gdGhpbmtpbmcgdGhlcmUmIzM5O3MgYSB2YWxpZCBQSFksIHdlJiMzOTt2ZSBnb3QgYSBwcm9ibGVtLiBBbmQgdGhlIHJlYXNvbiB0aGlzIGlzIGEgYmlnIGRlYWwgaXMgYmVjYXVzZSBgc3RtbWFjX21kaW9fcmVhZF9jMjJgIHJlbGllcyBvbiByZWFkaW5nIHRoZSBHTUlJX0RBVEEgcmVnaXN0ZXIsIHNvIG1heWJlIHRoYXQgcmVnaXN0ZXIgaXMgdGhlIGN1bHByaXQuIE5vdywgSSBzaG91bGQgZGl2ZSBpbnRvIGBzdG1tYWNfbWRpb19yZWFkX2MyMmAgdG8gc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX21kaW9fcmVhZF9jMjImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYz0yODM9c3RhdGljIGludCBzdG1tYWNfbWRpb193cml0ZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBwYSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTI4OS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6MjkwOiAqIHN0bW1hY19tZGlvX3JlYWRfYzIyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTI5MS0gKiBAYnVzOiBwb2ludHMgdG8gdGhlIG1paV9idXMgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy0yOTgtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jOjI5OTpzdGF0aWMgaW50IHN0bW1hY19tZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlhZGRyLCBpbnQgcGh5cmVnKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy0zMDAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM9NTk1PWludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTYzNy1cdH0gZWxzZSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jOjYzODpcdFx0bmV3X2J1cy1cdTAwM2VyZWFkID0gXHUwMDI2c3RtbWFjX21kaW9fcmVhZF9jMjI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTYzOS1cdFx0bmV3X2J1cy1cdTAwM2V3cml0ZSA9IFx1MDAyNnN0bW1hY19tZGlvX3dyaXRlX2MyMjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAzNjYKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSB3ZSBnby4uLgoKKipBbmFseXppbmcgdGhlIGBzdG1tYWNfbWRpb19yZWFkX2MyMmAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBzdG1tYWNfbWRpb19yZWFkX2MyMmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBzdG1tYWMgZHJpdmVyLiBDbGVhcmx5LCBpdCYjMzk7cyBpbnZvbHZlZCBpbiBNZWRpYSBJbmRlcGVuZGVudCBJbnRlcmZhY2UgKE1JSSkgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBDbGF1c2UgMjIgTUlJIGludGVyZmFjZS4gR2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWUsIEkgc3VzcGVjdCB0aGlzIGlzIGEgcmVhZCBvcGVyYXRpb24sIGFpbWluZyB0byByZXRyaWV2ZSBkYXRhIGZyb20gYSBjb25uZWN0ZWQgTUlJIGRldmljZS4gVGhlICYjMzQ7YzIyJiMzNDsgbGlrZWx5IHBvaW50cyB0byB0aGUgc3BlY2lmaWMgcHJvdG9jb2wgdmVyc2lvbiBiZWluZyB1dGlsaXplZCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBzdXNwaWNpb24gYnkgaW5zcGVjdGluZyB0aGUgZnVuY3Rpb24mIzM5O3MgcGFyYW1ldGVycyBhbmQgaW50ZXJuYWwgbG9naWMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHJlZ2lzdGVyIGFkZHJlc3NlcywgcmVhZCBjb21tYW5kcywgZGF0YSByZXRyaWV2YWwgbWVjaGFuaXNtcywgYW5kIGFueSBlcnJvciBoYW5kbGluZyBvciByZXRyeSBsb2dpYy4gV2hhdCBzcGVjaWZpYyByZWdpc3RlcnMgYXJlIGJlaW5nIGFjY2Vzc2VkPyBJcyBpdCBoYW5kbGluZyBhbnkgbmVjZXNzYXJ5IGNsb2NraW5nIG9yIHRpbWluZyBjb25zaWRlcmF0aW9ucyBmb3IgdGhlIE1ESU8gYnVzPyBBbnkgcG93ZXIgbWFuYWdlbWVudCBjYWxscz8gQWxzbywgaG93IGlzIHRoZSBkZXZpY2UgYWRkcmVzcyBwYXNzZWQgdG8gaXQ/IEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIE1ESU8gZnJhbWV3b3JrIHdpdGhpbiB0aGUgc3RtbWFjIGRyaXZlci4gV2hhdCBhcmUgdGhlIGNvbW1vbiBlcnJvciBjYXNlcyBpdCBuZWVkcyB0byBoYW5kbGUsIHN1Y2ggYXMgYW4gTkFDSyBvciBhIHRpbWVvdXQ/IElzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGRpcmVjdGx5IGJ5IGFub3RoZXIgbW9kdWxlIG9yIGRvZXMgaXQgcGVyZm9ybSBzb21lIGludGVybmFsIGZ1bmN0aW9ucz8gRmluYWxseSwgaG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgUEhZIG9yIG90aGVyIGNvbm5lY3RlZCBNRElPIGRldmljZXM/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoaXMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgcmVhZCBvcGVyYXRpb24sIGJ1dCBJIGtub3cgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQmIzM5O3Mgc3RhcnQgcmVhZGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTk6XHRzdGF0aWMgaW50IHN0bW1hY19tZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlhZGRyLCBpbnQgcGh5cmVnKVxuIDMwMDpcdHtcbiAzMDE6XHRcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGJ1cy1cdTAwM2Vwcml2KTtcbiAzMDI6XHRcdHUzMiBjbWQ7XG4gMzAzOlx0XG4gMzA0Olx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUM0KVxuIDMwNTpcdFx0XHRjbWQgPSBNSUlfR01BQzRfUkVBRDtcbiAzMDY6XHRcdGVsc2VcbiAzMDc6XHRcdFx0Y21kID0gMDtcbiAzMDg6XHRcbiAzMDk6XHRcdHJldHVybiBzdG1tYWNfbWRpb19yZWFkKHByaXYsIHBoeWFkZHIsIHBoeXJlZywgY21kLCAwKTtcbiAzMTA6XHR9XG4gMzExOlx0XG4gMzEyOlx0LyoqXG4gMzEzOlx0ICogc3RtbWFjX21kaW9fcmVhZF9jNDVcbiAzMTQ6XHQgKiBAYnVzOiBwb2ludHMgdG8gdGhlIG1paV9idXMgc3RydWN0dXJlXG4gMzE1Olx0ICogQHBoeWFkZHI6IE1JSSBhZGRyXG4gMzE2Olx0ICogQGRldmFkOiBkZXZpY2UgYWRkcmVzcyB0byByZWFkXG4gMzE3Olx0ICogQHBoeXJlZzogTUlJIHJlZ1xuIDMxODpcdCAqIERlc2NyaXB0aW9uOiBpdCByZWFkcyBkYXRhIGZyb20gdGhlIE1JSSByZWdpc3RlciBmcm9tIHdpdGhpbiB0aGUgcGh5IGRldmljZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwOTcKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSB3ZSBnby4uLgoKKipEZWx2aW5nIGludG8gdGhlIGBzdG1tYWNfbWRpb19yZWFkYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHN0bW1hY19tZGlvX3JlYWRgIGZ1bmN0aW9uLiBCYXNlZCBvbiB0aGUgbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgY29yZSByb3V0aW5lIGZvciByZWFkaW5nIGRhdGEgZnJvbSBhbiBNRElPIGJ1cywgbGlrZWx5IHJlbGF0ZWQgdG8gYW4gU1RNaWNyb2VsZWN0cm9uaWNzIEV0aGVybmV0IE1BQyAoU1RNTUFDKSBjb250cm9sbGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIHBoeXNpY2FsIGxheWVyIChQSFkpIHRocm91Z2ggdGhpcyBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyDigJMgdGhlIGJpdC1iYW5naW5nLCB0aGUgcmVnaXN0ZXIgYWNjZXNzIHBhdHRlcm5zLCBhbmQgYW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIG9yIGVycm9yIGhhbmRsaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKlJlZ2lzdGVyIEFkZHJlc3Npbmc6KiogSG93IGRvZXMgaXQgY29uc3RydWN0IHRoZSBNRElPIHJlZ2lzdGVyIGFkZHJlc3Nlcz8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdGVjaG5pcXVlcyB1c2VkIGZvciBkaWZmZXJlbnQgUEhZIHR5cGVzIG9yIHZlbmRvci1zcGVjaWZpYyByZWdpc3RlcnM/CiogICAqKkRhdGEgVHJhbnNmZXI6KiogSG93IGlzIHRoZSByZWFkIG9wZXJhdGlvbiBpbXBsZW1lbnRlZD8gSXMgaXQgcG9sbGluZywgaW50ZXJydXB0LWRyaXZlbiwgb3IgYSBjb21iaW5hdGlvbj8gV2hhdCBhcmUgdGhlIHRpbWluZyBjb25zaWRlcmF0aW9ucywgZ2l2ZW4gdGhlIHNwZWVkIG9mIHRoZSBNRElPIGJ1cz8KKiAgICoqRXJyb3IgQ2hlY2tpbmc6KiogRG9lcyBpdCBpbXBsZW1lbnQgYW55IENSQyBvciBwYXJpdHkgY2hlY2tzIG9uIHRoZSByZWFkIGRhdGE/IERvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCBidXMgZXJyb3JzLCBzdWNoIGFzIGEgbWlzc2luZyBvciB1bnJlc3BvbnNpdmUgUEhZPwoqICAgKipTeW5jaHJvbml6YXRpb246KiogSG93IGRvZXMgaXQgZW5zdXJlIHByb3BlciBzeW5jaHJvbml6YXRpb24gd2l0aCB0aGUgUEhZLCBwYXJ0aWN1bGFybHkgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSByZWFkIHRyYW5zYWN0aW9uPwoqICAgKipJbnRlcnJ1cHQgSGFuZGxpbmcgKGlmIGFueSk6KiogSWYgaW50ZXJydXB0cyBhcmUgaW52b2x2ZWQsIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIHNlcnZpY2VkIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucy4KKiAgICoqUEhZIEFkZHJlc3MgSGFuZGxpbmc6KiogSG93IGlzIHRoZSBQSFkmIzM5O3MgYWRkcmVzcyBoYW5kbGVkPyBJcyBpdCBoYXJkY29kZWQsIHBhc3NlZCBhcyBhIHBhcmFtZXRlciwgb3IgZHluYW1pY2FsbHkgZGV0ZXJtaW5lZD8KKiAgICoqQ2xhcml0eSBvZiBjb2RlOioqIEhvdyBhcmUgdGhlIHZhcmlvdXMgc3RlcHMgZW5jYXBzdWxhdGVkPyBXaGF0IGlzIHRoZSBjb2RlIHN0eWxlPyBXaWxsIEkgbmVlZCB0byBzcGVuZCBhIGxvdCBvZiB0aW1lIGRlY2lwaGVyaW5nIGl0PwoKSSB3YW50IHRvIHNlZSBob3cgdGhlIGZ1bmN0aW9uIGludGVncmF0ZXMgd2l0aGluIHRoZSBsYXJnZXIgYHN0bW1hY2AgZHJpdmVyIGFyY2hpdGVjdHVyZSBhbmQgd2hhdCBsZXZlbCBvZiBhYnN0cmFjdGlvbiBpdCBwcm92aWRlcy4gTXkgZ29hbCBpcyB0byBncmFzcCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFuZCBwb3RlbnRpYWwgcGl0ZmFsbHMgb2YgdGhpcyBNRElPIHJlYWQgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSBob3cgdGhlIGVuZ2luZWVycyB0YWNrbGVkIHRoaXMgY3JpdGljYWwgcGFydCBvZiB0aGUgZHJpdmVyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MDpcdFx0ICAgICAgIE1JSV9BRERSX0dCVVNZO1xuIDI0MTpcdH1cbiAyNDI6XHRcbiAyNDM6XHRzdGF0aWMgaW50IHN0bW1hY19tZGlvX2FjY2VzcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBwYSxcbiAyNDQ6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgZ3IsIHUzMiBjbWQsIHUzMiBkYXRhLCBib29sIHJlYWQpXG4gMjQ1Olx0e1xuIDI0NjpcdFx0dm9pZCBfX2lvbWVtICptaWlfYWRkcmVzcyA9IHByaXYtXHUwMDNlaW9hZGRyICYjNDM7IHByaXYtXHUwMDNlaHctXHUwMDNlbWlpLmFkZHI7XG4gMjQ3Olx0XHR2b2lkIF9faW9tZW0gKm1paV9kYXRhID0gcHJpdi1cdTAwM2Vpb2FkZHIgJiM0MzsgcHJpdi1cdTAwM2Vody1cdTAwM2VtaWkuZGF0YTtcbiAyNDg6XHRcdHUzMiBhZGRyO1xuIDI0OTpcdFx0aW50IHJldDtcbiAyNTA6XHRcbiAyNTE6XHRcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQocHJpdi1cdTAwM2VkZXZpY2UpO1xuIDI1MjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAyNTM6XHRcdFx0cmV0dXJuIHJldDtcbiAyNTQ6XHRcbiAyNTU6XHRcdHJldCA9IHN0bW1hY19tZGlvX3dhaXQobWlpX2FkZHJlc3MsIE1JSV9BRERSX0dCVVNZKTtcbiAyNTY6XHRcdGlmIChyZXQpXG4gMjU3Olx0XHRcdGdvdG8gb3V0O1xuIDI1ODpcdFxuIDI1OTpcdFx0YWRkciA9IHN0bW1hY19tZGlvX2Zvcm1hdF9hZGRyKHByaXYsIHBhLCBncikgfCBjbWQ7XG4gMjYwOlx0XG4gMjYxOlx0XHR3cml0ZWwoZGF0YSwgbWlpX2RhdGEpO1xuIDI2MjpcdFx0d3JpdGVsKGFkZHIsIG1paV9hZGRyZXNzKTtcbiAyNjM6XHRcbiAyNjQ6XHRcdHJldCA9IHN0bW1hY19tZGlvX3dhaXQobWlpX2FkZHJlc3MsIE1JSV9BRERSX0dCVVNZKTtcbiAyNjU6XHRcdGlmIChyZXQpXG4gMjY2Olx0XHRcdGdvdG8gb3V0O1xuIDI2NzpcdFxuIDI2ODpcdFx0LyogUmVhZCB0aGUgZGF0YSBmcm9tIHRoZSBNSUkgZGF0YSByZWdpc3RlciBpZiBpbiByZWFkIG1vZGUgKi9cbiAyNjk6XHRcdHJldCA9IHJlYWQgPyByZWFkbChtaWlfZGF0YSkgXHUwMDI2IE1JSV9EQVRBX0dEX01BU0sgOiAwO1xuIDI3MDpcdFxuIDI3MTpcdG91dDpcbiAyNzI6XHRcdHBtX3J1bnRpbWVfcHV0KHByaXYtXHUwMDNlZGV2aWNlKTtcbiAyNzM6XHRcbiAyNzQ6XHRcdHJldHVybiByZXQ7XG4gMjc1Olx0fVxuIDI3NjpcdFxuIDI3NzpcdHN0YXRpYyBpbnQgc3RtbWFjX21kaW9fcmVhZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBwYSxcbiAyNzg6XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGdyLCB1MzIgY21kLCBpbnQgZGF0YSlcbiAyNzk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMjMwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogODY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIGFuZCBGdXp6aW5nIGBzdG1tYWNfbWFjX2xpbmtfdXBgKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgc3RtbWFjX21hY19saW5rX3VwYCBmdW5jdGlvbi4gSXQgc2VlbXMgcmVhY2hhYmxlIHRocm91Z2ggc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6aW5nLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTGV0IG1lIHdhbGsgdGhyb3VnaCBteSB0aG91Z2h0IHByb2Nlc3MuCgpGaXJzdCwgYHN0bW1hY19tZGlvX3dhaXRgIHdhaXRzIGZvciBgTUlJX0FERFJfR0JVU1lgIHRvIGNsZWFyLCBidXQgaWYgdGhlIGZ1enplciB0aHJvd3MgYSB2YWx1ZSBvZiBgMHhmZmZmZmZmZmAsIHRoYXQmIzM5O2xsIGNhdXNlIGEgdGltZW91dC4gSG93ZXZlciwgaWYgdGhlIGZ1enplciBoaXRzIGEgdmFsdWUgd2hlcmUgYE1JSV9BRERSX0dCVVNZYCAqaXMqIHplcm8sIHRoZW4gYHN0bW1hY19tZGlvX3dhaXRgIGFjdHVhbGx5IHN1Y2NlZWRzLiBJdCB0aGVuIHJlYWRzIGBtaWlfZGF0YWAuIElmIHRoYXQgcmV0dXJucyBhIHZhbGlkIFBIWSBJROKAlG5vdCBgMHhmZmZmYCBvciBgMHgwMDAwYOKAlGBwaHlfZmluZF9maXJzdGAgd2lsbCBzdWNjZWVkLiBUaGlzIGZ1bmN0aW9uIHNjYW5zIGFkZHJlc3NlcyAwLTMxLCByZWFkaW5nIHJlZ2lzdGVycyAyIGFuZCAzIGZvciB0aGUgUEhZIElELiBTbywgaWYgdGhlIGZ1enplciBwcm92aWRlcyBhIHZhbGlkIFBIWSBJRCwgYSBQSFkgZGV2aWNlIGdldHMgY3JlYXRlZC4gQ29uc2VxdWVudGx5LCBgc3RtbWFjX21kaW9fcmVnaXN0ZXJgIGFuZCB0aGVuIGBfX3N0bW1hY19kdnJfcHJvYmVgIHN1Y2NlZWQsIGFuZCB0aGUgbmV0ZGV2IGlzIHJlZ2lzdGVyZWQuCgpOb3csIHdoZW4gSSBicmluZyB0aGUgZGV2aWNlIHVwIHdpdGggYGlwIGxpbmsgc2V0IGV0aDAgdXBgLCBpdCBjYWxscyBgc3RtbWFjX21hY19saW5rX3VwYCB3aGVuIHRoZSBQSFkgbGluayBjb21lcyB1cC4gQW5kLCBzaW5jZSBgc3RtbWFjX21hY19saW5rX3VwYCBpcyBhIHBoeWxpbmsgY2FsbGJhY2ssIGlmIHRoZSBmdXp6ZXIgcHJvdmlkZXMgYSB2YWxpZCBQSFkgSUQsIHBoeWxpbmsgYXR0YWNoZXMgdGhlIFBIWSwgYW5kIHRoZW4gc3RhcnRzIHBvbGxpbmcgaXQgZm9yIHN0YXR1cyBieSByZWFkaW5nIHJlZ2lzdGVyIDEsIGV0Yy4gSWYgdGhlIGZ1enplciByZXR1cm5zIHNvbWV0aGluZyBpbmRpY2F0aW5nIGxpbmsgdXAsIGBwaHlsaW5rYCBjYWxscyBgbWFjX2xpbmtfdXBgLgoKU28sIGl0ICppcyogcmVhY2hhYmxlIHdpdGggUENJIGZ1enppbmchIEkmIzM5O20gdGhpbmtpbmcgdGhhdCYjMzk7cyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLgoKQnV0IHdhaXQsIGlzIHRoaXMgKm9ubHkqIHJlYWNoYWJsZSB2aWEgUENJIGZ1enppbmc/IFdoYXQgYWJvdXQgcGxhdGZvcm0gZHJpdmVycz8gSSYjMzk7bSBub3cgdGhpbmtpbmcgYWJvdXQgdGhlIGBkd21hYy1pbnRlbC5jYCwgYGR3bWFjLWxvb25nc29uLmNgLCBhbmQgYGR3bWFjLW1vdG9yY29tbS5jYCBkcml2ZXJzIOKAkyB0aGV5ICphcmUqIFBDSS4gQnV0IHdoYXQgYWJvdXQgYWxsIHRoZSBwbGF0Zm9ybSBkcml2ZXJzIGxpa2UgYGR3bWFjLWR3Yy1xb3MtZXRoLmNgLCBgZHdtYWMtaXBxODA2eC5jYCwgZXRjPyBTeXprYWxsZXIgY2FuIGZ1enogcGxhdGZvcm0gZGV2aWNlcywgYnV0IGl0JiMzOTtzIHVzdWFsbHkgZGVwZW5kZW50IG9uIHRoZSBkZXZpY2UgdHJlZSBvciBleGlzdGluZyBkZXZpY2VzLiBQQ0ksIHRob3VnaCwgY2FuIGJlIGluamVjdGVkIGR5bmFtaWNhbGx5LCB3aGljaCBpcyBwZXJmZWN0IGhlcmUuCgpTaW5jZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYHN0bW1hY19tYWNfbGlua191cGAgdG8gaGFuZGxlIHRoZSBuZXcgc3BlZWRzIGZvciBgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUlgIGFuZCBgUEhZX0lOVEVSRkFDRV9NT0RFX1hMR01JSWAsIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhhdCBtYWtlcyBpdCBtb3JlIGludGVyZXN0aW5nIGZvciBmdXp6aW5nIQoKT2theSwgdGltZSB0byBmaWd1cmUgb3V0IHRoZSBuZWVkZWQgY29uZmlncy4gSSB0aGluayBJJiMzOTtsbCBuZWVkIGBTVE1NQUNfRVRIYCwgYFNUTU1BQ19QQ0lgLCBgRFdNQUNfSU5URUxgIChtYXliZSB0byBnZXQgbW9yZSBQQ0kgSURzKSwgYERXTUFDX0xPT05HU09OYCwgYW5kIGBEV01BQ19NT1RPUkNPTU1gLiBJIHNob3VsZCBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERXTUFDX0lOVEVMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9MzIyPWNvbmZpZyBEV01BQ19JTVg4XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zMzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjMzNDpjb25maWcgRFdNQUNfSU5URUxfUExBVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zMzUtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBkd21hYyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0zNzM9Y29uZmlnIFNUTU1BQ19MSUJQQ0lcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTM3Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6Mzc4OmNvbmZpZyBEV01BQ19JTlRFTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zNzktXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBHTUFDIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQwNjMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgRFdNQUMgQ29uZmlncyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgc3RhdGUgb2YgdGhlIGBEV01BQ19MT09OR1NPTmAgYW5kIGBEV01BQ19NT1RPUkNPTU1gIGNvbmZpZ3VyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVjYWxsIGFueSByZWNlbnQgd29yayBJIG1pZ2h0IGhhdmUgZG9uZSBpbiB0aGlzIGFyZWEuIEhhdmUgdGhlcmUgYmVlbiBhbnkgcmVwb3J0ZWQgaXNzdWVzIG9yIG1vZGlmaWNhdGlvbnMgcGVuZGluZz8gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBkcml2ZXJzIG9yIG1vZHVsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggb2YgdGhvc2UuIEFyZSB3ZSBkZWFsaW5nIHdpdGggc3RhbmRhcmQgY29uZmlndXJhdGlvbnMsIG9yIGFyZSB0aGVyZSBjdXN0b20gcGF0Y2hlcyBpbnZvbHZlZD8gV2hhdCYjMzk7cyB0aGUgbGF0ZXN0IGJ1aWxkIHN0YXR1cyBmb3IgZWFjaD8gSSBuZWVkIHRvIGNoZWNrIGZvciB1cHN0cmVhbSB1cGRhdGVzIG9yIGRvd25zdHJlYW0gbW9kaWZpY2F0aW9ucy4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGFzY2VydGFpbiBxdWlja2x5LCBhcmUgd2Ugc3RpbGwgYWxpZ25lZCB3aXRoIGJlc3QgcHJhY3RpY2VzIGZvciB0aG9zZSBNQUMgY29uZmlndXJhdGlvbnM/IERlcGVuZGluZyBvbiB3aGF0IEkgZmluZCwgSSBtaWdodCBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGVtIHdpdGggb3VyIHByb2plY3QmIzM5O3MgZG9jdW1lbnRhdGlvbiwgcmVsZXZhbnQgbWFpbGluZyBsaXN0cywgb3IgZXZlbiB0aGUgdXBzdHJlYW0gc291cmNlLiBVbHRpbWF0ZWx5LCBJIGFtIGxvb2tpbmcgZm9yIHdoZXRoZXIgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZTogYSkgY3VycmVudCBiKSB3b3JraW5nIGMpIG9wdGltYWwsIGFzIGEgcXVpY2sgZmlyc3QgcGFzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERXTUFDX0xPT05HU09OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9MzM0PWNvbmZpZyBEV01BQ19JTlRFTF9QTEFUXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zNDMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjM0NDpjb25maWcgRFdNQUNfTE9PTkdTT04xXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTM0NS1cdHRyaXN0YXRlIFwmIzM0O0xvb25nc29uMSBHTUFDIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM3OD1jb25maWcgRFdNQUNfSU5URUxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTM4Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6Mzg4OmNvbmZpZyBEV01BQ19MT09OR1NPTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zODktXHR0cmlzdGF0ZSBcJiMzNDtMb29uZ3NvbiBQQ0kgRFdNQUMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDU3OAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCBhcmUgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1BDSWAsIGBEV01BQ19JTlRFTGAsIGBEV01BQ19MT09OR1NPTmAsIGFuZCBgRFdNQUNfTU9UT1JDT01NYC4gSXQmIzM5O3MgZ29vZCB0byBrZWVwIHRob3NlIGluIG1pbmQgYXMgY29udGV4dC4gVGhlIG1haW4gZnVuY3Rpb24gdG91Y2hlZCwgd2hpY2ggSSBuZWVkIHRvIGZvY3VzIG9uLCBhcHBlYXJzIHRvIGJlIGBzdG1tYWNfbWFjX2xpbmtfdXBgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSAqb25seSogZnVuY3Rpb24gaW1wYWN0ZWQgYnkgdGhpcyBkaWZmLiBBZnRlciBxdWlja2x5IHNjYW5uaW5nIHRoZSBwYXRjaCwgSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgYHN0bW1hY19tYWNfbGlua191cGAgaXMgaW5kZWVkIHRoZSBzb2xlIGZ1bmN0aW9uIHRoYXQgd2FzIGNoYW5nZWQuCgpOb3csIGxldCYjMzk7cyB6b29tIGluIG9uIHRoZSBjb2RlIG1vZGlmaWNhdGlvbiBpdHNlbGYuIEl0JiMzOTtzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UgaW4gYHN0bW1hY19tYWNfbGlua191cGAuICBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYSBzZXJpZXMgb2YgbmVzdGVkIGBpZi9lbHNlIGlmL2Vsc2VgIHN0YXRlbWVudHMgdG8gaGFuZGxlIGRpZmZlcmVudCBzcGVlZHMgYmFzZWQgb24gdGhlIGBQSFlfSU5URVJGQUNFX01PREVgLiBUaGUgbmV3IHBhdGNoIGhhcyBmbGF0dGVuZWQgdGhhdCBpbnRvIGEgc2luZ2xlIGBzd2l0Y2hgIHN0YXRlbWVudC4gQWxzbywgaXQgYXBwZWFycyB0aGVyZSB3ZXJlIHNvbWUgbWlzc2luZyBzcGVlZCBlbnRyaWVzIGZvciBib3RoIGBVU1hHTUlJYCBhbmQgYFhMR01JSWAgaW50ZXJmYWNlcyBpbiB0aGUgb3JpZ2luYWwgY29kZSwgYW5kIHRoZXkgYXJlIG5vdyBjb3ZlcmVkLiBUaGUgcGF0Y2ggYXBwZWFycyB0byB1bmlmeSBzcGVlZCBoYW5kbGluZyBmb3IgdGhlc2UgaW50ZXJmYWNlcy4gSW4gdGhlIG9yaWdpbmFsIHZlcnNpb24gaXQgc2VlbXMgdGhlcmUgd2FzIG5vIHNwZWVkIGhhbmRsaW5nIGZvciB0aGUgbmV3ZXIgc3BlZWRzLCBhbmQgaXQgYXBwZWFycyB0aGUgbmV3IGNvZGUgZml4ZXMgdGhpcy4gT3ZlcmFsbCwgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYWltZWQgYXQgc3RyZWFtbGluaW5nIHNwZWVkIGhhbmRsaW5nIGFuZCBlbnN1cmluZyBhbGwgcmVsZXZhbnQgc3BlZWRzIGFyZSBzdXBwb3J0ZWQsIGF0IGxlYXN0IGZyb20gd2hhdCBJIGNhbiBzZWUuICBUaGlzIGlzIGEgcHJldHR5IHR5cGljYWwgcGF0dGVybiBmb3IgcmVmYWN0b3Jpbmcg4oCTIGltcHJvdmluZyBjb2RlIHJlYWRhYmlsaXR5IGFuZCBhZGRyZXNzaW5nIHBvdGVudGlhbCBnYXBzIGluIHRoZSBzdXBwb3J0ZWQgZmVhdHVyZSBzZXQuCgpHaXZlbiB0aGF0IHRoaXMgaXMgYHN0bW1hY19tYWNfbGlua191cGAsIGl0JiMzOTtzIGFsbCBhYm91dCBicmluZ2luZyB0aGUgbGluayB1cCwgdGhlIFBIWSBpbnRlcmZhY2UsIGFuZCB0aGUgc3BlZWRzIHN1cHBvcnRlZCB3aXRoaW4gdGhvc2UgaW50ZXJmYWNlcywgd2hpY2ggbWFrZSBpdCBuZWNlc3NhcnkgZm9yIGEgY29ycmVjdCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRlc3RlZCB0aG9yb3VnaGx5IGZvciB0aGUgYWZmZWN0ZWQgaW50ZXJmYWNlIG1vZGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfbWFjX2xpbmtfdXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz0xMDU2PXN0YXRpYyB2b2lkIHN0bW1hY19tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTA2OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6MTA2OTpzdGF0aWMgdm9pZCBzdG1tYWNfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTEwNzAtXHRcdFx0ICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz0xMjQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHN0bW1hY19waHlsaW5rX21hY19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0xMjUxLVx0Lm1hY19saW5rX2Rvd24gPSBzdG1tYWNfbWFjX2xpbmtfZG93bixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6MTI1MjpcdC5tYWNfbGlua191cCA9IHN0bW1hY19tYWNfbGlua191cCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTI1My1cdC5tYWNfZGlzYWJsZV90eF9scGkgPSBzdG1tYWNfbWFjX2Rpc2FibGVfdHhfbHBpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjYyOQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFNUTU1BQyBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSByZWNlbnQgY2hhbmdlIHRvIGBzdG1tYWNfbWFjX2xpbmtfdXBgLiBUaGF0JiMzOTtzIHRoZSBvbmx5IGRpcmVjdCBtb2RpZmljYXRpb24gSSBzZWUsIHdoaWNoIHNpbXBsaWZpZXMgdGhlIHNjb3BlIG9mIHRoZSBpbnZlc3RpZ2F0aW9uLiBIb3dldmVyLCBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBpbmRpcmVjdCBpbXBhY3RzIG9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBuZWVkIGF0dGVudGlvbi4KCkxldCYjMzk7cyBzZWUuIFRoZSBvYnZpb3VzIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYFNUTU1BQ19FVEhgLCBhbmQgdGhhdCYjMzk7cyBleHBlY3RlZC4gQmV5b25kIHRoYXQsIEkgbmVlZCB0byBhY2NvdW50IGZvciBzdXBwb3J0aW5nIGFyY2hpdGVjdHVyZXMuIFRoZSBgU1RNTUFDX1BDSWAgb3B0aW9uIGVuYWJsZXMgUENJIHN1cHBvcnQuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoYXQgb3B0aW9uIGFsc28gY292ZXIgdGhlIHNwZWNpZmljIFBDSSBJRHMgb2Ygc3VwcG9ydGVkIGhhcmR3YXJlPyBJIGFscmVhZHkga25vdyBhYm91dCB0aGluZ3MgbGlrZSBgRFdNQUNfSU5URUxgLCBgRFdNQUNfTE9PTkdTT05gLCBhbmQgYERXTUFDX01PVE9SQ09NTWAsIHdoaWNoIHNlZW0gdG8gc3VwcGx5IHRob3NlIHZlbmRvciBJRHMuIEkgd2FudCB0byBjb25maXJtIGlmIGBTVE1NQUNfUENJYCBpdHNlbGYgaW5jbHVkZXMgYW55IGdlbmVyaWMgUENJIElEcy4gVGhhdCB3b3VsZCBpbmZsdWVuY2UgaG93IEkgaW50ZXJwcmV0IHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGFuZCBwb3NzaWJsZSBkZXBlbmRlbmNpZXMuIFRoaXMgaW52ZXN0aWdhdGlvbiBpcyBhYm91dCBjaGVja2luZyBmb3IgY29tcGxldGUgY292ZXJhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BDSV9ERVZJQ0VfREFUQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDQ6XHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNTpcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNjpcdHsgUENJX0RFVklDRV9EQVRBKFNZTk9QU1lTLCBHTUFDNV9JRCwgXHUwMDI2c25wc19nbWFjNV9wY2lfaW5mbykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDctXHR7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjczLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzI1NgoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiAzMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFRhcmdldCBEcml2ZXIgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIGBTVE1NQUNfUENJYCBjb25maWd1cmF0aW9uIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQuIEl0IHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgUENJIGRldmljZSBkYXRhIGZvciBgU1RNTUFDYCwgYFNUTUlDUk9gLCBhbmQgYFNZTk9QU1lTYCBiYXNlZCBkZXZpY2VzLCB3aGljaCBpcyBrZXkgZm9yIGZ1enppbmcgdmlhIFBDSSBpbmplY3Rpb24uIFNvLCAqdGhhdCYjMzk7cyogZGVmaW5pdGVseSBpbi4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGFuZCBmb3IgYnJvYWRlciBjb3ZlcmFnZSwgSSYjMzk7bGwgaW5jbHVkZSBgU1RNTUFDX0VUSGAsIGBEV01BQ19JTlRFTGAsIGBEV01BQ19MT09OR1NPTmAsIGFuZCBgRFdNQUNfTU9UT1JDT01NYCBhcyB3ZWxsLgoKTm93LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBTVE1NQUNfRVRIYC4gQWxyaWdodCwgaXQgcmVxdWlyZXMgYEhBU19JT01FTWAgYW5kIGBIQVNfRE1BYCwgYm90aCBvZiB3aGljaCBhcmUgY29tbW9uIGFuZCBzaG91bGQgYmUgcmVhZGlseSBhdmFpbGFibGUuIEl0IGFsc28gc2VsZWN0cyBgTUlJYCwgYFBIWUxJQmAsIGBQSFlMSU5LYCwgYW5kIGBDUkMzMmAsIHdoaWNoIGFyZSBhbGwgc3RhbmRhcmQgY29tcG9uZW50cyByZWxhdGVkIHRvIEV0aGVybmV0IG9wZXJhdGlvbi4gU2VlbXMgZ29vZC4KClRoZXJlZm9yZSwgaGVyZSYjMzk7cyB0aGUgZmluYWwgY29uZmlndXJhdGlvbiBmb3IgZnV6emluZzoKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIOKAkyBkZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQuCiogICAqKkZvY3VzU3ltYm9sczoqKiBgc3RtbWFjX21hY19saW5rX3VwYCDigJMgdGhpcyBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiB3aGVyZSB0aGUgY2hhbmdlcyByZXNpZGUuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1BDSWAsIGBEV01BQ19JTlRFTGAsIGBEV01BQ19MT09OR1NPTmAsIGBEV01BQ19NT1RPUkNPTU1gIOKAkyBhIHNvbGlkIGNvbWJpbmF0aW9uIHByb3ZpZGluZyBicm9hZCBjb3ZlcmFnZS4KKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCYjMzk7cyBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB0byB0aGUgTUFDIHNwZWVkIGNvbmZpZ3VyYXRpb24gbG9naWMgd2l0aGluIHRoZSBgc3RtbWFjYCBkcml2ZXIgZHVyaW5nIGxpbmstdXAgaXMgdGhlIHByaW1hcnkgdGFyZ2V0LiBUaGUgZHJpdmVyJiMzOTtzIGNvcmUgbG9naWMgaXMgaW1wYWN0ZWQuIFdlIGNhbiBhY2Nlc3MgdGhlIGRyaXZlciB1c2luZyBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcgYnkgaW5qZWN0aW5nIGEgdmlydHVhbCBQQ0kgZGV2aWNlIHdpdGggdGhlIG1hdGNoaW5nIHZlbmRvci9kZXZpY2UgSURzIHN1cHBvcnRlZCBieSBgc3RtbWFjYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1BDSSYjMzQ7LAogICAgJiMzNDtEV01BQ19JTlRFTCYjMzQ7LAogICAgJiMzNDtEV01BQ19MT09OR1NPTiYjMzQ7LAogICAgJiMzNDtEV01BQ19NT1RPUkNPTU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdG1tYWNfbWFjX2xpbmtfdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1BQyBzcGVlZCBjb25maWd1cmF0aW9uIGxvZ2ljIGluIHRoZSBzdG1tYWMgZHJpdmVyIGR1cmluZyBsaW5rIHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlciYjMzk7cyBjb3JlIGxvZ2ljLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIHZpYSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcgYnkgaW5qZWN0aW5nIGEgdmlydHVhbCBQQ0kgZGV2aWNlIG1hdGNoaW5nIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHZlbmRvci9kZXZpY2UgSURzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVE1NQUNfRVRIJiMzNDssCiAgICAmIzM0O1NUTU1BQ19QQ0kmIzM0OywKICAgICYjMzQ7RFdNQUNfSU5URUwmIzM0OywKICAgICYjMzQ7RFdNQUNfTE9PTkdTT04mIzM0OywKICAgICYjMzQ7RFdNQUNfTU9UT1JDT01NJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RtbWFjX21hY19saW5rX3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNQUMgc3BlZWQgY29uZmlndXJhdGlvbiBsb2dpYyBpbiB0aGUgc3RtbWFjIGRyaXZlciBkdXJpbmcgbGluayB1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXImIzM5O3MgY29yZSBsb2dpYy4gVGhlIGRyaXZlciBjYW4gYmUgcmVhY2hlZCB2aWEgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6aW5nIGJ5IGluamVjdGluZyBhIHZpcnR1YWwgUENJIGRldmljZSBtYXRjaGluZyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB2ZW5kb3IvZGV2aWNlIElEcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjA3Ljg5NzY3NzEyNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDk1NzI2NTEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJEV01BQ19JTlRFTFwiLFxuICAgIFwiRFdNQUNfTE9PTkdTT05cIixcbiAgICBcIkRXTUFDX01PVE9SQ09NTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0bW1hY19tYWNfbGlua191cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNQUMgc3BlZWQgY29uZmlndXJhdGlvbiBsb2dpYyBpbiB0aGUgc3RtbWFjIGRyaXZlciBkdXJpbmcgbGluayB1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIncyBjb3JlIGxvZ2ljLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIHZpYSBzeXprYWxsZXIncyBQQ0kgZnV6emluZyBieSBpbmplY3RpbmcgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgbWF0Y2hpbmcgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdmVuZG9yL2RldmljZSBJRHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjA3Ljg5NzY4MjQwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyMTg4NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzEzNDQyYmI5NmY4YjYyZjA1YTZiZjQwNjIwNGVhY2I0N2RhNzg2OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAxMyAwOTo0OTowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xcbmluZGV4IDJhMGQ3ZWZmODhkM2ZmLi44ZDNkODc1NDk1MjlkOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xcbkBAIC0xMDgzLDYzICsxMDgzLDQ1IEBAIHN0YXRpYyB2b2lkIHN0bW1hY19tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4gXFx0b2xkX2N0cmwgPSByZWFkbChwcml2LVxcdTAwM2Vpb2FkZHIgKyBNQUNfQ1RSTF9SRUcpO1xcbiBcXHRjdHJsID0gb2xkX2N0cmwgXFx1MDAyNiB+cHJpdi1cXHUwMDNlaHctXFx1MDAzZWxpbmsuc3BlZWRfbWFzaztcXG4gXFxuLVxcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpIHtcXG4tXFx0XFx0c3dpdGNoIChzcGVlZCkge1xcbi1cXHRcXHRjYXNlIFNQRUVEXzEwMDAwOlxcbi1cXHRcXHRcXHRjdHJsIHw9IHByaXYtXFx1MDAzZWh3LVxcdTAwM2VsaW5rLnhnbWlpLnNwZWVkMTAwMDA7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIFNQRUVEXzUwMDA6XFxuLVxcdFxcdFxcdGN0cmwgfD0gcHJpdi1cXHUwMDNlaHctXFx1MDAzZWxpbmsueGdtaWkuc3BlZWQ1MDAwO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBTUEVFRF8yNTAwOlxcbitcXHRzd2l0Y2ggKHNwZWVkKSB7XFxuK1xcdGNhc2UgU1BFRURfMTAwMDAwOlxcbitcXHRcXHRjdHJsIHw9IHByaXYtXFx1MDAzZWh3LVxcdTAwM2VsaW5rLnhsZ21paS5zcGVlZDEwMDAwMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU1BFRURfNTAwMDA6XFxuK1xcdFxcdGN0cmwgfD0gcHJpdi1cXHUwMDNlaHctXFx1MDAzZWxpbmsueGxnbWlpLnNwZWVkNTAwMDA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFNQRUVEXzQwMDAwOlxcbitcXHRcXHRjdHJsIHw9IHByaXYtXFx1MDAzZWh3LVxcdTAwM2VsaW5rLnhsZ21paS5zcGVlZDQwMDAwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBTUEVFRF8yNTAwMDpcXG4rXFx0XFx0Y3RybCB8PSBwcml2LVxcdTAwM2Vody1cXHUwMDNlbGluay54bGdtaWkuc3BlZWQyNTAwMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU1BFRURfMTAwMDA6XFxuK1xcdFxcdGN0cmwgfD0gcHJpdi1cXHUwMDNlaHctXFx1MDAzZWxpbmsueGdtaWkuc3BlZWQxMDAwMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU1BFRURfNTAwMDpcXG4rXFx0XFx0Y3RybCB8PSBwcml2LVxcdTAwM2Vody1cXHUwMDNlbGluay54Z21paS5zcGVlZDUwMDA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFNQRUVEXzI1MDA6XFxuK1xcdFxcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpXFxuIFxcdFxcdFxcdGN0cmwgfD0gcHJpdi1cXHUwMDNlaHctXFx1MDAzZWxpbmsueGdtaWkuc3BlZWQyNTAwO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHR9XFxuLVxcdH0gZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9YTEdNSUkpIHtcXG4tXFx0XFx0c3dpdGNoIChzcGVlZCkge1xcbi1cXHRcXHRjYXNlIFNQRUVEXzEwMDAwMDpcXG4tXFx0XFx0XFx0Y3RybCB8PSBwcml2LVxcdTAwM2Vody1cXHUwMDNlbGluay54bGdtaWkuc3BlZWQxMDAwMDA7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIFNQRUVEXzUwMDAwOlxcbi1cXHRcXHRcXHRjdHJsIHw9IHByaXYtXFx1MDAzZWh3LVxcdTAwM2VsaW5rLnhsZ21paS5zcGVlZDUwMDAwO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBTUEVFRF80MDAwMDpcXG4tXFx0XFx0XFx0Y3RybCB8PSBwcml2LVxcdTAwM2Vody1cXHUwMDNlbGluay54bGdtaWkuc3BlZWQ0MDAwMDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgU1BFRURfMjUwMDA6XFxuLVxcdFxcdFxcdGN0cmwgfD0gcHJpdi1cXHUwMDNlaHctXFx1MDAzZWxpbmsueGxnbWlpLnNwZWVkMjUwMDA7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIFNQRUVEXzEwMDAwOlxcbi1cXHRcXHRcXHRjdHJsIHw9IHByaXYtXFx1MDAzZWh3LVxcdTAwM2VsaW5rLnhnbWlpLnNwZWVkMTAwMDA7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIFNQRUVEXzI1MDA6XFxuLVxcdFxcdFxcdGN0cmwgfD0gcHJpdi1cXHUwMDNlaHctXFx1MDAzZWxpbmsuc3BlZWQyNTAwO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBTUEVFRF8xMDAwOlxcbi1cXHRcXHRcXHRjdHJsIHw9IHByaXYtXFx1MDAzZWh3LVxcdTAwM2VsaW5rLnNwZWVkMTAwMDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0fVxcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRzd2l0Y2ggKHNwZWVkKSB7XFxuLVxcdFxcdGNhc2UgU1BFRURfMjUwMDpcXG4rXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRjdHJsIHw9IHByaXYtXFx1MDAzZWh3LVxcdTAwM2VsaW5rLnNwZWVkMjUwMDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgU1BFRURfMTAwMDpcXG4tXFx0XFx0XFx0Y3RybCB8PSBwcml2LVxcdTAwM2Vody1cXHUwMDNlbGluay5zcGVlZDEwMDA7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIFNQRUVEXzEwMDpcXG4tXFx0XFx0XFx0Y3RybCB8PSBwcml2LVxcdTAwM2Vody1cXHUwMDNlbGluay5zcGVlZDEwMDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgU1BFRURfMTA6XFxuLVxcdFxcdFxcdGN0cmwgfD0gcHJpdi1cXHUwMDNlaHctXFx1MDAzZWxpbmsuc3BlZWQxMDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0fVxcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBTUEVFRF8xMDAwOlxcbitcXHRcXHRjdHJsIHw9IHByaXYtXFx1MDAzZWh3LVxcdTAwM2VsaW5rLnNwZWVkMTAwMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU1BFRURfMTAwOlxcbitcXHRcXHRjdHJsIHw9IHByaXYtXFx1MDAzZWh3LVxcdTAwM2VsaW5rLnNwZWVkMTAwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBTUEVFRF8xMDpcXG4rXFx0XFx0Y3RybCB8PSBwcml2LVxcdTAwM2Vody1cXHUwMDNlbGluay5zcGVlZDEwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0bmV0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJ1bnN1cHBvcnRlZCBzcGVlZCAlcyBvbiAlcywgbGVhdmluZyB0aGUgTUFDIGRpc2FibGVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBwaHlfc3BlZWRfdG9fc3RyKHNwZWVkKSwgcGh5X21vZGVzKGludGVyZmFjZSkpO1xcbitcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmaXhfbWFjX3NwZWVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo0OTowOC41MjE2MjIwMjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDMzMzMwNTkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJEV01BQ19JTlRFTFwiLFxuICAgIFwiRFdNQUNfTE9PTkdTT05cIixcbiAgICBcIkRXTUFDX01PVE9SQ09NTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0bW1hY19tYWNfbGlua191cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNQUMgc3BlZWQgY29uZmlndXJhdGlvbiBsb2dpYyBpbiB0aGUgc3RtbWFjIGRyaXZlciBkdXJpbmcgbGluayB1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIncyBjb3JlIGxvZ2ljLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIHZpYSBzeXprYWxsZXIncyBQQ0kgZnV6emluZyBieSBpbmplY3RpbmcgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgbWF0Y2hpbmcgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdmVuZG9yL2RldmljZSBJRHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzEzNDQyYmI5NmY4YjYyZjA1YTZiZjQwNjIwNGVhY2I0N2RhNzg2OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDA5OjQ5OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbmluZGV4IDJhMGQ3ZWZmODhkM2ZmLi44ZDNkODc1NDk1MjlkOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbkBAIC0xMDgzLDYzICsxMDgzLDQ1IEBAIHN0YXRpYyB2b2lkIHN0bW1hY19tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcdG9sZF9jdHJsID0gcmVhZGwocHJpdi1cdTAwM2Vpb2FkZHIgKyBNQUNfQ1RSTF9SRUcpO1xuIFx0Y3RybCA9IG9sZF9jdHJsIFx1MDAyNiB+cHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnNwZWVkX21hc2s7XG4gXG4tXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSB7XG4tXHRcdHN3aXRjaCAoc3BlZWQpIHtcbi1cdFx0Y2FzZSBTUEVFRF8xMDAwMDpcbi1cdFx0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay54Z21paS5zcGVlZDEwMDAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFNQRUVEXzUwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGdtaWkuc3BlZWQ1MDAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFNQRUVEXzI1MDA6XG4rXHRzd2l0Y2ggKHNwZWVkKSB7XG4rXHRjYXNlIFNQRUVEXzEwMDAwMDpcbitcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGxnbWlpLnNwZWVkMTAwMDAwO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU1BFRURfNTAwMDA6XG4rXHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhsZ21paS5zcGVlZDUwMDAwO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU1BFRURfNDAwMDA6XG4rXHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhsZ21paS5zcGVlZDQwMDAwO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU1BFRURfMjUwMDA6XG4rXHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhsZ21paS5zcGVlZDI1MDAwO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU1BFRURfMTAwMDA6XG4rXHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhnbWlpLnNwZWVkMTAwMDA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBTUEVFRF81MDAwOlxuK1x0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay54Z21paS5zcGVlZDUwMDA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBTUEVFRF8yNTAwOlxuK1x0XHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKVxuIFx0XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhnbWlpLnNwZWVkMjUwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbi1cdH0gZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9YTEdNSUkpIHtcbi1cdFx0c3dpdGNoIChzcGVlZCkge1xuLVx0XHRjYXNlIFNQRUVEXzEwMDAwMDpcbi1cdFx0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay54bGdtaWkuc3BlZWQxMDAwMDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgU1BFRURfNTAwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGxnbWlpLnNwZWVkNTAwMDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgU1BFRURfNDAwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGxnbWlpLnNwZWVkNDAwMDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgU1BFRURfMjUwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGxnbWlpLnNwZWVkMjUwMDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgU1BFRURfMTAwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGdtaWkuc3BlZWQxMDAwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBTUEVFRF8yNTAwOlxuLVx0XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnNwZWVkMjUwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBTUEVFRF8xMDAwOlxuLVx0XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnNwZWVkMTAwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdHN3aXRjaCAoc3BlZWQpIHtcbi1cdFx0Y2FzZSBTUEVFRF8yNTAwOlxuK1x0XHRlbHNlXG4gXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsuc3BlZWQyNTAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFNQRUVEXzEwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsuc3BlZWQxMDAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFNQRUVEXzEwMDpcbi1cdFx0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay5zcGVlZDEwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBTUEVFRF8xMDpcbi1cdFx0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay5zcGVlZDEwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuK1x0XHRicmVhaztcbitcdGNhc2UgU1BFRURfMTAwMDpcbitcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsuc3BlZWQxMDAwO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU1BFRURfMTAwOlxuK1x0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay5zcGVlZDEwMDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFNQRUVEXzEwOlxuK1x0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay5zcGVlZDEwO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VkZXYsXG4rXHRcdFx0ICAgXCJ1bnN1cHBvcnRlZCBzcGVlZCAlcyBvbiAlcywgbGVhdmluZyB0aGUgTUFDIGRpc2FibGVkXFxuXCIsXG4rXHRcdFx0ICAgcGh5X3NwZWVkX3RvX3N0cihzcGVlZCksIHBoeV9tb2RlcyhpbnRlcmZhY2UpKTtcbitcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmaXhfbWFjX3NwZWVkKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6MDguNTIxNjQ2MDA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4NTA3MDUyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgc3RtbWFjYCBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYHN0bW1hY19tYWNfbGlua191cGAgZnVuY3Rpb24gaW4gYHN0bW1hY19tYWluLmNgLiBJdCdzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIGNsZWFybHkgYWltZWQgYXQgaG93IHRoZSBNQUMgc3BlZWQgaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgbGluayBzcGVlZCBhbmQgaW50ZXJmYWNlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cywgXCJDYW4gdGhpcyBiZSBmdXp6ZWQgZWZmZWN0aXZlbHk/XCIgVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGV0aGVybmV0IGRyaXZlciDigJMgdGhlIFNUTWljcm9lbGVjdHJvbmljcyAxMC8xMDAvMTAwMC9FUU9TIEV0aGVybmV0IE1BQyDigJMgc28gcmVhbGlzdGljYWxseSwgZGlyZWN0IGZ1enppbmcgdXN1YWxseSBoaW5nZXMgb24gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG9yIGdlbmVyaWMgc3Vic3lzdGVtcy4gSXQncyBvZnRlbiB0b3VnaC5cblxuV2FpdCBhIHNlY29uZCwgc3l6a2FsbGVyIGRvZXMgaGF2ZSBuZXR3b3JrIGludGVyZmFjZSBmdXp6aW5nIGNhcGFiaWxpdGllcyB3aXRoIHR1bi90YXAgb3IgdmV0aC4gQnV0IGZvciB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciwgSSBuZWVkIHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgYSBzb2xpZCBlbXVsYXRpb24uIElzIGBzdG1tYWNgIGVtdWxhdGVkIGluIHNvbWV0aGluZyBsaWtlIFFFTVU/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IGNhbiBiZSByZWFjaGVkIGluIHRoZSBsYWIuXG5cbk5vdyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGBzdG1tYWNgIGRldmljZSBpcyBhIFBDSSBkZXZpY2Ugb3IgYSBwbGF0Zm9ybSBkZXZpY2UgYmVjYXVzZSBpdCBjaGFuZ2VzIHRoZSBhcHByb2FjaC4gSSBrbm93IGl0J3MgYSBwbGF0Zm9ybSBkZXZpY2UgdXN1YWxseSBmb3VuZCBvbiBBUk0gU29DcyAobGlrZSBTVE0zMiwgUm9ja2NoaXAsIGV0Yy4pIG9yIGNhbiBiZSBhIFBDSSBkZXZpY2UuIExldCdzIHNlZSBpZiB0aGUgUENJIHZhcmlhbnQgaGFzIGFueSBzcGVjaWFsIGJlaGF2aW9ycywgSSBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmNgLiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSBhIG1vcmUgc29saWQgc3RyYXRlZ3kgdG8gYXR0YWNrIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6MTkuMzcyMzU0MjE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMjg5ODc3NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX3BjaVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0PTEwNz1zeW50YXggKGUuZy4gZm9yIFBDSSBtb2R1bGUpOjpcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0LTEwOC1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0OjEwOTogICAgbW9kcHJvYmUgc3RtbWFjX3BjaSBbXFx1MDAzY29wdGlvblxcdTAwM2U9XFx1MDAzY1ZBTDFcXHUwMDNlLFxcdTAwM2NWQUwyXFx1MDAzZSwuLi5dXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLnJzdC0xMTAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZT01Mz1vYmotJChDT05GSUdfRFdNQUNfTU9UT1JDT01NKVxcdCs9IGR3bWFjLW1vdG9yY29tbS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvTWFrZWZpbGU6NTQ6c3RtbWFjLXBjaS1vYmpzOj0gc3RtbWFjX3BjaS5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTI1PXN0cnVjdCBpbnRlbF9wcml2X2RhdGEge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0zOS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjQwOnN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00MS1cXHR1bnNpZ25lZCBpbnQgZnVuYztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0NTpzdHJ1Y3Qgc3RtbWFjX3BjaV9kbWlfZGF0YSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0NjpcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEgKmZ1bmM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00Ny1cXHRzaXplX3QgbmZ1bmNzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjUwOnN0cnVjdCBzdG1tYWNfcGNpX2luZm8ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNTEtXFx0aW50ICgqc2V0dXApKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05MT1zdGF0aWMgY29uc3QgaW50IGFkbG5fdHNuX2xhbmVfcmVnc1tdID0gezZ9O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5MzpzdGF0aWMgaW50IHN0bW1hY19wY2lfZmluZF9waHlfYWRkcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk0LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZG1pX2xpc3QpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5NjpcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEgKmZ1bmNfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk3OlxcdGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhICpkbWlfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk4LVxcdGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkbWlfaWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTc1NT1zdGF0aWMgaW50IGVobF9zZ21paV9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy03NzQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo3NzU6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gZWhsX3NnbWlpMWdfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTc3Ni1cXHQuc2V0dXAgPSBlaGxfc2dtaWlfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9Nzc5PXN0YXRpYyBpbnQgZWhsX3JnbWlpX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTc4OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjc5MDpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcmdtaWkxZ19pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNzkxLVxcdC5zZXR1cCA9IGVobF9yZ21paV9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04MTA9c3RhdGljIGludCBlaGxfcHNlMF9yZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgxNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjgxNzpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMF9yZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04MTgtXFx0LnNldHVwID0gZWhsX3BzZTBfcmdtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04MjE9c3RhdGljIGludCBlaGxfcHNlMF9zZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgzOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjgzOTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMF9zZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04NDAtXFx0LnNldHVwID0gZWhsX3BzZTBfc2dtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04NTk9c3RhdGljIGludCBlaGxfcHNlMV9yZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg2NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg2NjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMV9yZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04NjctXFx0LnNldHVwID0gZWhsX3BzZTFfcmdtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04NzA9c3RhdGljIGludCBlaGxfcHNlMV9zZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg4Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg4ODpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMV9zZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04ODktXFx0LnNldHVwID0gZWhsX3BzZTFfc2dtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05MTM9c3RhdGljIGludCB0Z2xfc2dtaWlfcGh5MF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05MjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5MjI6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gdGdsX3NnbWlpMWdfcGh5MF9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTIzLVxcdC5zZXR1cCA9IHRnbF9zZ21paV9waHkwX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTkyNj1zdGF0aWMgaW50IHRnbF9zZ21paV9waHkxX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTkzNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjkzNTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyB0Z2xfc2dtaWkxZ19waHkxX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05MzYtXFx0LnNldHVwID0gdGdsX3NnbWlpX3BoeTFfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9OTM5PXN0YXRpYyBpbnQgYWRsc19zZ21paV9waHkwX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk0OTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBhZGxzX3NnbWlpMWdfcGh5MF9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTUwLVxcdC5zZXR1cCA9IGFkbHNfc2dtaWlfcGh5MF9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05NTM9c3RhdGljIGludCBhZGxzX3NnbWlpX3BoeTFfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTYyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTYzOnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGFkbHNfc2dtaWkxZ19waHkxX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NjQtXFx0LnNldHVwID0gYWRsc19zZ21paV9waHkxX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTk5Mj1zdGF0aWMgaW50IGFkbG5fc2dtaWlfcGh5MF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDEwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTAxMTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBhZGxuX3NnbWlpMWdfcGh5MF9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTAxMi1cXHQuc2V0dXAgPSBhZGxuX3NnbWlpX3BoeTBfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTAxNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwMTU6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSBnYWxpbGVvX3N0bW1hY19mdW5jX2RhdGFbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwMTYtXFx0e1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTAyMjpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEgZ2FsaWxlb19zdG1tYWNfZG1pX2RhdGEgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDIzLVxcdC5mdW5jID0gZ2FsaWxlb19zdG1tYWNfZnVuY19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTAyNzpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZnVuY19kYXRhIGlvdDIwNDBfc3RtbWFjX2Z1bmNfZGF0YVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTAyOC1cXHR7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwMzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMDM4OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9kbWlfZGF0YSBpb3QyMDQwX3N0bW1hY19kbWlfZGF0YSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwMzktXFx0LmZ1bmMgPSBpb3QyMDQwX3N0bW1hY19mdW5jX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEwNzg9c3RhdGljIGludCBxdWFya19kZWZhdWx0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwODgtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMDg5OlxcdHJldCA9IHN0bW1hY19wY2lfZmluZF9waHlfYWRkcihwZGV2LCBxdWFya19wY2lfZG1pKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwOTAtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTExMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjExMTQ6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gcXVhcmtfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTExMTUtXFx0LnNldHVwID0gcXVhcmtfZGVmYXVsdF9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMjMyPXN0YXRpYyBpbnQgaW50ZWxfZXRoX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTIzNC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMjM1OlxcdHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm8gPSAoc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqKWlkLVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEyMzYtXFx0c3RydWN0IGludGVsX3ByaXZfZGF0YSAqaW50ZWxfcHJpdjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9NzY9c3RydWN0IGxvb25nc29uX2RhdGEge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy04MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjgyOnN0cnVjdCBzdG1tYWNfcGNpX2luZm8ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtODMtXFx0aW50ICgqc2V0dXApKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz0xMzI9c3RhdGljIGludCBsb29uZ3Nvbl9nbWFjX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTE0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjE0MjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBsb29uZ3Nvbl9nbWFjX3BjaV9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtMTQzLVxcdC5zZXR1cCA9IGxvb25nc29uX2dtYWNfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9MTY1PXN0YXRpYyBpbnQgbG9vbmdzb25fZ25ldF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzoxNzc6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gbG9vbmdzb25fZ25ldF9wY2lfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTE3OC1cXHQuc2V0dXAgPSBsb29uZ3Nvbl9nbmV0X2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTQ5OD1zdGF0aWMgaW50IGxvb25nc29uX2R3bWFjX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUwMS1cXHRzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyByZXMgPSB7fTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjUwMjpcXHRzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTAzLVxcdHN0cnVjdCBsb29uZ3Nvbl9kYXRhICpsZDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTM3LVxcdHBsYXQtXFx1MDAzZWZpeF9zb2NfcmVzZXQgPSBsb29uZ3Nvbl9kd21hY19maXhfcmVzZXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1Mzg6XFx0cGxhdC1cXHUwMDNlc3VzcGVuZCA9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTM5OlxcdHBsYXQtXFx1MDAzZXJlc3VtZSA9IHN0bW1hY19wY2lfcGxhdF9yZXN1bWU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDAtXFx0bGQtXFx1MDAzZWRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTU0Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjU0MzpcXHRpbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDQtXFx0cmV0ID0gaW5mby1cXHUwMDNlc2V0dXAocGRldiwgcGxhdCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0xODg9c3RhdGljIGludCBtb3RvcmNvbW1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYnNwX3ByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0xOTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM6MTkzOlxcdHJldCA9IHN0bW1hY19wY2lfcGxhdF9yZXN1bWUoZGV2LCBic3BfcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMTk0LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0yMDg9bW90b3Jjb21tX2RlZmF1bHRfcGxhdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMjQ4LVxcdHBsYXQtXFx1MDAzZWNvcmVfdHlwZVxcdFxcdD0gRFdNQUNfQ09SRV9HTUFDNDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYzoyNDk6XFx0cGxhdC1cXHUwMDNlc3VzcGVuZFxcdFxcdD0gc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMjUwLVxcdHBsYXQtXFx1MDAzZXJlc3VtZVxcdFxcdD0gbW90b3Jjb21tX3Jlc3VtZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0xMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmM6MTI6aW50IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYnNwX3ByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTEzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0yNS19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jOjI2OkVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtMjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jOjI4OmludCBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYnNwX3ByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTI5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy00My19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jOjQ0OkVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19wY2lfcGxhdF9yZXN1bWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy00NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaC04LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaDo5OmludCBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmg6MTA6aW50IHN0bW1hY19wY2lfcGxhdF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5oLTExLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxOTpzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjAtXFx0aW50ICgqc2V0dXApKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTMzPXN0YXRpYyBpbnQgc3RtbWFjX2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy00OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6NTA6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gc3RtbWFjX3BjaV9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy01MS1cXHQuc2V0dXAgPSBzdG1tYWNfZGVmYXVsdF9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTU0PXN0YXRpYyBpbnQgc25wc19nbWFjNV9kZWZhdWx0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTAxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxMDI6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gc25wc19nbWFjNV9wY2lfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTAzLVxcdC5zZXR1cCA9IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwNi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTA3OiAqIHN0bW1hY19wY2lfcHJvYmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTA4LSAqXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTE3LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxMTg6c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMTktXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTIwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTIxOlxcdHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm8gPSAoc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqKWlkLVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTIyLVxcdHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xNzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjE4MDpcXHRwbGF0LVxcdTAwM2VzdXNwZW5kID0gc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjE4MTpcXHRwbGF0LVxcdTAwM2VyZXN1bWUgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTg2LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODc6ICogc3RtbWFjX3BjaV9yZW1vdmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTg4LSAqXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTkxLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxOTI6c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5My17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjA0OlxcdHsgUENJX0RFVklDRV9EQVRBKFNUTU1BQywgU1RNTUFDLCBcXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDU6XFx0eyBQQ0lfREVWSUNFX0RBVEEoU1RNSUNSTywgTUFDLCBcXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDYtXFx0eyBQQ0lfREVWSUNFX0RBVEEoU1lOT1BTWVMsIEdNQUM1X0lELCBcXHUwMDI2c25wc19nbWFjNV9wY2lfaW5mbykgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0yMTA9TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHN0bW1hY19pZF90YWJsZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjEyOnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzdG1tYWNfcGNpX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjEzLVxcdC5uYW1lID0gU1RNTUFDX1JFU09VUkNFX05BTUUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxNC1cXHQuaWRfdGFibGUgPSBzdG1tYWNfaWRfdGFibGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIxNTpcXHQucHJvYmUgPSBzdG1tYWNfcGNpX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMTY6XFx0LnJlbW92ZSA9IHN0bW1hY19wY2lfcmVtb3ZlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMTctXFx0LmRyaXZlciAgICAgICAgID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIyMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjIyOm1vZHVsZV9wY2lfZHJpdmVyKHN0bW1hY19wY2lfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjIzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo0OToyMy42MDEzNDc0MTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjU4NjUyODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgYHN0bW1hY2AgRHJpdmVyczogQSBTdHJhdGVnaWMgQXBwcm9hY2gqKlxuXG5Pa2F5LCBzbyBgc3RtbWFjYCBoYXMgUENJIGRyaXZlcnMuIFRoYXQncyBnb29kIG5ld3M7IGBzdG1tYWNfcGNpLmNgLCBgZHdtYWMtaW50ZWwuY2AsIGBkd21hYy1sb29uZ3Nvbi5jYCwgYGR3bWFjLW1vdG9yY29tbS5jYCDigJMgSSBzZWUgdGhlIHBvdGVudGlhbC4gTXkgZmlyc3QgdGhvdWdodCBpcyBRRU1VLCBzaW5jZSBQQ0kgZHJpdmVycyB1c3VhbGx5IHBsYXkgd2VsbCB3aXRoIHZpcnR1YWwgZW52aXJvbm1lbnRzLiBJZiBRRU1VIGVtdWxhdGVkIGl0LCB3ZSdkIGhhdmUgYSBzdHJhaWdodGZvcndhcmQgZnV6emluZyBzZXR1cC4gQnV0IGRvZXMgUUVNVSBlbXVsYXRlIGBzdG1tYWNgIHNwZWNpZmljYWxseT8gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIFFFTVUgbmV0d29yayBkZXZpY2UgbGlzdCwgSSBzZWUgYSBnb29kIHNlbGVjdGlvbiBvZiBlbXVsYXRlZCBOSUNzIChgaW14X2ZlYy5jYCwgYGNhZGVuY2VfZ2VtLmNgLCBgZTEwMDAuY2AsIGV0Yy4pLCBidXQgbm8gYHN0bW1hY2AuIEhtbS5cblxuV2FpdCwgdGhvdWdoLCBgc3RtbWFjYCBpcyBwb3B1bGFyIG9uIEFSTSBib2FyZHMsIGFuZCBRRU1VIGhhcyBkZWNlbnQgQVJNIGVtdWxhdGlvbi4gSXMgdGhlcmUgYSBob29rIHRoZXJlPyBEb2VzIFFFTVUgZW11bGF0ZSB0aGUgYHN0bW1hY2AgaW4gc29tZSBBUk0gYm9hcmQgZW11bGF0aW9ucz8gVGhpcyBjb3VsZCBiZSBhIHByb21pc2luZyBhdmVudWUsIGJ1dCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci5cblxuQWxyaWdodCwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBzeXprYWxsZXIuIERvZXMgc3l6a2FsbGVyIG9mZmVyIGEgcGF0aCB0byBmdXp6aW5nIHRoaXM/IFN5emthbGxlciBvZnRlbiB1c2VzIHZQQ0kgZm9yIFBDSSBkZXZpY2UgZnV6emluZywgcHJvdmlkZWQgdGhlIGRyaXZlciBiaW5kcyB0byBpdC4gVGhhdCdzIHRoZSBrZXkuIEJ1dCB3YWl0IGEgbWludXRlLi4uIHN5emthbGxlciBoYXMgYHN5el9wY2lfZGV2aWNlYCEgVGhpcyBpcyBpbnRlcmVzdGluZy4uLiBJdCBzZWVtcyBsaWtlIEkgY2FuIGluamVjdCBBTlkgUENJIGRldmljZSB3aXRoIHZlbmRvciBhbmQgZGV2aWNlIElEcyB1c2luZyB0aGlzIHBzZXVkby1zeXNjYWxsLCBhIGh1Z2UgcGx1cyEgXG5cbk9rYXksIG5vdyBpdCdzIGFib3V0IGNoZWNraW5nIHRoZSBkcml2ZXIgYmluZGluZ3MuIFRoZSBgc3RtbWFjX3BjaV9kcml2ZXJgIGJpbmRzIHRvIGBQQ0lfREVWSUNFX0RBVEFgIGVudHJpZXMuLi4gc3BlY2lmaWNhbGx5LCBgU1RNTUFDYCwgYFNUTUlDUk9gLCBhbmQgYFNZTk9QU1lTYC4gVGhpcyBzb3VuZHMgbGlrZSBpdCBjb3VsZCBiZSBteSB0aWNrZXQuIEkgbmVlZCB0byBnZXQgdGhlIHZlbmRvci9kZXZpY2UgSURzIGZyb20gdGhlc2UgZGVmaW5pdGlvbnMuIE9uY2UgSSBoYXZlIHRoZSB2ZW5kb3IgYW5kIGRldmljZSBJRHMsIHN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byBjcmVhdGUgYW4gaW5zdGFuY2UgYW5kIEkgY2FuIGZvY3VzIG15IGVmZm9ydHMgb24gdGhhdCBkcml2ZXIhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODcxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjMzLjI2MDAwMjg1OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDI2MzI2MDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBDSV9ERVZJQ0VfREFUQVxcXFwoU1RNTUFDXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0yMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN0bW1hY19pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDQ6XFx0eyBQQ0lfREVWSUNFX0RBVEEoU1RNTUFDLCBTVE1NQUMsIFxcdTAwMjZzdG1tYWNfcGNpX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwNS1cXHR7IFBDSV9ERVZJQ0VfREFUQShTVE1JQ1JPLCBNQUMsIFxcdTAwMjZzdG1tYWNfcGNpX2luZm8pIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjM2LjI4NjM0MDY1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNjM4MDA3NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBTVE1NQUMgaW4gUENJIElEIERlZmluaXRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGtlcm5lbCdzIFBDSSBJRCBkYXRhYmFzZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L3BjaV9pZHMuaGAuIEknbSBnb2luZyB0byBsb29rIGZvciBkZWZpbml0aW9ucyByZWxhdGVkIHRvIGBTVE1NQUNgIHRoZXJlLiBUaGlzIGlzIGEgY29tbW9uIGFuZCB1c3VhbGx5IGVmZmljaWVudCB3YXkgdG8gaWRlbnRpZnkgYW5kIHVuZGVyc3RhbmQgdGhlIFBDSSBkZXZpY2UgSURzIGFzc29jaWF0ZWQgd2l0aCB0aGUgU1RNTUFDIEV0aGVybmV0IE1BQyBjb250cm9sbGVyLCBhIGNyaXRpY2FsIGZpcnN0IHN0ZXAgaW4gZGVidWdnaW5nIG9yIHdvcmtpbmcgd2l0aCB0aGUgZHJpdmVyLiBJIG5lZWQgdGhvc2UgdmVuZG9yIGFuZCBkZXZpY2UgSURzIHRvIHByb3Blcmx5IGZpbHRlciBhbmQgY2xhc3NpZnkgdGhlIGhhcmR3YXJlLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAzNywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjQ5LjkyNDM1MjIxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjUzOTIyOTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBDSV9WRU5ET1JfSURfU1RNTUFDXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xOTI9c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTk3LS8qIHN5bnRoZXRpYyBJRCwgbm8gb2ZmaWNpYWwgdmVuZG9yICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjE5ODojZGVmaW5lIFBDSV9WRU5ET1JfSURfU1RNTUFDXFx0XFx0MHgwNzAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6NTQuMTc4MjgxODA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIzOTI2NjM5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIEZ1enppbmcgdGhpcyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyB0aGlzIGRldmljZSBoYXMgYSBzeW50aGV0aWMgSUQgb2YgYDB4MDcwMGAuIFRoZSBrZXkgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHN5emthbGxlcidzIFBDSSBmdXp6aW5nIGNhbiBiaW5kIHRvIGl0LiBJZiBpdCBjYW4sIHdlJ3JlIGluIGJ1c2luZXNzLiBCdXQsIGRvZXMgdGhlIGRyaXZlciBmdW5jdGlvbiBjb3JyZWN0bHkgd2l0aG91dCByZWFsIGhhcmR3YXJlPyBUaGF0J3MgdGhlIGNydXggb2YgaXQuXG5cbklmIHRoZSBkcml2ZXIgcHJvYmVzIHN1Y2Nlc3NmdWxseSwgaXQnbGwgdHJ5IHRvIHJlYWQgYW5kIHdyaXRlIHRvIE1lbW9yeS1NYXBwZWQgSS9PIChNTUlPKSByZWdpc3RlcnMuIFdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlIHByZXNlbnQsIGl0IHdpbGwgcmVhZCBgMHhmZmZmZmZmZmAgb3Igd2hhdGV2ZXIgdGhlIFBDSSBzdWJzeXN0ZW0gcmV0dXJucyBmb3IgdW5tYXBwZWQgbWVtb3J5LCBvciB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgd2lsbCBwcm92aWRlIHJhbmRvbSBkYXRhIGZvciBNTUlPIHJlYWRzLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgc3l6a2FsbGVyJ3MgYHN5el9wY2lfZGV2aWNlYCBkb2Vzbid0IHBlcmZlY3RseSBlbXVsYXRlIE1NSU8sIGJ1dCBpdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZy5cblxuTXkgdGhpbmtpbmcgaXMsIGBzdG1tYWNfbWFjX2xpbmtfdXBgIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBQSFkgbGluayBnb2VzIHVwLiBUaGlzIGlzIGludGVyZXN0aW5nLiBJcyB0aGlzIGZ1bmN0aW9uIGFjY2Vzc2libGUgdGhyb3VnaCBzeXprYWxsZXI/IElmIHRoZSBkcml2ZXIgcHJvYmVzIHN1Y2Nlc3NmdWxseSDigJMgYW5kIHRoYXQncyB0aGUgYmlnICdpZicg4oCTIHdoaWNoIGNvdWxkIGJlIGZhY2lsaXRhdGVkIGJ5IHNvbWUgUENJIGZ1enppbmcsIHRoZW4gaXQgd2lsbCByZWdpc3RlciBhIG5ldGRldi4gVGhlbiwgY29tbWFuZHMgbGlrZSBgaXAgbGluayBzZXQgZXRoWCB1cGAgc2hvdWxkIG9wZW4gdGhlIGRldmljZS4gVGhlIFBIWSBsaW5rIGNvbWluZyB1cCBzaG91bGQgdGhlbiB0cmlnZ2VyIHRoZSBgc3RtbWFjX21hY19saW5rX3VwYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBgc3RtbWFjYCB1dGlsaXplcyBgcGh5bGlua2AuIFRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBMZXQncyBjaGVjayBzcGVjaWZpY2FsbHkgaWYgYHN0bW1hY19tYWNfbGlua191cGAgaXMgcmVhY2hhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM5MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1MDoxNi41NzA5NDg0NTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTIzMTkxNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX21hY19saW5rX3VwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MTA1Nj1zdGF0aWMgdm9pZCBzdG1tYWNfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTA2OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjEwNjk6c3RhdGljIHZvaWQgc3RtbWFjX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTA3MC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MTI0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBzdG1tYWNfcGh5bGlua19tYWNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0xMjUxLVxcdC5tYWNfbGlua19kb3duID0gc3RtbWFjX21hY19saW5rX2Rvd24sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzoxMjUyOlxcdC5tYWNfbGlua191cCA9IHN0bW1hY19tYWNfbGlua191cCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTEyNTMtXFx0Lm1hY19kaXNhYmxlX3R4X2xwaSA9IHN0bW1hY19tYWNfZGlzYWJsZV90eF9scGksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjUwOjE5LjU2MzI3ODQzNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjU5NzU2OTc5MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBzdG1tYWMgRHJpdmVyIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIHBoeWxpbmsgY2FsbGJhY2suIE15IGZpcnN0IHRob3VnaHQgaXM6IGNhbiB3ZSBmdXp6IHRoaXM/IFRoZSBwYXRjaCBhbHRlcnMgYHN0bW1hY19tYWNfbGlua191cGAsIHNwZWNpZmljYWxseSB0byBkZWFsIHdpdGggdGhlc2UgbmV3IGhpZ2gtc3BlZWQgc2V0dGluZ3M6IGBTUEVFRF8xMDAwMDBgLCBgU1BFRURfNTAwMDBgLCBgU1BFRURfNDAwMDBgLCBhbmQgYFNQRUVEXzI1MDAwYCBmb3IgYFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJYCBhbmQgYFBIWV9JTlRFUkZBQ0VfTU9ERV9YTEdNSUlgLlxuXG5Ob3csIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgdGhlIGNvZGUgb3JpZ2luYWxseSBoYWQgYSBtb3JlIGdyYW51bGFyIGFwcHJvYWNoLCB3aXRoIGEgZGVkaWNhdGVkIGNoZWNrIGZvciBgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUlgIGFuZCBpdHMgc3BlZWRzLiBJdCBsb29rZWQgc29tZXRoaW5nIGxpa2UgdGhpczpcblxuYGBgY1xuXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSB7XG5cdFx0c3dpdGNoIChzcGVlZCkge1xuXHRcdGNhc2UgU1BFRURfMTAwMDA6XG4uLi5cbmBgYFxuXG5UaGUgbmV3IGNvZGUgc2VlbXMgdG8gaGF2ZSBhIHVuaWZpZWQgYHN3aXRjaCAoc3BlZWQpYCBzdGF0ZW1lbnQ6XG5cbmBgYGNcblx0c3dpdGNoIChzcGVlZCkge1xuXHRjYXNlIFNQRUVEXzEwMDAwMDpcblx0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay54bGdtaWkuc3BlZWQxMDAwMDA7XG5cdFx0YnJlYWs7XG4uLi5cbmBgYFxuXG5TbywgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlOyB0aGF0J3MgY2xlYXIuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBtb2RpZmljYXRpb24gd29ydGh5IG9mIGZ1enppbmc/IEl0IGRlZmluaXRlbHkgaW50cm9kdWNlcyBuZXcgY29kZSBwYXRocywgZGVhbGluZyB3aXRoIHRoZXNlIGhpZ2hlciBzcGVlZHMuIElmIHdlIGNhbiBlbmFibGUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbGlrZSBgQ09ORklHX1NUTU1BQ19FVEhgLCBgQ09ORklHX1NUTU1BQ19QQ0lgLCBhbmQgYENPTkZJR19EV01BQ19JTlRFTGAsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcyBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGBzdG1tYWNgIHRvIGRldGVybWluZSB0aGUgYmVzdCBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzODAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTI6MjUuNTM4OTg3MDM2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY2MzU4NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTVE1NQUNfRVRIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI6Y29uZmlnIFNUTU1BQ19FVEhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTI6MjcuOTA1MzUyODMxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3ODE1MTk0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIFNUTU1BQyBQQ0kgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBQQ0kgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgU1RNTUFDIEV0aGVybmV0IGRyaXZlci4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IHNwZWNpZmljIGRyaXZlci4gTGV0J3Mgc2VlLi4uIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJdCBzaG91bGQgY29udGFpbiBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgaGVscCB0ZXh0IHJlbGF0ZWQgdG8gZW5hYmxpbmcgUENJIHN1cHBvcnQgd2l0aGluIHRoYXQgZHJpdmVyLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBkZXBlbmRlbmNpZXMsIG1heWJlIGNoZWNrIGZvciBhbnkgc3BlY2lmaWMgdmVuZG9yLXNwZWNpZmljIHF1aXJrcywgYW5kIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IFBDSSBzdXBwb3J0IGlzIG1hbmFnZWQgd2l0aGluIHRoZSBTVE1NQUMgZHJpdmVyIGNvZGUgYmFzZS4gSSBleHBlY3QgdG8gZmluZCBvcHRpb25zIHJlbGF0ZWQgdG8gc2VsZWN0aW5nIHRoZSBQQ0kgYnVzLCBkZWZpbmluZyBkZXZpY2UgSURzLCBvciBwb3NzaWJseSBlbmFibGluZyBzcGVjaWZpYyBQSFkgY29uZmlndXJhdGlvbnMgdGllZCB0byBQQ0kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTcxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTI6MzUuNjg2ODc0ODg0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU4OTE2NjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTVE1NQUNfUENJXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mzk4PWNvbmZpZyBEV01BQ19NT1RPUkNPTU1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6NDA3OmNvbmZpZyBTVE1NQUNfUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDgtXFx0dHJpc3RhdGUgXFxcIlNUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjUyOjM3Ljk0NTc5NjAxN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjQ3ODk1MDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIFNUTU1BQyBQQ0kgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBTVE1NQUNfUENJYCBvcHRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyIHdoZW4gaXQncyB1c2VkIHdpdGggUENJIGludGVyZmFjZXMuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBoYW5kbGVzIFBDSS1zcGVjaWZpYyBmZWF0dXJlcywgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzLCBhbmQgYW55IHBvdGVudGlhbCBjYXZlYXRzIG9yIGNvbnNpZGVyYXRpb25zIHdoZW4gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMuIEkgYW50aWNpcGF0ZSB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgb3V0bGluZSB0aGUgZGVwZW5kZW5jaWVzIG9uIHRoZSBgUENJYCBidXMgaW5mcmFzdHJ1Y3R1cmUsIHdoYXQgb3RoZXIgZmVhdHVyZXMgbWlnaHQgYmUgY291cGxlZCB3aXRoIGBTVE1NQUNfUENJYCBzdWNoIGFzIERNQSBvciBzcGVjaWZpYyBoYXJkd2FyZSByZXZpc2lvbnMsIGFuZCB3aGF0IGVmZmVjdCB0aGlzIGNvbmZpZ3VyYXRpb24gbWlnaHQgaGF2ZSBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gaW1hZ2UuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkaWZmZXJlbnQgUENJIGludGVycnVwdCBtb2RlbHMsIHBvd2VyIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBQQ0kgY29udGV4dCwgYW5kIGhvdyBpdCBkZXRlY3RzIGFuZCBjb25maWd1cmVzIHRoZSBoYXJkd2FyZSBiYXNlZCBvbiBQQ0kgZGV2aWNlIElEcy4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBjb25maWd1cmF0aW9uIGZvciBhIGdpdmVuIGhhcmR3YXJlIHBsYXRmb3JtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUyNiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjUyOjQ0LjE5MzY5NTEwNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTA6XFx0XFx0ZGVmYXVsdCBNQUNIX0xPT05HU09ONjRcXG4gMzkxOlxcdFxcdGRlcGVuZHMgb24gKE1BQ0hfTE9PTkdTT042NCB8fCBDT01QSUxFX1RFU1QpIFxcdTAwMjZcXHUwMDI2IFBDSVxcbiAzOTI6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuIDM5MzpcXHRcXHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxcbiAzOTQ6XFx0XFx0aGVscFxcbiAzOTU6XFx0XFx0ICBUaGlzIHNlbGVjdHMgdGhlIExPT05HU09OIFBDSSBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIsXFxuIDM5NjpcXHRcXHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gTG9vbmdzb24tMksxMDAwIFNvQyBhbmQgTFM3QTEwMDAgYnJpZGdlLlxcbiAzOTc6XFx0XFxuIDM5ODpcXHRjb25maWcgRFdNQUNfTU9UT1JDT01NXFxuIDM5OTpcXHRcXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFBDSSBEV01BQyBzdXBwb3J0XFxcIlxcbiA0MDA6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gNDAxOlxcdFxcdHNlbGVjdCBNT1RPUkNPTU1fUEhZXFxuIDQwMjpcXHRcXHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxcbiA0MDM6XFx0XFx0aGVscFxcbiA0MDQ6XFx0XFx0ICBUaGlzIGVuYWJsZXMgZ2x1ZSBkcml2ZXIgZm9yIE1vdG9yY29tbSBEV01BQy1iYXNlZCBQQ0kgRXRoZXJuZXRcXG4gNDA1OlxcdFxcdCAgY29udHJvbGxlcnMuIEN1cnJlbnRseSBvbmx5IFlUNjgwMSBpcyBzdXBwb3J0ZWQuXFxuIDQwNjpcXHRcXG4gNDA3OlxcdGNvbmZpZyBTVE1NQUNfUENJXFxuIDQwODpcXHRcXHR0cmlzdGF0ZSBcXFwiU1RNTUFDIFBDSSBidXMgc3VwcG9ydFxcXCJcXG4gNDA5OlxcdFxcdGRlcGVuZHMgb24gUENJXFxuIDQxMDpcXHRcXHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcXG4gNDExOlxcdFxcdHNlbGVjdCBTVE1NQUNfTElCUENJXFxuIDQxMjpcXHRcXHRoZWxwXFxuIDQxMzpcXHRcXHQgIFRoaXMgc2VsZWN0cyB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgYnVzIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWMgZHJpdmVyLlxcbiA0MTQ6XFx0XFx0ICBUaGlzIGRyaXZlciB3YXMgdGVzdGVkIG9uIFhMSU5YIFhDMlYzMDAwIEZGMTE1MkFNVDAyMjFcXG4gNDE1OlxcdFxcdCAgRDEyMTU5OTRBIFZJUlRFWCBGUEdBIGJvYXJkIGFuZCBTTlBTIFFvUyBJUEsgUHJvdG90eXBpbmcgS2l0LlxcbiA0MTY6XFx0XFxuIDQxNzpcXHRcXHQgIElmIHlvdSBoYXZlIGEgY29udHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuXFxuIDQxODpcXHRcXG4gNDE5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTI6NDQuMTkzODI2NTI0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MDU4NTI0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTVE1NQUMgRHJpdmVyIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9ucywgYFNUTU1BQ19FVEhgIGFuZCBgU1RNTUFDX1BDSWAuIE15IHByaW1hcnkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGUgYHN0bW1hY19tYWNfbGlua191cGAgZnVuY3Rpb24gY2FuIGV2ZW4gYmUgcmVhY2hlZCBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQuIEknbSB0aGlua2luZywgaWYgc3l6a2FsbGVyIHRocm93cyBhIFBDSSBkZXZpY2UgYXQgdGhlIHN5c3RlbSB3aXRoIHRoYXQgdmVuZG9yIElELCAweDA3MDAsIHRoZSBgc3RtbWFjX3BjaWAgZHJpdmVyIGlzIGdvaW5nIHRvIHRyeSB0byB0YWtlIG93bmVyc2hpcCBvZiBpdCwgcmlnaHQ/XG5cblRoZW4sIHRoZSBkcml2ZXIgc2hvdWxkIG1hcCB0aGUgUENJIEJBUnMgYW5kIGJlZ2luIGl0cyBNQUMgaW5pdGlhbGl6YXRpb24gcm91dGluZS4gQnV0LCBiZWNhdXNlIHRoZSBoYXJkd2FyZSBpcyBlc3NlbnRpYWxseSBzaW11bGF0ZWQsIEknbSBleHBlY3Rpbmcgc29tZSBwb3RlbnRpYWwgcGl0ZmFsbHMgZHVyaW5nIHRoaXMgcHJvY2Vzcy4gSXQgY291bGQgZmFpbCBwcmV0dHkgZWFybHkgb24sIG1heWJlIGdldHRpbmcgc3R1Y2sgd2FpdGluZyBmb3IgYSByZXNldCBiaXQsIG9yIG1heWJlIGl0IHRyaWVzIHRvIHJlYWQgdGhlIE1BQyB2ZXJzaW9uIHJlZ2lzdGVyIGFuZCByZXBvcnRzIGFuIGVycm9yIHNpbmNlIGl0IGNhbid0IGZpbmQgYSB2YWxpZCByZXNwb25zZS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBzdG1tYWNfZHZyX3Byb2JlYCBmdW5jdGlvbiBpbiBgc3RtbWFjX21haW4uY2AgaW4gZGV0YWlsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIGl0J3MgY2FwYWJsZSBvZiBzdWNjZWVkaW5nLCBldmVuIHdpdGggdGhlIHNpbXVsYXRlZCBNTUlPIGFjY2VzcyB3ZSdsbCBoYXZlIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gTGV0J3Mgc2VlIGlmIHRoaXMgcHJvYmUgZnVuY3Rpb24gY2FuIG92ZXJjb21lIHRoZSBsYWNrIG9mIGFjdHVhbCBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMzEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1Mjo1MC45OTk2ODIyODlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTc2NjcwNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX2R2cl9wcm9iZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jPTI4Mz1zdGF0aWMgaW50IGR3Y19ldGhfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmMtMzI5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmM6MzMwOlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jLTMzMS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jPTQyPXN0YXRpYyBpbnQgaW50ZWxfZXRoX3BsYXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLXBsYXQuYy0xMTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jOjExODpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jLTExOS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMjMyPXN0YXRpYyBpbnQgaW50ZWxfZXRoX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTMwOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzMTA6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzMTEtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jPTM3ND1zdGF0aWMgaW50IGlwcTgwNnhfZ21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jLTQ4Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmM6NDgzOlxcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jLTQ4NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9NDk4PXN0YXRpYyBpbnQgbG9vbmdzb25fZHdtYWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTYxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTYyOlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdCwgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NjMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYz00Mj1zdGF0aWMgaW50IGxwYzE4eHhfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYy02Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmM6Njg6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmMtNjktfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYz01OTk9c3RhdGljIGludCBtZWRpYXRla19kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYy02NDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYzo2NDI6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lZGlhdGVrLmMtNjQzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jPTQ3PXN0YXRpYyBpbnQgbWVzb242X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jLTcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmM6NzM6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jLTc0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYz0zODI9c3RhdGljIGludCBtZXNvbjhiX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbjhiLmMtNDYzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYzo0NjQ6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbjhiLmMtNDY1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jPTI5Mz1zdGF0aWMgaW50IG1vdG9yY29tbV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMzU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jOjM1OTpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0zNjAtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jPTQ4PXN0YXRpYyBpbnQgcnpuMV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jLTY3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYzo2ODpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtNjktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jPTM1PXN0YXRpYyBpbnQgc29waGdvX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYy02NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYzo2NTpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmMtNjYtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYz0xNDc9c3RhdGljIGludCBzcGFjZW1pdF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYy0yMDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYzoyMDc6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNwYWNlbWl0LmMtMjA4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0YXJmaXZlLmM9OTA9c3RhdGljIGludCBzdGFyZml2ZV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYy0xNTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYzoxNTM6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jLTE1NC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jPTUyNT1zdGF0aWMgaW50IHN0bTMyX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jLTU3OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jOjU3OTpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYy01ODAtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmM9MTEwNT1zdGF0aWMgaW50IHN1bjhpX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYzoxMjAyOlxcdC8qIHRoZSBNQUMgaXMgcnVudGltZSBzdXNwZW5kZWQgYWZ0ZXIgc3RtbWFjX2R2cl9wcm9iZSgpLCBzbyB3ZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwMy1cXHQgKiBuZWVkIHRvIGVuc3VyZSB0aGUgTUFDIHJlc3VtZSBiYWNrIGJlZm9yZSBvdGhlciBvcGVyYXRpb25zIHN1Y2hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwOC1cXHQvKiBUaGUgbXV4IG11c3QgYmUgcmVnaXN0ZXJlZCBhZnRlciBwYXJlbnQgTURJT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmM6MTIwOTpcXHQgKiBzbyBhZnRlciBzdG1tYWNfZHZyX3Byb2JlKClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMTAtXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jPTIxND1zdGF0aWMgaW50IHRlZ3JhX21nYmVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmMtMzc1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM6Mzc2OlxcdGVyciA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdCwgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYy0zNzctXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jPTIwNT1zdGF0aWMgaW50IHZpc2NvbnRpX2V0aF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYy0yMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYzoyMzc6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmMtMjM4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MTM9dm9pZCBzdG1tYWNfZHZyX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjQxNDppbnQgc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDE1LVxcdFxcdCAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc3Nz1FWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGxhdF9kYXRfYWxsb2MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzc3OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc3Nzk6c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzc4MC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDgxLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODA4MjogKiBzdG1tYWNfZHZyX3Byb2JlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDgzLSAqIEBkZXY6IGRldmljZSBwb2ludGVyXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwOTAtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MDkxOmludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwOTItXFx0XFx0ICAgICBzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyAqcmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTAxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODEwMjpcXHRyZXQgPSBfX3N0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMDMtXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiBwbGF0X2RhdC1cXHUwMDNlZXhpdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEwNy19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTA4OkVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19kdnJfcHJvYmUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEwOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xMTg9c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTgzOlxcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXQsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODQtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmM9ODQ4PWludCBzdG1tYWNfcGx0ZnJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jLTg1Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYzo4NTc6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdCwgcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy04NTgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1Mjo1My43MTc0MTIzNzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYzNjIwOTE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBtaW5kIGlzIGp1bXBpbmcgYXJvdW5kIGEgYml0IGhlcmUsIGZvY3VzaW5nIG9uIHRoaXMgYF9fc3RtbWFjX2R2cl9wcm9iZWAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgYnVsayBvZiB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBTVE1NQUMgZHJpdmVyIGhhcHBlbnMuIFRoYXQgbWFrZXMgbWUgdGhpbmsuLi4gaWYgdGhlcmUncyBhIHByb2JsZW0gd2l0aCB0aGUgaGFyZHdhcmUsIGVzcGVjaWFsbHkgc29tZXRoaW5nIGJhc2ljIGxpa2UgTU1JTyAoTWVtb3J5LU1hcHBlZCBJL08pIGFjY2VzcywgSSdkIGV4cGVjdCB0byBzZWUgaXQgZmFpbCAqZWFybHkqIGluIHRoaXMgcHJvYmUgZnVuY3Rpb24uIFNvLCB0aGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBjYW4gSSBmb3JjZSBhIGZhaWx1cmUgYnkgcHJvdmlkaW5nIGZha2UgTU1JTyBhbmQgc2VlIHdoYXQgaGFwcGVucz8gVGhpcyBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGF2ZW51ZSBmb3IgZGVidWdnaW5nLiBJIHdhbnQgdG8gc2VlIGhvdyByb2J1c3QgdGhlIGVycm9yIGhhbmRsaW5nIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTkwNywiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjUzOjAxLjM1MzYyNDAyMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjYwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3Nzc5LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzc3OTpcXHRzdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuNzc4MDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxcbjc3ODE6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHN0bW1hY19yZXNvdXJjZXMgKnJlcylcXG43NzgyOlxcdHtcXG43NzgzOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDtcXG43Nzg0OlxcdFxcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdjtcXG43Nzg1OlxcdFxcdGludCBpLCByZXQgPSAwO1xcbjc3ODY6XFx0XFx0dTggcnhxO1xcbjc3ODc6XFx0XFxuNzc4ODpcXHRcXHRpZiAoIXBsYXRfZGF0LVxcdTAwM2VkbWFfY2ZnIHx8ICFwbGF0X2RhdC1cXHUwMDNlZG1hX2NmZy1cXHUwMDNlcGJsKSB7XFxuNzc4OTpcXHRcXHRcXHRkZXZfZXJyKGRldmljZSwgXFxcImludmFsaWQgRE1BIGNvbmZpZ3VyYXRpb25cXFxcblxcXCIpO1xcbjc3OTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzc5MTpcXHRcXHR9XFxuNzc5MjpcXHRcXG43NzkzOlxcdFxcdG5kZXYgPSBkZXZtX2FsbG9jX2V0aGVyZGV2X21xcyhkZXZpY2UsIHNpemVvZihzdHJ1Y3Qgc3RtbWFjX3ByaXYpLFxcbjc3OTQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1UTF9NQVhfVFhfUVVFVUVTLCBNVExfTUFYX1JYX1FVRVVFUyk7XFxuNzc5NTpcXHRcXHRpZiAoIW5kZXYpXFxuNzc5NjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG43Nzk3OlxcdFxcbjc3OTg6XFx0XFx0U0VUX05FVERFVl9ERVYobmRldiwgZGV2aWNlKTtcXG43Nzk5OlxcdFxcbjc4MDA6XFx0XFx0cHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbjc4MDE6XFx0XFx0cHJpdi1cXHUwMDNlZGV2aWNlID0gZGV2aWNlO1xcbjc4MDI6XFx0XFx0cHJpdi1cXHUwMDNlZGV2ID0gbmRldjtcXG43ODAzOlxcdFxcbjc4MDQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1UTF9NQVhfUlhfUVVFVUVTOyBpKyspXFxuNzgwNTpcXHRcXHRcXHR1NjRfc3RhdHNfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNleHN0YXRzLnJ4cV9zdGF0c1tpXS5uYXBpX3N5bmNwKTtcXG43ODA2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNVExfTUFYX1RYX1FVRVVFUzsgaSsrKSB7XFxuNzgwNzpcXHRcXHRcXHR1NjRfc3RhdHNfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNleHN0YXRzLnR4cV9zdGF0c1tpXS5xX3N5bmNwKTtcXG43ODA4OlxcdFxcdFxcdHU2NF9zdGF0c19pbml0KFxcdTAwMjZwcml2LVxcdTAwM2V4c3RhdHMudHhxX3N0YXRzW2ldLm5hcGlfc3luY3ApO1xcbjc4MDk6XFx0XFx0fVxcbjc4MTA6XFx0XFxuNzgxMTpcXHRcXHRwcml2LVxcdTAwM2V4c3RhdHMucGNwdV9zdGF0cyA9XFxuNzgxMjpcXHRcXHRcXHRkZXZtX25ldGRldl9hbGxvY19wY3B1X3N0YXRzKGRldmljZSwgc3RydWN0IHN0bW1hY19wY3B1X3N0YXRzKTtcXG43ODEzOlxcdFxcdGlmICghcHJpdi1cXHUwMDNleHN0YXRzLnBjcHVfc3RhdHMpXFxuNzgxNDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG43ODE1OlxcdFxcbjc4MTY6XFx0XFx0c3RtbWFjX3NldF9ldGh0b29sX29wcyhuZGV2KTtcXG43ODE3OlxcdFxcdHByaXYtXFx1MDAzZXBhdXNlX3RpbWUgPSBwYXVzZTtcXG43ODE4OlxcdFxcdHByaXYtXFx1MDAzZXBsYXQgPSBwbGF0X2RhdDtcXG43ODE5OlxcdFxcdHByaXYtXFx1MDAzZWlvYWRkciA9IHJlcy1cXHUwMDNlYWRkcjtcXG43ODIwOlxcdFxcdHByaXYtXFx1MDAzZWRldi1cXHUwMDNlYmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpcmVzLVxcdTAwM2VhZGRyO1xcbjc4MjE6XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZG1hX2NmZy1cXHUwMDNlbXVsdGlfbXNpX2VuID1cXG43ODIyOlxcdFxcdFxcdChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUTU1BQ19GTEFHX01VTFRJX01TSV9FTik7XFxuNzgyMzpcXHRcXG43ODI0OlxcdFxcdHByaXYtXFx1MDAzZWRldi1cXHUwMDNlaXJxID0gcmVzLVxcdTAwM2VpcnE7XFxuNzgyNTpcXHRcXHRwcml2LVxcdTAwM2V3b2xfaXJxID0gcmVzLVxcdTAwM2V3b2xfaXJxO1xcbjc4MjY6XFx0XFx0cHJpdi1cXHUwMDNlc2Z0eV9pcnEgPSByZXMtXFx1MDAzZXNmdHlfaXJxO1xcbjc4Mjc6XFx0XFxuNzgyODpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19NVUxUSV9NU0lfRU4pIHtcXG43ODI5OlxcdFxcdFxcdHJldCA9IHN0bW1hY19tc2lfaW5pdChwcml2LCByZXMpO1xcbjc4MzA6XFx0XFx0XFx0aWYgKHJldClcXG43ODMxOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuNzgzMjpcXHRcXHR9XFxuNzgzMzpcXHRcXG43ODM0OlxcdFxcdGlmICghaXNfemVyb19ldGhlcl9hZGRyKHJlcy1cXHUwMDNlbWFjKSlcXG43ODM1OlxcdFxcdFxcdGV0aF9od19hZGRyX3NldChwcml2LVxcdTAwM2VkZXYsIHJlcy1cXHUwMDNlbWFjKTtcXG43ODM2OlxcdFxcbjc4Mzc6XFx0XFx0ZGV2X3NldF9kcnZkYXRhKGRldmljZSwgcHJpdi1cXHUwMDNlZGV2KTtcXG43ODM4OlxcdFxcbjc4Mzk6XFx0XFx0LyogVmVyaWZ5IGRyaXZlciBhcmd1bWVudHMgKi9cXG43ODQwOlxcdFxcdHN0bW1hY192ZXJpZnlfYXJncygpO1xcbjc4NDE6XFx0XFxuNzg0MjpcXHRcXHRwcml2LVxcdTAwM2VhZl94ZHBfemNfcXBzID0gYml0bWFwX3phbGxvYyhNVExfTUFYX1RYX1FVRVVFUywgR0ZQX0tFUk5FTCk7XFxuNzg0MzpcXHRcXHRpZiAoIXByaXYtXFx1MDAzZWFmX3hkcF96Y19xcHMpXFxuNzg0NDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG43ODQ1OlxcdFxcbjc4NDY6XFx0XFx0LyogQWxsb2NhdGUgd29ya3F1ZXVlICovXFxuNzg0NzpcXHRcXHRwcml2LVxcdTAwM2V3cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFxcXCJzdG1tYWNfd3FcXFwiKTtcXG43ODQ4OlxcdFxcdGlmICghcHJpdi1cXHUwMDNld3EpIHtcXG43ODQ5OlxcdFxcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiZmFpbGVkIHRvIGNyZWF0ZSB3b3JrcXVldWVcXFxcblxcXCIpO1xcbjc4NTA6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG43ODUxOlxcdFxcdFxcdGdvdG8gZXJyb3Jfd3FfaW5pdDtcXG43ODUyOlxcdFxcdH1cXG43ODUzOlxcdFxcbjc4NTQ6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZwcml2LVxcdTAwM2VzZXJ2aWNlX3Rhc2ssIHN0bW1hY19zZXJ2aWNlX3Rhc2spO1xcbjc4NTU6XFx0XFxuNzg1NjpcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2cHJpdi1cXHUwMDNlZWVlX2N0cmxfdGltZXIsIHN0bW1hY19lZWVfY3RybF90aW1lciwgMCk7XFxuNzg1NzpcXHRcXG43ODU4OlxcdFxcdC8qIE92ZXJyaWRlIHdpdGgga2VybmVsIHBhcmFtZXRlcnMgaWYgc3VwcGxpZWQgWFhYIENSUyBYWFhcXG43ODU5OlxcdFxcdCAqIHRoaXMgbmVlZHMgdG8gaGF2ZSBtdWx0aXBsZSBpbnN0YW5jZXNcXG43ODYwOlxcdFxcdCAqL1xcbjc4NjE6XFx0XFx0aWYgKChwaHlhZGRyIFxcdTAwM2U9IDApIFxcdTAwMjZcXHUwMDI2IChwaHlhZGRyIFxcdTAwM2M9IDMxKSlcXG43ODYyOlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBoeV9hZGRyID0gcGh5YWRkcjtcXG43ODYzOlxcdFxcbjc4NjQ6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXN0bW1hY19yc3QpIHtcXG43ODY1OlxcdFxcdFxcdHJldCA9IHJlc2V0X2NvbnRyb2xfYXNzZXJ0KHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXN0bW1hY19yc3QpO1xcbjc4NjY6XFx0XFx0XFx0cmVzZXRfY29udHJvbF9kZWFzc2VydChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VzdG1tYWNfcnN0KTtcXG43ODY3OlxcdFxcdFxcdC8qIFNvbWUgcmVzZXQgY29udHJvbGxlcnMgaGF2ZSBvbmx5IHJlc2V0IGNhbGxiYWNrIGluc3RlYWQgb2ZcXG43ODY4OlxcdFxcdFxcdCAqIGFzc2VydCArIGRlYXNzZXJ0IGNhbGxiYWNrcyBwYWlyLlxcbjc4Njk6XFx0XFx0XFx0ICovXFxuNzg3MDpcXHRcXHRcXHRpZiAocmV0ID09IC1FTk9UU1VQUClcXG43ODcxOlxcdFxcdFxcdFxcdHJlc2V0X2NvbnRyb2xfcmVzZXQocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlc3RtbWFjX3JzdCk7XFxuNzg3MjpcXHRcXHR9XFxuNzg3MzpcXHRcXG43ODc0OlxcdFxcdHJldCA9IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlc3RtbWFjX2FoYl9yc3QpO1xcbjc4NzU6XFx0XFx0aWYgKHJldCA9PSAtRU5PVFNVUFApXFxuNzg3NjpcXHRcXHRcXHRkZXZfZXJyKHByaXYtXFx1MDAzZWRldmljZSwgXFxcInVuYWJsZSB0byBicmluZyBvdXQgb2YgYWhiIHJlc2V0OiAlcGVcXFxcblxcXCIsXFxuNzg3NzpcXHRcXHRcXHRcXHRFUlJfUFRSKHJldCkpO1xcbjc4Nzg6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjUzOjAxLjM1NDA1MjA1MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzg5NzcxNTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYF9fc3RtbWFjX2R2cl9wcm9iZWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIgaW50byBgX19zdG1tYWNfZHZyX3Byb2JlYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBmcmVzaCBtZW50YWwgbW9kZWwuIEkgYWxyZWFkeSBoYXZlIGEgZGVjZW50IGdyYXNwIG9mIHRoZSBvdmVyYWxsIFNUTU1BQyBkcml2ZXIgc3RydWN0dXJlLCBhbmQgSSd2ZSByZXZpZXdlZCB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdyBhIGZldyB0aW1lcy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIHByb2JlIGZ1bmN0aW9uJ3Mgcm9sZSB3aXRoaW4gdGhhdCBjb250ZXh0LCBpbiBkZXRhaWwuIFdoYXQgYXJlIHRoZSBrZXkgb3BlcmF0aW9ucyBpdCBwZXJmb3Jtcz8gV2hlcmUgZG9lcyBpdCBmaXQgaW50byB0aGUgZGV2aWNlIGRpc2NvdmVyeSBhbmQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IEknbSBhbnRpY2lwYXRpbmcgaXQncyByZXNwb25zaWJsZSBmb3IgdGhlIGNvcmUgaGFyZHdhcmUtc3BlY2lmaWMgYnJpbmctdXAgYWZ0ZXIgdGhlIGdlbmVyaWMgZHJpdmVyIGhhcyBsb2FkZWQsIGhhbmRsaW5nIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBjb25maWd1cmluZyB0aGUgc3BlY2lmaWMgU1RNTUFDIHZhcmlhbnQuIFByb2JhYmx5IHNldHRpbmcgdXAgdGhlIERNQSBjaGFubmVscywgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgbWF5YmUgc29tZSBjbG9jayBjb25maWd1cmF0aW9uIGlmIGl0J3Mgbm90IGhhbmRsZWQgZWFybGllci4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uOyB0aGF0J3MgYWx3YXlzIGEgY3J1Y2lhbCBhcmVhIGZvciBkZWJ1Z2dpbmcuIEFueSByZWdpc3RlciBhY2Nlc3NlcyBvciBoYXJkd2FyZSBpbml0aWFsaXphdGlvbnMgd2lsbCBkZW1hbmQgc2NydXRpbnkuIFRpbWUgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBzdXJwcmlzZXMgaXQgaG9sZHMuIExldCdzIHNlZSBpZiBteSBpbml0aWFsIGFzc3VtcHRpb25zIGFsaWduLiBJJ20gaG9waW5nIEkgY2FuIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTgyMywiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTM6MDYuMTQzODI1NzY2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4NzksXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3ODc5OlxcdFxcdC8qIFdhaXQgYSBiaXQgZm9yIHRoZSByZXNldCB0byB0YWtlIGVmZmVjdCAqL1xcbjc4ODA6XFx0XFx0dWRlbGF5KDEwKTtcXG43ODgxOlxcdFxcbjc4ODI6XFx0XFx0LyogSW5pdCBNQUMgYW5kIGdldCB0aGUgY2FwYWJpbGl0aWVzICovXFxuNzg4MzpcXHRcXHRyZXQgPSBzdG1tYWNfaHdfaW5pdChwcml2KTtcXG43ODg0OlxcdFxcdGlmIChyZXQpXFxuNzg4NTpcXHRcXHRcXHRnb3RvIGVycm9yX2h3X2luaXQ7XFxuNzg4NjpcXHRcXG43ODg3OlxcdFxcdC8qIE9ubHkgRFdNQUMgY29yZSB2ZXJzaW9uIDUuMjAgb253YXJkcyBzdXBwb3J0cyBIVyBkZXNjcmlwdG9yIHByZWZldGNoLlxcbjc4ODg6XFx0XFx0ICovXFxuNzg4OTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlc3lub3BzeXNfaWQgXFx1MDAzYyBEV01BQ19DT1JFXzVfMjApXFxuNzg5MDpcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VkbWFfY2ZnLVxcdTAwM2VkY2hlID0gZmFsc2U7XFxuNzg5MTpcXHRcXG43ODkyOlxcdFxcdHN0bW1hY19jaGVja19ldGhlcl9hZGRyKHByaXYpO1xcbjc4OTM6XFx0XFxuNzg5NDpcXHRcXHRuZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNnN0bW1hY19uZXRkZXZfb3BzO1xcbjc4OTU6XFx0XFxuNzg5NjpcXHRcXHRuZGV2LVxcdTAwM2V4ZHBfbWV0YWRhdGFfb3BzID0gXFx1MDAyNnN0bW1hY194ZHBfbWV0YWRhdGFfb3BzO1xcbjc4OTc6XFx0XFx0bmRldi1cXHUwMDNleHNrX3R4X21ldGFkYXRhX29wcyA9IFxcdTAwMjZzdG1tYWNfeHNrX3R4X21ldGFkYXRhX29wcztcXG43ODk4OlxcdFxcbjc4OTk6XFx0XFx0bmRldi1cXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0gfFxcbjc5MDA6XFx0XFx0XFx0XFx0ICAgIE5FVElGX0ZfUlhDU1VNO1xcbjc5MDE6XFx0XFx0bmRldi1cXHUwMDNleGRwX2ZlYXR1cmVzID0gTkVUREVWX1hEUF9BQ1RfQkFTSUMgfCBORVRERVZfWERQX0FDVF9SRURJUkVDVCB8XFxuNzkwMjpcXHRcXHRcXHRcXHQgICAgIE5FVERFVl9YRFBfQUNUX1hTS19aRVJPQ09QWTtcXG43OTAzOlxcdFxcbjc5MDQ6XFx0XFx0cmV0ID0gc3RtbWFjX3RjX2luaXQocHJpdiwgcHJpdik7XFxuNzkwNTpcXHRcXHRpZiAoIXJldCkge1xcbjc5MDY6XFx0XFx0XFx0bmRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQztcXG43OTA3OlxcdFxcdH1cXG43OTA4OlxcdFxcbjc5MDk6XFx0XFx0c3RtbWFjX3NldF9nc29fZmVhdHVyZXMobmRldik7XFxuNzkxMDpcXHRcXG43OTExOlxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLnNwaGVuIFxcdTAwMjZcXHUwMDI2XFxuNzkxMjpcXHRcXHQgICAgIShwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUTU1BQ19GTEFHX1NQSF9ESVNBQkxFKSkge1xcbjc5MTM6XFx0XFx0XFx0bmRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87XFxuNzkxNDpcXHRcXHRcXHRwcml2LVxcdTAwM2VzcGhfY2FwYWJsZSA9IHRydWU7XFxuNzkxNTpcXHRcXHRcXHRwcml2LVxcdTAwM2VzcGhfYWN0aXZlID0gcHJpdi1cXHUwMDNlc3BoX2NhcGFibGU7XFxuNzkxNjpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJTUEggZmVhdHVyZSBlbmFibGVkXFxcXG5cXFwiKTtcXG43OTE3OlxcdFxcdH1cXG43OTE4OlxcdFxcbjc5MTk6XFx0XFx0LyogSWRlYWxseSBvdXIgaG9zdCBETUEgYWRkcmVzcyB3aWR0aCBpcyB0aGUgc2FtZSBhcyBmb3IgdGhlXFxuNzkyMDpcXHRcXHQgKiBkZXZpY2UuIEhvd2V2ZXIsIGl0IG1heSBkaWZmZXIgYW5kIHRoZW4gd2UgaGF2ZSB0byB1c2Ugb3VyXFxuNzkyMTpcXHRcXHQgKiBob3N0IERNQSB3aWR0aCBmb3IgYWxsb2NhdGlvbiBhbmQgdGhlIGRldmljZSBETUEgd2lkdGggZm9yXFxuNzkyMjpcXHRcXHQgKiByZWdpc3RlciBoYW5kbGluZy5cXG43OTIzOlxcdFxcdCAqL1xcbjc5MjQ6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWhvc3RfZG1hX3dpZHRoKVxcbjc5MjU6XFx0XFx0XFx0cHJpdi1cXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWhvc3RfZG1hX3dpZHRoO1xcbjc5MjY6XFx0XFx0ZWxzZVxcbjc5Mjc6XFx0XFx0XFx0cHJpdi1cXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCA9IHByaXYtXFx1MDAzZWRtYV9jYXAuYWRkcjY0O1xcbjc5Mjg6XFx0XFxuNzkyOTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCkge1xcbjc5MzA6XFx0XFx0XFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXZpY2UsXFxuNzkzMTpcXHRcXHRcXHRcXHRcXHRETUFfQklUX01BU0socHJpdi1cXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCkpO1xcbjc5MzI6XFx0XFx0XFx0aWYgKCFyZXQpIHtcXG43OTMzOlxcdFxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlVzaW5nICVkLyVkIGJpdHMgRE1BIGhvc3QvZGV2aWNlIHdpZHRoXFxcXG5cXFwiLFxcbjc5MzQ6XFx0XFx0XFx0XFx0XFx0IHByaXYtXFx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGgsIHByaXYtXFx1MDAzZWRtYV9jYXAuYWRkcjY0KTtcXG43OTM1OlxcdFxcbjc5MzY6XFx0XFx0XFx0XFx0LypcXG43OTM3OlxcdFxcdFxcdFxcdCAqIElmIG1vcmUgdGhhbiAzMiBiaXRzIGNhbiBiZSBhZGRyZXNzZWQsIG1ha2Ugc3VyZSB0b1xcbjc5Mzg6XFx0XFx0XFx0XFx0ICogZW5hYmxlIGVuaGFuY2VkIGFkZHJlc3NpbmcgbW9kZS5cXG43OTM5OlxcdFxcdFxcdFxcdCAqL1xcbjc5NDA6XFx0XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfRE1BX0FERFJfVF82NEJJVCkpXFxuNzk0MTpcXHRcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VkbWFfY2ZnLVxcdTAwM2VlYW1lID0gdHJ1ZTtcXG43OTQyOlxcdFxcdFxcdH0gZWxzZSB7XFxuNzk0MzpcXHRcXHRcXHRcXHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldmljZSwgRE1BX0JJVF9NQVNLKDMyKSk7XFxuNzk0NDpcXHRcXHRcXHRcXHRpZiAocmV0KSB7XFxuNzk0NTpcXHRcXHRcXHRcXHRcXHRkZXZfZXJyKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIkZhaWxlZCB0byBzZXQgRE1BIE1hc2tcXFxcblxcXCIpO1xcbjc5NDY6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJvcl9od19pbml0O1xcbjc5NDc6XFx0XFx0XFx0XFx0fVxcbjc5NDg6XFx0XFxuNzk0OTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoID0gMzI7XFxuNzk1MDpcXHRcXHRcXHR9XFxuNzk1MTpcXHRcXHR9XFxuNzk1MjpcXHRcXG43OTUzOlxcdFxcdG5kZXYtXFx1MDAzZWZlYXR1cmVzIHw9IG5kZXYtXFx1MDAzZWh3X2ZlYXR1cmVzIHwgTkVUSUZfRl9ISUdIRE1BO1xcbjc5NTQ6XFx0XFx0bmRldi1cXHUwMDNld2F0Y2hkb2dfdGltZW8gPSBtc2Vjc190b19qaWZmaWVzKHdhdGNoZG9nKTtcXG43OTU1OlxcdCNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRFxcbjc5NTY6XFx0XFx0LyogQm90aCBtYWMxMDAgYW5kIGdtYWMgc3VwcG9ydCByZWNlaXZlIFZMQU4gdGFnIGRldGVjdGlvbiAqL1xcbjc5NTc6XFx0XFx0bmRldi1cXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfCBORVRJRl9GX0hXX1ZMQU5fU1RBR19SWDtcXG43OTU4OlxcdFxcdGlmIChkd21hY19pc194bWFjKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZSkpIHtcXG43OTU5OlxcdFxcdFxcdG5kZXYtXFx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYO1xcbjc5NjA6XFx0XFx0XFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZWh3X3ZsYW5fZW4gPSB0cnVlO1xcbjc5NjE6XFx0XFx0fVxcbjc5NjI6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAudmxoYXNoKSB7XFxuNzk2MzpcXHRcXHRcXHRuZGV2LVxcdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVI7XFxuNzk2NDpcXHRcXHRcXHRuZGV2LVxcdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fU1RBR19GSUxURVI7XFxuNzk2NTpcXHRcXHR9XFxuNzk2NjpcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC52bGlucylcXG43OTY3OlxcdFxcdFxcdG5kZXYtXFx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYO1xcbjc5Njg6XFx0I2VuZGlmXFxuNzk2OTpcXHRcXHRwcml2LVxcdTAwM2Vtc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoZGVidWcsIGRlZmF1bHRfbXNnX2xldmVsKTtcXG43OTcwOlxcdFxcbjc5NzE6XFx0XFx0cHJpdi1cXHUwMDNleHN0YXRzLnRocmVzaG9sZCA9IHRjO1xcbjc5NzI6XFx0XFxuNzk3MzpcXHRcXHQvKiBJbml0aWFsaXplIFJTUyAqL1xcbjc5NzQ6XFx0XFx0cnhxID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfcXVldWVzX3RvX3VzZTtcXG43OTc1OlxcdFxcdG5ldGRldl9yc3Nfa2V5X2ZpbGwocHJpdi1cXHUwMDNlcnNzLmtleSwgc2l6ZW9mKHByaXYtXFx1MDAzZXJzcy5rZXkpKTtcXG43OTc2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZXJzcy50YWJsZSk7IGkrKylcXG43OTc3OlxcdFxcdFxcdHByaXYtXFx1MDAzZXJzcy50YWJsZVtpXSA9IGV0aHRvb2xfcnhmaF9pbmRpcl9kZWZhdWx0KGksIHJ4cSk7XFxuNzk3ODpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTM6MDYuMTQ0MjkwMzU2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDgyOTM0NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgc3RtbWFjX2h3X2luaXRgOlxuXG4qKkRpdmluZyBpbnRvIGBzdG1tYWNfaHdfaW5pdGAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIG1lbnRhbGx5IGdvaW5nIHRocm91Z2ggYHN0bW1hY19od19pbml0YC4gRnJvbSB3aGF0IEkga25vdyBhYm91dCBTVE1NQUMgZHJpdmVycywgdGhpcyBmdW5jdGlvbiBpcyB0aGUgbGlrZWx5IHBsYWNlIHdoZXJlIHRoZSBjb3JlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIG1hZ2ljIGhhcHBlbnMuIEknbSBhc3N1bWluZyBpdCdzIHJlc3BvbnNpYmxlIGZvciB0aGluZ3MgbGlrZSBjbG9jayBlbmFibGluZywgUEhZIHNldHVwIChpZiByZWxldmFudCksIERNQSBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24sIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBpbml0aWFsIHJlZ2lzdGVyIHdyaXRlcyB0byB0aGUgTUFDIGl0c2VsZi5cblxuSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgbmVjZXNzYXJ5IGxvdy1sZXZlbCBjb25maWd1cmF0aW9ucyBhcmUgcGVyZm9ybWVkIGhlcmUuIEkgd2FudCB0byBjaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG1pc3NlZCBzdGVwcyBvciBhbnkgYXNzdW1wdGlvbnMgdGhhdCBtaWdodCBiZSBjYXVzaW5nIHN1YnRsZSBpc3N1ZXMgZG93biB0aGUgbGluZS4gSSBhbSByZWFsbHkgbG9va2luZyBmb3IgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgZm9yIHRoaXMgcGFydGljdWxhciBoYXJkd2FyZS4gSSdtIGV4cGVjdGluZyB0byBsb29rIGZvciB0aGUga2V5IGVsZW1lbnRzIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQgaW4gdGhlIGBzdG1tYWNfaHdfaW5pdGAgZnVuY3Rpb24uIEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIGFueSBoYXJkd2FyZS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMsIGxpa2UgYW55IGNsb2NrIHNldHRpbmdzIG9yIG1lbW9yeSBtYXAgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBkb25lIGNvcnJlY3RseSwgb3IgZWxzZSBldmVyeXRoaW5nIGVsc2Ugd2lsbCBmYWlsLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgYXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBNRElPL01JSSBpbnRlcmZhY2VzLCBhcyB0aGF0J3Mgb2Z0ZW4gYSBjb21tb24gc291cmNlIG9mIHRyb3VibGUgd2hlbiBkZWFsaW5nIHdpdGggRXRoZXJuZXQgaGFyZHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDAwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1MzoxNi42MjcyMjg3NDlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjQ4NDkzMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX2h3X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03MzQ4PXN0YXRpYyB2b2lkIHN0bW1hY19wcmludF9hY3RwaHlpZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTczODItLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3MzgzOiAqICBzdG1tYWNfaHdfaW5pdCAtIEluaXQgdGhlIE1BQyBkZXZpY2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTczODQtICogIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzM4OS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjczOTA6c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03MzkxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc3OT1zdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc4ODItXFx0LyogSW5pdCBNQUMgYW5kIGdldCB0aGUgY2FwYWJpbGl0aWVzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3ODgzOlxcdHJldCA9IHN0bW1hY19od19pbml0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzg4NC1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1MzoxOS4xNTIwODQ2NzJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE1NjQ3OTc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSB3ZSBnby4gTGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHN0bW1hY19od19pbml0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXJkd2FyZSBpcyBiZWluZyBicm91Z2h0IHVwLCB0aGUgaW5pdGlhbCByZWdpc3RlciBjb25maWd1cmF0aW9ucywgYW5kIGFueSBjcnVjaWFsIHNldHVwIHN0ZXBzIGJlZm9yZSB0aGUgZHJpdmVyIGlzIGZ1bGx5IG9wZXJhdGlvbmFsLiBUaGlzIGlzIGEgY3JpdGljYWwgcGllY2UsIGxheWluZyB0aGUgZ3JvdW5kd29yayBmb3IgZXZlcnl0aGluZyBlbHNlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuOiBBcmUgdGhlcmUgYW55IGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyBiZWluZyBhZGRyZXNzZWQgaGVyZT8gQW55IG9idmlvdXMgYXNzdW1wdGlvbnMgbWFkZSBhYm91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zIGRvd24gdGhlIGxpbmU/IEFyZSB0aGUgY2xvY2sgY29uZmlndXJhdGlvbnMgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHksIGFuZCBhcmUgaW50ZXJydXB0cyBiZWluZyBlbmFibGVkIGF0IHRoaXMgcG9pbnQ/IEkgYWxzbyB3YW50IHRvIGlkZW50aWZ5IGFueSBcIm1hZ2ljIG51bWJlcnNcIiBvciBoYXJkY29kZWQgdmFsdWVzIHRoYXQgbWlnaHQgaW5kaWNhdGUgYSBsYWNrIG9mIHByb3BlciBhYnN0cmFjdGlvbiBvciBjb3VsZCBpbnRyb2R1Y2UgcG9ydGFiaWxpdHkgaXNzdWVzLiBUaGUgZ29hbCBpcyBhIGNsZWFyIG1lbnRhbCBtYXAgb2Ygd2hhdCB0aGlzIGluaXRpYWxpc2F0aW9uIGNvZGUgaXMgZG9pbmcgYW5kIHRoZSBwb3RlbnRpYWwgZG93bnN0cmVhbSBlZmZlY3RzIG9mIGFueSBjaG9pY2VzIG1hZGUgd2l0aGluIGl0LiBMZXQncyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhcyByb2J1c3QgYXMgaXQgbmVlZHMgdG8gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzU4LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTM6MjUuMzA4NTY3NDU2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczOTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MzkwOlxcdHN0YXRpYyBpbnQgc3RtbWFjX2h3X2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbjczOTE6XFx0e1xcbjczOTI6XFx0XFx0aW50IHJldDtcXG43MzkzOlxcdFxcbjczOTQ6XFx0XFx0LyogZHdtYWMtc3VuOGkgb25seSB3b3JrIGluIGNoYWluIG1vZGUgKi9cXG43Mzk1OlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUTU1BQ19GTEFHX0hBU19TVU44SSlcXG43Mzk2OlxcdFxcdFxcdGNoYWluX21vZGUgPSAxO1xcbjczOTc6XFx0XFx0cHJpdi1cXHUwMDNlY2hhaW5fbW9kZSA9ICEhY2hhaW5fbW9kZTtcXG43Mzk4OlxcdFxcbjczOTk6XFx0XFx0LyogSW5pdGlhbGl6ZSBIVyBJbnRlcmZhY2UgKi9cXG43NDAwOlxcdFxcdHJldCA9IHN0bW1hY19od2lmX2luaXQocHJpdik7XFxuNzQwMTpcXHRcXHRpZiAocmV0KVxcbjc0MDI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG43NDAzOlxcdFxcbjc0MDQ6XFx0XFx0LyogR2V0IHRoZSBIVyBjYXBhYmlsaXR5IChuZXcgR01BQyBuZXdlciB0aGFuIDMuNTBhKSAqL1xcbjc0MDU6XFx0XFx0cHJpdi1cXHUwMDNlaHdfY2FwX3N1cHBvcnQgPSBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzKHByaXYpO1xcbjc0MDY6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWh3X2NhcF9zdXBwb3J0KSB7XFxuNzQwNzpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJETUEgSFcgY2FwYWJpbGl0eSByZWdpc3RlciBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbjc0MDg6XFx0XFxuNzQwOTpcXHRcXHRcXHQvKiBXZSBjYW4gb3ZlcnJpZGUgc29tZSBnbWFjL2RtYSBjb25maWd1cmF0aW9uIGZpZWxkczogZS5nLlxcbjc0MTA6XFx0XFx0XFx0ICogZW5oX2Rlc2MsIHR4X2NvZSAoZS5nLiB0aGF0IGFyZSBwYXNzZWQgdGhyb3VnaCB0aGVcXG43NDExOlxcdFxcdFxcdCAqIHBsYXRmb3JtKSB3aXRoIHRoZSB2YWx1ZXMgZnJvbSB0aGUgSFcgY2FwYWJpbGl0eVxcbjc0MTI6XFx0XFx0XFx0ICogcmVnaXN0ZXIgKGlmIHN1cHBvcnRlZCkuXFxuNzQxMzpcXHRcXHRcXHQgKi9cXG43NDE0OlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWVuaF9kZXNjID0gcHJpdi1cXHUwMDNlZG1hX2NhcC5lbmhfZGVzYztcXG43NDE1OlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBtdCA9IHByaXYtXFx1MDAzZWRtYV9jYXAucG10X3JlbW90ZV93YWtlX3VwIFxcdTAwMjZcXHUwMDI2XFxuNzQxNjpcXHRcXHRcXHRcXHRcXHQhKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1RNTUFDX0ZMQUdfVVNFX1BIWV9XT0wpO1xcbjc0MTc6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAuaGFzaF90Yl9zeikge1xcbjc0MTg6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZW11bHRpY2FzdF9maWx0ZXJfYmlucyA9XFxuNzQxOTpcXHRcXHRcXHRcXHRcXHRcXHQoQklUKHByaXYtXFx1MDAzZWRtYV9jYXAuaGFzaF90Yl9zeikgXFx1MDAzY1xcdTAwM2MgNSk7XFxuNzQyMDpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNlbWNhc3RfYml0c19sb2cyID1cXG43NDIxOlxcdFxcdFxcdFxcdFxcdFxcdGlsb2cyKHByaXYtXFx1MDAzZWh3LVxcdTAwM2VtdWx0aWNhc3RfZmlsdGVyX2JpbnMpO1xcbjc0MjI6XFx0XFx0XFx0fVxcbjc0MjM6XFx0XFxuNzQyNDpcXHRcXHRcXHQvKiBUWENPRSBkb2Vzbid0IHdvcmsgaW4gdGhyZXNoIERNQSBtb2RlICovXFxuNzQyNTpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZm9yY2VfdGhyZXNoX2RtYV9tb2RlKVxcbjc0MjY6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNldHhfY29lID0gZmFsc2U7XFxuNzQyNzpcXHRcXHRcXHRlbHNlXFxuNzQyODpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9jb2UgPSBwcml2LVxcdTAwM2VkbWFfY2FwLnR4X2NvZTtcXG43NDI5OlxcdFxcbjc0MzA6XFx0XFx0XFx0LyogSW4gY2FzZSBvZiBHTUFDNCByeF9jb2UgaXMgZnJvbSBIVyBjYXAgcmVnaXN0ZXIuICovXFxuNzQzMTpcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9jb2UgPSBwcml2LVxcdTAwM2VkbWFfY2FwLnJ4X2NvZTtcXG43NDMyOlxcdFxcbjc0MzM6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAucnhfY29lX3R5cGUyKVxcbjc0MzQ6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfY29lID0gU1RNTUFDX1JYX0NPRV9UWVBFMjtcXG43NDM1OlxcdFxcdFxcdGVsc2UgaWYgKHByaXYtXFx1MDAzZWRtYV9jYXAucnhfY29lX3R5cGUxKVxcbjc0MzY6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfY29lID0gU1RNTUFDX1JYX0NPRV9UWVBFMTtcXG43NDM3OlxcdFxcbjc0Mzg6XFx0XFx0XFx0c3RtbWFjX3ByaW50X2FjdHBoeWlmKHByaXYpO1xcbjc0Mzk6XFx0XFx0fSBlbHNlIHtcXG43NDQwOlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIk5vIEhXIERNQSBmZWF0dXJlIHJlZ2lzdGVyIHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuNzQ0MTpcXHRcXHR9XFxuNzQ0MjpcXHRcXG43NDQzOlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9jb2UpIHtcXG43NDQ0OlxcdFxcdFxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2VyeF9jc3VtID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfY29lO1xcbjc0NDU6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiUlggQ2hlY2tzdW0gT2ZmbG9hZCBFbmdpbmUgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG43NDQ2OlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VzeW5vcHN5c19pZCBcXHUwMDNjIERXTUFDX0NPUkVfNF8wMClcXG43NDQ3OlxcdFxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIkNPRSBUeXBlICVkXFxcXG5cXFwiLCBwcml2LVxcdTAwM2Vody1cXHUwMDNlcnhfY3N1bSk7XFxuNzQ0ODpcXHRcXHR9XFxuNzQ0OTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNldHhfY29lKVxcbjc0NTA6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiVFggQ2hlY2tzdW0gaW5zZXJ0aW9uIHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuNzQ1MTpcXHRcXG43NDUyOlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwbXQpIHtcXG43NDUzOlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIldha2UtVXAgT24gTGFuIHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuNzQ1NDpcXHRcXHRcXHRkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKHByaXYtXFx1MDAzZWRldmljZSwgMSk7XFxuNzQ1NTpcXHRcXHRcXHRkZXZtX3BtX3NldF93YWtlX2lycShwcml2LVxcdTAwM2VkZXZpY2UsIHByaXYtXFx1MDAzZXdvbF9pcnEpO1xcbjc0NTY6XFx0XFx0fVxcbjc0NTc6XFx0XFxuNzQ1ODpcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5udW1iZXJfcnhfcXVldWVzIFxcdTAwMjZcXHUwMDI2XFxuNzQ1OTpcXHRcXHQgICAgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfcXVldWVzX3RvX3VzZSBcXHUwMDNlIHByaXYtXFx1MDAzZWRtYV9jYXAubnVtYmVyX3J4X3F1ZXVlcykge1xcbjc0NjA6XFx0XFx0XFx0ZGV2X3dhcm4ocHJpdi1cXHUwMDNlZGV2aWNlLFxcbjc0NjE6XFx0XFx0XFx0XFx0IFxcXCJOdW1iZXIgb2YgUnggcXVldWVzICgldSkgZXhjZWVkcyBkbWEgY2FwYWJpbGl0eVxcXFxuXFxcIixcXG43NDYyOlxcdFxcdFxcdFxcdCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9xdWV1ZXNfdG9fdXNlKTtcXG43NDYzOlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X3F1ZXVlc190b191c2UgPSBwcml2LVxcdTAwM2VkbWFfY2FwLm51bWJlcl9yeF9xdWV1ZXM7XFxuNzQ2NDpcXHRcXHR9XFxuNzQ2NTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5udW1iZXJfdHhfcXVldWVzIFxcdTAwMjZcXHUwMDI2XFxuNzQ2NjpcXHRcXHQgICAgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNldHhfcXVldWVzX3RvX3VzZSBcXHUwMDNlIHByaXYtXFx1MDAzZWRtYV9jYXAubnVtYmVyX3R4X3F1ZXVlcykge1xcbjc0Njc6XFx0XFx0XFx0ZGV2X3dhcm4ocHJpdi1cXHUwMDNlZGV2aWNlLFxcbjc0Njg6XFx0XFx0XFx0XFx0IFxcXCJOdW1iZXIgb2YgVHggcXVldWVzICgldSkgZXhjZWVkcyBkbWEgY2FwYWJpbGl0eVxcXFxuXFxcIixcXG43NDY5OlxcdFxcdFxcdFxcdCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfdG9fdXNlKTtcXG43NDcwOlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc190b191c2UgPSBwcml2LVxcdTAwM2VkbWFfY2FwLm51bWJlcl90eF9xdWV1ZXM7XFxuNzQ3MTpcXHRcXHR9XFxuNzQ3MjpcXHRcXG43NDczOlxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLnJ4X2ZpZm9fc2l6ZSBcXHUwMDI2XFx1MDAyNlxcbjc0NzQ6XFx0XFx0ICAgIHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X2ZpZm9fc2l6ZSBcXHUwMDNlIHByaXYtXFx1MDAzZWRtYV9jYXAucnhfZmlmb19zaXplKSB7XFxuNzQ3NTpcXHRcXHRcXHRkZXZfd2Fybihwcml2LVxcdTAwM2VkZXZpY2UsXFxuNzQ3NjpcXHRcXHRcXHRcXHQgXFxcIlJ4IEZJRk8gc2l6ZSAoJXUpIGV4Y2VlZHMgZG1hIGNhcGFiaWxpdHlcXFxcblxcXCIsXFxuNzQ3NzpcXHRcXHRcXHRcXHQgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfZmlmb19zaXplKTtcXG43NDc4OlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X2ZpZm9fc2l6ZSA9IHByaXYtXFx1MDAzZWRtYV9jYXAucnhfZmlmb19zaXplO1xcbjc0Nzk6XFx0XFx0fVxcbjc0ODA6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAudHhfZmlmb19zaXplIFxcdTAwMjZcXHUwMDI2XFxuNzQ4MTpcXHRcXHQgICAgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNldHhfZmlmb19zaXplIFxcdTAwM2UgcHJpdi1cXHUwMDNlZG1hX2NhcC50eF9maWZvX3NpemUpIHtcXG43NDgyOlxcdFxcdFxcdGRldl93YXJuKHByaXYtXFx1MDAzZWRldmljZSxcXG43NDgzOlxcdFxcdFxcdFxcdCBcXFwiVHggRklGTyBzaXplICgldSkgZXhjZWVkcyBkbWEgY2FwYWJpbGl0eVxcXFxuXFxcIixcXG43NDg0OlxcdFxcdFxcdFxcdCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9maWZvX3NpemUpO1xcbjc0ODU6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNldHhfZmlmb19zaXplID0gcHJpdi1cXHUwMDNlZG1hX2NhcC50eF9maWZvX3NpemU7XFxuNzQ4NjpcXHRcXHR9XFxuNzQ4NzpcXHRcXG43NDg4OlxcdFxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2V2bGFuX2ZhaWxfcV9lbiA9XFxuNzQ4OTpcXHRcXHRcXHQocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19WTEFOX0ZBSUxfUV9FTik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjUzOjI1LjMwODg1MTY3NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjYxNzYwNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzdG1tYWNfaHdpZl9pbml0YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgc3RtbWFjX2h3aWZfaW5pdGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGluaXRpYWxpemVkIGZvciB0aGlzIFNUTU1BQyBkcml2ZXIuIEknbSBhc3N1bWluZyB0aGlzIGlzIHRoZSBjcnVjaWFsIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgaGFyZHdhcmUgaW50ZXJhY3Rpb24sIHNvIGdldHRpbmcgYSBzb2xpZCBncmlwIG9uIHRoaXMgaXMgcGFyYW1vdW50LiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgY2FsbHMgdG8gcmVnaXN0ZXIgdGhlIGRldmljZSwgc2V0IHVwIGludGVycnVwdCBoYW5kbGVycywgY29uZmlndXJlIERNQSBjaGFubmVscyDigJMgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBicmluZ2luZyBhIE1BQyBpbnRlcmZhY2Ugb25saW5lLiBJJ2xsIGJlIGV4cGVjdGluZyB0byBzZWUgYSBsb3Qgb2YgcmVnaXN0ZXIgYWNjZXNzIGhlcmUsIHBvdGVudGlhbGx5IGJhc2VkIG9uIHRoZSBEVCBiaW5kaW5ncy4gR290dGEgbWFrZSBzdXJlIGl0IGhhbmRsZXMgYWxsIHRoZSBwb3NzaWJsZSB2YXJpYXRpb25zIGluIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIHRvby4gT2theSwgbGV0J3Mgc3RhcnQgcmVhZGluZyB0aHJvdWdoIHRoZSBjb2RlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTE2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1MzozMS45NzA2MTU4MzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTM3MDM1MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX2h3aWZfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9Mjk0PXN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozMTc6aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zMTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oPTY5Mz1pbnQgc3RtbWFjX3Jlc2V0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oOjY5NDppbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaC02OTUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTczOTA9c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTczOTktXFx0LyogSW5pdGlhbGl6ZSBIVyBJbnRlcmZhY2UgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc0MDA6XFx0cmV0ID0gc3RtbWFjX2h3aWZfaW5pdChwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MDEtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTM6MzQuNzI0MzI1NjE4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMTU4MDQ3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byBgc3RtbWFjX2h3aWZfaW5pdGAuIEkgbmVlZCB0byBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gd29ya3MuIEknbSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWUsIGl0J3MgcmVzcG9uc2libGUgZm9yIGJyaW5naW5nIHVwIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgZm9yIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIHBhcnRpY3VsYXJseSBhbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZGV2aWNlIHRyZWUgYW5kIGFueSBtZW1vcnkgYWxsb2NhdGlvbiBpdCBwZXJmb3Jtcy4gSeKAmW0gZXhwZWN0aW5nIHRvIHNlZSBjb25maWd1cmF0aW9uIG9mIHRoZSBETUEgZW5naW5lLCBQSFkgaW50ZXJhY3Rpb24sIGFuZCBpbnRlcnJ1cHQgc2V0dXAgaW4gaGVyZS4gVW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiB0aGVzZSBvcGVyYXRpb25zIGlzIGNydWNpYWwuIEkgd2FudCB0byBzZWUgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyBhbmQgd2hhdCBzdGVwcyBhcmUgdGFrZW4gZHVyaW5nIHRoZSBzZXR1cC4gSXQncyBhbHNvIGltcG9ydGFudCB0byBub3RlIHRoZSB2YXJpb3VzIGhhcmR3YXJlIHZhcmlhdGlvbnMgdGhpcyBjb2RlIG1pZ2h0IG5lZWQgdG8gc3VwcG9ydC4gTGV04oCZcyBzZWUgaG93IGVsZWdhbnRseSBpdCBoYW5kbGVzIHRoZXNlIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgYXQgZGlmZmVyZW50IHBvaW50cyBkdXJpbmcgdGhlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTUyLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTM6NDAuNzQwMTMyNzQyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMxNzpcXHRpbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIDMxODpcXHR7XFxuIDMxOTpcXHRcXHRlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGU7XFxuIDMyMDpcXHRcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xcbiAzMjE6XFx0XFx0c3RydWN0IHN0bW1hY192ZXJzaW9uIHZlcnNpb247XFxuIDMyMjpcXHRcXHRzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7XFxuIDMyMzpcXHRcXHRib29sIG5lZWRzX3NldHVwID0gdHJ1ZTtcXG4gMzI0OlxcdFxcdGludCByZXQ7XFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdHN0bW1hY19nZXRfdmVyc2lvbihwcml2LCBcXHUwMDI2dmVyc2lvbik7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdC8qIFNhdmUgSUQgZm9yIGxhdGVyIHVzZSAqL1xcbiAzMjk6XFx0XFx0cHJpdi1cXHUwMDNlc3lub3BzeXNfaWQgPSB2ZXJzaW9uLnNucHN2ZXI7XFxuIDMzMDpcXHRcXG4gMzMxOlxcdFxcdC8qIExldHMgYXNzdW1lIHNvbWUgc2FmZSB2YWx1ZXMgZmlyc3QgKi9cXG4gMzMyOlxcdFxcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDNCkge1xcbiAzMzM6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcHRwYWRkciA9IHByaXYtXFx1MDAzZWlvYWRkciArIFBUUF9HTUFDNF9PRkZTRVQ7XFxuIDMzNDpcXHRcXHRcXHRwcml2LVxcdTAwM2VtbWNhZGRyID0gcHJpdi1cXHUwMDNlaW9hZGRyICsgTU1DX0dNQUM0X09GRlNFVDtcXG4gMzM1OlxcdFxcdFxcdHByaXYtXFx1MDAzZWVzdGFkZHIgPSBwcml2LVxcdTAwM2Vpb2FkZHIgKyBFU1RfR01BQzRfT0ZGU0VUO1xcbiAzMzY6XFx0XFx0fSBlbHNlIHtcXG4gMzM3OlxcdFxcdFxcdHByaXYtXFx1MDAzZXB0cGFkZHIgPSBwcml2LVxcdTAwM2Vpb2FkZHIgKyBQVFBfR01BQzNfWF9PRkZTRVQ7XFxuIDMzODpcXHRcXHRcXHRwcml2LVxcdTAwM2VtbWNhZGRyID0gcHJpdi1cXHUwMDNlaW9hZGRyICsgTU1DX0dNQUMzX1hfT0ZGU0VUO1xcbiAzMzk6XFx0XFx0XFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKVxcbiAzNDA6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlZXN0YWRkciA9IHByaXYtXFx1MDAzZWlvYWRkciArIEVTVF9YR01BQ19PRkZTRVQ7XFxuIDM0MTpcXHRcXHR9XFxuIDM0MjpcXHRcXG4gMzQzOlxcdFxcdG1hYyA9IGRldm1fa3phbGxvYyhwcml2LVxcdTAwM2VkZXZpY2UsIHNpemVvZigqbWFjKSwgR0ZQX0tFUk5FTCk7XFxuIDM0NDpcXHRcXHRpZiAoIW1hYylcXG4gMzQ1OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHQvKiBDaGVjayBmb3IgSFcgc3BlY2lmaWMgc2V0dXAgZmlyc3QgKi9cXG4gMzQ4OlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VtYWNfc2V0dXApIHtcXG4gMzQ5OlxcdFxcdFxcdHJldCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1hY19zZXR1cChwcml2LCBtYWMpO1xcbiAzNTA6XFx0XFx0XFx0aWYgKHJldClcXG4gMzUxOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDM1MjpcXHRcXG4gMzUzOlxcdFxcdFxcdG5lZWRzX3NldHVwID0gZmFsc2U7XFxuIDM1NDpcXHRcXHR9XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZtYWMtXFx1MDAzZWlycV9jdHJsX2xvY2spO1xcbiAzNTc6XFx0XFxuIDM1ODpcXHRcXHQvKiBGYWxsYmFjayB0byBnZW5lcmljIEhXICovXFxuIDM1OTpcXHRcXG4gMzYwOlxcdFxcdC8qIFVzZSBzeW5vcHN5c19pZCB2YXIgYmVjYXVzZSBzb21lIHNldHVwcyBjYW4gb3ZlcnJpZGUgdGhpcyAqL1xcbiAzNjE6XFx0XFx0ZW50cnkgPSBzdG1tYWNfaHdpZl9maW5kKGNvcmVfdHlwZSwgcHJpdi1cXHUwMDNlc3lub3BzeXNfaWQsIHZlcnNpb24uZGV2X2lkKTtcXG4gMzYyOlxcdFxcdGlmICghZW50cnkpIHtcXG4gMzYzOlxcdFxcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2aWNlLFxcbiAzNjQ6XFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byBmaW5kIEhXIElGIChpZD0weCV4LCBnbWFjPSVkLyVkKVxcXFxuXFxcIixcXG4gMzY1OlxcdFxcdFxcdFxcdHZlcnNpb24uc25wc3ZlciwgY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQyxcXG4gMzY2OlxcdFxcdFxcdFxcdGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUM0KTtcXG4gMzY3OlxcdFxcbiAzNjg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDM2OTpcXHRcXHR9XFxuIDM3MDpcXHRcXG4gMzcxOlxcdFxcdC8qIE9ubHkgdXNlIGdlbmVyaWMgSFcgaGVscGVycyBpZiBuZWVkZWQgKi9cXG4gMzcyOlxcdFxcdG1hYy1cXHUwMDNlZGVzYyA9IG1hYy1cXHUwMDNlZGVzYyA/IDogZW50cnktXFx1MDAzZWRlc2M7XFxuIDM3MzpcXHRcXHRtYWMtXFx1MDAzZWRtYSA9IG1hYy1cXHUwMDNlZG1hID8gOiBlbnRyeS1cXHUwMDNlZG1hO1xcbiAzNzQ6XFx0XFx0bWFjLVxcdTAwM2VtYWMgPSBtYWMtXFx1MDAzZW1hYyA/IDogZW50cnktXFx1MDAzZW1hYztcXG4gMzc1OlxcdFxcdG1hYy1cXHUwMDNlcHRwID0gbWFjLVxcdTAwM2VwdHAgPyA6IGVudHJ5LVxcdTAwM2Vod3RpbWVzdGFtcDtcXG4gMzc2OlxcdFxcdG1hYy1cXHUwMDNlbW9kZSA9IG1hYy1cXHUwMDNlbW9kZSA/IDogZW50cnktXFx1MDAzZW1vZGU7XFxuIDM3NzpcXHRcXHRtYWMtXFx1MDAzZXRjID0gbWFjLVxcdTAwM2V0YyA/IDogZW50cnktXFx1MDAzZXRjO1xcbiAzNzg6XFx0XFx0bWFjLVxcdTAwM2VtbWMgPSBtYWMtXFx1MDAzZW1tYyA/IDogZW50cnktXFx1MDAzZW1tYztcXG4gMzc5OlxcdFxcdG1hYy1cXHUwMDNlZXN0ID0gbWFjLVxcdTAwM2Vlc3QgPyA6IGVudHJ5LVxcdTAwM2Vlc3Q7XFxuIDM4MDpcXHRcXHRtYWMtXFx1MDAzZXZsYW4gPSBtYWMtXFx1MDAzZXZsYW4gPyA6IGVudHJ5LVxcdTAwM2V2bGFuO1xcbiAzODE6XFx0XFxuIDM4MjpcXHRcXHRwcml2LVxcdTAwM2VodyA9IG1hYztcXG4gMzgzOlxcdFxcdHByaXYtXFx1MDAzZWZwZV9jZmcucmVnID0gZW50cnktXFx1MDAzZXJlZ3MuZnBlX3JlZztcXG4gMzg0OlxcdFxcdHByaXYtXFx1MDAzZXB0cGFkZHIgPSBwcml2LVxcdTAwM2Vpb2FkZHIgKyBlbnRyeS1cXHUwMDNlcmVncy5wdHBfb2ZmO1xcbiAzODU6XFx0XFx0cHJpdi1cXHUwMDNlbW1jYWRkciA9IHByaXYtXFx1MDAzZWlvYWRkciArIGVudHJ5LVxcdTAwM2VyZWdzLm1tY19vZmY7XFxuIDM4NjpcXHRcXHRtZW1jcHkoXFx1MDAyNnByaXYtXFx1MDAzZXB0cF9jbG9ja19vcHMsIGVudHJ5LVxcdTAwM2VwdHAsXFxuIDM4NzpcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBwdHBfY2xvY2tfaW5mbykpO1xcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHRpZiAoZW50cnktXFx1MDAzZWVzdClcXG4gMzkwOlxcdFxcdFxcdHByaXYtXFx1MDAzZWVzdGFkZHIgPSBwcml2LVxcdTAwM2Vpb2FkZHIgKyBlbnRyeS1cXHUwMDNlcmVncy5lc3Rfb2ZmO1xcbiAzOTE6XFx0XFxuIDM5MjpcXHRcXHQvKiBFbnRyeSBmb3VuZCAqL1xcbiAzOTM6XFx0XFx0aWYgKG5lZWRzX3NldHVwKSB7XFxuIDM5NDpcXHRcXHRcXHRyZXQgPSBlbnRyeS1cXHUwMDNlc2V0dXAocHJpdik7XFxuIDM5NTpcXHRcXHRcXHRpZiAocmV0KVxcbiAzOTY6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzk3OlxcdFxcdH1cXG4gMzk4OlxcdFxcbiAzOTk6XFx0XFx0LyogU2F2ZSBxdWlya3MsIGlmIG5lZWRlZCBmb3IgcG9zdGVyaW9yIHVzZSAqL1xcbiA0MDA6XFx0XFx0cHJpdi1cXHUwMDNlaHdpZl9xdWlya3MgPSBlbnRyeS1cXHUwMDNlcXVpcmtzO1xcbiA0MDE6XFx0XFxuIDQwMjpcXHRcXHRyZXR1cm4gMDtcXG4gNDAzOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTM6NDAuNzQwMjk2ODcyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTA5ODA1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgbWluZCBpcyBqdW1waW5nIGFyb3VuZCBhIGJpdCBoZXJlLCBmb2N1c2luZyBpbiBvbiB0aGlzIGZ1bmN0aW9uLCBgc3RtbWFjX2dldF92ZXJzaW9uYC4gVGhlIGtleSB0aGluZyB0aGF0IGtlZXBzIHBvcHBpbmcgdXAgaXMgdGhhdCBJJ20gZGVhbGluZyB3aXRoIE1lbW9yeS1NYXBwZWQgSS9PLCBvciBNTUlPLiBMZXQgbWUganVzdCB0aGluay4uLlxuXG4qKk1NSU8gT2JzZXJ2YXRpb24qKlxuXG5BaCwgcmlnaHQuIGBzdG1tYWNfZ2V0X3ZlcnNpb25gIHJlYWRzIGZyb20gTU1JTy4gVGhhdCBtZWFucyBJJ20gbm90IGRlYWxpbmcgd2l0aCBzb21lIGxvY2FsIHZhcmlhYmxlIG9yIGEgc2ltcGxlIGZ1bmN0aW9uIGNhbGwuIEknbSBoaXR0aW5nIGhhcmR3YXJlIHJlZ2lzdGVycyBkaXJlY3RseS4gVGhpcyBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB0aW1pbmcsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGFuZCBob3cgdGhlIGhhcmR3YXJlIHByZXNlbnRzIGl0cyB2ZXJzaW9uIGluZm9ybWF0aW9uLiBJZiBpdOKAmXMgdXNpbmcgTU1JTywgaXQgaW1wbGllcyB0aGF0IHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNvdWxkIGJlIGhlbGQgaW4gYSBmaXhlZCByZWdpc3RlciBsb2NhdGlvbi4gSSBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIHJlZ2lzdGVyIG9mZnNldHMuIERvZXMgdGhlIGRyaXZlciBoYW5kbGUgdGhpcz8gSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGRyaXZlciBjb2RlIGhhbmRsZXMgcG90ZW50aWFsIGlzc3VlcyBsaWtlIGVuZGlhbm5lc3MgYW5kIGFsaWdubWVudCBjb3JyZWN0bHkgdG8gcHJldmVudCByZWFkaW5nIHRoZSB3cm9uZyB2ZXJzaW9uLiBBbmQgaXQgbWlnaHQgYmUgbmVjZXNzYXJ5IHRvIGNvbnN1bHQgdGhlIHNwZWNpZmljIGRhdGFzaGVldCBmb3IgdGhlIGhhcmR3YXJlIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNpc2UgZm9ybWF0IGFuZCBtZWFuaW5nIG9mIHRoYXQgdmVyc2lvbiBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyMTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjUzOjQ1LjM1MTI4MDA1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODM2NTQ2ODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY19nZXRfdmVyc2lvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTY9c3RydWN0IHN0bW1hY192ZXJzaW9uIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MjE6c3RhdGljIHZvaWQgc3RtbWFjX2dldF92ZXJzaW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzdG1tYWNfdmVyc2lvbiAqdmVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTMxNz1pbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzI1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozMjY6XFx0c3RtbWFjX2dldF92ZXJzaW9uKHByaXYsIFxcdTAwMjZ2ZXJzaW9uKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1Mzo0OS4xODc4MzM4MDZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU2NjYwNzQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4gZW1iZWRkZWQgc3lzdGVtcyBhbmQgZGV2aWNlIGRyaXZlcnM6XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIHRvIGBzdG1tYWNfZ2V0X3ZlcnNpb25gKipcblxuQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyBjbGVhcjogZGl2ZSBpbnRvIHRoZSBgc3RtbWFjX2dldF92ZXJzaW9uYCBmdW5jdGlvbi4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVW5kZXJzdGFuZGluZyB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBvZiB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIE1BQyBkcml2ZXIgaXMgY3J1Y2lhbCwgaXQncyB0aGUgZm91bmRhdGlvbiBvZiBhbG1vc3QgZXZlcnl0aGluZy4gSXQgdXN1YWxseSBpbnZvbHZlcyByZWFkaW5nIHJlZ2lzdGVycywgbWF5YmUgc29tZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBkcml2ZXIsIGFuZCBmb3JtYXR0aW5nIHRoYXQgZGF0YSBmb3IgdGhlIHVzZXIuIEknbGwgbmVlZCB0byBsb29rIGZvciB3aGVyZSBpdCdzIGRlZmluZWQuIElzIGl0IGEgZGlyZWN0IHJlZ2lzdGVyIHJlYWQsIG9yIGRvZXMgaXQgaW52b2x2ZSBzb21lIG1vcmUgY29tcGxleCBsb2dpYyB0byBkZXRlcm1pbmUgdGhlIGRyaXZlcidzIHJldmlzaW9uLCBmZWF0dXJlIHNldCwgb3IgaGFyZHdhcmUgY29tcGF0aWJpbGl0eT8gSG9wZWZ1bGx5LCBpdCBpcyB3ZWxsIGRvY3VtZW50ZWQ7IG90aGVyd2lzZSBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWdpc3Rlci1sZXZlbCBpbnRlcnByZXRhdGlvbiBvZiBpdC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBkZWJ1Z2dpbmcgYW5kIGVuc3VyaW5nIGNvbXBhdGliaWxpdHksIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZGlmZmVyZW50IGhhcmR3YXJlIHJldmlzaW9ucyBvciBrZXJuZWwgdmVyc2lvbnMuIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIGl0J3Mgd29ya2luZyB3aXRoIGFuZCBob3cgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gaXMgc3RydWN0dXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk3NTgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1Mzo1NS43NTQ0NDM0ODlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIxOlxcdHN0YXRpYyB2b2lkIHN0bW1hY19nZXRfdmVyc2lvbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuICAyMjpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHN0bW1hY192ZXJzaW9uICp2ZXIpXFxuICAyMzpcXHR7XFxuICAyNDpcXHRcXHRlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGU7XFxuICAyNTpcXHRcXHR1bnNpZ25lZCBpbnQgdmVyc2lvbl9vZmZzZXQ7XFxuICAyNjpcXHRcXHR1MzIgdmVyc2lvbjtcXG4gIDI3OlxcdFxcbiAgMjg6XFx0XFx0dmVyLVxcdTAwM2VzbnBzdmVyID0gMDtcXG4gIDI5OlxcdFxcdHZlci1cXHUwMDNlZGV2X2lkID0gMDtcXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX01BQzEwMClcXG4gIDMyOlxcdFxcdFxcdHJldHVybjtcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUMpXFxuICAzNTpcXHRcXHRcXHR2ZXJzaW9uX29mZnNldCA9IEdNQUNfVkVSU0lPTjtcXG4gIDM2OlxcdFxcdGVsc2VcXG4gIDM3OlxcdFxcdFxcdHZlcnNpb25fb2Zmc2V0ID0gR01BQzRfVkVSU0lPTjtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0dmVyc2lvbiA9IHJlYWRsKHByaXYtXFx1MDAzZWlvYWRkciArIHZlcnNpb25fb2Zmc2V0KTtcXG4gIDQwOlxcdFxcdGlmICh2ZXJzaW9uID09IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTM6NTUuNzU0NTQzMDc5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMDQ1NzU0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBWZXJzaW9uIFZhbHVlIEFub21hbHkqKlxuXG5BbHJpZ2h0LCBsZXQncyBkcmlsbCBkb3duIG9uIHRoaXMuIElmIHRoZSBgdmVyc2lvbmAgdmFsdWUgaGl0cyBhIHplcm8gb3IsIGV2ZW4gbW9yZSBzdXNwaWNpb3VzbHksIGAweGZmZmZmZmZmYCwgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucz8gV2UncmUgdGFsa2luZyBhYm91dCB1bm1hcHBlZCBtZW1vcnkgaGVyZSwgb3IgcG90ZW50aWFsbHkgc29tZSBpbnRlbnRpb25hbGx5IGZha2VkIE1NSU8uIEVpdGhlciBzY2VuYXJpbyBkZW1hbmRzIGltbWVkaWF0ZSBhdHRlbnRpb24uIEEgemVybyB1c3VhbGx5IGltcGxpZXMgaXQgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQgb3IgaXMgb3RoZXJ3aXNlIGludmFsaWQsIGEgc2lnbmFsIG9mIHNlcmlvdXMgdHJvdWJsZS4gYDB4ZmZmZmZmZmZgIGlzIGEgYml0IG1vcmUgbnVhbmNlZC4gSXQgY291bGQgcmVwcmVzZW50IGFuIG92ZXJmbG93LCBhbiBpbnRlbnRpb25hbCBtYXJrZXIgZm9yIFwiaW52YWxpZCxcIiBvciBwZXJoYXBzIHNvbWUgaGFyZHdhcmUtc3BlY2lmaWMgcXVpcmsgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCB0aGUgcmVsZXZhbnQgbWVtb3J5IG1hcCBhbmQgTU1JTyBkZWZpbml0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IHBhcnRpY3VsYXIgcmVnaW9uIGlzICpzdXBwb3NlZCogdG8gY29udGFpbi4gSXMgaXQgYSBrbm93biByZXNlcnZlZCBhcmVhPyBJcyB0aGVyZSBhIGtub3duIGZhaWx1cmUgbW9kZSB0aGF0IHJlc3VsdHMgaW4gdGhpcyB2YWx1ZT8gV2hhdCBhcmUgdGhlIGFjY2VzcyBwZXJtaXNzaW9ucyBhc3NvY2lhdGVkIHdpdGggdGhhdCBtZW1vcnkgYWRkcmVzcz8gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGludG8gdGhlIGRvY3VtZW50YXRpb24gYW5kIHBvdGVudGlhbGx5IHRyYWNlIHRoZSBtZW1vcnkgYWNjZXNzIGluc3RydWN0aW9ucy4gVGhpcyByZXF1aXJlcyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBsYXRmb3JtJ3MgYXJjaGl0ZWN0dXJlLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiB0aGlzIGNvbmRpdGlvbiBpcyB0cmlnZ2VyZWQuIElzIGl0IGR1cmluZyBpbml0aWFsaXphdGlvbiwgYXQgcnVudGltZSwgb3IgaXMgaXQgYSByZXN1bHQgb2YgYW4gZXh0ZXJuYWwgaW50ZXJhY3Rpb24/IElzIGl0IGEgc3ltcHRvbSBvZiBhIGxhcmdlciwgbW9yZSBmdW5kYW1lbnRhbCBwcm9ibGVtPyBJcyBpdCBwb3NzaWJsZSB0aGUgcmVhZCBpcyBvY2N1cnJpbmcgb24gYSBzdGFsZSBwb2ludGVyP1xuXG5Gcm9tIGEgZGVidWdnaW5nIHBlcnNwZWN0aXZlLCBJJ20gdGhpbmtpbmcgb2Ygc3RyYXRlZ2llcyBub3c6IHNldHRpbmcgYSBicmVha3BvaW50LCBpbnN0cnVtZW50aW5nIHRoZSBjb2RlIHRvIGxvZyBhY2Nlc3NlcyB0byB0aGF0IGFkZHJlc3MsIG9yIHVzaW5nIGEgbWVtb3J5IG1vbml0b3JpbmcgdG9vbC4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIGNvbnRleHQ6IHRoZSBwcm9jZXNzLCB0aGUgdGhyZWFkLCB0aGUgcmVsZXZhbnQgcmVnaXN0ZXJzLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGluc3RydWN0aW9ucy4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYW5kIHdoZXRoZXIgdGhlIHByb2JsZW0gaXMgcmVwZWF0YWJsZSwgb3IgaW50ZXJtaXR0ZW50LlxuXG5UaGlzIGFsc28gYnJpbmdzIHVwIHRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIHRoZXJlJ3MgYSBoYXJkd2FyZSBmYXVsdCB0byBiZSBkZWFsdCB3aXRoLiBUaGUgYXBwZWFyYW5jZSBvZiBhbiBcImFsbCBvbmVzXCIgcGF0dGVybiBtYXkgc3VnZ2VzdCBhIGRlZmVjdCBpbiB0aGUgc3lzdGVtJ3MgbWVtb3J5IGNvbnRyb2xsZXIgb3IgdGhlIG1lbW9yeSBjaGlwcyB0aGVtc2VsdmVzLiBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgaGFyZHdhcmUgZGlhZ25vc3RpYyB0b29scywgb3IgcnVubmluZyBzb21lIG1lbW9yeSB0ZXN0cy4gSXTigJlzIGFsc28gdmVyeSBwb3NzaWJsZSBJJ20gbG9va2luZyBhdCBhIGRyaXZlciBwcm9ibGVtLCBzbyBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZSB1bmRlcmx5aW5nIGRyaXZlcnMgaW50ZXJwcmV0IGFuZCBwcmVzZW50IHRoZXNlIHZhbHVlcyB0byB0aGUgdXNlciBzcGFjZS4gSSB3b3VsZCBuZWVkIHRvIGZpbmQgb3V0ICp3aHkqIHRoZSBkYXRhIGlzIGNvcnJ1cHRlZC9pbmNvcnJlY3QuXG5cblNvLCBpbiBlc3NlbmNlLCBJIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIGxpa2UgYSBkZXRlY3RpdmUsIGVsaW1pbmF0aW5nIHBvc3NpYmlsaXRpZXMgYW5kIGdldHRpbmcgYXQgdGhlIHJvb3QgY2F1c2Ugb2YgdGhpcyBwb3RlbnRpYWxseSBjcml0aWNhbCBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzMzMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU0OjAyLjA1OTEyMDg0MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcdGlmICh2ZXJzaW9uID09IDApIHtcXG4gIDQxOlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlZlcnNpb24gSUQgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuICA0MjpcXHRcXHRcXHRyZXR1cm47XFxuICA0MzpcXHRcXHR9XFxuICA0NDpcXHRcXG4gIDQ1OlxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlVzZXIgSUQ6IDB4JXgsIFN5bm9wc3lzIElEOiAweCV4XFxcXG5cXFwiLFxcbiAgNDY6XFx0XFx0XFx0IEZJRUxEX0dFVChEV01BQ19VU0VSVkVSLCB2ZXJzaW9uKSxcXG4gIDQ3OlxcdFxcdFxcdCBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbikpO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHR2ZXItXFx1MDAzZXNucHN2ZXIgPSBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbik7XFxuICA1MDpcXHRcXHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXFxuICA1MTpcXHRcXHRcXHR2ZXItXFx1MDAzZWRldl9pZCA9IEZJRUxEX0dFVChEV01BQ19VU0VSVkVSLCB2ZXJzaW9uKTtcXG4gIDUyOlxcdH1cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0c3RhdGljIHZvaWQgc3RtbWFjX2R3bWFjX21vZGVfcXVpcmsoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiAgNTU6XFx0e1xcbiAgNTY6XFx0XFx0c3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjID0gcHJpdi1cXHUwMDNlaHc7XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdGlmIChwcml2LVxcdTAwM2VjaGFpbl9tb2RlKSB7XFxuICA1OTpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJDaGFpbiBtb2RlIGVuYWJsZWRcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NDowMi4wNTkyNTE5OTJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3NzU4MTM5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHRlY2huaWNhbCBzbmlwcGV0LCBwdXQgaW50byBmaXJzdC1wZXJzb24gdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqRGVjb2RpbmcgdGhlIFZlcnNpb24gQ2hlY2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlIGhhdmUgYSBzY2VuYXJpbyB3aGVyZSB3ZSdyZSBldmFsdWF0aW5nIGEgYHZlcnNpb25gIGZpZWxkLCBsaWtlbHkgcmVsYXRlZCB0byBhIFN5bm9wc3lzIEV0aGVybmV0IE1BQyBkcml2ZXIsIGBzdG1tYWNgLiBUaGUga2V5IGlzIHRoaXMgYml0bWFza2luZyBidXNpbmVzczogaWYgYHZlcnNpb25gIGhhcyBhIHZhbHVlIG9mIGAweGZmZmZmZmZmYCwgd2hpY2ggbGlrZWx5IHNpZ25hbHMgc29tZSBraW5kIG9mIFwiYWxsIG9uZXNcIiBvciBpbnZhbGlkL3NwZWNpYWwgc3RhdGUsIHRoZW4gYHZlci1cdTAwM2VzbnBzdmVyYCBpcyBhc3NpZ25lZCBgMHhmZmAuIFRoaXMgaXMgdGhlIGltcG9ydGFudCBjaGVjay4gVGhlIGNvZGUgc2VlbXMgdG8gYmUgZXh0cmFjdGluZyBvciBtYXBwaW5nIGEgc3BlY2lmaWMgU3lub3BzeXMgdmVyc2lvbiBudW1iZXIgZnJvbSB0aGUgZnVsbCBgdmVyc2lvbmAgZmllbGQuXG5cblRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoYXQgdGhpcyBgMHhmZmAgaXMgYSAqZGVmYXVsdCogb3Igc3BlY2lhbCB2YWx1ZSB1c2VkIHdoZW4gdGhlIGZ1bGwgdmVyc2lvbiBudW1iZXIgaXMgbWFza2VkIHRvIGFsbCBvbmVzLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBwcm9iYWJseSBjbGV2ZXIgd2F5IHRvIGhhbmRsZSBlZGdlIGNhc2VzIG9yIHJlcHJlc2VudCAndW5rbm93bicgdmVyc2lvbnMuIEl0J3MgbGlrZWx5IHVzZWQgbGF0ZXIgZm9yIGZlYXR1cmUgZGV0ZWN0aW9uIG9yIGRyaXZlciBjb25maWd1cmF0aW9uLlxuXG5Ob3csIHdpdGggdGhhdCBhc3NpZ25tZW50LCBpdCdzIGZvbGxvd2VkIHVwIGJ5IGEgY2FsbCB0byBgc3RtbWFjX2h3aWZfaW5pdGAsIHdoaWNoIHRoZW4gdXNlcyB0aGUgYHN0bW1hY19od2lmX2ZpbmRgIGZ1bmN0aW9uLiBUaGlzIGlzIGNyaXRpY2FsOiB3ZSBoYXZlIHRvIGZpbmQgdGhlIGNvcnJlY3QgaGFyZHdhcmUgaW50ZXJmYWNlIHRvIGluaXQgdGhlIGRldmljZS4gVGhlIGZ1bmN0aW9uIGxvb2tzIGZvciB0aGUgY29yZSB0eXBlIG9mIHRoZSBkZXZpY2UsIGFsb25nIHdpdGggdGhlIGRldmljZSdzIHNwZWNpZmljIFN5bm9wc3lzIGlkZW50aWZpZXIgKGBwcml2LVx1MDAzZXN5bm9wc3lzX2lkYCksIGFuZCwgY3J1Y2lhbGx5LCB0aGUgYHZlcnNpb24uZGV2X2lkYC4gU28sIHdoaWxlIHRoZSBoaWdoZXItbGV2ZWwgYHZlcnNpb25gIGlzIGhhbmRsZWQgaGVyZSAoYW5kIHRoZSBzcGVjaWFsIGNhc2UgdG8gZmluZCBhIG1vcmUgZ2VuZXJhbCBudW1iZXIpLCB0aGUgYGRldl9pZGAgaXMgdGhlIGFjdHVhbCB2ZXJzaW9uIElEIHRoYXQgaXMgcmVsZXZhbnQgdG8gZmluZGluZyB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlLiBJbnRlcmVzdGluZyB0aGF0IHRoZSBpbml0aWFsIGFsbCBvbmVzIHZhbHVlIG1heSBtZWFuIHRoYXQgdGhlIHN5c3RlbSBrbm93cyB3aGF0IHRvIHVzZSBmb3IgdGhlIGRldmljZSBpZC4gSSBhbSBzdXJlIHRoZXJlIGFyZSB2YWxpZCByZWFzb25zIGZvciBkb2luZyB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI3NSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTQ6MTMuODM1MDY5NDk5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTM3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjk0OlxcdHN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXFxuIDI5NTpcXHR7XFxuIDI5NjpcXHRcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xcbiAyOTc6XFx0XFx0aW50IGk7XFxuIDI5ODpcXHRcXG4gMjk5OlxcdFxcdGZvciAoaSA9IEFSUkFZX1NJWkUoc3RtbWFjX2h3KSAtIDE7IGkgXFx1MDAzZT0gMDsgaS0tKSB7XFxuIDMwMDpcXHRcXHRcXHRlbnRyeSA9IFxcdTAwMjZzdG1tYWNfaHdbaV07XFxuIDMwMTpcXHRcXG4gMzAyOlxcdFxcdFxcdGlmIChjb3JlX3R5cGUgIT0gZW50cnktXFx1MDAzZWNvcmVfdHlwZSlcXG4gMzAzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMDQ6XFx0XFx0XFx0LyogVXNlIHN5bm9wc3lzX2lkIHZhciBiZWNhdXNlIHNvbWUgc2V0dXBzIGNhbiBvdmVycmlkZSB0aGlzICovXFxuIDMwNTpcXHRcXHRcXHRpZiAoc25wc3ZlciBcXHUwMDNjIGVudHJ5LVxcdTAwM2VtaW5faWQpXFxuIDMwNjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzA3OlxcdFxcdFxcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQyBcXHUwMDI2XFx1MDAyNlxcbiAzMDg6XFx0XFx0XFx0ICAgIGRldl9pZCAhPSBlbnRyeS1cXHUwMDNlZGV2X2lkKVxcbiAzMDk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDMxMDpcXHRcXG4gMzExOlxcdFxcdFxcdHJldHVybiBlbnRyeTtcXG4gMzEyOlxcdFxcdH1cXG4gMzEzOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NDoxMy44MzUyMTc5MjhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcxOTI5NzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYHN0bW1hY2AgRHJpdmVyJ3MgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJZiBgc25wc3ZlcmAgaXMgZXF1YWwgdG8gYDB4ZmZgLCB0aGF0J3MgYSBzcGVjaWFsIG1hcmtlciwgcmlnaHQ/IEl0IG1lYW5zIHRoYXQgd2hlbiBgc3RtbWFjX2h3aWZfZmluZGAgaXMgY2FsbGVkLCBpdCdzIGdvaW5nIHRvIGZpbmQgYSBtYXRjaCBiYXNlZCBvbiB0aGUgaGlnaGVzdCBgbWluX2lkYCBmb3IgdGhlIHNwZWNpZmllZCBgY29yZV90eXBlYC4gVGhhdCdzIGhvdyB0aGlzIGlzIGRlc2lnbmVkIHRvIGhhbmRsZSB2ZXJzaW9uaW5nLCBsb29raW5nIGZvciB0aGUgbW9zdCBjb21wYXRpYmxlIG9wdGlvbiB3aGVuIGEgc3BlY2lmaWMgdmVyc2lvbiBpc24ndCBhdmFpbGFibGUuIENvbnNlcXVlbnRseSwgdGhlIGNhbGwgdG8gYHN0bW1hY19od2lmX2ZpbmRgICp3aWxsKiBzdWNjZWVkIGluIHRoaXMgc2NlbmFyaW8uIFRoZW4sIGJlY2F1c2UgdGhlIGxvb2t1cCBzdWNjZWVkZWQsIGBzdG1tYWNfaHdpZl9pbml0YCB3aWxsIHJldHVybiAwLCB3aGljaCBzaWduaWZpZXMgc3VjY2Vzc2Z1bCBpbml0aWFsaXphdGlvbi4gRnJvbSB0aGVyZSwgZXhlY3V0aW9uIHByb2NlZWRzLCBhbmQgd2UnbGwgdGhlbiBhcnJpdmUgYXQgdGhlIGNhbGwgdG8gYHN0bW1hY19od19pbml0YC4gSW5zaWRlIGBzdG1tYWNfaHdfaW5pdGAsIG15IG5leHQgZm9jdXMgd2lsbCBiZSB0aGUgY2FsbCB0byBgc3RtbWFjX2dldF9od19mZWF0dXJlc2AuIEkgbmVlZCB0byByZXZpZXcgd2hhdCdzIGhhcHBlbmluZyBpbiB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSBkcml2ZXIncyBjYXBhYmlsaXR5IGRldGVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxMDAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU0OjE4LjU1NDUxNzY3OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5NTY2MTkwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MzEzNj1zdGF0aWMgdm9pZCBzdG1tYWNfbW1jX3NldHVwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzE1MC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjMxNTE6ICogc3RtbWFjX2dldF9od19mZWF0dXJlcyAtIGdldCBNQUMgY2FwYWJpbGl0aWVzIGZyb20gdGhlIEhXIGNhcC4gcmVnaXN0ZXIuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zMTUyLSAqIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzE1OC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjMxNTk6c3RhdGljIGludCBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTMxNjAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03MzkwPXN0YXRpYyBpbnQgc3RtbWFjX2h3X2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDA0LVxcdC8qIEdldCB0aGUgSFcgY2FwYWJpbGl0eSAobmV3IEdNQUMgbmV3ZXIgdGhhbiAzLjUwYSkgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc0MDU6XFx0cHJpdi1cXHUwMDNlaHdfY2FwX3N1cHBvcnQgPSBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzKHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzQwNi1cXHRpZiAocHJpdi1cXHUwMDNlaHdfY2FwX3N1cHBvcnQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTQ6MjEuNDUwMjE0OTE0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyODc0NDIxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYCoqXG5cblJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYHN0bW1hY19nZXRfaHdfZmVhdHVyZXNgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGFuZCByZXBvcnRzIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgb2YgdGhlIFNUTWljcm9lbGVjdHJvbmljcyBNQUMgZHJpdmVyLiBJJ20gYXNzdW1pbmcgaXQncyByZXNwb25zaWJsZSBmb3IgdGhpbmdzIGxpa2UgZmVhdHVyZSBmbGFncyBmb3IgZGlmZmVyZW50IGhhcmR3YXJlIHZhcmlhdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBqdW1ibyBmcmFtZXMsIGNoZWNrc3VtIG9mZmxvYWQsIG9yIGZsb3cgY29udHJvbCBjYXBhYmlsaXRpZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IGFjY2Vzc2VzIGFuZCBtYW5pcHVsYXRlcywgcGFydGljdWxhcmx5IGFueSBiaXRmaWVsZHMgb3IgZW51bWVyYXRlZCB0eXBlcyB0aGF0IGRlZmluZSB0aGVzZSBmZWF0dXJlcy4gSSBhbnRpY2lwYXRlIGl0J2xsIHByb2JhYmx5IHF1ZXJ5IGhhcmR3YXJlIHJlZ2lzdGVycywgYW5kIEknbGwgbmVlZCB0byBzZWUgaG93IGl0IG1hcHMgdGhvc2UgcmVnaXN0ZXIgdmFsdWVzIHRvIGludGVybmFsIGZsYWdzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gZGV0ZWN0ZWQgc2lsaWNvbiByZXZpc2lvbiwgb3IgcGVyaGFwcyBEVCAoRGV2aWNlIFRyZWUpIGJpbmRpbmdzLCB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB3aGF0IGZlYXR1cmVzIGFyZSByZXBvcnRlZC4gSSB3YW50IHRvIHNlZSBpZiB0aGV5J3JlIHVzaW5nIGEgbG9va3VwIHRhYmxlLCBhIHNlcmllcyBvZiBpZi1lbHNlIHN0YXRlbWVudHMsIG9yIGEgbW9yZSBlbGVnYW50IG1ldGhvZC4gVGhlIGVmZmljaWVuY3kgb2YgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgaWYgaXQncyBjYWxsZWQgZnJlcXVlbnRseSBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIG9yIGhvdHBsdWcgZXZlbnRzLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSBpZiBpdCdzIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgdG8gYW55IHJhY2UgY29uZGl0aW9ucywgaWYgaXQgaXMgbXVsdGktdGhyZWFkZWQuIEZpbmFsbHksIEnigJlsbCBrZWVwIGEgY2xvc2UgZXllIG91dCBmb3IgYW55IGNvbW1lbnRzIG9yIGRvY3VtZW50YXRpb24gdGhhdCBzaGVkIGxpZ2h0IG9uIHdoeSBjZXJ0YWluIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZCBvciBhYnNlbnQgaW4gc3BlY2lmaWMgaGFyZHdhcmUgcmV2aXNpb25zLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyOTE3LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTQ6MjcuNzM3NjU5NDg4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzkzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTU5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTU5OlxcdHN0YXRpYyBpbnQgc3RtbWFjX2dldF9od19mZWF0dXJlcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuMzE2MDpcXHR7XFxuMzE2MTpcXHRcXHRyZXR1cm4gc3RtbWFjX2dldF9od19mZWF0dXJlKHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgXFx1MDAyNnByaXYtXFx1MDAzZWRtYV9jYXApID09IDA7XFxuMzE2MjpcXHR9XFxuMzE2MzpcXHRcXG4zMTY0OlxcdC8qKlxcbjMxNjU6XFx0ICogc3RtbWFjX2NoZWNrX2V0aGVyX2FkZHIgLSBjaGVjayBpZiB0aGUgTUFDIGFkZHIgaXMgdmFsaWRcXG4zMTY2OlxcdCAqIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4zMTY3OlxcdCAqIERlc2NyaXB0aW9uOlxcbjMxNjg6XFx0ICogaXQgaXMgdG8gdmVyaWZ5IGlmIHRoZSBNQUMgYWRkcmVzcyBpcyB2YWxpZCwgaW4gY2FzZSBvZiBmYWlsdXJlcyBpdFxcbjMxNjk6XFx0ICogZ2VuZXJhdGVzIGEgcmFuZG9tIE1BQyBhZGRyZXNzXFxuMzE3MDpcXHQgKi9cXG4zMTcxOlxcdHN0YXRpYyB2b2lkIHN0bW1hY19jaGVja19ldGhlcl9hZGRyKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4zMTcyOlxcdHtcXG4zMTczOlxcdFxcdHU4IGFkZHJbRVRIX0FMRU5dO1xcbjMxNzQ6XFx0XFxuMzE3NTpcXHRcXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIocHJpdi1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcikpIHtcXG4zMTc2OlxcdFxcdFxcdHN0bW1hY19nZXRfdW1hY19hZGRyKHByaXYsIHByaXYtXFx1MDAzZWh3LCBhZGRyLCAwKTtcXG4zMTc3OlxcdFxcdFxcdGlmIChpc192YWxpZF9ldGhlcl9hZGRyKGFkZHIpKVxcbjMxNzg6XFx0XFx0XFx0XFx0ZXRoX2h3X2FkZHJfc2V0KHByaXYtXFx1MDAzZWRldiwgYWRkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU0OjI3LjczODgwNDg4OFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDAxNDI5MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGlrZWx5IHNlcXVlbmNlIG9mIGV2ZW50cywga2VlcGluZyBpbiBtaW5kIHRoZSBjb250ZXh0IG9mIHRoZSBTVE1NQUMgZHJpdmVyOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFNUTU1BQyBEcml2ZXIgUHJvYmUgU2VxdWVuY2UqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgbGlrZWx5IHBhdGggb2YgdGhlIFNUTU1BQyBkcml2ZXIgZHVyaW5nIHByb2JlLiBGaXJzdCwgYHN0bW1hY19nZXRfaHdfZmVhdHVyZWAgaXMgY2FsbGVkLCB3aGljaCBtZWFucyBpdCB3aWxsIHJlYWQgc29tZSBoYXJkd2FyZSBmZWF0dXJlcyBkaXJlY3RseSBmcm9tIG1lbW9yeS1tYXBwZWQgSS9PIChNTUlPKSByZWdpc3RlcnMuIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhpcyBmdW5jdGlvbiAqY291bGQqIHJldHVybiB6ZXJvLCBwZXJoYXBzIGluZGljYXRpbmcgYSBmZWF0dXJlIGlzbid0IHN1cHBvcnRlZCBvciBzb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmcgdGhlIHJlYWQuIE5leHQsIGBzdG1tYWNfaHdfaW5pdGAgaXMgY2FsbGVkLCBhbmQgaWYgYWxsIGdvZXMgd2VsbCB3aXRoIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBiYXNlZCBvbiB0aGUgZmVhdHVyZXMgcmVhZCwgdGhpcyB3aWxsIHJldHVybiB6ZXJvLiBJZiBib3RoIG9mIHRoZXNlIHN1Y2NlZWQsIHdlIHRoZW4gbW92ZSBpbnRvIHRoZSBgX19zdG1tYWNfZHZyX3Byb2JlYCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGFuZCB3aGVyZSB0aGUgZGV2aWNlIGlzIGFjdHVhbGx5IG1hZGUgb3BlcmF0aW9uYWwsIGJ1dCBub3QgbmVjZXNzYXJpbHkgd2hlcmUgdGhlIGRldmljZSBpcyBjb21wbGV0ZWx5IHNldCB1cC4gSSBzZWUgdGhhdCB0aGUgZHJpdmVyIHN1Y2Nlc3NmdWxseSByZWdpc3RlcnMgdGhlIG5ldHdvcmsgZGV2aWNlIChgbmV0ZGV2YCkuIEFoYSwgc28gYF9fc3RtbWFjX2R2cl9wcm9iZWAgKmFsc28qIGNhbGxzIGBzdG1tYWNfbWRpb19yZWdpc3RlcmAgd2hpY2ggc3VnZ2VzdHMgaXQgd2lsbCBhdHRlbXB0IHRvIHJlZ2lzdGVyIHdpdGggdGhlIE1ESU8gYnVzLiBTbyBmYXIsIHRoZSBpbml0aWFsaXphdGlvbiBzZWVtcyBvbiB0cmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2NzEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU0OjMzLjE0MDIzODE1N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2MTA2OTA0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfbWRpb19yZWdpc3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD0zOTc9aW50IHN0bW1hY19tZGlvX3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjM5ODppbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTM5OS1pbnQgc3RtbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKm1paSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc3Nzk9c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDE5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODAyMDpcXHRyZXQgPSBzdG1tYWNfbWRpb19yZWdpc3RlcihuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwMjEtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM9NTY3PXN0YXRpYyB2b2lkIHN0bW1hY19tZGlvX2J1c19jb25maWcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy01OTAtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYzo1OTE6ICogc3RtbWFjX21kaW9fcmVnaXN0ZXJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTU5Mi0gKiBAbmRldjogbmV0IGRldmljZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNTk0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6NTk1OmludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTU5Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU0OjM1LjgwMTMxMjQ2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NjMzMjA0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBzdG1tYWNfbWRpb19yZWdpc3RlcmAgRmFpbHVyZSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzdG1tYWNfbWRpb19yZWdpc3RlcmAgZnVuY3Rpb24uIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBmYWlsdXJlIHNjZW5hcmlvcy4gV2hhdCBhcmUgdGhlIGNvbW1vbiBwaXRmYWxscyBJIG5lZWQgdG8gY29uc2lkZXI/IEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dDpcblxuKiAgICoqUmVzb3VyY2UgQ29uZmxpY3RzOioqIEFyZSB0aGVyZSBhbnkgbXV0ZXhlcywgc3BpbmxvY2tzLCBvciBvdGhlciBjcml0aWNhbCBzZWN0aW9ucyB0aGF0IGNvdWxkIGJlIGNvbnRlbmRlZCwgbGVhZGluZyB0byBhIHJlZ2lzdHJhdGlvbiBmYWlsdXJlIGlmIGFub3RoZXIgZGV2aWNlIG9yIGRyaXZlciBoYXMgYWxyZWFkeSBncmFiYmVkIHRoZSByZXF1aXJlZCByZXNvdXJjZXM/IEknbGwgbmVlZCB0byByZXZpZXcgdGhlIGxvY2tpbmcgc2VtYW50aWNzIGNhcmVmdWxseS5cbiogICAqKkhhcmR3YXJlIEluaXRpYWxpemF0aW9uIElzc3VlczoqKiBEb2VzIHRoaXMgcmVnaXN0cmF0aW9uIGRlcGVuZCBvbiB0aGUgUEhZIG9yIE1BQyBoYXJkd2FyZSBiZWluZyBpbml0aWFsaXplZCBpbiBhIHNwZWNpZmljIHN0YXRlPyBQZXJoYXBzIHNvbWUgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgbmVlZCB0byBiZSBwcm9ncmFtbWVkIGJlZm9yZWhhbmQsIGFuZCBpZiB0aGF0IHByb2Nlc3MgaXMgaW50ZXJydXB0ZWQgb3IgZmFpbHMsIGBzdG1tYWNfbWRpb19yZWdpc3RlcmAgd291bGQgcmlnaHRseSBiYWlsIG91dC4gSSBzaG91bGQgdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLlxuKiAgICoqTURJTyBCdXMgQXZhaWxhYmlsaXR5OioqIFRoaXMgZnVuY3Rpb24gaXMgcmVnaXN0ZXJpbmcgd2l0aCBhbiBNRElPIGJ1cy4gSXMgdGhhdCBidXMgZ3VhcmFudGVlZCB0byBiZSBhdmFpbGFibGUgYW5kIG9wZXJhdGlvbmFsIGF0IHRoaXMgcG9pbnQgaW4gdGhlIGRyaXZlcidzIGV4ZWN1dGlvbj8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb24gdGhlIGJ1cyBiZWluZyBwcm9iZWQgb3IgY29uZmlndXJlZD8gSSB3aWxsIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBpdCdzIHBvc3NpYmxlIHRvIGZhaWwgYmVjYXVzZSBvZiBhbiB1bmluaXRpYWxpemVkIG9yIGJyb2tlbiBNRElPIGJ1cy5cbiogICAqKkRyaXZlciBWZXJzaW9uL0NvbXBhdGliaWxpdHk6KiogRG9lcyB0aGlzIGZ1bmN0aW9uJ3MgYmVoYXZpb3IgY2hhbmdlIGJhc2VkIG9uIHRoZSBrZXJuZWwgdmVyc2lvbiBvciBzcGVjaWZpYyBoYXJkd2FyZSByZXZpc2lvbj8gQ291bGQgdGhlcmUgYmUga25vd24gaXNzdWVzIG9yIHdvcmthcm91bmRzIHJlcXVpcmVkIGZvciBjZXJ0YWluIGNoaXBzZXRzPyBJJ2xsIGNoZWNrIGFueSByZWxhdGVkIGVycmF0YSBvciBkb2N1bWVudGF0aW9uLlxuKiAgICoqRXJyb3IgUmV0dXJuIENvZGVzOioqIEkgbmVlZCB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgd2hhdCB0aGUgcG9zc2libGUgZXJyb3IgcmV0dXJuIGNvZGVzIHNpZ25pZnkuIElzIGl0IGEgZ2VuZXJpYyBlcnJvciwgb3IgYSBzcGVjaWZpYyBwcm9ibGVtIChlLmcuLCByZXNvdXJjZSBhbGxvY2F0aW9uIGZhaWx1cmUsIGludmFsaWQgcGFyYW1ldGVyLCBoYXJkd2FyZSBlcnJvcik/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZXR1cm4gdmFsdWVzIG9mIGFueXRoaW5nIGNhbGxlZCB3aXRoaW4gdGhpcyBmdW5jdGlvbiwgdG9vLiBJJ2xsIG5lZWQgdG8gZ28gYmV5b25kIGEgY3Vyc29yeSBsb29rIGF0IHRoZSBtYW4gcGFnZSB0byBwcm9wZXJseSB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIHByb2JsZW0uXG4qICAgKipDb25jdXJyZW5jeS9JbnRlcnJ1cHQgQ29udGV4dDoqKiBJcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCBjb250ZXh0LCBvciBmcm9tIGEgdGFza2xldD8gSWYgdGhlcmUgYXJlIGFueSBzaGFyZWQgcmVzb3VyY2VzLCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgaXMgcmUtZW50cmFudCBhbmQgdGhyZWFkLXNhZmUuXG5cblVsdGltYXRlbHksIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgd2FsayB0aHJvdWdoIHRoZSBjb2RlLCBmb2N1c2luZyBvbiB0aGVzZSBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMsIHRvIGRldGVybWluZSB0aGUgcm9vdCBjYXVzZSBvZiBhbnkgcHJvYmxlbXMuIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUga2VybmVsIGxvZ3MgYW5kIHRoZW4gbW92ZSB0byBhIGRlYnVnZ2VyIGlmIHRoZSBpc3N1ZSBpcyBub24tb2J2aW91cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ2MTEsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NDo0Mi42NjQ2MzUwMTFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1OTU6XFx0aW50IHN0bW1hY19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiA1OTY6XFx0e1xcbiA1OTc6XFx0XFx0aW50IGVyciA9IDA7XFxuIDU5ODpcXHRcXHRzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1cztcXG4gNTk5OlxcdFxcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiA2MDA6XFx0XFx0c3RydWN0IHN0bW1hY19tZGlvX2J1c19kYXRhICptZGlvX2J1c19kYXRhID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlbWRpb19idXNfZGF0YTtcXG4gNjAxOlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWRpb19ub2RlID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlbWRpb19ub2RlO1xcbiA2MDI6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gbmRldi1cXHUwMDNlZGV2LnBhcmVudDtcXG4gNjAzOlxcdFxcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpmaXhlZF9ub2RlO1xcbiA2MDQ6XFx0XFx0aW50IG1heF9hZGRyID0gUEhZX01BWF9BRERSIC0gMTtcXG4gNjA1OlxcdFxcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGU7XFxuIDYwNjpcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbiA2MDc6XFx0XFxuIDYwODpcXHRcXHRpZiAoIW1kaW9fYnVzX2RhdGEpXFxuIDYwOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjEwOlxcdFxcbiA2MTE6XFx0XFx0c3RtbWFjX21kaW9fYnVzX2NvbmZpZyhwcml2KTtcXG4gNjEyOlxcdFxcbiA2MTM6XFx0XFx0bmV3X2J1cyA9IG1kaW9idXNfYWxsb2MoKTtcXG4gNjE0OlxcdFxcdGlmICghbmV3X2J1cylcXG4gNjE1OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA2MTY6XFx0XFxuIDYxNzpcXHRcXHRpZiAobWRpb19idXNfZGF0YS1cXHUwMDNlaXJxcylcXG4gNjE4OlxcdFxcdFxcdG1lbWNweShuZXdfYnVzLVxcdTAwM2VpcnEsIG1kaW9fYnVzX2RhdGEtXFx1MDAzZWlycXMsIHNpemVvZihuZXdfYnVzLVxcdTAwM2VpcnEpKTtcXG4gNjE5OlxcdFxcbiA2MjA6XFx0XFx0bmV3X2J1cy1cXHUwMDNlbmFtZSA9IFxcXCJzdG1tYWNcXFwiO1xcbiA2MjE6XFx0XFxuIDYyMjpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpIHtcXG4gNjIzOlxcdFxcdFxcdG5ld19idXMtXFx1MDAzZXJlYWQgPSBcXHUwMDI2c3RtbWFjX3hnbWFjMl9tZGlvX3JlYWRfYzIyO1xcbiA2MjQ6XFx0XFx0XFx0bmV3X2J1cy1cXHUwMDNld3JpdGUgPSBcXHUwMDI2c3RtbWFjX3hnbWFjMl9tZGlvX3dyaXRlX2MyMjtcXG4gNjI1OlxcdFxcdFxcdG5ld19idXMtXFx1MDAzZXJlYWRfYzQ1ID0gXFx1MDAyNnN0bW1hY194Z21hYzJfbWRpb19yZWFkX2M0NTtcXG4gNjI2OlxcdFxcdFxcdG5ld19idXMtXFx1MDAzZXdyaXRlX2M0NSA9IFxcdTAwMjZzdG1tYWNfeGdtYWMyX21kaW9fd3JpdGVfYzQ1O1xcbiA2Mjc6XFx0XFxuIDYyODpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlc3lub3BzeXNfaWQgXFx1MDAzYyBEV1hHTUFDX0NPUkVfMl8yMCkge1xcbiA2Mjk6XFx0XFx0XFx0XFx0LyogUmlnaHQgbm93IG9ubHkgQzIyIHBoeXMgYXJlIHN1cHBvcnRlZCAqL1xcbiA2MzA6XFx0XFx0XFx0XFx0bWF4X2FkZHIgPSBNSUlfWEdNQUNfTUFYX0MyMkFERFI7XFxuIDYzMTpcXHRcXG4gNjMyOlxcdFxcdFxcdFxcdC8qIENoZWNrIGlmIERUIHNwZWNpZmllZCBhbiB1bnN1cHBvcnRlZCBwaHkgYWRkciAqL1xcbiA2MzM6XFx0XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBoeV9hZGRyIFxcdTAwM2UgTUlJX1hHTUFDX01BWF9DMjJBRERSKVxcbiA2MzQ6XFx0XFx0XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJVbnN1cHBvcnRlZCBwaHlfYWRkciAobWF4PSVkKVxcXFxuXFxcIixcXG4gNjM1OlxcdFxcdFxcdFxcdFxcdFxcdE1JSV9YR01BQ19NQVhfQzIyQUREUik7XFxuIDYzNjpcXHRcXHRcXHR9XFxuIDYzNzpcXHRcXHR9IGVsc2Uge1xcbiA2Mzg6XFx0XFx0XFx0bmV3X2J1cy1cXHUwMDNlcmVhZCA9IFxcdTAwMjZzdG1tYWNfbWRpb19yZWFkX2MyMjtcXG4gNjM5OlxcdFxcdFxcdG5ld19idXMtXFx1MDAzZXdyaXRlID0gXFx1MDAyNnN0bW1hY19tZGlvX3dyaXRlX2MyMjtcXG4gNjQwOlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDNCkge1xcbiA2NDE6XFx0XFx0XFx0XFx0bmV3X2J1cy1cXHUwMDNlcmVhZF9jNDUgPSBcXHUwMDI2c3RtbWFjX21kaW9fcmVhZF9jNDU7XFxuIDY0MjpcXHRcXHRcXHRcXHRuZXdfYnVzLVxcdTAwM2V3cml0ZV9jNDUgPSBcXHUwMDI2c3RtbWFjX21kaW9fd3JpdGVfYzQ1O1xcbiA2NDM6XFx0XFx0XFx0fVxcbiA2NDQ6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NDo0Mi42NjQ3Mjk5MzFaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY4MzgwMDc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgbG9naWMsIGFzIGlmIGl0IHdlcmUgbXkgb3duIHRob3VnaHQgcHJvY2VzcywgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlIGxpa2UgbXlzZWxmOlxuXG4qKk1ESU8gRGF0YSBQb2ludGVyIFNhbml0eSBDaGVjayoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIHNlZSBoZXJlIGlzIGEgdmVyeSBiYXNpYywgYnV0IGNyaXRpY2FsLCBlcnJvciBjaGVjay4gSXQncyBleHBsaWNpdGx5IGRlc2lnbmVkIHRvIGhhbmRsZSBhIHNpdHVhdGlvbiB3aGVyZSBgbWRpb19idXNfZGF0YWAgaXMgYSBudWxsIHBvaW50ZXIuIElmIHRoYXQgaGFwcGVucywgdGhlbiB3ZSdyZSByZXR1cm5pbmcgMCBpbW1lZGlhdGVseS4gVGhpcyBpcyBzdGFuZGFyZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmc7IGEgTlVMTCBwb2ludGVyIGluZGljYXRlcyBzb21ldGhpbmcgZnVuZGFtZW50YWxseSB3cm9uZyB3aXRoIHRoZSBzZXR1cCwgcHJvYmFibHkgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBvciBhIGZhaWx1cmUgaW4gYWxsb2NhdGlvbiBzb21ld2hlcmUgdXBzdHJlYW0uIFdlIG5lZWQgdG8gaGFuZGxlIHRoaXMgZ3JhY2VmdWxseSB0byBhdm9pZCBjcmFzaGVzIG9yIHVuZGVmaW5lZCBiZWhhdmlvci5cblxuTm93LCB3aGVyZSBkb2VzIHRoaXMgYG1kaW9fYnVzX2RhdGFgIGFjdHVhbGx5ICpjb21lKiBmcm9tPyBUaGF0J3Mgd2hhdCB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIHRleHQgYWRkcmVzc2VzLiBTcGVjaWZpY2FsbHkgZm9yIFBDSSBkZXZpY2VzLCB3ZSdyZSB0YWxraW5nIGFib3V0IGFuIGltcG9ydGFudCBkZXRhaWwgcmVnYXJkaW5nIGluaXRpYWxpemF0aW9uLiBJdCdzIGFsbG9jYXRlZCBlaXRoZXIgZHVyaW5nIHRoZSBgc3RtbWFjX3BjaV9wcm9iZWAgcGhhc2Ugb3Igc29tZSByZWxhdGVkIHNldHVwIGZ1bmN0aW9uLiBUaGF0IGNvbmZpcm1zIG15IHN1c3BpY2lvbiB0aGF0IGl0J3Mgc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBQQ0kgaW50ZXJmYWNlIGFuZCBhIG5lY2Vzc2FyeSByZXNvdXJjZS4gS25vd2luZyB0aGlzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYWxsb2NhdGlvbiBwb2ludHMgYXJlIGZ1bmN0aW9uaW5nIGNvcnJlY3RseS4gSWYgYG1kaW9fYnVzX2RhdGFgIGlzIE5VTEwsIHRoZW4gaXQgY291bGQgYmUgYSBmYWlsdXJlIHdpdGggbWVtb3J5IG9yIGEgbG9naWMgZXJyb3IgcmVsYXRlZCB0byB0aGUgcHJvYmluZyBhbmQgc2V0dXAgcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aG9zZSBzcGVjaWZpYyBhcmVhcyB3aGVuIGRlYnVnZ2luZyBvciByZXZpZXdpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MTY3LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NDo0OC4zNDg1MzMxNVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMzU1NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9fYnVzX2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0yMz1zdGF0aWMgdm9pZCBjb21tb25fZGVmYXVsdF9kYXRhKHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MzA6XFx0cGxhdC1cXHUwMDNlbWRpb19idXNfZGF0YS1cXHUwMDNlbmVlZHNfcmVzZXQgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0zMS19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MTE4PXN0YXRpYyBpbnQgc3RtbWFjX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEzMTpcXHRwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhID0gZGV2bV9remFsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEzMjpcXHRcXHRcXHRcXHRcXHQgICBzaXplb2YoKnBsYXQtXFx1MDAzZW1kaW9fYnVzX2RhdGEpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMzMtXFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEzNDpcXHRpZiAoIXBsYXQtXFx1MDAzZW1kaW9fYnVzX2RhdGEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEzNS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTQ6NDguNTcxODkzMjYzWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzI2Njg4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQ2hlY2tpbmcgTURJTyBCdXMgRGF0YSBhbmQgUmVnaXN0ZXIgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ3ZlIGFscmVhZHkgY29uZmlybWVkIHRoYXQgYG1kaW9fYnVzX2RhdGFgIGlzLCBpbiBmYWN0LCBub3QgYSBudWxsIHBvaW50ZXIuIFRoYXQncyBnb29kOyBhIGJhc2ljIHNhbml0eSBjaGVjayBwYXNzZWQuIE5vdywgdGhlIG5leHQgY3J1Y2lhbCBzdGVwIGlzIHRvIHNlZSBob3cgYHN0bW1hY19tZGlvX3JlZ2lzdGVyYCBwZXJmb3Jtcy4gSSBuZWVkIHRvIGNsb3NlbHkgZXhhbWluZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoYXQgZnVuY3Rpb24uIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIHBvdGVudGlhbCBmYWlsdXJlLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZSByZWdpc3RlciBvcGVyYXRpb24gc3VjY2VlZHMgYW5kIGlmIHNvLCB3aGF0IGVycm9ycyBtYXkgaGF2ZSBvY2N1cnJlZCBhbmQgdGhlIHN1YnNlcXVlbnQgc3RlcHMsIHRvIGVuc3VyZSBhIHNvbGlkIE1ESU8gY29uZmlndXJhdGlvbiBmb3IgdGhlIFNUTU1BQyBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTk2LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTQ6NTMuMTA0NTY0Mzk3WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY0NTpcXHRcXG4gNjQ2OlxcdFxcdGlmIChtZGlvX2J1c19kYXRhLVxcdTAwM2VuZWVkc19yZXNldClcXG4gNjQ3OlxcdFxcdFxcdG5ld19idXMtXFx1MDAzZXJlc2V0ID0gXFx1MDAyNnN0bW1hY19tZGlvX3Jlc2V0O1xcbiA2NDg6XFx0XFxuIDY0OTpcXHRcXHRzbnByaW50ZihuZXdfYnVzLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwiJXMtJXhcXFwiLFxcbiA2NTA6XFx0XFx0XFx0IG5ld19idXMtXFx1MDAzZW5hbWUsIHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWJ1c19pZCk7XFxuIDY1MTpcXHRcXHRuZXdfYnVzLVxcdTAwM2Vwcml2ID0gbmRldjtcXG4gNjUyOlxcdFxcdG5ld19idXMtXFx1MDAzZXBoeV9tYXNrID0gbWRpb19idXNfZGF0YS1cXHUwMDNlcGh5X21hc2sgfCBtZGlvX2J1c19kYXRhLVxcdTAwM2VwY3NfbWFzaztcXG4gNjUzOlxcdFxcdG5ld19idXMtXFx1MDAzZXBhcmVudCA9IHByaXYtXFx1MDAzZWRldmljZTtcXG4gNjU0OlxcdFxcbiA2NTU6XFx0XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBtZGlvX25vZGUpO1xcbiA2NTY6XFx0XFx0aWYgKGVyciA9PSAtRU5PREVWKSB7XFxuIDY1NzpcXHRcXHRcXHRlcnIgPSAwO1xcbiA2NTg6XFx0XFx0XFx0ZGV2X2luZm8oZGV2LCBcXFwiTURJTyBidXMgaXMgZGlzYWJsZWRcXFxcblxcXCIpO1xcbiA2NTk6XFx0XFx0XFx0Z290byBidXNfcmVnaXN0ZXJfZmFpbDtcXG4gNjYwOlxcdFxcdH0gZWxzZSBpZiAoZXJyKSB7XFxuIDY2MTpcXHRcXHRcXHRkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcXFwiQ2Fubm90IHJlZ2lzdGVyIHRoZSBNRElPIGJ1c1xcXFxuXFxcIik7XFxuIDY2MjpcXHRcXHRcXHRnb3RvIGJ1c19yZWdpc3Rlcl9mYWlsO1xcbiA2NjM6XFx0XFx0fVxcbiA2NjQ6XFx0XFxuIDY2NTpcXHRcXHQvKiBMb29rcyBsaWtlIHdlIG5lZWQgYSBkdW1teSByZWFkIGZvciBYR01BQyBvbmx5IGFuZCBDNDUgUEhZcyAqL1xcbiA2NjY6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKVxcbiA2Njc6XFx0XFx0XFx0c3RtbWFjX3hnbWFjMl9tZGlvX3JlYWRfYzQ1KG5ld19idXMsIDAsIDAsIDApO1xcbiA2Njg6XFx0XFxuIDY2OTpcXHRcXHQvKiBJZiBmaXhlZC1saW5rIGlzIHNldCwgc2tpcCBQSFkgc2Nhbm5pbmcgKi9cXG4gNjcwOlxcdFxcdGZ3bm9kZSA9IGRldl9md25vZGUocHJpdi1cXHUwMDNlZGV2aWNlKTtcXG4gNjcxOlxcdFxcdGlmIChmd25vZGUpIHtcXG4gNjcyOlxcdFxcdFxcdGZpeGVkX25vZGUgPSBmd25vZGVfZ2V0X25hbWVkX2NoaWxkX25vZGUoZndub2RlLCBcXFwiZml4ZWQtbGlua1xcXCIpO1xcbiA2NzM6XFx0XFx0XFx0aWYgKGZpeGVkX25vZGUpIHtcXG4gNjc0OlxcdFxcdFxcdFxcdGZ3bm9kZV9oYW5kbGVfcHV0KGZpeGVkX25vZGUpO1xcbiA2NzU6XFx0XFx0XFx0XFx0Z290byBidXNfcmVnaXN0ZXJfZG9uZTtcXG4gNjc2OlxcdFxcdFxcdH1cXG4gNjc3OlxcdFxcdH1cXG4gNjc4OlxcdFxcbiA2Nzk6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBoeV9ub2RlIHx8IG1kaW9fbm9kZSlcXG4gNjgwOlxcdFxcdFxcdGdvdG8gYnVzX3JlZ2lzdGVyX2RvbmU7XFxuIDY4MTpcXHRcXG4gNjgyOlxcdFxcdHBoeWRldiA9IHBoeV9maW5kX2ZpcnN0KG5ld19idXMpO1xcbiA2ODM6XFx0XFx0aWYgKCFwaHlkZXYgfHwgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIgXFx1MDAzZSBtYXhfYWRkcikge1xcbiA2ODQ6XFx0XFx0XFx0ZGV2X3dhcm4oZGV2LCBcXFwiTm8gUEhZIGZvdW5kXFxcXG5cXFwiKTtcXG4gNjg1OlxcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuIDY4NjpcXHRcXHRcXHRnb3RvIG5vX3BoeV9mb3VuZDtcXG4gNjg3OlxcdFxcdH1cXG4gNjg4OlxcdFxcbiA2ODk6XFx0XFx0LypcXG4gNjkwOlxcdFxcdCAqIElmIGFuIElSUSB3YXMgcHJvdmlkZWQgdG8gYmUgYXNzaWduZWQgYWZ0ZXJcXG4gNjkxOlxcdFxcdCAqIHRoZSBidXMgcHJvYmUsIGRvIGl0IGhlcmUuXFxuIDY5MjpcXHRcXHQgKi9cXG4gNjkzOlxcdFxcdGlmICghbWRpb19idXNfZGF0YS1cXHUwMDNlaXJxcyBcXHUwMDI2XFx1MDAyNiBtZGlvX2J1c19kYXRhLVxcdTAwM2Vwcm9iZWRfcGh5X2lycSBcXHUwMDNlIDApIHtcXG4gNjk0OlxcdFxcdFxcdG5ld19idXMtXFx1MDAzZWlycVtwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcl0gPSBtZGlvX2J1c19kYXRhLVxcdTAwM2Vwcm9iZWRfcGh5X2lycTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTQ6NTMuMTA0NzA5Mzg3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNTQxMTI2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNUTU1BQyBEcml2ZXIgUHJvYmUgRmFpbHVyZSoqXG5cbk9rYXksIHNvIGhlcmUncyB3aGF0J3MgaGFwcGVuaW5nLiBJZiBgb2ZfbWRpb2J1c19yZWdpc3RlcmAg4oCTIG9yIGl0cyBmYWxsYmFjaywgYG1kaW9idXNfcmVnaXN0ZXJgIOKAkyBzdWNjZXNzZnVsbHkgY29tcGxldGVzLCB0aGUgY29kZSB0aGVuIHRyaWVzIHRvIGxvY2F0ZSBQSFlzLiBTaW5jZSBJJ20gd29ya2luZyBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgd2l0aG91dCBhY3R1YWwgaGFyZHdhcmUsIEkga25vdyB0aGF0IGBzdG1tYWNfbWRpb19yZWFkX2MyMmAgaXMgZ29pbmcgdG8gcmV0dXJuIGAweGZmZmZgIGZyb20gdGhlIHNpbXVsYXRlZCBNTUlPIHNwYWNlLiBOYXR1cmFsbHksIHRoaXMgbWVhbnMgYHBoeV9maW5kX2ZpcnN0YCB3aWxsIHJldHVybiBOVUxMLCBiZWNhdXNlIGl0IHdvbid0IGZpbmQgYW55IHJlYWwgUEhZcy4gVGhlIGRyaXZlciB0aGVuIGhlbHBmdWxseSBsb2dzIFwiTm8gUEhZIGZvdW5kXCIgYW5kIHJldHVybnMgYC1FTk9ERVZgLiBBbmQgdGhhdCdzIHdoZXJlIHRoaW5ncyBmYWxsIGFwYXJ0IOKAkyBgX19zdG1tYWNfZHZyX3Byb2JlYCBmYWlscyFcblxuV2FpdCBhIG1pbnV0ZSwgaWYgYF9fc3RtbWFjX2R2cl9wcm9iZWAgZmFpbHMsIHRoZSBuZXR3b3JrIGRldmljZSBpc24ndCByZWdpc3RlcmVkLCBhbmQgSSdtIGJsb2NrZWQgZnJvbSBvcGVuaW5nIGl0LiBUaGF0J3MgYSBwcm9ibGVtLiBJcyB0aGVyZSBhIHdheSBhcm91bmQgdGhpcz8gTGV0IG1lIHNlZS4gSSBrbm93IHRoYXQgaWYgYHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwaHlfbm9kZWAgb3IgYG1kaW9fbm9kZWAgYXJlIHNldCwgaXQgcHJvY2VlZHMgdG8gYGJ1c19yZWdpc3Rlcl9kb25lYC4gRm9yIFBDSSBkZXZpY2VzLCBob3dldmVyLCBgbWRpb19ub2RlYCBpcyBOVUxMLiBQQ0kgZGV2aWNlcyB0eXBpY2FsbHkgZG9uJ3QgdXNlIGRldmljZSB0cmVlIG5vZGVzLCBzbyB0aGF0J3Mgbm90IGhlbHBpbmcgbWUuIEhvbGQgb24sIGRvZXMgYHN0bW1hY19wY2lfcHJvYmVgIHNldCBgcGxhdC1cdTAwM2VwaHlfbm9kZWA/IE5vLCB0aGF0IGRvZXNuJ3Qgc2VlbSByaWdodC4gUENJIGRldmljZXMgdXN1YWxseSBkb24ndCBoYXZlIGRldmljZSB0cmVlIG5vZGVzIGFzc29jaWF0ZWQgd2l0aCB0aGVtLiBMZXQgbWUgZG91YmxlIGNoZWNrIGBzdG1tYWNfcGNpLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODEyMiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU0OjU5LjQ1ODgyNTA5NloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIwNjIzNzI2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlfbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU0OjU5Ljc3OTQ1Nzc4MloiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjg0MTA0ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgRHJpdmVyIENvZGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIGlzc3VlLCBzbyBsZXQncyBzdGFydCB3aXRoIHRoZSBsb3ctaGFuZ2luZyBmcnVpdCBhbmQgdHJhY2UgdGhlIGZsb3cuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYGR3bWFjLWludGVsLmNgIGZpbGUuIFRoaXMgaXMgdGhlIGRyaXZlciBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIERXTUFDIChEZXNpZ25XYXJlIE1BQykgY29udHJvbGxlciBvbiBJbnRlbCBwbGF0Zm9ybXMsIHNvIGl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gaW52ZXN0aWdhdGluZyBhbnkgTUFDLWxheWVyIHBlcmZvcm1hbmNlIGlzc3VlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHByb2JsZW1zKSBsaWtlbHkgcmVzaWRlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg3ODYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NTowNS4wNjM1NjUzN1oiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMxMDI3NDMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9ub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU1OjA1LjE1NjY4NzE0M1oiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTkyODgwNjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGR3bWFjLWxvb25nc29uLmNgKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gaXQuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlIGBkd21hYy1sb29uZ3Nvbi5jYCBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIExvb25nc29uIGFyY2hpdGVjdHVyZSdzIGludGVyYWN0aW9uIHdpdGggdGhlIERXTUFDIGRyaXZlciBzcGVjaWZpY2FsbHkuIFdoYXQga2luZCBvZiBjdXN0b21pemF0aW9ucywgaWYgYW55LCBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgZm9yIHRoaXMgcGxhdGZvcm0/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYW55IHVuaXF1ZSBjbG9ja2luZyBzY2hlbWVzLCBpbnRlcnJ1cHQgaGFuZGxpbmcgbnVhbmNlcywgb3IgbWVtb3J5IG1hcHBpbmcgcXVpcmtzIHNwZWNpZmljIHRvIHRoZSBMb29uZ3NvbiBTb0NzPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IHNlY3Rpb25zIHRvIGZvY3VzIG9uIC0gcGVyaGFwcyB0aGUgZGV2aWNlIHRyZWUgYmluZGluZ3MsIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBhbmQgYW55IHBsYXRmb3JtLXNwZWNpZmljIERNQSBjb25maWd1cmF0aW9ucy4gSSdtIGFsc28gZ29pbmcgdG8gbG9vayBmb3IgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgc2lnbmFsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRoZSBMb29uZ3NvbiB2ZXJzaW9uIG9yIHNwZWNpZmljIGZlYXR1cmVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgZ2V0IGEgaGFuZGxlIG9uIHRoZSBzcGVjaWZpY3MuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGlzIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDAyLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTU6MTAuMzQ5NTcwODU4WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjAxNDc0NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTU6MTAuNDM1NjA1NjcyWiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3ODQ0Njg3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHN0YXJ0ZWQgb24gdGhpcywgYW5kIHRoZSBmaXJzdCBwbGFjZSBteSBicmFpbiBpcyBqdW1waW5nIHRvIGlzIGBkd21hYy1tb3RvcmNvbW0uY2AuIFRoYXQncyB3aGVyZSBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgZHJpdmVyIGNvZGUsIHBhcnRpY3VsYXJseSB0aGUgcGFydHMgcmVsYXRlZCB0byB0aGUgTW90b3JDb21tLXNwZWNpZmljIGZlYXR1cmVzLCBhc3N1bWluZyBpdCdzIGNvcnJlY3RseSBuYW1lZC4gSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMsIGludGVycnVwdCBoYW5kbGVycywgYW5kIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gd29yayB0aHJvdWdoIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgcGlucG9pbnQgd2hlcmUgdGhlIHBvdGVudGlhbCBpc3N1ZSBsaWVzLCBvciBhdCBsZWFzdCBnYWluIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgb3BlcmF0aW9uYWwgbG9naWMuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBpbiBkZXB0aCBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyODIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NToxNS4yMjAwNzcxMjdaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTcwNDExOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU1OjE1LjM2OTc5MDc0NloiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDA0MzY4Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgaW4gUEhZIElEIERldGVjdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgaXQncyBnb3QgbWUgdGhpbmtpbmcuIElmIGBwaHlfZmluZF9maXJzdGAgZmFpbHMsIGl0IHJldHVybnMgYC1FTk9ERVZgLCB3aGljaCBpcyBzdGFuZGFyZC4gQnV0IHRoZW4gaXQgaGl0IG1lOiB3aGF0IGlmIGBzdG1tYWNfbWRpb19yZWFkX2MyMmAg4oCTIHRoYXQncyB0aGUgZnVuY3Rpb24gcmVhZGluZyB0aGUgUEhZIElEIOKAkyByZXR1cm5zIHNvbWV0aGluZyB0aGF0ICpsb29rcyogbGlrZSBhIHZhbGlkIFBIWSBJRCwgZXZlbiBpZiBpdCdzIG5vdD8gV2Uga25vdyB0aGF0IFN5emthbGxlcidzIFBDSSBmdXp6ZXIgY2FuIGludGVyY2VwdCB0aG9zZSBNTUlPIHJlYWRzIGFuZCBwcm92aWRlIHJhbmRvbSB2YWx1ZXMuIElmIHRob3NlIHJhbmRvbSB2YWx1ZXMgaGFwcGVuIHRvIHRyaWNrIGBwaHlfZmluZF9maXJzdGAgaW50byB0aGlua2luZyB0aGVyZSdzIGEgdmFsaWQgUEhZLCB3ZSd2ZSBnb3QgYSBwcm9ibGVtLiBBbmQgdGhlIHJlYXNvbiB0aGlzIGlzIGEgYmlnIGRlYWwgaXMgYmVjYXVzZSBgc3RtbWFjX21kaW9fcmVhZF9jMjJgIHJlbGllcyBvbiByZWFkaW5nIHRoZSBHTUlJX0RBVEEgcmVnaXN0ZXIsIHNvIG1heWJlIHRoYXQgcmVnaXN0ZXIgaXMgdGhlIGN1bHByaXQuIE5vdywgSSBzaG91bGQgZGl2ZSBpbnRvIGBzdG1tYWNfbWRpb19yZWFkX2MyMmAgdG8gc2VlIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTUwOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NToyMy4zNzQxNjE0MjNaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Mjc1MTc4MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX21kaW9fcmVhZF9jMjJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYz0yODM9c3RhdGljIGludCBzdG1tYWNfbWRpb193cml0ZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBwYSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtMjg5LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6MjkwOiAqIHN0bW1hY19tZGlvX3JlYWRfYzIyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy0yOTEtICogQGJ1czogcG9pbnRzIHRvIHRoZSBtaWlfYnVzIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy0yOTgtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYzoyOTk6c3RhdGljIGludCBzdG1tYWNfbWRpb19yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5YWRkciwgaW50IHBoeXJlZylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTMwMC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jPTU5NT1pbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTYzNy1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6NjM4OlxcdFxcdG5ld19idXMtXFx1MDAzZXJlYWQgPSBcXHUwMDI2c3RtbWFjX21kaW9fcmVhZF9jMjI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy02MzktXFx0XFx0bmV3X2J1cy1cXHUwMDNld3JpdGUgPSBcXHUwMDI2c3RtbWFjX21kaW9fd3JpdGVfYzIyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NToyNi4wMDE2ODU5MThaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg2NTc0NTM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSB3ZSBnby4uLlxuXG4qKkFuYWx5emluZyB0aGUgYHN0bW1hY19tZGlvX3JlYWRfYzIyYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBzdG1tYWNfbWRpb19yZWFkX2MyMmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBzdG1tYWMgZHJpdmVyLiBDbGVhcmx5LCBpdCdzIGludm9sdmVkIGluIE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSAoTUlJKSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIENsYXVzZSAyMiBNSUkgaW50ZXJmYWNlLiBHaXZlbiB0aGUgZnVuY3Rpb24gbmFtZSwgSSBzdXNwZWN0IHRoaXMgaXMgYSByZWFkIG9wZXJhdGlvbiwgYWltaW5nIHRvIHJldHJpZXZlIGRhdGEgZnJvbSBhIGNvbm5lY3RlZCBNSUkgZGV2aWNlLiBUaGUgXCJjMjJcIiBsaWtlbHkgcG9pbnRzIHRvIHRoZSBzcGVjaWZpYyBwcm90b2NvbCB2ZXJzaW9uIGJlaW5nIHV0aWxpemVkLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgc3VzcGljaW9uIGJ5IGluc3BlY3RpbmcgdGhlIGZ1bmN0aW9uJ3MgcGFyYW1ldGVycyBhbmQgaW50ZXJuYWwgbG9naWMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgcmVnaXN0ZXIgYWRkcmVzc2VzLCByZWFkIGNvbW1hbmRzLCBkYXRhIHJldHJpZXZhbCBtZWNoYW5pc21zLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIG9yIHJldHJ5IGxvZ2ljLiBXaGF0IHNwZWNpZmljIHJlZ2lzdGVycyBhcmUgYmVpbmcgYWNjZXNzZWQ/IElzIGl0IGhhbmRsaW5nIGFueSBuZWNlc3NhcnkgY2xvY2tpbmcgb3IgdGltaW5nIGNvbnNpZGVyYXRpb25zIGZvciB0aGUgTURJTyBidXM/IEFueSBwb3dlciBtYW5hZ2VtZW50IGNhbGxzPyBBbHNvLCBob3cgaXMgdGhlIGRldmljZSBhZGRyZXNzIHBhc3NlZCB0byBpdD8gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIG92ZXJhbGwgTURJTyBmcmFtZXdvcmsgd2l0aGluIHRoZSBzdG1tYWMgZHJpdmVyLiBXaGF0IGFyZSB0aGUgY29tbW9uIGVycm9yIGNhc2VzIGl0IG5lZWRzIHRvIGhhbmRsZSwgc3VjaCBhcyBhbiBOQUNLIG9yIGEgdGltZW91dD8gSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgZGlyZWN0bHkgYnkgYW5vdGhlciBtb2R1bGUgb3IgZG9lcyBpdCBwZXJmb3JtIHNvbWUgaW50ZXJuYWwgZnVuY3Rpb25zPyBGaW5hbGx5LCBob3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBQSFkgb3Igb3RoZXIgY29ubmVjdGVkIE1ESU8gZGV2aWNlcz8gSSdtIGFudGljaXBhdGluZyB0aGlzIHRvIGJlIGEgc3RyYWlnaHRmb3J3YXJkIHJlYWQgb3BlcmF0aW9uLCBidXQgSSBrbm93IHRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscywgc28gbGV0J3Mgc3RhcnQgcmVhZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NDAzNjYsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NTozMS44Njc0MzQ3NDNaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTk6XFx0c3RhdGljIGludCBzdG1tYWNfbWRpb19yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5YWRkciwgaW50IHBoeXJlZylcXG4gMzAwOlxcdHtcXG4gMzAxOlxcdFxcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGJ1cy1cXHUwMDNlcHJpdik7XFxuIDMwMjpcXHRcXHR1MzIgY21kO1xcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQzQpXFxuIDMwNTpcXHRcXHRcXHRjbWQgPSBNSUlfR01BQzRfUkVBRDtcXG4gMzA2OlxcdFxcdGVsc2VcXG4gMzA3OlxcdFxcdFxcdGNtZCA9IDA7XFxuIDMwODpcXHRcXG4gMzA5OlxcdFxcdHJldHVybiBzdG1tYWNfbWRpb19yZWFkKHByaXYsIHBoeWFkZHIsIHBoeXJlZywgY21kLCAwKTtcXG4gMzEwOlxcdH1cXG4gMzExOlxcdFxcbiAzMTI6XFx0LyoqXFxuIDMxMzpcXHQgKiBzdG1tYWNfbWRpb19yZWFkX2M0NVxcbiAzMTQ6XFx0ICogQGJ1czogcG9pbnRzIHRvIHRoZSBtaWlfYnVzIHN0cnVjdHVyZVxcbiAzMTU6XFx0ICogQHBoeWFkZHI6IE1JSSBhZGRyXFxuIDMxNjpcXHQgKiBAZGV2YWQ6IGRldmljZSBhZGRyZXNzIHRvIHJlYWRcXG4gMzE3OlxcdCAqIEBwaHlyZWc6IE1JSSByZWdcXG4gMzE4OlxcdCAqIERlc2NyaXB0aW9uOiBpdCByZWFkcyBkYXRhIGZyb20gdGhlIE1JSSByZWdpc3RlciBmcm9tIHdpdGhpbiB0aGUgcGh5IGRldmljZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTU6MzEuODY3NTI2ODAzWiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NTQxNTUzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUgd2UgZ28uLi5cblxuKipEZWx2aW5nIGludG8gdGhlIGBzdG1tYWNfbWRpb19yZWFkYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBzdG1tYWNfbWRpb19yZWFkYCBmdW5jdGlvbi4gQmFzZWQgb24gdGhlIG5hbWUsIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgY29yZSByb3V0aW5lIGZvciByZWFkaW5nIGRhdGEgZnJvbSBhbiBNRElPIGJ1cywgbGlrZWx5IHJlbGF0ZWQgdG8gYW4gU1RNaWNyb2VsZWN0cm9uaWNzIEV0aGVybmV0IE1BQyAoU1RNTUFDKSBjb250cm9sbGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIHBoeXNpY2FsIGxheWVyIChQSFkpIHRocm91Z2ggdGhpcyBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zIOKAkyB0aGUgYml0LWJhbmdpbmcsIHRoZSByZWdpc3RlciBhY2Nlc3MgcGF0dGVybnMsIGFuZCBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3IgZXJyb3IgaGFuZGxpbmcuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKlJlZ2lzdGVyIEFkZHJlc3Npbmc6KiogSG93IGRvZXMgaXQgY29uc3RydWN0IHRoZSBNRElPIHJlZ2lzdGVyIGFkZHJlc3Nlcz8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdGVjaG5pcXVlcyB1c2VkIGZvciBkaWZmZXJlbnQgUEhZIHR5cGVzIG9yIHZlbmRvci1zcGVjaWZpYyByZWdpc3RlcnM/XG4qICAgKipEYXRhIFRyYW5zZmVyOioqIEhvdyBpcyB0aGUgcmVhZCBvcGVyYXRpb24gaW1wbGVtZW50ZWQ/IElzIGl0IHBvbGxpbmcsIGludGVycnVwdC1kcml2ZW4sIG9yIGEgY29tYmluYXRpb24/IFdoYXQgYXJlIHRoZSB0aW1pbmcgY29uc2lkZXJhdGlvbnMsIGdpdmVuIHRoZSBzcGVlZCBvZiB0aGUgTURJTyBidXM/XG4qICAgKipFcnJvciBDaGVja2luZzoqKiBEb2VzIGl0IGltcGxlbWVudCBhbnkgQ1JDIG9yIHBhcml0eSBjaGVja3Mgb24gdGhlIHJlYWQgZGF0YT8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGJ1cyBlcnJvcnMsIHN1Y2ggYXMgYSBtaXNzaW5nIG9yIHVucmVzcG9uc2l2ZSBQSFk/XG4qICAgKipTeW5jaHJvbml6YXRpb246KiogSG93IGRvZXMgaXQgZW5zdXJlIHByb3BlciBzeW5jaHJvbml6YXRpb24gd2l0aCB0aGUgUEhZLCBwYXJ0aWN1bGFybHkgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSByZWFkIHRyYW5zYWN0aW9uP1xuKiAgICoqSW50ZXJydXB0IEhhbmRsaW5nIChpZiBhbnkpOioqIElmIGludGVycnVwdHMgYXJlIGludm9sdmVkLCBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3JlIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgc2VydmljZWQgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zLlxuKiAgICoqUEhZIEFkZHJlc3MgSGFuZGxpbmc6KiogSG93IGlzIHRoZSBQSFkncyBhZGRyZXNzIGhhbmRsZWQ/IElzIGl0IGhhcmRjb2RlZCwgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLCBvciBkeW5hbWljYWxseSBkZXRlcm1pbmVkP1xuKiAgICoqQ2xhcml0eSBvZiBjb2RlOioqIEhvdyBhcmUgdGhlIHZhcmlvdXMgc3RlcHMgZW5jYXBzdWxhdGVkPyBXaGF0IGlzIHRoZSBjb2RlIHN0eWxlPyBXaWxsIEkgbmVlZCB0byBzcGVuZCBhIGxvdCBvZiB0aW1lIGRlY2lwaGVyaW5nIGl0P1xuXG5JIHdhbnQgdG8gc2VlIGhvdyB0aGUgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoaW4gdGhlIGxhcmdlciBgc3RtbWFjYCBkcml2ZXIgYXJjaGl0ZWN0dXJlIGFuZCB3aGF0IGxldmVsIG9mIGFic3RyYWN0aW9uIGl0IHByb3ZpZGVzLiBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYW5kIHBvdGVudGlhbCBwaXRmYWxscyBvZiB0aGlzIE1ESU8gcmVhZCBpbXBsZW1lbnRhdGlvbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgaG93IHRoZSBlbmdpbmVlcnMgdGFja2xlZCB0aGlzIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGRyaXZlciFcblxuXG4iLCJJbnB1dFRva2VucyI6NDEwOTcsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU1OjM2LjgyMTY4NDU3NloiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDA6XFx0XFx0ICAgICAgIE1JSV9BRERSX0dCVVNZO1xcbiAyNDE6XFx0fVxcbiAyNDI6XFx0XFxuIDI0MzpcXHRzdGF0aWMgaW50IHN0bW1hY19tZGlvX2FjY2VzcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBwYSxcXG4gMjQ0OlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBnciwgdTMyIGNtZCwgdTMyIGRhdGEsIGJvb2wgcmVhZClcXG4gMjQ1OlxcdHtcXG4gMjQ2OlxcdFxcdHZvaWQgX19pb21lbSAqbWlpX2FkZHJlc3MgPSBwcml2LVxcdTAwM2Vpb2FkZHIgKyBwcml2LVxcdTAwM2Vody1cXHUwMDNlbWlpLmFkZHI7XFxuIDI0NzpcXHRcXHR2b2lkIF9faW9tZW0gKm1paV9kYXRhID0gcHJpdi1cXHUwMDNlaW9hZGRyICsgcHJpdi1cXHUwMDNlaHctXFx1MDAzZW1paS5kYXRhO1xcbiAyNDg6XFx0XFx0dTMyIGFkZHI7XFxuIDI0OTpcXHRcXHRpbnQgcmV0O1xcbiAyNTA6XFx0XFxuIDI1MTpcXHRcXHRyZXQgPSBwbV9ydW50aW1lX3Jlc3VtZV9hbmRfZ2V0KHByaXYtXFx1MDAzZWRldmljZSk7XFxuIDI1MjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMjUzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDI1NDpcXHRcXG4gMjU1OlxcdFxcdHJldCA9IHN0bW1hY19tZGlvX3dhaXQobWlpX2FkZHJlc3MsIE1JSV9BRERSX0dCVVNZKTtcXG4gMjU2OlxcdFxcdGlmIChyZXQpXFxuIDI1NzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0YWRkciA9IHN0bW1hY19tZGlvX2Zvcm1hdF9hZGRyKHByaXYsIHBhLCBncikgfCBjbWQ7XFxuIDI2MDpcXHRcXG4gMjYxOlxcdFxcdHdyaXRlbChkYXRhLCBtaWlfZGF0YSk7XFxuIDI2MjpcXHRcXHR3cml0ZWwoYWRkciwgbWlpX2FkZHJlc3MpO1xcbiAyNjM6XFx0XFxuIDI2NDpcXHRcXHRyZXQgPSBzdG1tYWNfbWRpb193YWl0KG1paV9hZGRyZXNzLCBNSUlfQUREUl9HQlVTWSk7XFxuIDI2NTpcXHRcXHRpZiAocmV0KVxcbiAyNjY6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI2NzpcXHRcXG4gMjY4OlxcdFxcdC8qIFJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgTUlJIGRhdGEgcmVnaXN0ZXIgaWYgaW4gcmVhZCBtb2RlICovXFxuIDI2OTpcXHRcXHRyZXQgPSByZWFkID8gcmVhZGwobWlpX2RhdGEpIFxcdTAwMjYgTUlJX0RBVEFfR0RfTUFTSyA6IDA7XFxuIDI3MDpcXHRcXG4gMjcxOlxcdG91dDpcXG4gMjcyOlxcdFxcdHBtX3J1bnRpbWVfcHV0KHByaXYtXFx1MDAzZWRldmljZSk7XFxuIDI3MzpcXHRcXG4gMjc0OlxcdFxcdHJldHVybiByZXQ7XFxuIDI3NTpcXHR9XFxuIDI3NjpcXHRcXG4gMjc3OlxcdHN0YXRpYyBpbnQgc3RtbWFjX21kaW9fcmVhZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBwYSxcXG4gMjc4OlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgZ3IsIHUzMiBjbWQsIGludCBkYXRhKVxcbiAyNzk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NTozNi44MjE4NTMyMTZaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5NDczMTkwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgYW5kIEZ1enppbmcgYHN0bW1hY19tYWNfbGlua191cGAqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgc3RtbWFjX21hY19saW5rX3VwYCBmdW5jdGlvbi4gSXQgc2VlbXMgcmVhY2hhYmxlIHRocm91Z2ggc3l6a2FsbGVyJ3MgUENJIGZ1enppbmcsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBMZXQgbWUgd2FsayB0aHJvdWdoIG15IHRob3VnaHQgcHJvY2Vzcy5cblxuRmlyc3QsIGBzdG1tYWNfbWRpb193YWl0YCB3YWl0cyBmb3IgYE1JSV9BRERSX0dCVVNZYCB0byBjbGVhciwgYnV0IGlmIHRoZSBmdXp6ZXIgdGhyb3dzIGEgdmFsdWUgb2YgYDB4ZmZmZmZmZmZgLCB0aGF0J2xsIGNhdXNlIGEgdGltZW91dC4gSG93ZXZlciwgaWYgdGhlIGZ1enplciBoaXRzIGEgdmFsdWUgd2hlcmUgYE1JSV9BRERSX0dCVVNZYCAqaXMqIHplcm8sIHRoZW4gYHN0bW1hY19tZGlvX3dhaXRgIGFjdHVhbGx5IHN1Y2NlZWRzLiBJdCB0aGVuIHJlYWRzIGBtaWlfZGF0YWAuIElmIHRoYXQgcmV0dXJucyBhIHZhbGlkIFBIWSBJROKAlG5vdCBgMHhmZmZmYCBvciBgMHgwMDAwYOKAlGBwaHlfZmluZF9maXJzdGAgd2lsbCBzdWNjZWVkLiBUaGlzIGZ1bmN0aW9uIHNjYW5zIGFkZHJlc3NlcyAwLTMxLCByZWFkaW5nIHJlZ2lzdGVycyAyIGFuZCAzIGZvciB0aGUgUEhZIElELiBTbywgaWYgdGhlIGZ1enplciBwcm92aWRlcyBhIHZhbGlkIFBIWSBJRCwgYSBQSFkgZGV2aWNlIGdldHMgY3JlYXRlZC4gQ29uc2VxdWVudGx5LCBgc3RtbWFjX21kaW9fcmVnaXN0ZXJgIGFuZCB0aGVuIGBfX3N0bW1hY19kdnJfcHJvYmVgIHN1Y2NlZWQsIGFuZCB0aGUgbmV0ZGV2IGlzIHJlZ2lzdGVyZWQuXG5cbk5vdywgd2hlbiBJIGJyaW5nIHRoZSBkZXZpY2UgdXAgd2l0aCBgaXAgbGluayBzZXQgZXRoMCB1cGAsIGl0IGNhbGxzIGBzdG1tYWNfbWFjX2xpbmtfdXBgIHdoZW4gdGhlIFBIWSBsaW5rIGNvbWVzIHVwLiBBbmQsIHNpbmNlIGBzdG1tYWNfbWFjX2xpbmtfdXBgIGlzIGEgcGh5bGluayBjYWxsYmFjaywgaWYgdGhlIGZ1enplciBwcm92aWRlcyBhIHZhbGlkIFBIWSBJRCwgcGh5bGluayBhdHRhY2hlcyB0aGUgUEhZLCBhbmQgdGhlbiBzdGFydHMgcG9sbGluZyBpdCBmb3Igc3RhdHVzIGJ5IHJlYWRpbmcgcmVnaXN0ZXIgMSwgZXRjLiBJZiB0aGUgZnV6emVyIHJldHVybnMgc29tZXRoaW5nIGluZGljYXRpbmcgbGluayB1cCwgYHBoeWxpbmtgIGNhbGxzIGBtYWNfbGlua191cGAuXG5cblNvLCBpdCAqaXMqIHJlYWNoYWJsZSB3aXRoIFBDSSBmdXp6aW5nISBJJ20gdGhpbmtpbmcgdGhhdCdzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbkJ1dCB3YWl0LCBpcyB0aGlzICpvbmx5KiByZWFjaGFibGUgdmlhIFBDSSBmdXp6aW5nPyBXaGF0IGFib3V0IHBsYXRmb3JtIGRyaXZlcnM/IEknbSBub3cgdGhpbmtpbmcgYWJvdXQgdGhlIGBkd21hYy1pbnRlbC5jYCwgYGR3bWFjLWxvb25nc29uLmNgLCBhbmQgYGR3bWFjLW1vdG9yY29tbS5jYCBkcml2ZXJzIOKAkyB0aGV5ICphcmUqIFBDSS4gQnV0IHdoYXQgYWJvdXQgYWxsIHRoZSBwbGF0Zm9ybSBkcml2ZXJzIGxpa2UgYGR3bWFjLWR3Yy1xb3MtZXRoLmNgLCBgZHdtYWMtaXBxODA2eC5jYCwgZXRjPyBTeXprYWxsZXIgY2FuIGZ1enogcGxhdGZvcm0gZGV2aWNlcywgYnV0IGl0J3MgdXN1YWxseSBkZXBlbmRlbnQgb24gdGhlIGRldmljZSB0cmVlIG9yIGV4aXN0aW5nIGRldmljZXMuIFBDSSwgdGhvdWdoLCBjYW4gYmUgaW5qZWN0ZWQgZHluYW1pY2FsbHksIHdoaWNoIGlzIHBlcmZlY3QgaGVyZS5cblxuU2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIGBzdG1tYWNfbWFjX2xpbmtfdXBgIHRvIGhhbmRsZSB0aGUgbmV3IHNwZWVkcyBmb3IgYFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJYCBhbmQgYFBIWV9JTlRFUkZBQ0VfTU9ERV9YTEdNSUlgLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoYXQgbWFrZXMgaXQgbW9yZSBpbnRlcmVzdGluZyBmb3IgZnV6emluZyFcblxuT2theSwgdGltZSB0byBmaWd1cmUgb3V0IHRoZSBuZWVkZWQgY29uZmlncy4gSSB0aGluayBJJ2xsIG5lZWQgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1BDSWAsIGBEV01BQ19JTlRFTGAgKG1heWJlIHRvIGdldCBtb3JlIFBDSSBJRHMpLCBgRFdNQUNfTE9PTkdTT05gLCBhbmQgYERXTUFDX01PVE9SQ09NTWAuIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjIzMCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU1OjQ5Ljc2OTE3NDMxNloiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY3MDQ3NDUwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRFdNQUNfSU5URUxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0zMjI9Y29uZmlnIERXTUFDX0lNWDhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMzMzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6MzM0OmNvbmZpZyBEV01BQ19JTlRFTF9QTEFUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zMzUtXFx0dHJpc3RhdGUgXFxcIkludGVsIGR3bWFjIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM3Mz1jb25maWcgU1RNTUFDX0xJQlBDSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zNzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzozNzg6Y29uZmlnIERXTUFDX0lOVEVMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zNzktXFx0dHJpc3RhdGUgXFxcIkludGVsIEdNQUMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTU6NTIuNDM5NjU4NjM4WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzU5NzUxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBEV01BQyBDb25maWdzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgc3RhdGUgb2YgdGhlIGBEV01BQ19MT09OR1NPTmAgYW5kIGBEV01BQ19NT1RPUkNPTU1gIGNvbmZpZ3VyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVjYWxsIGFueSByZWNlbnQgd29yayBJIG1pZ2h0IGhhdmUgZG9uZSBpbiB0aGlzIGFyZWEuIEhhdmUgdGhlcmUgYmVlbiBhbnkgcmVwb3J0ZWQgaXNzdWVzIG9yIG1vZGlmaWNhdGlvbnMgcGVuZGluZz8gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBkcml2ZXJzIG9yIG1vZHVsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggb2YgdGhvc2UuIEFyZSB3ZSBkZWFsaW5nIHdpdGggc3RhbmRhcmQgY29uZmlndXJhdGlvbnMsIG9yIGFyZSB0aGVyZSBjdXN0b20gcGF0Y2hlcyBpbnZvbHZlZD8gV2hhdCdzIHRoZSBsYXRlc3QgYnVpbGQgc3RhdHVzIGZvciBlYWNoPyBJIG5lZWQgdG8gY2hlY2sgZm9yIHVwc3RyZWFtIHVwZGF0ZXMgb3IgZG93bnN0cmVhbSBtb2RpZmljYXRpb25zLiBJdCdzIGltcG9ydGFudCB0byBhc2NlcnRhaW4gcXVpY2tseSwgYXJlIHdlIHN0aWxsIGFsaWduZWQgd2l0aCBiZXN0IHByYWN0aWNlcyBmb3IgdGhvc2UgTUFDIGNvbmZpZ3VyYXRpb25zPyBEZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIEkgbWlnaHQgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlbSB3aXRoIG91ciBwcm9qZWN0J3MgZG9jdW1lbnRhdGlvbiwgcmVsZXZhbnQgbWFpbGluZyBsaXN0cywgb3IgZXZlbiB0aGUgdXBzdHJlYW0gc291cmNlLiBVbHRpbWF0ZWx5LCBJIGFtIGxvb2tpbmcgZm9yIHdoZXRoZXIgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZTogYSkgY3VycmVudCBiKSB3b3JraW5nIGMpIG9wdGltYWwsIGFzIGEgcXVpY2sgZmlyc3QgcGFzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQwNjMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NTo1Ni42MTU2MzgzOThaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDQ3MTIwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERXTUFDX0xPT05HU09OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9MzM0PWNvbmZpZyBEV01BQ19JTlRFTF9QTEFUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTM0My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjM0NDpjb25maWcgRFdNQUNfTE9PTkdTT04xXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zNDUtXFx0dHJpc3RhdGUgXFxcIkxvb25nc29uMSBHTUFDIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM3OD1jb25maWcgRFdNQUNfSU5URUxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMzg3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6Mzg4OmNvbmZpZyBEV01BQ19MT09OR1NPTlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMzg5LVxcdHRyaXN0YXRlIFxcXCJMb29uZ3NvbiBQQ0kgRFdNQUMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTU6NTkuMjIwNDMwMzc1WiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzE4MTk2OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGFyZSBgU1RNTUFDX0VUSGAsIGBTVE1NQUNfUENJYCwgYERXTUFDX0lOVEVMYCwgYERXTUFDX0xPT05HU09OYCwgYW5kIGBEV01BQ19NT1RPUkNPTU1gLiBJdCdzIGdvb2QgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIGNvbnRleHQuIFRoZSBtYWluIGZ1bmN0aW9uIHRvdWNoZWQsIHdoaWNoIEkgbmVlZCB0byBmb2N1cyBvbiwgYXBwZWFycyB0byBiZSBgc3RtbWFjX21hY19saW5rX3VwYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSAqb25seSogZnVuY3Rpb24gaW1wYWN0ZWQgYnkgdGhpcyBkaWZmLiBBZnRlciBxdWlja2x5IHNjYW5uaW5nIHRoZSBwYXRjaCwgSSdtIGNvbmZpcm1pbmcgdGhhdCBgc3RtbWFjX21hY19saW5rX3VwYCBpcyBpbmRlZWQgdGhlIHNvbGUgZnVuY3Rpb24gdGhhdCB3YXMgY2hhbmdlZC5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIHRoZSBjb2RlIG1vZGlmaWNhdGlvbiBpdHNlbGYuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSBpbiBgc3RtbWFjX21hY19saW5rX3VwYC4gIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBhIHNlcmllcyBvZiBuZXN0ZWQgYGlmL2Vsc2UgaWYvZWxzZWAgc3RhdGVtZW50cyB0byBoYW5kbGUgZGlmZmVyZW50IHNwZWVkcyBiYXNlZCBvbiB0aGUgYFBIWV9JTlRFUkZBQ0VfTU9ERWAuIFRoZSBuZXcgcGF0Y2ggaGFzIGZsYXR0ZW5lZCB0aGF0IGludG8gYSBzaW5nbGUgYHN3aXRjaGAgc3RhdGVtZW50LiBBbHNvLCBpdCBhcHBlYXJzIHRoZXJlIHdlcmUgc29tZSBtaXNzaW5nIHNwZWVkIGVudHJpZXMgZm9yIGJvdGggYFVTWEdNSUlgIGFuZCBgWExHTUlJYCBpbnRlcmZhY2VzIGluIHRoZSBvcmlnaW5hbCBjb2RlLCBhbmQgdGhleSBhcmUgbm93IGNvdmVyZWQuIFRoZSBwYXRjaCBhcHBlYXJzIHRvIHVuaWZ5IHNwZWVkIGhhbmRsaW5nIGZvciB0aGVzZSBpbnRlcmZhY2VzLiBJbiB0aGUgb3JpZ2luYWwgdmVyc2lvbiBpdCBzZWVtcyB0aGVyZSB3YXMgbm8gc3BlZWQgaGFuZGxpbmcgZm9yIHRoZSBuZXdlciBzcGVlZHMsIGFuZCBpdCBhcHBlYXJzIHRoZSBuZXcgY29kZSBmaXhlcyB0aGlzLiBPdmVyYWxsLCBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IHN0cmVhbWxpbmluZyBzcGVlZCBoYW5kbGluZyBhbmQgZW5zdXJpbmcgYWxsIHJlbGV2YW50IHNwZWVkcyBhcmUgc3VwcG9ydGVkLCBhdCBsZWFzdCBmcm9tIHdoYXQgSSBjYW4gc2VlLiAgVGhpcyBpcyBhIHByZXR0eSB0eXBpY2FsIHBhdHRlcm4gZm9yIHJlZmFjdG9yaW5nIOKAkyBpbXByb3ZpbmcgY29kZSByZWFkYWJpbGl0eSBhbmQgYWRkcmVzc2luZyBwb3RlbnRpYWwgZ2FwcyBpbiB0aGUgc3VwcG9ydGVkIGZlYXR1cmUgc2V0LlxuXG5HaXZlbiB0aGF0IHRoaXMgaXMgYHN0bW1hY19tYWNfbGlua191cGAsIGl0J3MgYWxsIGFib3V0IGJyaW5naW5nIHRoZSBsaW5rIHVwLCB0aGUgUEhZIGludGVyZmFjZSwgYW5kIHRoZSBzcGVlZHMgc3VwcG9ydGVkIHdpdGhpbiB0aG9zZSBpbnRlcmZhY2VzLCB3aGljaCBtYWtlIGl0IG5lY2Vzc2FyeSBmb3IgYSBjb3JyZWN0IGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGVzdGVkIHRob3JvdWdobHkgZm9yIHRoZSBhZmZlY3RlZCBpbnRlcmZhY2UgbW9kZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NTc4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NjoxMi45Mzg2MzA3ODhaIiwiU2VxIjo3MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDk3MjA2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX21hY19saW5rX3VwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MTA1Nj1zdGF0aWMgdm9pZCBzdG1tYWNfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTA2OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjEwNjk6c3RhdGljIHZvaWQgc3RtbWFjX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTA3MC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MTI0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBzdG1tYWNfcGh5bGlua19tYWNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0xMjUxLVxcdC5tYWNfbGlua19kb3duID0gc3RtbWFjX21hY19saW5rX2Rvd24sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzoxMjUyOlxcdC5tYWNfbGlua191cCA9IHN0bW1hY19tYWNfbGlua191cCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTEyNTMtXFx0Lm1hY19kaXNhYmxlX3R4X2xwaSA9IHN0bW1hY19tYWNfZGlzYWJsZV90eF9scGksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU2OjE1Ljc4ODM1NjQzN1oiLCJTZXEiOjcxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzcxMzQyMDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgU1RNTUFDIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSByZWNlbnQgY2hhbmdlIHRvIGBzdG1tYWNfbWFjX2xpbmtfdXBgLiBUaGF0J3MgdGhlIG9ubHkgZGlyZWN0IG1vZGlmaWNhdGlvbiBJIHNlZSwgd2hpY2ggc2ltcGxpZmllcyB0aGUgc2NvcGUgb2YgdGhlIGludmVzdGlnYXRpb24uIEhvd2V2ZXIsIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIGluZGlyZWN0IGltcGFjdHMgb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IG5lZWQgYXR0ZW50aW9uLlxuXG5MZXQncyBzZWUuIFRoZSBvYnZpb3VzIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYFNUTU1BQ19FVEhgLCBhbmQgdGhhdCdzIGV4cGVjdGVkLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGFjY291bnQgZm9yIHN1cHBvcnRpbmcgYXJjaGl0ZWN0dXJlcy4gVGhlIGBTVE1NQUNfUENJYCBvcHRpb24gZW5hYmxlcyBQQ0kgc3VwcG9ydC4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhhdCBvcHRpb24gYWxzbyBjb3ZlciB0aGUgc3BlY2lmaWMgUENJIElEcyBvZiBzdXBwb3J0ZWQgaGFyZHdhcmU/IEkgYWxyZWFkeSBrbm93IGFib3V0IHRoaW5ncyBsaWtlIGBEV01BQ19JTlRFTGAsIGBEV01BQ19MT09OR1NPTmAsIGFuZCBgRFdNQUNfTU9UT1JDT01NYCwgd2hpY2ggc2VlbSB0byBzdXBwbHkgdGhvc2UgdmVuZG9yIElEcy4gSSB3YW50IHRvIGNvbmZpcm0gaWYgYFNUTU1BQ19QQ0lgIGl0c2VsZiBpbmNsdWRlcyBhbnkgZ2VuZXJpYyBQQ0kgSURzLiBUaGF0IHdvdWxkIGluZmx1ZW5jZSBob3cgSSBpbnRlcnByZXQgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgYW5kIHBvc3NpYmxlIGRlcGVuZGVuY2llcy4gVGhpcyBpbnZlc3RpZ2F0aW9uIGlzIGFib3V0IGNoZWNraW5nIGZvciBjb21wbGV0ZSBjb3ZlcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY2MjksIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTY6MjEuNTU5Nzk0OTY5WiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEyNzUwNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUENJX0RFVklDRV9EQVRBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjA0OlxcdHsgUENJX0RFVklDRV9EQVRBKFNUTU1BQywgU1RNTUFDLCBcXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDU6XFx0eyBQQ0lfREVWSUNFX0RBVEEoU1RNSUNSTywgTUFDLCBcXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDY6XFx0eyBQQ0lfREVWSUNFX0RBVEEoU1lOT1BTWVMsIEdNQUM1X0lELCBcXHUwMDI2c25wc19nbWFjNV9wY2lfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjA3LVxcdHt9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU2OjIxLjY4MTA4MDk2WiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDM1MzU5NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBUYXJnZXQgRHJpdmVyIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgYFNUTU1BQ19QQ0lgIGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5pdGVseSByZWxldmFudC4gSXQgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBQQ0kgZGV2aWNlIGRhdGEgZm9yIGBTVE1NQUNgLCBgU1RNSUNST2AsIGFuZCBgU1lOT1BTWVNgIGJhc2VkIGRldmljZXMsIHdoaWNoIGlzIGtleSBmb3IgZnV6emluZyB2aWEgUENJIGluamVjdGlvbi4gU28sICp0aGF0J3MqIGRlZmluaXRlbHkgaW4uIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBhbmQgZm9yIGJyb2FkZXIgY292ZXJhZ2UsIEknbGwgaW5jbHVkZSBgU1RNTUFDX0VUSGAsIGBEV01BQ19JTlRFTGAsIGBEV01BQ19MT09OR1NPTmAsIGFuZCBgRFdNQUNfTU9UT1JDT01NYCBhcyB3ZWxsLlxuXG5Ob3csIGxldCdzIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgU1RNTUFDX0VUSGAuIEFscmlnaHQsIGl0IHJlcXVpcmVzIGBIQVNfSU9NRU1gIGFuZCBgSEFTX0RNQWAsIGJvdGggb2Ygd2hpY2ggYXJlIGNvbW1vbiBhbmQgc2hvdWxkIGJlIHJlYWRpbHkgYXZhaWxhYmxlLiBJdCBhbHNvIHNlbGVjdHMgYE1JSWAsIGBQSFlMSUJgLCBgUEhZTElOS2AsIGFuZCBgQ1JDMzJgLCB3aGljaCBhcmUgYWxsIHN0YW5kYXJkIGNvbXBvbmVudHMgcmVsYXRlZCB0byBFdGhlcm5ldCBvcGVyYXRpb24uIFNlZW1zIGdvb2QuXG5cblRoZXJlZm9yZSwgaGVyZSdzIHRoZSBmaW5hbCBjb25maWd1cmF0aW9uIGZvciBmdXp6aW5nOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSDigJMgZGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0LlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBzdG1tYWNfbWFjX2xpbmtfdXBgIOKAkyB0aGlzIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIHdoZXJlIHRoZSBjaGFuZ2VzIHJlc2lkZS5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1BDSWAsIGBEV01BQ19JTlRFTGAsIGBEV01BQ19MT09OR1NPTmAsIGBEV01BQ19NT1RPUkNPTU1gIOKAkyBhIHNvbGlkIGNvbWJpbmF0aW9uIHByb3ZpZGluZyBicm9hZCBjb3ZlcmFnZS5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2gncyBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB0byB0aGUgTUFDIHNwZWVkIGNvbmZpZ3VyYXRpb24gbG9naWMgd2l0aGluIHRoZSBgc3RtbWFjYCBkcml2ZXIgZHVyaW5nIGxpbmstdXAgaXMgdGhlIHByaW1hcnkgdGFyZ2V0LiBUaGUgZHJpdmVyJ3MgY29yZSBsb2dpYyBpcyBpbXBhY3RlZC4gV2UgY2FuIGFjY2VzcyB0aGUgZHJpdmVyIHVzaW5nIHN5emthbGxlcidzIFBDSSBmdXp6aW5nIGJ5IGluamVjdGluZyBhIHZpcnR1YWwgUENJIGRldmljZSB3aXRoIHRoZSBtYXRjaGluZyB2ZW5kb3IvZGV2aWNlIElEcyBzdXBwb3J0ZWQgYnkgYHN0bW1hY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MjU2LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NjozMi43MTY0NDU4NDJaIiwiU2VxIjo3NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg0NzY0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNUTU1BQ19FVEhcIixcbiAgICBcIlNUTU1BQ19QQ0lcIixcbiAgICBcIkRXTUFDX0lOVEVMXCIsXG4gICAgXCJEV01BQ19MT09OR1NPTlwiLFxuICAgIFwiRFdNQUNfTU9UT1JDT01NXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RtbWFjX21hY19saW5rX3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1BQyBzcGVlZCBjb25maWd1cmF0aW9uIGxvZ2ljIGluIHRoZSBzdG1tYWMgZHJpdmVyIGR1cmluZyBsaW5rIHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlcidzIGNvcmUgbG9naWMuIFRoZSBkcml2ZXIgY2FuIGJlIHJlYWNoZWQgdmlhIHN5emthbGxlcidzIFBDSSBmdXp6aW5nIGJ5IGluamVjdGluZyBhIHZpcnR1YWwgUENJIGRldmljZSBtYXRjaGluZyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB2ZW5kb3IvZGV2aWNlIElEcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJEV01BQ19JTlRFTFwiLFxuICAgIFwiRFdNQUNfTE9PTkdTT05cIixcbiAgICBcIkRXTUFDX01PVE9SQ09NTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0bW1hY19tYWNfbGlua191cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNQUMgc3BlZWQgY29uZmlndXJhdGlvbiBsb2dpYyBpbiB0aGUgc3RtbWFjIGRyaXZlciBkdXJpbmcgbGluayB1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIncyBjb3JlIGxvZ2ljLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIHZpYSBzeXprYWxsZXIncyBQQ0kgZnV6emluZyBieSBpbmplY3RpbmcgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgbWF0Y2hpbmcgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdmVuZG9yL2RldmljZSBJRHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvx2ff[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-13 09:22:53 +0000 UTC FinishedAt: 2026-07-13 09:56:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_PCI", "DWMAC_INTEL", "DWMAC_LOONGSON", "DWMAC_MOTORCOMM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "STMMAC_ETH", "STMMAC_PCI", "DWMAC_INTEL", "DWMAC_LOONGSON", "DWMAC_MOTORCOMM" ], "series_id": "236e94de-9725-496e-840c-c21b3f8f4f91" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "stmmac_mac_link_up" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1BDSSYjMzQ7LAogICAgJiMzNDtEV01BQ19JTlRFTCYjMzQ7LAogICAgJiMzNDtEV01BQ19MT09OR1NPTiYjMzQ7LAogICAgJiMzNDtEV01BQ19NT1RPUkNPTU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdG1tYWNfbWFjX2xpbmtfdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1BQyBzcGVlZCBjb25maWd1cmF0aW9uIGxvZ2ljIGluIHRoZSBzdG1tYWMgZHJpdmVyIGR1cmluZyBsaW5rIHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlciYjMzk7cyBjb3JlIGxvZ2ljLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIHZpYSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcgYnkgaW5qZWN0aW5nIGEgdmlydHVhbCBQQ0kgZGV2aWNlIG1hdGNoaW5nIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHZlbmRvci9kZXZpY2UgSURzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzEzNDQyYmI5NmY4YjYyZjA1YTZiZjQwNjIwNGVhY2I0N2RhNzg2OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDA5OjQ5OjA1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG5pbmRleCAyYTBkN2VmZjg4ZDNmZi4uOGQzZDg3NTQ5NTI5ZDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXG5AQCAtMTA4Myw2MyAmIzQzOzEwODMsNDUgQEAgc3RhdGljIHZvaWQgc3RtbWFjX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuIFx0b2xkX2N0cmwgPSByZWFkbChwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBNQUNfQ1RSTF9SRUcpO1xuIFx0Y3RybCA9IG9sZF9jdHJsIFx1MDAyNiB+cHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnNwZWVkX21hc2s7XG4gXG4tXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSB7XG4tXHRcdHN3aXRjaCAoc3BlZWQpIHtcbi1cdFx0Y2FzZSBTUEVFRF8xMDAwMDpcbi1cdFx0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay54Z21paS5zcGVlZDEwMDAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFNQRUVEXzUwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGdtaWkuc3BlZWQ1MDAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFNQRUVEXzI1MDA6XG4mIzQzO1x0c3dpdGNoIChzcGVlZCkge1xuJiM0MztcdGNhc2UgU1BFRURfMTAwMDAwOlxuJiM0MztcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGxnbWlpLnNwZWVkMTAwMDAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTUEVFRF81MDAwMDpcbiYjNDM7XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhsZ21paS5zcGVlZDUwMDAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTUEVFRF80MDAwMDpcbiYjNDM7XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhsZ21paS5zcGVlZDQwMDAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTUEVFRF8yNTAwMDpcbiYjNDM7XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhsZ21paS5zcGVlZDI1MDAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTUEVFRF8xMDAwMDpcbiYjNDM7XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhnbWlpLnNwZWVkMTAwMDA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNQRUVEXzUwMDA6XG4mIzQzO1x0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay54Z21paS5zcGVlZDUwMDA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNQRUVEXzI1MDA6XG4mIzQzO1x0XHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKVxuIFx0XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhnbWlpLnNwZWVkMjUwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbi1cdH0gZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9YTEdNSUkpIHtcbi1cdFx0c3dpdGNoIChzcGVlZCkge1xuLVx0XHRjYXNlIFNQRUVEXzEwMDAwMDpcbi1cdFx0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay54bGdtaWkuc3BlZWQxMDAwMDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgU1BFRURfNTAwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGxnbWlpLnNwZWVkNTAwMDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgU1BFRURfNDAwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGxnbWlpLnNwZWVkNDAwMDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgU1BFRURfMjUwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGxnbWlpLnNwZWVkMjUwMDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgU1BFRURfMTAwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGdtaWkuc3BlZWQxMDAwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBTUEVFRF8yNTAwOlxuLVx0XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnNwZWVkMjUwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBTUEVFRF8xMDAwOlxuLVx0XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnNwZWVkMTAwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdHN3aXRjaCAoc3BlZWQpIHtcbi1cdFx0Y2FzZSBTUEVFRF8yNTAwOlxuJiM0MztcdFx0ZWxzZVxuIFx0XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnNwZWVkMjUwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBTUEVFRF8xMDAwOlxuLVx0XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnNwZWVkMTAwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBTUEVFRF8xMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsuc3BlZWQxMDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgU1BFRURfMTA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsuc3BlZWQxMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgU1BFRURfMTAwMDpcbiYjNDM7XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnNwZWVkMTAwMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgU1BFRURfMTAwOlxuJiM0MztcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsuc3BlZWQxMDA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNQRUVEXzEwOlxuJiM0MztcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsuc3BlZWQxMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRuZXRkZXZfZXJyKHByaXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDt1bnN1cHBvcnRlZCBzcGVlZCAlcyBvbiAlcywgbGVhdmluZyB0aGUgTUFDIGRpc2FibGVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBwaHlfc3BlZWRfdG9fc3RyKHNwZWVkKSwgcGh5X21vZGVzKGludGVyZmFjZSkpO1xuJiM0MztcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmaXhfbWFjX3NwZWVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1BDSSYjMzQ7LAogICAgJiMzNDtEV01BQ19JTlRFTCYjMzQ7LAogICAgJiMzNDtEV01BQ19MT09OR1NPTiYjMzQ7LAogICAgJiMzNDtEV01BQ19NT1RPUkNPTU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdG1tYWNfbWFjX2xpbmtfdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1BQyBzcGVlZCBjb25maWd1cmF0aW9uIGxvZ2ljIGluIHRoZSBzdG1tYWMgZHJpdmVyIGR1cmluZyBsaW5rIHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlciYjMzk7cyBjb3JlIGxvZ2ljLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIHZpYSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcgYnkgaW5qZWN0aW5nIGEgdmlydHVhbCBQQ0kgZGV2aWNlIG1hdGNoaW5nIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHZlbmRvci9kZXZpY2UgSURzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMTM0NDJiYjk2ZjhiNjJmMDVhNmJmNDA2MjA0ZWFjYjQ3ZGE3ODY5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMTMgMDk6NDk6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYwppbmRleCAyYTBkN2VmZjg4ZDNmZi4uOGQzZDg3NTQ5NTI5ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYwpAQCAtMTA4Myw2MyAmIzQzOzEwODMsNDUgQEAgc3RhdGljIHZvaWQgc3RtbWFjX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLAogCW9sZF9jdHJsID0gcmVhZGwocHJpdi0mZ3Q7aW9hZGRyICYjNDM7IE1BQ19DVFJMX1JFRyk7CiAJY3RybCA9IG9sZF9jdHJsICZhbXA7IH5wcml2LSZndDtody0mZ3Q7bGluay5zcGVlZF9tYXNrOwogCi0JaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkgewotCQlzd2l0Y2ggKHNwZWVkKSB7Ci0JCWNhc2UgU1BFRURfMTAwMDA6Ci0JCQljdHJsIHw9IHByaXYtJmd0O2h3LSZndDtsaW5rLnhnbWlpLnNwZWVkMTAwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF81MDAwOgotCQkJY3RybCB8PSBwcml2LSZndDtody0mZ3Q7bGluay54Z21paS5zcGVlZDUwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8yNTAwOgomIzQzOwlzd2l0Y2ggKHNwZWVkKSB7CiYjNDM7CWNhc2UgU1BFRURfMTAwMDAwOgomIzQzOwkJY3RybCB8PSBwcml2LSZndDtody0mZ3Q7bGluay54bGdtaWkuc3BlZWQxMDAwMDA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTUEVFRF81MDAwMDoKJiM0MzsJCWN0cmwgfD0gcHJpdi0mZ3Q7aHctJmd0O2xpbmsueGxnbWlpLnNwZWVkNTAwMDA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTUEVFRF80MDAwMDoKJiM0MzsJCWN0cmwgfD0gcHJpdi0mZ3Q7aHctJmd0O2xpbmsueGxnbWlpLnNwZWVkNDAwMDA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTUEVFRF8yNTAwMDoKJiM0MzsJCWN0cmwgfD0gcHJpdi0mZ3Q7aHctJmd0O2xpbmsueGxnbWlpLnNwZWVkMjUwMDA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTUEVFRF8xMDAwMDoKJiM0MzsJCWN0cmwgfD0gcHJpdi0mZ3Q7aHctJmd0O2xpbmsueGdtaWkuc3BlZWQxMDAwMDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFNQRUVEXzUwMDA6CiYjNDM7CQljdHJsIHw9IHByaXYtJmd0O2h3LSZndDtsaW5rLnhnbWlpLnNwZWVkNTAwMDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFNQRUVEXzI1MDA6CiYjNDM7CQlpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKQogCQkJY3RybCB8PSBwcml2LSZndDtody0mZ3Q7bGluay54Z21paS5zcGVlZDI1MDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQkJfQotCX0gZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9YTEdNSUkpIHsKLQkJc3dpdGNoIChzcGVlZCkgewotCQljYXNlIFNQRUVEXzEwMDAwMDoKLQkJCWN0cmwgfD0gcHJpdi0mZ3Q7aHctJmd0O2xpbmsueGxnbWlpLnNwZWVkMTAwMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BFRURfNTAwMDA6Ci0JCQljdHJsIHw9IHByaXYtJmd0O2h3LSZndDtsaW5rLnhsZ21paS5zcGVlZDUwMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BFRURfNDAwMDA6Ci0JCQljdHJsIHw9IHByaXYtJmd0O2h3LSZndDtsaW5rLnhsZ21paS5zcGVlZDQwMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BFRURfMjUwMDA6Ci0JCQljdHJsIHw9IHByaXYtJmd0O2h3LSZndDtsaW5rLnhsZ21paS5zcGVlZDI1MDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BFRURfMTAwMDA6Ci0JCQljdHJsIHw9IHByaXYtJmd0O2h3LSZndDtsaW5rLnhnbWlpLnNwZWVkMTAwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8yNTAwOgotCQkJY3RybCB8PSBwcml2LSZndDtody0mZ3Q7bGluay5zcGVlZDI1MDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8xMDAwOgotCQkJY3RybCB8PSBwcml2LSZndDtody0mZ3Q7bGluay5zcGVlZDEwMDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQkJfQotCX0gZWxzZSB7Ci0JCXN3aXRjaCAoc3BlZWQpIHsKLQkJY2FzZSBTUEVFRF8yNTAwOgomIzQzOwkJZWxzZQogCQkJY3RybCB8PSBwcml2LSZndDtody0mZ3Q7bGluay5zcGVlZDI1MDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8xMDAwOgotCQkJY3RybCB8PSBwcml2LSZndDtody0mZ3Q7bGluay5zcGVlZDEwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8xMDA6Ci0JCQljdHJsIHw9IHByaXYtJmd0O2h3LSZndDtsaW5rLnNwZWVkMTAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BFRURfMTA6Ci0JCQljdHJsIHw9IHByaXYtJmd0O2h3LSZndDtsaW5rLnNwZWVkMTA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQkJfQomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgU1BFRURfMTAwMDoKJiM0MzsJCWN0cmwgfD0gcHJpdi0mZ3Q7aHctJmd0O2xpbmsuc3BlZWQxMDAwOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgU1BFRURfMTAwOgomIzQzOwkJY3RybCB8PSBwcml2LSZndDtody0mZ3Q7bGluay5zcGVlZDEwMDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFNQRUVEXzEwOgomIzQzOwkJY3RybCB8PSBwcml2LSZndDtody0mZ3Q7bGluay5zcGVlZDEwOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQluZXRkZXZfZXJyKHByaXYtJmd0O2RldiwKJiM0MzsJCQkgICAmIzM0O3Vuc3VwcG9ydGVkIHNwZWVkICVzIG9uICVzLCBsZWF2aW5nIHRoZSBNQUMgZGlzYWJsZWRcbiYjMzQ7LAomIzQzOwkJCSAgIHBoeV9zcGVlZF90b19zdHIoc3BlZWQpLCBwaHlfbW9kZXMoaW50ZXJmYWNlKSk7CiYjNDM7CQlyZXR1cm47CiAJfQogCiAJaWYgKHByaXYtJmd0O3BsYXQtJmd0O2ZpeF9tYWNfc3BlZWQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgc3RtbWFjYCBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBgc3RtbWFjX21hY19saW5rX3VwYCBmdW5jdGlvbiBpbiBgc3RtbWFjX21haW4uY2AuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIGNsZWFybHkgYWltZWQgYXQgaG93IHRoZSBNQUMgc3BlZWQgaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgbGluayBzcGVlZCBhbmQgaW50ZXJmYWNlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cywgJiMzNDtDYW4gdGhpcyBiZSBmdXp6ZWQgZWZmZWN0aXZlbHk/JiMzNDsgVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGV0aGVybmV0IGRyaXZlciDigJMgdGhlIFNUTWljcm9lbGVjdHJvbmljcyAxMC8xMDAvMTAwMC9FUU9TIEV0aGVybmV0IE1BQyDigJMgc28gcmVhbGlzdGljYWxseSwgZGlyZWN0IGZ1enppbmcgdXN1YWxseSBoaW5nZXMgb24gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG9yIGdlbmVyaWMgc3Vic3lzdGVtcy4gSXQmIzM5O3Mgb2Z0ZW4gdG91Z2guCgpXYWl0IGEgc2Vjb25kLCBzeXprYWxsZXIgZG9lcyBoYXZlIG5ldHdvcmsgaW50ZXJmYWNlIGZ1enppbmcgY2FwYWJpbGl0aWVzIHdpdGggdHVuL3RhcCBvciB2ZXRoLiBCdXQgZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyLCBJIG5lZWQgdGhlIGFjdHVhbCBoYXJkd2FyZSBvciBhIHNvbGlkIGVtdWxhdGlvbi4gSXMgYHN0bW1hY2AgZW11bGF0ZWQgaW4gc29tZXRoaW5nIGxpa2UgUUVNVT8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgY2FuIGJlIHJlYWNoZWQgaW4gdGhlIGxhYi4KCk5vdyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGBzdG1tYWNgIGRldmljZSBpcyBhIFBDSSBkZXZpY2Ugb3IgYSBwbGF0Zm9ybSBkZXZpY2UgYmVjYXVzZSBpdCBjaGFuZ2VzIHRoZSBhcHByb2FjaC4gSSBrbm93IGl0JiMzOTtzIGEgcGxhdGZvcm0gZGV2aWNlIHVzdWFsbHkgZm91bmQgb24gQVJNIFNvQ3MgKGxpa2UgU1RNMzIsIFJvY2tjaGlwLCBldGMuKSBvciBjYW4gYmUgYSBQQ0kgZGV2aWNlLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBQQ0kgdmFyaWFudCBoYXMgYW55IHNwZWNpYWwgYmVoYXZpb3JzLCBJIG5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuY2AuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIGEgbW9yZSBzb2xpZCBzdHJhdGVneSB0byBhdHRhY2sgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX3BjaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0PTEwNz1zeW50YXggKGUuZy4gZm9yIFBDSSBtb2R1bGUpOjpcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy5yc3QtMTA4LVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLnJzdDoxMDk6ICAgIG1vZHByb2JlIHN0bW1hY19wY2kgW1x1MDAzY29wdGlvblx1MDAzZT1cdTAwM2NWQUwxXHUwMDNlLFx1MDAzY1ZBTDJcdTAwM2UsLi4uXVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLnJzdC0xMTAtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvTWFrZWZpbGU9NTM9b2JqLSQoQ09ORklHX0RXTUFDX01PVE9SQ09NTSlcdCYjNDM7PSBkd21hYy1tb3RvcmNvbW0ub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvTWFrZWZpbGU6NTQ6c3RtbWFjLXBjaS1vYmpzOj0gc3RtbWFjX3BjaS5vXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0yNT1zdHJ1Y3QgaW50ZWxfcHJpdl9kYXRhIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTM5LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0MDpzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00MS1cdHVuc2lnbmVkIGludCBmdW5jO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjQ1OnN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6NDY6XHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEgKmZ1bmM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTQ3LVx0c2l6ZV90IG5mdW5jcztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTQ5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo1MDpzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNTEtXHRpbnQgKCpzZXR1cCkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05MT1zdGF0aWMgY29uc3QgaW50IGFkbG5fdHNuX2xhbmVfcmVnc1tdID0gezZ9O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTM6c3RhdGljIGludCBzdG1tYWNfcGNpX2ZpbmRfcGh5X2FkZHIoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk0LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkbWlfbGlzdClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTUte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5NjpcdGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSAqZnVuY19kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5NzpcdGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhICpkbWlfZGF0YTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTgtXHRjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZG1pX2lkO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9NzU1PXN0YXRpYyBpbnQgZWhsX3NnbWlpX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy03NzQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjc3NTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfc2dtaWkxZ19pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy03NzYtXHQuc2V0dXAgPSBlaGxfc2dtaWlfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTc3OT1zdGF0aWMgaW50IGVobF9yZ21paV9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNzg5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo3OTA6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gZWhsX3JnbWlpMWdfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNzkxLVx0LnNldHVwID0gZWhsX3JnbWlpX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04MTA9c3RhdGljIGludCBlaGxfcHNlMF9yZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04MTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjgxNzpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMF9yZ21paTFnX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgxOC1cdC5zZXR1cCA9IGVobF9wc2UwX3JnbWlpMWdfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTgyMT1zdGF0aWMgaW50IGVobF9wc2UwX3NnbWlpMWdfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgzOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6ODM5OnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGVobF9wc2UwX3NnbWlpMWdfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODQwLVx0LnNldHVwID0gZWhsX3BzZTBfc2dtaWkxZ19kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9ODU5PXN0YXRpYyBpbnQgZWhsX3BzZTFfcmdtaWkxZ19kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtODY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo4NjY6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gZWhsX3BzZTFfcmdtaWkxZ19pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04NjctXHQuc2V0dXAgPSBlaGxfcHNlMV9yZ21paTFnX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04NzA9c3RhdGljIGludCBlaGxfcHNlMV9zZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04ODctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg4ODpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMV9zZ21paTFnX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg4OS1cdC5zZXR1cCA9IGVobF9wc2UxX3NnbWlpMWdfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTkxMz1zdGF0aWMgaW50IHRnbF9zZ21paV9waHkwX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05MjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjkyMjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyB0Z2xfc2dtaWkxZ19waHkwX2luZm8gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTkyMy1cdC5zZXR1cCA9IHRnbF9zZ21paV9waHkwX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05MjY9c3RhdGljIGludCB0Z2xfc2dtaWlfcGh5MV9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5MzU6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gdGdsX3NnbWlpMWdfcGh5MV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05MzYtXHQuc2V0dXAgPSB0Z2xfc2dtaWlfcGh5MV9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9OTM5PXN0YXRpYyBpbnQgYWRsc19zZ21paV9waHkwX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk0OTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBhZGxzX3NnbWlpMWdfcGh5MF9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NTAtXHQuc2V0dXAgPSBhZGxzX3NnbWlpX3BoeTBfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTk1Mz1zdGF0aWMgaW50IGFkbHNfc2dtaWlfcGh5MV9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTYyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5NjM6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gYWRsc19zZ21paTFnX3BoeTFfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTY0LVx0LnNldHVwID0gYWRsc19zZ21paV9waHkxX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05OTI9c3RhdGljIGludCBhZGxuX3NnbWlpX3BoeTBfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwMTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwMTE6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gYWRsbl9zZ21paTFnX3BoeTBfaW5mbyA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTAxMi1cdC5zZXR1cCA9IGFkbG5fc2dtaWlfcGh5MF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTAxNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTAxNTpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZnVuY19kYXRhIGdhbGlsZW9fc3RtbWFjX2Z1bmNfZGF0YVtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDE2LVx0e1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTAyMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTAyMjpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEgZ2FsaWxlb19zdG1tYWNfZG1pX2RhdGEgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwMjMtXHQuZnVuYyA9IGdhbGlsZW9fc3RtbWFjX2Z1bmNfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwMjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwMjc6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSBpb3QyMDQwX3N0bW1hY19mdW5jX2RhdGFbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTAyOC1cdHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwMzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwMzg6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhIGlvdDIwNDBfc3RtbWFjX2RtaV9kYXRhID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDM5LVx0LmZ1bmMgPSBpb3QyMDQwX3N0bW1hY19mdW5jX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMDc4PXN0YXRpYyBpbnQgcXVhcmtfZGVmYXVsdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTA4OC1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMDg5Olx0cmV0ID0gc3RtbWFjX3BjaV9maW5kX3BoeV9hZGRyKHBkZXYsIHF1YXJrX3BjaV9kbWkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDkwLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTExMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTExNDpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBxdWFya19pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMTE1LVx0LnNldHVwID0gcXVhcmtfZGVmYXVsdF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9MTIzMj1zdGF0aWMgaW50IGludGVsX2V0aF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMjM0LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTIzNTpcdHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm8gPSAoc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqKWlkLVx1MDAzZWRyaXZlcl9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMjM2LVx0c3RydWN0IGludGVsX3ByaXZfZGF0YSAqaW50ZWxfcHJpdjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTc2PXN0cnVjdCBsb29uZ3Nvbl9kYXRhIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTgxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo4MjpzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtODMtXHRpbnQgKCpzZXR1cCkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz0xMzI9c3RhdGljIGludCBsb29uZ3Nvbl9nbWFjX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjE0MjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBsb29uZ3Nvbl9nbWFjX3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNDMtXHQuc2V0dXAgPSBsb29uZ3Nvbl9nbWFjX2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz0xNjU9c3RhdGljIGludCBsb29uZ3Nvbl9nbmV0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjE3NzpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBsb29uZ3Nvbl9nbmV0X3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNzgtXHQuc2V0dXAgPSBsb29uZ3Nvbl9nbmV0X2RhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz00OTg9c3RhdGljIGludCBsb29uZ3Nvbl9kd21hY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTAxLVx0c3RydWN0IHN0bW1hY19yZXNvdXJjZXMgcmVzID0ge307XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjUwMjpcdHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm87XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUwMy1cdHN0cnVjdCBsb29uZ3Nvbl9kYXRhICpsZDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUzNy1cdHBsYXQtXHUwMDNlZml4X3NvY19yZXNldCA9IGxvb25nc29uX2R3bWFjX2ZpeF9yZXNldDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTM4Olx0cGxhdC1cdTAwM2VzdXNwZW5kID0gc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjUzOTpcdHBsYXQtXHUwMDNlcmVzdW1lID0gc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTQwLVx0bGQtXHUwMDNlZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjU0MzpcdGluZm8gPSAoc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqKWlkLVx1MDAzZWRyaXZlcl9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDQtXHRyZXQgPSBpbmZvLVx1MDAzZXNldHVwKHBkZXYsIHBsYXQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jPTE4OD1zdGF0aWMgaW50IG1vdG9yY29tbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0xOTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYzoxOTM6XHRyZXQgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKGRldiwgYnNwX3ByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMTk0LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0yMDg9bW90b3Jjb21tX2RlZmF1bHRfcGxhdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTI0OC1cdHBsYXQtXHUwMDNlY29yZV90eXBlXHRcdD0gRFdNQUNfQ09SRV9HTUFDNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jOjI0OTpcdHBsYXQtXHUwMDNlc3VzcGVuZFx0XHQ9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMjUwLVx0cGxhdC1cdTAwM2VyZXN1bWVcdFx0PSBtb3RvcmNvbW1fcmVzdW1lO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0xMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoxMjppbnQgc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0xMy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTI1LX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzoyNjpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtMjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmM6Mjg6aW50IHN0bW1hY19wY2lfcGxhdF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0yOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTQzLX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYzo0NDpFWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy00NS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmgtOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaDo5OmludCBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaDoxMDppbnQgc3RtbWFjX3BjaV9wbGF0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaC0xMS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTk6c3RydWN0IHN0bW1hY19wY2lfaW5mbyB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjAtXHRpbnQgKCpzZXR1cCkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTMzPXN0YXRpYyBpbnQgc3RtbWFjX2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtNDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6NTA6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gc3RtbWFjX3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTUxLVx0LnNldHVwID0gc3RtbWFjX2RlZmF1bHRfZGF0YSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9NTQ9c3RhdGljIGludCBzbnBzX2dtYWM1X2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEwMjpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBzbnBzX2dtYWM1X3BjaV9pbmZvID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwMy1cdC5zZXR1cCA9IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTA3OiAqIHN0bW1hY19wY2lfcHJvYmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMDgtICpcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTE3LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjExODpzdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTE5LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTIwLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxMjE6XHRzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC1cdTAwM2Vkcml2ZXJfZGF0YTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMjItXHRzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE3OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODA6XHRwbGF0LVx1MDAzZXN1c3BlbmQgPSBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODE6XHRwbGF0LVx1MDAzZXJlc3VtZSA9IHN0bW1hY19wY2lfcGxhdF9yZXN1bWU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTgyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTg3OiAqIHN0bW1hY19wY2lfcmVtb3ZlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTg4LSAqXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5MS0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxOTI6c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTkzLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDQ6XHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNTpcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwNi1cdHsgUENJX0RFVklDRV9EQVRBKFNZTk9QU1lTLCBHTUFDNV9JRCwgXHUwMDI2c25wc19nbWFjNV9wY2lfaW5mbykgfSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjEwPU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzdG1tYWNfaWRfdGFibGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMTI6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHN0bW1hY19wY2lfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxMy1cdC5uYW1lID0gU1RNTUFDX1JFU09VUkNFX05BTUUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjE0LVx0LmlkX3RhYmxlID0gc3RtbWFjX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIxNTpcdC5wcm9iZSA9IHN0bW1hY19wY2lfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjE2Olx0LnJlbW92ZSA9IHN0bW1hY19wY2lfcmVtb3ZlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxNy1cdC5kcml2ZXIgICAgICAgICA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIyMjptb2R1bGVfcGNpX2RyaXZlcihzdG1tYWNfcGNpX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjIzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODcxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgYHN0bW1hY2AgRHJpdmVyczogQSBTdHJhdGVnaWMgQXBwcm9hY2gqKgoKT2theSwgc28gYHN0bW1hY2AgaGFzIFBDSSBkcml2ZXJzLiBUaGF0JiMzOTtzIGdvb2QgbmV3czsgYHN0bW1hY19wY2kuY2AsIGBkd21hYy1pbnRlbC5jYCwgYGR3bWFjLWxvb25nc29uLmNgLCBgZHdtYWMtbW90b3Jjb21tLmNgIOKAkyBJIHNlZSB0aGUgcG90ZW50aWFsLiBNeSBmaXJzdCB0aG91Z2h0IGlzIFFFTVUsIHNpbmNlIFBDSSBkcml2ZXJzIHVzdWFsbHkgcGxheSB3ZWxsIHdpdGggdmlydHVhbCBlbnZpcm9ubWVudHMuIElmIFFFTVUgZW11bGF0ZWQgaXQsIHdlJiMzOTtkIGhhdmUgYSBzdHJhaWdodGZvcndhcmQgZnV6emluZyBzZXR1cC4gQnV0IGRvZXMgUUVNVSBlbXVsYXRlIGBzdG1tYWNgIHNwZWNpZmljYWxseT8gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBRRU1VIG5ldHdvcmsgZGV2aWNlIGxpc3QsIEkgc2VlIGEgZ29vZCBzZWxlY3Rpb24gb2YgZW11bGF0ZWQgTklDcyAoYGlteF9mZWMuY2AsIGBjYWRlbmNlX2dlbS5jYCwgYGUxMDAwLmNgLCBldGMuKSwgYnV0IG5vIGBzdG1tYWNgLiBIbW0uCgpXYWl0LCB0aG91Z2gsIGBzdG1tYWNgIGlzIHBvcHVsYXIgb24gQVJNIGJvYXJkcywgYW5kIFFFTVUgaGFzIGRlY2VudCBBUk0gZW11bGF0aW9uLiBJcyB0aGVyZSBhIGhvb2sgdGhlcmU/IERvZXMgUUVNVSBlbXVsYXRlIHRoZSBgc3RtbWFjYCBpbiBzb21lIEFSTSBib2FyZCBlbXVsYXRpb25zPyBUaGlzIGNvdWxkIGJlIGEgcHJvbWlzaW5nIGF2ZW51ZSwgYnV0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgc3l6a2FsbGVyLiBEb2VzIHN5emthbGxlciBvZmZlciBhIHBhdGggdG8gZnV6emluZyB0aGlzPyBTeXprYWxsZXIgb2Z0ZW4gdXNlcyB2UENJIGZvciBQQ0kgZGV2aWNlIGZ1enppbmcsIHByb3ZpZGVkIHRoZSBkcml2ZXIgYmluZHMgdG8gaXQuIFRoYXQmIzM5O3MgdGhlIGtleS4gQnV0IHdhaXQgYSBtaW51dGUuLi4gc3l6a2FsbGVyIGhhcyBgc3l6X3BjaV9kZXZpY2VgISBUaGlzIGlzIGludGVyZXN0aW5nLi4uIEl0IHNlZW1zIGxpa2UgSSBjYW4gaW5qZWN0IEFOWSBQQ0kgZGV2aWNlIHdpdGggdmVuZG9yIGFuZCBkZXZpY2UgSURzIHVzaW5nIHRoaXMgcHNldWRvLXN5c2NhbGwsIGEgaHVnZSBwbHVzISAKCk9rYXksIG5vdyBpdCYjMzk7cyBhYm91dCBjaGVja2luZyB0aGUgZHJpdmVyIGJpbmRpbmdzLiBUaGUgYHN0bW1hY19wY2lfZHJpdmVyYCBiaW5kcyB0byBgUENJX0RFVklDRV9EQVRBYCBlbnRyaWVzLi4uIHNwZWNpZmljYWxseSwgYFNUTU1BQ2AsIGBTVE1JQ1JPYCwgYW5kIGBTWU5PUFNZU2AuIFRoaXMgc291bmRzIGxpa2UgaXQgY291bGQgYmUgbXkgdGlja2V0LiBJIG5lZWQgdG8gZ2V0IHRoZSB2ZW5kb3IvZGV2aWNlIElEcyBmcm9tIHRoZXNlIGRlZmluaXRpb25zLiBPbmNlIEkgaGF2ZSB0aGUgdmVuZG9yIGFuZCBkZXZpY2UgSURzLCBzeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gY3JlYXRlIGFuIGluc3RhbmNlIGFuZCBJIGNhbiBmb2N1cyBteSBlZmZvcnRzIG9uIHRoYXQgZHJpdmVyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BDSV9ERVZJQ0VfREFUQVxcKFNUTU1BQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDQ6XHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwNS1cdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDM3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgU1RNTUFDIGluIFBDSSBJRCBEZWZpbml0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGtlcm5lbCYjMzk7cyBQQ0kgSUQgZGF0YWJhc2UsIHNwZWNpZmljYWxseSBgaW5jbHVkZS9saW51eC9wY2lfaWRzLmhgLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gYFNUTU1BQ2AgdGhlcmUuIFRoaXMgaXMgYSBjb21tb24gYW5kIHVzdWFsbHkgZWZmaWNpZW50IHdheSB0byBpZGVudGlmeSBhbmQgdW5kZXJzdGFuZCB0aGUgUENJIGRldmljZSBJRHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBTVE1NQUMgRXRoZXJuZXQgTUFDIGNvbnRyb2xsZXIsIGEgY3JpdGljYWwgZmlyc3Qgc3RlcCBpbiBkZWJ1Z2dpbmcgb3Igd29ya2luZyB3aXRoIHRoZSBkcml2ZXIuIEkgbmVlZCB0aG9zZSB2ZW5kb3IgYW5kIGRldmljZSBJRHMgdG8gcHJvcGVybHkgZmlsdGVyIGFuZCBjbGFzc2lmeSB0aGUgaGFyZHdhcmUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BDSV9WRU5ET1JfSURfU1RNTUFDJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xOTI9c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5Ny0vKiBzeW50aGV0aWMgSUQsIG5vIG9mZmljaWFsIHZlbmRvciAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjE5ODojZGVmaW5lIFBDSV9WRU5ET1JfSURfU1RNTUFDXHRcdDB4MDcwMFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM5MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZyB0aGlzIERyaXZlcioqCgpPa2F5LCBzbyB0aGlzIGRldmljZSBoYXMgYSBzeW50aGV0aWMgSUQgb2YgYDB4MDcwMGAuIFRoZSBrZXkgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emluZyBjYW4gYmluZCB0byBpdC4gSWYgaXQgY2FuLCB3ZSYjMzk7cmUgaW4gYnVzaW5lc3MuIEJ1dCwgZG9lcyB0aGUgZHJpdmVyIGZ1bmN0aW9uIGNvcnJlY3RseSB3aXRob3V0IHJlYWwgaGFyZHdhcmU/IFRoYXQmIzM5O3MgdGhlIGNydXggb2YgaXQuCgpJZiB0aGUgZHJpdmVyIHByb2JlcyBzdWNjZXNzZnVsbHksIGl0JiMzOTtsbCB0cnkgdG8gcmVhZCBhbmQgd3JpdGUgdG8gTWVtb3J5LU1hcHBlZCBJL08gKE1NSU8pIHJlZ2lzdGVycy4gV2l0aG91dCBhY3R1YWwgaGFyZHdhcmUgcHJlc2VudCwgaXQgd2lsbCByZWFkIGAweGZmZmZmZmZmYCBvciB3aGF0ZXZlciB0aGUgUENJIHN1YnN5c3RlbSByZXR1cm5zIGZvciB1bm1hcHBlZCBtZW1vcnksIG9yIHRoZSBzeXprYWxsZXIgUENJIGZ1enplciB3aWxsIHByb3ZpZGUgcmFuZG9tIGRhdGEgZm9yIE1NSU8gcmVhZHMuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCBzeXprYWxsZXImIzM5O3MgYHN5el9wY2lfZGV2aWNlYCBkb2VzbiYjMzk7dCBwZXJmZWN0bHkgZW11bGF0ZSBNTUlPLCBidXQgaXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmdXp6aW5nLgoKTXkgdGhpbmtpbmcgaXMsIGBzdG1tYWNfbWFjX2xpbmtfdXBgIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBQSFkgbGluayBnb2VzIHVwLiBUaGlzIGlzIGludGVyZXN0aW5nLiBJcyB0aGlzIGZ1bmN0aW9uIGFjY2Vzc2libGUgdGhyb3VnaCBzeXprYWxsZXI/IElmIHRoZSBkcml2ZXIgcHJvYmVzIHN1Y2Nlc3NmdWxseSDigJMgYW5kIHRoYXQmIzM5O3MgdGhlIGJpZyAmIzM5O2lmJiMzOTsg4oCTIHdoaWNoIGNvdWxkIGJlIGZhY2lsaXRhdGVkIGJ5IHNvbWUgUENJIGZ1enppbmcsIHRoZW4gaXQgd2lsbCByZWdpc3RlciBhIG5ldGRldi4gVGhlbiwgY29tbWFuZHMgbGlrZSBgaXAgbGluayBzZXQgZXRoWCB1cGAgc2hvdWxkIG9wZW4gdGhlIGRldmljZS4gVGhlIFBIWSBsaW5rIGNvbWluZyB1cCBzaG91bGQgdGhlbiB0cmlnZ2VyIHRoZSBgc3RtbWFjX21hY19saW5rX3VwYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBgc3RtbWFjYCB1dGlsaXplcyBgcGh5bGlua2AuIFRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBMZXQmIzM5O3MgY2hlY2sgc3BlY2lmaWNhbGx5IGlmIGBzdG1tYWNfbWFjX2xpbmtfdXBgIGlzIHJlYWNoYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX21hY19saW5rX3VwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MTA1Nj1zdGF0aWMgdm9pZCBzdG1tYWNfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTEwNjgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjEwNjk6c3RhdGljIHZvaWQgc3RtbWFjX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0xMDcwLVx0XHRcdCAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MTI0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBzdG1tYWNfcGh5bGlua19tYWNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTI1MS1cdC5tYWNfbGlua19kb3duID0gc3RtbWFjX21hY19saW5rX2Rvd24sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjEyNTI6XHQubWFjX2xpbmtfdXAgPSBzdG1tYWNfbWFjX2xpbmtfdXAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTEyNTMtXHQubWFjX2Rpc2FibGVfdHhfbHBpID0gc3RtbWFjX21hY19kaXNhYmxlX3R4X2xwaSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzODAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBzdG1tYWMgRHJpdmVyIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgYSBwaHlsaW5rIGNhbGxiYWNrLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBjYW4gd2UgZnV6eiB0aGlzPyBUaGUgcGF0Y2ggYWx0ZXJzIGBzdG1tYWNfbWFjX2xpbmtfdXBgLCBzcGVjaWZpY2FsbHkgdG8gZGVhbCB3aXRoIHRoZXNlIG5ldyBoaWdoLXNwZWVkIHNldHRpbmdzOiBgU1BFRURfMTAwMDAwYCwgYFNQRUVEXzUwMDAwYCwgYFNQRUVEXzQwMDAwYCwgYW5kIGBTUEVFRF8yNTAwMGAgZm9yIGBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSWAgYW5kIGBQSFlfSU5URVJGQUNFX01PREVfWExHTUlJYC4KCk5vdywgaWYgSSByZWNhbGwgY29ycmVjdGx5LCB0aGUgY29kZSBvcmlnaW5hbGx5IGhhZCBhIG1vcmUgZ3JhbnVsYXIgYXBwcm9hY2gsIHdpdGggYSBkZWRpY2F0ZWQgY2hlY2sgZm9yIGBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSWAgYW5kIGl0cyBzcGVlZHMuIEl0IGxvb2tlZCBzb21ldGhpbmcgbGlrZSB0aGlzOgoKYGBgYwoJaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSkgewoJCXN3aXRjaCAoc3BlZWQpIHsKCQljYXNlIFNQRUVEXzEwMDAwOgouLi4KYGBgCgpUaGUgbmV3IGNvZGUgc2VlbXMgdG8gaGF2ZSBhIHVuaWZpZWQgYHN3aXRjaCAoc3BlZWQpYCBzdGF0ZW1lbnQ6CgpgYGBjCglzd2l0Y2ggKHNwZWVkKSB7CgljYXNlIFNQRUVEXzEwMDAwMDoKCQljdHJsIHw9IHByaXYtJmd0O2h3LSZndDtsaW5rLnhsZ21paS5zcGVlZDEwMDAwMDsKCQlicmVhazsKLi4uCmBgYAoKU28sIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZTsgdGhhdCYjMzk7cyBjbGVhci4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIG1vZGlmaWNhdGlvbiB3b3J0aHkgb2YgZnV6emluZz8gSXQgZGVmaW5pdGVseSBpbnRyb2R1Y2VzIG5ldyBjb2RlIHBhdGhzLCBkZWFsaW5nIHdpdGggdGhlc2UgaGlnaGVyIHNwZWVkcy4gSWYgd2UgY2FuIGVuYWJsZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBsaWtlIGBDT05GSUdfU1RNTUFDX0VUSGAsIGBDT05GSUdfU1RNTUFDX1BDSWAsIGFuZCBgQ09ORklHX0RXTUFDX0lOVEVMYCwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciB0aGlzIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGBzdG1tYWNgIHRvIGRldGVybWluZSB0aGUgYmVzdCBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNUTU1BQ19FVEgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzoyOmNvbmZpZyBTVE1NQUNfRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTVE1pY3JvZWxlY3Ryb25pY3MgTXVsdGktR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNzEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBTVE1NQUMgUENJIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIFBDSSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoYXQgc3BlY2lmaWMgZHJpdmVyLiBMZXQmIzM5O3Mgc2VlLi4uIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSXQgc2hvdWxkIGNvbnRhaW4gYWxsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCByZWxhdGVkIHRvIGVuYWJsaW5nIFBDSSBzdXBwb3J0IHdpdGhpbiB0aGF0IGRyaXZlci4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgZGVwZW5kZW5jaWVzLCBtYXliZSBjaGVjayBmb3IgYW55IHNwZWNpZmljIHZlbmRvci1zcGVjaWZpYyBxdWlya3MsIGFuZCBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBQQ0kgc3VwcG9ydCBpcyBtYW5hZ2VkIHdpdGhpbiB0aGUgU1RNTUFDIGRyaXZlciBjb2RlIGJhc2UuIEkgZXhwZWN0IHRvIGZpbmQgb3B0aW9ucyByZWxhdGVkIHRvIHNlbGVjdGluZyB0aGUgUENJIGJ1cywgZGVmaW5pbmcgZGV2aWNlIElEcywgb3IgcG9zc2libHkgZW5hYmxpbmcgc3BlY2lmaWMgUEhZIGNvbmZpZ3VyYXRpb25zIHRpZWQgdG8gUENJLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1RNTUFDX1BDSSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM5OD1jb25maWcgRFdNQUNfTU9UT1JDT01NXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjQwNzpjb25maWcgU1RNTUFDX1BDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDgtXHR0cmlzdGF0ZSBcJiMzNDtTVE1NQUMgUENJIGJ1cyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTI2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBTVE1NQUMgUENJIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBTVE1NQUNfUENJYCBvcHRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyIHdoZW4gaXQmIzM5O3MgdXNlZCB3aXRoIFBDSSBpbnRlcmZhY2VzLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgcGFydGljdWxhciBkcml2ZXIgaGFuZGxlcyBQQ0ktc3BlY2lmaWMgZmVhdHVyZXMsIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgbW9kdWxlcywgYW5kIGFueSBwb3RlbnRpYWwgY2F2ZWF0cyBvciBjb25zaWRlcmF0aW9ucyB3aGVuIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzLiBJIGFudGljaXBhdGUgdGhlIEtjb25maWcgZmlsZSB3aWxsIG91dGxpbmUgdGhlIGRlcGVuZGVuY2llcyBvbiB0aGUgYFBDSWAgYnVzIGluZnJhc3RydWN0dXJlLCB3aGF0IG90aGVyIGZlYXR1cmVzIG1pZ2h0IGJlIGNvdXBsZWQgd2l0aCBgU1RNTUFDX1BDSWAgc3VjaCBhcyBETUEgb3Igc3BlY2lmaWMgaGFyZHdhcmUgcmV2aXNpb25zLCBhbmQgd2hhdCBlZmZlY3QgdGhpcyBjb25maWd1cmF0aW9uIG1pZ2h0IGhhdmUgb24gdGhlIG92ZXJhbGwgc3lzdGVtIGltYWdlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGRpZmZlcmVudCBQQ0kgaW50ZXJydXB0IG1vZGVscywgcG93ZXIgbWFuYWdlbWVudCB3aXRoaW4gdGhlIFBDSSBjb250ZXh0LCBhbmQgaG93IGl0IGRldGVjdHMgYW5kIGNvbmZpZ3VyZXMgdGhlIGhhcmR3YXJlIGJhc2VkIG9uIFBDSSBkZXZpY2UgSURzLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gYXNzZXNzIHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gZm9yIGEgZ2l2ZW4gaGFyZHdhcmUgcGxhdGZvcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzkwOlx0XHRkZWZhdWx0IE1BQ0hfTE9PTkdTT042NFxuIDM5MTpcdFx0ZGVwZW5kcyBvbiAoTUFDSF9MT09OR1NPTjY0IHx8IENPTVBJTEVfVEVTVCkgXHUwMDI2XHUwMDI2IFBDSVxuIDM5MjpcdFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXG4gMzkzOlx0XHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxuIDM5NDpcdFx0aGVscFxuIDM5NTpcdFx0ICBUaGlzIHNlbGVjdHMgdGhlIExPT05HU09OIFBDSSBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIsXG4gMzk2Olx0XHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gTG9vbmdzb24tMksxMDAwIFNvQyBhbmQgTFM3QTEwMDAgYnJpZGdlLlxuIDM5NzpcdFxuIDM5ODpcdGNvbmZpZyBEV01BQ19NT1RPUkNPTU1cbiAzOTk6XHRcdHRyaXN0YXRlIFwmIzM0O01vdG9yY29tbSBQQ0kgRFdNQUMgc3VwcG9ydFwmIzM0O1xuIDQwMDpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiA0MDE6XHRcdHNlbGVjdCBNT1RPUkNPTU1fUEhZXG4gNDAyOlx0XHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxuIDQwMzpcdFx0aGVscFxuIDQwNDpcdFx0ICBUaGlzIGVuYWJsZXMgZ2x1ZSBkcml2ZXIgZm9yIE1vdG9yY29tbSBEV01BQy1iYXNlZCBQQ0kgRXRoZXJuZXRcbiA0MDU6XHRcdCAgY29udHJvbGxlcnMuIEN1cnJlbnRseSBvbmx5IFlUNjgwMSBpcyBzdXBwb3J0ZWQuXG4gNDA2Olx0XG4gNDA3Olx0Y29uZmlnIFNUTU1BQ19QQ0lcbiA0MDg6XHRcdHRyaXN0YXRlIFwmIzM0O1NUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcJiMzNDtcbiA0MDk6XHRcdGRlcGVuZHMgb24gUENJXG4gNDEwOlx0XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbiA0MTE6XHRcdHNlbGVjdCBTVE1NQUNfTElCUENJXG4gNDEyOlx0XHRoZWxwXG4gNDEzOlx0XHQgIFRoaXMgc2VsZWN0cyB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgYnVzIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWMgZHJpdmVyLlxuIDQxNDpcdFx0ICBUaGlzIGRyaXZlciB3YXMgdGVzdGVkIG9uIFhMSU5YIFhDMlYzMDAwIEZGMTE1MkFNVDAyMjFcbiA0MTU6XHRcdCAgRDEyMTU5OTRBIFZJUlRFWCBGUEdBIGJvYXJkIGFuZCBTTlBTIFFvUyBJUEsgUHJvdG90eXBpbmcgS2l0LlxuIDQxNjpcdFxuIDQxNzpcdFx0ICBJZiB5b3UgaGF2ZSBhIGNvbnRyb2xsZXIgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLlxuIDQxODpcdFxuIDQxOTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMzMQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNUTU1BQyBEcml2ZXIgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMsIGBTVE1NQUNfRVRIYCBhbmQgYFNUTU1BQ19QQ0lgLiBNeSBwcmltYXJ5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGBzdG1tYWNfbWFjX2xpbmtfdXBgIGZ1bmN0aW9uIGNhbiBldmVuIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LiBJJiMzOTttIHRoaW5raW5nLCBpZiBzeXprYWxsZXIgdGhyb3dzIGEgUENJIGRldmljZSBhdCB0aGUgc3lzdGVtIHdpdGggdGhhdCB2ZW5kb3IgSUQsIDB4MDcwMCwgdGhlIGBzdG1tYWNfcGNpYCBkcml2ZXIgaXMgZ29pbmcgdG8gdHJ5IHRvIHRha2Ugb3duZXJzaGlwIG9mIGl0LCByaWdodD8KClRoZW4sIHRoZSBkcml2ZXIgc2hvdWxkIG1hcCB0aGUgUENJIEJBUnMgYW5kIGJlZ2luIGl0cyBNQUMgaW5pdGlhbGl6YXRpb24gcm91dGluZS4gQnV0LCBiZWNhdXNlIHRoZSBoYXJkd2FyZSBpcyBlc3NlbnRpYWxseSBzaW11bGF0ZWQsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgcG90ZW50aWFsIHBpdGZhbGxzIGR1cmluZyB0aGlzIHByb2Nlc3MuIEl0IGNvdWxkIGZhaWwgcHJldHR5IGVhcmx5IG9uLCBtYXliZSBnZXR0aW5nIHN0dWNrIHdhaXRpbmcgZm9yIGEgcmVzZXQgYml0LCBvciBtYXliZSBpdCB0cmllcyB0byByZWFkIHRoZSBNQUMgdmVyc2lvbiByZWdpc3RlciBhbmQgcmVwb3J0cyBhbiBlcnJvciBzaW5jZSBpdCBjYW4mIzM5O3QgZmluZCBhIHZhbGlkIHJlc3BvbnNlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBzdG1tYWNfZHZyX3Byb2JlYCBmdW5jdGlvbiBpbiBgc3RtbWFjX21haW4uY2AgaW4gZGV0YWlsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIGl0JiMzOTtzIGNhcGFibGUgb2Ygc3VjY2VlZGluZywgZXZlbiB3aXRoIHRoZSBzaW11bGF0ZWQgTU1JTyBhY2Nlc3Mgd2UmIzM5O2xsIGhhdmUgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgcHJvYmUgZnVuY3Rpb24gY2FuIG92ZXJjb21lIHRoZSBsYWNrIG9mIGFjdHVhbCBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX2R2cl9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jPTI4Mz1zdGF0aWMgaW50IGR3Y19ldGhfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jLTMyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmM6MzMwOlx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtZHdjLXFvcy1ldGguYy0zMzEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLXBsYXQuYz00Mj1zdGF0aWMgaW50IGludGVsX2V0aF9wbGF0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jLTExNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLXBsYXQuYzoxMTg6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC1wbGF0LmMtMTE5LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEyMzI9c3RhdGljIGludCBpbnRlbF9ldGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTMwOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTMxMDpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIFx1MDAyNnJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzMTEtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jPTM3ND1zdGF0aWMgaW50IGlwcTgwNnhfZ21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWlwcTgwNnguYy00ODItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmM6NDgzOlx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWlwcTgwNnguYy00ODQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz00OTg9c3RhdGljIGludCBsb29uZ3Nvbl9kd21hY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTYxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1NjI6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0LCBcdTAwMjZyZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NjMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYz00Mj1zdGF0aWMgaW50IGxwYzE4eHhfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmMtNjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmM6Njg6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbHBjMTh4eC5jLTY5LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jPTU5OT1zdGF0aWMgaW50IG1lZGlhdGVrX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYy02NDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZWRpYXRlay5jOjY0MjpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lZGlhdGVrLmMtNjQzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jPTQ3PXN0YXRpYyBpbnQgbWVzb242X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb24uYy03Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmM6NzM6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb24uYy03NC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jPTM4Mj1zdGF0aWMgaW50IG1lc29uOGJfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbjhiLmMtNDYzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVzb244Yi5jOjQ2NDpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbjhiLmMtNDY1LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0yOTM9c3RhdGljIGludCBtb3RvcmNvbW1fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0zNTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYzozNTk6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdCwgXHUwMDI2cmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jLTM2MC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jPTQ4PXN0YXRpYyBpbnQgcnpuMV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYy02Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYzo2ODpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtNjktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jPTM1PXN0YXRpYyBpbnQgc29waGdvX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmMtNjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYzo2NTpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFx1MDAyNnN0bW1hY19yZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmMtNjYtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNwYWNlbWl0LmM9MTQ3PXN0YXRpYyBpbnQgc3BhY2VtaXRfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jLTIwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNwYWNlbWl0LmM6MjA3Olx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zcGFjZW1pdC5jLTIwOC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYz05MD1zdGF0aWMgaW50IHN0YXJmaXZlX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYy0xNTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jOjE1MzpcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jLTE1NC19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYz01MjU9c3RhdGljIGludCBzdG0zMl9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0bTMyLmMtNTc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYzo1Nzk6XHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0X2RhdCwgXHUwMDI2c3RtbWFjX3Jlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jLTU4MC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYz0xMTA1PXN0YXRpYyBpbnQgc3VuOGlfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jOjEyMDI6XHQvKiB0aGUgTUFDIGlzIHJ1bnRpbWUgc3VzcGVuZGVkIGFmdGVyIHN0bW1hY19kdnJfcHJvYmUoKSwgc28gd2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwMy1cdCAqIG5lZWQgdG8gZW5zdXJlIHRoZSBNQUMgcmVzdW1lIGJhY2sgYmVmb3JlIG90aGVyIG9wZXJhdGlvbnMgc3VjaFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwOC1cdC8qIFRoZSBtdXggbXVzdCBiZSByZWdpc3RlcmVkIGFmdGVyIHBhcmVudCBNRElPXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jOjEyMDk6XHQgKiBzbyBhZnRlciBzdG1tYWNfZHZyX3Byb2JlKClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIxMC1cdCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM9MjE0PXN0YXRpYyBpbnQgdGVncmFfbWdiZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmMtMzc1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYzozNzY6XHRlcnIgPSBzdG1tYWNfZHZyX3Byb2JlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwbGF0LCBcdTAwMjZyZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYy0zNzctXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmM9MjA1PXN0YXRpYyBpbnQgdmlzY29udGlfZXRoX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYy0yMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jOjIzNzpcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXRfZGF0LCBcdTAwMjZzdG1tYWNfcmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmMtMjM4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MTM9dm9pZCBzdG1tYWNfZHZyX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmg6NDE0OmludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTQxNS1cdFx0ICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc3Nz1FWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGxhdF9kYXRfYWxsb2MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03Nzc4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3Nzc5OnN0YXRpYyBpbnQgX19zdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzc4MC1cdFx0XHQgICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODA4MS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODA4MjogKiBzdG1tYWNfZHZyX3Byb2JlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwODMtICogQGRldjogZGV2aWNlIHBvaW50ZXJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwOTAtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgwOTE6aW50IHN0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDkyLVx0XHQgICAgIHN0cnVjdCBzdG1tYWNfcmVzb3VyY2VzICpyZXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTAxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTAyOlx0cmV0ID0gX19zdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIHJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMDMtXHRpZiAocmV0IFx1MDAyNlx1MDAyNiBwbGF0X2RhdC1cdTAwM2VleGl0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEwNy19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgxMDg6RVhQT1JUX1NZTUJPTF9HUEwoc3RtbWFjX2R2cl9wcm9iZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMDktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTExOD1zdGF0aWMgaW50IHN0bW1hY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODM6XHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdCwgXHUwMDI2cmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jPTg0OD1pbnQgc3RtbWFjX3BsdGZyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmMtODU2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmM6ODU3Olx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBsYXQsIHJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy04NTgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTkwNwoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBtaW5kIGlzIGp1bXBpbmcgYXJvdW5kIGEgYml0IGhlcmUsIGZvY3VzaW5nIG9uIHRoaXMgYF9fc3RtbWFjX2R2cl9wcm9iZWAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgYnVsayBvZiB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBTVE1NQUMgZHJpdmVyIGhhcHBlbnMuIFRoYXQgbWFrZXMgbWUgdGhpbmsuLi4gaWYgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIHdpdGggdGhlIGhhcmR3YXJlLCBlc3BlY2lhbGx5IHNvbWV0aGluZyBiYXNpYyBsaWtlIE1NSU8gKE1lbW9yeS1NYXBwZWQgSS9PKSBhY2Nlc3MsIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSBpdCBmYWlsICplYXJseSogaW4gdGhpcyBwcm9iZSBmdW5jdGlvbi4gU28sIHRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGNhbiBJIGZvcmNlIGEgZmFpbHVyZSBieSBwcm92aWRpbmcgZmFrZSBNTUlPIGFuZCBzZWUgd2hhdCBoYXBwZW5zPyBUaGlzIHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgYXZlbnVlIGZvciBkZWJ1Z2dpbmcuIEkgd2FudCB0byBzZWUgaG93IHJvYnVzdCB0aGUgZXJyb3IgaGFuZGxpbmcgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc3NzksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc3Nzk6XHRzdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXG43NzgwOlx0XHRcdFx0ICAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcbjc3ODE6XHRcdFx0XHQgICAgICBzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyAqcmVzKVxuNzc4MjpcdHtcbjc3ODM6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDtcbjc3ODQ6XHRcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdjtcbjc3ODU6XHRcdGludCBpLCByZXQgPSAwO1xuNzc4NjpcdFx0dTggcnhxO1xuNzc4NzpcdFxuNzc4ODpcdFx0aWYgKCFwbGF0X2RhdC1cdTAwM2VkbWFfY2ZnIHx8ICFwbGF0X2RhdC1cdTAwM2VkbWFfY2ZnLVx1MDAzZXBibCkge1xuNzc4OTpcdFx0XHRkZXZfZXJyKGRldmljZSwgXCYjMzQ7aW52YWxpZCBETUEgY29uZmlndXJhdGlvblxcblwmIzM0Oyk7XG43NzkwOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzc5MTpcdFx0fVxuNzc5MjpcdFxuNzc5MzpcdFx0bmRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXZfbXFzKGRldmljZSwgc2l6ZW9mKHN0cnVjdCBzdG1tYWNfcHJpdiksXG43Nzk0Olx0XHRcdFx0XHQgICAgICAgTVRMX01BWF9UWF9RVUVVRVMsIE1UTF9NQVhfUlhfUVVFVUVTKTtcbjc3OTU6XHRcdGlmICghbmRldilcbjc3OTY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG43Nzk3Olx0XG43Nzk4Olx0XHRTRVRfTkVUREVWX0RFVihuZGV2LCBkZXZpY2UpO1xuNzc5OTpcdFxuNzgwMDpcdFx0cHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuNzgwMTpcdFx0cHJpdi1cdTAwM2VkZXZpY2UgPSBkZXZpY2U7XG43ODAyOlx0XHRwcml2LVx1MDAzZWRldiA9IG5kZXY7XG43ODAzOlx0XG43ODA0Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNVExfTUFYX1JYX1FVRVVFUzsgaSYjNDM7JiM0MzspXG43ODA1Olx0XHRcdHU2NF9zdGF0c19pbml0KFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLnJ4cV9zdGF0c1tpXS5uYXBpX3N5bmNwKTtcbjc4MDY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1UTF9NQVhfVFhfUVVFVUVTOyBpJiM0MzsmIzQzOykge1xuNzgwNzpcdFx0XHR1NjRfc3RhdHNfaW5pdChcdTAwMjZwcml2LVx1MDAzZXhzdGF0cy50eHFfc3RhdHNbaV0ucV9zeW5jcCk7XG43ODA4Olx0XHRcdHU2NF9zdGF0c19pbml0KFx1MDAyNnByaXYtXHUwMDNleHN0YXRzLnR4cV9zdGF0c1tpXS5uYXBpX3N5bmNwKTtcbjc4MDk6XHRcdH1cbjc4MTA6XHRcbjc4MTE6XHRcdHByaXYtXHUwMDNleHN0YXRzLnBjcHVfc3RhdHMgPVxuNzgxMjpcdFx0XHRkZXZtX25ldGRldl9hbGxvY19wY3B1X3N0YXRzKGRldmljZSwgc3RydWN0IHN0bW1hY19wY3B1X3N0YXRzKTtcbjc4MTM6XHRcdGlmICghcHJpdi1cdTAwM2V4c3RhdHMucGNwdV9zdGF0cylcbjc4MTQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG43ODE1Olx0XG43ODE2Olx0XHRzdG1tYWNfc2V0X2V0aHRvb2xfb3BzKG5kZXYpO1xuNzgxNzpcdFx0cHJpdi1cdTAwM2VwYXVzZV90aW1lID0gcGF1c2U7XG43ODE4Olx0XHRwcml2LVx1MDAzZXBsYXQgPSBwbGF0X2RhdDtcbjc4MTk6XHRcdHByaXYtXHUwMDNlaW9hZGRyID0gcmVzLVx1MDAzZWFkZHI7XG43ODIwOlx0XHRwcml2LVx1MDAzZWRldi1cdTAwM2ViYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylyZXMtXHUwMDNlYWRkcjtcbjc4MjE6XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VkbWFfY2ZnLVx1MDAzZW11bHRpX21zaV9lbiA9XG43ODIyOlx0XHRcdChwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX01VTFRJX01TSV9FTik7XG43ODIzOlx0XG43ODI0Olx0XHRwcml2LVx1MDAzZWRldi1cdTAwM2VpcnEgPSByZXMtXHUwMDNlaXJxO1xuNzgyNTpcdFx0cHJpdi1cdTAwM2V3b2xfaXJxID0gcmVzLVx1MDAzZXdvbF9pcnE7XG43ODI2Olx0XHRwcml2LVx1MDAzZXNmdHlfaXJxID0gcmVzLVx1MDAzZXNmdHlfaXJxO1xuNzgyNzpcdFxuNzgyODpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfTVVMVElfTVNJX0VOKSB7XG43ODI5Olx0XHRcdHJldCA9IHN0bW1hY19tc2lfaW5pdChwcml2LCByZXMpO1xuNzgzMDpcdFx0XHRpZiAocmV0KVxuNzgzMTpcdFx0XHRcdHJldHVybiByZXQ7XG43ODMyOlx0XHR9XG43ODMzOlx0XG43ODM0Olx0XHRpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihyZXMtXHUwMDNlbWFjKSlcbjc4MzU6XHRcdFx0ZXRoX2h3X2FkZHJfc2V0KHByaXYtXHUwMDNlZGV2LCByZXMtXHUwMDNlbWFjKTtcbjc4MzY6XHRcbjc4Mzc6XHRcdGRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIHByaXYtXHUwMDNlZGV2KTtcbjc4Mzg6XHRcbjc4Mzk6XHRcdC8qIFZlcmlmeSBkcml2ZXIgYXJndW1lbnRzICovXG43ODQwOlx0XHRzdG1tYWNfdmVyaWZ5X2FyZ3MoKTtcbjc4NDE6XHRcbjc4NDI6XHRcdHByaXYtXHUwMDNlYWZfeGRwX3pjX3FwcyA9IGJpdG1hcF96YWxsb2MoTVRMX01BWF9UWF9RVUVVRVMsIEdGUF9LRVJORUwpO1xuNzg0MzpcdFx0aWYgKCFwcml2LVx1MDAzZWFmX3hkcF96Y19xcHMpXG43ODQ0Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuNzg0NTpcdFxuNzg0NjpcdFx0LyogQWxsb2NhdGUgd29ya3F1ZXVlICovXG43ODQ3Olx0XHRwcml2LVx1MDAzZXdxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoXCYjMzQ7c3RtbWFjX3dxXCYjMzQ7KTtcbjc4NDg6XHRcdGlmICghcHJpdi1cdTAwM2V3cSkge1xuNzg0OTpcdFx0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIHdvcmtxdWV1ZVxcblwmIzM0Oyk7XG43ODUwOlx0XHRcdHJldCA9IC1FTk9NRU07XG43ODUxOlx0XHRcdGdvdG8gZXJyb3Jfd3FfaW5pdDtcbjc4NTI6XHRcdH1cbjc4NTM6XHRcbjc4NTQ6XHRcdElOSVRfV09SSyhcdTAwMjZwcml2LVx1MDAzZXNlcnZpY2VfdGFzaywgc3RtbWFjX3NlcnZpY2VfdGFzayk7XG43ODU1Olx0XG43ODU2Olx0XHR0aW1lcl9zZXR1cChcdTAwMjZwcml2LVx1MDAzZWVlZV9jdHJsX3RpbWVyLCBzdG1tYWNfZWVlX2N0cmxfdGltZXIsIDApO1xuNzg1NzpcdFxuNzg1ODpcdFx0LyogT3ZlcnJpZGUgd2l0aCBrZXJuZWwgcGFyYW1ldGVycyBpZiBzdXBwbGllZCBYWFggQ1JTIFhYWFxuNzg1OTpcdFx0ICogdGhpcyBuZWVkcyB0byBoYXZlIG11bHRpcGxlIGluc3RhbmNlc1xuNzg2MDpcdFx0ICovXG43ODYxOlx0XHRpZiAoKHBoeWFkZHIgXHUwMDNlPSAwKSBcdTAwMjZcdTAwMjYgKHBoeWFkZHIgXHUwMDNjPSAzMSkpXG43ODYyOlx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwaHlfYWRkciA9IHBoeWFkZHI7XG43ODYzOlx0XG43ODY0Olx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXN0bW1hY19yc3QpIHtcbjc4NjU6XHRcdFx0cmV0ID0gcmVzZXRfY29udHJvbF9hc3NlcnQocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXN0bW1hY19yc3QpO1xuNzg2NjpcdFx0XHRyZXNldF9jb250cm9sX2RlYXNzZXJ0KHByaXYtXHUwMDNlcGxhdC1cdTAwM2VzdG1tYWNfcnN0KTtcbjc4Njc6XHRcdFx0LyogU29tZSByZXNldCBjb250cm9sbGVycyBoYXZlIG9ubHkgcmVzZXQgY2FsbGJhY2sgaW5zdGVhZCBvZlxuNzg2ODpcdFx0XHQgKiBhc3NlcnQgJiM0MzsgZGVhc3NlcnQgY2FsbGJhY2tzIHBhaXIuXG43ODY5Olx0XHRcdCAqL1xuNzg3MDpcdFx0XHRpZiAocmV0ID09IC1FTk9UU1VQUClcbjc4NzE6XHRcdFx0XHRyZXNldF9jb250cm9sX3Jlc2V0KHByaXYtXHUwMDNlcGxhdC1cdTAwM2VzdG1tYWNfcnN0KTtcbjc4NzI6XHRcdH1cbjc4NzM6XHRcbjc4NzQ6XHRcdHJldCA9IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXN0bW1hY19haGJfcnN0KTtcbjc4NzU6XHRcdGlmIChyZXQgPT0gLUVOT1RTVVBQKVxuNzg3NjpcdFx0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDt1bmFibGUgdG8gYnJpbmcgb3V0IG9mIGFoYiByZXNldDogJXBlXFxuXCYjMzQ7LFxuNzg3NzpcdFx0XHRcdEVSUl9QVFIocmV0KSk7XG43ODc4Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxODIzCgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBfX3N0bW1hY19kdnJfcHJvYmVgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIGBfX3N0bW1hY19kdnJfcHJvYmVgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBmcmVzaCBtZW50YWwgbW9kZWwuIEkgYWxyZWFkeSBoYXZlIGEgZGVjZW50IGdyYXNwIG9mIHRoZSBvdmVyYWxsIFNUTU1BQyBkcml2ZXIgc3RydWN0dXJlLCBhbmQgSSYjMzk7dmUgcmV2aWV3ZWQgdGhlIGluaXRpYWxpemF0aW9uIGZsb3cgYSBmZXcgdGltZXMuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBwcm9iZSBmdW5jdGlvbiYjMzk7cyByb2xlIHdpdGhpbiB0aGF0IGNvbnRleHQsIGluIGRldGFpbC4gV2hhdCBhcmUgdGhlIGtleSBvcGVyYXRpb25zIGl0IHBlcmZvcm1zPyBXaGVyZSBkb2VzIGl0IGZpdCBpbnRvIHRoZSBkZXZpY2UgZGlzY292ZXJ5IGFuZCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIHRoZSBjb3JlIGhhcmR3YXJlLXNwZWNpZmljIGJyaW5nLXVwIGFmdGVyIHRoZSBnZW5lcmljIGRyaXZlciBoYXMgbG9hZGVkLCBoYW5kbGluZyB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgY29uZmlndXJpbmcgdGhlIHNwZWNpZmljIFNUTU1BQyB2YXJpYW50LiBQcm9iYWJseSBzZXR0aW5nIHVwIHRoZSBETUEgY2hhbm5lbHMsIGludGVycnVwdCBoYW5kbGluZywgYW5kIG1heWJlIHNvbWUgY2xvY2sgY29uZmlndXJhdGlvbiBpZiBpdCYjMzk7cyBub3QgaGFuZGxlZCBlYXJsaWVyLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uOyB0aGF0JiMzOTtzIGFsd2F5cyBhIGNydWNpYWwgYXJlYSBmb3IgZGVidWdnaW5nLiBBbnkgcmVnaXN0ZXIgYWNjZXNzZXMgb3IgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb25zIHdpbGwgZGVtYW5kIHNjcnV0aW55LiBUaW1lIHRvIGp1bXAgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgc3VycHJpc2VzIGl0IGhvbGRzLiBMZXQmIzM5O3Mgc2VlIGlmIG15IGluaXRpYWwgYXNzdW1wdGlvbnMgYWxpZ24uIEkmIzM5O20gaG9waW5nIEkgY2FuIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODc5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3ODc5Olx0XHQvKiBXYWl0IGEgYml0IGZvciB0aGUgcmVzZXQgdG8gdGFrZSBlZmZlY3QgKi9cbjc4ODA6XHRcdHVkZWxheSgxMCk7XG43ODgxOlx0XG43ODgyOlx0XHQvKiBJbml0IE1BQyBhbmQgZ2V0IHRoZSBjYXBhYmlsaXRpZXMgKi9cbjc4ODM6XHRcdHJldCA9IHN0bW1hY19od19pbml0KHByaXYpO1xuNzg4NDpcdFx0aWYgKHJldClcbjc4ODU6XHRcdFx0Z290byBlcnJvcl9od19pbml0O1xuNzg4NjpcdFxuNzg4NzpcdFx0LyogT25seSBEV01BQyBjb3JlIHZlcnNpb24gNS4yMCBvbndhcmRzIHN1cHBvcnRzIEhXIGRlc2NyaXB0b3IgcHJlZmV0Y2guXG43ODg4Olx0XHQgKi9cbjc4ODk6XHRcdGlmIChwcml2LVx1MDAzZXN5bm9wc3lzX2lkIFx1MDAzYyBEV01BQ19DT1JFXzVfMjApXG43ODkwOlx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VkbWFfY2ZnLVx1MDAzZWRjaGUgPSBmYWxzZTtcbjc4OTE6XHRcbjc4OTI6XHRcdHN0bW1hY19jaGVja19ldGhlcl9hZGRyKHByaXYpO1xuNzg5MzpcdFxuNzg5NDpcdFx0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2c3RtbWFjX25ldGRldl9vcHM7XG43ODk1Olx0XG43ODk2Olx0XHRuZGV2LVx1MDAzZXhkcF9tZXRhZGF0YV9vcHMgPSBcdTAwMjZzdG1tYWNfeGRwX21ldGFkYXRhX29wcztcbjc4OTc6XHRcdG5kZXYtXHUwMDNleHNrX3R4X21ldGFkYXRhX29wcyA9IFx1MDAyNnN0bW1hY194c2tfdHhfbWV0YWRhdGFfb3BzO1xuNzg5ODpcdFxuNzg5OTpcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8XG43OTAwOlx0XHRcdFx0ICAgIE5FVElGX0ZfUlhDU1VNO1xuNzkwMTpcdFx0bmRldi1cdTAwM2V4ZHBfZmVhdHVyZXMgPSBORVRERVZfWERQX0FDVF9CQVNJQyB8IE5FVERFVl9YRFBfQUNUX1JFRElSRUNUIHxcbjc5MDI6XHRcdFx0XHQgICAgIE5FVERFVl9YRFBfQUNUX1hTS19aRVJPQ09QWTtcbjc5MDM6XHRcbjc5MDQ6XHRcdHJldCA9IHN0bW1hY190Y19pbml0KHByaXYsIHByaXYpO1xuNzkwNTpcdFx0aWYgKCFyZXQpIHtcbjc5MDY6XHRcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1RDO1xuNzkwNzpcdFx0fVxuNzkwODpcdFxuNzkwOTpcdFx0c3RtbWFjX3NldF9nc29fZmVhdHVyZXMobmRldik7XG43OTEwOlx0XG43OTExOlx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLnNwaGVuIFx1MDAyNlx1MDAyNlxuNzkxMjpcdFx0ICAgICEocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZsYWdzIFx1MDAyNiBTVE1NQUNfRkxBR19TUEhfRElTQUJMRSkpIHtcbjc5MTM6XHRcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0dSTztcbjc5MTQ6XHRcdFx0cHJpdi1cdTAwM2VzcGhfY2FwYWJsZSA9IHRydWU7XG43OTE1Olx0XHRcdHByaXYtXHUwMDNlc3BoX2FjdGl2ZSA9IHByaXYtXHUwMDNlc3BoX2NhcGFibGU7XG43OTE2Olx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtTUEggZmVhdHVyZSBlbmFibGVkXFxuXCYjMzQ7KTtcbjc5MTc6XHRcdH1cbjc5MTg6XHRcbjc5MTk6XHRcdC8qIElkZWFsbHkgb3VyIGhvc3QgRE1BIGFkZHJlc3Mgd2lkdGggaXMgdGhlIHNhbWUgYXMgZm9yIHRoZVxuNzkyMDpcdFx0ICogZGV2aWNlLiBIb3dldmVyLCBpdCBtYXkgZGlmZmVyIGFuZCB0aGVuIHdlIGhhdmUgdG8gdXNlIG91clxuNzkyMTpcdFx0ICogaG9zdCBETUEgd2lkdGggZm9yIGFsbG9jYXRpb24gYW5kIHRoZSBkZXZpY2UgRE1BIHdpZHRoIGZvclxuNzkyMjpcdFx0ICogcmVnaXN0ZXIgaGFuZGxpbmcuXG43OTIzOlx0XHQgKi9cbjc5MjQ6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlaG9zdF9kbWFfd2lkdGgpXG43OTI1Olx0XHRcdHByaXYtXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCA9IHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vob3N0X2RtYV93aWR0aDtcbjc5MjY6XHRcdGVsc2Vcbjc5Mjc6XHRcdFx0cHJpdi1cdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoID0gcHJpdi1cdTAwM2VkbWFfY2FwLmFkZHI2NDtcbjc5Mjg6XHRcbjc5Mjk6XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGgpIHtcbjc5MzA6XHRcdFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXZpY2UsXG43OTMxOlx0XHRcdFx0XHRETUFfQklUX01BU0socHJpdi1cdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoKSk7XG43OTMyOlx0XHRcdGlmICghcmV0KSB7XG43OTMzOlx0XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1VzaW5nICVkLyVkIGJpdHMgRE1BIGhvc3QvZGV2aWNlIHdpZHRoXFxuXCYjMzQ7LFxuNzkzNDpcdFx0XHRcdFx0IHByaXYtXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCwgcHJpdi1cdTAwM2VkbWFfY2FwLmFkZHI2NCk7XG43OTM1Olx0XG43OTM2Olx0XHRcdFx0Lypcbjc5Mzc6XHRcdFx0XHQgKiBJZiBtb3JlIHRoYW4gMzIgYml0cyBjYW4gYmUgYWRkcmVzc2VkLCBtYWtlIHN1cmUgdG9cbjc5Mzg6XHRcdFx0XHQgKiBlbmFibGUgZW5oYW5jZWQgYWRkcmVzc2luZyBtb2RlLlxuNzkzOTpcdFx0XHRcdCAqL1xuNzk0MDpcdFx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19BUkNIX0RNQV9BRERSX1RfNjRCSVQpKVxuNzk0MTpcdFx0XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZWRtYV9jZmctXHUwMDNlZWFtZSA9IHRydWU7XG43OTQyOlx0XHRcdH0gZWxzZSB7XG43OTQzOlx0XHRcdFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXZpY2UsIERNQV9CSVRfTUFTSygzMikpO1xuNzk0NDpcdFx0XHRcdGlmIChyZXQpIHtcbjc5NDU6XHRcdFx0XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O0ZhaWxlZCB0byBzZXQgRE1BIE1hc2tcXG5cJiMzNDspO1xuNzk0NjpcdFx0XHRcdFx0Z290byBlcnJvcl9od19pbml0O1xuNzk0NzpcdFx0XHRcdH1cbjc5NDg6XHRcbjc5NDk6XHRcdFx0XHRwcml2LVx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGggPSAzMjtcbjc5NTA6XHRcdFx0fVxuNzk1MTpcdFx0fVxuNzk1MjpcdFxuNzk1MzpcdFx0bmRldi1cdTAwM2VmZWF0dXJlcyB8PSBuZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHwgTkVUSUZfRl9ISUdIRE1BO1xuNzk1NDpcdFx0bmRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMod2F0Y2hkb2cpO1xuNzk1NTpcdCNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRFxuNzk1NjpcdFx0LyogQm90aCBtYWMxMDAgYW5kIGdtYWMgc3VwcG9ydCByZWNlaXZlIFZMQU4gdGFnIGRldGVjdGlvbiAqL1xuNzk1NzpcdFx0bmRldi1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9TVEFHX1JYO1xuNzk1ODpcdFx0aWYgKGR3bWFjX2lzX3htYWMocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSkpIHtcbjc5NTk6XHRcdFx0bmRldi1cdTAwM2Vod19mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWDtcbjc5NjA6XHRcdFx0cHJpdi1cdTAwM2Vody1cdTAwM2Vod192bGFuX2VuID0gdHJ1ZTtcbjc5NjE6XHRcdH1cbjc5NjI6XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAudmxoYXNoKSB7XG43OTYzOlx0XHRcdG5kZXYtXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSO1xuNzk2NDpcdFx0XHRuZGV2LVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9TVEFHX0ZJTFRFUjtcbjc5NjU6XHRcdH1cbjc5NjY6XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAudmxpbnMpXG43OTY3Olx0XHRcdG5kZXYtXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfVFg7XG43OTY4Olx0I2VuZGlmXG43OTY5Olx0XHRwcml2LVx1MDAzZW1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1ZywgZGVmYXVsdF9tc2dfbGV2ZWwpO1xuNzk3MDpcdFxuNzk3MTpcdFx0cHJpdi1cdTAwM2V4c3RhdHMudGhyZXNob2xkID0gdGM7XG43OTcyOlx0XG43OTczOlx0XHQvKiBJbml0aWFsaXplIFJTUyAqL1xuNzk3NDpcdFx0cnhxID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X3F1ZXVlc190b191c2U7XG43OTc1Olx0XHRuZXRkZXZfcnNzX2tleV9maWxsKHByaXYtXHUwMDNlcnNzLmtleSwgc2l6ZW9mKHByaXYtXHUwMDNlcnNzLmtleSkpO1xuNzk3NjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwcml2LVx1MDAzZXJzcy50YWJsZSk7IGkmIzQzOyYjNDM7KVxuNzk3NzpcdFx0XHRwcml2LVx1MDAzZXJzcy50YWJsZVtpXSA9IGV0aHRvb2xfcnhmaF9pbmRpcl9kZWZhdWx0KGksIHJ4cSk7XG43OTc4Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDAwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gY2hlY2tpbmcgYHN0bW1hY19od19pbml0YDoKCioqRGl2aW5nIGludG8gYHN0bW1hY19od19pbml0YCoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBtZW50YWxseSBnb2luZyB0aHJvdWdoIGBzdG1tYWNfaHdfaW5pdGAuIEZyb20gd2hhdCBJIGtub3cgYWJvdXQgU1RNTUFDIGRyaXZlcnMsIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGxpa2VseSBwbGFjZSB3aGVyZSB0aGUgY29yZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBtYWdpYyBoYXBwZW5zLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciB0aGluZ3MgbGlrZSBjbG9jayBlbmFibGluZywgUEhZIHNldHVwIChpZiByZWxldmFudCksIERNQSBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24sIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBpbml0aWFsIHJlZ2lzdGVyIHdyaXRlcyB0byB0aGUgTUFDIGl0c2VsZi4KCkkgbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBsb3ctbGV2ZWwgY29uZmlndXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBoZXJlLiBJIHdhbnQgdG8gY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBtaXNzZWQgc3RlcHMgb3IgYW55IGFzc3VtcHRpb25zIHRoYXQgbWlnaHQgYmUgY2F1c2luZyBzdWJ0bGUgaXNzdWVzIGRvd24gdGhlIGxpbmUuIEkgYW0gcmVhbGx5IGxvb2tpbmcgZm9yIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGZvciB0aGlzIHBhcnRpY3VsYXIgaGFyZHdhcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGxvb2sgZm9yIHRoZSBrZXkgZWxlbWVudHMgdGhhdCBuZWVkIHRvIGJlIGFkZHJlc3NlZCBpbiB0aGUgYHN0bW1hY19od19pbml0YCBmdW5jdGlvbi4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gYW55IGhhcmR3YXJlLXNwZWNpZmljIGRlcGVuZGVuY2llcywgbGlrZSBhbnkgY2xvY2sgc2V0dGluZ3Mgb3IgbWVtb3J5IG1hcCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGRvbmUgY29ycmVjdGx5LCBvciBlbHNlIGV2ZXJ5dGhpbmcgZWxzZSB3aWxsIGZhaWwuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgYXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBNRElPL01JSSBpbnRlcmZhY2VzLCBhcyB0aGF0JiMzOTtzIG9mdGVuIGEgY29tbW9uIHNvdXJjZSBvZiB0cm91YmxlIHdoZW4gZGVhbGluZyB3aXRoIEV0aGVybmV0IGhhcmR3YXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfaHdfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTczNDg9c3RhdGljIHZvaWQgc3RtbWFjX3ByaW50X2FjdHBoeWlmKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTczODItLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjczODM6ICogIHN0bW1hY19od19pbml0IC0gSW5pdCB0aGUgTUFDIGRldmljZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03Mzg0LSAqICBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03Mzg5LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3MzkwOnN0YXRpYyBpbnQgc3RtbWFjX2h3X2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03MzkxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc3Nzk9c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzg4Mi1cdC8qIEluaXQgTUFDIGFuZCBnZXQgdGhlIGNhcGFiaWxpdGllcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3ODgzOlx0cmV0ID0gc3RtbWFjX2h3X2luaXQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc4ODQtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc1OAoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlIHdlIGdvLiBMZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHN0bW1hY19od19pbml0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXJkd2FyZSBpcyBiZWluZyBicm91Z2h0IHVwLCB0aGUgaW5pdGlhbCByZWdpc3RlciBjb25maWd1cmF0aW9ucywgYW5kIGFueSBjcnVjaWFsIHNldHVwIHN0ZXBzIGJlZm9yZSB0aGUgZHJpdmVyIGlzIGZ1bGx5IG9wZXJhdGlvbmFsLiBUaGlzIGlzIGEgY3JpdGljYWwgcGllY2UsIGxheWluZyB0aGUgZ3JvdW5kd29yayBmb3IgZXZlcnl0aGluZyBlbHNlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybjogQXJlIHRoZXJlIGFueSBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3MgYmVpbmcgYWRkcmVzc2VkIGhlcmU/IEFueSBvYnZpb3VzIGFzc3VtcHRpb25zIG1hZGUgYWJvdXQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgdGhhdCBjb3VsZCBjYXVzZSBwcm9ibGVtcyBkb3duIHRoZSBsaW5lPyBBcmUgdGhlIGNsb2NrIGNvbmZpZ3VyYXRpb25zIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5LCBhbmQgYXJlIGludGVycnVwdHMgYmVpbmcgZW5hYmxlZCBhdCB0aGlzIHBvaW50PyBJIGFsc28gd2FudCB0byBpZGVudGlmeSBhbnkgJiMzNDttYWdpYyBudW1iZXJzJiMzNDsgb3IgaGFyZGNvZGVkIHZhbHVlcyB0aGF0IG1pZ2h0IGluZGljYXRlIGEgbGFjayBvZiBwcm9wZXIgYWJzdHJhY3Rpb24gb3IgY291bGQgaW50cm9kdWNlIHBvcnRhYmlsaXR5IGlzc3Vlcy4gVGhlIGdvYWwgaXMgYSBjbGVhciBtZW50YWwgbWFwIG9mIHdoYXQgdGhpcyBpbml0aWFsaXNhdGlvbiBjb2RlIGlzIGRvaW5nIGFuZCB0aGUgcG90ZW50aWFsIGRvd25zdHJlYW0gZWZmZWN0cyBvZiBhbnkgY2hvaWNlcyBtYWRlIHdpdGhpbiBpdC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFzIHJvYnVzdCBhcyBpdCBuZWVkcyB0byBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzM5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzM5MDpcdHN0YXRpYyBpbnQgc3RtbWFjX2h3X2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuNzM5MTpcdHtcbjczOTI6XHRcdGludCByZXQ7XG43MzkzOlx0XG43Mzk0Olx0XHQvKiBkd21hYy1zdW44aSBvbmx5IHdvcmsgaW4gY2hhaW4gbW9kZSAqL1xuNzM5NTpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfSEFTX1NVTjhJKVxuNzM5NjpcdFx0XHRjaGFpbl9tb2RlID0gMTtcbjczOTc6XHRcdHByaXYtXHUwMDNlY2hhaW5fbW9kZSA9ICEhY2hhaW5fbW9kZTtcbjczOTg6XHRcbjczOTk6XHRcdC8qIEluaXRpYWxpemUgSFcgSW50ZXJmYWNlICovXG43NDAwOlx0XHRyZXQgPSBzdG1tYWNfaHdpZl9pbml0KHByaXYpO1xuNzQwMTpcdFx0aWYgKHJldClcbjc0MDI6XHRcdFx0cmV0dXJuIHJldDtcbjc0MDM6XHRcbjc0MDQ6XHRcdC8qIEdldCB0aGUgSFcgY2FwYWJpbGl0eSAobmV3IEdNQUMgbmV3ZXIgdGhhbiAzLjUwYSkgKi9cbjc0MDU6XHRcdHByaXYtXHUwMDNlaHdfY2FwX3N1cHBvcnQgPSBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzKHByaXYpO1xuNzQwNjpcdFx0aWYgKHByaXYtXHUwMDNlaHdfY2FwX3N1cHBvcnQpIHtcbjc0MDc6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O0RNQSBIVyBjYXBhYmlsaXR5IHJlZ2lzdGVyIHN1cHBvcnRlZFxcblwmIzM0Oyk7XG43NDA4Olx0XG43NDA5Olx0XHRcdC8qIFdlIGNhbiBvdmVycmlkZSBzb21lIGdtYWMvZG1hIGNvbmZpZ3VyYXRpb24gZmllbGRzOiBlLmcuXG43NDEwOlx0XHRcdCAqIGVuaF9kZXNjLCB0eF9jb2UgKGUuZy4gdGhhdCBhcmUgcGFzc2VkIHRocm91Z2ggdGhlXG43NDExOlx0XHRcdCAqIHBsYXRmb3JtKSB3aXRoIHRoZSB2YWx1ZXMgZnJvbSB0aGUgSFcgY2FwYWJpbGl0eVxuNzQxMjpcdFx0XHQgKiByZWdpc3RlciAoaWYgc3VwcG9ydGVkKS5cbjc0MTM6XHRcdFx0ICovXG43NDE0Olx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VlbmhfZGVzYyA9IHByaXYtXHUwMDNlZG1hX2NhcC5lbmhfZGVzYztcbjc0MTU6XHRcdFx0cHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBtdCA9IHByaXYtXHUwMDNlZG1hX2NhcC5wbXRfcmVtb3RlX3dha2VfdXAgXHUwMDI2XHUwMDI2XG43NDE2Olx0XHRcdFx0XHQhKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmbGFncyBcdTAwMjYgU1RNTUFDX0ZMQUdfVVNFX1BIWV9XT0wpO1xuNzQxNzpcdFx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLmhhc2hfdGJfc3opIHtcbjc0MTg6XHRcdFx0XHRwcml2LVx1MDAzZWh3LVx1MDAzZW11bHRpY2FzdF9maWx0ZXJfYmlucyA9XG43NDE5Olx0XHRcdFx0XHRcdChCSVQocHJpdi1cdTAwM2VkbWFfY2FwLmhhc2hfdGJfc3opIFx1MDAzY1x1MDAzYyA1KTtcbjc0MjA6XHRcdFx0XHRwcml2LVx1MDAzZWh3LVx1MDAzZW1jYXN0X2JpdHNfbG9nMiA9XG43NDIxOlx0XHRcdFx0XHRcdGlsb2cyKHByaXYtXHUwMDNlaHctXHUwMDNlbXVsdGljYXN0X2ZpbHRlcl9iaW5zKTtcbjc0MjI6XHRcdFx0fVxuNzQyMzpcdFxuNzQyNDpcdFx0XHQvKiBUWENPRSBkb2VzbiYjMzk7dCB3b3JrIGluIHRocmVzaCBETUEgbW9kZSAqL1xuNzQyNTpcdFx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWZvcmNlX3RocmVzaF9kbWFfbW9kZSlcbjc0MjY6XHRcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfY29lID0gZmFsc2U7XG43NDI3Olx0XHRcdGVsc2Vcbjc0Mjg6XHRcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfY29lID0gcHJpdi1cdTAwM2VkbWFfY2FwLnR4X2NvZTtcbjc0Mjk6XHRcbjc0MzA6XHRcdFx0LyogSW4gY2FzZSBvZiBHTUFDNCByeF9jb2UgaXMgZnJvbSBIVyBjYXAgcmVnaXN0ZXIuICovXG43NDMxOlx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9jb2UgPSBwcml2LVx1MDAzZWRtYV9jYXAucnhfY29lO1xuNzQzMjpcdFxuNzQzMzpcdFx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLnJ4X2NvZV90eXBlMilcbjc0MzQ6XHRcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfY29lID0gU1RNTUFDX1JYX0NPRV9UWVBFMjtcbjc0MzU6XHRcdFx0ZWxzZSBpZiAocHJpdi1cdTAwM2VkbWFfY2FwLnJ4X2NvZV90eXBlMSlcbjc0MzY6XHRcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfY29lID0gU1RNTUFDX1JYX0NPRV9UWVBFMTtcbjc0Mzc6XHRcbjc0Mzg6XHRcdFx0c3RtbWFjX3ByaW50X2FjdHBoeWlmKHByaXYpO1xuNzQzOTpcdFx0fSBlbHNlIHtcbjc0NDA6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O05vIEhXIERNQSBmZWF0dXJlIHJlZ2lzdGVyIHN1cHBvcnRlZFxcblwmIzM0Oyk7XG43NDQxOlx0XHR9XG43NDQyOlx0XG43NDQzOlx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X2NvZSkge1xuNzQ0NDpcdFx0XHRwcml2LVx1MDAzZWh3LVx1MDAzZXJ4X2NzdW0gPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfY29lO1xuNzQ0NTpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7UlggQ2hlY2tzdW0gT2ZmbG9hZCBFbmdpbmUgc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbjc0NDY6XHRcdFx0aWYgKHByaXYtXHUwMDNlc3lub3BzeXNfaWQgXHUwMDNjIERXTUFDX0NPUkVfNF8wMClcbjc0NDc6XHRcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7Q09FIFR5cGUgJWRcXG5cJiMzNDssIHByaXYtXHUwMDNlaHctXHUwMDNlcnhfY3N1bSk7XG43NDQ4Olx0XHR9XG43NDQ5Olx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X2NvZSlcbjc0NTA6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1RYIENoZWNrc3VtIGluc2VydGlvbiBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuNzQ1MTpcdFxuNzQ1MjpcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwbXQpIHtcbjc0NTM6XHRcdFx0ZGV2X2luZm8ocHJpdi1cdTAwM2VkZXZpY2UsIFwmIzM0O1dha2UtVXAgT24gTGFuIHN1cHBvcnRlZFxcblwmIzM0Oyk7XG43NDU0Olx0XHRcdGRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUocHJpdi1cdTAwM2VkZXZpY2UsIDEpO1xuNzQ1NTpcdFx0XHRkZXZtX3BtX3NldF93YWtlX2lycShwcml2LVx1MDAzZWRldmljZSwgcHJpdi1cdTAwM2V3b2xfaXJxKTtcbjc0NTY6XHRcdH1cbjc0NTc6XHRcbjc0NTg6XHRcdGlmIChwcml2LVx1MDAzZWRtYV9jYXAubnVtYmVyX3J4X3F1ZXVlcyBcdTAwMjZcdTAwMjZcbjc0NTk6XHRcdCAgICBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfcXVldWVzX3RvX3VzZSBcdTAwM2UgcHJpdi1cdTAwM2VkbWFfY2FwLm51bWJlcl9yeF9xdWV1ZXMpIHtcbjc0NjA6XHRcdFx0ZGV2X3dhcm4ocHJpdi1cdTAwM2VkZXZpY2UsXG43NDYxOlx0XHRcdFx0IFwmIzM0O051bWJlciBvZiBSeCBxdWV1ZXMgKCV1KSBleGNlZWRzIGRtYSBjYXBhYmlsaXR5XFxuXCYjMzQ7LFxuNzQ2MjpcdFx0XHRcdCBwcml2LVx1MDAzZXBsYXQtXHUwMDNlcnhfcXVldWVzX3RvX3VzZSk7XG43NDYzOlx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9xdWV1ZXNfdG9fdXNlID0gcHJpdi1cdTAwM2VkbWFfY2FwLm51bWJlcl9yeF9xdWV1ZXM7XG43NDY0Olx0XHR9XG43NDY1Olx0XHRpZiAocHJpdi1cdTAwM2VkbWFfY2FwLm51bWJlcl90eF9xdWV1ZXMgXHUwMDI2XHUwMDI2XG43NDY2Olx0XHQgICAgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc190b191c2UgXHUwMDNlIHByaXYtXHUwMDNlZG1hX2NhcC5udW1iZXJfdHhfcXVldWVzKSB7XG43NDY3Olx0XHRcdGRldl93YXJuKHByaXYtXHUwMDNlZGV2aWNlLFxuNzQ2ODpcdFx0XHRcdCBcJiMzNDtOdW1iZXIgb2YgVHggcXVldWVzICgldSkgZXhjZWVkcyBkbWEgY2FwYWJpbGl0eVxcblwmIzM0Oyxcbjc0Njk6XHRcdFx0XHQgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X3F1ZXVlc190b191c2UpO1xuNzQ3MDpcdFx0XHRwcml2LVx1MDAzZXBsYXQtXHUwMDNldHhfcXVldWVzX3RvX3VzZSA9IHByaXYtXHUwMDNlZG1hX2NhcC5udW1iZXJfdHhfcXVldWVzO1xuNzQ3MTpcdFx0fVxuNzQ3MjpcdFxuNzQ3MzpcdFx0aWYgKHByaXYtXHUwMDNlZG1hX2NhcC5yeF9maWZvX3NpemUgXHUwMDI2XHUwMDI2XG43NDc0Olx0XHQgICAgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X2ZpZm9fc2l6ZSBcdTAwM2UgcHJpdi1cdTAwM2VkbWFfY2FwLnJ4X2ZpZm9fc2l6ZSkge1xuNzQ3NTpcdFx0XHRkZXZfd2Fybihwcml2LVx1MDAzZWRldmljZSxcbjc0NzY6XHRcdFx0XHQgXCYjMzQ7UnggRklGTyBzaXplICgldSkgZXhjZWVkcyBkbWEgY2FwYWJpbGl0eVxcblwmIzM0Oyxcbjc0Nzc6XHRcdFx0XHQgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXJ4X2ZpZm9fc2l6ZSk7XG43NDc4Olx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2VyeF9maWZvX3NpemUgPSBwcml2LVx1MDAzZWRtYV9jYXAucnhfZmlmb19zaXplO1xuNzQ3OTpcdFx0fVxuNzQ4MDpcdFx0aWYgKHByaXYtXHUwMDNlZG1hX2NhcC50eF9maWZvX3NpemUgXHUwMDI2XHUwMDI2XG43NDgxOlx0XHQgICAgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X2ZpZm9fc2l6ZSBcdTAwM2UgcHJpdi1cdTAwM2VkbWFfY2FwLnR4X2ZpZm9fc2l6ZSkge1xuNzQ4MjpcdFx0XHRkZXZfd2Fybihwcml2LVx1MDAzZWRldmljZSxcbjc0ODM6XHRcdFx0XHQgXCYjMzQ7VHggRklGTyBzaXplICgldSkgZXhjZWVkcyBkbWEgY2FwYWJpbGl0eVxcblwmIzM0Oyxcbjc0ODQ6XHRcdFx0XHQgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZXR4X2ZpZm9fc2l6ZSk7XG43NDg1Olx0XHRcdHByaXYtXHUwMDNlcGxhdC1cdTAwM2V0eF9maWZvX3NpemUgPSBwcml2LVx1MDAzZWRtYV9jYXAudHhfZmlmb19zaXplO1xuNzQ4NjpcdFx0fVxuNzQ4NzpcdFxuNzQ4ODpcdFx0cHJpdi1cdTAwM2Vody1cdTAwM2V2bGFuX2ZhaWxfcV9lbiA9XG43NDg5Olx0XHRcdChwcml2LVx1MDAzZXBsYXQtXHUwMDNlZmxhZ3MgXHUwMDI2IFNUTU1BQ19GTEFHX1ZMQU5fRkFJTF9RX0VOKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5MTYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBzdG1tYWNfaHdpZl9pbml0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYHN0bW1hY19od2lmX2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGhhcmR3YXJlIGludGVyZmFjZSBpcyBpbml0aWFsaXplZCBmb3IgdGhpcyBTVE1NQUMgZHJpdmVyLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgdGhlIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgc28gZ2V0dGluZyBhIHNvbGlkIGdyaXAgb24gdGhpcyBpcyBwYXJhbW91bnQuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgY2FsbHMgdG8gcmVnaXN0ZXIgdGhlIGRldmljZSwgc2V0IHVwIGludGVycnVwdCBoYW5kbGVycywgY29uZmlndXJlIERNQSBjaGFubmVscyDigJMgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBicmluZ2luZyBhIE1BQyBpbnRlcmZhY2Ugb25saW5lLiBJJiMzOTtsbCBiZSBleHBlY3RpbmcgdG8gc2VlIGEgbG90IG9mIHJlZ2lzdGVyIGFjY2VzcyBoZXJlLCBwb3RlbnRpYWxseSBiYXNlZCBvbiB0aGUgRFQgYmluZGluZ3MuIEdvdHRhIG1ha2Ugc3VyZSBpdCBoYW5kbGVzIGFsbCB0aGUgcG9zc2libGUgdmFyaWF0aW9ucyBpbiBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyB0b28uIE9rYXksIGxldCYjMzk7cyBzdGFydCByZWFkaW5nIHRocm91Z2ggdGhlIGNvZGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX2h3aWZfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9Mjk0PXN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMxNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozMTc6aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMxOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oPTY5Mz1pbnQgc3RtbWFjX3Jlc2V0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmg6Njk0OmludCBzdG1tYWNfaHdpZl9pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmgtNjk1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzM5MD1zdGF0aWMgaW50IHN0bW1hY19od19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTczOTktXHQvKiBJbml0aWFsaXplIEhXIEludGVyZmFjZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3NDAwOlx0cmV0ID0gc3RtbWFjX2h3aWZfaW5pdChwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzQwMS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTUyCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYHN0bW1hY19od2lmX2luaXRgLiBJIG5lZWQgdG8gZ2V0IGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHdvcmtzLiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtZSwgaXQmIzM5O3MgcmVzcG9uc2libGUgZm9yIGJyaW5naW5nIHVwIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgZm9yIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpdCB1c2VzLCBwYXJ0aWN1bGFybHkgYW55IGludGVyYWN0aW9uIHdpdGggdGhlIGRldmljZSB0cmVlIGFuZCBhbnkgbWVtb3J5IGFsbG9jYXRpb24gaXQgcGVyZm9ybXMuIEnigJltIGV4cGVjdGluZyB0byBzZWUgY29uZmlndXJhdGlvbiBvZiB0aGUgRE1BIGVuZ2luZSwgUEhZIGludGVyYWN0aW9uLCBhbmQgaW50ZXJydXB0IHNldHVwIGluIGhlcmUuIFVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgb2YgdGhlc2Ugb3BlcmF0aW9ucyBpcyBjcnVjaWFsLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgYW5kIHdoYXQgc3RlcHMgYXJlIHRha2VuIGR1cmluZyB0aGUgc2V0dXAuIEl0JiMzOTtzIGFsc28gaW1wb3J0YW50IHRvIG5vdGUgdGhlIHZhcmlvdXMgaGFyZHdhcmUgdmFyaWF0aW9ucyB0aGlzIGNvZGUgbWlnaHQgbmVlZCB0byBzdXBwb3J0LiBMZXTigJlzIHNlZSBob3cgZWxlZ2FudGx5IGl0IGhhbmRsZXMgdGhlc2UgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyBhdCBkaWZmZXJlbnQgcG9pbnRzIGR1cmluZyB0aGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTc6XHRpbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4gMzE4Olx0e1xuIDMxOTpcdFx0ZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZTtcbiAzMjA6XHRcdGNvbnN0IHN0cnVjdCBzdG1tYWNfaHdpZl9lbnRyeSAqZW50cnk7XG4gMzIxOlx0XHRzdHJ1Y3Qgc3RtbWFjX3ZlcnNpb24gdmVyc2lvbjtcbiAzMjI6XHRcdHN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hYztcbiAzMjM6XHRcdGJvb2wgbmVlZHNfc2V0dXAgPSB0cnVlO1xuIDMyNDpcdFx0aW50IHJldDtcbiAzMjU6XHRcbiAzMjY6XHRcdHN0bW1hY19nZXRfdmVyc2lvbihwcml2LCBcdTAwMjZ2ZXJzaW9uKTtcbiAzMjc6XHRcbiAzMjg6XHRcdC8qIFNhdmUgSUQgZm9yIGxhdGVyIHVzZSAqL1xuIDMyOTpcdFx0cHJpdi1cdTAwM2VzeW5vcHN5c19pZCA9IHZlcnNpb24uc25wc3ZlcjtcbiAzMzA6XHRcbiAzMzE6XHRcdC8qIExldHMgYXNzdW1lIHNvbWUgc2FmZSB2YWx1ZXMgZmlyc3QgKi9cbiAzMzI6XHRcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDNCkge1xuIDMzMzpcdFx0XHRwcml2LVx1MDAzZXB0cGFkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBQVFBfR01BQzRfT0ZGU0VUO1xuIDMzNDpcdFx0XHRwcml2LVx1MDAzZW1tY2FkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBNTUNfR01BQzRfT0ZGU0VUO1xuIDMzNTpcdFx0XHRwcml2LVx1MDAzZWVzdGFkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBFU1RfR01BQzRfT0ZGU0VUO1xuIDMzNjpcdFx0fSBlbHNlIHtcbiAzMzc6XHRcdFx0cHJpdi1cdTAwM2VwdHBhZGRyID0gcHJpdi1cdTAwM2Vpb2FkZHIgJiM0MzsgUFRQX0dNQUMzX1hfT0ZGU0VUO1xuIDMzODpcdFx0XHRwcml2LVx1MDAzZW1tY2FkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBNTUNfR01BQzNfWF9PRkZTRVQ7XG4gMzM5Olx0XHRcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQylcbiAzNDA6XHRcdFx0XHRwcml2LVx1MDAzZWVzdGFkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBFU1RfWEdNQUNfT0ZGU0VUO1xuIDM0MTpcdFx0fVxuIDM0MjpcdFxuIDM0MzpcdFx0bWFjID0gZGV2bV9remFsbG9jKHByaXYtXHUwMDNlZGV2aWNlLCBzaXplb2YoKm1hYyksIEdGUF9LRVJORUwpO1xuIDM0NDpcdFx0aWYgKCFtYWMpXG4gMzQ1Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDM0NjpcdFxuIDM0NzpcdFx0LyogQ2hlY2sgZm9yIEhXIHNwZWNpZmljIHNldHVwIGZpcnN0ICovXG4gMzQ4Olx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1hY19zZXR1cCkge1xuIDM0OTpcdFx0XHRyZXQgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWFjX3NldHVwKHByaXYsIG1hYyk7XG4gMzUwOlx0XHRcdGlmIChyZXQpXG4gMzUxOlx0XHRcdFx0cmV0dXJuIHJldDtcbiAzNTI6XHRcbiAzNTM6XHRcdFx0bmVlZHNfc2V0dXAgPSBmYWxzZTtcbiAzNTQ6XHRcdH1cbiAzNTU6XHRcbiAzNTY6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNm1hYy1cdTAwM2VpcnFfY3RybF9sb2NrKTtcbiAzNTc6XHRcbiAzNTg6XHRcdC8qIEZhbGxiYWNrIHRvIGdlbmVyaWMgSFcgKi9cbiAzNTk6XHRcbiAzNjA6XHRcdC8qIFVzZSBzeW5vcHN5c19pZCB2YXIgYmVjYXVzZSBzb21lIHNldHVwcyBjYW4gb3ZlcnJpZGUgdGhpcyAqL1xuIDM2MTpcdFx0ZW50cnkgPSBzdG1tYWNfaHdpZl9maW5kKGNvcmVfdHlwZSwgcHJpdi1cdTAwM2VzeW5vcHN5c19pZCwgdmVyc2lvbi5kZXZfaWQpO1xuIDM2MjpcdFx0aWYgKCFlbnRyeSkge1xuIDM2MzpcdFx0XHRkZXZfZXJyKHByaXYtXHUwMDNlZGV2aWNlLFxuIDM2NDpcdFx0XHRcdFwmIzM0O0ZhaWxlZCB0byBmaW5kIEhXIElGIChpZD0weCV4LCBnbWFjPSVkLyVkKVxcblwmIzM0OyxcbiAzNjU6XHRcdFx0XHR2ZXJzaW9uLnNucHN2ZXIsIGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUMsXG4gMzY2Olx0XHRcdFx0Y29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQzQpO1xuIDM2NzpcdFxuIDM2ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNjk6XHRcdH1cbiAzNzA6XHRcbiAzNzE6XHRcdC8qIE9ubHkgdXNlIGdlbmVyaWMgSFcgaGVscGVycyBpZiBuZWVkZWQgKi9cbiAzNzI6XHRcdG1hYy1cdTAwM2VkZXNjID0gbWFjLVx1MDAzZWRlc2MgPyA6IGVudHJ5LVx1MDAzZWRlc2M7XG4gMzczOlx0XHRtYWMtXHUwMDNlZG1hID0gbWFjLVx1MDAzZWRtYSA/IDogZW50cnktXHUwMDNlZG1hO1xuIDM3NDpcdFx0bWFjLVx1MDAzZW1hYyA9IG1hYy1cdTAwM2VtYWMgPyA6IGVudHJ5LVx1MDAzZW1hYztcbiAzNzU6XHRcdG1hYy1cdTAwM2VwdHAgPSBtYWMtXHUwMDNlcHRwID8gOiBlbnRyeS1cdTAwM2Vod3RpbWVzdGFtcDtcbiAzNzY6XHRcdG1hYy1cdTAwM2Vtb2RlID0gbWFjLVx1MDAzZW1vZGUgPyA6IGVudHJ5LVx1MDAzZW1vZGU7XG4gMzc3Olx0XHRtYWMtXHUwMDNldGMgPSBtYWMtXHUwMDNldGMgPyA6IGVudHJ5LVx1MDAzZXRjO1xuIDM3ODpcdFx0bWFjLVx1MDAzZW1tYyA9IG1hYy1cdTAwM2VtbWMgPyA6IGVudHJ5LVx1MDAzZW1tYztcbiAzNzk6XHRcdG1hYy1cdTAwM2Vlc3QgPSBtYWMtXHUwMDNlZXN0ID8gOiBlbnRyeS1cdTAwM2Vlc3Q7XG4gMzgwOlx0XHRtYWMtXHUwMDNldmxhbiA9IG1hYy1cdTAwM2V2bGFuID8gOiBlbnRyeS1cdTAwM2V2bGFuO1xuIDM4MTpcdFxuIDM4MjpcdFx0cHJpdi1cdTAwM2VodyA9IG1hYztcbiAzODM6XHRcdHByaXYtXHUwMDNlZnBlX2NmZy5yZWcgPSBlbnRyeS1cdTAwM2VyZWdzLmZwZV9yZWc7XG4gMzg0Olx0XHRwcml2LVx1MDAzZXB0cGFkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBlbnRyeS1cdTAwM2VyZWdzLnB0cF9vZmY7XG4gMzg1Olx0XHRwcml2LVx1MDAzZW1tY2FkZHIgPSBwcml2LVx1MDAzZWlvYWRkciAmIzQzOyBlbnRyeS1cdTAwM2VyZWdzLm1tY19vZmY7XG4gMzg2Olx0XHRtZW1jcHkoXHUwMDI2cHJpdi1cdTAwM2VwdHBfY2xvY2tfb3BzLCBlbnRyeS1cdTAwM2VwdHAsXG4gMzg3Olx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBwdHBfY2xvY2tfaW5mbykpO1xuIDM4ODpcdFxuIDM4OTpcdFx0aWYgKGVudHJ5LVx1MDAzZWVzdClcbiAzOTA6XHRcdFx0cHJpdi1cdTAwM2Vlc3RhZGRyID0gcHJpdi1cdTAwM2Vpb2FkZHIgJiM0MzsgZW50cnktXHUwMDNlcmVncy5lc3Rfb2ZmO1xuIDM5MTpcdFxuIDM5MjpcdFx0LyogRW50cnkgZm91bmQgKi9cbiAzOTM6XHRcdGlmIChuZWVkc19zZXR1cCkge1xuIDM5NDpcdFx0XHRyZXQgPSBlbnRyeS1cdTAwM2VzZXR1cChwcml2KTtcbiAzOTU6XHRcdFx0aWYgKHJldClcbiAzOTY6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDM5NzpcdFx0fVxuIDM5ODpcdFxuIDM5OTpcdFx0LyogU2F2ZSBxdWlya3MsIGlmIG5lZWRlZCBmb3IgcG9zdGVyaW9yIHVzZSAqL1xuIDQwMDpcdFx0cHJpdi1cdTAwM2Vod2lmX3F1aXJrcyA9IGVudHJ5LVx1MDAzZXF1aXJrcztcbiA0MDE6XHRcbiA0MDI6XHRcdHJldHVybiAwO1xuIDQwMzpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyMTkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgbWluZCBpcyBqdW1waW5nIGFyb3VuZCBhIGJpdCBoZXJlLCBmb2N1c2luZyBpbiBvbiB0aGlzIGZ1bmN0aW9uLCBgc3RtbWFjX2dldF92ZXJzaW9uYC4gVGhlIGtleSB0aGluZyB0aGF0IGtlZXBzIHBvcHBpbmcgdXAgaXMgdGhhdCBJJiMzOTttIGRlYWxpbmcgd2l0aCBNZW1vcnktTWFwcGVkIEkvTywgb3IgTU1JTy4gTGV0IG1lIGp1c3QgdGhpbmsuLi4KCioqTU1JTyBPYnNlcnZhdGlvbioqCgpBaCwgcmlnaHQuIGBzdG1tYWNfZ2V0X3ZlcnNpb25gIHJlYWRzIGZyb20gTU1JTy4gVGhhdCBtZWFucyBJJiMzOTttIG5vdCBkZWFsaW5nIHdpdGggc29tZSBsb2NhbCB2YXJpYWJsZSBvciBhIHNpbXBsZSBmdW5jdGlvbiBjYWxsLiBJJiMzOTttIGhpdHRpbmcgaGFyZHdhcmUgcmVnaXN0ZXJzIGRpcmVjdGx5LiBUaGlzIGhhcyBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMuIEkgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHRpbWluZywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYW5kIGhvdyB0aGUgaGFyZHdhcmUgcHJlc2VudHMgaXRzIHZlcnNpb24gaW5mb3JtYXRpb24uIElmIGl04oCZcyB1c2luZyBNTUlPLCBpdCBpbXBsaWVzIHRoYXQgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gY291bGQgYmUgaGVsZCBpbiBhIGZpeGVkIHJlZ2lzdGVyIGxvY2F0aW9uLiBJIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgcmVnaXN0ZXIgb2Zmc2V0cy4gRG9lcyB0aGUgZHJpdmVyIGhhbmRsZSB0aGlzPyBJIHdpbGwgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgZHJpdmVyIGNvZGUgaGFuZGxlcyBwb3RlbnRpYWwgaXNzdWVzIGxpa2UgZW5kaWFubmVzcyBhbmQgYWxpZ25tZW50IGNvcnJlY3RseSB0byBwcmV2ZW50IHJlYWRpbmcgdGhlIHdyb25nIHZlcnNpb24uIEFuZCBpdCBtaWdodCBiZSBuZWNlc3NhcnkgdG8gY29uc3VsdCB0aGUgc3BlY2lmaWMgZGF0YXNoZWV0IGZvciB0aGUgaGFyZHdhcmUgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSBmb3JtYXQgYW5kIG1lYW5pbmcgb2YgdGhhdCB2ZXJzaW9uIGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfZ2V0X3ZlcnNpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTE2PXN0cnVjdCBzdG1tYWNfdmVyc2lvbiB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jOjIxOnN0YXRpYyB2b2lkIHN0bW1hY19nZXRfdmVyc2lvbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjItXHRcdFx0ICAgICAgIHN0cnVjdCBzdG1tYWNfdmVyc2lvbiAqdmVyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYz0zMTc9aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MzI2Olx0c3RtbWFjX2dldF92ZXJzaW9uKHByaXYsIFx1MDAyNnZlcnNpb24pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jLTMyNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3NTgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiBlbWJlZGRlZCBzeXN0ZW1zIGFuZCBkZXZpY2UgZHJpdmVyczoKCioqQW5hbHl6aW5nIHRoZSBDYWxsIHRvIGBzdG1tYWNfZ2V0X3ZlcnNpb25gKioKCkFscmlnaHQsIHRoZSBkaXJlY3RpdmUgaXMgY2xlYXI6IGRpdmUgaW50byB0aGUgYHN0bW1hY19nZXRfdmVyc2lvbmAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBVbmRlcnN0YW5kaW5nIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIG9mIHRoZSBTVE1pY3JvZWxlY3Ryb25pY3MgTUFDIGRyaXZlciBpcyBjcnVjaWFsLCBpdCYjMzk7cyB0aGUgZm91bmRhdGlvbiBvZiBhbG1vc3QgZXZlcnl0aGluZy4gSXQgdXN1YWxseSBpbnZvbHZlcyByZWFkaW5nIHJlZ2lzdGVycywgbWF5YmUgc29tZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBkcml2ZXIsIGFuZCBmb3JtYXR0aW5nIHRoYXQgZGF0YSBmb3IgdGhlIHVzZXIuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3Igd2hlcmUgaXQmIzM5O3MgZGVmaW5lZC4gSXMgaXQgYSBkaXJlY3QgcmVnaXN0ZXIgcmVhZCwgb3IgZG9lcyBpdCBpbnZvbHZlIHNvbWUgbW9yZSBjb21wbGV4IGxvZ2ljIHRvIGRldGVybWluZSB0aGUgZHJpdmVyJiMzOTtzIHJldmlzaW9uLCBmZWF0dXJlIHNldCwgb3IgaGFyZHdhcmUgY29tcGF0aWJpbGl0eT8gSG9wZWZ1bGx5LCBpdCBpcyB3ZWxsIGRvY3VtZW50ZWQ7IG90aGVyd2lzZSBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWdpc3Rlci1sZXZlbCBpbnRlcnByZXRhdGlvbiBvZiBpdC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBkZWJ1Z2dpbmcgYW5kIGVuc3VyaW5nIGNvbXBhdGliaWxpdHksIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZGlmZmVyZW50IGhhcmR3YXJlIHJldmlzaW9ucyBvciBrZXJuZWwgdmVyc2lvbnMuIEkmIzM5O20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSB0eXBlcyBpdCYjMzk7cyB3b3JraW5nIHdpdGggYW5kIGhvdyB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyBzdHJ1Y3R1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjE6XHRzdGF0aWMgdm9pZCBzdG1tYWNfZ2V0X3ZlcnNpb24oc3RydWN0IHN0bW1hY19wcml2ICpwcml2LFxuICAyMjpcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc3RtbWFjX3ZlcnNpb24gKnZlcilcbiAgMjM6XHR7XG4gIDI0Olx0XHRlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlO1xuICAyNTpcdFx0dW5zaWduZWQgaW50IHZlcnNpb25fb2Zmc2V0O1xuICAyNjpcdFx0dTMyIHZlcnNpb247XG4gIDI3Olx0XG4gIDI4Olx0XHR2ZXItXHUwMDNlc25wc3ZlciA9IDA7XG4gIDI5Olx0XHR2ZXItXHUwMDNlZGV2X2lkID0gMDtcbiAgMzA6XHRcbiAgMzE6XHRcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9NQUMxMDApXG4gIDMyOlx0XHRcdHJldHVybjtcbiAgMzM6XHRcbiAgMzQ6XHRcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDKVxuICAzNTpcdFx0XHR2ZXJzaW9uX29mZnNldCA9IEdNQUNfVkVSU0lPTjtcbiAgMzY6XHRcdGVsc2VcbiAgMzc6XHRcdFx0dmVyc2lvbl9vZmZzZXQgPSBHTUFDNF9WRVJTSU9OO1xuICAzODpcdFxuICAzOTpcdFx0dmVyc2lvbiA9IHJlYWRsKHByaXYtXHUwMDNlaW9hZGRyICYjNDM7IHZlcnNpb25fb2Zmc2V0KTtcbiAgNDA6XHRcdGlmICh2ZXJzaW9uID09IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAzMzMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIFZlcnNpb24gVmFsdWUgQW5vbWFseSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZHJpbGwgZG93biBvbiB0aGlzLiBJZiB0aGUgYHZlcnNpb25gIHZhbHVlIGhpdHMgYSB6ZXJvIG9yLCBldmVuIG1vcmUgc3VzcGljaW91c2x5LCBgMHhmZmZmZmZmZmAsIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnM/IFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHVubWFwcGVkIG1lbW9yeSBoZXJlLCBvciBwb3RlbnRpYWxseSBzb21lIGludGVudGlvbmFsbHkgZmFrZWQgTU1JTy4gRWl0aGVyIHNjZW5hcmlvIGRlbWFuZHMgaW1tZWRpYXRlIGF0dGVudGlvbi4gQSB6ZXJvIHVzdWFsbHkgaW1wbGllcyBpdCBoYXNuJiMzOTt0IGJlZW4gaW5pdGlhbGl6ZWQgb3IgaXMgb3RoZXJ3aXNlIGludmFsaWQsIGEgc2lnbmFsIG9mIHNlcmlvdXMgdHJvdWJsZS4gYDB4ZmZmZmZmZmZgIGlzIGEgYml0IG1vcmUgbnVhbmNlZC4gSXQgY291bGQgcmVwcmVzZW50IGFuIG92ZXJmbG93LCBhbiBpbnRlbnRpb25hbCBtYXJrZXIgZm9yICYjMzQ7aW52YWxpZCwmIzM0OyBvciBwZXJoYXBzIHNvbWUgaGFyZHdhcmUtc3BlY2lmaWMgcXVpcmsgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY3Jvc3MtcmVmZXJlbmNlIHdpdGggdGhlIHJlbGV2YW50IG1lbW9yeSBtYXAgYW5kIE1NSU8gZGVmaW5pdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBwYXJ0aWN1bGFyIHJlZ2lvbiBpcyAqc3VwcG9zZWQqIHRvIGNvbnRhaW4uIElzIGl0IGEga25vd24gcmVzZXJ2ZWQgYXJlYT8gSXMgdGhlcmUgYSBrbm93biBmYWlsdXJlIG1vZGUgdGhhdCByZXN1bHRzIGluIHRoaXMgdmFsdWU/IFdoYXQgYXJlIHRoZSBhY2Nlc3MgcGVybWlzc2lvbnMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgbWVtb3J5IGFkZHJlc3M/IEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byBkaWcgaW50byB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgcG90ZW50aWFsbHkgdHJhY2UgdGhlIG1lbW9yeSBhY2Nlc3MgaW5zdHJ1Y3Rpb25zLiBUaGlzIHJlcXVpcmVzIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGxhdGZvcm0mIzM5O3MgYXJjaGl0ZWN0dXJlLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogdGhpcyBjb25kaXRpb24gaXMgdHJpZ2dlcmVkLiBJcyBpdCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGF0IHJ1bnRpbWUsIG9yIGlzIGl0IGEgcmVzdWx0IG9mIGFuIGV4dGVybmFsIGludGVyYWN0aW9uPyBJcyBpdCBhIHN5bXB0b20gb2YgYSBsYXJnZXIsIG1vcmUgZnVuZGFtZW50YWwgcHJvYmxlbT8gSXMgaXQgcG9zc2libGUgdGhlIHJlYWQgaXMgb2NjdXJyaW5nIG9uIGEgc3RhbGUgcG9pbnRlcj8KCkZyb20gYSBkZWJ1Z2dpbmcgcGVyc3BlY3RpdmUsIEkmIzM5O20gdGhpbmtpbmcgb2Ygc3RyYXRlZ2llcyBub3c6IHNldHRpbmcgYSBicmVha3BvaW50LCBpbnN0cnVtZW50aW5nIHRoZSBjb2RlIHRvIGxvZyBhY2Nlc3NlcyB0byB0aGF0IGFkZHJlc3MsIG9yIHVzaW5nIGEgbWVtb3J5IG1vbml0b3JpbmcgdG9vbC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBjb250ZXh0OiB0aGUgcHJvY2VzcywgdGhlIHRocmVhZCwgdGhlIHJlbGV2YW50IHJlZ2lzdGVycywgYW5kIHRoZSBzdXJyb3VuZGluZyBpbnN0cnVjdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhbmQgd2hldGhlciB0aGUgcHJvYmxlbSBpcyByZXBlYXRhYmxlLCBvciBpbnRlcm1pdHRlbnQuCgpUaGlzIGFsc28gYnJpbmdzIHVwIHRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIHRoZXJlJiMzOTtzIGEgaGFyZHdhcmUgZmF1bHQgdG8gYmUgZGVhbHQgd2l0aC4gVGhlIGFwcGVhcmFuY2Ugb2YgYW4gJiMzNDthbGwgb25lcyYjMzQ7IHBhdHRlcm4gbWF5IHN1Z2dlc3QgYSBkZWZlY3QgaW4gdGhlIHN5c3RlbSYjMzk7cyBtZW1vcnkgY29udHJvbGxlciBvciB0aGUgbWVtb3J5IGNoaXBzIHRoZW1zZWx2ZXMuIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgaGFyZHdhcmUgZGlhZ25vc3RpYyB0b29scywgb3IgcnVubmluZyBzb21lIG1lbW9yeSB0ZXN0cy4gSXTigJlzIGFsc28gdmVyeSBwb3NzaWJsZSBJJiMzOTttIGxvb2tpbmcgYXQgYSBkcml2ZXIgcHJvYmxlbSwgc28gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhlIHVuZGVybHlpbmcgZHJpdmVycyBpbnRlcnByZXQgYW5kIHByZXNlbnQgdGhlc2UgdmFsdWVzIHRvIHRoZSB1c2VyIHNwYWNlLiBJIHdvdWxkIG5lZWQgdG8gZmluZCBvdXQgKndoeSogdGhlIGRhdGEgaXMgY29ycnVwdGVkL2luY29ycmVjdC4KClNvLCBpbiBlc3NlbmNlLCBJIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIGxpa2UgYSBkZXRlY3RpdmUsIGVsaW1pbmF0aW5nIHBvc3NpYmlsaXRpZXMgYW5kIGdldHRpbmcgYXQgdGhlIHJvb3QgY2F1c2Ugb2YgdGhpcyBwb3RlbnRpYWxseSBjcml0aWNhbCBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0XHRpZiAodmVyc2lvbiA9PSAwKSB7XG4gIDQxOlx0XHRcdGRldl9pbmZvKHByaXYtXHUwMDNlZGV2aWNlLCBcJiMzNDtWZXJzaW9uIElEIG5vdCBhdmFpbGFibGVcXG5cJiMzNDspO1xuICA0MjpcdFx0XHRyZXR1cm47XG4gIDQzOlx0XHR9XG4gIDQ0Olx0XG4gIDQ1Olx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7VXNlciBJRDogMHgleCwgU3lub3BzeXMgSUQ6IDB4JXhcXG5cJiMzNDssXG4gIDQ2Olx0XHRcdCBGSUVMRF9HRVQoRFdNQUNfVVNFUlZFUiwgdmVyc2lvbiksXG4gIDQ3Olx0XHRcdCBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbikpO1xuICA0ODpcdFxuICA0OTpcdFx0dmVyLVx1MDAzZXNucHN2ZXIgPSBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbik7XG4gIDUwOlx0XHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXG4gIDUxOlx0XHRcdHZlci1cdTAwM2VkZXZfaWQgPSBGSUVMRF9HRVQoRFdNQUNfVVNFUlZFUiwgdmVyc2lvbik7XG4gIDUyOlx0fVxuICA1MzpcdFxuICA1NDpcdHN0YXRpYyB2b2lkIHN0bW1hY19kd21hY19tb2RlX3F1aXJrKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbiAgNTU6XHR7XG4gIDU2Olx0XHRzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWMgPSBwcml2LVx1MDAzZWh3O1xuICA1NzpcdFxuICA1ODpcdFx0aWYgKHByaXYtXHUwMDNlY2hhaW5fbW9kZSkge1xuICA1OTpcdFx0XHRkZXZfaW5mbyhwcml2LVx1MDAzZWRldmljZSwgXCYjMzQ7Q2hhaW4gbW9kZSBlbmFibGVkXFxuXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEyNzUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHRlY2huaWNhbCBzbmlwcGV0LCBwdXQgaW50byBmaXJzdC1wZXJzb24gdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkRlY29kaW5nIHRoZSBWZXJzaW9uIENoZWNrKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlIGhhdmUgYSBzY2VuYXJpbyB3aGVyZSB3ZSYjMzk7cmUgZXZhbHVhdGluZyBhIGB2ZXJzaW9uYCBmaWVsZCwgbGlrZWx5IHJlbGF0ZWQgdG8gYSBTeW5vcHN5cyBFdGhlcm5ldCBNQUMgZHJpdmVyLCBgc3RtbWFjYC4gVGhlIGtleSBpcyB0aGlzIGJpdG1hc2tpbmcgYnVzaW5lc3M6IGlmIGB2ZXJzaW9uYCBoYXMgYSB2YWx1ZSBvZiBgMHhmZmZmZmZmZmAsIHdoaWNoIGxpa2VseSBzaWduYWxzIHNvbWUga2luZCBvZiAmIzM0O2FsbCBvbmVzJiMzNDsgb3IgaW52YWxpZC9zcGVjaWFsIHN0YXRlLCB0aGVuIGB2ZXItJmd0O3NucHN2ZXJgIGlzIGFzc2lnbmVkIGAweGZmYC4gVGhpcyBpcyB0aGUgaW1wb3J0YW50IGNoZWNrLiBUaGUgY29kZSBzZWVtcyB0byBiZSBleHRyYWN0aW5nIG9yIG1hcHBpbmcgYSBzcGVjaWZpYyBTeW5vcHN5cyB2ZXJzaW9uIG51bWJlciBmcm9tIHRoZSBmdWxsIGB2ZXJzaW9uYCBmaWVsZC4KClRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoYXQgdGhpcyBgMHhmZmAgaXMgYSAqZGVmYXVsdCogb3Igc3BlY2lhbCB2YWx1ZSB1c2VkIHdoZW4gdGhlIGZ1bGwgdmVyc2lvbiBudW1iZXIgaXMgbWFza2VkIHRvIGFsbCBvbmVzLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBwcm9iYWJseSBjbGV2ZXIgd2F5IHRvIGhhbmRsZSBlZGdlIGNhc2VzIG9yIHJlcHJlc2VudCAmIzM5O3Vua25vd24mIzM5OyB2ZXJzaW9ucy4gSXQmIzM5O3MgbGlrZWx5IHVzZWQgbGF0ZXIgZm9yIGZlYXR1cmUgZGV0ZWN0aW9uIG9yIGRyaXZlciBjb25maWd1cmF0aW9uLgoKTm93LCB3aXRoIHRoYXQgYXNzaWdubWVudCwgaXQmIzM5O3MgZm9sbG93ZWQgdXAgYnkgYSBjYWxsIHRvIGBzdG1tYWNfaHdpZl9pbml0YCwgd2hpY2ggdGhlbiB1c2VzIHRoZSBgc3RtbWFjX2h3aWZfZmluZGAgZnVuY3Rpb24uIFRoaXMgaXMgY3JpdGljYWw6IHdlIGhhdmUgdG8gZmluZCB0aGUgY29ycmVjdCBoYXJkd2FyZSBpbnRlcmZhY2UgdG8gaW5pdCB0aGUgZGV2aWNlLiBUaGUgZnVuY3Rpb24gbG9va3MgZm9yIHRoZSBjb3JlIHR5cGUgb2YgdGhlIGRldmljZSwgYWxvbmcgd2l0aCB0aGUgZGV2aWNlJiMzOTtzIHNwZWNpZmljIFN5bm9wc3lzIGlkZW50aWZpZXIgKGBwcml2LSZndDtzeW5vcHN5c19pZGApLCBhbmQsIGNydWNpYWxseSwgdGhlIGB2ZXJzaW9uLmRldl9pZGAuIFNvLCB3aGlsZSB0aGUgaGlnaGVyLWxldmVsIGB2ZXJzaW9uYCBpcyBoYW5kbGVkIGhlcmUgKGFuZCB0aGUgc3BlY2lhbCBjYXNlIHRvIGZpbmQgYSBtb3JlIGdlbmVyYWwgbnVtYmVyKSwgdGhlIGBkZXZfaWRgIGlzIHRoZSBhY3R1YWwgdmVyc2lvbiBJRCB0aGF0IGlzIHJlbGV2YW50IHRvIGZpbmRpbmcgdGhlIGhhcmR3YXJlIGludGVyZmFjZS4gSW50ZXJlc3RpbmcgdGhhdCB0aGUgaW5pdGlhbCBhbGwgb25lcyB2YWx1ZSBtYXkgbWVhbiB0aGF0IHRoZSBzeXN0ZW0ga25vd3Mgd2hhdCB0byB1c2UgZm9yIHRoZSBkZXZpY2UgaWQuIEkgYW0gc3VyZSB0aGVyZSBhcmUgdmFsaWQgcmVhc29ucyBmb3IgZG9pbmcgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5NDpcdHN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXG4gMjk1Olx0e1xuIDI5NjpcdFx0Y29uc3Qgc3RydWN0IHN0bW1hY19od2lmX2VudHJ5ICplbnRyeTtcbiAyOTc6XHRcdGludCBpO1xuIDI5ODpcdFxuIDI5OTpcdFx0Zm9yIChpID0gQVJSQVlfU0laRShzdG1tYWNfaHcpIC0gMTsgaSBcdTAwM2U9IDA7IGktLSkge1xuIDMwMDpcdFx0XHRlbnRyeSA9IFx1MDAyNnN0bW1hY19od1tpXTtcbiAzMDE6XHRcbiAzMDI6XHRcdFx0aWYgKGNvcmVfdHlwZSAhPSBlbnRyeS1cdTAwM2Vjb3JlX3R5cGUpXG4gMzAzOlx0XHRcdFx0Y29udGludWU7XG4gMzA0Olx0XHRcdC8qIFVzZSBzeW5vcHN5c19pZCB2YXIgYmVjYXVzZSBzb21lIHNldHVwcyBjYW4gb3ZlcnJpZGUgdGhpcyAqL1xuIDMwNTpcdFx0XHRpZiAoc25wc3ZlciBcdTAwM2MgZW50cnktXHUwMDNlbWluX2lkKVxuIDMwNjpcdFx0XHRcdGNvbnRpbnVlO1xuIDMwNzpcdFx0XHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMgXHUwMDI2XHUwMDI2XG4gMzA4Olx0XHRcdCAgICBkZXZfaWQgIT0gZW50cnktXHUwMDNlZGV2X2lkKVxuIDMwOTpcdFx0XHRcdGNvbnRpbnVlO1xuIDMxMDpcdFxuIDMxMTpcdFx0XHRyZXR1cm4gZW50cnk7XG4gMzEyOlx0XHR9XG4gMzEzOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTAwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBzdG1tYWNgIERyaXZlciYjMzk7cyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJZiBgc25wc3ZlcmAgaXMgZXF1YWwgdG8gYDB4ZmZgLCB0aGF0JiMzOTtzIGEgc3BlY2lhbCBtYXJrZXIsIHJpZ2h0PyBJdCBtZWFucyB0aGF0IHdoZW4gYHN0bW1hY19od2lmX2ZpbmRgIGlzIGNhbGxlZCwgaXQmIzM5O3MgZ29pbmcgdG8gZmluZCBhIG1hdGNoIGJhc2VkIG9uIHRoZSBoaWdoZXN0IGBtaW5faWRgIGZvciB0aGUgc3BlY2lmaWVkIGBjb3JlX3R5cGVgLiBUaGF0JiMzOTtzIGhvdyB0aGlzIGlzIGRlc2lnbmVkIHRvIGhhbmRsZSB2ZXJzaW9uaW5nLCBsb29raW5nIGZvciB0aGUgbW9zdCBjb21wYXRpYmxlIG9wdGlvbiB3aGVuIGEgc3BlY2lmaWMgdmVyc2lvbiBpc24mIzM5O3QgYXZhaWxhYmxlLiBDb25zZXF1ZW50bHksIHRoZSBjYWxsIHRvIGBzdG1tYWNfaHdpZl9maW5kYCAqd2lsbCogc3VjY2VlZCBpbiB0aGlzIHNjZW5hcmlvLiBUaGVuLCBiZWNhdXNlIHRoZSBsb29rdXAgc3VjY2VlZGVkLCBgc3RtbWFjX2h3aWZfaW5pdGAgd2lsbCByZXR1cm4gMCwgd2hpY2ggc2lnbmlmaWVzIHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24uIEZyb20gdGhlcmUsIGV4ZWN1dGlvbiBwcm9jZWVkcywgYW5kIHdlJiMzOTtsbCB0aGVuIGFycml2ZSBhdCB0aGUgY2FsbCB0byBgc3RtbWFjX2h3X2luaXRgLiBJbnNpZGUgYHN0bW1hY19od19pbml0YCwgbXkgbmV4dCBmb2N1cyB3aWxsIGJlIHRoZSBjYWxsIHRvIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYC4gSSBuZWVkIHRvIHJldmlldyB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSBkcml2ZXImIzM5O3MgY2FwYWJpbGl0eSBkZXRlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19nZXRfaHdfZmVhdHVyZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz0zMTM2PXN0YXRpYyB2b2lkIHN0bW1hY19tbWNfc2V0dXAoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzE1MC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6MzE1MTogKiBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzIC0gZ2V0IE1BQyBjYXBhYmlsaXRpZXMgZnJvbSB0aGUgSFcgY2FwLiByZWdpc3Rlci5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzE1Mi0gKiBAcHJpdjogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zMTU4LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzozMTU5OnN0YXRpYyBpbnQgc3RtbWFjX2dldF9od19mZWF0dXJlcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTMxNjAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9NzM5MD1zdGF0aWMgaW50IHN0bW1hY19od19pbml0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MDQtXHQvKiBHZXQgdGhlIEhXIGNhcGFiaWxpdHkgKG5ldyBHTUFDIG5ld2VyIHRoYW4gMy41MGEpICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc0MDU6XHRwcml2LVx1MDAzZWh3X2NhcF9zdXBwb3J0ID0gc3RtbWFjX2dldF9od19mZWF0dXJlcyhwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzQwNi1cdGlmIChwcml2LVx1MDAzZWh3X2NhcF9zdXBwb3J0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyOTE3CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGFpbWVkIGF0IGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYHN0bW1hY19nZXRfaHdfZmVhdHVyZXNgKioKClJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGUgc291cmNlIGNvZGUgZm9yIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBhbmQgcmVwb3J0cyB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIG9mIHRoZSBTVE1pY3JvZWxlY3Ryb25pY3MgTUFDIGRyaXZlci4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgdGhpbmdzIGxpa2UgZmVhdHVyZSBmbGFncyBmb3IgZGlmZmVyZW50IGhhcmR3YXJlIHZhcmlhdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBqdW1ibyBmcmFtZXMsIGNoZWNrc3VtIG9mZmxvYWQsIG9yIGZsb3cgY29udHJvbCBjYXBhYmlsaXRpZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IGFjY2Vzc2VzIGFuZCBtYW5pcHVsYXRlcywgcGFydGljdWxhcmx5IGFueSBiaXRmaWVsZHMgb3IgZW51bWVyYXRlZCB0eXBlcyB0aGF0IGRlZmluZSB0aGVzZSBmZWF0dXJlcy4gSSBhbnRpY2lwYXRlIGl0JiMzOTtsbCBwcm9iYWJseSBxdWVyeSBoYXJkd2FyZSByZWdpc3RlcnMsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQgbWFwcyB0aG9zZSByZWdpc3RlciB2YWx1ZXMgdG8gaW50ZXJuYWwgZmxhZ3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gZGV0ZWN0ZWQgc2lsaWNvbiByZXZpc2lvbiwgb3IgcGVyaGFwcyBEVCAoRGV2aWNlIFRyZWUpIGJpbmRpbmdzLCB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB3aGF0IGZlYXR1cmVzIGFyZSByZXBvcnRlZC4gSSB3YW50IHRvIHNlZSBpZiB0aGV5JiMzOTtyZSB1c2luZyBhIGxvb2t1cCB0YWJsZSwgYSBzZXJpZXMgb2YgaWYtZWxzZSBzdGF0ZW1lbnRzLCBvciBhIG1vcmUgZWxlZ2FudCBtZXRob2QuIFRoZSBlZmZpY2llbmN5IG9mIHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50LCBlc3BlY2lhbGx5IGlmIGl0JiMzOTtzIGNhbGxlZCBmcmVxdWVudGx5IGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gb3IgaG90cGx1ZyBldmVudHMuIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBpZiBpdCYjMzk7cyBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHRvIGFueSByYWNlIGNvbmRpdGlvbnMsIGlmIGl0IGlzIG11bHRpLXRocmVhZGVkLiBGaW5hbGx5LCBJ4oCZbGwga2VlcCBhIGNsb3NlIGV5ZSBvdXQgZm9yIGFueSBjb21tZW50cyBvciBkb2N1bWVudGF0aW9uIHRoYXQgc2hlZCBsaWdodCBvbiB3aHkgY2VydGFpbiBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQgb3IgYWJzZW50IGluIHNwZWNpZmljIGhhcmR3YXJlIHJldmlzaW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE1OTpcdHN0YXRpYyBpbnQgc3RtbWFjX2dldF9od19mZWF0dXJlcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXG4zMTYwOlx0e1xuMzE2MTpcdFx0cmV0dXJuIHN0bW1hY19nZXRfaHdfZmVhdHVyZShwcml2LCBwcml2LVx1MDAzZWlvYWRkciwgXHUwMDI2cHJpdi1cdTAwM2VkbWFfY2FwKSA9PSAwO1xuMzE2MjpcdH1cbjMxNjM6XHRcbjMxNjQ6XHQvKipcbjMxNjU6XHQgKiBzdG1tYWNfY2hlY2tfZXRoZXJfYWRkciAtIGNoZWNrIGlmIHRoZSBNQUMgYWRkciBpcyB2YWxpZFxuMzE2NjpcdCAqIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmVcbjMxNjc6XHQgKiBEZXNjcmlwdGlvbjpcbjMxNjg6XHQgKiBpdCBpcyB0byB2ZXJpZnkgaWYgdGhlIE1BQyBhZGRyZXNzIGlzIHZhbGlkLCBpbiBjYXNlIG9mIGZhaWx1cmVzIGl0XG4zMTY5Olx0ICogZ2VuZXJhdGVzIGEgcmFuZG9tIE1BQyBhZGRyZXNzXG4zMTcwOlx0ICovXG4zMTcxOlx0c3RhdGljIHZvaWQgc3RtbWFjX2NoZWNrX2V0aGVyX2FkZHIoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxuMzE3MjpcdHtcbjMxNzM6XHRcdHU4IGFkZHJbRVRIX0FMRU5dO1xuMzE3NDpcdFxuMzE3NTpcdFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHByaXYtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKSkge1xuMzE3NjpcdFx0XHRzdG1tYWNfZ2V0X3VtYWNfYWRkcihwcml2LCBwcml2LVx1MDAzZWh3LCBhZGRyLCAwKTtcbjMxNzc6XHRcdFx0aWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkcikpXG4zMTc4Olx0XHRcdFx0ZXRoX2h3X2FkZHJfc2V0KHByaXYtXHUwMDNlZGV2LCBhZGRyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NzEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsaWtlbHkgc2VxdWVuY2Ugb2YgZXZlbnRzLCBrZWVwaW5nIGluIG1pbmQgdGhlIGNvbnRleHQgb2YgdGhlIFNUTU1BQyBkcml2ZXI6CgoqKkludmVzdGlnYXRpbmcgdGhlIFNUTU1BQyBEcml2ZXIgUHJvYmUgU2VxdWVuY2UqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBsaWtlbHkgcGF0aCBvZiB0aGUgU1RNTUFDIGRyaXZlciBkdXJpbmcgcHJvYmUuIEZpcnN0LCBgc3RtbWFjX2dldF9od19mZWF0dXJlYCBpcyBjYWxsZWQsIHdoaWNoIG1lYW5zIGl0IHdpbGwgcmVhZCBzb21lIGhhcmR3YXJlIGZlYXR1cmVzIGRpcmVjdGx5IGZyb20gbWVtb3J5LW1hcHBlZCBJL08gKE1NSU8pIHJlZ2lzdGVycy4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhpcyBmdW5jdGlvbiAqY291bGQqIHJldHVybiB6ZXJvLCBwZXJoYXBzIGluZGljYXRpbmcgYSBmZWF0dXJlIGlzbiYjMzk7dCBzdXBwb3J0ZWQgb3Igc29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nIHRoZSByZWFkLiBOZXh0LCBgc3RtbWFjX2h3X2luaXRgIGlzIGNhbGxlZCwgYW5kIGlmIGFsbCBnb2VzIHdlbGwgd2l0aCB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gYmFzZWQgb24gdGhlIGZlYXR1cmVzIHJlYWQsIHRoaXMgd2lsbCByZXR1cm4gemVyby4gSWYgYm90aCBvZiB0aGVzZSBzdWNjZWVkLCB3ZSB0aGVuIG1vdmUgaW50byB0aGUgYF9fc3RtbWFjX2R2cl9wcm9iZWAgZnVuY3Rpb24uIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBhbmQgd2hlcmUgdGhlIGRldmljZSBpcyBhY3R1YWxseSBtYWRlIG9wZXJhdGlvbmFsLCBidXQgbm90IG5lY2Vzc2FyaWx5IHdoZXJlIHRoZSBkZXZpY2UgaXMgY29tcGxldGVseSBzZXQgdXAuIEkgc2VlIHRoYXQgdGhlIGRyaXZlciBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJzIHRoZSBuZXR3b3JrIGRldmljZSAoYG5ldGRldmApLiBBaGEsIHNvIGBfX3N0bW1hY19kdnJfcHJvYmVgICphbHNvKiBjYWxscyBgc3RtbWFjX21kaW9fcmVnaXN0ZXJgIHdoaWNoIHN1Z2dlc3RzIGl0IHdpbGwgYXR0ZW1wdCB0byByZWdpc3RlciB3aXRoIHRoZSBNRElPIGJ1cy4gU28gZmFyLCB0aGUgaW5pdGlhbGl6YXRpb24gc2VlbXMgb24gdHJhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0bW1hY19tZGlvX3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oPTM5Nz1pbnQgc3RtbWFjX21kaW9fdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaDozOTg6aW50IHN0bW1hY19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTM5OS1pbnQgc3RtbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKm1paSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03Nzc5PXN0YXRpYyBpbnQgX19zdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjgwMjA6XHRyZXQgPSBzdG1tYWNfbWRpb19yZWdpc3RlcihuZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODAyMS1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jPTU2Nz1zdGF0aWMgdm9pZCBzdG1tYWNfbWRpb19idXNfY29uZmlnKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTU5MC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6NTkxOiAqIHN0bW1hY19tZGlvX3JlZ2lzdGVyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTU5Mi0gKiBAbmRldjogbmV0IGRldmljZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTU5NC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6NTk1OmludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNTk2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ2MTEKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgc3RtbWFjX21kaW9fcmVnaXN0ZXJgIEZhaWx1cmUgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzdG1tYWNfbWRpb19yZWdpc3RlcmAgZnVuY3Rpb24uIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBmYWlsdXJlIHNjZW5hcmlvcy4gV2hhdCBhcmUgdGhlIGNvbW1vbiBwaXRmYWxscyBJIG5lZWQgdG8gY29uc2lkZXI/IEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQ6CgoqICAgKipSZXNvdXJjZSBDb25mbGljdHM6KiogQXJlIHRoZXJlIGFueSBtdXRleGVzLCBzcGlubG9ja3MsIG9yIG90aGVyIGNyaXRpY2FsIHNlY3Rpb25zIHRoYXQgY291bGQgYmUgY29udGVuZGVkLCBsZWFkaW5nIHRvIGEgcmVnaXN0cmF0aW9uIGZhaWx1cmUgaWYgYW5vdGhlciBkZXZpY2Ugb3IgZHJpdmVyIGhhcyBhbHJlYWR5IGdyYWJiZWQgdGhlIHJlcXVpcmVkIHJlc291cmNlcz8gSSYjMzk7bGwgbmVlZCB0byByZXZpZXcgdGhlIGxvY2tpbmcgc2VtYW50aWNzIGNhcmVmdWxseS4KKiAgICoqSGFyZHdhcmUgSW5pdGlhbGl6YXRpb24gSXNzdWVzOioqIERvZXMgdGhpcyByZWdpc3RyYXRpb24gZGVwZW5kIG9uIHRoZSBQSFkgb3IgTUFDIGhhcmR3YXJlIGJlaW5nIGluaXRpYWxpemVkIGluIGEgc3BlY2lmaWMgc3RhdGU/IFBlcmhhcHMgc29tZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBuZWVkIHRvIGJlIHByb2dyYW1tZWQgYmVmb3JlaGFuZCwgYW5kIGlmIHRoYXQgcHJvY2VzcyBpcyBpbnRlcnJ1cHRlZCBvciBmYWlscywgYHN0bW1hY19tZGlvX3JlZ2lzdGVyYCB3b3VsZCByaWdodGx5IGJhaWwgb3V0LiBJIHNob3VsZCB0cmFjZSB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuCiogICAqKk1ESU8gQnVzIEF2YWlsYWJpbGl0eToqKiBUaGlzIGZ1bmN0aW9uIGlzIHJlZ2lzdGVyaW5nIHdpdGggYW4gTURJTyBidXMuIElzIHRoYXQgYnVzIGd1YXJhbnRlZWQgdG8gYmUgYXZhaWxhYmxlIGFuZCBvcGVyYXRpb25hbCBhdCB0aGlzIHBvaW50IGluIHRoZSBkcml2ZXImIzM5O3MgZXhlY3V0aW9uPyBBcmUgdGhlcmUgYW55IGRlcGVuZGVuY2llcyBvbiB0aGUgYnVzIGJlaW5nIHByb2JlZCBvciBjb25maWd1cmVkPyBJIHdpbGwgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIGl0JiMzOTtzIHBvc3NpYmxlIHRvIGZhaWwgYmVjYXVzZSBvZiBhbiB1bmluaXRpYWxpemVkIG9yIGJyb2tlbiBNRElPIGJ1cy4KKiAgICoqRHJpdmVyIFZlcnNpb24vQ29tcGF0aWJpbGl0eToqKiBEb2VzIHRoaXMgZnVuY3Rpb24mIzM5O3MgYmVoYXZpb3IgY2hhbmdlIGJhc2VkIG9uIHRoZSBrZXJuZWwgdmVyc2lvbiBvciBzcGVjaWZpYyBoYXJkd2FyZSByZXZpc2lvbj8gQ291bGQgdGhlcmUgYmUga25vd24gaXNzdWVzIG9yIHdvcmthcm91bmRzIHJlcXVpcmVkIGZvciBjZXJ0YWluIGNoaXBzZXRzPyBJJiMzOTtsbCBjaGVjayBhbnkgcmVsYXRlZCBlcnJhdGEgb3IgZG9jdW1lbnRhdGlvbi4KKiAgICoqRXJyb3IgUmV0dXJuIENvZGVzOioqIEkgbmVlZCB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgd2hhdCB0aGUgcG9zc2libGUgZXJyb3IgcmV0dXJuIGNvZGVzIHNpZ25pZnkuIElzIGl0IGEgZ2VuZXJpYyBlcnJvciwgb3IgYSBzcGVjaWZpYyBwcm9ibGVtIChlLmcuLCByZXNvdXJjZSBhbGxvY2F0aW9uIGZhaWx1cmUsIGludmFsaWQgcGFyYW1ldGVyLCBoYXJkd2FyZSBlcnJvcik/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZXR1cm4gdmFsdWVzIG9mIGFueXRoaW5nIGNhbGxlZCB3aXRoaW4gdGhpcyBmdW5jdGlvbiwgdG9vLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJleW9uZCBhIGN1cnNvcnkgbG9vayBhdCB0aGUgbWFuIHBhZ2UgdG8gcHJvcGVybHkgdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBwcm9ibGVtLgoqICAgKipDb25jdXJyZW5jeS9JbnRlcnJ1cHQgQ29udGV4dDoqKiBJcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCBjb250ZXh0LCBvciBmcm9tIGEgdGFza2xldD8gSWYgdGhlcmUgYXJlIGFueSBzaGFyZWQgcmVzb3VyY2VzLCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgaXMgcmUtZW50cmFudCBhbmQgdGhyZWFkLXNhZmUuCgpVbHRpbWF0ZWx5LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IHdhbGsgdGhyb3VnaCB0aGUgY29kZSwgZm9jdXNpbmcgb24gdGhlc2UgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzLCB0byBkZXRlcm1pbmUgdGhlIHJvb3QgY2F1c2Ugb2YgYW55IHByb2JsZW1zLiBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIHRoZSBrZXJuZWwgbG9ncyBhbmQgdGhlbiBtb3ZlIHRvIGEgZGVidWdnZXIgaWYgdGhlIGlzc3VlIGlzIG5vbi1vYnZpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1OTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU5NTpcdGludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiA1OTY6XHR7XG4gNTk3Olx0XHRpbnQgZXJyID0gMDtcbiA1OTg6XHRcdHN0cnVjdCBtaWlfYnVzICpuZXdfYnVzO1xuIDU5OTpcdFx0c3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gNjAwOlx0XHRzdHJ1Y3Qgc3RtbWFjX21kaW9fYnVzX2RhdGEgKm1kaW9fYnVzX2RhdGEgPSBwcml2LVx1MDAzZXBsYXQtXHUwMDNlbWRpb19idXNfZGF0YTtcbiA2MDE6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWRpb19ub2RlID0gcHJpdi1cdTAwM2VwbGF0LVx1MDAzZW1kaW9fbm9kZTtcbiA2MDI6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IG5kZXYtXHUwMDNlZGV2LnBhcmVudDtcbiA2MDM6XHRcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpmaXhlZF9ub2RlO1xuIDYwNDpcdFx0aW50IG1heF9hZGRyID0gUEhZX01BWF9BRERSIC0gMTtcbiA2MDU6XHRcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGU7XG4gNjA2Olx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuIDYwNzpcdFxuIDYwODpcdFx0aWYgKCFtZGlvX2J1c19kYXRhKVxuIDYwOTpcdFx0XHRyZXR1cm4gMDtcbiA2MTA6XHRcbiA2MTE6XHRcdHN0bW1hY19tZGlvX2J1c19jb25maWcocHJpdik7XG4gNjEyOlx0XG4gNjEzOlx0XHRuZXdfYnVzID0gbWRpb2J1c19hbGxvYygpO1xuIDYxNDpcdFx0aWYgKCFuZXdfYnVzKVxuIDYxNTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA2MTY6XHRcbiA2MTc6XHRcdGlmIChtZGlvX2J1c19kYXRhLVx1MDAzZWlycXMpXG4gNjE4Olx0XHRcdG1lbWNweShuZXdfYnVzLVx1MDAzZWlycSwgbWRpb19idXNfZGF0YS1cdTAwM2VpcnFzLCBzaXplb2YobmV3X2J1cy1cdTAwM2VpcnEpKTtcbiA2MTk6XHRcbiA2MjA6XHRcdG5ld19idXMtXHUwMDNlbmFtZSA9IFwmIzM0O3N0bW1hY1wmIzM0OztcbiA2MjE6XHRcbiA2MjI6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpIHtcbiA2MjM6XHRcdFx0bmV3X2J1cy1cdTAwM2VyZWFkID0gXHUwMDI2c3RtbWFjX3hnbWFjMl9tZGlvX3JlYWRfYzIyO1xuIDYyNDpcdFx0XHRuZXdfYnVzLVx1MDAzZXdyaXRlID0gXHUwMDI2c3RtbWFjX3hnbWFjMl9tZGlvX3dyaXRlX2MyMjtcbiA2MjU6XHRcdFx0bmV3X2J1cy1cdTAwM2VyZWFkX2M0NSA9IFx1MDAyNnN0bW1hY194Z21hYzJfbWRpb19yZWFkX2M0NTtcbiA2MjY6XHRcdFx0bmV3X2J1cy1cdTAwM2V3cml0ZV9jNDUgPSBcdTAwMjZzdG1tYWNfeGdtYWMyX21kaW9fd3JpdGVfYzQ1O1xuIDYyNzpcdFxuIDYyODpcdFx0XHRpZiAocHJpdi1cdTAwM2VzeW5vcHN5c19pZCBcdTAwM2MgRFdYR01BQ19DT1JFXzJfMjApIHtcbiA2Mjk6XHRcdFx0XHQvKiBSaWdodCBub3cgb25seSBDMjIgcGh5cyBhcmUgc3VwcG9ydGVkICovXG4gNjMwOlx0XHRcdFx0bWF4X2FkZHIgPSBNSUlfWEdNQUNfTUFYX0MyMkFERFI7XG4gNjMxOlx0XG4gNjMyOlx0XHRcdFx0LyogQ2hlY2sgaWYgRFQgc3BlY2lmaWVkIGFuIHVuc3VwcG9ydGVkIHBoeSBhZGRyICovXG4gNjMzOlx0XHRcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwaHlfYWRkciBcdTAwM2UgTUlJX1hHTUFDX01BWF9DMjJBRERSKVxuIDYzNDpcdFx0XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1Vuc3VwcG9ydGVkIHBoeV9hZGRyIChtYXg9JWQpXFxuXCYjMzQ7LFxuIDYzNTpcdFx0XHRcdFx0XHRNSUlfWEdNQUNfTUFYX0MyMkFERFIpO1xuIDYzNjpcdFx0XHR9XG4gNjM3Olx0XHR9IGVsc2Uge1xuIDYzODpcdFx0XHRuZXdfYnVzLVx1MDAzZXJlYWQgPSBcdTAwMjZzdG1tYWNfbWRpb19yZWFkX2MyMjtcbiA2Mzk6XHRcdFx0bmV3X2J1cy1cdTAwM2V3cml0ZSA9IFx1MDAyNnN0bW1hY19tZGlvX3dyaXRlX2MyMjtcbiA2NDA6XHRcdFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2Vjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDNCkge1xuIDY0MTpcdFx0XHRcdG5ld19idXMtXHUwMDNlcmVhZF9jNDUgPSBcdTAwMjZzdG1tYWNfbWRpb19yZWFkX2M0NTtcbiA2NDI6XHRcdFx0XHRuZXdfYnVzLVx1MDAzZXdyaXRlX2M0NSA9IFx1MDAyNnN0bW1hY19tZGlvX3dyaXRlX2M0NTtcbiA2NDM6XHRcdFx0fVxuIDY0NDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjE2NwoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgbG9naWMsIGFzIGlmIGl0IHdlcmUgbXkgb3duIHRob3VnaHQgcHJvY2VzcywgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlIGxpa2UgbXlzZWxmOgoKKipNRElPIERhdGEgUG9pbnRlciBTYW5pdHkgQ2hlY2sqKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgc2VlIGhlcmUgaXMgYSB2ZXJ5IGJhc2ljLCBidXQgY3JpdGljYWwsIGVycm9yIGNoZWNrLiBJdCYjMzk7cyBleHBsaWNpdGx5IGRlc2lnbmVkIHRvIGhhbmRsZSBhIHNpdHVhdGlvbiB3aGVyZSBgbWRpb19idXNfZGF0YWAgaXMgYSBudWxsIHBvaW50ZXIuIElmIHRoYXQgaGFwcGVucywgdGhlbiB3ZSYjMzk7cmUgcmV0dXJuaW5nIDAgaW1tZWRpYXRlbHkuIFRoaXMgaXMgc3RhbmRhcmQgZGVmZW5zaXZlIHByb2dyYW1taW5nOyBhIE5VTEwgcG9pbnRlciBpbmRpY2F0ZXMgc29tZXRoaW5nIGZ1bmRhbWVudGFsbHkgd3Jvbmcgd2l0aCB0aGUgc2V0dXAsIHByb2JhYmx5IGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgb3IgYSBmYWlsdXJlIGluIGFsbG9jYXRpb24gc29tZXdoZXJlIHVwc3RyZWFtLiBXZSBuZWVkIHRvIGhhbmRsZSB0aGlzIGdyYWNlZnVsbHkgdG8gYXZvaWQgY3Jhc2hlcyBvciB1bmRlZmluZWQgYmVoYXZpb3IuCgpOb3csIHdoZXJlIGRvZXMgdGhpcyBgbWRpb19idXNfZGF0YWAgYWN0dWFsbHkgKmNvbWUqIGZyb20/IFRoYXQmIzM5O3Mgd2hhdCB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIHRleHQgYWRkcmVzc2VzLiBTcGVjaWZpY2FsbHkgZm9yIFBDSSBkZXZpY2VzLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhbiBpbXBvcnRhbnQgZGV0YWlsIHJlZ2FyZGluZyBpbml0aWFsaXphdGlvbi4gSXQmIzM5O3MgYWxsb2NhdGVkIGVpdGhlciBkdXJpbmcgdGhlIGBzdG1tYWNfcGNpX3Byb2JlYCBwaGFzZSBvciBzb21lIHJlbGF0ZWQgc2V0dXAgZnVuY3Rpb24uIFRoYXQgY29uZmlybXMgbXkgc3VzcGljaW9uIHRoYXQgaXQmIzM5O3Mgc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBQQ0kgaW50ZXJmYWNlIGFuZCBhIG5lY2Vzc2FyeSByZXNvdXJjZS4gS25vd2luZyB0aGlzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYWxsb2NhdGlvbiBwb2ludHMgYXJlIGZ1bmN0aW9uaW5nIGNvcnJlY3RseS4gSWYgYG1kaW9fYnVzX2RhdGFgIGlzIE5VTEwsIHRoZW4gaXQgY291bGQgYmUgYSBmYWlsdXJlIHdpdGggbWVtb3J5IG9yIGEgbG9naWMgZXJyb3IgcmVsYXRlZCB0byB0aGUgcHJvYmluZyBhbmQgc2V0dXAgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2Ugc3BlY2lmaWMgYXJlYXMgd2hlbiBkZWJ1Z2dpbmcgb3IgcmV2aWV3aW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvX2J1c19kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0yMz1zdGF0aWMgdm9pZCBjb21tb25fZGVmYXVsdF9kYXRhKHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MzA6XHRwbGF0LVx1MDAzZW1kaW9fYnVzX2RhdGEtXHUwMDNlbmVlZHNfcmVzZXQgPSB0cnVlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTMxLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MTE4PXN0YXRpYyBpbnQgc3RtbWFjX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEzMTpcdHBsYXQtXHUwMDNlbWRpb19idXNfZGF0YSA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxMzI6XHRcdFx0XHRcdCAgIHNpemVvZigqcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMzMtXHRcdFx0XHRcdCAgIEdGUF9LRVJORUwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEzNDpcdGlmICghcGxhdC1cdTAwM2VtZGlvX2J1c19kYXRhKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEzNS1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTk2CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDaGVja2luZyBNRElPIEJ1cyBEYXRhIGFuZCBSZWdpc3RlciBGdW5jdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGF0IGBtZGlvX2J1c19kYXRhYCBpcywgaW4gZmFjdCwgbm90IGEgbnVsbCBwb2ludGVyLiBUaGF0JiMzOTtzIGdvb2Q7IGEgYmFzaWMgc2FuaXR5IGNoZWNrIHBhc3NlZC4gTm93LCB0aGUgbmV4dCBjcnVjaWFsIHN0ZXAgaXMgdG8gc2VlIGhvdyBgc3RtbWFjX21kaW9fcmVnaXN0ZXJgIHBlcmZvcm1zLiBJIG5lZWQgdG8gY2xvc2VseSBleGFtaW5lIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhhdCBmdW5jdGlvbi4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgcG90ZW50aWFsIGZhaWx1cmUuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZSByZWdpc3RlciBvcGVyYXRpb24gc3VjY2VlZHMgYW5kIGlmIHNvLCB3aGF0IGVycm9ycyBtYXkgaGF2ZSBvY2N1cnJlZCBhbmQgdGhlIHN1YnNlcXVlbnQgc3RlcHMsIHRvIGVuc3VyZSBhIHNvbGlkIE1ESU8gY29uZmlndXJhdGlvbiBmb3IgdGhlIFNUTU1BQyBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjQ1Olx0XG4gNjQ2Olx0XHRpZiAobWRpb19idXNfZGF0YS1cdTAwM2VuZWVkc19yZXNldClcbiA2NDc6XHRcdFx0bmV3X2J1cy1cdTAwM2VyZXNldCA9IFx1MDAyNnN0bW1hY19tZGlvX3Jlc2V0O1xuIDY0ODpcdFxuIDY0OTpcdFx0c25wcmludGYobmV3X2J1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcJiMzNDslcy0leFwmIzM0OyxcbiA2NTA6XHRcdFx0IG5ld19idXMtXHUwMDNlbmFtZSwgcHJpdi1cdTAwM2VwbGF0LVx1MDAzZWJ1c19pZCk7XG4gNjUxOlx0XHRuZXdfYnVzLVx1MDAzZXByaXYgPSBuZGV2O1xuIDY1MjpcdFx0bmV3X2J1cy1cdTAwM2VwaHlfbWFzayA9IG1kaW9fYnVzX2RhdGEtXHUwMDNlcGh5X21hc2sgfCBtZGlvX2J1c19kYXRhLVx1MDAzZXBjc19tYXNrO1xuIDY1MzpcdFx0bmV3X2J1cy1cdTAwM2VwYXJlbnQgPSBwcml2LVx1MDAzZWRldmljZTtcbiA2NTQ6XHRcbiA2NTU6XHRcdGVyciA9IG9mX21kaW9idXNfcmVnaXN0ZXIobmV3X2J1cywgbWRpb19ub2RlKTtcbiA2NTY6XHRcdGlmIChlcnIgPT0gLUVOT0RFVikge1xuIDY1NzpcdFx0XHRlcnIgPSAwO1xuIDY1ODpcdFx0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O01ESU8gYnVzIGlzIGRpc2FibGVkXFxuXCYjMzQ7KTtcbiA2NTk6XHRcdFx0Z290byBidXNfcmVnaXN0ZXJfZmFpbDtcbiA2NjA6XHRcdH0gZWxzZSBpZiAoZXJyKSB7XG4gNjYxOlx0XHRcdGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsIFwmIzM0O0Nhbm5vdCByZWdpc3RlciB0aGUgTURJTyBidXNcXG5cJiMzNDspO1xuIDY2MjpcdFx0XHRnb3RvIGJ1c19yZWdpc3Rlcl9mYWlsO1xuIDY2MzpcdFx0fVxuIDY2NDpcdFxuIDY2NTpcdFx0LyogTG9va3MgbGlrZSB3ZSBuZWVkIGEgZHVtbXkgcmVhZCBmb3IgWEdNQUMgb25seSBhbmQgQzQ1IFBIWXMgKi9cbiA2NjY6XHRcdGlmIChwcml2LVx1MDAzZXBsYXQtXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXG4gNjY3Olx0XHRcdHN0bW1hY194Z21hYzJfbWRpb19yZWFkX2M0NShuZXdfYnVzLCAwLCAwLCAwKTtcbiA2Njg6XHRcbiA2Njk6XHRcdC8qIElmIGZpeGVkLWxpbmsgaXMgc2V0LCBza2lwIFBIWSBzY2FubmluZyAqL1xuIDY3MDpcdFx0Zndub2RlID0gZGV2X2Z3bm9kZShwcml2LVx1MDAzZWRldmljZSk7XG4gNjcxOlx0XHRpZiAoZndub2RlKSB7XG4gNjcyOlx0XHRcdGZpeGVkX25vZGUgPSBmd25vZGVfZ2V0X25hbWVkX2NoaWxkX25vZGUoZndub2RlLCBcJiMzNDtmaXhlZC1saW5rXCYjMzQ7KTtcbiA2NzM6XHRcdFx0aWYgKGZpeGVkX25vZGUpIHtcbiA2NzQ6XHRcdFx0XHRmd25vZGVfaGFuZGxlX3B1dChmaXhlZF9ub2RlKTtcbiA2NzU6XHRcdFx0XHRnb3RvIGJ1c19yZWdpc3Rlcl9kb25lO1xuIDY3NjpcdFx0XHR9XG4gNjc3Olx0XHR9XG4gNjc4Olx0XG4gNjc5Olx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZXBoeV9ub2RlIHx8IG1kaW9fbm9kZSlcbiA2ODA6XHRcdFx0Z290byBidXNfcmVnaXN0ZXJfZG9uZTtcbiA2ODE6XHRcbiA2ODI6XHRcdHBoeWRldiA9IHBoeV9maW5kX2ZpcnN0KG5ld19idXMpO1xuIDY4MzpcdFx0aWYgKCFwaHlkZXYgfHwgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciBcdTAwM2UgbWF4X2FkZHIpIHtcbiA2ODQ6XHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtObyBQSFkgZm91bmRcXG5cJiMzNDspO1xuIDY4NTpcdFx0XHRlcnIgPSAtRU5PREVWO1xuIDY4NjpcdFx0XHRnb3RvIG5vX3BoeV9mb3VuZDtcbiA2ODc6XHRcdH1cbiA2ODg6XHRcbiA2ODk6XHRcdC8qXG4gNjkwOlx0XHQgKiBJZiBhbiBJUlEgd2FzIHByb3ZpZGVkIHRvIGJlIGFzc2lnbmVkIGFmdGVyXG4gNjkxOlx0XHQgKiB0aGUgYnVzIHByb2JlLCBkbyBpdCBoZXJlLlxuIDY5MjpcdFx0ICovXG4gNjkzOlx0XHRpZiAoIW1kaW9fYnVzX2RhdGEtXHUwMDNlaXJxcyBcdTAwMjZcdTAwMjYgbWRpb19idXNfZGF0YS1cdTAwM2Vwcm9iZWRfcGh5X2lycSBcdTAwM2UgMCkge1xuIDY5NDpcdFx0XHRuZXdfYnVzLVx1MDAzZWlycVtwaHlkZXYtXHUwMDNlbWRpby5hZGRyXSA9IG1kaW9fYnVzX2RhdGEtXHUwMDNlcHJvYmVkX3BoeV9pcnE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MTIyCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTVE1NQUMgRHJpdmVyIFByb2JlIEZhaWx1cmUqKgoKT2theSwgc28gaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSWYgYG9mX21kaW9idXNfcmVnaXN0ZXJgIOKAkyBvciBpdHMgZmFsbGJhY2ssIGBtZGlvYnVzX3JlZ2lzdGVyYCDigJMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlcywgdGhlIGNvZGUgdGhlbiB0cmllcyB0byBsb2NhdGUgUEhZcy4gU2luY2UgSSYjMzk7bSB3b3JraW5nIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCB3aXRob3V0IGFjdHVhbCBoYXJkd2FyZSwgSSBrbm93IHRoYXQgYHN0bW1hY19tZGlvX3JlYWRfYzIyYCBpcyBnb2luZyB0byByZXR1cm4gYDB4ZmZmZmAgZnJvbSB0aGUgc2ltdWxhdGVkIE1NSU8gc3BhY2UuIE5hdHVyYWxseSwgdGhpcyBtZWFucyBgcGh5X2ZpbmRfZmlyc3RgIHdpbGwgcmV0dXJuIE5VTEwsIGJlY2F1c2UgaXQgd29uJiMzOTt0IGZpbmQgYW55IHJlYWwgUEhZcy4gVGhlIGRyaXZlciB0aGVuIGhlbHBmdWxseSBsb2dzICYjMzQ7Tm8gUEhZIGZvdW5kJiMzNDsgYW5kIHJldHVybnMgYC1FTk9ERVZgLiBBbmQgdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZmFsbCBhcGFydCDigJMgYF9fc3RtbWFjX2R2cl9wcm9iZWAgZmFpbHMhCgpXYWl0IGEgbWludXRlLCBpZiBgX19zdG1tYWNfZHZyX3Byb2JlYCBmYWlscywgdGhlIG5ldHdvcmsgZGV2aWNlIGlzbiYjMzk7dCByZWdpc3RlcmVkLCBhbmQgSSYjMzk7bSBibG9ja2VkIGZyb20gb3BlbmluZyBpdC4gVGhhdCYjMzk7cyBhIHByb2JsZW0uIElzIHRoZXJlIGEgd2F5IGFyb3VuZCB0aGlzPyBMZXQgbWUgc2VlLiBJIGtub3cgdGhhdCBpZiBgcHJpdi0mZ3Q7cGxhdC0mZ3Q7cGh5X25vZGVgIG9yIGBtZGlvX25vZGVgIGFyZSBzZXQsIGl0IHByb2NlZWRzIHRvIGBidXNfcmVnaXN0ZXJfZG9uZWAuIEZvciBQQ0kgZGV2aWNlcywgaG93ZXZlciwgYG1kaW9fbm9kZWAgaXMgTlVMTC4gUENJIGRldmljZXMgdHlwaWNhbGx5IGRvbiYjMzk7dCB1c2UgZGV2aWNlIHRyZWUgbm9kZXMsIHNvIHRoYXQmIzM5O3Mgbm90IGhlbHBpbmcgbWUuIEhvbGQgb24sIGRvZXMgYHN0bW1hY19wY2lfcHJvYmVgIHNldCBgcGxhdC0mZ3Q7cGh5X25vZGVgPyBObywgdGhhdCBkb2VzbiYjMzk7dCBzZWVtIHJpZ2h0LiBQQ0kgZGV2aWNlcyB1c3VhbGx5IGRvbiYjMzk7dCBoYXZlIGRldmljZSB0cmVlIG5vZGVzIGFzc29jaWF0ZWQgd2l0aCB0aGVtLiBMZXQgbWUgZG91YmxlIGNoZWNrIGBzdG1tYWNfcGNpLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3ODYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgRHJpdmVyIENvZGUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBpc3N1ZSwgc28gbGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGxvdy1oYW5naW5nIGZydWl0IGFuZCB0cmFjZSB0aGUgZmxvdy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYGR3bWFjLWludGVsLmNgIGZpbGUuIFRoaXMgaXMgdGhlIGRyaXZlciBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIERXTUFDIChEZXNpZ25XYXJlIE1BQykgY29udHJvbGxlciBvbiBJbnRlbCBwbGF0Zm9ybXMsIHNvIGl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIGludmVzdGlnYXRpbmcgYW55IE1BQy1sYXllciBwZXJmb3JtYW5jZSBpc3N1ZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwcm9ibGVtcykgbGlrZWx5IHJlc2lkZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MDAyCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBkd21hYy1sb29uZ3Nvbi5jYCoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIHRoZSBgZHdtYWMtbG9vbmdzb24uY2AgZmlsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBMb29uZ3NvbiBhcmNoaXRlY3R1cmUmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgRFdNQUMgZHJpdmVyIHNwZWNpZmljYWxseS4gV2hhdCBraW5kIG9mIGN1c3RvbWl6YXRpb25zLCBpZiBhbnksIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCBmb3IgdGhpcyBwbGF0Zm9ybT8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhbnkgdW5pcXVlIGNsb2NraW5nIHNjaGVtZXMsIGludGVycnVwdCBoYW5kbGluZyBudWFuY2VzLCBvciBtZW1vcnkgbWFwcGluZyBxdWlya3Mgc3BlY2lmaWMgdG8gdGhlIExvb25nc29uIFNvQ3M/IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgc2VjdGlvbnMgdG8gZm9jdXMgb24gLSBwZXJoYXBzIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5ncywgaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIGFuZCBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgRE1BIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gbG9vayBmb3IgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgc2lnbmFsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRoZSBMb29uZ3NvbiB2ZXJzaW9uIG9yIHNwZWNpZmljIGZlYXR1cmVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgZ2V0IGEgaGFuZGxlIG9uIHRoZSBzcGVjaWZpY3MuIExldCYjMzk7cyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhpcyBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjgyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIERyaXZlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHN0YXJ0ZWQgb24gdGhpcywgYW5kIHRoZSBmaXJzdCBwbGFjZSBteSBicmFpbiBpcyBqdW1waW5nIHRvIGlzIGBkd21hYy1tb3RvcmNvbW0uY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBkcml2ZXIgY29kZSwgcGFydGljdWxhcmx5IHRoZSBwYXJ0cyByZWxhdGVkIHRvIHRoZSBNb3RvckNvbW0tc3BlY2lmaWMgZmVhdHVyZXMsIGFzc3VtaW5nIGl0JiMzOTtzIGNvcnJlY3RseSBuYW1lZC4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzLCBpbnRlcnJ1cHQgaGFuZGxlcnMsIGFuZCBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byB3b3JrIHRocm91Z2ggdGhlIGltcGxlbWVudGF0aW9uIGFuZCBwaW5wb2ludCB3aGVyZSB0aGUgcG90ZW50aWFsIGlzc3VlIGxpZXMsIG9yIGF0IGxlYXN0IGdhaW4gYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBvcGVyYXRpb25hbCBsb2dpYy4gVGhpcyBpcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgYW55IGluIGRlcHRoIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTUwOAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IGluIFBIWSBJRCBEZXRlY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgZ290IG1lIHRoaW5raW5nLiBJZiBgcGh5X2ZpbmRfZmlyc3RgIGZhaWxzLCBpdCByZXR1cm5zIGAtRU5PREVWYCwgd2hpY2ggaXMgc3RhbmRhcmQuIEJ1dCB0aGVuIGl0IGhpdCBtZTogd2hhdCBpZiBgc3RtbWFjX21kaW9fcmVhZF9jMjJgIOKAkyB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiByZWFkaW5nIHRoZSBQSFkgSUQg4oCTIHJldHVybnMgc29tZXRoaW5nIHRoYXQgKmxvb2tzKiBsaWtlIGEgdmFsaWQgUEhZIElELCBldmVuIGlmIGl0JiMzOTtzIG5vdD8gV2Uga25vdyB0aGF0IFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGNhbiBpbnRlcmNlcHQgdGhvc2UgTU1JTyByZWFkcyBhbmQgcHJvdmlkZSByYW5kb20gdmFsdWVzLiBJZiB0aG9zZSByYW5kb20gdmFsdWVzIGhhcHBlbiB0byB0cmljayBgcGh5X2ZpbmRfZmlyc3RgIGludG8gdGhpbmtpbmcgdGhlcmUmIzM5O3MgYSB2YWxpZCBQSFksIHdlJiMzOTt2ZSBnb3QgYSBwcm9ibGVtLiBBbmQgdGhlIHJlYXNvbiB0aGlzIGlzIGEgYmlnIGRlYWwgaXMgYmVjYXVzZSBgc3RtbWFjX21kaW9fcmVhZF9jMjJgIHJlbGllcyBvbiByZWFkaW5nIHRoZSBHTUlJX0RBVEEgcmVnaXN0ZXIsIHNvIG1heWJlIHRoYXQgcmVnaXN0ZXIgaXMgdGhlIGN1bHByaXQuIE5vdywgSSBzaG91bGQgZGl2ZSBpbnRvIGBzdG1tYWNfbWRpb19yZWFkX2MyMmAgdG8gc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RtbWFjX21kaW9fcmVhZF9jMjImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYz0yODM9c3RhdGljIGludCBzdG1tYWNfbWRpb193cml0ZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBwYSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTI4OS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6MjkwOiAqIHN0bW1hY19tZGlvX3JlYWRfYzIyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTI5MS0gKiBAYnVzOiBwb2ludHMgdG8gdGhlIG1paV9idXMgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy0yOTgtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jOjI5OTpzdGF0aWMgaW50IHN0bW1hY19tZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlhZGRyLCBpbnQgcGh5cmVnKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy0zMDAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM9NTk1PWludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTYzNy1cdH0gZWxzZSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jOjYzODpcdFx0bmV3X2J1cy1cdTAwM2VyZWFkID0gXHUwMDI2c3RtbWFjX21kaW9fcmVhZF9jMjI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTYzOS1cdFx0bmV3X2J1cy1cdTAwM2V3cml0ZSA9IFx1MDAyNnN0bW1hY19tZGlvX3dyaXRlX2MyMjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAzNjYKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSB3ZSBnby4uLgoKKipBbmFseXppbmcgdGhlIGBzdG1tYWNfbWRpb19yZWFkX2MyMmAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBzdG1tYWNfbWRpb19yZWFkX2MyMmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBzdG1tYWMgZHJpdmVyLiBDbGVhcmx5LCBpdCYjMzk7cyBpbnZvbHZlZCBpbiBNZWRpYSBJbmRlcGVuZGVudCBJbnRlcmZhY2UgKE1JSSkgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBDbGF1c2UgMjIgTUlJIGludGVyZmFjZS4gR2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWUsIEkgc3VzcGVjdCB0aGlzIGlzIGEgcmVhZCBvcGVyYXRpb24sIGFpbWluZyB0byByZXRyaWV2ZSBkYXRhIGZyb20gYSBjb25uZWN0ZWQgTUlJIGRldmljZS4gVGhlICYjMzQ7YzIyJiMzNDsgbGlrZWx5IHBvaW50cyB0byB0aGUgc3BlY2lmaWMgcHJvdG9jb2wgdmVyc2lvbiBiZWluZyB1dGlsaXplZCwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBzdXNwaWNpb24gYnkgaW5zcGVjdGluZyB0aGUgZnVuY3Rpb24mIzM5O3MgcGFyYW1ldGVycyBhbmQgaW50ZXJuYWwgbG9naWMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHJlZ2lzdGVyIGFkZHJlc3NlcywgcmVhZCBjb21tYW5kcywgZGF0YSByZXRyaWV2YWwgbWVjaGFuaXNtcywgYW5kIGFueSBlcnJvciBoYW5kbGluZyBvciByZXRyeSBsb2dpYy4gV2hhdCBzcGVjaWZpYyByZWdpc3RlcnMgYXJlIGJlaW5nIGFjY2Vzc2VkPyBJcyBpdCBoYW5kbGluZyBhbnkgbmVjZXNzYXJ5IGNsb2NraW5nIG9yIHRpbWluZyBjb25zaWRlcmF0aW9ucyBmb3IgdGhlIE1ESU8gYnVzPyBBbnkgcG93ZXIgbWFuYWdlbWVudCBjYWxscz8gQWxzbywgaG93IGlzIHRoZSBkZXZpY2UgYWRkcmVzcyBwYXNzZWQgdG8gaXQ/IEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIE1ESU8gZnJhbWV3b3JrIHdpdGhpbiB0aGUgc3RtbWFjIGRyaXZlci4gV2hhdCBhcmUgdGhlIGNvbW1vbiBlcnJvciBjYXNlcyBpdCBuZWVkcyB0byBoYW5kbGUsIHN1Y2ggYXMgYW4gTkFDSyBvciBhIHRpbWVvdXQ/IElzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGRpcmVjdGx5IGJ5IGFub3RoZXIgbW9kdWxlIG9yIGRvZXMgaXQgcGVyZm9ybSBzb21lIGludGVybmFsIGZ1bmN0aW9ucz8gRmluYWxseSwgaG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgUEhZIG9yIG90aGVyIGNvbm5lY3RlZCBNRElPIGRldmljZXM/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoaXMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgcmVhZCBvcGVyYXRpb24sIGJ1dCBJIGtub3cgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQmIzM5O3Mgc3RhcnQgcmVhZGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTk6XHRzdGF0aWMgaW50IHN0bW1hY19tZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlhZGRyLCBpbnQgcGh5cmVnKVxuIDMwMDpcdHtcbiAzMDE6XHRcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGJ1cy1cdTAwM2Vwcml2KTtcbiAzMDI6XHRcdHUzMiBjbWQ7XG4gMzAzOlx0XG4gMzA0Olx0XHRpZiAocHJpdi1cdTAwM2VwbGF0LVx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUM0KVxuIDMwNTpcdFx0XHRjbWQgPSBNSUlfR01BQzRfUkVBRDtcbiAzMDY6XHRcdGVsc2VcbiAzMDc6XHRcdFx0Y21kID0gMDtcbiAzMDg6XHRcbiAzMDk6XHRcdHJldHVybiBzdG1tYWNfbWRpb19yZWFkKHByaXYsIHBoeWFkZHIsIHBoeXJlZywgY21kLCAwKTtcbiAzMTA6XHR9XG4gMzExOlx0XG4gMzEyOlx0LyoqXG4gMzEzOlx0ICogc3RtbWFjX21kaW9fcmVhZF9jNDVcbiAzMTQ6XHQgKiBAYnVzOiBwb2ludHMgdG8gdGhlIG1paV9idXMgc3RydWN0dXJlXG4gMzE1Olx0ICogQHBoeWFkZHI6IE1JSSBhZGRyXG4gMzE2Olx0ICogQGRldmFkOiBkZXZpY2UgYWRkcmVzcyB0byByZWFkXG4gMzE3Olx0ICogQHBoeXJlZzogTUlJIHJlZ1xuIDMxODpcdCAqIERlc2NyaXB0aW9uOiBpdCByZWFkcyBkYXRhIGZyb20gdGhlIE1JSSByZWdpc3RlciBmcm9tIHdpdGhpbiB0aGUgcGh5IGRldmljZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwOTcKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSB3ZSBnby4uLgoKKipEZWx2aW5nIGludG8gdGhlIGBzdG1tYWNfbWRpb19yZWFkYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHN0bW1hY19tZGlvX3JlYWRgIGZ1bmN0aW9uLiBCYXNlZCBvbiB0aGUgbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgY29yZSByb3V0aW5lIGZvciByZWFkaW5nIGRhdGEgZnJvbSBhbiBNRElPIGJ1cywgbGlrZWx5IHJlbGF0ZWQgdG8gYW4gU1RNaWNyb2VsZWN0cm9uaWNzIEV0aGVybmV0IE1BQyAoU1RNTUFDKSBjb250cm9sbGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIHBoeXNpY2FsIGxheWVyIChQSFkpIHRocm91Z2ggdGhpcyBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtcyDigJMgdGhlIGJpdC1iYW5naW5nLCB0aGUgcmVnaXN0ZXIgYWNjZXNzIHBhdHRlcm5zLCBhbmQgYW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIG9yIGVycm9yIGhhbmRsaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKlJlZ2lzdGVyIEFkZHJlc3Npbmc6KiogSG93IGRvZXMgaXQgY29uc3RydWN0IHRoZSBNRElPIHJlZ2lzdGVyIGFkZHJlc3Nlcz8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdGVjaG5pcXVlcyB1c2VkIGZvciBkaWZmZXJlbnQgUEhZIHR5cGVzIG9yIHZlbmRvci1zcGVjaWZpYyByZWdpc3RlcnM/CiogICAqKkRhdGEgVHJhbnNmZXI6KiogSG93IGlzIHRoZSByZWFkIG9wZXJhdGlvbiBpbXBsZW1lbnRlZD8gSXMgaXQgcG9sbGluZywgaW50ZXJydXB0LWRyaXZlbiwgb3IgYSBjb21iaW5hdGlvbj8gV2hhdCBhcmUgdGhlIHRpbWluZyBjb25zaWRlcmF0aW9ucywgZ2l2ZW4gdGhlIHNwZWVkIG9mIHRoZSBNRElPIGJ1cz8KKiAgICoqRXJyb3IgQ2hlY2tpbmc6KiogRG9lcyBpdCBpbXBsZW1lbnQgYW55IENSQyBvciBwYXJpdHkgY2hlY2tzIG9uIHRoZSByZWFkIGRhdGE/IERvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCBidXMgZXJyb3JzLCBzdWNoIGFzIGEgbWlzc2luZyBvciB1bnJlc3BvbnNpdmUgUEhZPwoqICAgKipTeW5jaHJvbml6YXRpb246KiogSG93IGRvZXMgaXQgZW5zdXJlIHByb3BlciBzeW5jaHJvbml6YXRpb24gd2l0aCB0aGUgUEhZLCBwYXJ0aWN1bGFybHkgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSByZWFkIHRyYW5zYWN0aW9uPwoqICAgKipJbnRlcnJ1cHQgSGFuZGxpbmcgKGlmIGFueSk6KiogSWYgaW50ZXJydXB0cyBhcmUgaW52b2x2ZWQsIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIHNlcnZpY2VkIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucy4KKiAgICoqUEhZIEFkZHJlc3MgSGFuZGxpbmc6KiogSG93IGlzIHRoZSBQSFkmIzM5O3MgYWRkcmVzcyBoYW5kbGVkPyBJcyBpdCBoYXJkY29kZWQsIHBhc3NlZCBhcyBhIHBhcmFtZXRlciwgb3IgZHluYW1pY2FsbHkgZGV0ZXJtaW5lZD8KKiAgICoqQ2xhcml0eSBvZiBjb2RlOioqIEhvdyBhcmUgdGhlIHZhcmlvdXMgc3RlcHMgZW5jYXBzdWxhdGVkPyBXaGF0IGlzIHRoZSBjb2RlIHN0eWxlPyBXaWxsIEkgbmVlZCB0byBzcGVuZCBhIGxvdCBvZiB0aW1lIGRlY2lwaGVyaW5nIGl0PwoKSSB3YW50IHRvIHNlZSBob3cgdGhlIGZ1bmN0aW9uIGludGVncmF0ZXMgd2l0aGluIHRoZSBsYXJnZXIgYHN0bW1hY2AgZHJpdmVyIGFyY2hpdGVjdHVyZSBhbmQgd2hhdCBsZXZlbCBvZiBhYnN0cmFjdGlvbiBpdCBwcm92aWRlcy4gTXkgZ29hbCBpcyB0byBncmFzcCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIGFuZCBwb3RlbnRpYWwgcGl0ZmFsbHMgb2YgdGhpcyBNRElPIHJlYWQgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSBob3cgdGhlIGVuZ2luZWVycyB0YWNrbGVkIHRoaXMgY3JpdGljYWwgcGFydCBvZiB0aGUgZHJpdmVyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MDpcdFx0ICAgICAgIE1JSV9BRERSX0dCVVNZO1xuIDI0MTpcdH1cbiAyNDI6XHRcbiAyNDM6XHRzdGF0aWMgaW50IHN0bW1hY19tZGlvX2FjY2VzcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBwYSxcbiAyNDQ6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgZ3IsIHUzMiBjbWQsIHUzMiBkYXRhLCBib29sIHJlYWQpXG4gMjQ1Olx0e1xuIDI0NjpcdFx0dm9pZCBfX2lvbWVtICptaWlfYWRkcmVzcyA9IHByaXYtXHUwMDNlaW9hZGRyICYjNDM7IHByaXYtXHUwMDNlaHctXHUwMDNlbWlpLmFkZHI7XG4gMjQ3Olx0XHR2b2lkIF9faW9tZW0gKm1paV9kYXRhID0gcHJpdi1cdTAwM2Vpb2FkZHIgJiM0MzsgcHJpdi1cdTAwM2Vody1cdTAwM2VtaWkuZGF0YTtcbiAyNDg6XHRcdHUzMiBhZGRyO1xuIDI0OTpcdFx0aW50IHJldDtcbiAyNTA6XHRcbiAyNTE6XHRcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQocHJpdi1cdTAwM2VkZXZpY2UpO1xuIDI1MjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAyNTM6XHRcdFx0cmV0dXJuIHJldDtcbiAyNTQ6XHRcbiAyNTU6XHRcdHJldCA9IHN0bW1hY19tZGlvX3dhaXQobWlpX2FkZHJlc3MsIE1JSV9BRERSX0dCVVNZKTtcbiAyNTY6XHRcdGlmIChyZXQpXG4gMjU3Olx0XHRcdGdvdG8gb3V0O1xuIDI1ODpcdFxuIDI1OTpcdFx0YWRkciA9IHN0bW1hY19tZGlvX2Zvcm1hdF9hZGRyKHByaXYsIHBhLCBncikgfCBjbWQ7XG4gMjYwOlx0XG4gMjYxOlx0XHR3cml0ZWwoZGF0YSwgbWlpX2RhdGEpO1xuIDI2MjpcdFx0d3JpdGVsKGFkZHIsIG1paV9hZGRyZXNzKTtcbiAyNjM6XHRcbiAyNjQ6XHRcdHJldCA9IHN0bW1hY19tZGlvX3dhaXQobWlpX2FkZHJlc3MsIE1JSV9BRERSX0dCVVNZKTtcbiAyNjU6XHRcdGlmIChyZXQpXG4gMjY2Olx0XHRcdGdvdG8gb3V0O1xuIDI2NzpcdFxuIDI2ODpcdFx0LyogUmVhZCB0aGUgZGF0YSBmcm9tIHRoZSBNSUkgZGF0YSByZWdpc3RlciBpZiBpbiByZWFkIG1vZGUgKi9cbiAyNjk6XHRcdHJldCA9IHJlYWQgPyByZWFkbChtaWlfZGF0YSkgXHUwMDI2IE1JSV9EQVRBX0dEX01BU0sgOiAwO1xuIDI3MDpcdFxuIDI3MTpcdG91dDpcbiAyNzI6XHRcdHBtX3J1bnRpbWVfcHV0KHByaXYtXHUwMDNlZGV2aWNlKTtcbiAyNzM6XHRcbiAyNzQ6XHRcdHJldHVybiByZXQ7XG4gMjc1Olx0fVxuIDI3NjpcdFxuIDI3NzpcdHN0YXRpYyBpbnQgc3RtbWFjX21kaW9fcmVhZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBwYSxcbiAyNzg6XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IGdyLCB1MzIgY21kLCBpbnQgZGF0YSlcbiAyNzk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMjMwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogODY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIGFuZCBGdXp6aW5nIGBzdG1tYWNfbWFjX2xpbmtfdXBgKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgc3RtbWFjX21hY19saW5rX3VwYCBmdW5jdGlvbi4gSXQgc2VlbXMgcmVhY2hhYmxlIHRocm91Z2ggc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6aW5nLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gTGV0IG1lIHdhbGsgdGhyb3VnaCBteSB0aG91Z2h0IHByb2Nlc3MuCgpGaXJzdCwgYHN0bW1hY19tZGlvX3dhaXRgIHdhaXRzIGZvciBgTUlJX0FERFJfR0JVU1lgIHRvIGNsZWFyLCBidXQgaWYgdGhlIGZ1enplciB0aHJvd3MgYSB2YWx1ZSBvZiBgMHhmZmZmZmZmZmAsIHRoYXQmIzM5O2xsIGNhdXNlIGEgdGltZW91dC4gSG93ZXZlciwgaWYgdGhlIGZ1enplciBoaXRzIGEgdmFsdWUgd2hlcmUgYE1JSV9BRERSX0dCVVNZYCAqaXMqIHplcm8sIHRoZW4gYHN0bW1hY19tZGlvX3dhaXRgIGFjdHVhbGx5IHN1Y2NlZWRzLiBJdCB0aGVuIHJlYWRzIGBtaWlfZGF0YWAuIElmIHRoYXQgcmV0dXJucyBhIHZhbGlkIFBIWSBJROKAlG5vdCBgMHhmZmZmYCBvciBgMHgwMDAwYOKAlGBwaHlfZmluZF9maXJzdGAgd2lsbCBzdWNjZWVkLiBUaGlzIGZ1bmN0aW9uIHNjYW5zIGFkZHJlc3NlcyAwLTMxLCByZWFkaW5nIHJlZ2lzdGVycyAyIGFuZCAzIGZvciB0aGUgUEhZIElELiBTbywgaWYgdGhlIGZ1enplciBwcm92aWRlcyBhIHZhbGlkIFBIWSBJRCwgYSBQSFkgZGV2aWNlIGdldHMgY3JlYXRlZC4gQ29uc2VxdWVudGx5LCBgc3RtbWFjX21kaW9fcmVnaXN0ZXJgIGFuZCB0aGVuIGBfX3N0bW1hY19kdnJfcHJvYmVgIHN1Y2NlZWQsIGFuZCB0aGUgbmV0ZGV2IGlzIHJlZ2lzdGVyZWQuCgpOb3csIHdoZW4gSSBicmluZyB0aGUgZGV2aWNlIHVwIHdpdGggYGlwIGxpbmsgc2V0IGV0aDAgdXBgLCBpdCBjYWxscyBgc3RtbWFjX21hY19saW5rX3VwYCB3aGVuIHRoZSBQSFkgbGluayBjb21lcyB1cC4gQW5kLCBzaW5jZSBgc3RtbWFjX21hY19saW5rX3VwYCBpcyBhIHBoeWxpbmsgY2FsbGJhY2ssIGlmIHRoZSBmdXp6ZXIgcHJvdmlkZXMgYSB2YWxpZCBQSFkgSUQsIHBoeWxpbmsgYXR0YWNoZXMgdGhlIFBIWSwgYW5kIHRoZW4gc3RhcnRzIHBvbGxpbmcgaXQgZm9yIHN0YXR1cyBieSByZWFkaW5nIHJlZ2lzdGVyIDEsIGV0Yy4gSWYgdGhlIGZ1enplciByZXR1cm5zIHNvbWV0aGluZyBpbmRpY2F0aW5nIGxpbmsgdXAsIGBwaHlsaW5rYCBjYWxscyBgbWFjX2xpbmtfdXBgLgoKU28sIGl0ICppcyogcmVhY2hhYmxlIHdpdGggUENJIGZ1enppbmchIEkmIzM5O20gdGhpbmtpbmcgdGhhdCYjMzk7cyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLgoKQnV0IHdhaXQsIGlzIHRoaXMgKm9ubHkqIHJlYWNoYWJsZSB2aWEgUENJIGZ1enppbmc/IFdoYXQgYWJvdXQgcGxhdGZvcm0gZHJpdmVycz8gSSYjMzk7bSBub3cgdGhpbmtpbmcgYWJvdXQgdGhlIGBkd21hYy1pbnRlbC5jYCwgYGR3bWFjLWxvb25nc29uLmNgLCBhbmQgYGR3bWFjLW1vdG9yY29tbS5jYCBkcml2ZXJzIOKAkyB0aGV5ICphcmUqIFBDSS4gQnV0IHdoYXQgYWJvdXQgYWxsIHRoZSBwbGF0Zm9ybSBkcml2ZXJzIGxpa2UgYGR3bWFjLWR3Yy1xb3MtZXRoLmNgLCBgZHdtYWMtaXBxODA2eC5jYCwgZXRjPyBTeXprYWxsZXIgY2FuIGZ1enogcGxhdGZvcm0gZGV2aWNlcywgYnV0IGl0JiMzOTtzIHVzdWFsbHkgZGVwZW5kZW50IG9uIHRoZSBkZXZpY2UgdHJlZSBvciBleGlzdGluZyBkZXZpY2VzLiBQQ0ksIHRob3VnaCwgY2FuIGJlIGluamVjdGVkIGR5bmFtaWNhbGx5LCB3aGljaCBpcyBwZXJmZWN0IGhlcmUuCgpTaW5jZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYHN0bW1hY19tYWNfbGlua191cGAgdG8gaGFuZGxlIHRoZSBuZXcgc3BlZWRzIGZvciBgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUlgIGFuZCBgUEhZX0lOVEVSRkFDRV9NT0RFX1hMR01JSWAsIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gVGhhdCBtYWtlcyBpdCBtb3JlIGludGVyZXN0aW5nIGZvciBmdXp6aW5nIQoKT2theSwgdGltZSB0byBmaWd1cmUgb3V0IHRoZSBuZWVkZWQgY29uZmlncy4gSSB0aGluayBJJiMzOTtsbCBuZWVkIGBTVE1NQUNfRVRIYCwgYFNUTU1BQ19QQ0lgLCBgRFdNQUNfSU5URUxgIChtYXliZSB0byBnZXQgbW9yZSBQQ0kgSURzKSwgYERXTUFDX0xPT05HU09OYCwgYW5kIGBEV01BQ19NT1RPUkNPTU1gLiBJIHNob3VsZCBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERXTUFDX0lOVEVMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9MzIyPWNvbmZpZyBEV01BQ19JTVg4XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zMzMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjMzNDpjb25maWcgRFdNQUNfSU5URUxfUExBVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zMzUtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBkd21hYyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0zNzM9Y29uZmlnIFNUTU1BQ19MSUJQQ0lcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTM3Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6Mzc4OmNvbmZpZyBEV01BQ19JTlRFTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zNzktXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBHTUFDIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQwNjMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgRFdNQUMgQ29uZmlncyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgc3RhdGUgb2YgdGhlIGBEV01BQ19MT09OR1NPTmAgYW5kIGBEV01BQ19NT1RPUkNPTU1gIGNvbmZpZ3VyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVjYWxsIGFueSByZWNlbnQgd29yayBJIG1pZ2h0IGhhdmUgZG9uZSBpbiB0aGlzIGFyZWEuIEhhdmUgdGhlcmUgYmVlbiBhbnkgcmVwb3J0ZWQgaXNzdWVzIG9yIG1vZGlmaWNhdGlvbnMgcGVuZGluZz8gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBkcml2ZXJzIG9yIG1vZHVsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggb2YgdGhvc2UuIEFyZSB3ZSBkZWFsaW5nIHdpdGggc3RhbmRhcmQgY29uZmlndXJhdGlvbnMsIG9yIGFyZSB0aGVyZSBjdXN0b20gcGF0Y2hlcyBpbnZvbHZlZD8gV2hhdCYjMzk7cyB0aGUgbGF0ZXN0IGJ1aWxkIHN0YXR1cyBmb3IgZWFjaD8gSSBuZWVkIHRvIGNoZWNrIGZvciB1cHN0cmVhbSB1cGRhdGVzIG9yIGRvd25zdHJlYW0gbW9kaWZpY2F0aW9ucy4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIGFzY2VydGFpbiBxdWlja2x5LCBhcmUgd2Ugc3RpbGwgYWxpZ25lZCB3aXRoIGJlc3QgcHJhY3RpY2VzIGZvciB0aG9zZSBNQUMgY29uZmlndXJhdGlvbnM/IERlcGVuZGluZyBvbiB3aGF0IEkgZmluZCwgSSBtaWdodCBuZWVkIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGVtIHdpdGggb3VyIHByb2plY3QmIzM5O3MgZG9jdW1lbnRhdGlvbiwgcmVsZXZhbnQgbWFpbGluZyBsaXN0cywgb3IgZXZlbiB0aGUgdXBzdHJlYW0gc291cmNlLiBVbHRpbWF0ZWx5LCBJIGFtIGxvb2tpbmcgZm9yIHdoZXRoZXIgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZTogYSkgY3VycmVudCBiKSB3b3JraW5nIGMpIG9wdGltYWwsIGFzIGEgcXVpY2sgZmlyc3QgcGFzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERXTUFDX0xPT05HU09OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9MzM0PWNvbmZpZyBEV01BQ19JTlRFTF9QTEFUXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zNDMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjM0NDpjb25maWcgRFdNQUNfTE9PTkdTT04xXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTM0NS1cdHRyaXN0YXRlIFwmIzM0O0xvb25nc29uMSBHTUFDIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM3OD1jb25maWcgRFdNQUNfSU5URUxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTM4Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6Mzg4OmNvbmZpZyBEV01BQ19MT09OR1NPTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zODktXHR0cmlzdGF0ZSBcJiMzNDtMb29uZ3NvbiBQQ0kgRFdNQUMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDU3OAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDEyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCBhcmUgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1BDSWAsIGBEV01BQ19JTlRFTGAsIGBEV01BQ19MT09OR1NPTmAsIGFuZCBgRFdNQUNfTU9UT1JDT01NYC4gSXQmIzM5O3MgZ29vZCB0byBrZWVwIHRob3NlIGluIG1pbmQgYXMgY29udGV4dC4gVGhlIG1haW4gZnVuY3Rpb24gdG91Y2hlZCwgd2hpY2ggSSBuZWVkIHRvIGZvY3VzIG9uLCBhcHBlYXJzIHRvIGJlIGBzdG1tYWNfbWFjX2xpbmtfdXBgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSAqb25seSogZnVuY3Rpb24gaW1wYWN0ZWQgYnkgdGhpcyBkaWZmLiBBZnRlciBxdWlja2x5IHNjYW5uaW5nIHRoZSBwYXRjaCwgSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgYHN0bW1hY19tYWNfbGlua191cGAgaXMgaW5kZWVkIHRoZSBzb2xlIGZ1bmN0aW9uIHRoYXQgd2FzIGNoYW5nZWQuCgpOb3csIGxldCYjMzk7cyB6b29tIGluIG9uIHRoZSBjb2RlIG1vZGlmaWNhdGlvbiBpdHNlbGYuIEl0JiMzOTtzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjaGFuZ2UgaW4gYHN0bW1hY19tYWNfbGlua191cGAuICBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYSBzZXJpZXMgb2YgbmVzdGVkIGBpZi9lbHNlIGlmL2Vsc2VgIHN0YXRlbWVudHMgdG8gaGFuZGxlIGRpZmZlcmVudCBzcGVlZHMgYmFzZWQgb24gdGhlIGBQSFlfSU5URVJGQUNFX01PREVgLiBUaGUgbmV3IHBhdGNoIGhhcyBmbGF0dGVuZWQgdGhhdCBpbnRvIGEgc2luZ2xlIGBzd2l0Y2hgIHN0YXRlbWVudC4gQWxzbywgaXQgYXBwZWFycyB0aGVyZSB3ZXJlIHNvbWUgbWlzc2luZyBzcGVlZCBlbnRyaWVzIGZvciBib3RoIGBVU1hHTUlJYCBhbmQgYFhMR01JSWAgaW50ZXJmYWNlcyBpbiB0aGUgb3JpZ2luYWwgY29kZSwgYW5kIHRoZXkgYXJlIG5vdyBjb3ZlcmVkLiBUaGUgcGF0Y2ggYXBwZWFycyB0byB1bmlmeSBzcGVlZCBoYW5kbGluZyBmb3IgdGhlc2UgaW50ZXJmYWNlcy4gSW4gdGhlIG9yaWdpbmFsIHZlcnNpb24gaXQgc2VlbXMgdGhlcmUgd2FzIG5vIHNwZWVkIGhhbmRsaW5nIGZvciB0aGUgbmV3ZXIgc3BlZWRzLCBhbmQgaXQgYXBwZWFycyB0aGUgbmV3IGNvZGUgZml4ZXMgdGhpcy4gT3ZlcmFsbCwgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYWltZWQgYXQgc3RyZWFtbGluaW5nIHNwZWVkIGhhbmRsaW5nIGFuZCBlbnN1cmluZyBhbGwgcmVsZXZhbnQgc3BlZWRzIGFyZSBzdXBwb3J0ZWQsIGF0IGxlYXN0IGZyb20gd2hhdCBJIGNhbiBzZWUuICBUaGlzIGlzIGEgcHJldHR5IHR5cGljYWwgcGF0dGVybiBmb3IgcmVmYWN0b3Jpbmcg4oCTIGltcHJvdmluZyBjb2RlIHJlYWRhYmlsaXR5IGFuZCBhZGRyZXNzaW5nIHBvdGVudGlhbCBnYXBzIGluIHRoZSBzdXBwb3J0ZWQgZmVhdHVyZSBzZXQuCgpHaXZlbiB0aGF0IHRoaXMgaXMgYHN0bW1hY19tYWNfbGlua191cGAsIGl0JiMzOTtzIGFsbCBhYm91dCBicmluZ2luZyB0aGUgbGluayB1cCwgdGhlIFBIWSBpbnRlcmZhY2UsIGFuZCB0aGUgc3BlZWRzIHN1cHBvcnRlZCB3aXRoaW4gdGhvc2UgaW50ZXJmYWNlcywgd2hpY2ggbWFrZSBpdCBuZWNlc3NhcnkgZm9yIGEgY29ycmVjdCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRlc3RlZCB0aG9yb3VnaGx5IGZvciB0aGUgYWZmZWN0ZWQgaW50ZXJmYWNlIG1vZGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdG1tYWNfbWFjX2xpbmtfdXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz0xMDU2PXN0YXRpYyB2b2lkIHN0bW1hY19tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTA2OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6MTA2OTpzdGF0aWMgdm9pZCBzdG1tYWNfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTEwNzAtXHRcdFx0ICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz0xMjQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHN0bW1hY19waHlsaW5rX21hY19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0xMjUxLVx0Lm1hY19saW5rX2Rvd24gPSBzdG1tYWNfbWFjX2xpbmtfZG93bixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6MTI1MjpcdC5tYWNfbGlua191cCA9IHN0bW1hY19tYWNfbGlua191cCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTI1My1cdC5tYWNfZGlzYWJsZV90eF9scGkgPSBzdG1tYWNfbWFjX2Rpc2FibGVfdHhfbHBpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjYyOQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFNUTU1BQyBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSByZWNlbnQgY2hhbmdlIHRvIGBzdG1tYWNfbWFjX2xpbmtfdXBgLiBUaGF0JiMzOTtzIHRoZSBvbmx5IGRpcmVjdCBtb2RpZmljYXRpb24gSSBzZWUsIHdoaWNoIHNpbXBsaWZpZXMgdGhlIHNjb3BlIG9mIHRoZSBpbnZlc3RpZ2F0aW9uLiBIb3dldmVyLCBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBpbmRpcmVjdCBpbXBhY3RzIG9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBuZWVkIGF0dGVudGlvbi4KCkxldCYjMzk7cyBzZWUuIFRoZSBvYnZpb3VzIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYFNUTU1BQ19FVEhgLCBhbmQgdGhhdCYjMzk7cyBleHBlY3RlZC4gQmV5b25kIHRoYXQsIEkgbmVlZCB0byBhY2NvdW50IGZvciBzdXBwb3J0aW5nIGFyY2hpdGVjdHVyZXMuIFRoZSBgU1RNTUFDX1BDSWAgb3B0aW9uIGVuYWJsZXMgUENJIHN1cHBvcnQuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoYXQgb3B0aW9uIGFsc28gY292ZXIgdGhlIHNwZWNpZmljIFBDSSBJRHMgb2Ygc3VwcG9ydGVkIGhhcmR3YXJlPyBJIGFscmVhZHkga25vdyBhYm91dCB0aGluZ3MgbGlrZSBgRFdNQUNfSU5URUxgLCBgRFdNQUNfTE9PTkdTT05gLCBhbmQgYERXTUFDX01PVE9SQ09NTWAsIHdoaWNoIHNlZW0gdG8gc3VwcGx5IHRob3NlIHZlbmRvciBJRHMuIEkgd2FudCB0byBjb25maXJtIGlmIGBTVE1NQUNfUENJYCBpdHNlbGYgaW5jbHVkZXMgYW55IGdlbmVyaWMgUENJIElEcy4gVGhhdCB3b3VsZCBpbmZsdWVuY2UgaG93IEkgaW50ZXJwcmV0IHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGFuZCBwb3NzaWJsZSBkZXBlbmRlbmNpZXMuIFRoaXMgaW52ZXN0aWdhdGlvbiBpcyBhYm91dCBjaGVja2luZyBmb3IgY29tcGxldGUgY292ZXJhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BDSV9ERVZJQ0VfREFUQSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDQ6XHR7IFBDSV9ERVZJQ0VfREFUQShTVE1NQUMsIFNUTU1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNTpcdHsgUENJX0RFVklDRV9EQVRBKFNUTUlDUk8sIE1BQywgXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIwNjpcdHsgUENJX0RFVklDRV9EQVRBKFNZTk9QU1lTLCBHTUFDNV9JRCwgXHUwMDI2c25wc19nbWFjNV9wY2lfaW5mbykgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDctXHR7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjczLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzI1NgoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiAzMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFRhcmdldCBEcml2ZXIgQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIGBTVE1NQUNfUENJYCBjb25maWd1cmF0aW9uIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQuIEl0IHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgUENJIGRldmljZSBkYXRhIGZvciBgU1RNTUFDYCwgYFNUTUlDUk9gLCBhbmQgYFNZTk9QU1lTYCBiYXNlZCBkZXZpY2VzLCB3aGljaCBpcyBrZXkgZm9yIGZ1enppbmcgdmlhIFBDSSBpbmplY3Rpb24uIFNvLCAqdGhhdCYjMzk7cyogZGVmaW5pdGVseSBpbi4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGFuZCBmb3IgYnJvYWRlciBjb3ZlcmFnZSwgSSYjMzk7bGwgaW5jbHVkZSBgU1RNTUFDX0VUSGAsIGBEV01BQ19JTlRFTGAsIGBEV01BQ19MT09OR1NPTmAsIGFuZCBgRFdNQUNfTU9UT1JDT01NYCBhcyB3ZWxsLgoKTm93LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBTVE1NQUNfRVRIYC4gQWxyaWdodCwgaXQgcmVxdWlyZXMgYEhBU19JT01FTWAgYW5kIGBIQVNfRE1BYCwgYm90aCBvZiB3aGljaCBhcmUgY29tbW9uIGFuZCBzaG91bGQgYmUgcmVhZGlseSBhdmFpbGFibGUuIEl0IGFsc28gc2VsZWN0cyBgTUlJYCwgYFBIWUxJQmAsIGBQSFlMSU5LYCwgYW5kIGBDUkMzMmAsIHdoaWNoIGFyZSBhbGwgc3RhbmRhcmQgY29tcG9uZW50cyByZWxhdGVkIHRvIEV0aGVybmV0IG9wZXJhdGlvbi4gU2VlbXMgZ29vZC4KClRoZXJlZm9yZSwgaGVyZSYjMzk7cyB0aGUgZmluYWwgY29uZmlndXJhdGlvbiBmb3IgZnV6emluZzoKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIOKAkyBkZWZpbml0ZWx5IHdvcnRoIHRoZSBlZmZvcnQuCiogICAqKkZvY3VzU3ltYm9sczoqKiBgc3RtbWFjX21hY19saW5rX3VwYCDigJMgdGhpcyBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiB3aGVyZSB0aGUgY2hhbmdlcyByZXNpZGUuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1BDSWAsIGBEV01BQ19JTlRFTGAsIGBEV01BQ19MT09OR1NPTmAsIGBEV01BQ19NT1RPUkNPTU1gIOKAkyBhIHNvbGlkIGNvbWJpbmF0aW9uIHByb3ZpZGluZyBicm9hZCBjb3ZlcmFnZS4KKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCYjMzk7cyBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB0byB0aGUgTUFDIHNwZWVkIGNvbmZpZ3VyYXRpb24gbG9naWMgd2l0aGluIHRoZSBgc3RtbWFjYCBkcml2ZXIgZHVyaW5nIGxpbmstdXAgaXMgdGhlIHByaW1hcnkgdGFyZ2V0LiBUaGUgZHJpdmVyJiMzOTtzIGNvcmUgbG9naWMgaXMgaW1wYWN0ZWQuIFdlIGNhbiBhY2Nlc3MgdGhlIGRyaXZlciB1c2luZyBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcgYnkgaW5qZWN0aW5nIGEgdmlydHVhbCBQQ0kgZGV2aWNlIHdpdGggdGhlIG1hdGNoaW5nIHZlbmRvci9kZXZpY2UgSURzIHN1cHBvcnRlZCBieSBgc3RtbWFjYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NUTU1BQ19FVEgmIzM0OywKICAgICYjMzQ7U1RNTUFDX1BDSSYjMzQ7LAogICAgJiMzNDtEV01BQ19JTlRFTCYjMzQ7LAogICAgJiMzNDtEV01BQ19MT09OR1NPTiYjMzQ7LAogICAgJiMzNDtEV01BQ19NT1RPUkNPTU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzdG1tYWNfbWFjX2xpbmtfdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1BQyBzcGVlZCBjb25maWd1cmF0aW9uIGxvZ2ljIGluIHRoZSBzdG1tYWMgZHJpdmVyIGR1cmluZyBsaW5rIHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlciYjMzk7cyBjb3JlIGxvZ2ljLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIHZpYSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcgYnkgaW5qZWN0aW5nIGEgdmlydHVhbCBQQ0kgZGV2aWNlIG1hdGNoaW5nIG9uZSBvZiB0aGUgc3VwcG9ydGVkIHZlbmRvci9kZXZpY2UgSURzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTVE1NQUNfRVRIJiMzNDssCiAgICAmIzM0O1NUTU1BQ19QQ0kmIzM0OywKICAgICYjMzQ7RFdNQUNfSU5URUwmIzM0OywKICAgICYjMzQ7RFdNQUNfTE9PTkdTT04mIzM0OywKICAgICYjMzQ7RFdNQUNfTU9UT1JDT01NJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3RtbWFjX21hY19saW5rX3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNQUMgc3BlZWQgY29uZmlndXJhdGlvbiBsb2dpYyBpbiB0aGUgc3RtbWFjIGRyaXZlciBkdXJpbmcgbGluayB1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXImIzM5O3MgY29yZSBsb2dpYy4gVGhlIGRyaXZlciBjYW4gYmUgcmVhY2hlZCB2aWEgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6aW5nIGJ5IGluamVjdGluZyBhIHZpcnR1YWwgUENJIGRldmljZSBtYXRjaGluZyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB2ZW5kb3IvZGV2aWNlIElEcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjA3Ljg5NzY3NzEyNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDk1NzI2NTEyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJEV01BQ19JTlRFTFwiLFxuICAgIFwiRFdNQUNfTE9PTkdTT05cIixcbiAgICBcIkRXTUFDX01PVE9SQ09NTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0bW1hY19tYWNfbGlua191cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNQUMgc3BlZWQgY29uZmlndXJhdGlvbiBsb2dpYyBpbiB0aGUgc3RtbWFjIGRyaXZlciBkdXJpbmcgbGluayB1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIncyBjb3JlIGxvZ2ljLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIHZpYSBzeXprYWxsZXIncyBQQ0kgZnV6emluZyBieSBpbmplY3RpbmcgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgbWF0Y2hpbmcgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdmVuZG9yL2RldmljZSBJRHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjA3Ljg5NzY4MjQwNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyMTg4NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzEzNDQyYmI5NmY4YjYyZjA1YTZiZjQwNjIwNGVhY2I0N2RhNzg2OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAxMyAwOTo0OTowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xcbmluZGV4IDJhMGQ3ZWZmODhkM2ZmLi44ZDNkODc1NDk1MjlkOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1xcbkBAIC0xMDgzLDYzICsxMDgzLDQ1IEBAIHN0YXRpYyB2b2lkIHN0bW1hY19tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4gXFx0b2xkX2N0cmwgPSByZWFkbChwcml2LVxcdTAwM2Vpb2FkZHIgKyBNQUNfQ1RSTF9SRUcpO1xcbiBcXHRjdHJsID0gb2xkX2N0cmwgXFx1MDAyNiB+cHJpdi1cXHUwMDNlaHctXFx1MDAzZWxpbmsuc3BlZWRfbWFzaztcXG4gXFxuLVxcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpIHtcXG4tXFx0XFx0c3dpdGNoIChzcGVlZCkge1xcbi1cXHRcXHRjYXNlIFNQRUVEXzEwMDAwOlxcbi1cXHRcXHRcXHRjdHJsIHw9IHByaXYtXFx1MDAzZWh3LVxcdTAwM2VsaW5rLnhnbWlpLnNwZWVkMTAwMDA7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIFNQRUVEXzUwMDA6XFxuLVxcdFxcdFxcdGN0cmwgfD0gcHJpdi1cXHUwMDNlaHctXFx1MDAzZWxpbmsueGdtaWkuc3BlZWQ1MDAwO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBTUEVFRF8yNTAwOlxcbitcXHRzd2l0Y2ggKHNwZWVkKSB7XFxuK1xcdGNhc2UgU1BFRURfMTAwMDAwOlxcbitcXHRcXHRjdHJsIHw9IHByaXYtXFx1MDAzZWh3LVxcdTAwM2VsaW5rLnhsZ21paS5zcGVlZDEwMDAwMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU1BFRURfNTAwMDA6XFxuK1xcdFxcdGN0cmwgfD0gcHJpdi1cXHUwMDNlaHctXFx1MDAzZWxpbmsueGxnbWlpLnNwZWVkNTAwMDA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFNQRUVEXzQwMDAwOlxcbitcXHRcXHRjdHJsIHw9IHByaXYtXFx1MDAzZWh3LVxcdTAwM2VsaW5rLnhsZ21paS5zcGVlZDQwMDAwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBTUEVFRF8yNTAwMDpcXG4rXFx0XFx0Y3RybCB8PSBwcml2LVxcdTAwM2Vody1cXHUwMDNlbGluay54bGdtaWkuc3BlZWQyNTAwMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU1BFRURfMTAwMDA6XFxuK1xcdFxcdGN0cmwgfD0gcHJpdi1cXHUwMDNlaHctXFx1MDAzZWxpbmsueGdtaWkuc3BlZWQxMDAwMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU1BFRURfNTAwMDpcXG4rXFx0XFx0Y3RybCB8PSBwcml2LVxcdTAwM2Vody1cXHUwMDNlbGluay54Z21paS5zcGVlZDUwMDA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFNQRUVEXzI1MDA6XFxuK1xcdFxcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpXFxuIFxcdFxcdFxcdGN0cmwgfD0gcHJpdi1cXHUwMDNlaHctXFx1MDAzZWxpbmsueGdtaWkuc3BlZWQyNTAwO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0ZGVmYXVsdDpcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbi1cXHRcXHR9XFxuLVxcdH0gZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9YTEdNSUkpIHtcXG4tXFx0XFx0c3dpdGNoIChzcGVlZCkge1xcbi1cXHRcXHRjYXNlIFNQRUVEXzEwMDAwMDpcXG4tXFx0XFx0XFx0Y3RybCB8PSBwcml2LVxcdTAwM2Vody1cXHUwMDNlbGluay54bGdtaWkuc3BlZWQxMDAwMDA7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIFNQRUVEXzUwMDAwOlxcbi1cXHRcXHRcXHRjdHJsIHw9IHByaXYtXFx1MDAzZWh3LVxcdTAwM2VsaW5rLnhsZ21paS5zcGVlZDUwMDAwO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBTUEVFRF80MDAwMDpcXG4tXFx0XFx0XFx0Y3RybCB8PSBwcml2LVxcdTAwM2Vody1cXHUwMDNlbGluay54bGdtaWkuc3BlZWQ0MDAwMDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgU1BFRURfMjUwMDA6XFxuLVxcdFxcdFxcdGN0cmwgfD0gcHJpdi1cXHUwMDNlaHctXFx1MDAzZWxpbmsueGxnbWlpLnNwZWVkMjUwMDA7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIFNQRUVEXzEwMDAwOlxcbi1cXHRcXHRcXHRjdHJsIHw9IHByaXYtXFx1MDAzZWh3LVxcdTAwM2VsaW5rLnhnbWlpLnNwZWVkMTAwMDA7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIFNQRUVEXzI1MDA6XFxuLVxcdFxcdFxcdGN0cmwgfD0gcHJpdi1cXHUwMDNlaHctXFx1MDAzZWxpbmsuc3BlZWQyNTAwO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSBTUEVFRF8xMDAwOlxcbi1cXHRcXHRcXHRjdHJsIHw9IHByaXYtXFx1MDAzZWh3LVxcdTAwM2VsaW5rLnNwZWVkMTAwMDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0fVxcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRzd2l0Y2ggKHNwZWVkKSB7XFxuLVxcdFxcdGNhc2UgU1BFRURfMjUwMDpcXG4rXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRjdHJsIHw9IHByaXYtXFx1MDAzZWh3LVxcdTAwM2VsaW5rLnNwZWVkMjUwMDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgU1BFRURfMTAwMDpcXG4tXFx0XFx0XFx0Y3RybCB8PSBwcml2LVxcdTAwM2Vody1cXHUwMDNlbGluay5zcGVlZDEwMDA7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIFNQRUVEXzEwMDpcXG4tXFx0XFx0XFx0Y3RybCB8PSBwcml2LVxcdTAwM2Vody1cXHUwMDNlbGluay5zcGVlZDEwMDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGNhc2UgU1BFRURfMTA6XFxuLVxcdFxcdFxcdGN0cmwgfD0gcHJpdi1cXHUwMDNlaHctXFx1MDAzZWxpbmsuc3BlZWQxMDtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0fVxcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBTUEVFRF8xMDAwOlxcbitcXHRcXHRjdHJsIHw9IHByaXYtXFx1MDAzZWh3LVxcdTAwM2VsaW5rLnNwZWVkMTAwMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU1BFRURfMTAwOlxcbitcXHRcXHRjdHJsIHw9IHByaXYtXFx1MDAzZWh3LVxcdTAwM2VsaW5rLnNwZWVkMTAwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBTUEVFRF8xMDpcXG4rXFx0XFx0Y3RybCB8PSBwcml2LVxcdTAwM2Vody1cXHUwMDNlbGluay5zcGVlZDEwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0bmV0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJ1bnN1cHBvcnRlZCBzcGVlZCAlcyBvbiAlcywgbGVhdmluZyB0aGUgTUFDIGRpc2FibGVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBwaHlfc3BlZWRfdG9fc3RyKHNwZWVkKSwgcGh5X21vZGVzKGludGVyZmFjZSkpO1xcbitcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmaXhfbWFjX3NwZWVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo0OTowOC41MjE2MjIwMjhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDMzMzMwNTkxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJEV01BQ19JTlRFTFwiLFxuICAgIFwiRFdNQUNfTE9PTkdTT05cIixcbiAgICBcIkRXTUFDX01PVE9SQ09NTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0bW1hY19tYWNfbGlua191cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNQUMgc3BlZWQgY29uZmlndXJhdGlvbiBsb2dpYyBpbiB0aGUgc3RtbWFjIGRyaXZlciBkdXJpbmcgbGluayB1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIncyBjb3JlIGxvZ2ljLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIHZpYSBzeXprYWxsZXIncyBQQ0kgZnV6emluZyBieSBpbmplY3RpbmcgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgbWF0Y2hpbmcgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdmVuZG9yL2RldmljZSBJRHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzEzNDQyYmI5NmY4YjYyZjA1YTZiZjQwNjIwNGVhY2I0N2RhNzg2OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDA5OjQ5OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbmluZGV4IDJhMGQ3ZWZmODhkM2ZmLi44ZDNkODc1NDk1MjlkOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmNcbkBAIC0xMDgzLDYzICsxMDgzLDQ1IEBAIHN0YXRpYyB2b2lkIHN0bW1hY19tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcdG9sZF9jdHJsID0gcmVhZGwocHJpdi1cdTAwM2Vpb2FkZHIgKyBNQUNfQ1RSTF9SRUcpO1xuIFx0Y3RybCA9IG9sZF9jdHJsIFx1MDAyNiB+cHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnNwZWVkX21hc2s7XG4gXG4tXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSB7XG4tXHRcdHN3aXRjaCAoc3BlZWQpIHtcbi1cdFx0Y2FzZSBTUEVFRF8xMDAwMDpcbi1cdFx0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay54Z21paS5zcGVlZDEwMDAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFNQRUVEXzUwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGdtaWkuc3BlZWQ1MDAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFNQRUVEXzI1MDA6XG4rXHRzd2l0Y2ggKHNwZWVkKSB7XG4rXHRjYXNlIFNQRUVEXzEwMDAwMDpcbitcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGxnbWlpLnNwZWVkMTAwMDAwO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU1BFRURfNTAwMDA6XG4rXHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhsZ21paS5zcGVlZDUwMDAwO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU1BFRURfNDAwMDA6XG4rXHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhsZ21paS5zcGVlZDQwMDAwO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU1BFRURfMjUwMDA6XG4rXHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhsZ21paS5zcGVlZDI1MDAwO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU1BFRURfMTAwMDA6XG4rXHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhnbWlpLnNwZWVkMTAwMDA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBTUEVFRF81MDAwOlxuK1x0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay54Z21paS5zcGVlZDUwMDA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBTUEVFRF8yNTAwOlxuK1x0XHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKVxuIFx0XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnhnbWlpLnNwZWVkMjUwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbi1cdH0gZWxzZSBpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9YTEdNSUkpIHtcbi1cdFx0c3dpdGNoIChzcGVlZCkge1xuLVx0XHRjYXNlIFNQRUVEXzEwMDAwMDpcbi1cdFx0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay54bGdtaWkuc3BlZWQxMDAwMDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgU1BFRURfNTAwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGxnbWlpLnNwZWVkNTAwMDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgU1BFRURfNDAwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGxnbWlpLnNwZWVkNDAwMDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgU1BFRURfMjUwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGxnbWlpLnNwZWVkMjUwMDA7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgU1BFRURfMTAwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsueGdtaWkuc3BlZWQxMDAwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBTUEVFRF8yNTAwOlxuLVx0XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnNwZWVkMjUwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBTUEVFRF8xMDAwOlxuLVx0XHRcdGN0cmwgfD0gcHJpdi1cdTAwM2Vody1cdTAwM2VsaW5rLnNwZWVkMTAwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdHN3aXRjaCAoc3BlZWQpIHtcbi1cdFx0Y2FzZSBTUEVFRF8yNTAwOlxuK1x0XHRlbHNlXG4gXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsuc3BlZWQyNTAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFNQRUVEXzEwMDA6XG4tXHRcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsuc3BlZWQxMDAwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRjYXNlIFNQRUVEXzEwMDpcbi1cdFx0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay5zcGVlZDEwMDtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBTUEVFRF8xMDpcbi1cdFx0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay5zcGVlZDEwO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuK1x0XHRicmVhaztcbitcdGNhc2UgU1BFRURfMTAwMDpcbitcdFx0Y3RybCB8PSBwcml2LVx1MDAzZWh3LVx1MDAzZWxpbmsuc3BlZWQxMDAwO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU1BFRURfMTAwOlxuK1x0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay5zcGVlZDEwMDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFNQRUVEXzEwOlxuK1x0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay5zcGVlZDEwO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VkZXYsXG4rXHRcdFx0ICAgXCJ1bnN1cHBvcnRlZCBzcGVlZCAlcyBvbiAlcywgbGVhdmluZyB0aGUgTUFDIGRpc2FibGVkXFxuXCIsXG4rXHRcdFx0ICAgcGh5X3NwZWVkX3RvX3N0cihzcGVlZCksIHBoeV9tb2RlcyhpbnRlcmZhY2UpKTtcbitcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0aWYgKHByaXYtXHUwMDNlcGxhdC1cdTAwM2VmaXhfbWFjX3NwZWVkKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6MDguNTIxNjQ2MDA4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4NTA3MDUyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgc3RtbWFjYCBEcml2ZXIgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgYHN0bW1hY19tYWNfbGlua191cGAgZnVuY3Rpb24gaW4gYHN0bW1hY19tYWluLmNgLiBJdCdzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24sIGNsZWFybHkgYWltZWQgYXQgaG93IHRoZSBNQUMgc3BlZWQgaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgbGluayBzcGVlZCBhbmQgaW50ZXJmYWNlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cywgXCJDYW4gdGhpcyBiZSBmdXp6ZWQgZWZmZWN0aXZlbHk/XCIgVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGV0aGVybmV0IGRyaXZlciDigJMgdGhlIFNUTWljcm9lbGVjdHJvbmljcyAxMC8xMDAvMTAwMC9FUU9TIEV0aGVybmV0IE1BQyDigJMgc28gcmVhbGlzdGljYWxseSwgZGlyZWN0IGZ1enppbmcgdXN1YWxseSBoaW5nZXMgb24gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG9yIGdlbmVyaWMgc3Vic3lzdGVtcy4gSXQncyBvZnRlbiB0b3VnaC5cblxuV2FpdCBhIHNlY29uZCwgc3l6a2FsbGVyIGRvZXMgaGF2ZSBuZXR3b3JrIGludGVyZmFjZSBmdXp6aW5nIGNhcGFiaWxpdGllcyB3aXRoIHR1bi90YXAgb3IgdmV0aC4gQnV0IGZvciB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciwgSSBuZWVkIHRoZSBhY3R1YWwgaGFyZHdhcmUgb3IgYSBzb2xpZCBlbXVsYXRpb24uIElzIGBzdG1tYWNgIGVtdWxhdGVkIGluIHNvbWV0aGluZyBsaWtlIFFFTVU/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IGNhbiBiZSByZWFjaGVkIGluIHRoZSBsYWIuXG5cbk5vdyBJIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGBzdG1tYWNgIGRldmljZSBpcyBhIFBDSSBkZXZpY2Ugb3IgYSBwbGF0Zm9ybSBkZXZpY2UgYmVjYXVzZSBpdCBjaGFuZ2VzIHRoZSBhcHByb2FjaC4gSSBrbm93IGl0J3MgYSBwbGF0Zm9ybSBkZXZpY2UgdXN1YWxseSBmb3VuZCBvbiBBUk0gU29DcyAobGlrZSBTVE0zMiwgUm9ja2NoaXAsIGV0Yy4pIG9yIGNhbiBiZSBhIFBDSSBkZXZpY2UuIExldCdzIHNlZSBpZiB0aGUgUENJIHZhcmlhbnQgaGFzIGFueSBzcGVjaWFsIGJlaGF2aW9ycywgSSBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmNgLiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSBhIG1vcmUgc29saWQgc3RyYXRlZ3kgdG8gYXR0YWNrIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTA2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6MTkuMzcyMzU0MjE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMjg5ODc3NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX3BjaVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0PTEwNz1zeW50YXggKGUuZy4gZm9yIFBDSSBtb2R1bGUpOjpcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0LTEwOC1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMucnN0OjEwOTogICAgbW9kcHJvYmUgc3RtbWFjX3BjaSBbXFx1MDAzY29wdGlvblxcdTAwM2U9XFx1MDAzY1ZBTDFcXHUwMDNlLFxcdTAwM2NWQUwyXFx1MDAzZSwuLi5dXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3N0bWljcm8vc3RtbWFjLnJzdC0xMTAtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZT01Mz1vYmotJChDT05GSUdfRFdNQUNfTU9UT1JDT01NKVxcdCs9IGR3bWFjLW1vdG9yY29tbS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvTWFrZWZpbGU6NTQ6c3RtbWFjLXBjaS1vYmpzOj0gc3RtbWFjX3BjaS5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTI1PXN0cnVjdCBpbnRlbF9wcml2X2RhdGEge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0zOS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjQwOnN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00MS1cXHR1bnNpZ25lZCBpbnQgZnVuYztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0NTpzdHJ1Y3Qgc3RtbWFjX3BjaV9kbWlfZGF0YSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo0NjpcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEgKmZ1bmM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00Ny1cXHRzaXplX3QgbmZ1bmNzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy00OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjUwOnN0cnVjdCBzdG1tYWNfcGNpX2luZm8ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNTEtXFx0aW50ICgqc2V0dXApKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05MT1zdGF0aWMgY29uc3QgaW50IGFkbG5fdHNuX2xhbmVfcmVnc1tdID0gezZ9O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5MzpzdGF0aWMgaW50IHN0bW1hY19wY2lfZmluZF9waHlfYWRkcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk0LVxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZG1pX2xpc3QpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5NjpcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9mdW5jX2RhdGEgKmZ1bmNfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk3OlxcdGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhICpkbWlfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk4LVxcdGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkbWlfaWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTc1NT1zdGF0aWMgaW50IGVobF9zZ21paV9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy03NzQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo3NzU6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gZWhsX3NnbWlpMWdfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTc3Ni1cXHQuc2V0dXAgPSBlaGxfc2dtaWlfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9Nzc5PXN0YXRpYyBpbnQgZWhsX3JnbWlpX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTc4OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjc5MDpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcmdtaWkxZ19pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtNzkxLVxcdC5zZXR1cCA9IGVobF9yZ21paV9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04MTA9c3RhdGljIGludCBlaGxfcHNlMF9yZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgxNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjgxNzpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMF9yZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04MTgtXFx0LnNldHVwID0gZWhsX3BzZTBfcmdtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04MjE9c3RhdGljIGludCBlaGxfcHNlMF9zZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTgzOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjgzOTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMF9zZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04NDAtXFx0LnNldHVwID0gZWhsX3BzZTBfc2dtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04NTk9c3RhdGljIGludCBlaGxfcHNlMV9yZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg2NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg2NjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMV9yZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04NjctXFx0LnNldHVwID0gZWhsX3BzZTFfcmdtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz04NzA9c3RhdGljIGludCBlaGxfcHNlMV9zZ21paTFnX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTg4Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjg4ODpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBlaGxfcHNlMV9zZ21paTFnX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy04ODktXFx0LnNldHVwID0gZWhsX3BzZTFfc2dtaWkxZ19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05MTM9c3RhdGljIGludCB0Z2xfc2dtaWlfcGh5MF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05MjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzo5MjI6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gdGdsX3NnbWlpMWdfcGh5MF9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTIzLVxcdC5zZXR1cCA9IHRnbF9zZ21paV9waHkwX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTkyNj1zdGF0aWMgaW50IHRnbF9zZ21paV9waHkxX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTkzNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjkzNTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyB0Z2xfc2dtaWkxZ19waHkxX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05MzYtXFx0LnNldHVwID0gdGdsX3NnbWlpX3BoeTFfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM9OTM5PXN0YXRpYyBpbnQgYWRsc19zZ21paV9waHkwX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTk0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjk0OTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBhZGxzX3NnbWlpMWdfcGh5MF9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTUwLVxcdC5zZXR1cCA9IGFkbHNfc2dtaWlfcGh5MF9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz05NTM9c3RhdGljIGludCBhZGxzX3NnbWlpX3BoeTFfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtOTYyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6OTYzOnN0YXRpYyBzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIGFkbHNfc2dtaWkxZ19waHkxX2luZm8gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy05NjQtXFx0LnNldHVwID0gYWRsc19zZ21paV9waHkxX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTk5Mj1zdGF0aWMgaW50IGFkbG5fc2dtaWlfcGh5MF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDEwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTAxMTpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBhZGxuX3NnbWlpMWdfcGh5MF9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTAxMi1cXHQuc2V0dXAgPSBhZGxuX3NnbWlpX3BoeTBfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTAxNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEwMTU6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2Z1bmNfZGF0YSBnYWxpbGVvX3N0bW1hY19mdW5jX2RhdGFbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwMTYtXFx0e1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTAyMjpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEgZ2FsaWxlb19zdG1tYWNfZG1pX2RhdGEgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDIzLVxcdC5mdW5jID0gZ2FsaWxlb19zdG1tYWNfZnVuY19kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYy0xMDI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmM6MTAyNzpzdGF0aWMgY29uc3Qgc3RydWN0IHN0bW1hY19wY2lfZnVuY19kYXRhIGlvdDIwNDBfc3RtbWFjX2Z1bmNfZGF0YVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTAyOC1cXHR7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwMzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMDM4OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RtbWFjX3BjaV9kbWlfZGF0YSBpb3QyMDQwX3N0bW1hY19kbWlfZGF0YSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwMzktXFx0LmZ1bmMgPSBpb3QyMDQwX3N0bW1hY19mdW5jX2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jPTEwNzg9c3RhdGljIGludCBxdWFya19kZWZhdWx0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwODgtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMDg5OlxcdHJldCA9IHN0bW1hY19wY2lfZmluZF9waHlfYWRkcihwZGV2LCBxdWFya19wY2lfZG1pKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEwOTAtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTExMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjExMTQ6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gcXVhcmtfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTExMTUtXFx0LnNldHVwID0gcXVhcmtfZGVmYXVsdF9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMjMyPXN0YXRpYyBpbnQgaW50ZWxfZXRoX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTIzNC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYzoxMjM1OlxcdHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm8gPSAoc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqKWlkLVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEyMzYtXFx0c3RydWN0IGludGVsX3ByaXZfZGF0YSAqaW50ZWxfcHJpdjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9NzY9c3RydWN0IGxvb25nc29uX2RhdGEge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy04MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjgyOnN0cnVjdCBzdG1tYWNfcGNpX2luZm8ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtODMtXFx0aW50ICgqc2V0dXApKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYz0xMzI9c3RhdGljIGludCBsb29uZ3Nvbl9nbWFjX2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTE0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjE0MjpzdGF0aWMgc3RydWN0IHN0bW1hY19wY2lfaW5mbyBsb29uZ3Nvbl9nbWFjX3BjaV9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtMTQzLVxcdC5zZXR1cCA9IGxvb25nc29uX2dtYWNfZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9MTY1PXN0YXRpYyBpbnQgbG9vbmdzb25fZ25ldF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy0xNzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzoxNzc6c3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gbG9vbmdzb25fZ25ldF9wY2lfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTE3OC1cXHQuc2V0dXAgPSBsb29uZ3Nvbl9nbmV0X2RhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jPTQ5OD1zdGF0aWMgaW50IGxvb25nc29uX2R3bWFjX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTUwMS1cXHRzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyByZXMgPSB7fTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjUwMjpcXHRzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTAzLVxcdHN0cnVjdCBsb29uZ3Nvbl9kYXRhICpsZDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTM3LVxcdHBsYXQtXFx1MDAzZWZpeF9zb2NfcmVzZXQgPSBsb29uZ3Nvbl9kd21hY19maXhfcmVzZXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYzo1Mzg6XFx0cGxhdC1cXHUwMDNlc3VzcGVuZCA9IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTM5OlxcdHBsYXQtXFx1MDAzZXJlc3VtZSA9IHN0bW1hY19wY2lfcGxhdF9yZXN1bWU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDAtXFx0bGQtXFx1MDAzZWRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jLTU0Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1sb29uZ3Nvbi5jOjU0MzpcXHRpbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC1cXHUwMDNlZHJpdmVyX2RhdGE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NDQtXFx0cmV0ID0gaW5mby1cXHUwMDNlc2V0dXAocGRldiwgcGxhdCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0xODg9c3RhdGljIGludCBtb3RvcmNvbW1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYnNwX3ByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0xOTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmM6MTkzOlxcdHJldCA9IHN0bW1hY19wY2lfcGxhdF9yZXN1bWUoZGV2LCBic3BfcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMTk0LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYz0yMDg9bW90b3Jjb21tX2RlZmF1bHRfcGxhdF9kYXRhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMjQ4LVxcdHBsYXQtXFx1MDAzZWNvcmVfdHlwZVxcdFxcdD0gRFdNQUNfQ09SRV9HTUFDNDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYzoyNDk6XFx0cGxhdC1cXHUwMDNlc3VzcGVuZFxcdFxcdD0gc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMjUwLVxcdHBsYXQtXFx1MDAzZXJlc3VtZVxcdFxcdD0gbW90b3Jjb21tX3Jlc3VtZTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0xMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmM6MTI6aW50IHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYnNwX3ByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTEzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy0yNS19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jOjI2OkVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19wY2lfcGxhdF9zdXNwZW5kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmMtMjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jOjI4OmludCBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYnNwX3ByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jLTI5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy00My19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5jOjQ0OkVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19wY2lfcGxhdF9yZXN1bWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuYy00NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaC04LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19saWJwY2kuaDo5OmludCBzdG1tYWNfcGNpX3BsYXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmJzcF9wcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbGlicGNpLmg6MTA6aW50IHN0bW1hY19wY2lfcGxhdF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpic3BfcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX2xpYnBjaS5oLTExLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxOTpzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjAtXFx0aW50ICgqc2V0dXApKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTMzPXN0YXRpYyBpbnQgc3RtbWFjX2RlZmF1bHRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy00OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6NTA6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gc3RtbWFjX3BjaV9pbmZvID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy01MS1cXHQuc2V0dXAgPSBzdG1tYWNfZGVmYXVsdF9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jPTU0PXN0YXRpYyBpbnQgc25wc19nbWFjNV9kZWZhdWx0X2RhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTAxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxMDI6c3RhdGljIGNvbnN0IHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gc25wc19nbWFjNV9wY2lfaW5mbyA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTAzLVxcdC5zZXR1cCA9IHNucHNfZ21hYzVfZGVmYXVsdF9kYXRhLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEwNi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTA3OiAqIHN0bW1hY19wY2lfcHJvYmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTA4LSAqXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTE3LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxMTg6c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMTktXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTIwLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTIxOlxcdHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm8gPSAoc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqKWlkLVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTIyLVxcdHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xNzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjE4MDpcXHRwbGF0LVxcdTAwM2VzdXNwZW5kID0gc3RtbWFjX3BjaV9wbGF0X3N1c3BlbmQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjE4MTpcXHRwbGF0LVxcdTAwM2VyZXN1bWUgPSBzdG1tYWNfcGNpX3BsYXRfcmVzdW1lO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTg2LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxODc6ICogc3RtbWFjX3BjaV9yZW1vdmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTg4LSAqXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTkxLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoxOTI6c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5My17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjA0OlxcdHsgUENJX0RFVklDRV9EQVRBKFNUTU1BQywgU1RNTUFDLCBcXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDU6XFx0eyBQQ0lfREVWSUNFX0RBVEEoU1RNSUNSTywgTUFDLCBcXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMDYtXFx0eyBQQ0lfREVWSUNFX0RBVEEoU1lOT1BTWVMsIEdNQUM1X0lELCBcXHUwMDI2c25wc19nbWFjNV9wY2lfaW5mbykgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0yMTA9TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHN0bW1hY19pZF90YWJsZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjEyOnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzdG1tYWNfcGNpX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjEzLVxcdC5uYW1lID0gU1RNTUFDX1JFU09VUkNFX05BTUUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIxNC1cXHQuaWRfdGFibGUgPSBzdG1tYWNfaWRfdGFibGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjIxNTpcXHQucHJvYmUgPSBzdG1tYWNfcGNpX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMTY6XFx0LnJlbW92ZSA9IHN0bW1hY19wY2lfcmVtb3ZlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yMTctXFx0LmRyaXZlciAgICAgICAgID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIyMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjIyOm1vZHVsZV9wY2lfZHJpdmVyKHN0bW1hY19wY2lfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjIzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo0OToyMy42MDEzNDc0MTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjU4NjUyODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgYHN0bW1hY2AgRHJpdmVyczogQSBTdHJhdGVnaWMgQXBwcm9hY2gqKlxuXG5Pa2F5LCBzbyBgc3RtbWFjYCBoYXMgUENJIGRyaXZlcnMuIFRoYXQncyBnb29kIG5ld3M7IGBzdG1tYWNfcGNpLmNgLCBgZHdtYWMtaW50ZWwuY2AsIGBkd21hYy1sb29uZ3Nvbi5jYCwgYGR3bWFjLW1vdG9yY29tbS5jYCDigJMgSSBzZWUgdGhlIHBvdGVudGlhbC4gTXkgZmlyc3QgdGhvdWdodCBpcyBRRU1VLCBzaW5jZSBQQ0kgZHJpdmVycyB1c3VhbGx5IHBsYXkgd2VsbCB3aXRoIHZpcnR1YWwgZW52aXJvbm1lbnRzLiBJZiBRRU1VIGVtdWxhdGVkIGl0LCB3ZSdkIGhhdmUgYSBzdHJhaWdodGZvcndhcmQgZnV6emluZyBzZXR1cC4gQnV0IGRvZXMgUUVNVSBlbXVsYXRlIGBzdG1tYWNgIHNwZWNpZmljYWxseT8gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIFFFTVUgbmV0d29yayBkZXZpY2UgbGlzdCwgSSBzZWUgYSBnb29kIHNlbGVjdGlvbiBvZiBlbXVsYXRlZCBOSUNzIChgaW14X2ZlYy5jYCwgYGNhZGVuY2VfZ2VtLmNgLCBgZTEwMDAuY2AsIGV0Yy4pLCBidXQgbm8gYHN0bW1hY2AuIEhtbS5cblxuV2FpdCwgdGhvdWdoLCBgc3RtbWFjYCBpcyBwb3B1bGFyIG9uIEFSTSBib2FyZHMsIGFuZCBRRU1VIGhhcyBkZWNlbnQgQVJNIGVtdWxhdGlvbi4gSXMgdGhlcmUgYSBob29rIHRoZXJlPyBEb2VzIFFFTVUgZW11bGF0ZSB0aGUgYHN0bW1hY2AgaW4gc29tZSBBUk0gYm9hcmQgZW11bGF0aW9ucz8gVGhpcyBjb3VsZCBiZSBhIHByb21pc2luZyBhdmVudWUsIGJ1dCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlci5cblxuQWxyaWdodCwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBzeXprYWxsZXIuIERvZXMgc3l6a2FsbGVyIG9mZmVyIGEgcGF0aCB0byBmdXp6aW5nIHRoaXM/IFN5emthbGxlciBvZnRlbiB1c2VzIHZQQ0kgZm9yIFBDSSBkZXZpY2UgZnV6emluZywgcHJvdmlkZWQgdGhlIGRyaXZlciBiaW5kcyB0byBpdC4gVGhhdCdzIHRoZSBrZXkuIEJ1dCB3YWl0IGEgbWludXRlLi4uIHN5emthbGxlciBoYXMgYHN5el9wY2lfZGV2aWNlYCEgVGhpcyBpcyBpbnRlcmVzdGluZy4uLiBJdCBzZWVtcyBsaWtlIEkgY2FuIGluamVjdCBBTlkgUENJIGRldmljZSB3aXRoIHZlbmRvciBhbmQgZGV2aWNlIElEcyB1c2luZyB0aGlzIHBzZXVkby1zeXNjYWxsLCBhIGh1Z2UgcGx1cyEgXG5cbk9rYXksIG5vdyBpdCdzIGFib3V0IGNoZWNraW5nIHRoZSBkcml2ZXIgYmluZGluZ3MuIFRoZSBgc3RtbWFjX3BjaV9kcml2ZXJgIGJpbmRzIHRvIGBQQ0lfREVWSUNFX0RBVEFgIGVudHJpZXMuLi4gc3BlY2lmaWNhbGx5LCBgU1RNTUFDYCwgYFNUTUlDUk9gLCBhbmQgYFNZTk9QU1lTYC4gVGhpcyBzb3VuZHMgbGlrZSBpdCBjb3VsZCBiZSBteSB0aWNrZXQuIEkgbmVlZCB0byBnZXQgdGhlIHZlbmRvci9kZXZpY2UgSURzIGZyb20gdGhlc2UgZGVmaW5pdGlvbnMuIE9uY2UgSSBoYXZlIHRoZSB2ZW5kb3IgYW5kIGRldmljZSBJRHMsIHN5emthbGxlciBzaG91bGQgYmUgYWJsZSB0byBjcmVhdGUgYW4gaW5zdGFuY2UgYW5kIEkgY2FuIGZvY3VzIG15IGVmZm9ydHMgb24gdGhhdCBkcml2ZXIhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODcxLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjMzLjI2MDAwMjg1OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDI2MzI2MDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBDSV9ERVZJQ0VfREFUQVxcXFwoU1RNTUFDXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0yMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN0bW1hY19pZF90YWJsZVtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDQ6XFx0eyBQQ0lfREVWSUNFX0RBVEEoU1RNTUFDLCBTVE1NQUMsIFxcdTAwMjZzdG1tYWNfcGNpX2luZm8pIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTIwNS1cXHR7IFBDSV9ERVZJQ0VfREFUQShTVE1JQ1JPLCBNQUMsIFxcdTAwMjZzdG1tYWNfcGNpX2luZm8pIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjM2LjI4NjM0MDY1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNjM4MDA3NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBTVE1NQUMgaW4gUENJIElEIERlZmluaXRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGtlcm5lbCdzIFBDSSBJRCBkYXRhYmFzZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L3BjaV9pZHMuaGAuIEknbSBnb2luZyB0byBsb29rIGZvciBkZWZpbml0aW9ucyByZWxhdGVkIHRvIGBTVE1NQUNgIHRoZXJlLiBUaGlzIGlzIGEgY29tbW9uIGFuZCB1c3VhbGx5IGVmZmljaWVudCB3YXkgdG8gaWRlbnRpZnkgYW5kIHVuZGVyc3RhbmQgdGhlIFBDSSBkZXZpY2UgSURzIGFzc29jaWF0ZWQgd2l0aCB0aGUgU1RNTUFDIEV0aGVybmV0IE1BQyBjb250cm9sbGVyLCBhIGNyaXRpY2FsIGZpcnN0IHN0ZXAgaW4gZGVidWdnaW5nIG9yIHdvcmtpbmcgd2l0aCB0aGUgZHJpdmVyLiBJIG5lZWQgdGhvc2UgdmVuZG9yIGFuZCBkZXZpY2UgSURzIHRvIHByb3Blcmx5IGZpbHRlciBhbmQgY2xhc3NpZnkgdGhlIGhhcmR3YXJlLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAzNywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjQ5LjkyNDM1MjIxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjUzOTIyOTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBDSV9WRU5ET1JfSURfU1RNTUFDXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xOTI9c3RhdGljIHZvaWQgc3RtbWFjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMTk3LS8qIHN5bnRoZXRpYyBJRCwgbm8gb2ZmaWNpYWwgdmVuZG9yICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjE5ODojZGVmaW5lIFBDSV9WRU5ET1JfSURfU1RNTUFDXFx0XFx0MHgwNzAwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE5OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6NTQuMTc4MjgxODA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIzOTI2NjM5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIEZ1enppbmcgdGhpcyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyB0aGlzIGRldmljZSBoYXMgYSBzeW50aGV0aWMgSUQgb2YgYDB4MDcwMGAuIFRoZSBrZXkgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIHN5emthbGxlcidzIFBDSSBmdXp6aW5nIGNhbiBiaW5kIHRvIGl0LiBJZiBpdCBjYW4sIHdlJ3JlIGluIGJ1c2luZXNzLiBCdXQsIGRvZXMgdGhlIGRyaXZlciBmdW5jdGlvbiBjb3JyZWN0bHkgd2l0aG91dCByZWFsIGhhcmR3YXJlPyBUaGF0J3MgdGhlIGNydXggb2YgaXQuXG5cbklmIHRoZSBkcml2ZXIgcHJvYmVzIHN1Y2Nlc3NmdWxseSwgaXQnbGwgdHJ5IHRvIHJlYWQgYW5kIHdyaXRlIHRvIE1lbW9yeS1NYXBwZWQgSS9PIChNTUlPKSByZWdpc3RlcnMuIFdpdGhvdXQgYWN0dWFsIGhhcmR3YXJlIHByZXNlbnQsIGl0IHdpbGwgcmVhZCBgMHhmZmZmZmZmZmAgb3Igd2hhdGV2ZXIgdGhlIFBDSSBzdWJzeXN0ZW0gcmV0dXJucyBmb3IgdW5tYXBwZWQgbWVtb3J5LCBvciB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgd2lsbCBwcm92aWRlIHJhbmRvbSBkYXRhIGZvciBNTUlPIHJlYWRzLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoYXQgc3l6a2FsbGVyJ3MgYHN5el9wY2lfZGV2aWNlYCBkb2Vzbid0IHBlcmZlY3RseSBlbXVsYXRlIE1NSU8sIGJ1dCBpdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZy5cblxuTXkgdGhpbmtpbmcgaXMsIGBzdG1tYWNfbWFjX2xpbmtfdXBgIGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBQSFkgbGluayBnb2VzIHVwLiBUaGlzIGlzIGludGVyZXN0aW5nLiBJcyB0aGlzIGZ1bmN0aW9uIGFjY2Vzc2libGUgdGhyb3VnaCBzeXprYWxsZXI/IElmIHRoZSBkcml2ZXIgcHJvYmVzIHN1Y2Nlc3NmdWxseSDigJMgYW5kIHRoYXQncyB0aGUgYmlnICdpZicg4oCTIHdoaWNoIGNvdWxkIGJlIGZhY2lsaXRhdGVkIGJ5IHNvbWUgUENJIGZ1enppbmcsIHRoZW4gaXQgd2lsbCByZWdpc3RlciBhIG5ldGRldi4gVGhlbiwgY29tbWFuZHMgbGlrZSBgaXAgbGluayBzZXQgZXRoWCB1cGAgc2hvdWxkIG9wZW4gdGhlIGRldmljZS4gVGhlIFBIWSBsaW5rIGNvbWluZyB1cCBzaG91bGQgdGhlbiB0cmlnZ2VyIHRoZSBgc3RtbWFjX21hY19saW5rX3VwYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBgc3RtbWFjYCB1dGlsaXplcyBgcGh5bGlua2AuIFRoZXJlZm9yZSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBMZXQncyBjaGVjayBzcGVjaWZpY2FsbHkgaWYgYHN0bW1hY19tYWNfbGlua191cGAgaXMgcmVhY2hhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM5MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1MDoxNi41NzA5NDg0NTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTIzMTkxNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX21hY19saW5rX3VwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MTA1Nj1zdGF0aWMgdm9pZCBzdG1tYWNfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTA2OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjEwNjk6c3RhdGljIHZvaWQgc3RtbWFjX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTA3MC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MTI0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBzdG1tYWNfcGh5bGlua19tYWNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0xMjUxLVxcdC5tYWNfbGlua19kb3duID0gc3RtbWFjX21hY19saW5rX2Rvd24sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzoxMjUyOlxcdC5tYWNfbGlua191cCA9IHN0bW1hY19tYWNfbGlua191cCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTEyNTMtXFx0Lm1hY19kaXNhYmxlX3R4X2xwaSA9IHN0bW1hY19tYWNfZGlzYWJsZV90eF9scGksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjUwOjE5LjU2MzI3ODQzNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjU5NzU2OTc5MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBzdG1tYWMgRHJpdmVyIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBhIHBoeWxpbmsgY2FsbGJhY2suIE15IGZpcnN0IHRob3VnaHQgaXM6IGNhbiB3ZSBmdXp6IHRoaXM/IFRoZSBwYXRjaCBhbHRlcnMgYHN0bW1hY19tYWNfbGlua191cGAsIHNwZWNpZmljYWxseSB0byBkZWFsIHdpdGggdGhlc2UgbmV3IGhpZ2gtc3BlZWQgc2V0dGluZ3M6IGBTUEVFRF8xMDAwMDBgLCBgU1BFRURfNTAwMDBgLCBgU1BFRURfNDAwMDBgLCBhbmQgYFNQRUVEXzI1MDAwYCBmb3IgYFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJYCBhbmQgYFBIWV9JTlRFUkZBQ0VfTU9ERV9YTEdNSUlgLlxuXG5Ob3csIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgdGhlIGNvZGUgb3JpZ2luYWxseSBoYWQgYSBtb3JlIGdyYW51bGFyIGFwcHJvYWNoLCB3aXRoIGEgZGVkaWNhdGVkIGNoZWNrIGZvciBgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUlgIGFuZCBpdHMgc3BlZWRzLiBJdCBsb29rZWQgc29tZXRoaW5nIGxpa2UgdGhpczpcblxuYGBgY1xuXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSB7XG5cdFx0c3dpdGNoIChzcGVlZCkge1xuXHRcdGNhc2UgU1BFRURfMTAwMDA6XG4uLi5cbmBgYFxuXG5UaGUgbmV3IGNvZGUgc2VlbXMgdG8gaGF2ZSBhIHVuaWZpZWQgYHN3aXRjaCAoc3BlZWQpYCBzdGF0ZW1lbnQ6XG5cbmBgYGNcblx0c3dpdGNoIChzcGVlZCkge1xuXHRjYXNlIFNQRUVEXzEwMDAwMDpcblx0XHRjdHJsIHw9IHByaXYtXHUwMDNlaHctXHUwMDNlbGluay54bGdtaWkuc3BlZWQxMDAwMDA7XG5cdFx0YnJlYWs7XG4uLi5cbmBgYFxuXG5TbywgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlOyB0aGF0J3MgY2xlYXIuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyBtb2RpZmljYXRpb24gd29ydGh5IG9mIGZ1enppbmc/IEl0IGRlZmluaXRlbHkgaW50cm9kdWNlcyBuZXcgY29kZSBwYXRocywgZGVhbGluZyB3aXRoIHRoZXNlIGhpZ2hlciBzcGVlZHMuIElmIHdlIGNhbiBlbmFibGUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbGlrZSBgQ09ORklHX1NUTU1BQ19FVEhgLCBgQ09ORklHX1NUTU1BQ19QQ0lgLCBhbmQgYENPTkZJR19EV01BQ19JTlRFTGAsIHdlIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcyBmdW5jdGlvbmFsaXR5LiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGBzdG1tYWNgIHRvIGRldGVybWluZSB0aGUgYmVzdCBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzODAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTI6MjUuNTM4OTg3MDM2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY2MzU4NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTVE1NQUNfRVRIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjI6Y29uZmlnIFNUTU1BQ19FVEhcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNUTWljcm9lbGVjdHJvbmljcyBNdWx0aS1HaWdhYml0IEV0aGVybmV0IGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTI6MjcuOTA1MzUyODMxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3ODE1MTk0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIFNUTU1BQyBQQ0kgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBQQ0kgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgU1RNTUFDIEV0aGVybmV0IGRyaXZlci4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IHNwZWNpZmljIGRyaXZlci4gTGV0J3Mgc2VlLi4uIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnYC4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBJdCBzaG91bGQgY29udGFpbiBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgaGVscCB0ZXh0IHJlbGF0ZWQgdG8gZW5hYmxpbmcgUENJIHN1cHBvcnQgd2l0aGluIHRoYXQgZHJpdmVyLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBkZXBlbmRlbmNpZXMsIG1heWJlIGNoZWNrIGZvciBhbnkgc3BlY2lmaWMgdmVuZG9yLXNwZWNpZmljIHF1aXJrcywgYW5kIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IFBDSSBzdXBwb3J0IGlzIG1hbmFnZWQgd2l0aGluIHRoZSBTVE1NQUMgZHJpdmVyIGNvZGUgYmFzZS4gSSBleHBlY3QgdG8gZmluZCBvcHRpb25zIHJlbGF0ZWQgdG8gc2VsZWN0aW5nIHRoZSBQQ0kgYnVzLCBkZWZpbmluZyBkZXZpY2UgSURzLCBvciBwb3NzaWJseSBlbmFibGluZyBzcGVjaWZpYyBQSFkgY29uZmlndXJhdGlvbnMgdGllZCB0byBQQ0kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTcxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTI6MzUuNjg2ODc0ODg0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU4OTE2NjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTVE1NQUNfUENJXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9Mzk4PWNvbmZpZyBEV01BQ19NT1RPUkNPTU1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctNDA2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6NDA3OmNvbmZpZyBTVE1NQUNfUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy00MDgtXFx0dHJpc3RhdGUgXFxcIlNUTU1BQyBQQ0kgYnVzIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjUyOjM3Ljk0NTc5NjAxN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjQ3ODk1MDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIFNUTU1BQyBQQ0kgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIGBTVE1NQUNfUENJYCBvcHRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyIHdoZW4gaXQncyB1c2VkIHdpdGggUENJIGludGVyZmFjZXMuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBoYW5kbGVzIFBDSS1zcGVjaWZpYyBmZWF0dXJlcywgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzLCBhbmQgYW55IHBvdGVudGlhbCBjYXZlYXRzIG9yIGNvbnNpZGVyYXRpb25zIHdoZW4gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMuIEkgYW50aWNpcGF0ZSB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgb3V0bGluZSB0aGUgZGVwZW5kZW5jaWVzIG9uIHRoZSBgUENJYCBidXMgaW5mcmFzdHJ1Y3R1cmUsIHdoYXQgb3RoZXIgZmVhdHVyZXMgbWlnaHQgYmUgY291cGxlZCB3aXRoIGBTVE1NQUNfUENJYCBzdWNoIGFzIERNQSBvciBzcGVjaWZpYyBoYXJkd2FyZSByZXZpc2lvbnMsIGFuZCB3aGF0IGVmZmVjdCB0aGlzIGNvbmZpZ3VyYXRpb24gbWlnaHQgaGF2ZSBvbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gaW1hZ2UuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkaWZmZXJlbnQgUENJIGludGVycnVwdCBtb2RlbHMsIHBvd2VyIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBQQ0kgY29udGV4dCwgYW5kIGhvdyBpdCBkZXRlY3RzIGFuZCBjb25maWd1cmVzIHRoZSBoYXJkd2FyZSBiYXNlZCBvbiBQQ0kgZGV2aWNlIElEcy4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBjb25maWd1cmF0aW9uIGZvciBhIGdpdmVuIGhhcmR3YXJlIHBsYXRmb3JtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUyNiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjUyOjQ0LjE5MzY5NTEwNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTA6XFx0XFx0ZGVmYXVsdCBNQUNIX0xPT05HU09ONjRcXG4gMzkxOlxcdFxcdGRlcGVuZHMgb24gKE1BQ0hfTE9PTkdTT042NCB8fCBDT01QSUxFX1RFU1QpIFxcdTAwMjZcXHUwMDI2IFBDSVxcbiAzOTI6XFx0XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuIDM5MzpcXHRcXHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxcbiAzOTQ6XFx0XFx0aGVscFxcbiAzOTU6XFx0XFx0ICBUaGlzIHNlbGVjdHMgdGhlIExPT05HU09OIFBDSSBidXMgc3VwcG9ydCBmb3IgdGhlIHN0bW1hYyBkcml2ZXIsXFxuIDM5NjpcXHRcXHQgIFN1cHBvcnQgZm9yIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gTG9vbmdzb24tMksxMDAwIFNvQyBhbmQgTFM3QTEwMDAgYnJpZGdlLlxcbiAzOTc6XFx0XFxuIDM5ODpcXHRjb25maWcgRFdNQUNfTU9UT1JDT01NXFxuIDM5OTpcXHRcXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFBDSSBEV01BQyBzdXBwb3J0XFxcIlxcbiA0MDA6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gNDAxOlxcdFxcdHNlbGVjdCBNT1RPUkNPTU1fUEhZXFxuIDQwMjpcXHRcXHRzZWxlY3QgU1RNTUFDX0xJQlBDSVxcbiA0MDM6XFx0XFx0aGVscFxcbiA0MDQ6XFx0XFx0ICBUaGlzIGVuYWJsZXMgZ2x1ZSBkcml2ZXIgZm9yIE1vdG9yY29tbSBEV01BQy1iYXNlZCBQQ0kgRXRoZXJuZXRcXG4gNDA1OlxcdFxcdCAgY29udHJvbGxlcnMuIEN1cnJlbnRseSBvbmx5IFlUNjgwMSBpcyBzdXBwb3J0ZWQuXFxuIDQwNjpcXHRcXG4gNDA3OlxcdGNvbmZpZyBTVE1NQUNfUENJXFxuIDQwODpcXHRcXHR0cmlzdGF0ZSBcXFwiU1RNTUFDIFBDSSBidXMgc3VwcG9ydFxcXCJcXG4gNDA5OlxcdFxcdGRlcGVuZHMgb24gUENJXFxuIDQxMDpcXHRcXHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcXG4gNDExOlxcdFxcdHNlbGVjdCBTVE1NQUNfTElCUENJXFxuIDQxMjpcXHRcXHRoZWxwXFxuIDQxMzpcXHRcXHQgIFRoaXMgc2VsZWN0cyB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgYnVzIHN1cHBvcnQgZm9yIHRoZSBzdG1tYWMgZHJpdmVyLlxcbiA0MTQ6XFx0XFx0ICBUaGlzIGRyaXZlciB3YXMgdGVzdGVkIG9uIFhMSU5YIFhDMlYzMDAwIEZGMTE1MkFNVDAyMjFcXG4gNDE1OlxcdFxcdCAgRDEyMTU5OTRBIFZJUlRFWCBGUEdBIGJvYXJkIGFuZCBTTlBTIFFvUyBJUEsgUHJvdG90eXBpbmcgS2l0LlxcbiA0MTY6XFx0XFxuIDQxNzpcXHRcXHQgIElmIHlvdSBoYXZlIGEgY29udHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuXFxuIDQxODpcXHRcXG4gNDE5OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTI6NDQuMTkzODI2NTI0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MDU4NTI0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTVE1NQUMgRHJpdmVyIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9ucywgYFNUTU1BQ19FVEhgIGFuZCBgU1RNTUFDX1BDSWAuIE15IHByaW1hcnkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGUgYHN0bW1hY19tYWNfbGlua191cGAgZnVuY3Rpb24gY2FuIGV2ZW4gYmUgcmVhY2hlZCBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQuIEknbSB0aGlua2luZywgaWYgc3l6a2FsbGVyIHRocm93cyBhIFBDSSBkZXZpY2UgYXQgdGhlIHN5c3RlbSB3aXRoIHRoYXQgdmVuZG9yIElELCAweDA3MDAsIHRoZSBgc3RtbWFjX3BjaWAgZHJpdmVyIGlzIGdvaW5nIHRvIHRyeSB0byB0YWtlIG93bmVyc2hpcCBvZiBpdCwgcmlnaHQ/XG5cblRoZW4sIHRoZSBkcml2ZXIgc2hvdWxkIG1hcCB0aGUgUENJIEJBUnMgYW5kIGJlZ2luIGl0cyBNQUMgaW5pdGlhbGl6YXRpb24gcm91dGluZS4gQnV0LCBiZWNhdXNlIHRoZSBoYXJkd2FyZSBpcyBlc3NlbnRpYWxseSBzaW11bGF0ZWQsIEknbSBleHBlY3Rpbmcgc29tZSBwb3RlbnRpYWwgcGl0ZmFsbHMgZHVyaW5nIHRoaXMgcHJvY2Vzcy4gSXQgY291bGQgZmFpbCBwcmV0dHkgZWFybHkgb24sIG1heWJlIGdldHRpbmcgc3R1Y2sgd2FpdGluZyBmb3IgYSByZXNldCBiaXQsIG9yIG1heWJlIGl0IHRyaWVzIHRvIHJlYWQgdGhlIE1BQyB2ZXJzaW9uIHJlZ2lzdGVyIGFuZCByZXBvcnRzIGFuIGVycm9yIHNpbmNlIGl0IGNhbid0IGZpbmQgYSB2YWxpZCByZXNwb25zZS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBzdG1tYWNfZHZyX3Byb2JlYCBmdW5jdGlvbiBpbiBgc3RtbWFjX21haW4uY2AgaW4gZGV0YWlsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIGl0J3MgY2FwYWJsZSBvZiBzdWNjZWVkaW5nLCBldmVuIHdpdGggdGhlIHNpbXVsYXRlZCBNTUlPIGFjY2VzcyB3ZSdsbCBoYXZlIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gTGV0J3Mgc2VlIGlmIHRoaXMgcHJvYmUgZnVuY3Rpb24gY2FuIG92ZXJjb21lIHRoZSBsYWNrIG9mIGFjdHVhbCBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMzEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1Mjo1MC45OTk2ODIyODlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTc2NjcwNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX2R2cl9wcm9iZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jPTI4Mz1zdGF0aWMgaW50IGR3Y19ldGhfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmMtMzI5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWR3Yy1xb3MtZXRoLmM6MzMwOlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1kd2MtcW9zLWV0aC5jLTMzMS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jPTQyPXN0YXRpYyBpbnQgaW50ZWxfZXRoX3BsYXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLXBsYXQuYy0xMTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jOjExODpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwtcGxhdC5jLTExOS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaW50ZWwuYz0xMjMyPXN0YXRpYyBpbnQgaW50ZWxfZXRoX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmMtMTMwOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jOjEzMTA6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pbnRlbC5jLTEzMTEtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jPTM3ND1zdGF0aWMgaW50IGlwcTgwNnhfZ21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jLTQ4Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1pcHE4MDZ4LmM6NDgzOlxcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtaXBxODA2eC5jLTQ4NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM9NDk4PXN0YXRpYyBpbnQgbG9vbmdzb25fZHdtYWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmMtNTYxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxvb25nc29uLmM6NTYyOlxcdHJldCA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdCwgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uYy01NjMtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYz00Mj1zdGF0aWMgaW50IGxwYzE4eHhfZHdtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWxwYzE4eHguYy02Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmM6Njg6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1scGMxOHh4LmMtNjktfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYz01OTk9c3RhdGljIGludCBtZWRpYXRla19kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYy02NDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbWVkaWF0ZWsuYzo2NDI6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lZGlhdGVrLmMtNjQzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jPTQ3PXN0YXRpYyBpbnQgbWVzb242X2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jLTcyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uLmM6NzM6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbi5jLTc0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYz0zODI9c3RhdGljIGludCBtZXNvbjhiX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbjhiLmMtNDYzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1lc29uOGIuYzo0NjQ6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tZXNvbjhiLmMtNDY1LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jPTI5Mz1zdGF0aWMgaW50IG1vdG9yY29tbV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmMtMzU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLW1vdG9yY29tbS5jOjM1OTpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0LCBcXHUwMDI2cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1tb3RvcmNvbW0uYy0zNjAtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jPTQ4PXN0YXRpYyBpbnQgcnpuMV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcnpuMS5jLTY3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXJ6bjEuYzo2ODpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKGRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yem4xLmMtNjktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNvcGhnby5jPTM1PXN0YXRpYyBpbnQgc29waGdvX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYy02NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zb3BoZ28uYzo2NTpcXHRyZXR1cm4gc3RtbWFjX2R2cl9wcm9iZShkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc29waGdvLmMtNjYtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYz0xNDc9c3RhdGljIGludCBzcGFjZW1pdF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYy0yMDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3BhY2VtaXQuYzoyMDc6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXNwYWNlbWl0LmMtMjA4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0YXJmaXZlLmM9OTA9c3RhdGljIGludCBzdGFyZml2ZV9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYy0xNTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RhcmZpdmUuYzoxNTM6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9kYXQsIFxcdTAwMjZzdG1tYWNfcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGFyZml2ZS5jLTE1NC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jPTUyNT1zdGF0aWMgaW50IHN0bTMyX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jLTU3OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdG0zMi5jOjU3OTpcXHRyZXQgPSBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXRfZGF0LCBcXHUwMDI2c3RtbWFjX3Jlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3RtMzIuYy01ODAtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmM9MTEwNT1zdGF0aWMgaW50IHN1bjhpX2R3bWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtc3VuOGkuYzoxMjAyOlxcdC8qIHRoZSBNQUMgaXMgcnVudGltZSBzdXNwZW5kZWQgYWZ0ZXIgc3RtbWFjX2R2cl9wcm9iZSgpLCBzbyB3ZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwMy1cXHQgKiBuZWVkIHRvIGVuc3VyZSB0aGUgTUFDIHJlc3VtZSBiYWNrIGJlZm9yZSBvdGhlciBvcGVyYXRpb25zIHN1Y2hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmMtMTIwOC1cXHQvKiBUaGUgbXV4IG11c3QgYmUgcmVnaXN0ZXJlZCBhZnRlciBwYXJlbnQgTURJT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN1bjhpLmM6MTIwOTpcXHQgKiBzbyBhZnRlciBzdG1tYWNfZHZyX3Byb2JlKClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdW44aS5jLTEyMTAtXFx0ICovXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy10ZWdyYS5jPTIxND1zdGF0aWMgaW50IHRlZ3JhX21nYmVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmMtMzc1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXRlZ3JhLmM6Mzc2OlxcdGVyciA9IHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdCwgXFx1MDAyNnJlcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdGVncmEuYy0zNzctXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy12aXNjb250aS5jPTIwNT1zdGF0aWMgaW50IHZpc2NvbnRpX2V0aF9kd21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYy0yMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtdmlzY29udGkuYzoyMzc6XFx0cmV0ID0gc3RtbWFjX2R2cl9wcm9iZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBwbGF0X2RhdCwgXFx1MDAyNnN0bW1hY19yZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXZpc2NvbnRpLmMtMjM4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD00MTM9dm9pZCBzdG1tYWNfZHZyX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjQxNDppbnQgc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjLmgtNDE1LVxcdFxcdCAgICAgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc3Nz1FWFBPUlRfU1lNQk9MX0dQTChzdG1tYWNfcGxhdF9kYXRfYWxsb2MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzc3OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc3Nzk6c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzc4MC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDgxLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODA4MjogKiBzdG1tYWNfZHZyX3Byb2JlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDgzLSAqIEBkZXY6IGRldmljZSBwb2ludGVyXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwOTAtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MDkxOmludCBzdG1tYWNfZHZyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0X2RhdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwOTItXFx0XFx0ICAgICBzdHJ1Y3Qgc3RtbWFjX3Jlc291cmNlcyAqcmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MTAxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODEwMjpcXHRyZXQgPSBfX3N0bW1hY19kdnJfcHJvYmUoZGV2LCBwbGF0X2RhdCwgcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgxMDMtXFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiBwbGF0X2RhdC1cXHUwMDNlZXhpdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEwNy19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo4MTA4OkVYUE9SVF9TWU1CT0xfR1BMKHN0bW1hY19kdnJfcHJvYmUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtODEwOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0xMTg9c3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTE4Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MTgzOlxcdHJldHVybiBzdG1tYWNfZHZyX3Byb2JlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHBsYXQsIFxcdTAwMjZyZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xODQtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BsYXRmb3JtLmM9ODQ4PWludCBzdG1tYWNfcGx0ZnJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jLTg1Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYzo4NTc6XFx0cmV0dXJuIHN0bW1hY19kdnJfcHJvYmUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdCwgcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYy04NTgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1Mjo1My43MTc0MTIzNzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYzNjIwOTE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBtaW5kIGlzIGp1bXBpbmcgYXJvdW5kIGEgYml0IGhlcmUsIGZvY3VzaW5nIG9uIHRoaXMgYF9fc3RtbWFjX2R2cl9wcm9iZWAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhpcyBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgYnVsayBvZiB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBTVE1NQUMgZHJpdmVyIGhhcHBlbnMuIFRoYXQgbWFrZXMgbWUgdGhpbmsuLi4gaWYgdGhlcmUncyBhIHByb2JsZW0gd2l0aCB0aGUgaGFyZHdhcmUsIGVzcGVjaWFsbHkgc29tZXRoaW5nIGJhc2ljIGxpa2UgTU1JTyAoTWVtb3J5LU1hcHBlZCBJL08pIGFjY2VzcywgSSdkIGV4cGVjdCB0byBzZWUgaXQgZmFpbCAqZWFybHkqIGluIHRoaXMgcHJvYmUgZnVuY3Rpb24uIFNvLCB0aGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBjYW4gSSBmb3JjZSBhIGZhaWx1cmUgYnkgcHJvdmlkaW5nIGZha2UgTU1JTyBhbmQgc2VlIHdoYXQgaGFwcGVucz8gVGhpcyBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGF2ZW51ZSBmb3IgZGVidWdnaW5nLiBJIHdhbnQgdG8gc2VlIGhvdyByb2J1c3QgdGhlIGVycm9yIGhhbmRsaW5nIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTkwNywiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjUzOjAxLjM1MzYyNDAyMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjYwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3Nzc5LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzc3OTpcXHRzdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuNzc4MDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LFxcbjc3ODE6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHN0bW1hY19yZXNvdXJjZXMgKnJlcylcXG43NzgyOlxcdHtcXG43NzgzOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDtcXG43Nzg0OlxcdFxcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdjtcXG43Nzg1OlxcdFxcdGludCBpLCByZXQgPSAwO1xcbjc3ODY6XFx0XFx0dTggcnhxO1xcbjc3ODc6XFx0XFxuNzc4ODpcXHRcXHRpZiAoIXBsYXRfZGF0LVxcdTAwM2VkbWFfY2ZnIHx8ICFwbGF0X2RhdC1cXHUwMDNlZG1hX2NmZy1cXHUwMDNlcGJsKSB7XFxuNzc4OTpcXHRcXHRcXHRkZXZfZXJyKGRldmljZSwgXFxcImludmFsaWQgRE1BIGNvbmZpZ3VyYXRpb25cXFxcblxcXCIpO1xcbjc3OTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzc5MTpcXHRcXHR9XFxuNzc5MjpcXHRcXG43NzkzOlxcdFxcdG5kZXYgPSBkZXZtX2FsbG9jX2V0aGVyZGV2X21xcyhkZXZpY2UsIHNpemVvZihzdHJ1Y3Qgc3RtbWFjX3ByaXYpLFxcbjc3OTQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1UTF9NQVhfVFhfUVVFVUVTLCBNVExfTUFYX1JYX1FVRVVFUyk7XFxuNzc5NTpcXHRcXHRpZiAoIW5kZXYpXFxuNzc5NjpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG43Nzk3OlxcdFxcbjc3OTg6XFx0XFx0U0VUX05FVERFVl9ERVYobmRldiwgZGV2aWNlKTtcXG43Nzk5OlxcdFxcbjc4MDA6XFx0XFx0cHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbjc4MDE6XFx0XFx0cHJpdi1cXHUwMDNlZGV2aWNlID0gZGV2aWNlO1xcbjc4MDI6XFx0XFx0cHJpdi1cXHUwMDNlZGV2ID0gbmRldjtcXG43ODAzOlxcdFxcbjc4MDQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1UTF9NQVhfUlhfUVVFVUVTOyBpKyspXFxuNzgwNTpcXHRcXHRcXHR1NjRfc3RhdHNfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNleHN0YXRzLnJ4cV9zdGF0c1tpXS5uYXBpX3N5bmNwKTtcXG43ODA2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNVExfTUFYX1RYX1FVRVVFUzsgaSsrKSB7XFxuNzgwNzpcXHRcXHRcXHR1NjRfc3RhdHNfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNleHN0YXRzLnR4cV9zdGF0c1tpXS5xX3N5bmNwKTtcXG43ODA4OlxcdFxcdFxcdHU2NF9zdGF0c19pbml0KFxcdTAwMjZwcml2LVxcdTAwM2V4c3RhdHMudHhxX3N0YXRzW2ldLm5hcGlfc3luY3ApO1xcbjc4MDk6XFx0XFx0fVxcbjc4MTA6XFx0XFxuNzgxMTpcXHRcXHRwcml2LVxcdTAwM2V4c3RhdHMucGNwdV9zdGF0cyA9XFxuNzgxMjpcXHRcXHRcXHRkZXZtX25ldGRldl9hbGxvY19wY3B1X3N0YXRzKGRldmljZSwgc3RydWN0IHN0bW1hY19wY3B1X3N0YXRzKTtcXG43ODEzOlxcdFxcdGlmICghcHJpdi1cXHUwMDNleHN0YXRzLnBjcHVfc3RhdHMpXFxuNzgxNDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG43ODE1OlxcdFxcbjc4MTY6XFx0XFx0c3RtbWFjX3NldF9ldGh0b29sX29wcyhuZGV2KTtcXG43ODE3OlxcdFxcdHByaXYtXFx1MDAzZXBhdXNlX3RpbWUgPSBwYXVzZTtcXG43ODE4OlxcdFxcdHByaXYtXFx1MDAzZXBsYXQgPSBwbGF0X2RhdDtcXG43ODE5OlxcdFxcdHByaXYtXFx1MDAzZWlvYWRkciA9IHJlcy1cXHUwMDNlYWRkcjtcXG43ODIwOlxcdFxcdHByaXYtXFx1MDAzZWRldi1cXHUwMDNlYmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpcmVzLVxcdTAwM2VhZGRyO1xcbjc4MjE6XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZG1hX2NmZy1cXHUwMDNlbXVsdGlfbXNpX2VuID1cXG43ODIyOlxcdFxcdFxcdChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUTU1BQ19GTEFHX01VTFRJX01TSV9FTik7XFxuNzgyMzpcXHRcXG43ODI0OlxcdFxcdHByaXYtXFx1MDAzZWRldi1cXHUwMDNlaXJxID0gcmVzLVxcdTAwM2VpcnE7XFxuNzgyNTpcXHRcXHRwcml2LVxcdTAwM2V3b2xfaXJxID0gcmVzLVxcdTAwM2V3b2xfaXJxO1xcbjc4MjY6XFx0XFx0cHJpdi1cXHUwMDNlc2Z0eV9pcnEgPSByZXMtXFx1MDAzZXNmdHlfaXJxO1xcbjc4Mjc6XFx0XFxuNzgyODpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19NVUxUSV9NU0lfRU4pIHtcXG43ODI5OlxcdFxcdFxcdHJldCA9IHN0bW1hY19tc2lfaW5pdChwcml2LCByZXMpO1xcbjc4MzA6XFx0XFx0XFx0aWYgKHJldClcXG43ODMxOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuNzgzMjpcXHRcXHR9XFxuNzgzMzpcXHRcXG43ODM0OlxcdFxcdGlmICghaXNfemVyb19ldGhlcl9hZGRyKHJlcy1cXHUwMDNlbWFjKSlcXG43ODM1OlxcdFxcdFxcdGV0aF9od19hZGRyX3NldChwcml2LVxcdTAwM2VkZXYsIHJlcy1cXHUwMDNlbWFjKTtcXG43ODM2OlxcdFxcbjc4Mzc6XFx0XFx0ZGV2X3NldF9kcnZkYXRhKGRldmljZSwgcHJpdi1cXHUwMDNlZGV2KTtcXG43ODM4OlxcdFxcbjc4Mzk6XFx0XFx0LyogVmVyaWZ5IGRyaXZlciBhcmd1bWVudHMgKi9cXG43ODQwOlxcdFxcdHN0bW1hY192ZXJpZnlfYXJncygpO1xcbjc4NDE6XFx0XFxuNzg0MjpcXHRcXHRwcml2LVxcdTAwM2VhZl94ZHBfemNfcXBzID0gYml0bWFwX3phbGxvYyhNVExfTUFYX1RYX1FVRVVFUywgR0ZQX0tFUk5FTCk7XFxuNzg0MzpcXHRcXHRpZiAoIXByaXYtXFx1MDAzZWFmX3hkcF96Y19xcHMpXFxuNzg0NDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG43ODQ1OlxcdFxcbjc4NDY6XFx0XFx0LyogQWxsb2NhdGUgd29ya3F1ZXVlICovXFxuNzg0NzpcXHRcXHRwcml2LVxcdTAwM2V3cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFxcXCJzdG1tYWNfd3FcXFwiKTtcXG43ODQ4OlxcdFxcdGlmICghcHJpdi1cXHUwMDNld3EpIHtcXG43ODQ5OlxcdFxcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiZmFpbGVkIHRvIGNyZWF0ZSB3b3JrcXVldWVcXFxcblxcXCIpO1xcbjc4NTA6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG43ODUxOlxcdFxcdFxcdGdvdG8gZXJyb3Jfd3FfaW5pdDtcXG43ODUyOlxcdFxcdH1cXG43ODUzOlxcdFxcbjc4NTQ6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZwcml2LVxcdTAwM2VzZXJ2aWNlX3Rhc2ssIHN0bW1hY19zZXJ2aWNlX3Rhc2spO1xcbjc4NTU6XFx0XFxuNzg1NjpcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2cHJpdi1cXHUwMDNlZWVlX2N0cmxfdGltZXIsIHN0bW1hY19lZWVfY3RybF90aW1lciwgMCk7XFxuNzg1NzpcXHRcXG43ODU4OlxcdFxcdC8qIE92ZXJyaWRlIHdpdGgga2VybmVsIHBhcmFtZXRlcnMgaWYgc3VwcGxpZWQgWFhYIENSUyBYWFhcXG43ODU5OlxcdFxcdCAqIHRoaXMgbmVlZHMgdG8gaGF2ZSBtdWx0aXBsZSBpbnN0YW5jZXNcXG43ODYwOlxcdFxcdCAqL1xcbjc4NjE6XFx0XFx0aWYgKChwaHlhZGRyIFxcdTAwM2U9IDApIFxcdTAwMjZcXHUwMDI2IChwaHlhZGRyIFxcdTAwM2M9IDMxKSlcXG43ODYyOlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBoeV9hZGRyID0gcGh5YWRkcjtcXG43ODYzOlxcdFxcbjc4NjQ6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXN0bW1hY19yc3QpIHtcXG43ODY1OlxcdFxcdFxcdHJldCA9IHJlc2V0X2NvbnRyb2xfYXNzZXJ0KHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXN0bW1hY19yc3QpO1xcbjc4NjY6XFx0XFx0XFx0cmVzZXRfY29udHJvbF9kZWFzc2VydChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VzdG1tYWNfcnN0KTtcXG43ODY3OlxcdFxcdFxcdC8qIFNvbWUgcmVzZXQgY29udHJvbGxlcnMgaGF2ZSBvbmx5IHJlc2V0IGNhbGxiYWNrIGluc3RlYWQgb2ZcXG43ODY4OlxcdFxcdFxcdCAqIGFzc2VydCArIGRlYXNzZXJ0IGNhbGxiYWNrcyBwYWlyLlxcbjc4Njk6XFx0XFx0XFx0ICovXFxuNzg3MDpcXHRcXHRcXHRpZiAocmV0ID09IC1FTk9UU1VQUClcXG43ODcxOlxcdFxcdFxcdFxcdHJlc2V0X2NvbnRyb2xfcmVzZXQocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlc3RtbWFjX3JzdCk7XFxuNzg3MjpcXHRcXHR9XFxuNzg3MzpcXHRcXG43ODc0OlxcdFxcdHJldCA9IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlc3RtbWFjX2FoYl9yc3QpO1xcbjc4NzU6XFx0XFx0aWYgKHJldCA9PSAtRU5PVFNVUFApXFxuNzg3NjpcXHRcXHRcXHRkZXZfZXJyKHByaXYtXFx1MDAzZWRldmljZSwgXFxcInVuYWJsZSB0byBicmluZyBvdXQgb2YgYWhiIHJlc2V0OiAlcGVcXFxcblxcXCIsXFxuNzg3NzpcXHRcXHRcXHRcXHRFUlJfUFRSKHJldCkpO1xcbjc4Nzg6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjUzOjAxLjM1NDA1MjA1MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Nzg5NzcxNTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYF9fc3RtbWFjX2R2cl9wcm9iZWAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIgaW50byBgX19zdG1tYWNfZHZyX3Byb2JlYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBmcmVzaCBtZW50YWwgbW9kZWwuIEkgYWxyZWFkeSBoYXZlIGEgZGVjZW50IGdyYXNwIG9mIHRoZSBvdmVyYWxsIFNUTU1BQyBkcml2ZXIgc3RydWN0dXJlLCBhbmQgSSd2ZSByZXZpZXdlZCB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdyBhIGZldyB0aW1lcy4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHNwZWNpZmljIHByb2JlIGZ1bmN0aW9uJ3Mgcm9sZSB3aXRoaW4gdGhhdCBjb250ZXh0LCBpbiBkZXRhaWwuIFdoYXQgYXJlIHRoZSBrZXkgb3BlcmF0aW9ucyBpdCBwZXJmb3Jtcz8gV2hlcmUgZG9lcyBpdCBmaXQgaW50byB0aGUgZGV2aWNlIGRpc2NvdmVyeSBhbmQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U/IEknbSBhbnRpY2lwYXRpbmcgaXQncyByZXNwb25zaWJsZSBmb3IgdGhlIGNvcmUgaGFyZHdhcmUtc3BlY2lmaWMgYnJpbmctdXAgYWZ0ZXIgdGhlIGdlbmVyaWMgZHJpdmVyIGhhcyBsb2FkZWQsIGhhbmRsaW5nIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBjb25maWd1cmluZyB0aGUgc3BlY2lmaWMgU1RNTUFDIHZhcmlhbnQuIFByb2JhYmx5IHNldHRpbmcgdXAgdGhlIERNQSBjaGFubmVscywgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgbWF5YmUgc29tZSBjbG9jayBjb25maWd1cmF0aW9uIGlmIGl0J3Mgbm90IGhhbmRsZWQgZWFybGllci4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uOyB0aGF0J3MgYWx3YXlzIGEgY3J1Y2lhbCBhcmVhIGZvciBkZWJ1Z2dpbmcuIEFueSByZWdpc3RlciBhY2Nlc3NlcyBvciBoYXJkd2FyZSBpbml0aWFsaXphdGlvbnMgd2lsbCBkZW1hbmQgc2NydXRpbnkuIFRpbWUgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBzdXJwcmlzZXMgaXQgaG9sZHMuIExldCdzIHNlZSBpZiBteSBpbml0aWFsIGFzc3VtcHRpb25zIGFsaWduLiBJJ20gaG9waW5nIEkgY2FuIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTgyMywiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTM6MDYuMTQzODI1NzY2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4NzksXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3ODc5OlxcdFxcdC8qIFdhaXQgYSBiaXQgZm9yIHRoZSByZXNldCB0byB0YWtlIGVmZmVjdCAqL1xcbjc4ODA6XFx0XFx0dWRlbGF5KDEwKTtcXG43ODgxOlxcdFxcbjc4ODI6XFx0XFx0LyogSW5pdCBNQUMgYW5kIGdldCB0aGUgY2FwYWJpbGl0aWVzICovXFxuNzg4MzpcXHRcXHRyZXQgPSBzdG1tYWNfaHdfaW5pdChwcml2KTtcXG43ODg0OlxcdFxcdGlmIChyZXQpXFxuNzg4NTpcXHRcXHRcXHRnb3RvIGVycm9yX2h3X2luaXQ7XFxuNzg4NjpcXHRcXG43ODg3OlxcdFxcdC8qIE9ubHkgRFdNQUMgY29yZSB2ZXJzaW9uIDUuMjAgb253YXJkcyBzdXBwb3J0cyBIVyBkZXNjcmlwdG9yIHByZWZldGNoLlxcbjc4ODg6XFx0XFx0ICovXFxuNzg4OTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlc3lub3BzeXNfaWQgXFx1MDAzYyBEV01BQ19DT1JFXzVfMjApXFxuNzg5MDpcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VkbWFfY2ZnLVxcdTAwM2VkY2hlID0gZmFsc2U7XFxuNzg5MTpcXHRcXG43ODkyOlxcdFxcdHN0bW1hY19jaGVja19ldGhlcl9hZGRyKHByaXYpO1xcbjc4OTM6XFx0XFxuNzg5NDpcXHRcXHRuZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNnN0bW1hY19uZXRkZXZfb3BzO1xcbjc4OTU6XFx0XFxuNzg5NjpcXHRcXHRuZGV2LVxcdTAwM2V4ZHBfbWV0YWRhdGFfb3BzID0gXFx1MDAyNnN0bW1hY194ZHBfbWV0YWRhdGFfb3BzO1xcbjc4OTc6XFx0XFx0bmRldi1cXHUwMDNleHNrX3R4X21ldGFkYXRhX29wcyA9IFxcdTAwMjZzdG1tYWNfeHNrX3R4X21ldGFkYXRhX29wcztcXG43ODk4OlxcdFxcbjc4OTk6XFx0XFx0bmRldi1cXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU0gfFxcbjc5MDA6XFx0XFx0XFx0XFx0ICAgIE5FVElGX0ZfUlhDU1VNO1xcbjc5MDE6XFx0XFx0bmRldi1cXHUwMDNleGRwX2ZlYXR1cmVzID0gTkVUREVWX1hEUF9BQ1RfQkFTSUMgfCBORVRERVZfWERQX0FDVF9SRURJUkVDVCB8XFxuNzkwMjpcXHRcXHRcXHRcXHQgICAgIE5FVERFVl9YRFBfQUNUX1hTS19aRVJPQ09QWTtcXG43OTAzOlxcdFxcbjc5MDQ6XFx0XFx0cmV0ID0gc3RtbWFjX3RjX2luaXQocHJpdiwgcHJpdik7XFxuNzkwNTpcXHRcXHRpZiAoIXJldCkge1xcbjc5MDY6XFx0XFx0XFx0bmRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19UQztcXG43OTA3OlxcdFxcdH1cXG43OTA4OlxcdFxcbjc5MDk6XFx0XFx0c3RtbWFjX3NldF9nc29fZmVhdHVyZXMobmRldik7XFxuNzkxMDpcXHRcXG43OTExOlxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLnNwaGVuIFxcdTAwMjZcXHUwMDI2XFxuNzkxMjpcXHRcXHQgICAgIShwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUTU1BQ19GTEFHX1NQSF9ESVNBQkxFKSkge1xcbjc5MTM6XFx0XFx0XFx0bmRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87XFxuNzkxNDpcXHRcXHRcXHRwcml2LVxcdTAwM2VzcGhfY2FwYWJsZSA9IHRydWU7XFxuNzkxNTpcXHRcXHRcXHRwcml2LVxcdTAwM2VzcGhfYWN0aXZlID0gcHJpdi1cXHUwMDNlc3BoX2NhcGFibGU7XFxuNzkxNjpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJTUEggZmVhdHVyZSBlbmFibGVkXFxcXG5cXFwiKTtcXG43OTE3OlxcdFxcdH1cXG43OTE4OlxcdFxcbjc5MTk6XFx0XFx0LyogSWRlYWxseSBvdXIgaG9zdCBETUEgYWRkcmVzcyB3aWR0aCBpcyB0aGUgc2FtZSBhcyBmb3IgdGhlXFxuNzkyMDpcXHRcXHQgKiBkZXZpY2UuIEhvd2V2ZXIsIGl0IG1heSBkaWZmZXIgYW5kIHRoZW4gd2UgaGF2ZSB0byB1c2Ugb3VyXFxuNzkyMTpcXHRcXHQgKiBob3N0IERNQSB3aWR0aCBmb3IgYWxsb2NhdGlvbiBhbmQgdGhlIGRldmljZSBETUEgd2lkdGggZm9yXFxuNzkyMjpcXHRcXHQgKiByZWdpc3RlciBoYW5kbGluZy5cXG43OTIzOlxcdFxcdCAqL1xcbjc5MjQ6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWhvc3RfZG1hX3dpZHRoKVxcbjc5MjU6XFx0XFx0XFx0cHJpdi1cXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWhvc3RfZG1hX3dpZHRoO1xcbjc5MjY6XFx0XFx0ZWxzZVxcbjc5Mjc6XFx0XFx0XFx0cHJpdi1cXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCA9IHByaXYtXFx1MDAzZWRtYV9jYXAuYWRkcjY0O1xcbjc5Mjg6XFx0XFxuNzkyOTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCkge1xcbjc5MzA6XFx0XFx0XFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXZpY2UsXFxuNzkzMTpcXHRcXHRcXHRcXHRcXHRETUFfQklUX01BU0socHJpdi1cXHUwMDNlZG1hX2NhcC5ob3N0X2RtYV93aWR0aCkpO1xcbjc5MzI6XFx0XFx0XFx0aWYgKCFyZXQpIHtcXG43OTMzOlxcdFxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlVzaW5nICVkLyVkIGJpdHMgRE1BIGhvc3QvZGV2aWNlIHdpZHRoXFxcXG5cXFwiLFxcbjc5MzQ6XFx0XFx0XFx0XFx0XFx0IHByaXYtXFx1MDAzZWRtYV9jYXAuaG9zdF9kbWFfd2lkdGgsIHByaXYtXFx1MDAzZWRtYV9jYXAuYWRkcjY0KTtcXG43OTM1OlxcdFxcbjc5MzY6XFx0XFx0XFx0XFx0LypcXG43OTM3OlxcdFxcdFxcdFxcdCAqIElmIG1vcmUgdGhhbiAzMiBiaXRzIGNhbiBiZSBhZGRyZXNzZWQsIG1ha2Ugc3VyZSB0b1xcbjc5Mzg6XFx0XFx0XFx0XFx0ICogZW5hYmxlIGVuaGFuY2VkIGFkZHJlc3NpbmcgbW9kZS5cXG43OTM5OlxcdFxcdFxcdFxcdCAqL1xcbjc5NDA6XFx0XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfRE1BX0FERFJfVF82NEJJVCkpXFxuNzk0MTpcXHRcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VkbWFfY2ZnLVxcdTAwM2VlYW1lID0gdHJ1ZTtcXG43OTQyOlxcdFxcdFxcdH0gZWxzZSB7XFxuNzk0MzpcXHRcXHRcXHRcXHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldmljZSwgRE1BX0JJVF9NQVNLKDMyKSk7XFxuNzk0NDpcXHRcXHRcXHRcXHRpZiAocmV0KSB7XFxuNzk0NTpcXHRcXHRcXHRcXHRcXHRkZXZfZXJyKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIkZhaWxlZCB0byBzZXQgRE1BIE1hc2tcXFxcblxcXCIpO1xcbjc5NDY6XFx0XFx0XFx0XFx0XFx0Z290byBlcnJvcl9od19pbml0O1xcbjc5NDc6XFx0XFx0XFx0XFx0fVxcbjc5NDg6XFx0XFxuNzk0OTpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VkbWFfY2FwLmhvc3RfZG1hX3dpZHRoID0gMzI7XFxuNzk1MDpcXHRcXHRcXHR9XFxuNzk1MTpcXHRcXHR9XFxuNzk1MjpcXHRcXG43OTUzOlxcdFxcdG5kZXYtXFx1MDAzZWZlYXR1cmVzIHw9IG5kZXYtXFx1MDAzZWh3X2ZlYXR1cmVzIHwgTkVUSUZfRl9ISUdIRE1BO1xcbjc5NTQ6XFx0XFx0bmRldi1cXHUwMDNld2F0Y2hkb2dfdGltZW8gPSBtc2Vjc190b19qaWZmaWVzKHdhdGNoZG9nKTtcXG43OTU1OlxcdCNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRFxcbjc5NTY6XFx0XFx0LyogQm90aCBtYWMxMDAgYW5kIGdtYWMgc3VwcG9ydCByZWNlaXZlIFZMQU4gdGFnIGRldGVjdGlvbiAqL1xcbjc5NTc6XFx0XFx0bmRldi1cXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfCBORVRJRl9GX0hXX1ZMQU5fU1RBR19SWDtcXG43OTU4OlxcdFxcdGlmIChkd21hY19pc194bWFjKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZSkpIHtcXG43OTU5OlxcdFxcdFxcdG5kZXYtXFx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYO1xcbjc5NjA6XFx0XFx0XFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZWh3X3ZsYW5fZW4gPSB0cnVlO1xcbjc5NjE6XFx0XFx0fVxcbjc5NjI6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAudmxoYXNoKSB7XFxuNzk2MzpcXHRcXHRcXHRuZGV2LVxcdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19GSUxURVI7XFxuNzk2NDpcXHRcXHRcXHRuZGV2LVxcdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fU1RBR19GSUxURVI7XFxuNzk2NTpcXHRcXHR9XFxuNzk2NjpcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC52bGlucylcXG43OTY3OlxcdFxcdFxcdG5kZXYtXFx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYO1xcbjc5Njg6XFx0I2VuZGlmXFxuNzk2OTpcXHRcXHRwcml2LVxcdTAwM2Vtc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoZGVidWcsIGRlZmF1bHRfbXNnX2xldmVsKTtcXG43OTcwOlxcdFxcbjc5NzE6XFx0XFx0cHJpdi1cXHUwMDNleHN0YXRzLnRocmVzaG9sZCA9IHRjO1xcbjc5NzI6XFx0XFxuNzk3MzpcXHRcXHQvKiBJbml0aWFsaXplIFJTUyAqL1xcbjc5NzQ6XFx0XFx0cnhxID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfcXVldWVzX3RvX3VzZTtcXG43OTc1OlxcdFxcdG5ldGRldl9yc3Nfa2V5X2ZpbGwocHJpdi1cXHUwMDNlcnNzLmtleSwgc2l6ZW9mKHByaXYtXFx1MDAzZXJzcy5rZXkpKTtcXG43OTc2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZXJzcy50YWJsZSk7IGkrKylcXG43OTc3OlxcdFxcdFxcdHByaXYtXFx1MDAzZXJzcy50YWJsZVtpXSA9IGV0aHRvb2xfcnhmaF9pbmRpcl9kZWZhdWx0KGksIHJ4cSk7XFxuNzk3ODpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTM6MDYuMTQ0MjkwMzU2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDgyOTM0NjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBjaGVja2luZyBgc3RtbWFjX2h3X2luaXRgOlxuXG4qKkRpdmluZyBpbnRvIGBzdG1tYWNfaHdfaW5pdGAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIG1lbnRhbGx5IGdvaW5nIHRocm91Z2ggYHN0bW1hY19od19pbml0YC4gRnJvbSB3aGF0IEkga25vdyBhYm91dCBTVE1NQUMgZHJpdmVycywgdGhpcyBmdW5jdGlvbiBpcyB0aGUgbGlrZWx5IHBsYWNlIHdoZXJlIHRoZSBjb3JlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIG1hZ2ljIGhhcHBlbnMuIEknbSBhc3N1bWluZyBpdCdzIHJlc3BvbnNpYmxlIGZvciB0aGluZ3MgbGlrZSBjbG9jayBlbmFibGluZywgUEhZIHNldHVwIChpZiByZWxldmFudCksIERNQSBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24sIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBpbml0aWFsIHJlZ2lzdGVyIHdyaXRlcyB0byB0aGUgTUFDIGl0c2VsZi5cblxuSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgbmVjZXNzYXJ5IGxvdy1sZXZlbCBjb25maWd1cmF0aW9ucyBhcmUgcGVyZm9ybWVkIGhlcmUuIEkgd2FudCB0byBjaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG1pc3NlZCBzdGVwcyBvciBhbnkgYXNzdW1wdGlvbnMgdGhhdCBtaWdodCBiZSBjYXVzaW5nIHN1YnRsZSBpc3N1ZXMgZG93biB0aGUgbGluZS4gSSBhbSByZWFsbHkgbG9va2luZyBmb3IgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgZm9yIHRoaXMgcGFydGljdWxhciBoYXJkd2FyZS4gSSdtIGV4cGVjdGluZyB0byBsb29rIGZvciB0aGUga2V5IGVsZW1lbnRzIHRoYXQgbmVlZCB0byBiZSBhZGRyZXNzZWQgaW4gdGhlIGBzdG1tYWNfaHdfaW5pdGAgZnVuY3Rpb24uIEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIGFueSBoYXJkd2FyZS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMsIGxpa2UgYW55IGNsb2NrIHNldHRpbmdzIG9yIG1lbW9yeSBtYXAgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBkb25lIGNvcnJlY3RseSwgb3IgZWxzZSBldmVyeXRoaW5nIGVsc2Ugd2lsbCBmYWlsLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGxvb2tpbmcgYXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBNRElPL01JSSBpbnRlcmZhY2VzLCBhcyB0aGF0J3Mgb2Z0ZW4gYSBjb21tb24gc291cmNlIG9mIHRyb3VibGUgd2hlbiBkZWFsaW5nIHdpdGggRXRoZXJuZXQgaGFyZHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDAwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1MzoxNi42MjcyMjg3NDlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjQ4NDkzMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX2h3X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03MzQ4PXN0YXRpYyB2b2lkIHN0bW1hY19wcmludF9hY3RwaHlpZihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTczODItLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3MzgzOiAqICBzdG1tYWNfaHdfaW5pdCAtIEluaXQgdGhlIE1BQyBkZXZpY2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTczODQtICogIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzM4OS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjczOTA6c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03MzkxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9Nzc3OT1zdGF0aWMgaW50IF9fc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc4ODItXFx0LyogSW5pdCBNQUMgYW5kIGdldCB0aGUgY2FwYWJpbGl0aWVzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzo3ODgzOlxcdHJldCA9IHN0bW1hY19od19pbml0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzg4NC1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1MzoxOS4xNTIwODQ2NzJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE1NjQ3OTc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSB3ZSBnby4gTGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHN0bW1hY19od19pbml0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBoYXJkd2FyZSBpcyBiZWluZyBicm91Z2h0IHVwLCB0aGUgaW5pdGlhbCByZWdpc3RlciBjb25maWd1cmF0aW9ucywgYW5kIGFueSBjcnVjaWFsIHNldHVwIHN0ZXBzIGJlZm9yZSB0aGUgZHJpdmVyIGlzIGZ1bGx5IG9wZXJhdGlvbmFsLiBUaGlzIGlzIGEgY3JpdGljYWwgcGllY2UsIGxheWluZyB0aGUgZ3JvdW5kd29yayBmb3IgZXZlcnl0aGluZyBlbHNlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuOiBBcmUgdGhlcmUgYW55IGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyBiZWluZyBhZGRyZXNzZWQgaGVyZT8gQW55IG9idmlvdXMgYXNzdW1wdGlvbnMgbWFkZSBhYm91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zIGRvd24gdGhlIGxpbmU/IEFyZSB0aGUgY2xvY2sgY29uZmlndXJhdGlvbnMgYmVpbmcgaGFuZGxlZCBjb3JyZWN0bHksIGFuZCBhcmUgaW50ZXJydXB0cyBiZWluZyBlbmFibGVkIGF0IHRoaXMgcG9pbnQ/IEkgYWxzbyB3YW50IHRvIGlkZW50aWZ5IGFueSBcIm1hZ2ljIG51bWJlcnNcIiBvciBoYXJkY29kZWQgdmFsdWVzIHRoYXQgbWlnaHQgaW5kaWNhdGUgYSBsYWNrIG9mIHByb3BlciBhYnN0cmFjdGlvbiBvciBjb3VsZCBpbnRyb2R1Y2UgcG9ydGFiaWxpdHkgaXNzdWVzLiBUaGUgZ29hbCBpcyBhIGNsZWFyIG1lbnRhbCBtYXAgb2Ygd2hhdCB0aGlzIGluaXRpYWxpc2F0aW9uIGNvZGUgaXMgZG9pbmcgYW5kIHRoZSBwb3RlbnRpYWwgZG93bnN0cmVhbSBlZmZlY3RzIG9mIGFueSBjaG9pY2VzIG1hZGUgd2l0aGluIGl0LiBMZXQncyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhcyByb2J1c3QgYXMgaXQgbmVlZHMgdG8gYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzU4LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTM6MjUuMzA4NTY3NDU2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczOTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MzkwOlxcdHN0YXRpYyBpbnQgc3RtbWFjX2h3X2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbjczOTE6XFx0e1xcbjczOTI6XFx0XFx0aW50IHJldDtcXG43MzkzOlxcdFxcbjczOTQ6XFx0XFx0LyogZHdtYWMtc3VuOGkgb25seSB3b3JrIGluIGNoYWluIG1vZGUgKi9cXG43Mzk1OlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VmbGFncyBcXHUwMDI2IFNUTU1BQ19GTEFHX0hBU19TVU44SSlcXG43Mzk2OlxcdFxcdFxcdGNoYWluX21vZGUgPSAxO1xcbjczOTc6XFx0XFx0cHJpdi1cXHUwMDNlY2hhaW5fbW9kZSA9ICEhY2hhaW5fbW9kZTtcXG43Mzk4OlxcdFxcbjczOTk6XFx0XFx0LyogSW5pdGlhbGl6ZSBIVyBJbnRlcmZhY2UgKi9cXG43NDAwOlxcdFxcdHJldCA9IHN0bW1hY19od2lmX2luaXQocHJpdik7XFxuNzQwMTpcXHRcXHRpZiAocmV0KVxcbjc0MDI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG43NDAzOlxcdFxcbjc0MDQ6XFx0XFx0LyogR2V0IHRoZSBIVyBjYXBhYmlsaXR5IChuZXcgR01BQyBuZXdlciB0aGFuIDMuNTBhKSAqL1xcbjc0MDU6XFx0XFx0cHJpdi1cXHUwMDNlaHdfY2FwX3N1cHBvcnQgPSBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzKHByaXYpO1xcbjc0MDY6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWh3X2NhcF9zdXBwb3J0KSB7XFxuNzQwNzpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJETUEgSFcgY2FwYWJpbGl0eSByZWdpc3RlciBzdXBwb3J0ZWRcXFxcblxcXCIpO1xcbjc0MDg6XFx0XFxuNzQwOTpcXHRcXHRcXHQvKiBXZSBjYW4gb3ZlcnJpZGUgc29tZSBnbWFjL2RtYSBjb25maWd1cmF0aW9uIGZpZWxkczogZS5nLlxcbjc0MTA6XFx0XFx0XFx0ICogZW5oX2Rlc2MsIHR4X2NvZSAoZS5nLiB0aGF0IGFyZSBwYXNzZWQgdGhyb3VnaCB0aGVcXG43NDExOlxcdFxcdFxcdCAqIHBsYXRmb3JtKSB3aXRoIHRoZSB2YWx1ZXMgZnJvbSB0aGUgSFcgY2FwYWJpbGl0eVxcbjc0MTI6XFx0XFx0XFx0ICogcmVnaXN0ZXIgKGlmIHN1cHBvcnRlZCkuXFxuNzQxMzpcXHRcXHRcXHQgKi9cXG43NDE0OlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWVuaF9kZXNjID0gcHJpdi1cXHUwMDNlZG1hX2NhcC5lbmhfZGVzYztcXG43NDE1OlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBtdCA9IHByaXYtXFx1MDAzZWRtYV9jYXAucG10X3JlbW90ZV93YWtlX3VwIFxcdTAwMjZcXHUwMDI2XFxuNzQxNjpcXHRcXHRcXHRcXHRcXHQhKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1RNTUFDX0ZMQUdfVVNFX1BIWV9XT0wpO1xcbjc0MTc6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAuaGFzaF90Yl9zeikge1xcbjc0MTg6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlaHctXFx1MDAzZW11bHRpY2FzdF9maWx0ZXJfYmlucyA9XFxuNzQxOTpcXHRcXHRcXHRcXHRcXHRcXHQoQklUKHByaXYtXFx1MDAzZWRtYV9jYXAuaGFzaF90Yl9zeikgXFx1MDAzY1xcdTAwM2MgNSk7XFxuNzQyMDpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNlbWNhc3RfYml0c19sb2cyID1cXG43NDIxOlxcdFxcdFxcdFxcdFxcdFxcdGlsb2cyKHByaXYtXFx1MDAzZWh3LVxcdTAwM2VtdWx0aWNhc3RfZmlsdGVyX2JpbnMpO1xcbjc0MjI6XFx0XFx0XFx0fVxcbjc0MjM6XFx0XFxuNzQyNDpcXHRcXHRcXHQvKiBUWENPRSBkb2Vzbid0IHdvcmsgaW4gdGhyZXNoIERNQSBtb2RlICovXFxuNzQyNTpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZm9yY2VfdGhyZXNoX2RtYV9tb2RlKVxcbjc0MjY6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNldHhfY29lID0gZmFsc2U7XFxuNzQyNzpcXHRcXHRcXHRlbHNlXFxuNzQyODpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9jb2UgPSBwcml2LVxcdTAwM2VkbWFfY2FwLnR4X2NvZTtcXG43NDI5OlxcdFxcbjc0MzA6XFx0XFx0XFx0LyogSW4gY2FzZSBvZiBHTUFDNCByeF9jb2UgaXMgZnJvbSBIVyBjYXAgcmVnaXN0ZXIuICovXFxuNzQzMTpcXHRcXHRcXHRwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9jb2UgPSBwcml2LVxcdTAwM2VkbWFfY2FwLnJ4X2NvZTtcXG43NDMyOlxcdFxcbjc0MzM6XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAucnhfY29lX3R5cGUyKVxcbjc0MzQ6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfY29lID0gU1RNTUFDX1JYX0NPRV9UWVBFMjtcXG43NDM1OlxcdFxcdFxcdGVsc2UgaWYgKHByaXYtXFx1MDAzZWRtYV9jYXAucnhfY29lX3R5cGUxKVxcbjc0MzY6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfY29lID0gU1RNTUFDX1JYX0NPRV9UWVBFMTtcXG43NDM3OlxcdFxcbjc0Mzg6XFx0XFx0XFx0c3RtbWFjX3ByaW50X2FjdHBoeWlmKHByaXYpO1xcbjc0Mzk6XFx0XFx0fSBlbHNlIHtcXG43NDQwOlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIk5vIEhXIERNQSBmZWF0dXJlIHJlZ2lzdGVyIHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuNzQ0MTpcXHRcXHR9XFxuNzQ0MjpcXHRcXG43NDQzOlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9jb2UpIHtcXG43NDQ0OlxcdFxcdFxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2VyeF9jc3VtID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfY29lO1xcbjc0NDU6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiUlggQ2hlY2tzdW0gT2ZmbG9hZCBFbmdpbmUgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG43NDQ2OlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VzeW5vcHN5c19pZCBcXHUwMDNjIERXTUFDX0NPUkVfNF8wMClcXG43NDQ3OlxcdFxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIkNPRSBUeXBlICVkXFxcXG5cXFwiLCBwcml2LVxcdTAwM2Vody1cXHUwMDNlcnhfY3N1bSk7XFxuNzQ0ODpcXHRcXHR9XFxuNzQ0OTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNldHhfY29lKVxcbjc0NTA6XFx0XFx0XFx0ZGV2X2luZm8ocHJpdi1cXHUwMDNlZGV2aWNlLCBcXFwiVFggQ2hlY2tzdW0gaW5zZXJ0aW9uIHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuNzQ1MTpcXHRcXG43NDUyOlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VwbXQpIHtcXG43NDUzOlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIldha2UtVXAgT24gTGFuIHN1cHBvcnRlZFxcXFxuXFxcIik7XFxuNzQ1NDpcXHRcXHRcXHRkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKHByaXYtXFx1MDAzZWRldmljZSwgMSk7XFxuNzQ1NTpcXHRcXHRcXHRkZXZtX3BtX3NldF93YWtlX2lycShwcml2LVxcdTAwM2VkZXZpY2UsIHByaXYtXFx1MDAzZXdvbF9pcnEpO1xcbjc0NTY6XFx0XFx0fVxcbjc0NTc6XFx0XFxuNzQ1ODpcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5udW1iZXJfcnhfcXVldWVzIFxcdTAwMjZcXHUwMDI2XFxuNzQ1OTpcXHRcXHQgICAgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfcXVldWVzX3RvX3VzZSBcXHUwMDNlIHByaXYtXFx1MDAzZWRtYV9jYXAubnVtYmVyX3J4X3F1ZXVlcykge1xcbjc0NjA6XFx0XFx0XFx0ZGV2X3dhcm4ocHJpdi1cXHUwMDNlZGV2aWNlLFxcbjc0NjE6XFx0XFx0XFx0XFx0IFxcXCJOdW1iZXIgb2YgUnggcXVldWVzICgldSkgZXhjZWVkcyBkbWEgY2FwYWJpbGl0eVxcXFxuXFxcIixcXG43NDYyOlxcdFxcdFxcdFxcdCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VyeF9xdWV1ZXNfdG9fdXNlKTtcXG43NDYzOlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X3F1ZXVlc190b191c2UgPSBwcml2LVxcdTAwM2VkbWFfY2FwLm51bWJlcl9yeF9xdWV1ZXM7XFxuNzQ2NDpcXHRcXHR9XFxuNzQ2NTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlZG1hX2NhcC5udW1iZXJfdHhfcXVldWVzIFxcdTAwMjZcXHUwMDI2XFxuNzQ2NjpcXHRcXHQgICAgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNldHhfcXVldWVzX3RvX3VzZSBcXHUwMDNlIHByaXYtXFx1MDAzZWRtYV9jYXAubnVtYmVyX3R4X3F1ZXVlcykge1xcbjc0Njc6XFx0XFx0XFx0ZGV2X3dhcm4ocHJpdi1cXHUwMDNlZGV2aWNlLFxcbjc0Njg6XFx0XFx0XFx0XFx0IFxcXCJOdW1iZXIgb2YgVHggcXVldWVzICgldSkgZXhjZWVkcyBkbWEgY2FwYWJpbGl0eVxcXFxuXFxcIixcXG43NDY5OlxcdFxcdFxcdFxcdCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9xdWV1ZXNfdG9fdXNlKTtcXG43NDcwOlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXR4X3F1ZXVlc190b191c2UgPSBwcml2LVxcdTAwM2VkbWFfY2FwLm51bWJlcl90eF9xdWV1ZXM7XFxuNzQ3MTpcXHRcXHR9XFxuNzQ3MjpcXHRcXG43NDczOlxcdFxcdGlmIChwcml2LVxcdTAwM2VkbWFfY2FwLnJ4X2ZpZm9fc2l6ZSBcXHUwMDI2XFx1MDAyNlxcbjc0NzQ6XFx0XFx0ICAgIHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X2ZpZm9fc2l6ZSBcXHUwMDNlIHByaXYtXFx1MDAzZWRtYV9jYXAucnhfZmlmb19zaXplKSB7XFxuNzQ3NTpcXHRcXHRcXHRkZXZfd2Fybihwcml2LVxcdTAwM2VkZXZpY2UsXFxuNzQ3NjpcXHRcXHRcXHRcXHQgXFxcIlJ4IEZJRk8gc2l6ZSAoJXUpIGV4Y2VlZHMgZG1hIGNhcGFiaWxpdHlcXFxcblxcXCIsXFxuNzQ3NzpcXHRcXHRcXHRcXHQgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlcnhfZmlmb19zaXplKTtcXG43NDc4OlxcdFxcdFxcdHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXJ4X2ZpZm9fc2l6ZSA9IHByaXYtXFx1MDAzZWRtYV9jYXAucnhfZmlmb19zaXplO1xcbjc0Nzk6XFx0XFx0fVxcbjc0ODA6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWRtYV9jYXAudHhfZmlmb19zaXplIFxcdTAwMjZcXHUwMDI2XFxuNzQ4MTpcXHRcXHQgICAgcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNldHhfZmlmb19zaXplIFxcdTAwM2UgcHJpdi1cXHUwMDNlZG1hX2NhcC50eF9maWZvX3NpemUpIHtcXG43NDgyOlxcdFxcdFxcdGRldl93YXJuKHByaXYtXFx1MDAzZWRldmljZSxcXG43NDgzOlxcdFxcdFxcdFxcdCBcXFwiVHggRklGTyBzaXplICgldSkgZXhjZWVkcyBkbWEgY2FwYWJpbGl0eVxcXFxuXFxcIixcXG43NDg0OlxcdFxcdFxcdFxcdCBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2V0eF9maWZvX3NpemUpO1xcbjc0ODU6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNldHhfZmlmb19zaXplID0gcHJpdi1cXHUwMDNlZG1hX2NhcC50eF9maWZvX3NpemU7XFxuNzQ4NjpcXHRcXHR9XFxuNzQ4NzpcXHRcXG43NDg4OlxcdFxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2V2bGFuX2ZhaWxfcV9lbiA9XFxuNzQ4OTpcXHRcXHRcXHQocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTVE1NQUNfRkxBR19WTEFOX0ZBSUxfUV9FTik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjUzOjI1LjMwODg1MTY3NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjYxNzYwNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzdG1tYWNfaHdpZl9pbml0YCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgc3RtbWFjX2h3aWZfaW5pdGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlIGlzIGluaXRpYWxpemVkIGZvciB0aGlzIFNUTU1BQyBkcml2ZXIuIEknbSBhc3N1bWluZyB0aGlzIGlzIHRoZSBjcnVjaWFsIHN0YXJ0aW5nIHBvaW50IGZvciBhbnkgaGFyZHdhcmUgaW50ZXJhY3Rpb24sIHNvIGdldHRpbmcgYSBzb2xpZCBncmlwIG9uIHRoaXMgaXMgcGFyYW1vdW50LiBJJ2xsIG5lZWQgdG8gbG9vayBmb3IgY2FsbHMgdG8gcmVnaXN0ZXIgdGhlIGRldmljZSwgc2V0IHVwIGludGVycnVwdCBoYW5kbGVycywgY29uZmlndXJlIERNQSBjaGFubmVscyDigJMgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBicmluZ2luZyBhIE1BQyBpbnRlcmZhY2Ugb25saW5lLiBJJ2xsIGJlIGV4cGVjdGluZyB0byBzZWUgYSBsb3Qgb2YgcmVnaXN0ZXIgYWNjZXNzIGhlcmUsIHBvdGVudGlhbGx5IGJhc2VkIG9uIHRoZSBEVCBiaW5kaW5ncy4gR290dGEgbWFrZSBzdXJlIGl0IGhhbmRsZXMgYWxsIHRoZSBwb3NzaWJsZSB2YXJpYXRpb25zIGluIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIHRvby4gT2theSwgbGV0J3Mgc3RhcnQgcmVhZGluZyB0aHJvdWdoIHRoZSBjb2RlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTE2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1MzozMS45NzA2MTU4MzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTM3MDM1MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX2h3aWZfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9Mjk0PXN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozMTc6aW50IHN0bW1hY19od2lmX2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0zMTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oPTY5Mz1pbnQgc3RtbWFjX3Jlc2V0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5oOjY5NDppbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuaC02OTUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTczOTA9c3RhdGljIGludCBzdG1tYWNfaHdfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTczOTktXFx0LyogSW5pdGlhbGl6ZSBIVyBJbnRlcmZhY2UgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc0MDA6XFx0cmV0ID0gc3RtbWFjX2h3aWZfaW5pdChwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTc0MDEtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTM6MzQuNzI0MzI1NjE4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwMTU4MDQ3MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byBgc3RtbWFjX2h3aWZfaW5pdGAuIEkgbmVlZCB0byBnZXQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gd29ya3MuIEknbSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWUsIGl0J3MgcmVzcG9uc2libGUgZm9yIGJyaW5naW5nIHVwIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2UgZm9yIHRoZSBTVE1NQUMgRXRoZXJuZXQgZHJpdmVyLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IHVzZXMsIHBhcnRpY3VsYXJseSBhbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZGV2aWNlIHRyZWUgYW5kIGFueSBtZW1vcnkgYWxsb2NhdGlvbiBpdCBwZXJmb3Jtcy4gSeKAmW0gZXhwZWN0aW5nIHRvIHNlZSBjb25maWd1cmF0aW9uIG9mIHRoZSBETUEgZW5naW5lLCBQSFkgaW50ZXJhY3Rpb24sIGFuZCBpbnRlcnJ1cHQgc2V0dXAgaW4gaGVyZS4gVW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiB0aGVzZSBvcGVyYXRpb25zIGlzIGNydWNpYWwuIEkgd2FudCB0byBzZWUgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyBhbmQgd2hhdCBzdGVwcyBhcmUgdGFrZW4gZHVyaW5nIHRoZSBzZXR1cC4gSXQncyBhbHNvIGltcG9ydGFudCB0byBub3RlIHRoZSB2YXJpb3VzIGhhcmR3YXJlIHZhcmlhdGlvbnMgdGhpcyBjb2RlIG1pZ2h0IG5lZWQgdG8gc3VwcG9ydC4gTGV04oCZcyBzZWUgaG93IGVsZWdhbnRseSBpdCBoYW5kbGVzIHRoZXNlIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgYXQgZGlmZmVyZW50IHBvaW50cyBkdXJpbmcgdGhlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTUyLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTM6NDAuNzQwMTMyNzQyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzE3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMxNzpcXHRpbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuIDMxODpcXHR7XFxuIDMxOTpcXHRcXHRlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGU7XFxuIDMyMDpcXHRcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xcbiAzMjE6XFx0XFx0c3RydWN0IHN0bW1hY192ZXJzaW9uIHZlcnNpb247XFxuIDMyMjpcXHRcXHRzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7XFxuIDMyMzpcXHRcXHRib29sIG5lZWRzX3NldHVwID0gdHJ1ZTtcXG4gMzI0OlxcdFxcdGludCByZXQ7XFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdHN0bW1hY19nZXRfdmVyc2lvbihwcml2LCBcXHUwMDI2dmVyc2lvbik7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdC8qIFNhdmUgSUQgZm9yIGxhdGVyIHVzZSAqL1xcbiAzMjk6XFx0XFx0cHJpdi1cXHUwMDNlc3lub3BzeXNfaWQgPSB2ZXJzaW9uLnNucHN2ZXI7XFxuIDMzMDpcXHRcXG4gMzMxOlxcdFxcdC8qIExldHMgYXNzdW1lIHNvbWUgc2FmZSB2YWx1ZXMgZmlyc3QgKi9cXG4gMzMyOlxcdFxcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDNCkge1xcbiAzMzM6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcHRwYWRkciA9IHByaXYtXFx1MDAzZWlvYWRkciArIFBUUF9HTUFDNF9PRkZTRVQ7XFxuIDMzNDpcXHRcXHRcXHRwcml2LVxcdTAwM2VtbWNhZGRyID0gcHJpdi1cXHUwMDNlaW9hZGRyICsgTU1DX0dNQUM0X09GRlNFVDtcXG4gMzM1OlxcdFxcdFxcdHByaXYtXFx1MDAzZWVzdGFkZHIgPSBwcml2LVxcdTAwM2Vpb2FkZHIgKyBFU1RfR01BQzRfT0ZGU0VUO1xcbiAzMzY6XFx0XFx0fSBlbHNlIHtcXG4gMzM3OlxcdFxcdFxcdHByaXYtXFx1MDAzZXB0cGFkZHIgPSBwcml2LVxcdTAwM2Vpb2FkZHIgKyBQVFBfR01BQzNfWF9PRkZTRVQ7XFxuIDMzODpcXHRcXHRcXHRwcml2LVxcdTAwM2VtbWNhZGRyID0gcHJpdi1cXHUwMDNlaW9hZGRyICsgTU1DX0dNQUMzX1hfT0ZGU0VUO1xcbiAzMzk6XFx0XFx0XFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKVxcbiAzNDA6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlZXN0YWRkciA9IHByaXYtXFx1MDAzZWlvYWRkciArIEVTVF9YR01BQ19PRkZTRVQ7XFxuIDM0MTpcXHRcXHR9XFxuIDM0MjpcXHRcXG4gMzQzOlxcdFxcdG1hYyA9IGRldm1fa3phbGxvYyhwcml2LVxcdTAwM2VkZXZpY2UsIHNpemVvZigqbWFjKSwgR0ZQX0tFUk5FTCk7XFxuIDM0NDpcXHRcXHRpZiAoIW1hYylcXG4gMzQ1OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHQvKiBDaGVjayBmb3IgSFcgc3BlY2lmaWMgc2V0dXAgZmlyc3QgKi9cXG4gMzQ4OlxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2VtYWNfc2V0dXApIHtcXG4gMzQ5OlxcdFxcdFxcdHJldCA9IHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZW1hY19zZXR1cChwcml2LCBtYWMpO1xcbiAzNTA6XFx0XFx0XFx0aWYgKHJldClcXG4gMzUxOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDM1MjpcXHRcXG4gMzUzOlxcdFxcdFxcdG5lZWRzX3NldHVwID0gZmFsc2U7XFxuIDM1NDpcXHRcXHR9XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZtYWMtXFx1MDAzZWlycV9jdHJsX2xvY2spO1xcbiAzNTc6XFx0XFxuIDM1ODpcXHRcXHQvKiBGYWxsYmFjayB0byBnZW5lcmljIEhXICovXFxuIDM1OTpcXHRcXG4gMzYwOlxcdFxcdC8qIFVzZSBzeW5vcHN5c19pZCB2YXIgYmVjYXVzZSBzb21lIHNldHVwcyBjYW4gb3ZlcnJpZGUgdGhpcyAqL1xcbiAzNjE6XFx0XFx0ZW50cnkgPSBzdG1tYWNfaHdpZl9maW5kKGNvcmVfdHlwZSwgcHJpdi1cXHUwMDNlc3lub3BzeXNfaWQsIHZlcnNpb24uZGV2X2lkKTtcXG4gMzYyOlxcdFxcdGlmICghZW50cnkpIHtcXG4gMzYzOlxcdFxcdFxcdGRldl9lcnIocHJpdi1cXHUwMDNlZGV2aWNlLFxcbiAzNjQ6XFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byBmaW5kIEhXIElGIChpZD0weCV4LCBnbWFjPSVkLyVkKVxcXFxuXFxcIixcXG4gMzY1OlxcdFxcdFxcdFxcdHZlcnNpb24uc25wc3ZlciwgY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQyxcXG4gMzY2OlxcdFxcdFxcdFxcdGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUM0KTtcXG4gMzY3OlxcdFxcbiAzNjg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDM2OTpcXHRcXHR9XFxuIDM3MDpcXHRcXG4gMzcxOlxcdFxcdC8qIE9ubHkgdXNlIGdlbmVyaWMgSFcgaGVscGVycyBpZiBuZWVkZWQgKi9cXG4gMzcyOlxcdFxcdG1hYy1cXHUwMDNlZGVzYyA9IG1hYy1cXHUwMDNlZGVzYyA/IDogZW50cnktXFx1MDAzZWRlc2M7XFxuIDM3MzpcXHRcXHRtYWMtXFx1MDAzZWRtYSA9IG1hYy1cXHUwMDNlZG1hID8gOiBlbnRyeS1cXHUwMDNlZG1hO1xcbiAzNzQ6XFx0XFx0bWFjLVxcdTAwM2VtYWMgPSBtYWMtXFx1MDAzZW1hYyA/IDogZW50cnktXFx1MDAzZW1hYztcXG4gMzc1OlxcdFxcdG1hYy1cXHUwMDNlcHRwID0gbWFjLVxcdTAwM2VwdHAgPyA6IGVudHJ5LVxcdTAwM2Vod3RpbWVzdGFtcDtcXG4gMzc2OlxcdFxcdG1hYy1cXHUwMDNlbW9kZSA9IG1hYy1cXHUwMDNlbW9kZSA/IDogZW50cnktXFx1MDAzZW1vZGU7XFxuIDM3NzpcXHRcXHRtYWMtXFx1MDAzZXRjID0gbWFjLVxcdTAwM2V0YyA/IDogZW50cnktXFx1MDAzZXRjO1xcbiAzNzg6XFx0XFx0bWFjLVxcdTAwM2VtbWMgPSBtYWMtXFx1MDAzZW1tYyA/IDogZW50cnktXFx1MDAzZW1tYztcXG4gMzc5OlxcdFxcdG1hYy1cXHUwMDNlZXN0ID0gbWFjLVxcdTAwM2Vlc3QgPyA6IGVudHJ5LVxcdTAwM2Vlc3Q7XFxuIDM4MDpcXHRcXHRtYWMtXFx1MDAzZXZsYW4gPSBtYWMtXFx1MDAzZXZsYW4gPyA6IGVudHJ5LVxcdTAwM2V2bGFuO1xcbiAzODE6XFx0XFxuIDM4MjpcXHRcXHRwcml2LVxcdTAwM2VodyA9IG1hYztcXG4gMzgzOlxcdFxcdHByaXYtXFx1MDAzZWZwZV9jZmcucmVnID0gZW50cnktXFx1MDAzZXJlZ3MuZnBlX3JlZztcXG4gMzg0OlxcdFxcdHByaXYtXFx1MDAzZXB0cGFkZHIgPSBwcml2LVxcdTAwM2Vpb2FkZHIgKyBlbnRyeS1cXHUwMDNlcmVncy5wdHBfb2ZmO1xcbiAzODU6XFx0XFx0cHJpdi1cXHUwMDNlbW1jYWRkciA9IHByaXYtXFx1MDAzZWlvYWRkciArIGVudHJ5LVxcdTAwM2VyZWdzLm1tY19vZmY7XFxuIDM4NjpcXHRcXHRtZW1jcHkoXFx1MDAyNnByaXYtXFx1MDAzZXB0cF9jbG9ja19vcHMsIGVudHJ5LVxcdTAwM2VwdHAsXFxuIDM4NzpcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBwdHBfY2xvY2tfaW5mbykpO1xcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHRpZiAoZW50cnktXFx1MDAzZWVzdClcXG4gMzkwOlxcdFxcdFxcdHByaXYtXFx1MDAzZWVzdGFkZHIgPSBwcml2LVxcdTAwM2Vpb2FkZHIgKyBlbnRyeS1cXHUwMDNlcmVncy5lc3Rfb2ZmO1xcbiAzOTE6XFx0XFxuIDM5MjpcXHRcXHQvKiBFbnRyeSBmb3VuZCAqL1xcbiAzOTM6XFx0XFx0aWYgKG5lZWRzX3NldHVwKSB7XFxuIDM5NDpcXHRcXHRcXHRyZXQgPSBlbnRyeS1cXHUwMDNlc2V0dXAocHJpdik7XFxuIDM5NTpcXHRcXHRcXHRpZiAocmV0KVxcbiAzOTY6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzk3OlxcdFxcdH1cXG4gMzk4OlxcdFxcbiAzOTk6XFx0XFx0LyogU2F2ZSBxdWlya3MsIGlmIG5lZWRlZCBmb3IgcG9zdGVyaW9yIHVzZSAqL1xcbiA0MDA6XFx0XFx0cHJpdi1cXHUwMDNlaHdpZl9xdWlya3MgPSBlbnRyeS1cXHUwMDNlcXVpcmtzO1xcbiA0MDE6XFx0XFxuIDQwMjpcXHRcXHRyZXR1cm4gMDtcXG4gNDAzOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTM6NDAuNzQwMjk2ODcyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTA5ODA1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgbWluZCBpcyBqdW1waW5nIGFyb3VuZCBhIGJpdCBoZXJlLCBmb2N1c2luZyBpbiBvbiB0aGlzIGZ1bmN0aW9uLCBgc3RtbWFjX2dldF92ZXJzaW9uYC4gVGhlIGtleSB0aGluZyB0aGF0IGtlZXBzIHBvcHBpbmcgdXAgaXMgdGhhdCBJJ20gZGVhbGluZyB3aXRoIE1lbW9yeS1NYXBwZWQgSS9PLCBvciBNTUlPLiBMZXQgbWUganVzdCB0aGluay4uLlxuXG4qKk1NSU8gT2JzZXJ2YXRpb24qKlxuXG5BaCwgcmlnaHQuIGBzdG1tYWNfZ2V0X3ZlcnNpb25gIHJlYWRzIGZyb20gTU1JTy4gVGhhdCBtZWFucyBJJ20gbm90IGRlYWxpbmcgd2l0aCBzb21lIGxvY2FsIHZhcmlhYmxlIG9yIGEgc2ltcGxlIGZ1bmN0aW9uIGNhbGwuIEknbSBoaXR0aW5nIGhhcmR3YXJlIHJlZ2lzdGVycyBkaXJlY3RseS4gVGhpcyBoYXMgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB0aW1pbmcsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGFuZCBob3cgdGhlIGhhcmR3YXJlIHByZXNlbnRzIGl0cyB2ZXJzaW9uIGluZm9ybWF0aW9uLiBJZiBpdOKAmXMgdXNpbmcgTU1JTywgaXQgaW1wbGllcyB0aGF0IHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGNvdWxkIGJlIGhlbGQgaW4gYSBmaXhlZCByZWdpc3RlciBsb2NhdGlvbi4gSSBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIHJlZ2lzdGVyIG9mZnNldHMuIERvZXMgdGhlIGRyaXZlciBoYW5kbGUgdGhpcz8gSSB3aWxsIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGRyaXZlciBjb2RlIGhhbmRsZXMgcG90ZW50aWFsIGlzc3VlcyBsaWtlIGVuZGlhbm5lc3MgYW5kIGFsaWdubWVudCBjb3JyZWN0bHkgdG8gcHJldmVudCByZWFkaW5nIHRoZSB3cm9uZyB2ZXJzaW9uLiBBbmQgaXQgbWlnaHQgYmUgbmVjZXNzYXJ5IHRvIGNvbnN1bHQgdGhlIHNwZWNpZmljIGRhdGFzaGVldCBmb3IgdGhlIGhhcmR3YXJlIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNpc2UgZm9ybWF0IGFuZCBtZWFuaW5nIG9mIHRoYXQgdmVyc2lvbiBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyMTksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjUzOjQ1LjM1MTI4MDA1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODM2NTQ2ODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0bW1hY19nZXRfdmVyc2lvblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM9MTY9c3RydWN0IHN0bW1hY192ZXJzaW9uIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYy0yMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmM6MjE6c3RhdGljIHZvaWQgc3RtbWFjX2dldF92ZXJzaW9uKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMjItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzdG1tYWNfdmVyc2lvbiAqdmVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jPTMxNz1pbnQgc3RtbWFjX2h3aWZfaW5pdChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzI1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2h3aWYuYzozMjY6XFx0c3RtbWFjX2dldF92ZXJzaW9uKHByaXYsIFxcdTAwMjZ2ZXJzaW9uKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmMtMzI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1Mzo0OS4xODc4MzM4MDZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU2NjYwNzQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4gZW1iZWRkZWQgc3lzdGVtcyBhbmQgZGV2aWNlIGRyaXZlcnM6XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIHRvIGBzdG1tYWNfZ2V0X3ZlcnNpb25gKipcblxuQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyBjbGVhcjogZGl2ZSBpbnRvIHRoZSBgc3RtbWFjX2dldF92ZXJzaW9uYCBmdW5jdGlvbi4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gVW5kZXJzdGFuZGluZyB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBvZiB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIE1BQyBkcml2ZXIgaXMgY3J1Y2lhbCwgaXQncyB0aGUgZm91bmRhdGlvbiBvZiBhbG1vc3QgZXZlcnl0aGluZy4gSXQgdXN1YWxseSBpbnZvbHZlcyByZWFkaW5nIHJlZ2lzdGVycywgbWF5YmUgc29tZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBkcml2ZXIsIGFuZCBmb3JtYXR0aW5nIHRoYXQgZGF0YSBmb3IgdGhlIHVzZXIuIEknbGwgbmVlZCB0byBsb29rIGZvciB3aGVyZSBpdCdzIGRlZmluZWQuIElzIGl0IGEgZGlyZWN0IHJlZ2lzdGVyIHJlYWQsIG9yIGRvZXMgaXQgaW52b2x2ZSBzb21lIG1vcmUgY29tcGxleCBsb2dpYyB0byBkZXRlcm1pbmUgdGhlIGRyaXZlcidzIHJldmlzaW9uLCBmZWF0dXJlIHNldCwgb3IgaGFyZHdhcmUgY29tcGF0aWJpbGl0eT8gSG9wZWZ1bGx5LCBpdCBpcyB3ZWxsIGRvY3VtZW50ZWQ7IG90aGVyd2lzZSBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWdpc3Rlci1sZXZlbCBpbnRlcnByZXRhdGlvbiBvZiBpdC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBkZWJ1Z2dpbmcgYW5kIGVuc3VyaW5nIGNvbXBhdGliaWxpdHksIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZGlmZmVyZW50IGhhcmR3YXJlIHJldmlzaW9ucyBvciBrZXJuZWwgdmVyc2lvbnMuIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIGl0J3Mgd29ya2luZyB3aXRoIGFuZCBob3cgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gaXMgc3RydWN0dXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk3NTgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1Mzo1NS43NTQ0NDM0ODlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIxOlxcdHN0YXRpYyB2b2lkIHN0bW1hY19nZXRfdmVyc2lvbihzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsXFxuICAyMjpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHN0bW1hY192ZXJzaW9uICp2ZXIpXFxuICAyMzpcXHR7XFxuICAyNDpcXHRcXHRlbnVtIGR3bWFjX2NvcmVfdHlwZSBjb3JlX3R5cGUgPSBwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGU7XFxuICAyNTpcXHRcXHR1bnNpZ25lZCBpbnQgdmVyc2lvbl9vZmZzZXQ7XFxuICAyNjpcXHRcXHR1MzIgdmVyc2lvbjtcXG4gIDI3OlxcdFxcbiAgMjg6XFx0XFx0dmVyLVxcdTAwM2VzbnBzdmVyID0gMDtcXG4gIDI5OlxcdFxcdHZlci1cXHUwMDNlZGV2X2lkID0gMDtcXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX01BQzEwMClcXG4gIDMyOlxcdFxcdFxcdHJldHVybjtcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0aWYgKGNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX0dNQUMpXFxuICAzNTpcXHRcXHRcXHR2ZXJzaW9uX29mZnNldCA9IEdNQUNfVkVSU0lPTjtcXG4gIDM2OlxcdFxcdGVsc2VcXG4gIDM3OlxcdFxcdFxcdHZlcnNpb25fb2Zmc2V0ID0gR01BQzRfVkVSU0lPTjtcXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0dmVyc2lvbiA9IHJlYWRsKHByaXYtXFx1MDAzZWlvYWRkciArIHZlcnNpb25fb2Zmc2V0KTtcXG4gIDQwOlxcdFxcdGlmICh2ZXJzaW9uID09IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTM6NTUuNzU0NTQzMDc5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMDQ1NzU0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBWZXJzaW9uIFZhbHVlIEFub21hbHkqKlxuXG5BbHJpZ2h0LCBsZXQncyBkcmlsbCBkb3duIG9uIHRoaXMuIElmIHRoZSBgdmVyc2lvbmAgdmFsdWUgaGl0cyBhIHplcm8gb3IsIGV2ZW4gbW9yZSBzdXNwaWNpb3VzbHksIGAweGZmZmZmZmZmYCwgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucz8gV2UncmUgdGFsa2luZyBhYm91dCB1bm1hcHBlZCBtZW1vcnkgaGVyZSwgb3IgcG90ZW50aWFsbHkgc29tZSBpbnRlbnRpb25hbGx5IGZha2VkIE1NSU8uIEVpdGhlciBzY2VuYXJpbyBkZW1hbmRzIGltbWVkaWF0ZSBhdHRlbnRpb24uIEEgemVybyB1c3VhbGx5IGltcGxpZXMgaXQgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQgb3IgaXMgb3RoZXJ3aXNlIGludmFsaWQsIGEgc2lnbmFsIG9mIHNlcmlvdXMgdHJvdWJsZS4gYDB4ZmZmZmZmZmZgIGlzIGEgYml0IG1vcmUgbnVhbmNlZC4gSXQgY291bGQgcmVwcmVzZW50IGFuIG92ZXJmbG93LCBhbiBpbnRlbnRpb25hbCBtYXJrZXIgZm9yIFwiaW52YWxpZCxcIiBvciBwZXJoYXBzIHNvbWUgaGFyZHdhcmUtc3BlY2lmaWMgcXVpcmsgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCB0aGUgcmVsZXZhbnQgbWVtb3J5IG1hcCBhbmQgTU1JTyBkZWZpbml0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IHBhcnRpY3VsYXIgcmVnaW9uIGlzICpzdXBwb3NlZCogdG8gY29udGFpbi4gSXMgaXQgYSBrbm93biByZXNlcnZlZCBhcmVhPyBJcyB0aGVyZSBhIGtub3duIGZhaWx1cmUgbW9kZSB0aGF0IHJlc3VsdHMgaW4gdGhpcyB2YWx1ZT8gV2hhdCBhcmUgdGhlIGFjY2VzcyBwZXJtaXNzaW9ucyBhc3NvY2lhdGVkIHdpdGggdGhhdCBtZW1vcnkgYWRkcmVzcz8gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGlnIGludG8gdGhlIGRvY3VtZW50YXRpb24gYW5kIHBvdGVudGlhbGx5IHRyYWNlIHRoZSBtZW1vcnkgYWNjZXNzIGluc3RydWN0aW9ucy4gVGhpcyByZXF1aXJlcyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBsYXRmb3JtJ3MgYXJjaGl0ZWN0dXJlLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiB0aGlzIGNvbmRpdGlvbiBpcyB0cmlnZ2VyZWQuIElzIGl0IGR1cmluZyBpbml0aWFsaXphdGlvbiwgYXQgcnVudGltZSwgb3IgaXMgaXQgYSByZXN1bHQgb2YgYW4gZXh0ZXJuYWwgaW50ZXJhY3Rpb24/IElzIGl0IGEgc3ltcHRvbSBvZiBhIGxhcmdlciwgbW9yZSBmdW5kYW1lbnRhbCBwcm9ibGVtPyBJcyBpdCBwb3NzaWJsZSB0aGUgcmVhZCBpcyBvY2N1cnJpbmcgb24gYSBzdGFsZSBwb2ludGVyP1xuXG5Gcm9tIGEgZGVidWdnaW5nIHBlcnNwZWN0aXZlLCBJJ20gdGhpbmtpbmcgb2Ygc3RyYXRlZ2llcyBub3c6IHNldHRpbmcgYSBicmVha3BvaW50LCBpbnN0cnVtZW50aW5nIHRoZSBjb2RlIHRvIGxvZyBhY2Nlc3NlcyB0byB0aGF0IGFkZHJlc3MsIG9yIHVzaW5nIGEgbWVtb3J5IG1vbml0b3JpbmcgdG9vbC4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIGNvbnRleHQ6IHRoZSBwcm9jZXNzLCB0aGUgdGhyZWFkLCB0aGUgcmVsZXZhbnQgcmVnaXN0ZXJzLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGluc3RydWN0aW9ucy4gSSdsbCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYW5kIHdoZXRoZXIgdGhlIHByb2JsZW0gaXMgcmVwZWF0YWJsZSwgb3IgaW50ZXJtaXR0ZW50LlxuXG5UaGlzIGFsc28gYnJpbmdzIHVwIHRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIHRoZXJlJ3MgYSBoYXJkd2FyZSBmYXVsdCB0byBiZSBkZWFsdCB3aXRoLiBUaGUgYXBwZWFyYW5jZSBvZiBhbiBcImFsbCBvbmVzXCIgcGF0dGVybiBtYXkgc3VnZ2VzdCBhIGRlZmVjdCBpbiB0aGUgc3lzdGVtJ3MgbWVtb3J5IGNvbnRyb2xsZXIgb3IgdGhlIG1lbW9yeSBjaGlwcyB0aGVtc2VsdmVzLiBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgaGFyZHdhcmUgZGlhZ25vc3RpYyB0b29scywgb3IgcnVubmluZyBzb21lIG1lbW9yeSB0ZXN0cy4gSXTigJlzIGFsc28gdmVyeSBwb3NzaWJsZSBJJ20gbG9va2luZyBhdCBhIGRyaXZlciBwcm9ibGVtLCBzbyBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoZSB1bmRlcmx5aW5nIGRyaXZlcnMgaW50ZXJwcmV0IGFuZCBwcmVzZW50IHRoZXNlIHZhbHVlcyB0byB0aGUgdXNlciBzcGFjZS4gSSB3b3VsZCBuZWVkIHRvIGZpbmQgb3V0ICp3aHkqIHRoZSBkYXRhIGlzIGNvcnJ1cHRlZC9pbmNvcnJlY3QuXG5cblNvLCBpbiBlc3NlbmNlLCBJIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIGxpa2UgYSBkZXRlY3RpdmUsIGVsaW1pbmF0aW5nIHBvc3NpYmlsaXRpZXMgYW5kIGdldHRpbmcgYXQgdGhlIHJvb3QgY2F1c2Ugb2YgdGhpcyBwb3RlbnRpYWxseSBjcml0aWNhbCBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzMzMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU0OjAyLjA1OTEyMDg0MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvaHdpZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdFxcdGlmICh2ZXJzaW9uID09IDApIHtcXG4gIDQxOlxcdFxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlZlcnNpb24gSUQgbm90IGF2YWlsYWJsZVxcXFxuXFxcIik7XFxuICA0MjpcXHRcXHRcXHRyZXR1cm47XFxuICA0MzpcXHRcXHR9XFxuICA0NDpcXHRcXG4gIDQ1OlxcdFxcdGRldl9pbmZvKHByaXYtXFx1MDAzZWRldmljZSwgXFxcIlVzZXIgSUQ6IDB4JXgsIFN5bm9wc3lzIElEOiAweCV4XFxcXG5cXFwiLFxcbiAgNDY6XFx0XFx0XFx0IEZJRUxEX0dFVChEV01BQ19VU0VSVkVSLCB2ZXJzaW9uKSxcXG4gIDQ3OlxcdFxcdFxcdCBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbikpO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHR2ZXItXFx1MDAzZXNucHN2ZXIgPSBGSUVMRF9HRVQoRFdNQUNfU05QU1ZFUiwgdmVyc2lvbik7XFxuICA1MDpcXHRcXHRpZiAoY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpXFxuICA1MTpcXHRcXHRcXHR2ZXItXFx1MDAzZWRldl9pZCA9IEZJRUxEX0dFVChEV01BQ19VU0VSVkVSLCB2ZXJzaW9uKTtcXG4gIDUyOlxcdH1cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0c3RhdGljIHZvaWQgc3RtbWFjX2R3bWFjX21vZGVfcXVpcmsoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbiAgNTU6XFx0e1xcbiAgNTY6XFx0XFx0c3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjID0gcHJpdi1cXHUwMDNlaHc7XFxuICA1NzpcXHRcXG4gIDU4OlxcdFxcdGlmIChwcml2LVxcdTAwM2VjaGFpbl9tb2RlKSB7XFxuICA1OTpcXHRcXHRcXHRkZXZfaW5mbyhwcml2LVxcdTAwM2VkZXZpY2UsIFxcXCJDaGFpbiBtb2RlIGVuYWJsZWRcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NDowMi4wNTkyNTE5OTJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3NzU4MTM5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHRlY2huaWNhbCBzbmlwcGV0LCBwdXQgaW50byBmaXJzdC1wZXJzb24gdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqRGVjb2RpbmcgdGhlIFZlcnNpb24gQ2hlY2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHdlIGhhdmUgYSBzY2VuYXJpbyB3aGVyZSB3ZSdyZSBldmFsdWF0aW5nIGEgYHZlcnNpb25gIGZpZWxkLCBsaWtlbHkgcmVsYXRlZCB0byBhIFN5bm9wc3lzIEV0aGVybmV0IE1BQyBkcml2ZXIsIGBzdG1tYWNgLiBUaGUga2V5IGlzIHRoaXMgYml0bWFza2luZyBidXNpbmVzczogaWYgYHZlcnNpb25gIGhhcyBhIHZhbHVlIG9mIGAweGZmZmZmZmZmYCwgd2hpY2ggbGlrZWx5IHNpZ25hbHMgc29tZSBraW5kIG9mIFwiYWxsIG9uZXNcIiBvciBpbnZhbGlkL3NwZWNpYWwgc3RhdGUsIHRoZW4gYHZlci1cdTAwM2VzbnBzdmVyYCBpcyBhc3NpZ25lZCBgMHhmZmAuIFRoaXMgaXMgdGhlIGltcG9ydGFudCBjaGVjay4gVGhlIGNvZGUgc2VlbXMgdG8gYmUgZXh0cmFjdGluZyBvciBtYXBwaW5nIGEgc3BlY2lmaWMgU3lub3BzeXMgdmVyc2lvbiBudW1iZXIgZnJvbSB0aGUgZnVsbCBgdmVyc2lvbmAgZmllbGQuXG5cblRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIHRoYXQgdGhpcyBgMHhmZmAgaXMgYSAqZGVmYXVsdCogb3Igc3BlY2lhbCB2YWx1ZSB1c2VkIHdoZW4gdGhlIGZ1bGwgdmVyc2lvbiBudW1iZXIgaXMgbWFza2VkIHRvIGFsbCBvbmVzLiBUaGlzIGlzIGEgY29tbW9uIGFuZCBwcm9iYWJseSBjbGV2ZXIgd2F5IHRvIGhhbmRsZSBlZGdlIGNhc2VzIG9yIHJlcHJlc2VudCAndW5rbm93bicgdmVyc2lvbnMuIEl0J3MgbGlrZWx5IHVzZWQgbGF0ZXIgZm9yIGZlYXR1cmUgZGV0ZWN0aW9uIG9yIGRyaXZlciBjb25maWd1cmF0aW9uLlxuXG5Ob3csIHdpdGggdGhhdCBhc3NpZ25tZW50LCBpdCdzIGZvbGxvd2VkIHVwIGJ5IGEgY2FsbCB0byBgc3RtbWFjX2h3aWZfaW5pdGAsIHdoaWNoIHRoZW4gdXNlcyB0aGUgYHN0bW1hY19od2lmX2ZpbmRgIGZ1bmN0aW9uLiBUaGlzIGlzIGNyaXRpY2FsOiB3ZSBoYXZlIHRvIGZpbmQgdGhlIGNvcnJlY3QgaGFyZHdhcmUgaW50ZXJmYWNlIHRvIGluaXQgdGhlIGRldmljZS4gVGhlIGZ1bmN0aW9uIGxvb2tzIGZvciB0aGUgY29yZSB0eXBlIG9mIHRoZSBkZXZpY2UsIGFsb25nIHdpdGggdGhlIGRldmljZSdzIHNwZWNpZmljIFN5bm9wc3lzIGlkZW50aWZpZXIgKGBwcml2LVx1MDAzZXN5bm9wc3lzX2lkYCksIGFuZCwgY3J1Y2lhbGx5LCB0aGUgYHZlcnNpb24uZGV2X2lkYC4gU28sIHdoaWxlIHRoZSBoaWdoZXItbGV2ZWwgYHZlcnNpb25gIGlzIGhhbmRsZWQgaGVyZSAoYW5kIHRoZSBzcGVjaWFsIGNhc2UgdG8gZmluZCBhIG1vcmUgZ2VuZXJhbCBudW1iZXIpLCB0aGUgYGRldl9pZGAgaXMgdGhlIGFjdHVhbCB2ZXJzaW9uIElEIHRoYXQgaXMgcmVsZXZhbnQgdG8gZmluZGluZyB0aGUgaGFyZHdhcmUgaW50ZXJmYWNlLiBJbnRlcmVzdGluZyB0aGF0IHRoZSBpbml0aWFsIGFsbCBvbmVzIHZhbHVlIG1heSBtZWFuIHRoYXQgdGhlIHN5c3RlbSBrbm93cyB3aGF0IHRvIHVzZSBmb3IgdGhlIGRldmljZSBpZC4gSSBhbSBzdXJlIHRoZXJlIGFyZSB2YWxpZCByZWFzb25zIGZvciBkb2luZyB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI3NSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTQ6MTMuODM1MDY5NDk5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTM3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9od2lmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjk0OlxcdHN0bW1hY19od2lmX2ZpbmQoZW51bSBkd21hY19jb3JlX3R5cGUgY29yZV90eXBlLCB1OCBzbnBzdmVyLCB1OCBkZXZfaWQpXFxuIDI5NTpcXHR7XFxuIDI5NjpcXHRcXHRjb25zdCBzdHJ1Y3Qgc3RtbWFjX2h3aWZfZW50cnkgKmVudHJ5O1xcbiAyOTc6XFx0XFx0aW50IGk7XFxuIDI5ODpcXHRcXG4gMjk5OlxcdFxcdGZvciAoaSA9IEFSUkFZX1NJWkUoc3RtbWFjX2h3KSAtIDE7IGkgXFx1MDAzZT0gMDsgaS0tKSB7XFxuIDMwMDpcXHRcXHRcXHRlbnRyeSA9IFxcdTAwMjZzdG1tYWNfaHdbaV07XFxuIDMwMTpcXHRcXG4gMzAyOlxcdFxcdFxcdGlmIChjb3JlX3R5cGUgIT0gZW50cnktXFx1MDAzZWNvcmVfdHlwZSlcXG4gMzAzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMDQ6XFx0XFx0XFx0LyogVXNlIHN5bm9wc3lzX2lkIHZhciBiZWNhdXNlIHNvbWUgc2V0dXBzIGNhbiBvdmVycmlkZSB0aGlzICovXFxuIDMwNTpcXHRcXHRcXHRpZiAoc25wc3ZlciBcXHUwMDNjIGVudHJ5LVxcdTAwM2VtaW5faWQpXFxuIDMwNjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzA3OlxcdFxcdFxcdGlmIChjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9YR01BQyBcXHUwMDI2XFx1MDAyNlxcbiAzMDg6XFx0XFx0XFx0ICAgIGRldl9pZCAhPSBlbnRyeS1cXHUwMDNlZGV2X2lkKVxcbiAzMDk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDMxMDpcXHRcXG4gMzExOlxcdFxcdFxcdHJldHVybiBlbnRyeTtcXG4gMzEyOlxcdFxcdH1cXG4gMzEzOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NDoxMy44MzUyMTc5MjhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcxOTI5NzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYHN0bW1hY2AgRHJpdmVyJ3MgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJZiBgc25wc3ZlcmAgaXMgZXF1YWwgdG8gYDB4ZmZgLCB0aGF0J3MgYSBzcGVjaWFsIG1hcmtlciwgcmlnaHQ/IEl0IG1lYW5zIHRoYXQgd2hlbiBgc3RtbWFjX2h3aWZfZmluZGAgaXMgY2FsbGVkLCBpdCdzIGdvaW5nIHRvIGZpbmQgYSBtYXRjaCBiYXNlZCBvbiB0aGUgaGlnaGVzdCBgbWluX2lkYCBmb3IgdGhlIHNwZWNpZmllZCBgY29yZV90eXBlYC4gVGhhdCdzIGhvdyB0aGlzIGlzIGRlc2lnbmVkIHRvIGhhbmRsZSB2ZXJzaW9uaW5nLCBsb29raW5nIGZvciB0aGUgbW9zdCBjb21wYXRpYmxlIG9wdGlvbiB3aGVuIGEgc3BlY2lmaWMgdmVyc2lvbiBpc24ndCBhdmFpbGFibGUuIENvbnNlcXVlbnRseSwgdGhlIGNhbGwgdG8gYHN0bW1hY19od2lmX2ZpbmRgICp3aWxsKiBzdWNjZWVkIGluIHRoaXMgc2NlbmFyaW8uIFRoZW4sIGJlY2F1c2UgdGhlIGxvb2t1cCBzdWNjZWVkZWQsIGBzdG1tYWNfaHdpZl9pbml0YCB3aWxsIHJldHVybiAwLCB3aGljaCBzaWduaWZpZXMgc3VjY2Vzc2Z1bCBpbml0aWFsaXphdGlvbi4gRnJvbSB0aGVyZSwgZXhlY3V0aW9uIHByb2NlZWRzLCBhbmQgd2UnbGwgdGhlbiBhcnJpdmUgYXQgdGhlIGNhbGwgdG8gYHN0bW1hY19od19pbml0YC4gSW5zaWRlIGBzdG1tYWNfaHdfaW5pdGAsIG15IG5leHQgZm9jdXMgd2lsbCBiZSB0aGUgY2FsbCB0byBgc3RtbWFjX2dldF9od19mZWF0dXJlc2AuIEkgbmVlZCB0byByZXZpZXcgd2hhdCdzIGhhcHBlbmluZyBpbiB0aGVyZSB0byB1bmRlcnN0YW5kIHRoZSBkcml2ZXIncyBjYXBhYmlsaXR5IGRldGVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxMDAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU0OjE4LjU1NDUxNzY3OVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg5NTY2MTkwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MzEzNj1zdGF0aWMgdm9pZCBzdG1tYWNfbW1jX3NldHVwKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzE1MC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjMxNTE6ICogc3RtbWFjX2dldF9od19mZWF0dXJlcyAtIGdldCBNQUMgY2FwYWJpbGl0aWVzIGZyb20gdGhlIEhXIGNhcC4gcmVnaXN0ZXIuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0zMTUyLSAqIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMzE1OC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjMxNTk6c3RhdGljIGludCBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTMxNjAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYz03MzkwPXN0YXRpYyBpbnQgc3RtbWFjX2h3X2luaXQoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy03NDA0LVxcdC8qIEdldCB0aGUgSFcgY2FwYWJpbGl0eSAobmV3IEdNQUMgbmV3ZXIgdGhhbiAzLjUwYSkgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjc0MDU6XFx0cHJpdi1cXHUwMDNlaHdfY2FwX3N1cHBvcnQgPSBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzKHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtNzQwNi1cXHRpZiAocHJpdi1cXHUwMDNlaHdfY2FwX3N1cHBvcnQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTQ6MjEuNDUwMjE0OTE0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyODc0NDIxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBzdG1tYWNfZ2V0X2h3X2ZlYXR1cmVzYCoqXG5cblJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYHN0bW1hY19nZXRfaHdfZmVhdHVyZXNgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGFuZCByZXBvcnRzIHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgb2YgdGhlIFNUTWljcm9lbGVjdHJvbmljcyBNQUMgZHJpdmVyLiBJJ20gYXNzdW1pbmcgaXQncyByZXNwb25zaWJsZSBmb3IgdGhpbmdzIGxpa2UgZmVhdHVyZSBmbGFncyBmb3IgZGlmZmVyZW50IGhhcmR3YXJlIHZhcmlhdGlvbnMsIHBlcmhhcHMgcmVsYXRlZCB0byBqdW1ibyBmcmFtZXMsIGNoZWNrc3VtIG9mZmxvYWQsIG9yIGZsb3cgY29udHJvbCBjYXBhYmlsaXRpZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IGFjY2Vzc2VzIGFuZCBtYW5pcHVsYXRlcywgcGFydGljdWxhcmx5IGFueSBiaXRmaWVsZHMgb3IgZW51bWVyYXRlZCB0eXBlcyB0aGF0IGRlZmluZSB0aGVzZSBmZWF0dXJlcy4gSSBhbnRpY2lwYXRlIGl0J2xsIHByb2JhYmx5IHF1ZXJ5IGhhcmR3YXJlIHJlZ2lzdGVycywgYW5kIEknbGwgbmVlZCB0byBzZWUgaG93IGl0IG1hcHMgdGhvc2UgcmVnaXN0ZXIgdmFsdWVzIHRvIGludGVybmFsIGZsYWdzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gZGV0ZWN0ZWQgc2lsaWNvbiByZXZpc2lvbiwgb3IgcGVyaGFwcyBEVCAoRGV2aWNlIFRyZWUpIGJpbmRpbmdzLCB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB3aGF0IGZlYXR1cmVzIGFyZSByZXBvcnRlZC4gSSB3YW50IHRvIHNlZSBpZiB0aGV5J3JlIHVzaW5nIGEgbG9va3VwIHRhYmxlLCBhIHNlcmllcyBvZiBpZi1lbHNlIHN0YXRlbWVudHMsIG9yIGEgbW9yZSBlbGVnYW50IG1ldGhvZC4gVGhlIGVmZmljaWVuY3kgb2YgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQsIGVzcGVjaWFsbHkgaWYgaXQncyBjYWxsZWQgZnJlcXVlbnRseSBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIG9yIGhvdHBsdWcgZXZlbnRzLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSBpZiBpdCdzIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgdG8gYW55IHJhY2UgY29uZGl0aW9ucywgaWYgaXQgaXMgbXVsdGktdGhyZWFkZWQuIEZpbmFsbHksIEnigJlsbCBrZWVwIGEgY2xvc2UgZXllIG91dCBmb3IgYW55IGNvbW1lbnRzIG9yIGRvY3VtZW50YXRpb24gdGhhdCBzaGVkIGxpZ2h0IG9uIHdoeSBjZXJ0YWluIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZCBvciBhYnNlbnQgaW4gc3BlY2lmaWMgaGFyZHdhcmUgcmV2aXNpb25zLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyOTE3LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTQ6MjcuNzM3NjU5NDg4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzkzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTU5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzMTU5OlxcdHN0YXRpYyBpbnQgc3RtbWFjX2dldF9od19mZWF0dXJlcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpXFxuMzE2MDpcXHR7XFxuMzE2MTpcXHRcXHRyZXR1cm4gc3RtbWFjX2dldF9od19mZWF0dXJlKHByaXYsIHByaXYtXFx1MDAzZWlvYWRkciwgXFx1MDAyNnByaXYtXFx1MDAzZWRtYV9jYXApID09IDA7XFxuMzE2MjpcXHR9XFxuMzE2MzpcXHRcXG4zMTY0OlxcdC8qKlxcbjMxNjU6XFx0ICogc3RtbWFjX2NoZWNrX2V0aGVyX2FkZHIgLSBjaGVjayBpZiB0aGUgTUFDIGFkZHIgaXMgdmFsaWRcXG4zMTY2OlxcdCAqIEBwcml2OiBkcml2ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4zMTY3OlxcdCAqIERlc2NyaXB0aW9uOlxcbjMxNjg6XFx0ICogaXQgaXMgdG8gdmVyaWZ5IGlmIHRoZSBNQUMgYWRkcmVzcyBpcyB2YWxpZCwgaW4gY2FzZSBvZiBmYWlsdXJlcyBpdFxcbjMxNjk6XFx0ICogZ2VuZXJhdGVzIGEgcmFuZG9tIE1BQyBhZGRyZXNzXFxuMzE3MDpcXHQgKi9cXG4zMTcxOlxcdHN0YXRpYyB2b2lkIHN0bW1hY19jaGVja19ldGhlcl9hZGRyKHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdilcXG4zMTcyOlxcdHtcXG4zMTczOlxcdFxcdHU4IGFkZHJbRVRIX0FMRU5dO1xcbjMxNzQ6XFx0XFxuMzE3NTpcXHRcXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIocHJpdi1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcikpIHtcXG4zMTc2OlxcdFxcdFxcdHN0bW1hY19nZXRfdW1hY19hZGRyKHByaXYsIHByaXYtXFx1MDAzZWh3LCBhZGRyLCAwKTtcXG4zMTc3OlxcdFxcdFxcdGlmIChpc192YWxpZF9ldGhlcl9hZGRyKGFkZHIpKVxcbjMxNzg6XFx0XFx0XFx0XFx0ZXRoX2h3X2FkZHJfc2V0KHByaXYtXFx1MDAzZWRldiwgYWRkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU0OjI3LjczODgwNDg4OFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDAxNDI5MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbGlrZWx5IHNlcXVlbmNlIG9mIGV2ZW50cywga2VlcGluZyBpbiBtaW5kIHRoZSBjb250ZXh0IG9mIHRoZSBTVE1NQUMgZHJpdmVyOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFNUTU1BQyBEcml2ZXIgUHJvYmUgU2VxdWVuY2UqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgbGlrZWx5IHBhdGggb2YgdGhlIFNUTU1BQyBkcml2ZXIgZHVyaW5nIHByb2JlLiBGaXJzdCwgYHN0bW1hY19nZXRfaHdfZmVhdHVyZWAgaXMgY2FsbGVkLCB3aGljaCBtZWFucyBpdCB3aWxsIHJlYWQgc29tZSBoYXJkd2FyZSBmZWF0dXJlcyBkaXJlY3RseSBmcm9tIG1lbW9yeS1tYXBwZWQgSS9PIChNTUlPKSByZWdpc3RlcnMuIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhpcyBmdW5jdGlvbiAqY291bGQqIHJldHVybiB6ZXJvLCBwZXJoYXBzIGluZGljYXRpbmcgYSBmZWF0dXJlIGlzbid0IHN1cHBvcnRlZCBvciBzb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmcgdGhlIHJlYWQuIE5leHQsIGBzdG1tYWNfaHdfaW5pdGAgaXMgY2FsbGVkLCBhbmQgaWYgYWxsIGdvZXMgd2VsbCB3aXRoIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBiYXNlZCBvbiB0aGUgZmVhdHVyZXMgcmVhZCwgdGhpcyB3aWxsIHJldHVybiB6ZXJvLiBJZiBib3RoIG9mIHRoZXNlIHN1Y2NlZWQsIHdlIHRoZW4gbW92ZSBpbnRvIHRoZSBgX19zdG1tYWNfZHZyX3Byb2JlYCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGFuZCB3aGVyZSB0aGUgZGV2aWNlIGlzIGFjdHVhbGx5IG1hZGUgb3BlcmF0aW9uYWwsIGJ1dCBub3QgbmVjZXNzYXJpbHkgd2hlcmUgdGhlIGRldmljZSBpcyBjb21wbGV0ZWx5IHNldCB1cC4gSSBzZWUgdGhhdCB0aGUgZHJpdmVyIHN1Y2Nlc3NmdWxseSByZWdpc3RlcnMgdGhlIG5ldHdvcmsgZGV2aWNlIChgbmV0ZGV2YCkuIEFoYSwgc28gYF9fc3RtbWFjX2R2cl9wcm9iZWAgKmFsc28qIGNhbGxzIGBzdG1tYWNfbWRpb19yZWdpc3RlcmAgd2hpY2ggc3VnZ2VzdHMgaXQgd2lsbCBhdHRlbXB0IHRvIHJlZ2lzdGVyIHdpdGggdGhlIE1ESU8gYnVzLiBTbyBmYXIsIHRoZSBpbml0aWFsaXphdGlvbiBzZWVtcyBvbiB0cmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2NzEsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU0OjMzLjE0MDIzODE1N1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2MTA2OTA0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdG1tYWNfbWRpb19yZWdpc3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWMuaD0zOTc9aW50IHN0bW1hY19tZGlvX3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oOjM5ODppbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hYy5oLTM5OS1pbnQgc3RtbWFjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKm1paSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jPTc3Nzk9c3RhdGljIGludCBfX3N0bW1hY19kdnJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy04MDE5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM6ODAyMDpcXHRyZXQgPSBzdG1tYWNfbWRpb19yZWdpc3RlcihuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTgwMjEtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM9NTY3PXN0YXRpYyB2b2lkIHN0bW1hY19tZGlvX2J1c19jb25maWcoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy01OTAtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYzo1OTE6ICogc3RtbWFjX21kaW9fcmVnaXN0ZXJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTU5Mi0gKiBAbmRldjogbmV0IGRldmljZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtNTk0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6NTk1OmludCBzdG1tYWNfbWRpb19yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTU5Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU0OjM1LjgwMTMxMjQ2WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NjMzMjA0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBzdG1tYWNfbWRpb19yZWdpc3RlcmAgRmFpbHVyZSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzdG1tYWNfbWRpb19yZWdpc3RlcmAgZnVuY3Rpb24uIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBmYWlsdXJlIHNjZW5hcmlvcy4gV2hhdCBhcmUgdGhlIGNvbW1vbiBwaXRmYWxscyBJIG5lZWQgdG8gY29uc2lkZXI/IEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dDpcblxuKiAgICoqUmVzb3VyY2UgQ29uZmxpY3RzOioqIEFyZSB0aGVyZSBhbnkgbXV0ZXhlcywgc3BpbmxvY2tzLCBvciBvdGhlciBjcml0aWNhbCBzZWN0aW9ucyB0aGF0IGNvdWxkIGJlIGNvbnRlbmRlZCwgbGVhZGluZyB0byBhIHJlZ2lzdHJhdGlvbiBmYWlsdXJlIGlmIGFub3RoZXIgZGV2aWNlIG9yIGRyaXZlciBoYXMgYWxyZWFkeSBncmFiYmVkIHRoZSByZXF1aXJlZCByZXNvdXJjZXM/IEknbGwgbmVlZCB0byByZXZpZXcgdGhlIGxvY2tpbmcgc2VtYW50aWNzIGNhcmVmdWxseS5cbiogICAqKkhhcmR3YXJlIEluaXRpYWxpemF0aW9uIElzc3VlczoqKiBEb2VzIHRoaXMgcmVnaXN0cmF0aW9uIGRlcGVuZCBvbiB0aGUgUEhZIG9yIE1BQyBoYXJkd2FyZSBiZWluZyBpbml0aWFsaXplZCBpbiBhIHNwZWNpZmljIHN0YXRlPyBQZXJoYXBzIHNvbWUgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgbmVlZCB0byBiZSBwcm9ncmFtbWVkIGJlZm9yZWhhbmQsIGFuZCBpZiB0aGF0IHByb2Nlc3MgaXMgaW50ZXJydXB0ZWQgb3IgZmFpbHMsIGBzdG1tYWNfbWRpb19yZWdpc3RlcmAgd291bGQgcmlnaHRseSBiYWlsIG91dC4gSSBzaG91bGQgdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLlxuKiAgICoqTURJTyBCdXMgQXZhaWxhYmlsaXR5OioqIFRoaXMgZnVuY3Rpb24gaXMgcmVnaXN0ZXJpbmcgd2l0aCBhbiBNRElPIGJ1cy4gSXMgdGhhdCBidXMgZ3VhcmFudGVlZCB0byBiZSBhdmFpbGFibGUgYW5kIG9wZXJhdGlvbmFsIGF0IHRoaXMgcG9pbnQgaW4gdGhlIGRyaXZlcidzIGV4ZWN1dGlvbj8gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgb24gdGhlIGJ1cyBiZWluZyBwcm9iZWQgb3IgY29uZmlndXJlZD8gSSB3aWxsIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBpdCdzIHBvc3NpYmxlIHRvIGZhaWwgYmVjYXVzZSBvZiBhbiB1bmluaXRpYWxpemVkIG9yIGJyb2tlbiBNRElPIGJ1cy5cbiogICAqKkRyaXZlciBWZXJzaW9uL0NvbXBhdGliaWxpdHk6KiogRG9lcyB0aGlzIGZ1bmN0aW9uJ3MgYmVoYXZpb3IgY2hhbmdlIGJhc2VkIG9uIHRoZSBrZXJuZWwgdmVyc2lvbiBvciBzcGVjaWZpYyBoYXJkd2FyZSByZXZpc2lvbj8gQ291bGQgdGhlcmUgYmUga25vd24gaXNzdWVzIG9yIHdvcmthcm91bmRzIHJlcXVpcmVkIGZvciBjZXJ0YWluIGNoaXBzZXRzPyBJJ2xsIGNoZWNrIGFueSByZWxhdGVkIGVycmF0YSBvciBkb2N1bWVudGF0aW9uLlxuKiAgICoqRXJyb3IgUmV0dXJuIENvZGVzOioqIEkgbmVlZCB0byB0aG9yb3VnaGx5IHVuZGVyc3RhbmQgd2hhdCB0aGUgcG9zc2libGUgZXJyb3IgcmV0dXJuIGNvZGVzIHNpZ25pZnkuIElzIGl0IGEgZ2VuZXJpYyBlcnJvciwgb3IgYSBzcGVjaWZpYyBwcm9ibGVtIChlLmcuLCByZXNvdXJjZSBhbGxvY2F0aW9uIGZhaWx1cmUsIGludmFsaWQgcGFyYW1ldGVyLCBoYXJkd2FyZSBlcnJvcik/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZXR1cm4gdmFsdWVzIG9mIGFueXRoaW5nIGNhbGxlZCB3aXRoaW4gdGhpcyBmdW5jdGlvbiwgdG9vLiBJJ2xsIG5lZWQgdG8gZ28gYmV5b25kIGEgY3Vyc29yeSBsb29rIGF0IHRoZSBtYW4gcGFnZSB0byBwcm9wZXJseSB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIHByb2JsZW0uXG4qICAgKipDb25jdXJyZW5jeS9JbnRlcnJ1cHQgQ29udGV4dDoqKiBJcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCBjb250ZXh0LCBvciBmcm9tIGEgdGFza2xldD8gSWYgdGhlcmUgYXJlIGFueSBzaGFyZWQgcmVzb3VyY2VzLCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgaXMgcmUtZW50cmFudCBhbmQgdGhyZWFkLXNhZmUuXG5cblVsdGltYXRlbHksIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgd2FsayB0aHJvdWdoIHRoZSBjb2RlLCBmb2N1c2luZyBvbiB0aGVzZSBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMsIHRvIGRldGVybWluZSB0aGUgcm9vdCBjYXVzZSBvZiBhbnkgcHJvYmxlbXMuIEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCB0aGUga2VybmVsIGxvZ3MgYW5kIHRoZW4gbW92ZSB0byBhIGRlYnVnZ2VyIGlmIHRoZSBpc3N1ZSBpcyBub24tb2J2aW91cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ2MTEsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NDo0Mi42NjQ2MzUwMTFaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1OTU6XFx0aW50IHN0bW1hY19tZGlvX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiA1OTY6XFx0e1xcbiA1OTc6XFx0XFx0aW50IGVyciA9IDA7XFxuIDU5ODpcXHRcXHRzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1cztcXG4gNTk5OlxcdFxcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiA2MDA6XFx0XFx0c3RydWN0IHN0bW1hY19tZGlvX2J1c19kYXRhICptZGlvX2J1c19kYXRhID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlbWRpb19idXNfZGF0YTtcXG4gNjAxOlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWRpb19ub2RlID0gcHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlbWRpb19ub2RlO1xcbiA2MDI6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gbmRldi1cXHUwMDNlZGV2LnBhcmVudDtcXG4gNjAzOlxcdFxcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpmaXhlZF9ub2RlO1xcbiA2MDQ6XFx0XFx0aW50IG1heF9hZGRyID0gUEhZX01BWF9BRERSIC0gMTtcXG4gNjA1OlxcdFxcdHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGU7XFxuIDYwNjpcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbiA2MDc6XFx0XFxuIDYwODpcXHRcXHRpZiAoIW1kaW9fYnVzX2RhdGEpXFxuIDYwOTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjEwOlxcdFxcbiA2MTE6XFx0XFx0c3RtbWFjX21kaW9fYnVzX2NvbmZpZyhwcml2KTtcXG4gNjEyOlxcdFxcbiA2MTM6XFx0XFx0bmV3X2J1cyA9IG1kaW9idXNfYWxsb2MoKTtcXG4gNjE0OlxcdFxcdGlmICghbmV3X2J1cylcXG4gNjE1OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA2MTY6XFx0XFxuIDYxNzpcXHRcXHRpZiAobWRpb19idXNfZGF0YS1cXHUwMDNlaXJxcylcXG4gNjE4OlxcdFxcdFxcdG1lbWNweShuZXdfYnVzLVxcdTAwM2VpcnEsIG1kaW9fYnVzX2RhdGEtXFx1MDAzZWlycXMsIHNpemVvZihuZXdfYnVzLVxcdTAwM2VpcnEpKTtcXG4gNjE5OlxcdFxcbiA2MjA6XFx0XFx0bmV3X2J1cy1cXHUwMDNlbmFtZSA9IFxcXCJzdG1tYWNcXFwiO1xcbiA2MjE6XFx0XFxuIDYyMjpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfWEdNQUMpIHtcXG4gNjIzOlxcdFxcdFxcdG5ld19idXMtXFx1MDAzZXJlYWQgPSBcXHUwMDI2c3RtbWFjX3hnbWFjMl9tZGlvX3JlYWRfYzIyO1xcbiA2MjQ6XFx0XFx0XFx0bmV3X2J1cy1cXHUwMDNld3JpdGUgPSBcXHUwMDI2c3RtbWFjX3hnbWFjMl9tZGlvX3dyaXRlX2MyMjtcXG4gNjI1OlxcdFxcdFxcdG5ld19idXMtXFx1MDAzZXJlYWRfYzQ1ID0gXFx1MDAyNnN0bW1hY194Z21hYzJfbWRpb19yZWFkX2M0NTtcXG4gNjI2OlxcdFxcdFxcdG5ld19idXMtXFx1MDAzZXdyaXRlX2M0NSA9IFxcdTAwMjZzdG1tYWNfeGdtYWMyX21kaW9fd3JpdGVfYzQ1O1xcbiA2Mjc6XFx0XFxuIDYyODpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlc3lub3BzeXNfaWQgXFx1MDAzYyBEV1hHTUFDX0NPUkVfMl8yMCkge1xcbiA2Mjk6XFx0XFx0XFx0XFx0LyogUmlnaHQgbm93IG9ubHkgQzIyIHBoeXMgYXJlIHN1cHBvcnRlZCAqL1xcbiA2MzA6XFx0XFx0XFx0XFx0bWF4X2FkZHIgPSBNSUlfWEdNQUNfTUFYX0MyMkFERFI7XFxuIDYzMTpcXHRcXG4gNjMyOlxcdFxcdFxcdFxcdC8qIENoZWNrIGlmIERUIHNwZWNpZmllZCBhbiB1bnN1cHBvcnRlZCBwaHkgYWRkciAqL1xcbiA2MzM6XFx0XFx0XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBoeV9hZGRyIFxcdTAwM2UgTUlJX1hHTUFDX01BWF9DMjJBRERSKVxcbiA2MzQ6XFx0XFx0XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJVbnN1cHBvcnRlZCBwaHlfYWRkciAobWF4PSVkKVxcXFxuXFxcIixcXG4gNjM1OlxcdFxcdFxcdFxcdFxcdFxcdE1JSV9YR01BQ19NQVhfQzIyQUREUik7XFxuIDYzNjpcXHRcXHRcXHR9XFxuIDYzNzpcXHRcXHR9IGVsc2Uge1xcbiA2Mzg6XFx0XFx0XFx0bmV3X2J1cy1cXHUwMDNlcmVhZCA9IFxcdTAwMjZzdG1tYWNfbWRpb19yZWFkX2MyMjtcXG4gNjM5OlxcdFxcdFxcdG5ld19idXMtXFx1MDAzZXdyaXRlID0gXFx1MDAyNnN0bW1hY19tZGlvX3dyaXRlX2MyMjtcXG4gNjQwOlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VwbGF0LVxcdTAwM2Vjb3JlX3R5cGUgPT0gRFdNQUNfQ09SRV9HTUFDNCkge1xcbiA2NDE6XFx0XFx0XFx0XFx0bmV3X2J1cy1cXHUwMDNlcmVhZF9jNDUgPSBcXHUwMDI2c3RtbWFjX21kaW9fcmVhZF9jNDU7XFxuIDY0MjpcXHRcXHRcXHRcXHRuZXdfYnVzLVxcdTAwM2V3cml0ZV9jNDUgPSBcXHUwMDI2c3RtbWFjX21kaW9fd3JpdGVfYzQ1O1xcbiA2NDM6XFx0XFx0XFx0fVxcbiA2NDQ6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NDo0Mi42NjQ3Mjk5MzFaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY4MzgwMDc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgbG9naWMsIGFzIGlmIGl0IHdlcmUgbXkgb3duIHRob3VnaHQgcHJvY2VzcywgYWltZWQgYXQgYW4gZXhwZXJ0IGF1ZGllbmNlIGxpa2UgbXlzZWxmOlxuXG4qKk1ESU8gRGF0YSBQb2ludGVyIFNhbml0eSBDaGVjayoqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIHNlZSBoZXJlIGlzIGEgdmVyeSBiYXNpYywgYnV0IGNyaXRpY2FsLCBlcnJvciBjaGVjay4gSXQncyBleHBsaWNpdGx5IGRlc2lnbmVkIHRvIGhhbmRsZSBhIHNpdHVhdGlvbiB3aGVyZSBgbWRpb19idXNfZGF0YWAgaXMgYSBudWxsIHBvaW50ZXIuIElmIHRoYXQgaGFwcGVucywgdGhlbiB3ZSdyZSByZXR1cm5pbmcgMCBpbW1lZGlhdGVseS4gVGhpcyBpcyBzdGFuZGFyZCBkZWZlbnNpdmUgcHJvZ3JhbW1pbmc7IGEgTlVMTCBwb2ludGVyIGluZGljYXRlcyBzb21ldGhpbmcgZnVuZGFtZW50YWxseSB3cm9uZyB3aXRoIHRoZSBzZXR1cCwgcHJvYmFibHkgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBvciBhIGZhaWx1cmUgaW4gYWxsb2NhdGlvbiBzb21ld2hlcmUgdXBzdHJlYW0uIFdlIG5lZWQgdG8gaGFuZGxlIHRoaXMgZ3JhY2VmdWxseSB0byBhdm9pZCBjcmFzaGVzIG9yIHVuZGVmaW5lZCBiZWhhdmlvci5cblxuTm93LCB3aGVyZSBkb2VzIHRoaXMgYG1kaW9fYnVzX2RhdGFgIGFjdHVhbGx5ICpjb21lKiBmcm9tPyBUaGF0J3Mgd2hhdCB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIHRleHQgYWRkcmVzc2VzLiBTcGVjaWZpY2FsbHkgZm9yIFBDSSBkZXZpY2VzLCB3ZSdyZSB0YWxraW5nIGFib3V0IGFuIGltcG9ydGFudCBkZXRhaWwgcmVnYXJkaW5nIGluaXRpYWxpemF0aW9uLiBJdCdzIGFsbG9jYXRlZCBlaXRoZXIgZHVyaW5nIHRoZSBgc3RtbWFjX3BjaV9wcm9iZWAgcGhhc2Ugb3Igc29tZSByZWxhdGVkIHNldHVwIGZ1bmN0aW9uLiBUaGF0IGNvbmZpcm1zIG15IHN1c3BpY2lvbiB0aGF0IGl0J3Mgc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBQQ0kgaW50ZXJmYWNlIGFuZCBhIG5lY2Vzc2FyeSByZXNvdXJjZS4gS25vd2luZyB0aGlzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYWxsb2NhdGlvbiBwb2ludHMgYXJlIGZ1bmN0aW9uaW5nIGNvcnJlY3RseS4gSWYgYG1kaW9fYnVzX2RhdGFgIGlzIE5VTEwsIHRoZW4gaXQgY291bGQgYmUgYSBmYWlsdXJlIHdpdGggbWVtb3J5IG9yIGEgbG9naWMgZXJyb3IgcmVsYXRlZCB0byB0aGUgcHJvYmluZyBhbmQgc2V0dXAgcHJvY2Vzcy4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aG9zZSBzcGVjaWZpYyBhcmVhcyB3aGVuIGRlYnVnZ2luZyBvciByZXZpZXdpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MTY3LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NDo0OC4zNDg1MzMxNVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzMzU1NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9fYnVzX2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYz0yMz1zdGF0aWMgdm9pZCBjb21tb25fZGVmYXVsdF9kYXRhKHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0yOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MzA6XFx0cGxhdC1cXHUwMDNlbWRpb19idXNfZGF0YS1cXHUwMDNlbmVlZHNfcmVzZXQgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0zMS19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MTE4PXN0YXRpYyBpbnQgc3RtbWFjX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEzMTpcXHRwbGF0LVxcdTAwM2VtZGlvX2J1c19kYXRhID0gZGV2bV9remFsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEzMjpcXHRcXHRcXHRcXHRcXHQgICBzaXplb2YoKnBsYXQtXFx1MDAzZW1kaW9fYnVzX2RhdGEpLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYy0xMzMtXFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jOjEzNDpcXHRpZiAoIXBsYXQtXFx1MDAzZW1kaW9fYnVzX2RhdGEpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jLTEzNS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTQ6NDguNTcxODkzMjYzWiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzI2Njg4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQ2hlY2tpbmcgTURJTyBCdXMgRGF0YSBhbmQgUmVnaXN0ZXIgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBJJ3ZlIGFscmVhZHkgY29uZmlybWVkIHRoYXQgYG1kaW9fYnVzX2RhdGFgIGlzLCBpbiBmYWN0LCBub3QgYSBudWxsIHBvaW50ZXIuIFRoYXQncyBnb29kOyBhIGJhc2ljIHNhbml0eSBjaGVjayBwYXNzZWQuIE5vdywgdGhlIG5leHQgY3J1Y2lhbCBzdGVwIGlzIHRvIHNlZSBob3cgYHN0bW1hY19tZGlvX3JlZ2lzdGVyYCBwZXJmb3Jtcy4gSSBuZWVkIHRvIGNsb3NlbHkgZXhhbWluZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoYXQgZnVuY3Rpb24uIE15IHByaW1hcnkgY29uY2VybiBoZXJlIGlzIHBvdGVudGlhbCBmYWlsdXJlLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZSByZWdpc3RlciBvcGVyYXRpb24gc3VjY2VlZHMgYW5kIGlmIHNvLCB3aGF0IGVycm9ycyBtYXkgaGF2ZSBvY2N1cnJlZCBhbmQgdGhlIHN1YnNlcXVlbnQgc3RlcHMsIHRvIGVuc3VyZSBhIHNvbGlkIE1ESU8gY29uZmlndXJhdGlvbiBmb3IgdGhlIFNUTU1BQyBkcml2ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2OTk2LCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTQ6NTMuMTA0NTY0Mzk3WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY0NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY0NTpcXHRcXG4gNjQ2OlxcdFxcdGlmIChtZGlvX2J1c19kYXRhLVxcdTAwM2VuZWVkc19yZXNldClcXG4gNjQ3OlxcdFxcdFxcdG5ld19idXMtXFx1MDAzZXJlc2V0ID0gXFx1MDAyNnN0bW1hY19tZGlvX3Jlc2V0O1xcbiA2NDg6XFx0XFxuIDY0OTpcXHRcXHRzbnByaW50ZihuZXdfYnVzLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwiJXMtJXhcXFwiLFxcbiA2NTA6XFx0XFx0XFx0IG5ld19idXMtXFx1MDAzZW5hbWUsIHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWJ1c19pZCk7XFxuIDY1MTpcXHRcXHRuZXdfYnVzLVxcdTAwM2Vwcml2ID0gbmRldjtcXG4gNjUyOlxcdFxcdG5ld19idXMtXFx1MDAzZXBoeV9tYXNrID0gbWRpb19idXNfZGF0YS1cXHUwMDNlcGh5X21hc2sgfCBtZGlvX2J1c19kYXRhLVxcdTAwM2VwY3NfbWFzaztcXG4gNjUzOlxcdFxcdG5ld19idXMtXFx1MDAzZXBhcmVudCA9IHByaXYtXFx1MDAzZWRldmljZTtcXG4gNjU0OlxcdFxcbiA2NTU6XFx0XFx0ZXJyID0gb2ZfbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzLCBtZGlvX25vZGUpO1xcbiA2NTY6XFx0XFx0aWYgKGVyciA9PSAtRU5PREVWKSB7XFxuIDY1NzpcXHRcXHRcXHRlcnIgPSAwO1xcbiA2NTg6XFx0XFx0XFx0ZGV2X2luZm8oZGV2LCBcXFwiTURJTyBidXMgaXMgZGlzYWJsZWRcXFxcblxcXCIpO1xcbiA2NTk6XFx0XFx0XFx0Z290byBidXNfcmVnaXN0ZXJfZmFpbDtcXG4gNjYwOlxcdFxcdH0gZWxzZSBpZiAoZXJyKSB7XFxuIDY2MTpcXHRcXHRcXHRkZXZfZXJyX3Byb2JlKGRldiwgZXJyLCBcXFwiQ2Fubm90IHJlZ2lzdGVyIHRoZSBNRElPIGJ1c1xcXFxuXFxcIik7XFxuIDY2MjpcXHRcXHRcXHRnb3RvIGJ1c19yZWdpc3Rlcl9mYWlsO1xcbiA2NjM6XFx0XFx0fVxcbiA2NjQ6XFx0XFxuIDY2NTpcXHRcXHQvKiBMb29rcyBsaWtlIHdlIG5lZWQgYSBkdW1teSByZWFkIGZvciBYR01BQyBvbmx5IGFuZCBDNDUgUEhZcyAqL1xcbiA2NjY6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZWNvcmVfdHlwZSA9PSBEV01BQ19DT1JFX1hHTUFDKVxcbiA2Njc6XFx0XFx0XFx0c3RtbWFjX3hnbWFjMl9tZGlvX3JlYWRfYzQ1KG5ld19idXMsIDAsIDAsIDApO1xcbiA2Njg6XFx0XFxuIDY2OTpcXHRcXHQvKiBJZiBmaXhlZC1saW5rIGlzIHNldCwgc2tpcCBQSFkgc2Nhbm5pbmcgKi9cXG4gNjcwOlxcdFxcdGZ3bm9kZSA9IGRldl9md25vZGUocHJpdi1cXHUwMDNlZGV2aWNlKTtcXG4gNjcxOlxcdFxcdGlmIChmd25vZGUpIHtcXG4gNjcyOlxcdFxcdFxcdGZpeGVkX25vZGUgPSBmd25vZGVfZ2V0X25hbWVkX2NoaWxkX25vZGUoZndub2RlLCBcXFwiZml4ZWQtbGlua1xcXCIpO1xcbiA2NzM6XFx0XFx0XFx0aWYgKGZpeGVkX25vZGUpIHtcXG4gNjc0OlxcdFxcdFxcdFxcdGZ3bm9kZV9oYW5kbGVfcHV0KGZpeGVkX25vZGUpO1xcbiA2NzU6XFx0XFx0XFx0XFx0Z290byBidXNfcmVnaXN0ZXJfZG9uZTtcXG4gNjc2OlxcdFxcdFxcdH1cXG4gNjc3OlxcdFxcdH1cXG4gNjc4OlxcdFxcbiA2Nzk6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBsYXQtXFx1MDAzZXBoeV9ub2RlIHx8IG1kaW9fbm9kZSlcXG4gNjgwOlxcdFxcdFxcdGdvdG8gYnVzX3JlZ2lzdGVyX2RvbmU7XFxuIDY4MTpcXHRcXG4gNjgyOlxcdFxcdHBoeWRldiA9IHBoeV9maW5kX2ZpcnN0KG5ld19idXMpO1xcbiA2ODM6XFx0XFx0aWYgKCFwaHlkZXYgfHwgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIgXFx1MDAzZSBtYXhfYWRkcikge1xcbiA2ODQ6XFx0XFx0XFx0ZGV2X3dhcm4oZGV2LCBcXFwiTm8gUEhZIGZvdW5kXFxcXG5cXFwiKTtcXG4gNjg1OlxcdFxcdFxcdGVyciA9IC1FTk9ERVY7XFxuIDY4NjpcXHRcXHRcXHRnb3RvIG5vX3BoeV9mb3VuZDtcXG4gNjg3OlxcdFxcdH1cXG4gNjg4OlxcdFxcbiA2ODk6XFx0XFx0LypcXG4gNjkwOlxcdFxcdCAqIElmIGFuIElSUSB3YXMgcHJvdmlkZWQgdG8gYmUgYXNzaWduZWQgYWZ0ZXJcXG4gNjkxOlxcdFxcdCAqIHRoZSBidXMgcHJvYmUsIGRvIGl0IGhlcmUuXFxuIDY5MjpcXHRcXHQgKi9cXG4gNjkzOlxcdFxcdGlmICghbWRpb19idXNfZGF0YS1cXHUwMDNlaXJxcyBcXHUwMDI2XFx1MDAyNiBtZGlvX2J1c19kYXRhLVxcdTAwM2Vwcm9iZWRfcGh5X2lycSBcXHUwMDNlIDApIHtcXG4gNjk0OlxcdFxcdFxcdG5ld19idXMtXFx1MDAzZWlycVtwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcl0gPSBtZGlvX2J1c19kYXRhLVxcdTAwM2Vwcm9iZWRfcGh5X2lycTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTQ6NTMuMTA0NzA5Mzg3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNTQxMTI2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFNUTU1BQyBEcml2ZXIgUHJvYmUgRmFpbHVyZSoqXG5cbk9rYXksIHNvIGhlcmUncyB3aGF0J3MgaGFwcGVuaW5nLiBJZiBgb2ZfbWRpb2J1c19yZWdpc3RlcmAg4oCTIG9yIGl0cyBmYWxsYmFjaywgYG1kaW9idXNfcmVnaXN0ZXJgIOKAkyBzdWNjZXNzZnVsbHkgY29tcGxldGVzLCB0aGUgY29kZSB0aGVuIHRyaWVzIHRvIGxvY2F0ZSBQSFlzLiBTaW5jZSBJJ20gd29ya2luZyBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgd2l0aG91dCBhY3R1YWwgaGFyZHdhcmUsIEkga25vdyB0aGF0IGBzdG1tYWNfbWRpb19yZWFkX2MyMmAgaXMgZ29pbmcgdG8gcmV0dXJuIGAweGZmZmZgIGZyb20gdGhlIHNpbXVsYXRlZCBNTUlPIHNwYWNlLiBOYXR1cmFsbHksIHRoaXMgbWVhbnMgYHBoeV9maW5kX2ZpcnN0YCB3aWxsIHJldHVybiBOVUxMLCBiZWNhdXNlIGl0IHdvbid0IGZpbmQgYW55IHJlYWwgUEhZcy4gVGhlIGRyaXZlciB0aGVuIGhlbHBmdWxseSBsb2dzIFwiTm8gUEhZIGZvdW5kXCIgYW5kIHJldHVybnMgYC1FTk9ERVZgLiBBbmQgdGhhdCdzIHdoZXJlIHRoaW5ncyBmYWxsIGFwYXJ0IOKAkyBgX19zdG1tYWNfZHZyX3Byb2JlYCBmYWlscyFcblxuV2FpdCBhIG1pbnV0ZSwgaWYgYF9fc3RtbWFjX2R2cl9wcm9iZWAgZmFpbHMsIHRoZSBuZXR3b3JrIGRldmljZSBpc24ndCByZWdpc3RlcmVkLCBhbmQgSSdtIGJsb2NrZWQgZnJvbSBvcGVuaW5nIGl0LiBUaGF0J3MgYSBwcm9ibGVtLiBJcyB0aGVyZSBhIHdheSBhcm91bmQgdGhpcz8gTGV0IG1lIHNlZS4gSSBrbm93IHRoYXQgaWYgYHByaXYtXHUwMDNlcGxhdC1cdTAwM2VwaHlfbm9kZWAgb3IgYG1kaW9fbm9kZWAgYXJlIHNldCwgaXQgcHJvY2VlZHMgdG8gYGJ1c19yZWdpc3Rlcl9kb25lYC4gRm9yIFBDSSBkZXZpY2VzLCBob3dldmVyLCBgbWRpb19ub2RlYCBpcyBOVUxMLiBQQ0kgZGV2aWNlcyB0eXBpY2FsbHkgZG9uJ3QgdXNlIGRldmljZSB0cmVlIG5vZGVzLCBzbyB0aGF0J3Mgbm90IGhlbHBpbmcgbWUuIEhvbGQgb24sIGRvZXMgYHN0bW1hY19wY2lfcHJvYmVgIHNldCBgcGxhdC1cdTAwM2VwaHlfbm9kZWA/IE5vLCB0aGF0IGRvZXNuJ3Qgc2VlbSByaWdodC4gUENJIGRldmljZXMgdXN1YWxseSBkb24ndCBoYXZlIGRldmljZSB0cmVlIG5vZGVzIGFzc29jaWF0ZWQgd2l0aCB0aGVtLiBMZXQgbWUgZG91YmxlIGNoZWNrIGBzdG1tYWNfcGNpLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODEyMiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU0OjU5LjQ1ODgyNTA5NloiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIwNjIzNzI2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlfbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU0OjU5Ljc3OTQ1Nzc4MloiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mjg0MTA0ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgRHJpdmVyIENvZGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIGlzc3VlLCBzbyBsZXQncyBzdGFydCB3aXRoIHRoZSBsb3ctaGFuZ2luZyBmcnVpdCBhbmQgdHJhY2UgdGhlIGZsb3cuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYGR3bWFjLWludGVsLmNgIGZpbGUuIFRoaXMgaXMgdGhlIGRyaXZlciBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIERXTUFDIChEZXNpZ25XYXJlIE1BQykgY29udHJvbGxlciBvbiBJbnRlbCBwbGF0Zm9ybXMsIHNvIGl0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gaW52ZXN0aWdhdGluZyBhbnkgTUFDLWxheWVyIHBlcmZvcm1hbmNlIGlzc3VlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHByb2JsZW1zKSBsaWtlbHkgcmVzaWRlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg3ODYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NTowNS4wNjM1NjUzN1oiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMxMDI3NDMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9ub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLWludGVsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU1OjA1LjE1NjY4NzE0M1oiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTkyODgwNjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGR3bWFjLWxvb25nc29uLmNgKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gaXQuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlIGBkd21hYy1sb29uZ3Nvbi5jYCBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIExvb25nc29uIGFyY2hpdGVjdHVyZSdzIGludGVyYWN0aW9uIHdpdGggdGhlIERXTUFDIGRyaXZlciBzcGVjaWZpY2FsbHkuIFdoYXQga2luZCBvZiBjdXN0b21pemF0aW9ucywgaWYgYW55LCBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgZm9yIHRoaXMgcGxhdGZvcm0/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYW55IHVuaXF1ZSBjbG9ja2luZyBzY2hlbWVzLCBpbnRlcnJ1cHQgaGFuZGxpbmcgbnVhbmNlcywgb3IgbWVtb3J5IG1hcHBpbmcgcXVpcmtzIHNwZWNpZmljIHRvIHRoZSBMb29uZ3NvbiBTb0NzPyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IHNlY3Rpb25zIHRvIGZvY3VzIG9uIC0gcGVyaGFwcyB0aGUgZGV2aWNlIHRyZWUgYmluZGluZ3MsIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBhbmQgYW55IHBsYXRmb3JtLXNwZWNpZmljIERNQSBjb25maWd1cmF0aW9ucy4gSSdtIGFsc28gZ29pbmcgdG8gbG9vayBmb3IgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgc2lnbmFsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRoZSBMb29uZ3NvbiB2ZXJzaW9uIG9yIHNwZWNpZmljIGZlYXR1cmVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgZ2V0IGEgaGFuZGxlIG9uIHRoZSBzcGVjaWZpY3MuIExldCdzIHNlZSB3aGF0IGdlbXMgYXJlIGhpZGRlbiBpbiB0aGlzIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDAyLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTU6MTAuMzQ5NTcwODU4WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjAxNDc0NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbG9vbmdzb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTU6MTAuNDM1NjA1NjcyWiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3ODQ0Njg3MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHN0YXJ0ZWQgb24gdGhpcywgYW5kIHRoZSBmaXJzdCBwbGFjZSBteSBicmFpbiBpcyBqdW1waW5nIHRvIGlzIGBkd21hYy1tb3RvcmNvbW0uY2AuIFRoYXQncyB3aGVyZSBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgZHJpdmVyIGNvZGUsIHBhcnRpY3VsYXJseSB0aGUgcGFydHMgcmVsYXRlZCB0byB0aGUgTW90b3JDb21tLXNwZWNpZmljIGZlYXR1cmVzLCBhc3N1bWluZyBpdCdzIGNvcnJlY3RseSBuYW1lZC4gSSdtIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMsIGludGVycnVwdCBoYW5kbGVycywgYW5kIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gd29yayB0aHJvdWdoIHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgcGlucG9pbnQgd2hlcmUgdGhlIHBvdGVudGlhbCBpc3N1ZSBsaWVzLCBvciBhdCBsZWFzdCBnYWluIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgb3BlcmF0aW9uYWwgbG9naWMuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIGFueSBpbiBkZXB0aCBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyODIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NToxNS4yMjAwNzcxMjdaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTcwNDExOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtbW90b3Jjb21tLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU1OjE1LjM2OTc5MDc0NloiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDA0MzY4Njc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgaW4gUEhZIElEIERldGVjdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBhbmQgaXQncyBnb3QgbWUgdGhpbmtpbmcuIElmIGBwaHlfZmluZF9maXJzdGAgZmFpbHMsIGl0IHJldHVybnMgYC1FTk9ERVZgLCB3aGljaCBpcyBzdGFuZGFyZC4gQnV0IHRoZW4gaXQgaGl0IG1lOiB3aGF0IGlmIGBzdG1tYWNfbWRpb19yZWFkX2MyMmAg4oCTIHRoYXQncyB0aGUgZnVuY3Rpb24gcmVhZGluZyB0aGUgUEhZIElEIOKAkyByZXR1cm5zIHNvbWV0aGluZyB0aGF0ICpsb29rcyogbGlrZSBhIHZhbGlkIFBIWSBJRCwgZXZlbiBpZiBpdCdzIG5vdD8gV2Uga25vdyB0aGF0IFN5emthbGxlcidzIFBDSSBmdXp6ZXIgY2FuIGludGVyY2VwdCB0aG9zZSBNTUlPIHJlYWRzIGFuZCBwcm92aWRlIHJhbmRvbSB2YWx1ZXMuIElmIHRob3NlIHJhbmRvbSB2YWx1ZXMgaGFwcGVuIHRvIHRyaWNrIGBwaHlfZmluZF9maXJzdGAgaW50byB0aGlua2luZyB0aGVyZSdzIGEgdmFsaWQgUEhZLCB3ZSd2ZSBnb3QgYSBwcm9ibGVtLiBBbmQgdGhlIHJlYXNvbiB0aGlzIGlzIGEgYmlnIGRlYWwgaXMgYmVjYXVzZSBgc3RtbWFjX21kaW9fcmVhZF9jMjJgIHJlbGllcyBvbiByZWFkaW5nIHRoZSBHTUlJX0RBVEEgcmVnaXN0ZXIsIHNvIG1heWJlIHRoYXQgcmVnaXN0ZXIgaXMgdGhlIGN1bHByaXQuIE5vdywgSSBzaG91bGQgZGl2ZSBpbnRvIGBzdG1tYWNfbWRpb19yZWFkX2MyMmAgdG8gc2VlIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTUwOCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NToyMy4zNzQxNjE0MjNaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Mjc1MTc4MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX21kaW9fcmVhZF9jMjJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYz0yODM9c3RhdGljIGludCBzdG1tYWNfbWRpb193cml0ZShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBwYSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmMtMjg5LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6MjkwOiAqIHN0bW1hY19tZGlvX3JlYWRfYzIyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy0yOTEtICogQGJ1czogcG9pbnRzIHRvIHRoZSBtaWlfYnVzIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy0yOTgtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYzoyOTk6c3RhdGljIGludCBzdG1tYWNfbWRpb19yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5YWRkciwgaW50IHBoeXJlZylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTMwMC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jPTU5NT1pbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWRpby5jLTYzNy1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tZGlvLmM6NjM4OlxcdFxcdG5ld19idXMtXFx1MDAzZXJlYWQgPSBcXHUwMDI2c3RtbWFjX21kaW9fcmVhZF9jMjI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uYy02MzktXFx0XFx0bmV3X2J1cy1cXHUwMDNld3JpdGUgPSBcXHUwMDI2c3RtbWFjX21kaW9fd3JpdGVfYzIyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NToyNi4wMDE2ODU5MThaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg2NTc0NTM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSB3ZSBnby4uLlxuXG4qKkFuYWx5emluZyB0aGUgYHN0bW1hY19tZGlvX3JlYWRfYzIyYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBzdG1tYWNfbWRpb19yZWFkX2MyMmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBzdG1tYWMgZHJpdmVyLiBDbGVhcmx5LCBpdCdzIGludm9sdmVkIGluIE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSAoTUlJKSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgdGhlIENsYXVzZSAyMiBNSUkgaW50ZXJmYWNlLiBHaXZlbiB0aGUgZnVuY3Rpb24gbmFtZSwgSSBzdXNwZWN0IHRoaXMgaXMgYSByZWFkIG9wZXJhdGlvbiwgYWltaW5nIHRvIHJldHJpZXZlIGRhdGEgZnJvbSBhIGNvbm5lY3RlZCBNSUkgZGV2aWNlLiBUaGUgXCJjMjJcIiBsaWtlbHkgcG9pbnRzIHRvIHRoZSBzcGVjaWZpYyBwcm90b2NvbCB2ZXJzaW9uIGJlaW5nIHV0aWxpemVkLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgc3VzcGljaW9uIGJ5IGluc3BlY3RpbmcgdGhlIGZ1bmN0aW9uJ3MgcGFyYW1ldGVycyBhbmQgaW50ZXJuYWwgbG9naWMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgcmVnaXN0ZXIgYWRkcmVzc2VzLCByZWFkIGNvbW1hbmRzLCBkYXRhIHJldHJpZXZhbCBtZWNoYW5pc21zLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIG9yIHJldHJ5IGxvZ2ljLiBXaGF0IHNwZWNpZmljIHJlZ2lzdGVycyBhcmUgYmVpbmcgYWNjZXNzZWQ/IElzIGl0IGhhbmRsaW5nIGFueSBuZWNlc3NhcnkgY2xvY2tpbmcgb3IgdGltaW5nIGNvbnNpZGVyYXRpb25zIGZvciB0aGUgTURJTyBidXM/IEFueSBwb3dlciBtYW5hZ2VtZW50IGNhbGxzPyBBbHNvLCBob3cgaXMgdGhlIGRldmljZSBhZGRyZXNzIHBhc3NlZCB0byBpdD8gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpbnRlZ3JhdGVzIHdpdGggdGhlIG92ZXJhbGwgTURJTyBmcmFtZXdvcmsgd2l0aGluIHRoZSBzdG1tYWMgZHJpdmVyLiBXaGF0IGFyZSB0aGUgY29tbW9uIGVycm9yIGNhc2VzIGl0IG5lZWRzIHRvIGhhbmRsZSwgc3VjaCBhcyBhbiBOQUNLIG9yIGEgdGltZW91dD8gSXMgdGhpcyBmdW5jdGlvbiBjYWxsZWQgZGlyZWN0bHkgYnkgYW5vdGhlciBtb2R1bGUgb3IgZG9lcyBpdCBwZXJmb3JtIHNvbWUgaW50ZXJuYWwgZnVuY3Rpb25zPyBGaW5hbGx5LCBob3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBQSFkgb3Igb3RoZXIgY29ubmVjdGVkIE1ESU8gZGV2aWNlcz8gSSdtIGFudGljaXBhdGluZyB0aGlzIHRvIGJlIGEgc3RyYWlnaHRmb3J3YXJkIHJlYWQgb3BlcmF0aW9uLCBidXQgSSBrbm93IHRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscywgc28gbGV0J3Mgc3RhcnQgcmVhZGluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NDAzNjYsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NTozMS44Njc0MzQ3NDNaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTk6XFx0c3RhdGljIGludCBzdG1tYWNfbWRpb19yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5YWRkciwgaW50IHBoeXJlZylcXG4gMzAwOlxcdHtcXG4gMzAxOlxcdFxcdHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGJ1cy1cXHUwMDNlcHJpdik7XFxuIDMwMjpcXHRcXHR1MzIgY21kO1xcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcGxhdC1cXHUwMDNlY29yZV90eXBlID09IERXTUFDX0NPUkVfR01BQzQpXFxuIDMwNTpcXHRcXHRcXHRjbWQgPSBNSUlfR01BQzRfUkVBRDtcXG4gMzA2OlxcdFxcdGVsc2VcXG4gMzA3OlxcdFxcdFxcdGNtZCA9IDA7XFxuIDMwODpcXHRcXG4gMzA5OlxcdFxcdHJldHVybiBzdG1tYWNfbWRpb19yZWFkKHByaXYsIHBoeWFkZHIsIHBoeXJlZywgY21kLCAwKTtcXG4gMzEwOlxcdH1cXG4gMzExOlxcdFxcbiAzMTI6XFx0LyoqXFxuIDMxMzpcXHQgKiBzdG1tYWNfbWRpb19yZWFkX2M0NVxcbiAzMTQ6XFx0ICogQGJ1czogcG9pbnRzIHRvIHRoZSBtaWlfYnVzIHN0cnVjdHVyZVxcbiAzMTU6XFx0ICogQHBoeWFkZHI6IE1JSSBhZGRyXFxuIDMxNjpcXHQgKiBAZGV2YWQ6IGRldmljZSBhZGRyZXNzIHRvIHJlYWRcXG4gMzE3OlxcdCAqIEBwaHlyZWc6IE1JSSByZWdcXG4gMzE4OlxcdCAqIERlc2NyaXB0aW9uOiBpdCByZWFkcyBkYXRhIGZyb20gdGhlIE1JSSByZWdpc3RlciBmcm9tIHdpdGhpbiB0aGUgcGh5IGRldmljZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTU6MzEuODY3NTI2ODAzWiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NTQxNTUzMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUgd2UgZ28uLi5cblxuKipEZWx2aW5nIGludG8gdGhlIGBzdG1tYWNfbWRpb19yZWFkYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBzdG1tYWNfbWRpb19yZWFkYCBmdW5jdGlvbi4gQmFzZWQgb24gdGhlIG5hbWUsIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgY29yZSByb3V0aW5lIGZvciByZWFkaW5nIGRhdGEgZnJvbSBhbiBNRElPIGJ1cywgbGlrZWx5IHJlbGF0ZWQgdG8gYW4gU1RNaWNyb2VsZWN0cm9uaWNzIEV0aGVybmV0IE1BQyAoU1RNTUFDKSBjb250cm9sbGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIHBoeXNpY2FsIGxheWVyIChQSFkpIHRocm91Z2ggdGhpcyBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGUgdW5kZXJseWluZyBtZWNoYW5pc21zIOKAkyB0aGUgYml0LWJhbmdpbmcsIHRoZSByZWdpc3RlciBhY2Nlc3MgcGF0dGVybnMsIGFuZCBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3IgZXJyb3IgaGFuZGxpbmcuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKlJlZ2lzdGVyIEFkZHJlc3Npbmc6KiogSG93IGRvZXMgaXQgY29uc3RydWN0IHRoZSBNRElPIHJlZ2lzdGVyIGFkZHJlc3Nlcz8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdGVjaG5pcXVlcyB1c2VkIGZvciBkaWZmZXJlbnQgUEhZIHR5cGVzIG9yIHZlbmRvci1zcGVjaWZpYyByZWdpc3RlcnM/XG4qICAgKipEYXRhIFRyYW5zZmVyOioqIEhvdyBpcyB0aGUgcmVhZCBvcGVyYXRpb24gaW1wbGVtZW50ZWQ/IElzIGl0IHBvbGxpbmcsIGludGVycnVwdC1kcml2ZW4sIG9yIGEgY29tYmluYXRpb24/IFdoYXQgYXJlIHRoZSB0aW1pbmcgY29uc2lkZXJhdGlvbnMsIGdpdmVuIHRoZSBzcGVlZCBvZiB0aGUgTURJTyBidXM/XG4qICAgKipFcnJvciBDaGVja2luZzoqKiBEb2VzIGl0IGltcGxlbWVudCBhbnkgQ1JDIG9yIHBhcml0eSBjaGVja3Mgb24gdGhlIHJlYWQgZGF0YT8gRG9lcyBpdCBoYW5kbGUgcG90ZW50aWFsIGJ1cyBlcnJvcnMsIHN1Y2ggYXMgYSBtaXNzaW5nIG9yIHVucmVzcG9uc2l2ZSBQSFk/XG4qICAgKipTeW5jaHJvbml6YXRpb246KiogSG93IGRvZXMgaXQgZW5zdXJlIHByb3BlciBzeW5jaHJvbml6YXRpb24gd2l0aCB0aGUgUEhZLCBwYXJ0aWN1bGFybHkgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSByZWFkIHRyYW5zYWN0aW9uP1xuKiAgICoqSW50ZXJydXB0IEhhbmRsaW5nIChpZiBhbnkpOioqIElmIGludGVycnVwdHMgYXJlIGludm9sdmVkLCBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3JlIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgc2VydmljZWQgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zLlxuKiAgICoqUEhZIEFkZHJlc3MgSGFuZGxpbmc6KiogSG93IGlzIHRoZSBQSFkncyBhZGRyZXNzIGhhbmRsZWQ/IElzIGl0IGhhcmRjb2RlZCwgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLCBvciBkeW5hbWljYWxseSBkZXRlcm1pbmVkP1xuKiAgICoqQ2xhcml0eSBvZiBjb2RlOioqIEhvdyBhcmUgdGhlIHZhcmlvdXMgc3RlcHMgZW5jYXBzdWxhdGVkPyBXaGF0IGlzIHRoZSBjb2RlIHN0eWxlPyBXaWxsIEkgbmVlZCB0byBzcGVuZCBhIGxvdCBvZiB0aW1lIGRlY2lwaGVyaW5nIGl0P1xuXG5JIHdhbnQgdG8gc2VlIGhvdyB0aGUgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoaW4gdGhlIGxhcmdlciBgc3RtbWFjYCBkcml2ZXIgYXJjaGl0ZWN0dXJlIGFuZCB3aGF0IGxldmVsIG9mIGFic3RyYWN0aW9uIGl0IHByb3ZpZGVzLiBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgYW5kIHBvdGVudGlhbCBwaXRmYWxscyBvZiB0aGlzIE1ESU8gcmVhZCBpbXBsZW1lbnRhdGlvbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgaG93IHRoZSBlbmdpbmVlcnMgdGFja2xlZCB0aGlzIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGRyaXZlciFcblxuXG4iLCJJbnB1dFRva2VucyI6NDEwOTcsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU1OjM2LjgyMTY4NDU3NloiLCJTZXEiOjY0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21kaW8uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDA6XFx0XFx0ICAgICAgIE1JSV9BRERSX0dCVVNZO1xcbiAyNDE6XFx0fVxcbiAyNDI6XFx0XFxuIDI0MzpcXHRzdGF0aWMgaW50IHN0bW1hY19tZGlvX2FjY2VzcyhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBwYSxcXG4gMjQ0OlxcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBnciwgdTMyIGNtZCwgdTMyIGRhdGEsIGJvb2wgcmVhZClcXG4gMjQ1OlxcdHtcXG4gMjQ2OlxcdFxcdHZvaWQgX19pb21lbSAqbWlpX2FkZHJlc3MgPSBwcml2LVxcdTAwM2Vpb2FkZHIgKyBwcml2LVxcdTAwM2Vody1cXHUwMDNlbWlpLmFkZHI7XFxuIDI0NzpcXHRcXHR2b2lkIF9faW9tZW0gKm1paV9kYXRhID0gcHJpdi1cXHUwMDNlaW9hZGRyICsgcHJpdi1cXHUwMDNlaHctXFx1MDAzZW1paS5kYXRhO1xcbiAyNDg6XFx0XFx0dTMyIGFkZHI7XFxuIDI0OTpcXHRcXHRpbnQgcmV0O1xcbiAyNTA6XFx0XFxuIDI1MTpcXHRcXHRyZXQgPSBwbV9ydW50aW1lX3Jlc3VtZV9hbmRfZ2V0KHByaXYtXFx1MDAzZWRldmljZSk7XFxuIDI1MjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMjUzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDI1NDpcXHRcXG4gMjU1OlxcdFxcdHJldCA9IHN0bW1hY19tZGlvX3dhaXQobWlpX2FkZHJlc3MsIE1JSV9BRERSX0dCVVNZKTtcXG4gMjU2OlxcdFxcdGlmIChyZXQpXFxuIDI1NzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0YWRkciA9IHN0bW1hY19tZGlvX2Zvcm1hdF9hZGRyKHByaXYsIHBhLCBncikgfCBjbWQ7XFxuIDI2MDpcXHRcXG4gMjYxOlxcdFxcdHdyaXRlbChkYXRhLCBtaWlfZGF0YSk7XFxuIDI2MjpcXHRcXHR3cml0ZWwoYWRkciwgbWlpX2FkZHJlc3MpO1xcbiAyNjM6XFx0XFxuIDI2NDpcXHRcXHRyZXQgPSBzdG1tYWNfbWRpb193YWl0KG1paV9hZGRyZXNzLCBNSUlfQUREUl9HQlVTWSk7XFxuIDI2NTpcXHRcXHRpZiAocmV0KVxcbiAyNjY6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDI2NzpcXHRcXG4gMjY4OlxcdFxcdC8qIFJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgTUlJIGRhdGEgcmVnaXN0ZXIgaWYgaW4gcmVhZCBtb2RlICovXFxuIDI2OTpcXHRcXHRyZXQgPSByZWFkID8gcmVhZGwobWlpX2RhdGEpIFxcdTAwMjYgTUlJX0RBVEFfR0RfTUFTSyA6IDA7XFxuIDI3MDpcXHRcXG4gMjcxOlxcdG91dDpcXG4gMjcyOlxcdFxcdHBtX3J1bnRpbWVfcHV0KHByaXYtXFx1MDAzZWRldmljZSk7XFxuIDI3MzpcXHRcXG4gMjc0OlxcdFxcdHJldHVybiByZXQ7XFxuIDI3NTpcXHR9XFxuIDI3NjpcXHRcXG4gMjc3OlxcdHN0YXRpYyBpbnQgc3RtbWFjX21kaW9fcmVhZChzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBwYSxcXG4gMjc4OlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgZ3IsIHUzMiBjbWQsIGludCBkYXRhKVxcbiAyNzk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NTozNi44MjE4NTMyMTZaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI5NDczMTkwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgYW5kIEZ1enppbmcgYHN0bW1hY19tYWNfbGlua191cGAqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgc3RtbWFjX21hY19saW5rX3VwYCBmdW5jdGlvbi4gSXQgc2VlbXMgcmVhY2hhYmxlIHRocm91Z2ggc3l6a2FsbGVyJ3MgUENJIGZ1enppbmcsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBMZXQgbWUgd2FsayB0aHJvdWdoIG15IHRob3VnaHQgcHJvY2Vzcy5cblxuRmlyc3QsIGBzdG1tYWNfbWRpb193YWl0YCB3YWl0cyBmb3IgYE1JSV9BRERSX0dCVVNZYCB0byBjbGVhciwgYnV0IGlmIHRoZSBmdXp6ZXIgdGhyb3dzIGEgdmFsdWUgb2YgYDB4ZmZmZmZmZmZgLCB0aGF0J2xsIGNhdXNlIGEgdGltZW91dC4gSG93ZXZlciwgaWYgdGhlIGZ1enplciBoaXRzIGEgdmFsdWUgd2hlcmUgYE1JSV9BRERSX0dCVVNZYCAqaXMqIHplcm8sIHRoZW4gYHN0bW1hY19tZGlvX3dhaXRgIGFjdHVhbGx5IHN1Y2NlZWRzLiBJdCB0aGVuIHJlYWRzIGBtaWlfZGF0YWAuIElmIHRoYXQgcmV0dXJucyBhIHZhbGlkIFBIWSBJROKAlG5vdCBgMHhmZmZmYCBvciBgMHgwMDAwYOKAlGBwaHlfZmluZF9maXJzdGAgd2lsbCBzdWNjZWVkLiBUaGlzIGZ1bmN0aW9uIHNjYW5zIGFkZHJlc3NlcyAwLTMxLCByZWFkaW5nIHJlZ2lzdGVycyAyIGFuZCAzIGZvciB0aGUgUEhZIElELiBTbywgaWYgdGhlIGZ1enplciBwcm92aWRlcyBhIHZhbGlkIFBIWSBJRCwgYSBQSFkgZGV2aWNlIGdldHMgY3JlYXRlZC4gQ29uc2VxdWVudGx5LCBgc3RtbWFjX21kaW9fcmVnaXN0ZXJgIGFuZCB0aGVuIGBfX3N0bW1hY19kdnJfcHJvYmVgIHN1Y2NlZWQsIGFuZCB0aGUgbmV0ZGV2IGlzIHJlZ2lzdGVyZWQuXG5cbk5vdywgd2hlbiBJIGJyaW5nIHRoZSBkZXZpY2UgdXAgd2l0aCBgaXAgbGluayBzZXQgZXRoMCB1cGAsIGl0IGNhbGxzIGBzdG1tYWNfbWFjX2xpbmtfdXBgIHdoZW4gdGhlIFBIWSBsaW5rIGNvbWVzIHVwLiBBbmQsIHNpbmNlIGBzdG1tYWNfbWFjX2xpbmtfdXBgIGlzIGEgcGh5bGluayBjYWxsYmFjaywgaWYgdGhlIGZ1enplciBwcm92aWRlcyBhIHZhbGlkIFBIWSBJRCwgcGh5bGluayBhdHRhY2hlcyB0aGUgUEhZLCBhbmQgdGhlbiBzdGFydHMgcG9sbGluZyBpdCBmb3Igc3RhdHVzIGJ5IHJlYWRpbmcgcmVnaXN0ZXIgMSwgZXRjLiBJZiB0aGUgZnV6emVyIHJldHVybnMgc29tZXRoaW5nIGluZGljYXRpbmcgbGluayB1cCwgYHBoeWxpbmtgIGNhbGxzIGBtYWNfbGlua191cGAuXG5cblNvLCBpdCAqaXMqIHJlYWNoYWJsZSB3aXRoIFBDSSBmdXp6aW5nISBJJ20gdGhpbmtpbmcgdGhhdCdzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbkJ1dCB3YWl0LCBpcyB0aGlzICpvbmx5KiByZWFjaGFibGUgdmlhIFBDSSBmdXp6aW5nPyBXaGF0IGFib3V0IHBsYXRmb3JtIGRyaXZlcnM/IEknbSBub3cgdGhpbmtpbmcgYWJvdXQgdGhlIGBkd21hYy1pbnRlbC5jYCwgYGR3bWFjLWxvb25nc29uLmNgLCBhbmQgYGR3bWFjLW1vdG9yY29tbS5jYCBkcml2ZXJzIOKAkyB0aGV5ICphcmUqIFBDSS4gQnV0IHdoYXQgYWJvdXQgYWxsIHRoZSBwbGF0Zm9ybSBkcml2ZXJzIGxpa2UgYGR3bWFjLWR3Yy1xb3MtZXRoLmNgLCBgZHdtYWMtaXBxODA2eC5jYCwgZXRjPyBTeXprYWxsZXIgY2FuIGZ1enogcGxhdGZvcm0gZGV2aWNlcywgYnV0IGl0J3MgdXN1YWxseSBkZXBlbmRlbnQgb24gdGhlIGRldmljZSB0cmVlIG9yIGV4aXN0aW5nIGRldmljZXMuIFBDSSwgdGhvdWdoLCBjYW4gYmUgaW5qZWN0ZWQgZHluYW1pY2FsbHksIHdoaWNoIGlzIHBlcmZlY3QgaGVyZS5cblxuU2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIGBzdG1tYWNfbWFjX2xpbmtfdXBgIHRvIGhhbmRsZSB0aGUgbmV3IHNwZWVkcyBmb3IgYFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJYCBhbmQgYFBIWV9JTlRFUkZBQ0VfTU9ERV9YTEdNSUlgLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoYXQgbWFrZXMgaXQgbW9yZSBpbnRlcmVzdGluZyBmb3IgZnV6emluZyFcblxuT2theSwgdGltZSB0byBmaWd1cmUgb3V0IHRoZSBuZWVkZWQgY29uZmlncy4gSSB0aGluayBJJ2xsIG5lZWQgYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1BDSWAsIGBEV01BQ19JTlRFTGAgKG1heWJlIHRvIGdldCBtb3JlIFBDSSBJRHMpLCBgRFdNQUNfTE9PTkdTT05gLCBhbmQgYERXTUFDX01PVE9SQ09NTWAuIEkgc2hvdWxkIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjIzMCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU1OjQ5Ljc2OTE3NDMxNloiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY3MDQ3NDUwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRFdNQUNfSU5URUxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0zMjI9Y29uZmlnIERXTUFDX0lNWDhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMzMzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6MzM0OmNvbmZpZyBEV01BQ19JTlRFTF9QTEFUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zMzUtXFx0dHJpc3RhdGUgXFxcIkludGVsIGR3bWFjIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM3Mz1jb25maWcgU1RNTUFDX0xJQlBDSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zNzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzozNzg6Y29uZmlnIERXTUFDX0lOVEVMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zNzktXFx0dHJpc3RhdGUgXFxcIkludGVsIEdNQUMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTU6NTIuNDM5NjU4NjM4WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNzU5NzUxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBEV01BQyBDb25maWdzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgc3RhdGUgb2YgdGhlIGBEV01BQ19MT09OR1NPTmAgYW5kIGBEV01BQ19NT1RPUkNPTU1gIGNvbmZpZ3VyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVjYWxsIGFueSByZWNlbnQgd29yayBJIG1pZ2h0IGhhdmUgZG9uZSBpbiB0aGlzIGFyZWEuIEhhdmUgdGhlcmUgYmVlbiBhbnkgcmVwb3J0ZWQgaXNzdWVzIG9yIG1vZGlmaWNhdGlvbnMgcGVuZGluZz8gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBkcml2ZXJzIG9yIG1vZHVsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggb2YgdGhvc2UuIEFyZSB3ZSBkZWFsaW5nIHdpdGggc3RhbmRhcmQgY29uZmlndXJhdGlvbnMsIG9yIGFyZSB0aGVyZSBjdXN0b20gcGF0Y2hlcyBpbnZvbHZlZD8gV2hhdCdzIHRoZSBsYXRlc3QgYnVpbGQgc3RhdHVzIGZvciBlYWNoPyBJIG5lZWQgdG8gY2hlY2sgZm9yIHVwc3RyZWFtIHVwZGF0ZXMgb3IgZG93bnN0cmVhbSBtb2RpZmljYXRpb25zLiBJdCdzIGltcG9ydGFudCB0byBhc2NlcnRhaW4gcXVpY2tseSwgYXJlIHdlIHN0aWxsIGFsaWduZWQgd2l0aCBiZXN0IHByYWN0aWNlcyBmb3IgdGhvc2UgTUFDIGNvbmZpZ3VyYXRpb25zPyBEZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIEkgbWlnaHQgbmVlZCB0byBjcm9zcy1yZWZlcmVuY2UgdGhlbSB3aXRoIG91ciBwcm9qZWN0J3MgZG9jdW1lbnRhdGlvbiwgcmVsZXZhbnQgbWFpbGluZyBsaXN0cywgb3IgZXZlbiB0aGUgdXBzdHJlYW0gc291cmNlLiBVbHRpbWF0ZWx5LCBJIGFtIGxvb2tpbmcgZm9yIHdoZXRoZXIgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZTogYSkgY3VycmVudCBiKSB3b3JraW5nIGMpIG9wdGltYWwsIGFzIGEgcXVpY2sgZmlyc3QgcGFzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQwNjMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NTo1Ni42MTU2MzgzOThaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MDQ3MTIwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERXTUFDX0xPT05HU09OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc9MzM0PWNvbmZpZyBEV01BQ19JTlRFTF9QTEFUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTM0My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjM0NDpjb25maWcgRFdNQUNfTE9PTkdTT04xXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZy0zNDUtXFx0dHJpc3RhdGUgXFxcIkxvb25nc29uMSBHTUFDIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTM3OD1jb25maWcgRFdNQUNfSU5URUxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMzg3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6Mzg4OmNvbmZpZyBEV01BQ19MT09OR1NPTlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMzg5LVxcdHRyaXN0YXRlIFxcXCJMb29uZ3NvbiBQQ0kgRFdNQUMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTU6NTkuMjIwNDMwMzc1WiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNzE4MTk2OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0d29yayBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgdGhlIGNvbmZpZ3VyYXRpb25zIGludm9sdmVkIGFyZSBgU1RNTUFDX0VUSGAsIGBTVE1NQUNfUENJYCwgYERXTUFDX0lOVEVMYCwgYERXTUFDX0xPT05HU09OYCwgYW5kIGBEV01BQ19NT1RPUkNPTU1gLiBJdCdzIGdvb2QgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIGNvbnRleHQuIFRoZSBtYWluIGZ1bmN0aW9uIHRvdWNoZWQsIHdoaWNoIEkgbmVlZCB0byBmb2N1cyBvbiwgYXBwZWFycyB0byBiZSBgc3RtbWFjX21hY19saW5rX3VwYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSAqb25seSogZnVuY3Rpb24gaW1wYWN0ZWQgYnkgdGhpcyBkaWZmLiBBZnRlciBxdWlja2x5IHNjYW5uaW5nIHRoZSBwYXRjaCwgSSdtIGNvbmZpcm1pbmcgdGhhdCBgc3RtbWFjX21hY19saW5rX3VwYCBpcyBpbmRlZWQgdGhlIHNvbGUgZnVuY3Rpb24gdGhhdCB3YXMgY2hhbmdlZC5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIHRoZSBjb2RlIG1vZGlmaWNhdGlvbiBpdHNlbGYuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSBpbiBgc3RtbWFjX21hY19saW5rX3VwYC4gIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgdXNlZCBhIHNlcmllcyBvZiBuZXN0ZWQgYGlmL2Vsc2UgaWYvZWxzZWAgc3RhdGVtZW50cyB0byBoYW5kbGUgZGlmZmVyZW50IHNwZWVkcyBiYXNlZCBvbiB0aGUgYFBIWV9JTlRFUkZBQ0VfTU9ERWAuIFRoZSBuZXcgcGF0Y2ggaGFzIGZsYXR0ZW5lZCB0aGF0IGludG8gYSBzaW5nbGUgYHN3aXRjaGAgc3RhdGVtZW50LiBBbHNvLCBpdCBhcHBlYXJzIHRoZXJlIHdlcmUgc29tZSBtaXNzaW5nIHNwZWVkIGVudHJpZXMgZm9yIGJvdGggYFVTWEdNSUlgIGFuZCBgWExHTUlJYCBpbnRlcmZhY2VzIGluIHRoZSBvcmlnaW5hbCBjb2RlLCBhbmQgdGhleSBhcmUgbm93IGNvdmVyZWQuIFRoZSBwYXRjaCBhcHBlYXJzIHRvIHVuaWZ5IHNwZWVkIGhhbmRsaW5nIGZvciB0aGVzZSBpbnRlcmZhY2VzLiBJbiB0aGUgb3JpZ2luYWwgdmVyc2lvbiBpdCBzZWVtcyB0aGVyZSB3YXMgbm8gc3BlZWQgaGFuZGxpbmcgZm9yIHRoZSBuZXdlciBzcGVlZHMsIGFuZCBpdCBhcHBlYXJzIHRoZSBuZXcgY29kZSBmaXhlcyB0aGlzLiBPdmVyYWxsLCBpdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IHN0cmVhbWxpbmluZyBzcGVlZCBoYW5kbGluZyBhbmQgZW5zdXJpbmcgYWxsIHJlbGV2YW50IHNwZWVkcyBhcmUgc3VwcG9ydGVkLCBhdCBsZWFzdCBmcm9tIHdoYXQgSSBjYW4gc2VlLiAgVGhpcyBpcyBhIHByZXR0eSB0eXBpY2FsIHBhdHRlcm4gZm9yIHJlZmFjdG9yaW5nIOKAkyBpbXByb3ZpbmcgY29kZSByZWFkYWJpbGl0eSBhbmQgYWRkcmVzc2luZyBwb3RlbnRpYWwgZ2FwcyBpbiB0aGUgc3VwcG9ydGVkIGZlYXR1cmUgc2V0LlxuXG5HaXZlbiB0aGF0IHRoaXMgaXMgYHN0bW1hY19tYWNfbGlua191cGAsIGl0J3MgYWxsIGFib3V0IGJyaW5naW5nIHRoZSBsaW5rIHVwLCB0aGUgUEhZIGludGVyZmFjZSwgYW5kIHRoZSBzcGVlZHMgc3VwcG9ydGVkIHdpdGhpbiB0aG9zZSBpbnRlcmZhY2VzLCB3aGljaCBtYWtlIGl0IG5lY2Vzc2FyeSBmb3IgYSBjb3JyZWN0IGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGVzdGVkIHRob3JvdWdobHkgZm9yIHRoZSBhZmZlY3RlZCBpbnRlcmZhY2UgbW9kZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NTc4LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NjoxMi45Mzg2MzA3ODhaIiwiU2VxIjo3MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDk3MjA2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RtbWFjX21hY19saW5rX3VwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MTA1Nj1zdGF0aWMgdm9pZCBzdG1tYWNfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTA2OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jOjEwNjk6c3RhdGljIHZvaWQgc3RtbWFjX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMtMTA3MC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmM9MTI0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBzdG1tYWNfcGh5bGlua19tYWNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYy0xMjUxLVxcdC5tYWNfbGlua19kb3duID0gc3RtbWFjX21hY19saW5rX2Rvd24sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYzoxMjUyOlxcdC5tYWNfbGlua191cCA9IHN0bW1hY19tYWNfbGlua191cCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jLTEyNTMtXFx0Lm1hY19kaXNhYmxlX3R4X2xwaSA9IHN0bW1hY19tYWNfZGlzYWJsZV90eF9scGksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU2OjE1Ljc4ODM1NjQzN1oiLCJTZXEiOjcxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzcxMzQyMDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgU1RNTUFDIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSByZWNlbnQgY2hhbmdlIHRvIGBzdG1tYWNfbWFjX2xpbmtfdXBgLiBUaGF0J3MgdGhlIG9ubHkgZGlyZWN0IG1vZGlmaWNhdGlvbiBJIHNlZSwgd2hpY2ggc2ltcGxpZmllcyB0aGUgc2NvcGUgb2YgdGhlIGludmVzdGlnYXRpb24uIEhvd2V2ZXIsIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIGluZGlyZWN0IGltcGFjdHMgb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IG5lZWQgYXR0ZW50aW9uLlxuXG5MZXQncyBzZWUuIFRoZSBvYnZpb3VzIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYFNUTU1BQ19FVEhgLCBhbmQgdGhhdCdzIGV4cGVjdGVkLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGFjY291bnQgZm9yIHN1cHBvcnRpbmcgYXJjaGl0ZWN0dXJlcy4gVGhlIGBTVE1NQUNfUENJYCBvcHRpb24gZW5hYmxlcyBQQ0kgc3VwcG9ydC4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhhdCBvcHRpb24gYWxzbyBjb3ZlciB0aGUgc3BlY2lmaWMgUENJIElEcyBvZiBzdXBwb3J0ZWQgaGFyZHdhcmU/IEkgYWxyZWFkeSBrbm93IGFib3V0IHRoaW5ncyBsaWtlIGBEV01BQ19JTlRFTGAsIGBEV01BQ19MT09OR1NPTmAsIGFuZCBgRFdNQUNfTU9UT1JDT01NYCwgd2hpY2ggc2VlbSB0byBzdXBwbHkgdGhvc2UgdmVuZG9yIElEcy4gSSB3YW50IHRvIGNvbmZpcm0gaWYgYFNUTU1BQ19QQ0lgIGl0c2VsZiBpbmNsdWRlcyBhbnkgZ2VuZXJpYyBQQ0kgSURzLiBUaGF0IHdvdWxkIGluZmx1ZW5jZSBob3cgSSBpbnRlcnByZXQgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgYW5kIHBvc3NpYmxlIGRlcGVuZGVuY2llcy4gVGhpcyBpbnZlc3RpZ2F0aW9uIGlzIGFib3V0IGNoZWNraW5nIGZvciBjb21wbGV0ZSBjb3ZlcmFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY2MjksIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTY6MjEuNTU5Nzk0OTY5WiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEyNzUwNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUENJX0RFVklDRV9EQVRBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM9MjAzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzdG1tYWNfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmM6MjA0OlxcdHsgUENJX0RFVklDRV9EQVRBKFNUTU1BQywgU1RNTUFDLCBcXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDU6XFx0eyBQQ0lfREVWSUNFX0RBVEEoU1RNSUNSTywgTUFDLCBcXHUwMDI2c3RtbWFjX3BjaV9pbmZvKSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYzoyMDY6XFx0eyBQQ0lfREVWSUNFX0RBVEEoU1lOT1BTWVMsIEdNQUM1X0lELCBcXHUwMDI2c25wc19nbWFjNV9wY2lfaW5mbykgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMtMjA3LVxcdHt9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjU2OjIxLjY4MTA4MDk2WiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDM1MzU5NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBUYXJnZXQgRHJpdmVyIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgYFNUTU1BQ19QQ0lgIGNvbmZpZ3VyYXRpb24gaXMgZGVmaW5pdGVseSByZWxldmFudC4gSXQgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBQQ0kgZGV2aWNlIGRhdGEgZm9yIGBTVE1NQUNgLCBgU1RNSUNST2AsIGFuZCBgU1lOT1BTWVNgIGJhc2VkIGRldmljZXMsIHdoaWNoIGlzIGtleSBmb3IgZnV6emluZyB2aWEgUENJIGluamVjdGlvbi4gU28sICp0aGF0J3MqIGRlZmluaXRlbHkgaW4uIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBhbmQgZm9yIGJyb2FkZXIgY292ZXJhZ2UsIEknbGwgaW5jbHVkZSBgU1RNTUFDX0VUSGAsIGBEV01BQ19JTlRFTGAsIGBEV01BQ19MT09OR1NPTmAsIGFuZCBgRFdNQUNfTU9UT1JDT01NYCBhcyB3ZWxsLlxuXG5Ob3csIGxldCdzIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgU1RNTUFDX0VUSGAuIEFscmlnaHQsIGl0IHJlcXVpcmVzIGBIQVNfSU9NRU1gIGFuZCBgSEFTX0RNQWAsIGJvdGggb2Ygd2hpY2ggYXJlIGNvbW1vbiBhbmQgc2hvdWxkIGJlIHJlYWRpbHkgYXZhaWxhYmxlLiBJdCBhbHNvIHNlbGVjdHMgYE1JSWAsIGBQSFlMSUJgLCBgUEhZTElOS2AsIGFuZCBgQ1JDMzJgLCB3aGljaCBhcmUgYWxsIHN0YW5kYXJkIGNvbXBvbmVudHMgcmVsYXRlZCB0byBFdGhlcm5ldCBvcGVyYXRpb24uIFNlZW1zIGdvb2QuXG5cblRoZXJlZm9yZSwgaGVyZSdzIHRoZSBmaW5hbCBjb25maWd1cmF0aW9uIGZvciBmdXp6aW5nOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSDigJMgZGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0LlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBzdG1tYWNfbWFjX2xpbmtfdXBgIOKAkyB0aGlzIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uIHdoZXJlIHRoZSBjaGFuZ2VzIHJlc2lkZS5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFNUTU1BQ19FVEhgLCBgU1RNTUFDX1BDSWAsIGBEV01BQ19JTlRFTGAsIGBEV01BQ19MT09OR1NPTmAsIGBEV01BQ19NT1RPUkNPTU1gIOKAkyBhIHNvbGlkIGNvbWJpbmF0aW9uIHByb3ZpZGluZyBicm9hZCBjb3ZlcmFnZS5cbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2gncyBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB0byB0aGUgTUFDIHNwZWVkIGNvbmZpZ3VyYXRpb24gbG9naWMgd2l0aGluIHRoZSBgc3RtbWFjYCBkcml2ZXIgZHVyaW5nIGxpbmstdXAgaXMgdGhlIHByaW1hcnkgdGFyZ2V0LiBUaGUgZHJpdmVyJ3MgY29yZSBsb2dpYyBpcyBpbXBhY3RlZC4gV2UgY2FuIGFjY2VzcyB0aGUgZHJpdmVyIHVzaW5nIHN5emthbGxlcidzIFBDSSBmdXp6aW5nIGJ5IGluamVjdGluZyBhIHZpcnR1YWwgUENJIGRldmljZSB3aXRoIHRoZSBtYXRjaGluZyB2ZW5kb3IvZGV2aWNlIElEcyBzdXBwb3J0ZWQgYnkgYHN0bW1hY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MjU2LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1NjozMi43MTY0NDU4NDJaIiwiU2VxIjo3NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg0NzY0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNUTU1BQ19FVEhcIixcbiAgICBcIlNUTU1BQ19QQ0lcIixcbiAgICBcIkRXTUFDX0lOVEVMXCIsXG4gICAgXCJEV01BQ19MT09OR1NPTlwiLFxuICAgIFwiRFdNQUNfTU9UT1JDT01NXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3RtbWFjX21hY19saW5rX3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1BQyBzcGVlZCBjb25maWd1cmF0aW9uIGxvZ2ljIGluIHRoZSBzdG1tYWMgZHJpdmVyIGR1cmluZyBsaW5rIHVwLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlcidzIGNvcmUgbG9naWMuIFRoZSBkcml2ZXIgY2FuIGJlIHJlYWNoZWQgdmlhIHN5emthbGxlcidzIFBDSSBmdXp6aW5nIGJ5IGluamVjdGluZyBhIHZpcnR1YWwgUENJIGRldmljZSBtYXRjaGluZyBvbmUgb2YgdGhlIHN1cHBvcnRlZCB2ZW5kb3IvZGV2aWNlIElEcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVE1NQUNfRVRIXCIsXG4gICAgXCJTVE1NQUNfUENJXCIsXG4gICAgXCJEV01BQ19JTlRFTFwiLFxuICAgIFwiRFdNQUNfTE9PTkdTT05cIixcbiAgICBcIkRXTUFDX01PVE9SQ09NTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN0bW1hY19tYWNfbGlua191cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNQUMgc3BlZWQgY29uZmlndXJhdGlvbiBsb2dpYyBpbiB0aGUgc3RtbWFjIGRyaXZlciBkdXJpbmcgbGluayB1cC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIncyBjb3JlIGxvZ2ljLiBUaGUgZHJpdmVyIGNhbiBiZSByZWFjaGVkIHZpYSBzeXprYWxsZXIncyBQQ0kgZnV6emluZyBieSBpbmplY3RpbmcgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgbWF0Y2hpbmcgb25lIG9mIHRoZSBzdXBwb3J0ZWQgdmVuZG9yL2RldmljZSBJRHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvx2ff[1] Phase: Succeeded StartedAt: 2026-07-13 09:58:00 +0000 UTC FinishedAt: 2026-07-13 09:58:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-13 09:58:00 +0000 UTC FinishedAt: 2026-07-13 09:58:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2] Phase: Succeeded StartedAt: 2026-07-13 09:58:00 +0000 UTC FinishedAt: 2026-07-13 11:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-13 09:58:00 +0000 UTC FinishedAt: 2026-07-13 11:24:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-13 09:58:00 +0000 UTC FinishedAt: 2026-07-13 09:58:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-13 09:58:00 +0000 UTC FinishedAt: 2026-07-13 09:58:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowvx2ff/series-workflowvx2ff-convert-artifact-1515782416/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-13 09:58:10 +0000 UTC FinishedAt: 2026-07-13 10:35:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-13 09:58:10 +0000 UTC FinishedAt: 2026-07-13 10:35:07 +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:*7dfad87b-fa4c-43b7-bf53-95e79e5b7caa,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-workflowvx2ff/series-workflowvx2ff-convert-artifact-1515782416/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": "f6fd4438-cf22-4dfd-8ee7-08d3ef561970", "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-workflowvx2ff/series-workflowvx2ff-build-action-1359093142/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-13 09:58:10 +0000 UTC FinishedAt: 2026-07-13 10:34:57 +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:*7dfad87b-fa4c-43b7-bf53-95e79e5b7caa,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-workflowvx2ff/series-workflowvx2ff-convert-artifact-1515782416/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": "f6fd4438-cf22-4dfd-8ee7-08d3ef561970", "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-workflowvx2ff/series-workflowvx2ff-build-action-1359093142/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-13 10:35:07 +0000 UTC FinishedAt: 2026-07-13 10:35:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-13 10:35:07 +0000 UTC FinishedAt: 2026-07-13 10:35:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-13 10:35:07 +0000 UTC FinishedAt: 2026-07-13 10:35:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-13 10:35:07 +0000 UTC FinishedAt: 2026-07-13 10:35:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowvx2ff/series-workflowvx2ff-convert-artifact-4234213239/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-13 10:35:17 +0000 UTC FinishedAt: 2026-07-13 10:37:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-13 10:35:17 +0000 UTC FinishedAt: 2026-07-13 10:37:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f6fd4438-cf22-4dfd-8ee7-08d3ef561970,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-workflowvx2ff/series-workflowvx2ff-build-action-1359093142/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-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-13 10:37:29 +0000 UTC FinishedAt: 2026-07-13 10:37:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-13 10:37:29 +0000 UTC FinishedAt: 2026-07-13 10:37:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-13 10:37:29 +0000 UTC FinishedAt: 2026-07-13 11:21:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-13 10:37:29 +0000 UTC FinishedAt: 2026-07-13 11:21:00 +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:*7dfad87b-fa4c-43b7-bf53-95e79e5b7caa,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-workflowvx2ff/series-workflowvx2ff-convert-artifact-4234213239/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": "e1e969e1-44f8-4388-bf7f-cf17c2eb9e3b", "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-workflowvx2ff/series-workflowvx2ff-build-action-3421096507/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-13 10:37:29 +0000 UTC FinishedAt: 2026-07-13 11:20:50 +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:*7dfad87b-fa4c-43b7-bf53-95e79e5b7caa,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-workflowvx2ff/series-workflowvx2ff-convert-artifact-4234213239/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": "e1e969e1-44f8-4388-bf7f-cf17c2eb9e3b", "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-workflowvx2ff/series-workflowvx2ff-build-action-3421096507/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-13 11:21:00 +0000 UTC FinishedAt: 2026-07-13 11:21:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-13 11:21:00 +0000 UTC FinishedAt: 2026-07-13 11:21:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-13 11:21:00 +0000 UTC FinishedAt: 2026-07-13 11:23:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-13 11:21:00 +0000 UTC FinishedAt: 2026-07-13 11:23:16 +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:*e1e969e1-44f8-4388-bf7f-cf17c2eb9e3b,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-workflowvx2ff/series-workflowvx2ff-build-action-3421096507/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-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-13 11:23:26 +0000 UTC FinishedAt: 2026-07-13 11:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-13 11:23:26 +0000 UTC FinishedAt: 2026-07-13 11:24:46 +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":["stmmac_mac_link_up"],"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:*f6fd4438-cf22-4dfd-8ee7-08d3ef561970,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e1e969e1-44f8-4388-bf7f-cf17c2eb9e3b,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-workflowvx2ff/series-workflowvx2ff-build-action-1359093142/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-workflowvx2ff/series-workflowvx2ff-build-action-3421096507/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-13 11:23:26 +0000 UTC FinishedAt: 2026-07-13 11:23:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-13 11:23:26 +0000 UTC FinishedAt: 2026-07-13 11:23:30 +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":["stmmac_mac_link_up"],"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-workflowvx2ff/series-workflowvx2ff-convert-artifact-3248263344/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-13 11:23:26 +0000 UTC FinishedAt: 2026-07-13 11:23:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-13 11:23:26 +0000 UTC FinishedAt: 2026-07-13 11:23:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-13 11:23:26 +0000 UTC FinishedAt: 2026-07-13 11:23:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-13 11:23:36 +0000 UTC FinishedAt: 2026-07-13 11:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvx2ff[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["stmmac_mac_link_up"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["STMMAC_ETH","STMMAC_PCI","DWMAC_INTEL","DWMAC_LOONGSON","DWMAC_MOTORCOMM"],"series_id":"236e94de-9725-496e-840c-c21b3f8f4f91","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-13 11:23:36 +0000 UTC FinishedAt: 2026-07-13 11:24:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f6fd4438-cf22-4dfd-8ee7-08d3ef561970,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e1e969e1-44f8-4388-bf7f-cf17c2eb9e3b,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-workflowvx2ff/series-workflowvx2ff-build-action-1359093142/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-workflowvx2ff/series-workflowvx2ff-build-action-3421096507/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-workflowvx2ff/series-workflowvx2ff-convert-artifact-3248263344/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,}