Name: series-workflow6bgs8 Phase: Succeeded StartedAt: 2026-06-29 09:17:33 +0000 UTC FinishedAt: 2026-06-29 10:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[0] Phase: Succeeded StartedAt: 2026-06-29 09:17:33 +0000 UTC FinishedAt: 2026-06-29 09:30:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 09:17:33 +0000 UTC FinishedAt: 2026-06-29 09:30:10 +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": "32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_SGI", "SGI_MFD_IOC3", "SGI_IOC3_ETH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_SGI", "SGI_MFD_IOC3", "SGI_IOC3_ETH" ], "series_id": "f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ioc3eth_remove" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfU0dJJiMzNDssCiAgICAmIzM0O1NHSV9NRkRfSU9DMyYjMzQ7LAogICAgJiMzNDtTR0lfSU9DM19FVEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb2MzZXRoX3JlbW92ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGZ1bmN0aW9uYWwgYnVnIChwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUpIGluIHRoZSBkcml2ZXImIzM5O3MgcmVtb3ZlIHJvdXRpbmUgYnkgcmVvcmRlcmluZyBjbGVhbnVwIG9wZXJhdGlvbnMuIFRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCBhbmQgcmVtb3ZlZCB2aWEgUENJIGluamVjdGlvbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChvbiBNSVBTNjQpLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmI5ZjkwOGE3YWUwZDg5NmM2MTk2ZDY2Y2Y3NDA0NGQ0YjE2NTE4Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDA5OjI2OjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmNcbmluZGV4IDM5NzMxMDY5ZDk5ZTBiLi5iMzVmNjkyYjFhMGUxOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguY1xuQEAgLTk2NywxMSAmIzQzOzk2NywxMiBAQCBzdGF0aWMgdm9pZCBpb2MzZXRoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuIFx0c3RydWN0IGlvYzNfcHJpdmF0ZSAqaXAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuJiM0MztcdHVucmVnaXN0ZXJfbmV0ZGV2KGRldik7XG4mIzQzO1x0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2aXAtXHUwMDNlaW9jM190aW1lcik7XG4mIzQzO1xuIFx0ZG1hX2ZyZWVfY29oZXJlbnQoaXAtXHUwMDNlZG1hX2RldiwgUlhfUklOR19TSVpFLCBpcC1cdTAwM2VyeHIsIGlwLVx1MDAzZXJ4cl9kbWEpO1xuIFx0ZG1hX2ZyZWVfY29oZXJlbnQoaXAtXHUwMDNlZG1hX2RldiwgVFhfUklOR19TSVpFICYjNDM7IFNaXzE2SyAtIDEsIGlwLVx1MDAzZXR4X3JpbmcsIGlwLVx1MDAzZXR4cl9kbWEpO1xuIFxuLVx0dW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTtcbi1cdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNmlwLVx1MDAzZWlvYzNfdGltZXIpO1xuIFx0ZnJlZV9uZXRkZXYoZGV2KTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9TR0kmIzM0OywKICAgICYjMzQ7U0dJX01GRF9JT0MzJiMzNDssCiAgICAmIzM0O1NHSV9JT0MzX0VUSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvYzNldGhfcmVtb3ZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZnVuY3Rpb25hbCBidWcgKHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSkgaW4gdGhlIGRyaXZlciYjMzk7cyByZW1vdmUgcm91dGluZSBieSByZW9yZGVyaW5nIGNsZWFudXAgb3BlcmF0aW9ucy4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGFuZCByZW1vdmVkIHZpYSBQQ0kgaW5qZWN0aW9uIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgKG9uIE1JUFM2NCksIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJiOWY5MDhhN2FlMGQ4OTZjNjE5NmQ2NmNmNzQwNDRkNGIxNjUxOGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyOSAwOToyNjo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmMKaW5kZXggMzk3MzEwNjlkOTllMGIuLmIzNWY2OTJiMWEwZTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYwpAQCAtOTY3LDExICYjNDM7OTY3LDEyIEBAIHN0YXRpYyB2b2lkIGlvYzNldGhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpb2MzX3ByaXZhdGUgKmlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAomIzQzOwl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwomIzQzOwl0aW1lcl9kZWxldGVfc3luYygmYW1wO2lwLSZndDtpb2MzX3RpbWVyKTsKJiM0MzsKIAlkbWFfZnJlZV9jb2hlcmVudChpcC0mZ3Q7ZG1hX2RldiwgUlhfUklOR19TSVpFLCBpcC0mZ3Q7cnhyLCBpcC0mZ3Q7cnhyX2RtYSk7CiAJZG1hX2ZyZWVfY29oZXJlbnQoaXAtJmd0O2RtYV9kZXYsIFRYX1JJTkdfU0laRSAmIzQzOyBTWl8xNksgLSAxLCBpcC0mZ3Q7dHhfcmluZywgaXAtJmd0O3R4cl9kbWEpOwogCi0JdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQl0aW1lcl9kZWxldGVfc3luYygmYW1wO2lwLSZndDtpb2MzX3RpbWVyKTsKIAlmcmVlX25ldGRldihkZXYpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBEcml2ZXIgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmNgLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSB0d2Vha2VkIHRoZSBjbGVhbnVwIHNlcXVlbmNlIGluIHRoZSBgaW9jM2V0aF9yZW1vdmVgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIHNoaWZ0ZWQgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYSBiaXQuIEl0IHVzZWQgdG8gYmUgYHVucmVnaXN0ZXJfbmV0ZGV2KGRldilgIGFuZCBgdGltZXJfZGVsZXRlX3N5bmMoJmFtcDtpcC0mZ3Q7aW9jM190aW1lcilgICphZnRlciogdGhlIGBkbWFfZnJlZV9jb2hlcmVudGAgY2FsbCwgYnV0IG5vdyB0aGV5IGFyZSAqYmVmb3JlKiBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hhdCBraW5kIG9mIGVudmlyb25tZW50IGFyZSB3ZSBkZWFsaW5nIHdpdGggaGVyZT8gRG9lcyB0aGlzIHBvdGVudGlhbGx5IGltcGFjdCB2aXJ0dWFsaXplZCBzeXN0ZW1zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGRyaXZlciBpcyBldmVuIHVzZWQgaW4gbW9kZXJuIHNldHVwcy4gR2l2ZW4gdGhlIFNHSSBJT0MzIEV0aGVybmV0IHJlZmVyZW5jZSwgaXQgaXMgYW4gb2xkZXIgdGVjaG5vbG9neSwgYnV0IHdvcnRoIGV4cGxvcmluZy4KCkkgc2hvdWxkIHByb2JhYmx5IGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgdG8gY29uZmlybSwgYW5kIHBlcmhhcHMgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZ2AgZmlsZSBvciBldmVuIGRpcmVjdGx5IGV4YW1pbmUgdGhlIGBpb2MzLWV0aC5jYCBzb3VyY2UgY29kZSB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoaXMgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2hlbiogaXQmIzM5O3MgY29uZmlndXJlZC4gSXMgdGhpcyBzdGlsbCByZWxldmFudCwgb3IgaXMgaXQgbGVnYWN5IGNvZGU/IFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBob3cgc2lnbmlmaWNhbnQgdGhpcyBjaGFuZ2UgYWN0dWFsbHkgaXMsIGFuZCB3aGF0IHBvdGVudGlhbCBpc3N1ZXMgaXQgY291bGQgaW50cm9kdWNlIG9yIHJlc29sdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U0dJX0lPQzNfRVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZz0xOD1pZiBORVRfVkVORE9SX1NHSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWctMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZzoyMDpjb25maWcgU0dJX0lPQzNfRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7U0dJIElPQzMgRXRoZXJuZXRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfU0dJX08yTUFDRV9FVEgpICYjNDM7PSBtZXRoLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19TR0lfSU9DM19FVEgpICYjNDM7PSBpb2MzLWV0aC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBTR0lfSU9DM19FVEhgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBTR0lfSU9DM19FVEhgLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY2FzdWFsIG9ic2VydmF0aW9uOyBpdCYjMzk7cyB0aGUgZnVuZGFtZW50YWwgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmUuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hhdCBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyB0aGF0ICplbmFibGUqIGBTR0lfSU9DM19FVEhgIHRvIGZ1bmN0aW9uPyYjMzQ7IElzIGl0IGxvdy1sZXZlbCBoYXJkd2FyZSByZWdpc3RlcnM/IERyaXZlciBtb2R1bGVzPyBTcGVjaWZpYyBrZXJuZWwgdmVyc2lvbnM/IFRoaXMgaXMgdGhlIGtpbmQgb2YgaW1tZWRpYXRlIHNjb3BpbmcgSSBhbHdheXMgZG8uIEl0JiMzOTtzIGFib3V0IGVzdGFibGlzaGluZyB0aGUgY29udGV4dCBhbmQgdGhlIGJvdW5kYXJpZXMgb2YgdGhpcyB0aGluZy4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgd2lsbCBkaWN0YXRlIGhvdyBJIHByb2NlZWQgd2l0aCBhbnkgc3Vic2VxdWVudCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0dJX0lPQzNfRVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWc9MTg9aWYgTkVUX1ZFTkRPUl9TR0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnLTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWc6MjA6Y29uZmlnIFNHSV9JT0MzX0VUSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWctMjEtXHRib29sIFwmIzM0O1NHSSBJT0MzIEV0aGVybmV0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBTR0kgRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIFNHSSBFdGhlcm5ldCBkcml2ZXIuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBsaW5lIHdpbGwgbGlrZWx5IGludHJvZHVjZSB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgZW5hYmxpbmcgdGhpcyBzcGVjaWZpYyBkcml2ZXIsIG9yIHBlcmhhcHMgYSBjb3JlIGRlcGVuZGVuY3kuIEkgZXhwZWN0IHRvIHNlZSBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGEgYGNvbmZpZyBTR0lfRVRIRVJORVRgIHdpdGggYXNzb2NpYXRlZCBgYm9vbGAgb3IgYHRyaXN0YXRlYCBhbmQgbGlrZWx5IHNvbWUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMuIFRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGF0IHRoYXQgbGluZSBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGRyaXZlciBpcyBjb25zaWRlcmVkIGEgdmFsaWQgb3IgZGVzaXJhYmxlIGNob2ljZSwgYW5kIHdoaWNoIGhhcmR3YXJlIG9yIG90aGVyIHN1YnN5c3RlbSBkZXBlbmRlbmNpZXMgaXQgYXNzdW1lcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHVwc3RyZWFtIG9yIGRvd25zdHJlYW0gY29tcGF0aWJpbGl0eSBpcyBhY2hpZXZlZCwgYW5kIHdoYXQgaWYgYW55LCB0aGUgaW1wbGljYXRpb25zIHdvdWxkIGJlIGlmIEkgd2VyZSB0byBlbmFibGUgb3IgZGlzYWJsZSBpdC4gVWx0aW1hdGVseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIHRlbGwgbWUgdGhlIGZ1bmRhbWVudGFsIHBhcmFtZXRlcnMgaW4gb3JkZXIgdG8gaW5jbHVkZSBvciBleGNsdWRlIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgaW50byB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE1Olx0XHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgU0dJIGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWQgZm9yXG4gIDE2Olx0XHQgIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cbiAgMTc6XHRcbiAgMTg6XHRpZiBORVRfVkVORE9SX1NHSVxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBTR0lfSU9DM19FVEhcbiAgMjE6XHRcdGJvb2wgXCYjMzQ7U0dJIElPQzMgRXRoZXJuZXRcJiMzNDtcbiAgMjI6XHRcdGRlcGVuZHMgb24gUENJIFx1MDAyNlx1MDAyNiBTR0lfTUZEX0lPQzNcbiAgMjM6XHRcdHNlbGVjdCBDUkMxNlxuICAyNDpcdFx0c2VsZWN0IENSQzMyXG4gIDI1Olx0XHRzZWxlY3QgTUlJXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgb2YgdGhpcyB0eXBlLCBzYXkgWSBoZXJlLlxuICAyODpcdFxuICAyOTpcdGNvbmZpZyBTR0lfTzJNQUNFX0VUSFxuICAzMDpcdFx0dHJpc3RhdGUgXCYjMzQ7U0dJIE8yIE1BQ0UgRmFzdCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIFNHSV9JUDMyPXlcbiAgMzI6XHRcbiAgMzM6XHRlbmRpZiAjIE5FVF9WRU5ET1JfU0dJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29uZGl0aW9uYWwgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaGluZ2VzIG9uIGEgcGFydGljdWxhciBzZXQgb2YgZGVwZW5kZW5jaWVzLiBJdCByZWFsbHkgYm9pbHMgZG93biB0byB3aGV0aGVyIGBQQ0kgJmFtcDsmYW1wOyBTR0lfTUZEX0lPQzNgIGlzIHRydWUuIFRoYXQgYCZhbXA7JmFtcDtgIG9wZXJhdG9yIGlzIHRoZSBrZXkuIFNvLCB0aGUgcXVlc3Rpb24gaXMsICphcmUqIGJvdGggb2YgdGhvc2UgY29uZGl0aW9ucyBtZXQ/CgpJJiMzOTt2ZSBnb3QgdG8gY2hlY2sgYFNHSV9NRkRfSU9DM2AuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBjcml0aWNhbCBwaWVjZSB0byBldmFsdWF0ZS4gT25jZSBJIHVuZGVyc3RhbmQgdGhlIHN0YXRlIG9mICp0aGF0KiBzeW1ib2wsIEkgY2FuIGRldGVybWluZSB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGxvZ2ljLiBUaGUgUENJIHNpZGUgaXMgcHJvYmFibHkgd2VsbCB1bmRlcnN0b29kLCBzbyBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSB1bmtub3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0dJX01GRF9JT0MzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWZkL0tjb25maWc9MjQzMz1jb25maWcgUkFWRV9TUF9DT1JFXG4tLVxuZHJpdmVycy9tZmQvS2NvbmZpZy0yNDQwLVxuZHJpdmVycy9tZmQvS2NvbmZpZzoyNDQxOmNvbmZpZyBTR0lfTUZEX0lPQzNcbmRyaXZlcnMvbWZkL0tjb25maWctMjQ0Mi1cdGJvb2wgXCYjMzQ7U0dJIElPQzMgY29yZSBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgYGRyaXZlcnMvbWZkL0tjb25maWdgIGZpbGUuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gc29tZXRoaW5nIGFyb3VuZCBsaW5lIDI0NDEuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGEgcGFydGljdWxhciBNRkQgZHJpdmVyIGlzIGNvbmZpZ3VyZWQuIEkga25vdyBob3cgS2NvbmZpZyBmaWxlcyBhcmUgc3RydWN0dXJlZCwgc28gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgb3B0aW9ucyBkZWZpbmVkIHRoZXJlLCByZWxhdGluZyB0byB3aGljaCBkcml2ZXJzIGFyZSBidWlsdCwgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzLCBhbmQgcG90ZW50aWFsbHkgaG93IHRoZXkgaW50ZXJhY3QuIExpbmUgMjQ0MSBzaG91bGQgcHV0IG1lIHJpZ2h0IGluIHRoZSB6b25lLCBvciBnaXZlIG1lIGEgcHJldHR5IGdvb2QgaW5kaWNhdGlvbiBvZiB3aGVyZSB0byBzdGFydC4gV2l0aCBteSBleHBlcmllbmNlIGluIHRoaXMgc3BhY2UsIEkgYW50aWNpcGF0ZSBiZWluZyBhYmxlIHRvIHF1aWNrbHkgaW50ZXJwcmV0IHRoZSByZWxldmFudCBjb2RlIGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZmQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQzNTpcdFx0ZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVU1xuMjQzNjpcdFx0c2VsZWN0IENSQ19JVFVfVFxuMjQzNzpcdFx0aGVscFxuMjQzODpcdFx0ICBTZWxlY3QgdGhpcyB0byBnZXQgc3VwcG9ydCBmb3IgdGhlIFN1cGVydmlzb3J5IFByb2Nlc3NvclxuMjQzOTpcdFx0ICBkZXZpY2UgZm91bmQgb24gc2V2ZXJhbCBkZXZpY2VzIGluIFJBVkUgbGluZSBvZiBoYXJkd2FyZS5cbjI0NDA6XHRcbjI0NDE6XHRjb25maWcgU0dJX01GRF9JT0MzXG4yNDQyOlx0XHRib29sIFwmIzM0O1NHSSBJT0MzIGNvcmUgZHJpdmVyXCYjMzQ7XG4yNDQzOlx0XHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgTUlQUyBcdTAwMjZcdTAwMjYgNjRCSVRcbjI0NDQ6XHRcdHNlbGVjdCBNRkRfQ09SRVxuMjQ0NTpcdFx0aGVscFxuMjQ0NjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGJhc2ljIHN1cHBvcnQgZm9yIHRoZSBTR0kgSU9DMy1iYXNlZFxuMjQ0NzpcdFx0ICBjb250cm9sbGVyIGNhcmRzLiAgVGhpcyBvcHRpb24gZG9lcyBub3QgZW5hYmxlIGFueSBzcGVjaWZpY1xuMjQ0ODpcdFx0ICBmdW5jdGlvbnMgb24gc3VjaCBhIGNhcmQsIGJ1dCBwcm92aWRlcyBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmVcbjI0NDk6XHRcdCAgZm9yIG90aGVyIGRyaXZlcnMgdG8gdXRpbGl6ZS5cbjI0NTA6XHRcbjI0NTE6XHRcdCAgSWYgeW91IGhhdmUgYW4gU0dJIE9yaWdpbiwgT2N0YW5lLCBvciBhIFBDSSBJT0MzIGNhcmQsXG4yNDUyOlx0XHQgIHRoZW4gc2F5IFkuIE90aGVyd2lzZSBzYXkgTi5cbjI0NTM6XHRcbjI0NTQ6XHRjb25maWcgTUZEX0lOVEVMX00xMF9CTUNfQ09SRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzcyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoIEZ1enppbmc/IEEgTUlQUy1TcGVjaWZpYyBEcml2ZXIgRGVlcCBEaXZlKioKCk9rYXksIHNvIHRoaXMgaXMgZGVwZW5kZW50IG9uIGBQQ0kgJmFtcDsmYW1wOyBNSVBTICZhbXA7JmFtcDsgNjRCSVRgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYSBNSVBTLXNwZWNpZmljIGRyaXZlci4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgcmVhbGlzdGljYWxseSBmdXp6IHRoaXM/IE15IGluaXRpYWwgdGhvdWdodCBpcyB1c3VhbGx5IHdlIGZvY3VzIG9uIHg4Nl82NCBhbmQgYXJtNjQsIG1heWJlIHNvbWUgb3RoZXJzLCBidXQgTUlQUyBpc24mIzM5O3QgdHlwaWNhbGx5IG9uIHRoZSByYWRhciB1bmxlc3Mgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQgZm9yIGl0IGluIHN5emthbGxlci4KCkJ1dCB3YWl0LCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IHNwZWNpZmljOiBJIG5lZWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGl0JiMzOTtzICppbXBvc3NpYmxlKiB0byByZWFjaCB0aGUgY29kZSBwYXRocyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gU28sIGlzIHRoZSBTR0kgSU9DMyBlbXVsYXRlZCBpbiBRRU1VPyBJIG5lZWQgdG8gY2hlY2sgaWYgUUVNVSBldmVuICpoYXMqIGFuIElPQzMgZGV2aWNlLiBJIGNhbiBxdWlja2x5IHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSwgYnV0IHRoZSBRRU1VIHNvdXJjZSBpc24mIzM5O3QgcmVhZGlseSBhdmFpbGFibGUgaGVyZS4KCk9rYXksIGxldCYjMzk7cyB0aGluayBhYm91dCB0aGlzLiBJdCYjMzk7cyBhIFBDSSBkZXZpY2UsIGFuZCBzeXprYWxsZXIgKmNvdWxkKiBwb3RlbnRpYWxseSBmdXp6IFBDSSBkZXZpY2VzIHZpYSBpbmplY3Rpb24gaWYgaXQmIzM5O3MgY29tcGlsZWQgaW4uIEJ1dCB0aGlzIGBTR0lfTUZEX0lPQzNgIGlzLCBhZ2FpbiwgZGVwZW5kZW50IG9uIGBNSVBTICZhbXA7JmFtcDsgNjRCSVRgLiBJZiBzeXprYWxsZXIgaXMgcnVubmluZyBvbiB4ODZfNjQgb3IgYXJtNjQsIHRoaXMgZHJpdmVyICp3b24mIzM5O3QqIGV2ZW4gYmUgY29tcGlsZWQuIENhbiB3ZSBjb21waWxlIGl0IGZvciB4ODZfNjQ/IE5vLCBiZWNhdXNlIG9mIHRoZSBgUENJICZhbXA7JmFtcDsgTUlQUyAmYW1wOyZhbXA7IDY0QklUYCBkZXBlbmRlbmN5LiBJdCYjMzk7cyBpbmhlcmVudGx5IHJlc3RyaWN0ZWQgdG8gTUlQUy4gU28sIGdpdmVuIHRoZSB1c3VhbCBzeXprYWxsZXIgY29uZmlndXJhdGlvbnMsIGl0JiMzOTtzICpsaWtlbHkqIG5vdCBiZWluZyBmdXp6ZWQuCgpIb3dldmVyLCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiwgc3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBNSVBTISBUaGUgc3l6LW1hbmFnZXIgY2FuIHJ1biBNSVBTIFZNcywgd2hpY2ggY2hhbmdlcyB0aGluZ3MgYSBiaXQuIFNvLCBpcyBpdCB3b3J0aCB0aGUgZWZmb3J0PwoKTGV0JiMzOTtzIGNoZWNrIGlmIHRoZSBgaW9jM2V0aF9yZW1vdmVgIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZS4gSXQmIzM5O3MgYSBwbGF0Zm9ybSBkZXZpY2UgcmVtb3ZlIGZ1bmN0aW9uLiBPa2F5LCBgaW9jM2V0aF9yZW1vdmVgIHRha2VzIGEgYHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXZgLiBJIHNob3VsZCBub3cgZGlnIGludG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguY2Agc291cmNlIGNvZGUsIHNvIEkgY2FuIGNvbmZpcm0gaXRzIHJlYWNoYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTYwOlx0b3V0X2ZyZWU6XG4gOTYxOlx0XHRmcmVlX25ldGRldihkZXYpO1xuIDk2MjpcdFx0cmV0dXJuIGVycjtcbiA5NjM6XHR9XG4gOTY0Olx0XG4gOTY1Olx0c3RhdGljIHZvaWQgaW9jM2V0aF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiA5NjY6XHR7XG4gOTY3Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XG4gOTY4Olx0XHRzdHJ1Y3QgaW9jM19wcml2YXRlICppcCA9IG5ldGRldl9wcml2KGRldik7XG4gOTY5Olx0XG4gOTcwOlx0XHR1bnJlZ2lzdGVyX25ldGRldihkZXYpO1xuIDk3MTpcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2aXAtXHUwMDNlaW9jM190aW1lcik7XG4gOTcyOlx0XG4gOTczOlx0XHRkbWFfZnJlZV9jb2hlcmVudChpcC1cdTAwM2VkbWFfZGV2LCBSWF9SSU5HX1NJWkUsIGlwLVx1MDAzZXJ4ciwgaXAtXHUwMDNlcnhyX2RtYSk7XG4gOTc0Olx0XHRkbWFfZnJlZV9jb2hlcmVudChpcC1cdTAwM2VkbWFfZGV2LCBUWF9SSU5HX1NJWkUgJiM0MzsgU1pfMTZLIC0gMSwgaXAtXHUwMDNldHhfcmluZywgaXAtXHUwMDNldHhyX2RtYSk7XG4gOTc1Olx0XG4gOTc2Olx0XHRmcmVlX25ldGRldihkZXYpO1xuIDk3NzpcdH1cbiA5Nzg6XHRcbiA5Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY2NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEEgUXVpY2sgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEl0IGFkZHJlc3NlcyBhIHVzZS1hZnRlci1mcmVlIG9yIGEgc2ltaWxhciBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdHkuIFRoZSBjb3JlIG9mIHRoZSBmaXggaXMgdG8gcHJvcGVybHkgdW5yZWdpc3RlciB0aGUgbmV0d29yayBkZXZpY2UgYW5kIGRlbGV0ZSB0aGUgdGltZXIgYmVmb3JlIGRlYWxsb2NhdGluZyB0aGUgRE1BIHJpbmdzLiBGdW5jdGlvbmFsbHksIGl0JiMzOTtzIGEgZ29vZCBjaGFuZ2UsIHRpZ2h0ZW5pbmcgdXAgc29tZSBwb3RlbnRpYWxseSBsb29zZSBlbmRzLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgd29ydGggcHV0dGluZyB0aHJvdWdoIHRoZSBmdXp6aW5nIHBpcGVsaW5lPyBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzLCBwcm9iYWJseS4gTWVtb3J5IHNhZmV0eSBidWdzIGFyZSB0aGUgYnJlYWQgYW5kIGJ1dHRlciBvZiBmdXp6aW5nIGVmZm9ydHMuIEhvd2V2ZXIsIHRoaXMgaXMgYSBNSVBTLXNwZWNpZmljIGRyaXZlci4gSWYgaXQgd2VyZSBhIGRyaXZlciB0aGF0IHdhcyBwYXJ0IG9mIGEgcGxhdGZvcm0sIEkmIzM5O2QgaGF2ZSB0byBlbnN1cmUgdGhhdCBzeXprYWxsZXIgaXMgcnVubmluZyBvbiBhIGNvbXBhdGlibGUgTUlQUyBpbnN0YW5jZSwgb3IgaGF2ZSB0byBmaWd1cmUgb3V0IGEgd2F5IG9mIHRlc3RpbmcgdGhlIG1vZHVsZS4gT2YgY291cnNlLCBJIGtub3cgdGhhdCBzeXprYWxsZXIgZG9lcyBzdXBwb3J0IE1JUFMsIHRob3VnaCB0aGlzIG1pZ2h0IHJlcXVpcmUgbW9yZSBzZXR1cC4KCkhvbGQgb24gYSBzZWNvbmQuLi4gdGhlIGVtYWlsIG1lbnRpb25lZCBgc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0O2AuIERvZXMgdGhhdCBtZWFuIHN5emthbGxlciAqZGlkKiBmaW5kIHRoaXMgYnVnPyBObywgdGhhdCYjMzk7cyBqdXN0IHRoZSBjb21taXQgYXV0aG9yIGluIHRoaXMgdGVzdGluZyBlbnZpcm9ubWVudC4gV2FpdCwgdGhpcyBwYXRjaCBpcyBmcm9tIGEgc3l6a2FsbGVyIGNsdXN0ZXIsIHRoZSBzeXotY2x1c3Rlci4gU28gdGhhdCBtZWFucyBpdCB3YXMsIGluIGZhY3QsIGZvdW5kIGJ5IHN5emthbGxlci4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBkcml2ZXIgaXRzZWxmLiBIbW0sIGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLiBUaGF0IGNoYW5nZXMgdGhpbmdzIGEgYml0LiBIb3cgaXMgdGhlIHBsYXRmb3JtIGRldmljZSBhY3R1YWxseSBjcmVhdGVkPyBLbm93aW5nIHRoYXQgbWlnaHQgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlIGF0dGFjayBzdXJmYWNlIGFuZCBpZiB0aGUgZnV6emluZyBzZXR1cCB3aWxsIGJlIHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGV2aWNlIGNyZWF0aW9uIG1lY2hhbmlzbSB0byBjb21wbGV0ZSBteSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2MzZXRoX3JlbW92ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jPTgyOD1zdGF0aWMgaW50IGlvYzNldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYy05NjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYzo5NjU6c3RhdGljIHZvaWQgaW9jM2V0aF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jLTk2Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmM9MTI3NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpb2MzZXRoX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jLTEyNzYtXHQucHJvYmUgID0gaW9jM2V0aF9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jOjEyNzc6XHQucmVtb3ZlID0gaW9jM2V0aF9yZW1vdmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYy0xMjc4LVx0LmRyaXZlciA9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSBjb250ZXh0IGlzIG15IGFyZWEgb2YgZXhwZXJ0aXNlOgoKKipQbGF0Zm9ybSBEcml2ZXIgRGVjb2RpbmcqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGxhdGZvcm0gZHJpdmVyIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgaW5zdGFudGlhdGlvbiBvZiB0aGlzIHBsYXRmb3JtIGRldmljZS4gVGhlIGxpa2VseSBjYW5kaWRhdGUgZm9yIGl0cyBjcmVhdGlvbiBpcyB0aGUgTUZEIChNdWx0aS1GdW5jdGlvbiBEZXZpY2UpIGNvcmUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBkcml2ZXJzL21mZC9pb2MzLmNgIGRyaXZlci4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcGF0dGVybi4gR2l2ZW4gdGhlIGZpbGVuYW1lLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGBpb2MzLmNgIGRyaXZlciB0byBiZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgYmFzaWMgcGxhdGZvcm0gZGV2aWNlIHN0cnVjdHVyZSB0aGF0IG91ciBkcml2ZXIgd2lsbCB0aGVuIGhvb2sgaW50by4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgcmVsYXRpb25zaGlwLCBvZiBjb3Vyc2UsIGJ1dCB0aGF0JiMzOTtzIG15IHdvcmtpbmcgaHlwb3RoZXNpcy4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gY29uZmlybSB0aGlzIGluc3RhbnRpYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvYzMtZXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZmQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWZkL2lvYzMuYz0yNTY9c3RhdGljIHN0cnVjdCBtZmRfY2VsbCBpb2MzX2V0aF9jZWxsc1tdID0ge1xuZHJpdmVycy9tZmQvaW9jMy5jLTI1Ny1cdHtcbmRyaXZlcnMvbWZkL2lvYzMuYzoyNTg6XHRcdC5uYW1lID0gXCYjMzQ7aW9jMy1ldGhcJiMzNDssXG5kcml2ZXJzL21mZC9pb2MzLmMtMjU5LVx0XHQucmVzb3VyY2VzID0gaW9jM19ldGhfcmVzb3VyY2VzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODMwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIGBpb2MzZXRoX3JlbW92ZWAgd2l0aCBTeXprYWxsZXIqKgoKT2theSwgc28gYGlvYzMtZXRoYCBpcyBkZWZpbml0ZWx5IGJvcm4gZnJvbSBgZHJpdmVycy9tZmQvaW9jMy5jYCwgd2hpY2ggaXMgYSBQQ0kgZHJpdmVyLiBUaGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IGlmIFN5emthbGxlciBtYW5hZ2VzIHRvIGluamVjdCBhIFBDSSBkZXZpY2UgdGhhdCBtYXRjaGVzIHRoZSBjaGFyYWN0ZXJpc3RpY3MgZGVmaW5lZCBpbiBgaW9jMy5jYCwgaXQmIzM5O2xsIHRyaWdnZXIgdGhlIGNyZWF0aW9uIG9mIHRoZSBNRkQgKE11bHRpLUZ1bmN0aW9uIERldmljZSkgY2VsbHMuIFRoYXQgaW4gdHVybiwgd2lsbCBwcm9iZSBhbmQgcmVnaXN0ZXIgYGlvYzMtZXRoYC4gTG9naWNhbGx5LCB0aGVuLCByZW1vdmluZyB0aGlzIGluamVjdGVkIFBDSSBkZXZpY2Ugc2hvdWxkIGxlYWQgdXMgdG8gdGhlIGBpb2MzZXRoX3JlbW92ZWAgZnVuY3Rpb24uIFRoaXMgc2VlbXMgbGlrZSBhIHBlcmZlY3RseSBwbGF1c2libGUgcGF0aCB0byB0YWtlIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBhc3N1bWluZyB0aGUgbmVjZXNzYXJ5IGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkIGluLCBvZiBjb3Vyc2UuCgpUaGUgY2F0Y2gsIGFzIGFsd2F5cywgaXMgdGhlIGFyY2hpdGVjdHVyZS4gSXQgbG9va3MgbGlrZSB0aGlzIHNwZWNpZmljIHNldHVwIGlzIGRlcGVuZGVudCBvbiBgTUlQUyAmYW1wOyZhbXA7IDY0QklUYC4gSG1tLCBjYW4gd2UgZW5hYmxlIHRoaXMgb24geDg2PyBObywgdGhlIGRlcGVuZGVuY2llcyBhcmUgZXhwbGljaXQ6IGBQQ0kgJmFtcDsmYW1wOyBNSVBTICZhbXA7JmFtcDsgNjRCSVRgLiBUaGF0IGNsb3NlcyB0aGF0IGF2ZW51ZS4KCkhvbGQgb24gYSBzZWNvbmQuLi5TeXprYWxsZXIgKmRvZXMqIGZ1enogTUlQUzY0IGFyY2hpdGVjdHVyZXMsIGRvZXNuJiMzOTt0IGl0PyBUaGF0IGNoYW5nZXMgdGhpbmdzLiBUaGlzIGlzIGFic29sdXRlbHkgd29ydGggcHVyc3VpbmchIFdlIG5lZWQgdG8gZW5zdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBzZXQgdXAuIExldCBtZSBkaWcgaW50byB0aGUgY29uZmlncy4gV2UgbmVlZCB0byBlbmFibGUgYFNHSV9NRkRfSU9DM2AgYW5kIGBTR0lfSU9DM19FVEhgLiBBaCwgZ29vZCwgYm90aCBhcmUgYm9vbGVhbiBvcHRpb25zLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0dJX01GRF9JT0MzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZmQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21mZC9LY29uZmlnPTI0MzM9Y29uZmlnIFJBVkVfU1BfQ09SRVxuLS1cbmRyaXZlcnMvbWZkL0tjb25maWctMjQ0MC1cbmRyaXZlcnMvbWZkL0tjb25maWc6MjQ0MTpjb25maWcgU0dJX01GRF9JT0MzXG5kcml2ZXJzL21mZC9LY29uZmlnLTI0NDItXHRib29sIFwmIzM0O1NHSSBJT0MzIGNvcmUgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0czoKCioqUmVmb2N1c2luZyBvbiBgU0dJX0lPQzNfRVRIYCoqCgpSaWdodCwgc28sIEkmIzM5O20ganVzdCBxdWlja2x5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgbWVudGFsIGNoZWNrbGlzdCBoZXJlLiBJIHdhcyB3b3JraW5nIG9uIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoaXMgcHJldmlvdXNseSwgYW5kIGl0JiMzOTtzIHRpbWUgdG8gY2lyY2xlIGJhY2suIExldCYjMzk7cyBnZXQgYmFjayB0byBleGFtaW5pbmcgYFNHSV9JT0MzX0VUSGAuIE5lZWQgdG8gcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggd2hhdCB3YXMgaGFwcGVuaW5nIHRoZXJlLCByZWZyZXNoIG15IG1lbW9yeSBvbiBhbnkgb3V0c3RhbmRpbmcgaXNzdWVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgcmUtZXZhbHVhdGUgdGhhdCBzcGVjaWZpYyBlbGVtZW50IG9mIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0dJX0lPQzNfRVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWc9MTg9aWYgTkVUX1ZFTkRPUl9TR0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnLTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWc6MjA6Y29uZmlnIFNHSV9JT0MzX0VUSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWctMjEtXHRib29sIFwmIzM0O1NHSSBJT0MzIEV0aGVybmV0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MDUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRW5hYmxpbmcgYE5FVF9WRU5ET1JfU0dJYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZXRoaW5nLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgdG8gbWluZCBpcyB0aGF0IGBORVRfVkVORE9SX1NHSWAgbmVlZHMgdG8gYmUgYWN0aXZlLiBJdOKAmXMgYW4gZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gZWxlbWVudC4gSSYjMzk7bSBub3QgZW50aXJlbHkgY2VydGFpbiB3aHkgaXQmIzM5O3Mgbm90IGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IEkga25vdyBpdCYjMzk7cyBhIHByZXJlcXVpc2l0ZSBmb3IgdGhlIG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGJlaW5nIHNldC4gSXQmIzM5O3MgdGhlIGJ1aWxkaW5nIGJsb2NrLCB0aGUgZm91bmRhdGlvbiB0aGF0IG5lZWRzIHRvIGJlIGluIHBsYWNlIGZpcnN0LiBXaXRob3V0IGl0LCB0aGluZ3Mgd2lsbCBzaW1wbHkgYnJlYWssIG9yIG5vdCBldmVuIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1ZFTkRPUl9TR0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWc6Njpjb25maWcgTkVUX1ZFTkRPUl9TR0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnLTctXHRib29sIFwmIzM0O1NHSSBkZXZpY2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNjEKCQkJCQkJCW91dHB1dDogMTIzCgkJCQkJCQl0aG91Z2h0czogNTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIERyaXZlciBCdWcgRml4IGZvciBQb3RlbnRpYWwgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHJlbGF0ZWQgdG8gU0dJIG5ldHdvcmsgZHJpdmVycyDigJMgc3BlY2lmaWNhbGx5LCB0aGluZ3MgZmxhZ2dlZCB1bmRlciBgTkVUX1ZFTkRPUl9TR0lgLCBgU0dJX01GRF9JT0MzYCwgYW5kIGBTR0lfSU9DM19FVEhgLiBUaGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYGlvYzNldGhfcmVtb3ZlYCwgd2hpY2ggaXMgdGhlIG9uZSBiZWluZyBtb2RpZmllZCwgc28gdGhhdCYjMzk7cyBvdXIgZm9jdXMgc3ltYm9sLgoKSXMgYGlvYzNldGhfcmVtb3ZlYCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQ/IFllcywgYmVjYXVzZSB0aGUgcGF0Y2ggZGlyZWN0bHkgY2hhbmdlcyB0aGlzIGZ1bmN0aW9uLiBOb3csIGFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbnMgYWZmZWN0ZWQ/IE5vLCB0aGUgZGlmZiBleHBsaWNpdGx5IG9ubHkgdG91Y2hlcyBgaW9jM2V0aF9yZW1vdmVgLgoKTXkgbmV4dCB0aG91Z2h0IGlzIHdoZXRoZXIgYGlvYzNldGhfcmVtb3ZlYCBpcyBldmVuIHJlYWNoYWJsZS4gTGV0JiMzOTtzIHNlZS4uLklmIGBpb2MzZXRoX3Byb2JlYCBzdWNjZWVkcywgdGhlbiBgaW9jM2V0aF9yZW1vdmVgIHdpbGwgYmUgY2FsbGVkIGR1cmluZyBkZXZpY2UgcmVtb3ZhbCwgcmlnaHQ/IERldmljZSByZW1vdmFsIGNhbiBiZSB0cmlnZ2VyZWQgYnkgUENJIGhvdHBsdWcgZXZlbnRzLiBTaW5jZSB3ZSBjYW4gc2ltdWxhdGUgdGhvc2UgdXNpbmcgc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyIGJ5IGluamVjdGluZyBQQ0kgZXZlbnRzLCB0aGVuIGBpb2MzZXRoX3JlbW92ZWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuCgpOb3csIGNoZWNraW5nIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFNHSV9NRkRfSU9DM2AgcmV2ZWFscyBpdCBkZXBlbmRzIG9uIGBQQ0kgJmFtcDsmYW1wOyBNSVBTICZhbXA7JmFtcDsgNjRCSVRgLiBUaGF0IG1lYW5zIHRoaXMgc3BlY2lmaWMgZHJpdmVyIHdpbGwgb25seSBiZSB0ZXN0ZWQgb24gTUlQUyBhcmNoaXRlY3R1cmVzLiBHb29kIHRoaW5nIHN5emthbGxlciBzdXBwb3J0cyBNSVBTLCBzbyB0aGF0JiMzOTtzIGZpbmUuCgpMZXQgbWUganVzdCBxdWlja2x5IHJldmlldyB0aGUgcGF0Y2ggY29kZSBpdHNlbGYgYWdhaW4uIEl0IGxvb2tzIGxpa2UgdGhlIGZpeCBpcyByZW9yZGVyaW5nIHRoZSBjbGVhbnVwIHN0ZXBzIGluIGBpb2MzZXRoX3JlbW92ZWAuIEl0IHNoaWZ0cyB0aGUgY2FsbHMgdG8gYHVucmVnaXN0ZXJfbmV0ZGV2YCBhbmQgYHRpbWVyX2RlbGV0ZV9zeW5jYCBiZWZvcmUgdGhlIERNQSByaW5nIGZyZWVpbmcuIFRoZSBpc3N1ZSBpcyBhIHVzZS1hZnRlci1mcmVlLCB3aGVyZSB0aGUgRE1BIHJpbmdzIHdlcmUgZnJlZWQgYmVmb3JlIHRoZSBuZXQgZGV2aWNlIHdhcyB1bnJlZ2lzdGVyZWQgYW5kIHRoZSB0aW1lciB3YXMgZGVsZXRlZC4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSB0aW1lciBmaXJlZCBvciB0aGUgbmV0ZGV2IHdhcyBzdGlsbCBhY3RpdmUsIGl0IGNvdWxkIGFjY2VzcyBmcmVlZCBETUEgcmluZ3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZGRyZXNzaW5nIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eS4KClNvLCBgTkVUX1ZFTkRPUl9TR0lgLCBgU0dJX01GRF9JT0MzYCwgYFNHSV9JT0MzX0VUSGAsIHdpdGggYGlvYzNldGhfcmVtb3ZlYCBhcyB0aGUga2V5LiBUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBpbiB0aGUgZHJpdmVyJiMzOTtzIHJlbW92YWwgcm91dGluZS4gSXTigJlzIHJlYWNoYWJsZSB2aWEgUENJIGluamVjdGlvbiBpbiBNSVBTNjQgZW52aXJvbm1lbnRzLCB3aGljaCBtZWFucyBpdCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIGZsYWcgdGhpcyB0byBiZSBhZGRlZCB0byB0aGUgZnV6emluZyBxdWV1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfU0dJJiMzNDssCiAgICAmIzM0O1NHSV9NRkRfSU9DMyYjMzQ7LAogICAgJiMzNDtTR0lfSU9DM19FVEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb2MzZXRoX3JlbW92ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGZ1bmN0aW9uYWwgYnVnIChwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUpIGluIHRoZSBkcml2ZXImIzM5O3MgcmVtb3ZlIHJvdXRpbmUgYnkgcmVvcmRlcmluZyBjbGVhbnVwIG9wZXJhdGlvbnMuIFRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCBhbmQgcmVtb3ZlZCB2aWEgUENJIGluamVjdGlvbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChvbiBNSVBTNjQpLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX1NHSSYjMzQ7LAogICAgJiMzNDtTR0lfTUZEX0lPQzMmIzM0OywKICAgICYjMzQ7U0dJX0lPQzNfRVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9jM2V0aF9yZW1vdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyAocG90ZW50aWFsIHVzZS1hZnRlci1mcmVlKSBpbiB0aGUgZHJpdmVyJiMzOTtzIHJlbW92ZSByb3V0aW5lIGJ5IHJlb3JkZXJpbmcgY2xlYW51cCBvcGVyYXRpb25zLiBUaGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgYW5kIHJlbW92ZWQgdmlhIFBDSSBpbmplY3Rpb24gaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCAob24gTUlQUzY0KSwgc28gaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI2OjU0LjI5MzI4ODE1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTA1MzE3MjQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX1NHSVwiLFxuICAgIFwiU0dJX01GRF9JT0MzXCIsXG4gICAgXCJTR0lfSU9DM19FVEhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb2MzZXRoX3JlbW92ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZnVuY3Rpb25hbCBidWcgKHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSkgaW4gdGhlIGRyaXZlcidzIHJlbW92ZSByb3V0aW5lIGJ5IHJlb3JkZXJpbmcgY2xlYW51cCBvcGVyYXRpb25zLiBUaGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgYW5kIHJlbW92ZWQgdmlhIFBDSSBpbmplY3Rpb24gaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCAob24gTUlQUzY0KSwgc28gaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6MjY6NTQuMjkzMjk2OTA1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjQ0NTQ0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiYjlmOTA4YTdhZTBkODk2YzYxOTZkNjZjZjc0MDQ0ZDRiMTY1MThjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVuIDI5IDA5OjI2OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmNcXG5pbmRleCAzOTczMTA2OWQ5OWUwYi4uYjM1ZjY5MmIxYTBlMTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguY1xcbkBAIC05NjcsMTEgKzk2NywxMiBAQCBzdGF0aWMgdm9pZCBpb2MzZXRoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XFxuIFxcdHN0cnVjdCBpb2MzX3ByaXZhdGUgKmlwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFxuK1xcdHVucmVnaXN0ZXJfbmV0ZGV2KGRldik7XFxuK1xcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZpcC1cXHUwMDNlaW9jM190aW1lcik7XFxuK1xcbiBcXHRkbWFfZnJlZV9jb2hlcmVudChpcC1cXHUwMDNlZG1hX2RldiwgUlhfUklOR19TSVpFLCBpcC1cXHUwMDNlcnhyLCBpcC1cXHUwMDNlcnhyX2RtYSk7XFxuIFxcdGRtYV9mcmVlX2NvaGVyZW50KGlwLVxcdTAwM2VkbWFfZGV2LCBUWF9SSU5HX1NJWkUgKyBTWl8xNksgLSAxLCBpcC1cXHUwMDNldHhfcmluZywgaXAtXFx1MDAzZXR4cl9kbWEpO1xcbiBcXG4tXFx0dW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTtcXG4tXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNmlwLVxcdTAwM2Vpb2MzX3RpbWVyKTtcXG4gXFx0ZnJlZV9uZXRkZXYoZGV2KTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6MjY6NTQuNjU4NDU5OTI5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjg2ODc5ODU3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9TR0lcIixcbiAgICBcIlNHSV9NRkRfSU9DM1wiLFxuICAgIFwiU0dJX0lPQzNfRVRIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9jM2V0aF9yZW1vdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGZ1bmN0aW9uYWwgYnVnIChwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUpIGluIHRoZSBkcml2ZXIncyByZW1vdmUgcm91dGluZSBieSByZW9yZGVyaW5nIGNsZWFudXAgb3BlcmF0aW9ucy4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGFuZCByZW1vdmVkIHZpYSBQQ0kgaW5qZWN0aW9uIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgKG9uIE1JUFM2NCksIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmI5ZjkwOGE3YWUwZDg5NmM2MTk2ZDY2Y2Y3NDA0NGQ0YjE2NTE4Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDA5OjI2OjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguY1xuaW5kZXggMzk3MzEwNjlkOTllMGIuLmIzNWY2OTJiMWEwZTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jXG5AQCAtOTY3LDExICs5NjcsMTIgQEAgc3RhdGljIHZvaWQgaW9jM2V0aF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcdHN0cnVjdCBpb2MzX3ByaXZhdGUgKmlwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbitcdHVucmVnaXN0ZXJfbmV0ZGV2KGRldik7XG4rXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZpcC1cdTAwM2Vpb2MzX3RpbWVyKTtcbitcbiBcdGRtYV9mcmVlX2NvaGVyZW50KGlwLVx1MDAzZWRtYV9kZXYsIFJYX1JJTkdfU0laRSwgaXAtXHUwMDNlcnhyLCBpcC1cdTAwM2VyeHJfZG1hKTtcbiBcdGRtYV9mcmVlX2NvaGVyZW50KGlwLVx1MDAzZWRtYV9kZXYsIFRYX1JJTkdfU0laRSArIFNaXzE2SyAtIDEsIGlwLVx1MDAzZXR4X3JpbmcsIGlwLVx1MDAzZXR4cl9kbWEpO1xuIFxuLVx0dW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTtcbi1cdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNmlwLVx1MDAzZWlvYzNfdGltZXIpO1xuIFx0ZnJlZV9uZXRkZXYoZGV2KTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyNjo1NC42NTg0NjI1MjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjIxNzkzNTkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIERyaXZlciBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmNgLiBJdCBzZWVtcyB0aGV5J3ZlIHR3ZWFrZWQgdGhlIGNsZWFudXAgc2VxdWVuY2UgaW4gdGhlIGBpb2MzZXRoX3JlbW92ZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhleSd2ZSBzaGlmdGVkIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGEgYml0LiBJdCB1c2VkIHRvIGJlIGB1bnJlZ2lzdGVyX25ldGRldihkZXYpYCBhbmQgYHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNmlwLVx1MDAzZWlvYzNfdGltZXIpYCAqYWZ0ZXIqIHRoZSBgZG1hX2ZyZWVfY29oZXJlbnRgIGNhbGwsIGJ1dCBub3cgdGhleSBhcmUgKmJlZm9yZSogaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hhdCBraW5kIG9mIGVudmlyb25tZW50IGFyZSB3ZSBkZWFsaW5nIHdpdGggaGVyZT8gRG9lcyB0aGlzIHBvdGVudGlhbGx5IGltcGFjdCB2aXJ0dWFsaXplZCBzeXN0ZW1zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGRyaXZlciBpcyBldmVuIHVzZWQgaW4gbW9kZXJuIHNldHVwcy4gR2l2ZW4gdGhlIFNHSSBJT0MzIEV0aGVybmV0IHJlZmVyZW5jZSwgaXQgaXMgYW4gb2xkZXIgdGVjaG5vbG9neSwgYnV0IHdvcnRoIGV4cGxvcmluZy5cblxuSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtLCBhbmQgcGVyaGFwcyBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnYCBmaWxlIG9yIGV2ZW4gZGlyZWN0bHkgZXhhbWluZSB0aGUgYGlvYzMtZXRoLmNgIHNvdXJjZSBjb2RlIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aGVuKiBpdCdzIGNvbmZpZ3VyZWQuIElzIHRoaXMgc3RpbGwgcmVsZXZhbnQsIG9yIGlzIGl0IGxlZ2FjeSBjb2RlPyBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgaG93IHNpZ25pZmljYW50IHRoaXMgY2hhbmdlIGFjdHVhbGx5IGlzLCBhbmQgd2hhdCBwb3RlbnRpYWwgaXNzdWVzIGl0IGNvdWxkIGludHJvZHVjZSBvciByZXNvbHZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTcwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjc6MDYuODc2NDAxNzY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NDM4OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNHSV9JT0MzX0VUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnPTE4PWlmIE5FVF9WRU5ET1JfU0dJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWc6MjA6Y29uZmlnIFNHSV9JT0MzX0VUSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIlNHSSBJT0MzIEV0aGVybmV0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX1NHSV9PMk1BQ0VfRVRIKSArPSBtZXRoLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfU0dJX0lPQzNfRVRIKSArPSBpb2MzLWV0aC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI3OjA2Ljk0NDg0ODU1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDE2NzUxNzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgU0dJX0lPQzNfRVRIYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IHRoZSBkZXBlbmRlbmNpZXMgb2YgYFNHSV9JT0MzX0VUSGAuIFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBvYnNlcnZhdGlvbjsgaXQncyB0aGUgZnVuZGFtZW50YWwgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmUuIEknbSB0aGlua2luZywgXCJXaGF0IGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIHRoYXQgKmVuYWJsZSogYFNHSV9JT0MzX0VUSGAgdG8gZnVuY3Rpb24/XCIgSXMgaXQgbG93LWxldmVsIGhhcmR3YXJlIHJlZ2lzdGVycz8gRHJpdmVyIG1vZHVsZXM/IFNwZWNpZmljIGtlcm5lbCB2ZXJzaW9ucz8gVGhpcyBpcyB0aGUga2luZCBvZiBpbW1lZGlhdGUgc2NvcGluZyBJIGFsd2F5cyBkby4gSXQncyBhYm91dCBlc3RhYmxpc2hpbmcgdGhlIGNvbnRleHQgYW5kIHRoZSBib3VuZGFyaWVzIG9mIHRoaXMgdGhpbmcuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIHdpbGwgZGljdGF0ZSBob3cgSSBwcm9jZWVkIHdpdGggYW55IHN1YnNlcXVlbnQgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyNzo0My4zNjE2MDQxNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDYwMTMzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0dJX0lPQzNfRVRIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnPTE4PWlmIE5FVF9WRU5ET1JfU0dJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWc6MjA6Y29uZmlnIFNHSV9JT0MzX0VUSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIlNHSSBJT0MzIEV0aGVybmV0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyNzo0My40MjYyMTM0NTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjczNjE5MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgU0dJIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgU0dJIEV0aGVybmV0IGRyaXZlci4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMC4gSSdtIGd1ZXNzaW5nIHRoYXQgbGluZSB3aWxsIGxpa2VseSBpbnRyb2R1Y2UgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGVuYWJsaW5nIHRoaXMgc3BlY2lmaWMgZHJpdmVyLCBvciBwZXJoYXBzIGEgY29yZSBkZXBlbmRlbmN5LiBJIGV4cGVjdCB0byBzZWUgc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBhIGBjb25maWcgU0dJX0VUSEVSTkVUYCB3aXRoIGFzc29jaWF0ZWQgYGJvb2xgIG9yIGB0cmlzdGF0ZWAgYW5kIGxpa2VseSBzb21lIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLiBUaGUgc3Vycm91bmRpbmcgY29udGV4dCBhdCB0aGF0IGxpbmUgc2hvdWxkIGlsbHVtaW5hdGUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBkcml2ZXIgaXMgY29uc2lkZXJlZCBhIHZhbGlkIG9yIGRlc2lyYWJsZSBjaG9pY2UsIGFuZCB3aGljaCBoYXJkd2FyZSBvciBvdGhlciBzdWJzeXN0ZW0gZGVwZW5kZW5jaWVzIGl0IGFzc3VtZXMuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHVwc3RyZWFtIG9yIGRvd25zdHJlYW0gY29tcGF0aWJpbGl0eSBpcyBhY2hpZXZlZCwgYW5kIHdoYXQgaWYgYW55LCB0aGUgaW1wbGljYXRpb25zIHdvdWxkIGJlIGlmIEkgd2VyZSB0byBlbmFibGUgb3IgZGlzYWJsZSBpdC4gVWx0aW1hdGVseSwgSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gdGVsbCBtZSB0aGUgZnVuZGFtZW50YWwgcGFyYW1ldGVycyBpbiBvcmRlciB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBpbnRvIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyNzo1Mi4wOTk4MzUxNjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxNTpcXHRcXHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgU0dJIGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWQgZm9yXFxuICAxNjpcXHRcXHQgIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0aWYgTkVUX1ZFTkRPUl9TR0lcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIFNHSV9JT0MzX0VUSFxcbiAgMjE6XFx0XFx0Ym9vbCBcXFwiU0dJIElPQzMgRXRoZXJuZXRcXFwiXFxuICAyMjpcXHRcXHRkZXBlbmRzIG9uIFBDSSBcXHUwMDI2XFx1MDAyNiBTR0lfTUZEX0lPQzNcXG4gIDIzOlxcdFxcdHNlbGVjdCBDUkMxNlxcbiAgMjQ6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyNTpcXHRcXHRzZWxlY3QgTUlJXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgb2YgdGhpcyB0eXBlLCBzYXkgWSBoZXJlLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRjb25maWcgU0dJX08yTUFDRV9FVEhcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJTR0kgTzIgTUFDRSBGYXN0IEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIFNHSV9JUDMyPXlcXG4gIDMyOlxcdFxcbiAgMzM6XFx0ZW5kaWYgIyBORVRfVkVORE9SX1NHSVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyNzo1Mi4wOTk5MTI3OTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjY2MTI1OTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb25kaXRpb25hbCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGhpbmdlcyBvbiBhIHBhcnRpY3VsYXIgc2V0IG9mIGRlcGVuZGVuY2llcy4gSXQgcmVhbGx5IGJvaWxzIGRvd24gdG8gd2hldGhlciBgUENJIFx1MDAyNlx1MDAyNiBTR0lfTUZEX0lPQzNgIGlzIHRydWUuIFRoYXQgYFx1MDAyNlx1MDAyNmAgb3BlcmF0b3IgaXMgdGhlIGtleS4gU28sIHRoZSBxdWVzdGlvbiBpcywgKmFyZSogYm90aCBvZiB0aG9zZSBjb25kaXRpb25zIG1ldD9cblxuSSd2ZSBnb3QgdG8gY2hlY2sgYFNHSV9NRkRfSU9DM2AuIEknbGwgc3RhcnQgdGhlcmUuIFRoYXQncyB0aGUgZmlyc3QgY3JpdGljYWwgcGllY2UgdG8gZXZhbHVhdGUuIE9uY2UgSSB1bmRlcnN0YW5kIHRoZSBzdGF0ZSBvZiAqdGhhdCogc3ltYm9sLCBJIGNhbiBkZXRlcm1pbmUgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBsb2dpYy4gVGhlIFBDSSBzaWRlIGlzIHByb2JhYmx5IHdlbGwgdW5kZXJzdG9vZCwgc28gSSdsbCBzdGFydCB3aXRoIHRoZSB1bmtub3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyODoxOC43NjExNzQ5NjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MTI2NjA1MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNHSV9NRkRfSU9DM1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZmQvS2NvbmZpZz0yNDMzPWNvbmZpZyBSQVZFX1NQX0NPUkVcXG4tLVxcbmRyaXZlcnMvbWZkL0tjb25maWctMjQ0MC1cXG5kcml2ZXJzL21mZC9LY29uZmlnOjI0NDE6Y29uZmlnIFNHSV9NRkRfSU9DM1xcbmRyaXZlcnMvbWZkL0tjb25maWctMjQ0Mi1cXHRib29sIFxcXCJTR0kgSU9DMyBjb3JlIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjg6MjIuNTczODQ0MTU3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NTU3MDU2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGBkcml2ZXJzL21mZC9LY29uZmlnYCBmaWxlLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gc29tZXRoaW5nIGFyb3VuZCBsaW5lIDI0NDEuIFRoYXQncyB1c3VhbGx5IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgYSBwYXJ0aWN1bGFyIE1GRCBkcml2ZXIgaXMgY29uZmlndXJlZC4gSSBrbm93IGhvdyBLY29uZmlnIGZpbGVzIGFyZSBzdHJ1Y3R1cmVkLCBzbyBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIG9wdGlvbnMgZGVmaW5lZCB0aGVyZSwgcmVsYXRpbmcgdG8gd2hpY2ggZHJpdmVycyBhcmUgYnVpbHQsIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcywgYW5kIHBvdGVudGlhbGx5IGhvdyB0aGV5IGludGVyYWN0LiBMaW5lIDI0NDEgc2hvdWxkIHB1dCBtZSByaWdodCBpbiB0aGUgem9uZSwgb3IgZ2l2ZSBtZSBhIHByZXR0eSBnb29kIGluZGljYXRpb24gb2Ygd2hlcmUgdG8gc3RhcnQuIFdpdGggbXkgZXhwZXJpZW5jZSBpbiB0aGlzIHNwYWNlLCBJIGFudGljaXBhdGUgYmVpbmcgYWJsZSB0byBxdWlja2x5IGludGVycHJldCB0aGUgcmVsZXZhbnQgY29kZSBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODIyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjg6MjguNTI5NTUzMzgxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21mZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MzU6XFx0XFx0ZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVU1xcbjI0MzY6XFx0XFx0c2VsZWN0IENSQ19JVFVfVFxcbjI0Mzc6XFx0XFx0aGVscFxcbjI0Mzg6XFx0XFx0ICBTZWxlY3QgdGhpcyB0byBnZXQgc3VwcG9ydCBmb3IgdGhlIFN1cGVydmlzb3J5IFByb2Nlc3NvclxcbjI0Mzk6XFx0XFx0ICBkZXZpY2UgZm91bmQgb24gc2V2ZXJhbCBkZXZpY2VzIGluIFJBVkUgbGluZSBvZiBoYXJkd2FyZS5cXG4yNDQwOlxcdFxcbjI0NDE6XFx0Y29uZmlnIFNHSV9NRkRfSU9DM1xcbjI0NDI6XFx0XFx0Ym9vbCBcXFwiU0dJIElPQzMgY29yZSBkcml2ZXJcXFwiXFxuMjQ0MzpcXHRcXHRkZXBlbmRzIG9uIFBDSSBcXHUwMDI2XFx1MDAyNiBNSVBTIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuMjQ0NDpcXHRcXHRzZWxlY3QgTUZEX0NPUkVcXG4yNDQ1OlxcdFxcdGhlbHBcXG4yNDQ2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBiYXNpYyBzdXBwb3J0IGZvciB0aGUgU0dJIElPQzMtYmFzZWRcXG4yNDQ3OlxcdFxcdCAgY29udHJvbGxlciBjYXJkcy4gIFRoaXMgb3B0aW9uIGRvZXMgbm90IGVuYWJsZSBhbnkgc3BlY2lmaWNcXG4yNDQ4OlxcdFxcdCAgZnVuY3Rpb25zIG9uIHN1Y2ggYSBjYXJkLCBidXQgcHJvdmlkZXMgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlXFxuMjQ0OTpcXHRcXHQgIGZvciBvdGhlciBkcml2ZXJzIHRvIHV0aWxpemUuXFxuMjQ1MDpcXHRcXG4yNDUxOlxcdFxcdCAgSWYgeW91IGhhdmUgYW4gU0dJIE9yaWdpbiwgT2N0YW5lLCBvciBhIFBDSSBJT0MzIGNhcmQsXFxuMjQ1MjpcXHRcXHQgIHRoZW4gc2F5IFkuIE90aGVyd2lzZSBzYXkgTi5cXG4yNDUzOlxcdFxcbjI0NTQ6XFx0Y29uZmlnIE1GRF9JTlRFTF9NMTBfQk1DX0NPUkVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjg6MjguNTI5NzQzMzAxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MDc1NTUyMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoIEZ1enppbmc/IEEgTUlQUy1TcGVjaWZpYyBEcml2ZXIgRGVlcCBEaXZlKipcblxuT2theSwgc28gdGhpcyBpcyBkZXBlbmRlbnQgb24gYFBDSSBcdTAwMjZcdTAwMjYgTUlQUyBcdTAwMjZcdTAwMjYgNjRCSVRgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYSBNSVBTLXNwZWNpZmljIGRyaXZlci4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgcmVhbGlzdGljYWxseSBmdXp6IHRoaXM/IE15IGluaXRpYWwgdGhvdWdodCBpcyB1c3VhbGx5IHdlIGZvY3VzIG9uIHg4Nl82NCBhbmQgYXJtNjQsIG1heWJlIHNvbWUgb3RoZXJzLCBidXQgTUlQUyBpc24ndCB0eXBpY2FsbHkgb24gdGhlIHJhZGFyIHVubGVzcyBzcGVjaWZpY2FsbHkgY29uZmlndXJlZCBmb3IgaXQgaW4gc3l6a2FsbGVyLlxuXG5CdXQgd2FpdCwgdGhlIGluc3RydWN0aW9ucyBhcmUgdmVyeSBzcGVjaWZpYzogSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBpdCdzICppbXBvc3NpYmxlKiB0byByZWFjaCB0aGUgY29kZSBwYXRocyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gU28sIGlzIHRoZSBTR0kgSU9DMyBlbXVsYXRlZCBpbiBRRU1VPyBJIG5lZWQgdG8gY2hlY2sgaWYgUUVNVSBldmVuICpoYXMqIGFuIElPQzMgZGV2aWNlLiBJIGNhbiBxdWlja2x5IHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSwgYnV0IHRoZSBRRU1VIHNvdXJjZSBpc24ndCByZWFkaWx5IGF2YWlsYWJsZSBoZXJlLlxuXG5Pa2F5LCBsZXQncyB0aGluayBhYm91dCB0aGlzLiBJdCdzIGEgUENJIGRldmljZSwgYW5kIHN5emthbGxlciAqY291bGQqIHBvdGVudGlhbGx5IGZ1enogUENJIGRldmljZXMgdmlhIGluamVjdGlvbiBpZiBpdCdzIGNvbXBpbGVkIGluLiBCdXQgdGhpcyBgU0dJX01GRF9JT0MzYCBpcywgYWdhaW4sIGRlcGVuZGVudCBvbiBgTUlQUyBcdTAwMjZcdTAwMjYgNjRCSVRgLiBJZiBzeXprYWxsZXIgaXMgcnVubmluZyBvbiB4ODZfNjQgb3IgYXJtNjQsIHRoaXMgZHJpdmVyICp3b24ndCogZXZlbiBiZSBjb21waWxlZC4gQ2FuIHdlIGNvbXBpbGUgaXQgZm9yIHg4Nl82ND8gTm8sIGJlY2F1c2Ugb2YgdGhlIGBQQ0kgXHUwMDI2XHUwMDI2IE1JUFMgXHUwMDI2XHUwMDI2IDY0QklUYCBkZXBlbmRlbmN5LiBJdCdzIGluaGVyZW50bHkgcmVzdHJpY3RlZCB0byBNSVBTLiBTbywgZ2l2ZW4gdGhlIHVzdWFsIHN5emthbGxlciBjb25maWd1cmF0aW9ucywgaXQncyAqbGlrZWx5KiBub3QgYmVpbmcgZnV6emVkLlxuXG5Ib3dldmVyLCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiwgc3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBNSVBTISBUaGUgc3l6LW1hbmFnZXIgY2FuIHJ1biBNSVBTIFZNcywgd2hpY2ggY2hhbmdlcyB0aGluZ3MgYSBiaXQuIFNvLCBpcyBpdCB3b3J0aCB0aGUgZWZmb3J0P1xuXG5MZXQncyBjaGVjayBpZiB0aGUgYGlvYzNldGhfcmVtb3ZlYCBmdW5jdGlvbiBpcyByZWFjaGFibGUuIEl0J3MgYSBwbGF0Zm9ybSBkZXZpY2UgcmVtb3ZlIGZ1bmN0aW9uLiBPa2F5LCBgaW9jM2V0aF9yZW1vdmVgIHRha2VzIGEgYHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXZgLiBJIHNob3VsZCBub3cgZGlnIGludG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguY2Agc291cmNlIGNvZGUsIHNvIEkgY2FuIGNvbmZpcm0gaXRzIHJlYWNoYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3MiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI4OjU1LjYwNTI5ODYxMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTYwOlxcdG91dF9mcmVlOlxcbiA5NjE6XFx0XFx0ZnJlZV9uZXRkZXYoZGV2KTtcXG4gOTYyOlxcdFxcdHJldHVybiBlcnI7XFxuIDk2MzpcXHR9XFxuIDk2NDpcXHRcXG4gOTY1OlxcdHN0YXRpYyB2b2lkIGlvYzNldGhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIDk2NjpcXHR7XFxuIDk2NzpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XFxuIDk2ODpcXHRcXHRzdHJ1Y3QgaW9jM19wcml2YXRlICppcCA9IG5ldGRldl9wcml2KGRldik7XFxuIDk2OTpcXHRcXG4gOTcwOlxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2KGRldik7XFxuIDk3MTpcXHRcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2aXAtXFx1MDAzZWlvYzNfdGltZXIpO1xcbiA5NzI6XFx0XFxuIDk3MzpcXHRcXHRkbWFfZnJlZV9jb2hlcmVudChpcC1cXHUwMDNlZG1hX2RldiwgUlhfUklOR19TSVpFLCBpcC1cXHUwMDNlcnhyLCBpcC1cXHUwMDNlcnhyX2RtYSk7XFxuIDk3NDpcXHRcXHRkbWFfZnJlZV9jb2hlcmVudChpcC1cXHUwMDNlZG1hX2RldiwgVFhfUklOR19TSVpFICsgU1pfMTZLIC0gMSwgaXAtXFx1MDAzZXR4X3JpbmcsIGlwLVxcdTAwM2V0eHJfZG1hKTtcXG4gOTc1OlxcdFxcbiA5NzY6XFx0XFx0ZnJlZV9uZXRkZXYoZGV2KTtcXG4gOTc3OlxcdH1cXG4gOTc4OlxcdFxcbiA5Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI4OjU1LjYwNTQxNjk1MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mzk1MzI2MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogQSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBJdCBhZGRyZXNzZXMgYSB1c2UtYWZ0ZXItZnJlZSBvciBhIHNpbWlsYXIgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXR5LiBUaGUgY29yZSBvZiB0aGUgZml4IGlzIHRvIHByb3Blcmx5IHVucmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCBkZWxldGUgdGhlIHRpbWVyIGJlZm9yZSBkZWFsbG9jYXRpbmcgdGhlIERNQSByaW5ncy4gRnVuY3Rpb25hbGx5LCBpdCdzIGEgZ29vZCBjaGFuZ2UsIHRpZ2h0ZW5pbmcgdXAgc29tZSBwb3RlbnRpYWxseSBsb29zZSBlbmRzLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBwdXR0aW5nIHRocm91Z2ggdGhlIGZ1enppbmcgcGlwZWxpbmU/IFRoZSBpbml0aWFsIHRob3VnaHQgaXMsIHByb2JhYmx5LiBNZW1vcnkgc2FmZXR5IGJ1Z3MgYXJlIHRoZSBicmVhZCBhbmQgYnV0dGVyIG9mIGZ1enppbmcgZWZmb3J0cy4gSG93ZXZlciwgdGhpcyBpcyBhIE1JUFMtc3BlY2lmaWMgZHJpdmVyLiBJZiBpdCB3ZXJlIGEgZHJpdmVyIHRoYXQgd2FzIHBhcnQgb2YgYSBwbGF0Zm9ybSwgSSdkIGhhdmUgdG8gZW5zdXJlIHRoYXQgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgb24gYSBjb21wYXRpYmxlIE1JUFMgaW5zdGFuY2UsIG9yIGhhdmUgdG8gZmlndXJlIG91dCBhIHdheSBvZiB0ZXN0aW5nIHRoZSBtb2R1bGUuIE9mIGNvdXJzZSwgSSBrbm93IHRoYXQgc3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBNSVBTLCB0aG91Z2ggdGhpcyBtaWdodCByZXF1aXJlIG1vcmUgc2V0dXAuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gdGhlIGVtYWlsIG1lbnRpb25lZCBgc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VgLiBEb2VzIHRoYXQgbWVhbiBzeXprYWxsZXIgKmRpZCogZmluZCB0aGlzIGJ1Zz8gTm8sIHRoYXQncyBqdXN0IHRoZSBjb21taXQgYXV0aG9yIGluIHRoaXMgdGVzdGluZyBlbnZpcm9ubWVudC4gV2FpdCwgdGhpcyBwYXRjaCBpcyBmcm9tIGEgc3l6a2FsbGVyIGNsdXN0ZXIsIHRoZSBzeXotY2x1c3Rlci4gU28gdGhhdCBtZWFucyBpdCB3YXMsIGluIGZhY3QsIGZvdW5kIGJ5IHN5emthbGxlci5cblxuTGV0J3MgcXVpY2tseSBjaGVjayB0aGUgZHJpdmVyIGl0c2VsZi4gSG1tLCBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyLiBUaGF0IGNoYW5nZXMgdGhpbmdzIGEgYml0LiBIb3cgaXMgdGhlIHBsYXRmb3JtIGRldmljZSBhY3R1YWxseSBjcmVhdGVkPyBLbm93aW5nIHRoYXQgbWlnaHQgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlIGF0dGFjayBzdXJmYWNlIGFuZCBpZiB0aGUgZnV6emluZyBzZXR1cCB3aWxsIGJlIHN0cmFpZ2h0Zm9yd2FyZC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXZpY2UgY3JlYXRpb24gbWVjaGFuaXNtIHRvIGNvbXBsZXRlIG15IGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NjUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyOTowMS4wMDA3NDU3OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMDkxNTgwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2MzZXRoX3JlbW92ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYz04Mjg9c3RhdGljIGludCBpb2MzZXRoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYy05NjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmM6OTY1OnN0YXRpYyB2b2lkIGlvYzNldGhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmMtOTY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jPTEyNzU9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW9jM2V0aF9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmMtMTI3Ni1cXHQucHJvYmUgID0gaW9jM2V0aF9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYzoxMjc3OlxcdC5yZW1vdmUgPSBpb2MzZXRoX3JlbW92ZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYy0xMjc4LVxcdC5kcml2ZXIgPSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI5OjAyLjMxMTY2OTE3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM3OTY0MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIGNvbnRleHQgaXMgbXkgYXJlYSBvZiBleHBlcnRpc2U6XG5cbioqUGxhdGZvcm0gRHJpdmVyIERlY29kaW5nKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBwbGF0Zm9ybSBkcml2ZXIgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBpbnN0YW50aWF0aW9uIG9mIHRoaXMgcGxhdGZvcm0gZGV2aWNlLiBUaGUgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgaXRzIGNyZWF0aW9uIGlzIHRoZSBNRkQgKE11bHRpLUZ1bmN0aW9uIERldmljZSkgY29yZSBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYGRyaXZlcnMvbWZkL2lvYzMuY2AgZHJpdmVyLiBUaGF0J3MgYSBjbGFzc2ljIHBhdHRlcm4uIEdpdmVuIHRoZSBmaWxlbmFtZSwgSSdtIGV4cGVjdGluZyB0aGlzIGBpb2MzLmNgIGRyaXZlciB0byBiZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgYmFzaWMgcGxhdGZvcm0gZGV2aWNlIHN0cnVjdHVyZSB0aGF0IG91ciBkcml2ZXIgd2lsbCB0aGVuIGhvb2sgaW50by4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCByZWxhdGlvbnNoaXAsIG9mIGNvdXJzZSwgYnV0IHRoYXQncyBteSB3b3JraW5nIGh5cG90aGVzaXMuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGNvbmZpcm0gdGhpcyBpbnN0YW50aWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDkzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjk6MDUuNDQ5NjM2NTczWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTE0ODQ1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9jMy1ldGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZmQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWZkL2lvYzMuYz0yNTY9c3RhdGljIHN0cnVjdCBtZmRfY2VsbCBpb2MzX2V0aF9jZWxsc1tdID0ge1xcbmRyaXZlcnMvbWZkL2lvYzMuYy0yNTctXFx0e1xcbmRyaXZlcnMvbWZkL2lvYzMuYzoyNTg6XFx0XFx0Lm5hbWUgPSBcXFwiaW9jMy1ldGhcXFwiLFxcbmRyaXZlcnMvbWZkL2lvYzMuYy0yNTktXFx0XFx0LnJlc291cmNlcyA9IGlvYzNfZXRoX3Jlc291cmNlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjk6MDUuNzYxMTI5MzYzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2OTEyNDMzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgYGlvYzNldGhfcmVtb3ZlYCB3aXRoIFN5emthbGxlcioqXG5cbk9rYXksIHNvIGBpb2MzLWV0aGAgaXMgZGVmaW5pdGVseSBib3JuIGZyb20gYGRyaXZlcnMvbWZkL2lvYzMuY2AsIHdoaWNoIGlzIGEgUENJIGRyaXZlci4gVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhhdCBpZiBTeXprYWxsZXIgbWFuYWdlcyB0byBpbmplY3QgYSBQQ0kgZGV2aWNlIHRoYXQgbWF0Y2hlcyB0aGUgY2hhcmFjdGVyaXN0aWNzIGRlZmluZWQgaW4gYGlvYzMuY2AsIGl0J2xsIHRyaWdnZXIgdGhlIGNyZWF0aW9uIG9mIHRoZSBNRkQgKE11bHRpLUZ1bmN0aW9uIERldmljZSkgY2VsbHMuIFRoYXQgaW4gdHVybiwgd2lsbCBwcm9iZSBhbmQgcmVnaXN0ZXIgYGlvYzMtZXRoYC4gTG9naWNhbGx5LCB0aGVuLCByZW1vdmluZyB0aGlzIGluamVjdGVkIFBDSSBkZXZpY2Ugc2hvdWxkIGxlYWQgdXMgdG8gdGhlIGBpb2MzZXRoX3JlbW92ZWAgZnVuY3Rpb24uIFRoaXMgc2VlbXMgbGlrZSBhIHBlcmZlY3RseSBwbGF1c2libGUgcGF0aCB0byB0YWtlIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBhc3N1bWluZyB0aGUgbmVjZXNzYXJ5IGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkIGluLCBvZiBjb3Vyc2UuXG5cblRoZSBjYXRjaCwgYXMgYWx3YXlzLCBpcyB0aGUgYXJjaGl0ZWN0dXJlLiBJdCBsb29rcyBsaWtlIHRoaXMgc3BlY2lmaWMgc2V0dXAgaXMgZGVwZW5kZW50IG9uIGBNSVBTIFx1MDAyNlx1MDAyNiA2NEJJVGAuIEhtbSwgY2FuIHdlIGVuYWJsZSB0aGlzIG9uIHg4Nj8gTm8sIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGV4cGxpY2l0OiBgUENJIFx1MDAyNlx1MDAyNiBNSVBTIFx1MDAyNlx1MDAyNiA2NEJJVGAuIFRoYXQgY2xvc2VzIHRoYXQgYXZlbnVlLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uU3l6a2FsbGVyICpkb2VzKiBmdXp6IE1JUFM2NCBhcmNoaXRlY3R1cmVzLCBkb2Vzbid0IGl0PyBUaGF0IGNoYW5nZXMgdGhpbmdzLiBUaGlzIGlzIGFic29sdXRlbHkgd29ydGggcHVyc3VpbmchIFdlIG5lZWQgdG8gZW5zdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBzZXQgdXAuIExldCBtZSBkaWcgaW50byB0aGUgY29uZmlncy4gV2UgbmVlZCB0byBlbmFibGUgYFNHSV9NRkRfSU9DM2AgYW5kIGBTR0lfSU9DM19FVEhgLiBBaCwgZ29vZCwgYm90aCBhcmUgYm9vbGVhbiBvcHRpb25zLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MzAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjk6MTUuNDUyMzc1MjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NTIwNjg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0dJX01GRF9JT0MzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWZkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZmQvS2NvbmZpZz0yNDMzPWNvbmZpZyBSQVZFX1NQX0NPUkVcXG4tLVxcbmRyaXZlcnMvbWZkL0tjb25maWctMjQ0MC1cXG5kcml2ZXJzL21mZC9LY29uZmlnOjI0NDE6Y29uZmlnIFNHSV9NRkRfSU9DM1xcbmRyaXZlcnMvbWZkL0tjb25maWctMjQ0Mi1cXHRib29sIFxcXCJTR0kgSU9DMyBjb3JlIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjk6MTUuNzQ3NTg5OTkxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNjEwNzI0NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzOlxuXG4qKlJlZm9jdXNpbmcgb24gYFNHSV9JT0MzX0VUSGAqKlxuXG5SaWdodCwgc28sIEknbSBqdXN0IHF1aWNrbHkgcnVubmluZyB0aHJvdWdoIHRoZSBtZW50YWwgY2hlY2tsaXN0IGhlcmUuIEkgd2FzIHdvcmtpbmcgb24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBwcmV2aW91c2x5LCBhbmQgaXQncyB0aW1lIHRvIGNpcmNsZSBiYWNrLiBMZXQncyBnZXQgYmFjayB0byBleGFtaW5pbmcgYFNHSV9JT0MzX0VUSGAuIE5lZWQgdG8gcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggd2hhdCB3YXMgaGFwcGVuaW5nIHRoZXJlLCByZWZyZXNoIG15IG1lbW9yeSBvbiBhbnkgb3V0c3RhbmRpbmcgaXNzdWVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgcmUtZXZhbHVhdGUgdGhhdCBzcGVjaWZpYyBlbGVtZW50IG9mIHRoZSBzeXN0ZW0uIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUxMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI5OjI3LjM1ODMxODcyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzQ4OTI3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0dJX0lPQzNfRVRIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnPTE4PWlmIE5FVF9WRU5ET1JfU0dJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWc6MjA6Y29uZmlnIFNHSV9JT0MzX0VUSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIlNHSSBJT0MzIEV0aGVybmV0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyOToyNy40MjU4MTQ2ODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU4OTkxOTUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkVuYWJsaW5nIGBORVRfVkVORE9SX1NHSWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21ldGhpbmcsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBtaW5kIGlzIHRoYXQgYE5FVF9WRU5ET1JfU0dJYCBuZWVkcyB0byBiZSBhY3RpdmUuIEl04oCZcyBhbiBlc3NlbnRpYWwgY29uZmlndXJhdGlvbiBlbGVtZW50LiBJJ20gbm90IGVudGlyZWx5IGNlcnRhaW4gd2h5IGl0J3Mgbm90IGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IEkga25vdyBpdCdzIGEgcHJlcmVxdWlzaXRlIGZvciB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgYmVpbmcgc2V0LiBJdCdzIHRoZSBidWlsZGluZyBibG9jaywgdGhlIGZvdW5kYXRpb24gdGhhdCBuZWVkcyB0byBiZSBpbiBwbGFjZSBmaXJzdC4gV2l0aG91dCBpdCwgdGhpbmdzIHdpbGwgc2ltcGx5IGJyZWFrLCBvciBub3QgZXZlbiBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgwNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI5OjMwLjAxNTc0MjY5OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3MDkxOTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfVkVORE9SX1NHSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZy01LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnOjY6Y29uZmlnIE5FVF9WRU5ET1JfU0dJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWctNy1cXHRib29sIFxcXCJTR0kgZGV2aWNlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjk6MzAuMjkyODQxMjAyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTY4MjQ5OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERyaXZlciBCdWcgRml4IGZvciBQb3RlbnRpYWwgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHJlbGF0ZWQgdG8gU0dJIG5ldHdvcmsgZHJpdmVycyDigJMgc3BlY2lmaWNhbGx5LCB0aGluZ3MgZmxhZ2dlZCB1bmRlciBgTkVUX1ZFTkRPUl9TR0lgLCBgU0dJX01GRF9JT0MzYCwgYW5kIGBTR0lfSU9DM19FVEhgLiBUaGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYGlvYzNldGhfcmVtb3ZlYCwgd2hpY2ggaXMgdGhlIG9uZSBiZWluZyBtb2RpZmllZCwgc28gdGhhdCdzIG91ciBmb2N1cyBzeW1ib2wuXG5cbklzIGBpb2MzZXRoX3JlbW92ZWAgYSBnb29kIHN0YXJ0aW5nIHBvaW50PyBZZXMsIGJlY2F1c2UgdGhlIHBhdGNoIGRpcmVjdGx5IGNoYW5nZXMgdGhpcyBmdW5jdGlvbi4gTm93LCBhcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb25zIGFmZmVjdGVkPyBObywgdGhlIGRpZmYgZXhwbGljaXRseSBvbmx5IHRvdWNoZXMgYGlvYzNldGhfcmVtb3ZlYC5cblxuTXkgbmV4dCB0aG91Z2h0IGlzIHdoZXRoZXIgYGlvYzNldGhfcmVtb3ZlYCBpcyBldmVuIHJlYWNoYWJsZS4gTGV0J3Mgc2VlLi4uSWYgYGlvYzNldGhfcHJvYmVgIHN1Y2NlZWRzLCB0aGVuIGBpb2MzZXRoX3JlbW92ZWAgd2lsbCBiZSBjYWxsZWQgZHVyaW5nIGRldmljZSByZW1vdmFsLCByaWdodD8gRGV2aWNlIHJlbW92YWwgY2FuIGJlIHRyaWdnZXJlZCBieSBQQ0kgaG90cGx1ZyBldmVudHMuIFNpbmNlIHdlIGNhbiBzaW11bGF0ZSB0aG9zZSB1c2luZyBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIgYnkgaW5qZWN0aW5nIFBDSSBldmVudHMsIHRoZW4gYGlvYzNldGhfcmVtb3ZlYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS5cblxuTm93LCBjaGVja2luZyB0aGUgZGVwZW5kZW5jaWVzIG9mIGBTR0lfTUZEX0lPQzNgIHJldmVhbHMgaXQgZGVwZW5kcyBvbiBgUENJIFx1MDAyNlx1MDAyNiBNSVBTIFx1MDAyNlx1MDAyNiA2NEJJVGAuIFRoYXQgbWVhbnMgdGhpcyBzcGVjaWZpYyBkcml2ZXIgd2lsbCBvbmx5IGJlIHRlc3RlZCBvbiBNSVBTIGFyY2hpdGVjdHVyZXMuIEdvb2QgdGhpbmcgc3l6a2FsbGVyIHN1cHBvcnRzIE1JUFMsIHNvIHRoYXQncyBmaW5lLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IHJldmlldyB0aGUgcGF0Y2ggY29kZSBpdHNlbGYgYWdhaW4uIEl0IGxvb2tzIGxpa2UgdGhlIGZpeCBpcyByZW9yZGVyaW5nIHRoZSBjbGVhbnVwIHN0ZXBzIGluIGBpb2MzZXRoX3JlbW92ZWAuIEl0IHNoaWZ0cyB0aGUgY2FsbHMgdG8gYHVucmVnaXN0ZXJfbmV0ZGV2YCBhbmQgYHRpbWVyX2RlbGV0ZV9zeW5jYCBiZWZvcmUgdGhlIERNQSByaW5nIGZyZWVpbmcuIFRoZSBpc3N1ZSBpcyBhIHVzZS1hZnRlci1mcmVlLCB3aGVyZSB0aGUgRE1BIHJpbmdzIHdlcmUgZnJlZWQgYmVmb3JlIHRoZSBuZXQgZGV2aWNlIHdhcyB1bnJlZ2lzdGVyZWQgYW5kIHRoZSB0aW1lciB3YXMgZGVsZXRlZC4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSB0aW1lciBmaXJlZCBvciB0aGUgbmV0ZGV2IHdhcyBzdGlsbCBhY3RpdmUsIGl0IGNvdWxkIGFjY2VzcyBmcmVlZCBETUEgcmluZ3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZGRyZXNzaW5nIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eS5cblxuU28sIGBORVRfVkVORE9SX1NHSWAsIGBTR0lfTUZEX0lPQzNgLCBgU0dJX0lPQzNfRVRIYCwgd2l0aCBgaW9jM2V0aF9yZW1vdmVgIGFzIHRoZSBrZXkuIFRoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGluIHRoZSBkcml2ZXIncyByZW1vdmFsIHJvdXRpbmUuIEl04oCZcyByZWFjaGFibGUgdmlhIFBDSSBpbmplY3Rpb24gaW4gTUlQUzY0IGVudmlyb25tZW50cywgd2hpY2ggbWVhbnMgaXQgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJJ2xsIGZsYWcgdGhpcyB0byBiZSBhZGRlZCB0byB0aGUgZnV6emluZyBxdWV1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA2MSwiT3V0cHV0VG9rZW5zIjoxMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjk6NDMuMjYxMDk0MDY4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUzNDUxODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfU0dJXCIsXG4gICAgXCJTR0lfTUZEX0lPQzNcIixcbiAgICBcIlNHSV9JT0MzX0VUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvYzNldGhfcmVtb3ZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyAocG90ZW50aWFsIHVzZS1hZnRlci1mcmVlKSBpbiB0aGUgZHJpdmVyJ3MgcmVtb3ZlIHJvdXRpbmUgYnkgcmVvcmRlcmluZyBjbGVhbnVwIG9wZXJhdGlvbnMuIFRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCBhbmQgcmVtb3ZlZCB2aWEgUENJIGluamVjdGlvbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChvbiBNSVBTNjQpLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfU0dJXCIsXG4gICAgXCJTR0lfTUZEX0lPQzNcIixcbiAgICBcIlNHSV9JT0MzX0VUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvYzNldGhfcmVtb3ZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyAocG90ZW50aWFsIHVzZS1hZnRlci1mcmVlKSBpbiB0aGUgZHJpdmVyJ3MgcmVtb3ZlIHJvdXRpbmUgYnkgcmVvcmRlcmluZyBjbGVhbnVwIG9wZXJhdGlvbnMuIFRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCBhbmQgcmVtb3ZlZCB2aWEgUENJIGluamVjdGlvbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChvbiBNSVBTNjQpLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow6bgs8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 09:17:33 +0000 UTC FinishedAt: 2026-06-29 09:29:44 +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": "32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_SGI", "SGI_MFD_IOC3", "SGI_IOC3_ETH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_SGI", "SGI_MFD_IOC3", "SGI_IOC3_ETH" ], "series_id": "f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ioc3eth_remove" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfU0dJJiMzNDssCiAgICAmIzM0O1NHSV9NRkRfSU9DMyYjMzQ7LAogICAgJiMzNDtTR0lfSU9DM19FVEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb2MzZXRoX3JlbW92ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGZ1bmN0aW9uYWwgYnVnIChwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUpIGluIHRoZSBkcml2ZXImIzM5O3MgcmVtb3ZlIHJvdXRpbmUgYnkgcmVvcmRlcmluZyBjbGVhbnVwIG9wZXJhdGlvbnMuIFRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCBhbmQgcmVtb3ZlZCB2aWEgUENJIGluamVjdGlvbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChvbiBNSVBTNjQpLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmI5ZjkwOGE3YWUwZDg5NmM2MTk2ZDY2Y2Y3NDA0NGQ0YjE2NTE4Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDA5OjI2OjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmNcbmluZGV4IDM5NzMxMDY5ZDk5ZTBiLi5iMzVmNjkyYjFhMGUxOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguY1xuQEAgLTk2NywxMSAmIzQzOzk2NywxMiBAQCBzdGF0aWMgdm9pZCBpb2MzZXRoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpO1xuIFx0c3RydWN0IGlvYzNfcHJpdmF0ZSAqaXAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuJiM0MztcdHVucmVnaXN0ZXJfbmV0ZGV2KGRldik7XG4mIzQzO1x0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2aXAtXHUwMDNlaW9jM190aW1lcik7XG4mIzQzO1xuIFx0ZG1hX2ZyZWVfY29oZXJlbnQoaXAtXHUwMDNlZG1hX2RldiwgUlhfUklOR19TSVpFLCBpcC1cdTAwM2VyeHIsIGlwLVx1MDAzZXJ4cl9kbWEpO1xuIFx0ZG1hX2ZyZWVfY29oZXJlbnQoaXAtXHUwMDNlZG1hX2RldiwgVFhfUklOR19TSVpFICYjNDM7IFNaXzE2SyAtIDEsIGlwLVx1MDAzZXR4X3JpbmcsIGlwLVx1MDAzZXR4cl9kbWEpO1xuIFxuLVx0dW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTtcbi1cdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNmlwLVx1MDAzZWlvYzNfdGltZXIpO1xuIFx0ZnJlZV9uZXRkZXYoZGV2KTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9TR0kmIzM0OywKICAgICYjMzQ7U0dJX01GRF9JT0MzJiMzNDssCiAgICAmIzM0O1NHSV9JT0MzX0VUSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lvYzNldGhfcmVtb3ZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZnVuY3Rpb25hbCBidWcgKHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSkgaW4gdGhlIGRyaXZlciYjMzk7cyByZW1vdmUgcm91dGluZSBieSByZW9yZGVyaW5nIGNsZWFudXAgb3BlcmF0aW9ucy4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGFuZCByZW1vdmVkIHZpYSBQQ0kgaW5qZWN0aW9uIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgKG9uIE1JUFM2NCksIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJiOWY5MDhhN2FlMGQ4OTZjNjE5NmQ2NmNmNzQwNDRkNGIxNjUxOGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyOSAwOToyNjo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmMKaW5kZXggMzk3MzEwNjlkOTllMGIuLmIzNWY2OTJiMWEwZTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYwpAQCAtOTY3LDExICYjNDM7OTY3LDEyIEBAIHN0YXRpYyB2b2lkIGlvYzNldGhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpb2MzX3ByaXZhdGUgKmlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAomIzQzOwl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwomIzQzOwl0aW1lcl9kZWxldGVfc3luYygmYW1wO2lwLSZndDtpb2MzX3RpbWVyKTsKJiM0MzsKIAlkbWFfZnJlZV9jb2hlcmVudChpcC0mZ3Q7ZG1hX2RldiwgUlhfUklOR19TSVpFLCBpcC0mZ3Q7cnhyLCBpcC0mZ3Q7cnhyX2RtYSk7CiAJZG1hX2ZyZWVfY29oZXJlbnQoaXAtJmd0O2RtYV9kZXYsIFRYX1JJTkdfU0laRSAmIzQzOyBTWl8xNksgLSAxLCBpcC0mZ3Q7dHhfcmluZywgaXAtJmd0O3R4cl9kbWEpOwogCi0JdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQl0aW1lcl9kZWxldGVfc3luYygmYW1wO2lwLSZndDtpb2MzX3RpbWVyKTsKIAlmcmVlX25ldGRldihkZXYpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBEcml2ZXIgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmNgLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSB0d2Vha2VkIHRoZSBjbGVhbnVwIHNlcXVlbmNlIGluIHRoZSBgaW9jM2V0aF9yZW1vdmVgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIHNoaWZ0ZWQgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYSBiaXQuIEl0IHVzZWQgdG8gYmUgYHVucmVnaXN0ZXJfbmV0ZGV2KGRldilgIGFuZCBgdGltZXJfZGVsZXRlX3N5bmMoJmFtcDtpcC0mZ3Q7aW9jM190aW1lcilgICphZnRlciogdGhlIGBkbWFfZnJlZV9jb2hlcmVudGAgY2FsbCwgYnV0IG5vdyB0aGV5IGFyZSAqYmVmb3JlKiBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hhdCBraW5kIG9mIGVudmlyb25tZW50IGFyZSB3ZSBkZWFsaW5nIHdpdGggaGVyZT8gRG9lcyB0aGlzIHBvdGVudGlhbGx5IGltcGFjdCB2aXJ0dWFsaXplZCBzeXN0ZW1zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGRyaXZlciBpcyBldmVuIHVzZWQgaW4gbW9kZXJuIHNldHVwcy4gR2l2ZW4gdGhlIFNHSSBJT0MzIEV0aGVybmV0IHJlZmVyZW5jZSwgaXQgaXMgYW4gb2xkZXIgdGVjaG5vbG9neSwgYnV0IHdvcnRoIGV4cGxvcmluZy4KCkkgc2hvdWxkIHByb2JhYmx5IGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgdG8gY29uZmlybSwgYW5kIHBlcmhhcHMgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZ2AgZmlsZSBvciBldmVuIGRpcmVjdGx5IGV4YW1pbmUgdGhlIGBpb2MzLWV0aC5jYCBzb3VyY2UgY29kZSB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoaXMgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2hlbiogaXQmIzM5O3MgY29uZmlndXJlZC4gSXMgdGhpcyBzdGlsbCByZWxldmFudCwgb3IgaXMgaXQgbGVnYWN5IGNvZGU/IFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBob3cgc2lnbmlmaWNhbnQgdGhpcyBjaGFuZ2UgYWN0dWFsbHkgaXMsIGFuZCB3aGF0IHBvdGVudGlhbCBpc3N1ZXMgaXQgY291bGQgaW50cm9kdWNlIG9yIHJlc29sdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U0dJX0lPQzNfRVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZz0xOD1pZiBORVRfVkVORE9SX1NHSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWctMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZzoyMDpjb25maWcgU0dJX0lPQzNfRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7U0dJIElPQzMgRXRoZXJuZXRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfU0dJX08yTUFDRV9FVEgpICYjNDM7PSBtZXRoLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19TR0lfSU9DM19FVEgpICYjNDM7PSBpb2MzLWV0aC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIGBTR0lfSU9DM19FVEhgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBwaW5wb2ludCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBTR0lfSU9DM19FVEhgLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY2FzdWFsIG9ic2VydmF0aW9uOyBpdCYjMzk7cyB0aGUgZnVuZGFtZW50YWwgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmUuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hhdCBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyB0aGF0ICplbmFibGUqIGBTR0lfSU9DM19FVEhgIHRvIGZ1bmN0aW9uPyYjMzQ7IElzIGl0IGxvdy1sZXZlbCBoYXJkd2FyZSByZWdpc3RlcnM/IERyaXZlciBtb2R1bGVzPyBTcGVjaWZpYyBrZXJuZWwgdmVyc2lvbnM/IFRoaXMgaXMgdGhlIGtpbmQgb2YgaW1tZWRpYXRlIHNjb3BpbmcgSSBhbHdheXMgZG8uIEl0JiMzOTtzIGFib3V0IGVzdGFibGlzaGluZyB0aGUgY29udGV4dCBhbmQgdGhlIGJvdW5kYXJpZXMgb2YgdGhpcyB0aGluZy4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgd2lsbCBkaWN0YXRlIGhvdyBJIHByb2NlZWQgd2l0aCBhbnkgc3Vic2VxdWVudCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0dJX0lPQzNfRVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWc9MTg9aWYgTkVUX1ZFTkRPUl9TR0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnLTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWc6MjA6Y29uZmlnIFNHSV9JT0MzX0VUSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWctMjEtXHRib29sIFwmIzM0O1NHSSBJT0MzIEV0aGVybmV0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk1NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBTR0kgRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIFNHSSBFdGhlcm5ldCBkcml2ZXIuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjAuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBsaW5lIHdpbGwgbGlrZWx5IGludHJvZHVjZSB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgZW5hYmxpbmcgdGhpcyBzcGVjaWZpYyBkcml2ZXIsIG9yIHBlcmhhcHMgYSBjb3JlIGRlcGVuZGVuY3kuIEkgZXhwZWN0IHRvIHNlZSBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGEgYGNvbmZpZyBTR0lfRVRIRVJORVRgIHdpdGggYXNzb2NpYXRlZCBgYm9vbGAgb3IgYHRyaXN0YXRlYCBhbmQgbGlrZWx5IHNvbWUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMuIFRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGF0IHRoYXQgbGluZSBzaG91bGQgaWxsdW1pbmF0ZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGRyaXZlciBpcyBjb25zaWRlcmVkIGEgdmFsaWQgb3IgZGVzaXJhYmxlIGNob2ljZSwgYW5kIHdoaWNoIGhhcmR3YXJlIG9yIG90aGVyIHN1YnN5c3RlbSBkZXBlbmRlbmNpZXMgaXQgYXNzdW1lcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHVwc3RyZWFtIG9yIGRvd25zdHJlYW0gY29tcGF0aWJpbGl0eSBpcyBhY2hpZXZlZCwgYW5kIHdoYXQgaWYgYW55LCB0aGUgaW1wbGljYXRpb25zIHdvdWxkIGJlIGlmIEkgd2VyZSB0byBlbmFibGUgb3IgZGlzYWJsZSBpdC4gVWx0aW1hdGVseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIHRlbGwgbWUgdGhlIGZ1bmRhbWVudGFsIHBhcmFtZXRlcnMgaW4gb3JkZXIgdG8gaW5jbHVkZSBvciBleGNsdWRlIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgaW50byB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE1Olx0XHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgU0dJIGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWQgZm9yXG4gIDE2Olx0XHQgIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cbiAgMTc6XHRcbiAgMTg6XHRpZiBORVRfVkVORE9SX1NHSVxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBTR0lfSU9DM19FVEhcbiAgMjE6XHRcdGJvb2wgXCYjMzQ7U0dJIElPQzMgRXRoZXJuZXRcJiMzNDtcbiAgMjI6XHRcdGRlcGVuZHMgb24gUENJIFx1MDAyNlx1MDAyNiBTR0lfTUZEX0lPQzNcbiAgMjM6XHRcdHNlbGVjdCBDUkMxNlxuICAyNDpcdFx0c2VsZWN0IENSQzMyXG4gIDI1Olx0XHRzZWxlY3QgTUlJXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgb2YgdGhpcyB0eXBlLCBzYXkgWSBoZXJlLlxuICAyODpcdFxuICAyOTpcdGNvbmZpZyBTR0lfTzJNQUNFX0VUSFxuICAzMDpcdFx0dHJpc3RhdGUgXCYjMzQ7U0dJIE8yIE1BQ0UgRmFzdCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIFNHSV9JUDMyPXlcbiAgMzI6XHRcbiAgMzM6XHRlbmRpZiAjIE5FVF9WRU5ET1JfU0dJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29uZGl0aW9uYWwgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gaGluZ2VzIG9uIGEgcGFydGljdWxhciBzZXQgb2YgZGVwZW5kZW5jaWVzLiBJdCByZWFsbHkgYm9pbHMgZG93biB0byB3aGV0aGVyIGBQQ0kgJmFtcDsmYW1wOyBTR0lfTUZEX0lPQzNgIGlzIHRydWUuIFRoYXQgYCZhbXA7JmFtcDtgIG9wZXJhdG9yIGlzIHRoZSBrZXkuIFNvLCB0aGUgcXVlc3Rpb24gaXMsICphcmUqIGJvdGggb2YgdGhvc2UgY29uZGl0aW9ucyBtZXQ/CgpJJiMzOTt2ZSBnb3QgdG8gY2hlY2sgYFNHSV9NRkRfSU9DM2AuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCBjcml0aWNhbCBwaWVjZSB0byBldmFsdWF0ZS4gT25jZSBJIHVuZGVyc3RhbmQgdGhlIHN0YXRlIG9mICp0aGF0KiBzeW1ib2wsIEkgY2FuIGRldGVybWluZSB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGxvZ2ljLiBUaGUgUENJIHNpZGUgaXMgcHJvYmFibHkgd2VsbCB1bmRlcnN0b29kLCBzbyBJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSB1bmtub3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0dJX01GRF9JT0MzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWZkL0tjb25maWc9MjQzMz1jb25maWcgUkFWRV9TUF9DT1JFXG4tLVxuZHJpdmVycy9tZmQvS2NvbmZpZy0yNDQwLVxuZHJpdmVycy9tZmQvS2NvbmZpZzoyNDQxOmNvbmZpZyBTR0lfTUZEX0lPQzNcbmRyaXZlcnMvbWZkL0tjb25maWctMjQ0Mi1cdGJvb2wgXCYjMzQ7U0dJIElPQzMgY29yZSBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgYGRyaXZlcnMvbWZkL0tjb25maWdgIGZpbGUuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gc29tZXRoaW5nIGFyb3VuZCBsaW5lIDI0NDEuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGEgcGFydGljdWxhciBNRkQgZHJpdmVyIGlzIGNvbmZpZ3VyZWQuIEkga25vdyBob3cgS2NvbmZpZyBmaWxlcyBhcmUgc3RydWN0dXJlZCwgc28gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgb3B0aW9ucyBkZWZpbmVkIHRoZXJlLCByZWxhdGluZyB0byB3aGljaCBkcml2ZXJzIGFyZSBidWlsdCwgdW5kZXIgd2hhdCBjaXJjdW1zdGFuY2VzLCBhbmQgcG90ZW50aWFsbHkgaG93IHRoZXkgaW50ZXJhY3QuIExpbmUgMjQ0MSBzaG91bGQgcHV0IG1lIHJpZ2h0IGluIHRoZSB6b25lLCBvciBnaXZlIG1lIGEgcHJldHR5IGdvb2QgaW5kaWNhdGlvbiBvZiB3aGVyZSB0byBzdGFydC4gV2l0aCBteSBleHBlcmllbmNlIGluIHRoaXMgc3BhY2UsIEkgYW50aWNpcGF0ZSBiZWluZyBhYmxlIHRvIHF1aWNrbHkgaW50ZXJwcmV0IHRoZSByZWxldmFudCBjb2RlIGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9tZmQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQzNTpcdFx0ZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVU1xuMjQzNjpcdFx0c2VsZWN0IENSQ19JVFVfVFxuMjQzNzpcdFx0aGVscFxuMjQzODpcdFx0ICBTZWxlY3QgdGhpcyB0byBnZXQgc3VwcG9ydCBmb3IgdGhlIFN1cGVydmlzb3J5IFByb2Nlc3NvclxuMjQzOTpcdFx0ICBkZXZpY2UgZm91bmQgb24gc2V2ZXJhbCBkZXZpY2VzIGluIFJBVkUgbGluZSBvZiBoYXJkd2FyZS5cbjI0NDA6XHRcbjI0NDE6XHRjb25maWcgU0dJX01GRF9JT0MzXG4yNDQyOlx0XHRib29sIFwmIzM0O1NHSSBJT0MzIGNvcmUgZHJpdmVyXCYjMzQ7XG4yNDQzOlx0XHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgTUlQUyBcdTAwMjZcdTAwMjYgNjRCSVRcbjI0NDQ6XHRcdHNlbGVjdCBNRkRfQ09SRVxuMjQ0NTpcdFx0aGVscFxuMjQ0NjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGJhc2ljIHN1cHBvcnQgZm9yIHRoZSBTR0kgSU9DMy1iYXNlZFxuMjQ0NzpcdFx0ICBjb250cm9sbGVyIGNhcmRzLiAgVGhpcyBvcHRpb24gZG9lcyBub3QgZW5hYmxlIGFueSBzcGVjaWZpY1xuMjQ0ODpcdFx0ICBmdW5jdGlvbnMgb24gc3VjaCBhIGNhcmQsIGJ1dCBwcm92aWRlcyBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmVcbjI0NDk6XHRcdCAgZm9yIG90aGVyIGRyaXZlcnMgdG8gdXRpbGl6ZS5cbjI0NTA6XHRcbjI0NTE6XHRcdCAgSWYgeW91IGhhdmUgYW4gU0dJIE9yaWdpbiwgT2N0YW5lLCBvciBhIFBDSSBJT0MzIGNhcmQsXG4yNDUyOlx0XHQgIHRoZW4gc2F5IFkuIE90aGVyd2lzZSBzYXkgTi5cbjI0NTM6XHRcbjI0NTQ6XHRjb25maWcgTUZEX0lOVEVMX00xMF9CTUNfQ09SRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzcyCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoIEZ1enppbmc/IEEgTUlQUy1TcGVjaWZpYyBEcml2ZXIgRGVlcCBEaXZlKioKCk9rYXksIHNvIHRoaXMgaXMgZGVwZW5kZW50IG9uIGBQQ0kgJmFtcDsmYW1wOyBNSVBTICZhbXA7JmFtcDsgNjRCSVRgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYSBNSVBTLXNwZWNpZmljIGRyaXZlci4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgcmVhbGlzdGljYWxseSBmdXp6IHRoaXM/IE15IGluaXRpYWwgdGhvdWdodCBpcyB1c3VhbGx5IHdlIGZvY3VzIG9uIHg4Nl82NCBhbmQgYXJtNjQsIG1heWJlIHNvbWUgb3RoZXJzLCBidXQgTUlQUyBpc24mIzM5O3QgdHlwaWNhbGx5IG9uIHRoZSByYWRhciB1bmxlc3Mgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQgZm9yIGl0IGluIHN5emthbGxlci4KCkJ1dCB3YWl0LCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IHNwZWNpZmljOiBJIG5lZWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGl0JiMzOTtzICppbXBvc3NpYmxlKiB0byByZWFjaCB0aGUgY29kZSBwYXRocyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gU28sIGlzIHRoZSBTR0kgSU9DMyBlbXVsYXRlZCBpbiBRRU1VPyBJIG5lZWQgdG8gY2hlY2sgaWYgUUVNVSBldmVuICpoYXMqIGFuIElPQzMgZGV2aWNlLiBJIGNhbiBxdWlja2x5IHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSwgYnV0IHRoZSBRRU1VIHNvdXJjZSBpc24mIzM5O3QgcmVhZGlseSBhdmFpbGFibGUgaGVyZS4KCk9rYXksIGxldCYjMzk7cyB0aGluayBhYm91dCB0aGlzLiBJdCYjMzk7cyBhIFBDSSBkZXZpY2UsIGFuZCBzeXprYWxsZXIgKmNvdWxkKiBwb3RlbnRpYWxseSBmdXp6IFBDSSBkZXZpY2VzIHZpYSBpbmplY3Rpb24gaWYgaXQmIzM5O3MgY29tcGlsZWQgaW4uIEJ1dCB0aGlzIGBTR0lfTUZEX0lPQzNgIGlzLCBhZ2FpbiwgZGVwZW5kZW50IG9uIGBNSVBTICZhbXA7JmFtcDsgNjRCSVRgLiBJZiBzeXprYWxsZXIgaXMgcnVubmluZyBvbiB4ODZfNjQgb3IgYXJtNjQsIHRoaXMgZHJpdmVyICp3b24mIzM5O3QqIGV2ZW4gYmUgY29tcGlsZWQuIENhbiB3ZSBjb21waWxlIGl0IGZvciB4ODZfNjQ/IE5vLCBiZWNhdXNlIG9mIHRoZSBgUENJICZhbXA7JmFtcDsgTUlQUyAmYW1wOyZhbXA7IDY0QklUYCBkZXBlbmRlbmN5LiBJdCYjMzk7cyBpbmhlcmVudGx5IHJlc3RyaWN0ZWQgdG8gTUlQUy4gU28sIGdpdmVuIHRoZSB1c3VhbCBzeXprYWxsZXIgY29uZmlndXJhdGlvbnMsIGl0JiMzOTtzICpsaWtlbHkqIG5vdCBiZWluZyBmdXp6ZWQuCgpIb3dldmVyLCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiwgc3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBNSVBTISBUaGUgc3l6LW1hbmFnZXIgY2FuIHJ1biBNSVBTIFZNcywgd2hpY2ggY2hhbmdlcyB0aGluZ3MgYSBiaXQuIFNvLCBpcyBpdCB3b3J0aCB0aGUgZWZmb3J0PwoKTGV0JiMzOTtzIGNoZWNrIGlmIHRoZSBgaW9jM2V0aF9yZW1vdmVgIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZS4gSXQmIzM5O3MgYSBwbGF0Zm9ybSBkZXZpY2UgcmVtb3ZlIGZ1bmN0aW9uLiBPa2F5LCBgaW9jM2V0aF9yZW1vdmVgIHRha2VzIGEgYHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXZgLiBJIHNob3VsZCBub3cgZGlnIGludG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguY2Agc291cmNlIGNvZGUsIHNvIEkgY2FuIGNvbmZpcm0gaXRzIHJlYWNoYWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTYwOlx0b3V0X2ZyZWU6XG4gOTYxOlx0XHRmcmVlX25ldGRldihkZXYpO1xuIDk2MjpcdFx0cmV0dXJuIGVycjtcbiA5NjM6XHR9XG4gOTY0Olx0XG4gOTY1Olx0c3RhdGljIHZvaWQgaW9jM2V0aF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiA5NjY6XHR7XG4gOTY3Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XG4gOTY4Olx0XHRzdHJ1Y3QgaW9jM19wcml2YXRlICppcCA9IG5ldGRldl9wcml2KGRldik7XG4gOTY5Olx0XG4gOTcwOlx0XHR1bnJlZ2lzdGVyX25ldGRldihkZXYpO1xuIDk3MTpcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2aXAtXHUwMDNlaW9jM190aW1lcik7XG4gOTcyOlx0XG4gOTczOlx0XHRkbWFfZnJlZV9jb2hlcmVudChpcC1cdTAwM2VkbWFfZGV2LCBSWF9SSU5HX1NJWkUsIGlwLVx1MDAzZXJ4ciwgaXAtXHUwMDNlcnhyX2RtYSk7XG4gOTc0Olx0XHRkbWFfZnJlZV9jb2hlcmVudChpcC1cdTAwM2VkbWFfZGV2LCBUWF9SSU5HX1NJWkUgJiM0MzsgU1pfMTZLIC0gMSwgaXAtXHUwMDNldHhfcmluZywgaXAtXHUwMDNldHhyX2RtYSk7XG4gOTc1Olx0XG4gOTc2Olx0XHRmcmVlX25ldGRldihkZXYpO1xuIDk3NzpcdH1cbiA5Nzg6XHRcbiA5Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY2NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEEgUXVpY2sgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEl0IGFkZHJlc3NlcyBhIHVzZS1hZnRlci1mcmVlIG9yIGEgc2ltaWxhciBtZW1vcnkgc2FmZXR5IHZ1bG5lcmFiaWxpdHkuIFRoZSBjb3JlIG9mIHRoZSBmaXggaXMgdG8gcHJvcGVybHkgdW5yZWdpc3RlciB0aGUgbmV0d29yayBkZXZpY2UgYW5kIGRlbGV0ZSB0aGUgdGltZXIgYmVmb3JlIGRlYWxsb2NhdGluZyB0aGUgRE1BIHJpbmdzLiBGdW5jdGlvbmFsbHksIGl0JiMzOTtzIGEgZ29vZCBjaGFuZ2UsIHRpZ2h0ZW5pbmcgdXAgc29tZSBwb3RlbnRpYWxseSBsb29zZSBlbmRzLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgd29ydGggcHV0dGluZyB0aHJvdWdoIHRoZSBmdXp6aW5nIHBpcGVsaW5lPyBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzLCBwcm9iYWJseS4gTWVtb3J5IHNhZmV0eSBidWdzIGFyZSB0aGUgYnJlYWQgYW5kIGJ1dHRlciBvZiBmdXp6aW5nIGVmZm9ydHMuIEhvd2V2ZXIsIHRoaXMgaXMgYSBNSVBTLXNwZWNpZmljIGRyaXZlci4gSWYgaXQgd2VyZSBhIGRyaXZlciB0aGF0IHdhcyBwYXJ0IG9mIGEgcGxhdGZvcm0sIEkmIzM5O2QgaGF2ZSB0byBlbnN1cmUgdGhhdCBzeXprYWxsZXIgaXMgcnVubmluZyBvbiBhIGNvbXBhdGlibGUgTUlQUyBpbnN0YW5jZSwgb3IgaGF2ZSB0byBmaWd1cmUgb3V0IGEgd2F5IG9mIHRlc3RpbmcgdGhlIG1vZHVsZS4gT2YgY291cnNlLCBJIGtub3cgdGhhdCBzeXprYWxsZXIgZG9lcyBzdXBwb3J0IE1JUFMsIHRob3VnaCB0aGlzIG1pZ2h0IHJlcXVpcmUgbW9yZSBzZXR1cC4KCkhvbGQgb24gYSBzZWNvbmQuLi4gdGhlIGVtYWlsIG1lbnRpb25lZCBgc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0O2AuIERvZXMgdGhhdCBtZWFuIHN5emthbGxlciAqZGlkKiBmaW5kIHRoaXMgYnVnPyBObywgdGhhdCYjMzk7cyBqdXN0IHRoZSBjb21taXQgYXV0aG9yIGluIHRoaXMgdGVzdGluZyBlbnZpcm9ubWVudC4gV2FpdCwgdGhpcyBwYXRjaCBpcyBmcm9tIGEgc3l6a2FsbGVyIGNsdXN0ZXIsIHRoZSBzeXotY2x1c3Rlci4gU28gdGhhdCBtZWFucyBpdCB3YXMsIGluIGZhY3QsIGZvdW5kIGJ5IHN5emthbGxlci4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBkcml2ZXIgaXRzZWxmLiBIbW0sIGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLiBUaGF0IGNoYW5nZXMgdGhpbmdzIGEgYml0LiBIb3cgaXMgdGhlIHBsYXRmb3JtIGRldmljZSBhY3R1YWxseSBjcmVhdGVkPyBLbm93aW5nIHRoYXQgbWlnaHQgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlIGF0dGFjayBzdXJmYWNlIGFuZCBpZiB0aGUgZnV6emluZyBzZXR1cCB3aWxsIGJlIHN0cmFpZ2h0Zm9yd2FyZC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGV2aWNlIGNyZWF0aW9uIG1lY2hhbmlzbSB0byBjb21wbGV0ZSBteSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb2MzZXRoX3JlbW92ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jPTgyOD1zdGF0aWMgaW50IGlvYzNldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYy05NjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYzo5NjU6c3RhdGljIHZvaWQgaW9jM2V0aF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jLTk2Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmM9MTI3NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpb2MzZXRoX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jLTEyNzYtXHQucHJvYmUgID0gaW9jM2V0aF9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jOjEyNzc6XHQucmVtb3ZlID0gaW9jM2V0aF9yZW1vdmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYy0xMjc4LVx0LmRyaXZlciA9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ5MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSBjb250ZXh0IGlzIG15IGFyZWEgb2YgZXhwZXJ0aXNlOgoKKipQbGF0Zm9ybSBEcml2ZXIgRGVjb2RpbmcqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGxhdGZvcm0gZHJpdmVyIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgaW5zdGFudGlhdGlvbiBvZiB0aGlzIHBsYXRmb3JtIGRldmljZS4gVGhlIGxpa2VseSBjYW5kaWRhdGUgZm9yIGl0cyBjcmVhdGlvbiBpcyB0aGUgTUZEIChNdWx0aS1GdW5jdGlvbiBEZXZpY2UpIGNvcmUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBkcml2ZXJzL21mZC9pb2MzLmNgIGRyaXZlci4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcGF0dGVybi4gR2l2ZW4gdGhlIGZpbGVuYW1lLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGBpb2MzLmNgIGRyaXZlciB0byBiZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgYmFzaWMgcGxhdGZvcm0gZGV2aWNlIHN0cnVjdHVyZSB0aGF0IG91ciBkcml2ZXIgd2lsbCB0aGVuIGhvb2sgaW50by4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgcmVsYXRpb25zaGlwLCBvZiBjb3Vyc2UsIGJ1dCB0aGF0JiMzOTtzIG15IHdvcmtpbmcgaHlwb3RoZXNpcy4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gY29uZmlybSB0aGlzIGluc3RhbnRpYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvYzMtZXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZmQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWZkL2lvYzMuYz0yNTY9c3RhdGljIHN0cnVjdCBtZmRfY2VsbCBpb2MzX2V0aF9jZWxsc1tdID0ge1xuZHJpdmVycy9tZmQvaW9jMy5jLTI1Ny1cdHtcbmRyaXZlcnMvbWZkL2lvYzMuYzoyNTg6XHRcdC5uYW1lID0gXCYjMzQ7aW9jMy1ldGhcJiMzNDssXG5kcml2ZXJzL21mZC9pb2MzLmMtMjU5LVx0XHQucmVzb3VyY2VzID0gaW9jM19ldGhfcmVzb3VyY2VzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODMwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIGBpb2MzZXRoX3JlbW92ZWAgd2l0aCBTeXprYWxsZXIqKgoKT2theSwgc28gYGlvYzMtZXRoYCBpcyBkZWZpbml0ZWx5IGJvcm4gZnJvbSBgZHJpdmVycy9tZmQvaW9jMy5jYCwgd2hpY2ggaXMgYSBQQ0kgZHJpdmVyLiBUaGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IGlmIFN5emthbGxlciBtYW5hZ2VzIHRvIGluamVjdCBhIFBDSSBkZXZpY2UgdGhhdCBtYXRjaGVzIHRoZSBjaGFyYWN0ZXJpc3RpY3MgZGVmaW5lZCBpbiBgaW9jMy5jYCwgaXQmIzM5O2xsIHRyaWdnZXIgdGhlIGNyZWF0aW9uIG9mIHRoZSBNRkQgKE11bHRpLUZ1bmN0aW9uIERldmljZSkgY2VsbHMuIFRoYXQgaW4gdHVybiwgd2lsbCBwcm9iZSBhbmQgcmVnaXN0ZXIgYGlvYzMtZXRoYC4gTG9naWNhbGx5LCB0aGVuLCByZW1vdmluZyB0aGlzIGluamVjdGVkIFBDSSBkZXZpY2Ugc2hvdWxkIGxlYWQgdXMgdG8gdGhlIGBpb2MzZXRoX3JlbW92ZWAgZnVuY3Rpb24uIFRoaXMgc2VlbXMgbGlrZSBhIHBlcmZlY3RseSBwbGF1c2libGUgcGF0aCB0byB0YWtlIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBhc3N1bWluZyB0aGUgbmVjZXNzYXJ5IGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkIGluLCBvZiBjb3Vyc2UuCgpUaGUgY2F0Y2gsIGFzIGFsd2F5cywgaXMgdGhlIGFyY2hpdGVjdHVyZS4gSXQgbG9va3MgbGlrZSB0aGlzIHNwZWNpZmljIHNldHVwIGlzIGRlcGVuZGVudCBvbiBgTUlQUyAmYW1wOyZhbXA7IDY0QklUYC4gSG1tLCBjYW4gd2UgZW5hYmxlIHRoaXMgb24geDg2PyBObywgdGhlIGRlcGVuZGVuY2llcyBhcmUgZXhwbGljaXQ6IGBQQ0kgJmFtcDsmYW1wOyBNSVBTICZhbXA7JmFtcDsgNjRCSVRgLiBUaGF0IGNsb3NlcyB0aGF0IGF2ZW51ZS4KCkhvbGQgb24gYSBzZWNvbmQuLi5TeXprYWxsZXIgKmRvZXMqIGZ1enogTUlQUzY0IGFyY2hpdGVjdHVyZXMsIGRvZXNuJiMzOTt0IGl0PyBUaGF0IGNoYW5nZXMgdGhpbmdzLiBUaGlzIGlzIGFic29sdXRlbHkgd29ydGggcHVyc3VpbmchIFdlIG5lZWQgdG8gZW5zdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBzZXQgdXAuIExldCBtZSBkaWcgaW50byB0aGUgY29uZmlncy4gV2UgbmVlZCB0byBlbmFibGUgYFNHSV9NRkRfSU9DM2AgYW5kIGBTR0lfSU9DM19FVEhgLiBBaCwgZ29vZCwgYm90aCBhcmUgYm9vbGVhbiBvcHRpb25zLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0dJX01GRF9JT0MzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9tZmQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21mZC9LY29uZmlnPTI0MzM9Y29uZmlnIFJBVkVfU1BfQ09SRVxuLS1cbmRyaXZlcnMvbWZkL0tjb25maWctMjQ0MC1cbmRyaXZlcnMvbWZkL0tjb25maWc6MjQ0MTpjb25maWcgU0dJX01GRF9JT0MzXG5kcml2ZXJzL21mZC9LY29uZmlnLTI0NDItXHRib29sIFwmIzM0O1NHSSBJT0MzIGNvcmUgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0czoKCioqUmVmb2N1c2luZyBvbiBgU0dJX0lPQzNfRVRIYCoqCgpSaWdodCwgc28sIEkmIzM5O20ganVzdCBxdWlja2x5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgbWVudGFsIGNoZWNrbGlzdCBoZXJlLiBJIHdhcyB3b3JraW5nIG9uIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoaXMgcHJldmlvdXNseSwgYW5kIGl0JiMzOTtzIHRpbWUgdG8gY2lyY2xlIGJhY2suIExldCYjMzk7cyBnZXQgYmFjayB0byBleGFtaW5pbmcgYFNHSV9JT0MzX0VUSGAuIE5lZWQgdG8gcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggd2hhdCB3YXMgaGFwcGVuaW5nIHRoZXJlLCByZWZyZXNoIG15IG1lbW9yeSBvbiBhbnkgb3V0c3RhbmRpbmcgaXNzdWVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgcmUtZXZhbHVhdGUgdGhhdCBzcGVjaWZpYyBlbGVtZW50IG9mIHRoZSBzeXN0ZW0uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0dJX0lPQzNfRVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWc9MTg9aWYgTkVUX1ZFTkRPUl9TR0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnLTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWc6MjA6Y29uZmlnIFNHSV9JT0MzX0VUSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWctMjEtXHRib29sIFwmIzM0O1NHSSBJT0MzIEV0aGVybmV0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MDUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRW5hYmxpbmcgYE5FVF9WRU5ET1JfU0dJYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZXRoaW5nLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgdG8gbWluZCBpcyB0aGF0IGBORVRfVkVORE9SX1NHSWAgbmVlZHMgdG8gYmUgYWN0aXZlLiBJdOKAmXMgYW4gZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gZWxlbWVudC4gSSYjMzk7bSBub3QgZW50aXJlbHkgY2VydGFpbiB3aHkgaXQmIzM5O3Mgbm90IGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IEkga25vdyBpdCYjMzk7cyBhIHByZXJlcXVpc2l0ZSBmb3IgdGhlIG90aGVyIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGJlaW5nIHNldC4gSXQmIzM5O3MgdGhlIGJ1aWxkaW5nIGJsb2NrLCB0aGUgZm91bmRhdGlvbiB0aGF0IG5lZWRzIHRvIGJlIGluIHBsYWNlIGZpcnN0LiBXaXRob3V0IGl0LCB0aGluZ3Mgd2lsbCBzaW1wbHkgYnJlYWssIG9yIG5vdCBldmVuIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwOToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1ZFTkRPUl9TR0kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWc6Njpjb25maWcgTkVUX1ZFTkRPUl9TR0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnLTctXHRib29sIFwmIzM0O1NHSSBkZXZpY2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA5OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNjEKCQkJCQkJCW91dHB1dDogMTIzCgkJCQkJCQl0aG91Z2h0czogNTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIERyaXZlciBCdWcgRml4IGZvciBQb3RlbnRpYWwgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBhIHBhdGNoIHJlbGF0ZWQgdG8gU0dJIG5ldHdvcmsgZHJpdmVycyDigJMgc3BlY2lmaWNhbGx5LCB0aGluZ3MgZmxhZ2dlZCB1bmRlciBgTkVUX1ZFTkRPUl9TR0lgLCBgU0dJX01GRF9JT0MzYCwgYW5kIGBTR0lfSU9DM19FVEhgLiBUaGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYGlvYzNldGhfcmVtb3ZlYCwgd2hpY2ggaXMgdGhlIG9uZSBiZWluZyBtb2RpZmllZCwgc28gdGhhdCYjMzk7cyBvdXIgZm9jdXMgc3ltYm9sLgoKSXMgYGlvYzNldGhfcmVtb3ZlYCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQ/IFllcywgYmVjYXVzZSB0aGUgcGF0Y2ggZGlyZWN0bHkgY2hhbmdlcyB0aGlzIGZ1bmN0aW9uLiBOb3csIGFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbnMgYWZmZWN0ZWQ/IE5vLCB0aGUgZGlmZiBleHBsaWNpdGx5IG9ubHkgdG91Y2hlcyBgaW9jM2V0aF9yZW1vdmVgLgoKTXkgbmV4dCB0aG91Z2h0IGlzIHdoZXRoZXIgYGlvYzNldGhfcmVtb3ZlYCBpcyBldmVuIHJlYWNoYWJsZS4gTGV0JiMzOTtzIHNlZS4uLklmIGBpb2MzZXRoX3Byb2JlYCBzdWNjZWVkcywgdGhlbiBgaW9jM2V0aF9yZW1vdmVgIHdpbGwgYmUgY2FsbGVkIGR1cmluZyBkZXZpY2UgcmVtb3ZhbCwgcmlnaHQ/IERldmljZSByZW1vdmFsIGNhbiBiZSB0cmlnZ2VyZWQgYnkgUENJIGhvdHBsdWcgZXZlbnRzLiBTaW5jZSB3ZSBjYW4gc2ltdWxhdGUgdGhvc2UgdXNpbmcgc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyIGJ5IGluamVjdGluZyBQQ0kgZXZlbnRzLCB0aGVuIGBpb2MzZXRoX3JlbW92ZWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuCgpOb3csIGNoZWNraW5nIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFNHSV9NRkRfSU9DM2AgcmV2ZWFscyBpdCBkZXBlbmRzIG9uIGBQQ0kgJmFtcDsmYW1wOyBNSVBTICZhbXA7JmFtcDsgNjRCSVRgLiBUaGF0IG1lYW5zIHRoaXMgc3BlY2lmaWMgZHJpdmVyIHdpbGwgb25seSBiZSB0ZXN0ZWQgb24gTUlQUyBhcmNoaXRlY3R1cmVzLiBHb29kIHRoaW5nIHN5emthbGxlciBzdXBwb3J0cyBNSVBTLCBzbyB0aGF0JiMzOTtzIGZpbmUuCgpMZXQgbWUganVzdCBxdWlja2x5IHJldmlldyB0aGUgcGF0Y2ggY29kZSBpdHNlbGYgYWdhaW4uIEl0IGxvb2tzIGxpa2UgdGhlIGZpeCBpcyByZW9yZGVyaW5nIHRoZSBjbGVhbnVwIHN0ZXBzIGluIGBpb2MzZXRoX3JlbW92ZWAuIEl0IHNoaWZ0cyB0aGUgY2FsbHMgdG8gYHVucmVnaXN0ZXJfbmV0ZGV2YCBhbmQgYHRpbWVyX2RlbGV0ZV9zeW5jYCBiZWZvcmUgdGhlIERNQSByaW5nIGZyZWVpbmcuIFRoZSBpc3N1ZSBpcyBhIHVzZS1hZnRlci1mcmVlLCB3aGVyZSB0aGUgRE1BIHJpbmdzIHdlcmUgZnJlZWQgYmVmb3JlIHRoZSBuZXQgZGV2aWNlIHdhcyB1bnJlZ2lzdGVyZWQgYW5kIHRoZSB0aW1lciB3YXMgZGVsZXRlZC4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSB0aW1lciBmaXJlZCBvciB0aGUgbmV0ZGV2IHdhcyBzdGlsbCBhY3RpdmUsIGl0IGNvdWxkIGFjY2VzcyBmcmVlZCBETUEgcmluZ3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZGRyZXNzaW5nIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eS4KClNvLCBgTkVUX1ZFTkRPUl9TR0lgLCBgU0dJX01GRF9JT0MzYCwgYFNHSV9JT0MzX0VUSGAsIHdpdGggYGlvYzNldGhfcmVtb3ZlYCBhcyB0aGUga2V5LiBUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBpbiB0aGUgZHJpdmVyJiMzOTtzIHJlbW92YWwgcm91dGluZS4gSXTigJlzIHJlYWNoYWJsZSB2aWEgUENJIGluamVjdGlvbiBpbiBNSVBTNjQgZW52aXJvbm1lbnRzLCB3aGljaCBtZWFucyBpdCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIGZsYWcgdGhpcyB0byBiZSBhZGRlZCB0byB0aGUgZnV6emluZyBxdWV1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDk6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfU0dJJiMzNDssCiAgICAmIzM0O1NHSV9NRkRfSU9DMyYjMzQ7LAogICAgJiMzNDtTR0lfSU9DM19FVEgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb2MzZXRoX3JlbW92ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGZ1bmN0aW9uYWwgYnVnIChwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUpIGluIHRoZSBkcml2ZXImIzM5O3MgcmVtb3ZlIHJvdXRpbmUgYnkgcmVvcmRlcmluZyBjbGVhbnVwIG9wZXJhdGlvbnMuIFRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCBhbmQgcmVtb3ZlZCB2aWEgUENJIGluamVjdGlvbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChvbiBNSVBTNjQpLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX1NHSSYjMzQ7LAogICAgJiMzNDtTR0lfTUZEX0lPQzMmIzM0OywKICAgICYjMzQ7U0dJX0lPQzNfRVRIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9jM2V0aF9yZW1vdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyAocG90ZW50aWFsIHVzZS1hZnRlci1mcmVlKSBpbiB0aGUgZHJpdmVyJiMzOTtzIHJlbW92ZSByb3V0aW5lIGJ5IHJlb3JkZXJpbmcgY2xlYW51cCBvcGVyYXRpb25zLiBUaGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgYW5kIHJlbW92ZWQgdmlhIFBDSSBpbmplY3Rpb24gaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCAob24gTUlQUzY0KSwgc28gaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI2OjU0LjI5MzI4ODE1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTA1MzE3MjQ5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX1NHSVwiLFxuICAgIFwiU0dJX01GRF9JT0MzXCIsXG4gICAgXCJTR0lfSU9DM19FVEhcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb2MzZXRoX3JlbW92ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZnVuY3Rpb25hbCBidWcgKHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSkgaW4gdGhlIGRyaXZlcidzIHJlbW92ZSByb3V0aW5lIGJ5IHJlb3JkZXJpbmcgY2xlYW51cCBvcGVyYXRpb25zLiBUaGUgZHJpdmVyIGNhbiBiZSBwcm9iZWQgYW5kIHJlbW92ZWQgdmlhIFBDSSBpbmplY3Rpb24gaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCAob24gTUlQUzY0KSwgc28gaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6MjY6NTQuMjkzMjk2OTA1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjQ0NTQ0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiYjlmOTA4YTdhZTBkODk2YzYxOTZkNjZjZjc0MDQ0ZDRiMTY1MThjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVuIDI5IDA5OjI2OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmNcXG5pbmRleCAzOTczMTA2OWQ5OWUwYi4uYjM1ZjY5MmIxYTBlMTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguY1xcbkBAIC05NjcsMTEgKzk2NywxMiBAQCBzdGF0aWMgdm9pZCBpb2MzZXRoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XFxuIFxcdHN0cnVjdCBpb2MzX3ByaXZhdGUgKmlwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFxuK1xcdHVucmVnaXN0ZXJfbmV0ZGV2KGRldik7XFxuK1xcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZpcC1cXHUwMDNlaW9jM190aW1lcik7XFxuK1xcbiBcXHRkbWFfZnJlZV9jb2hlcmVudChpcC1cXHUwMDNlZG1hX2RldiwgUlhfUklOR19TSVpFLCBpcC1cXHUwMDNlcnhyLCBpcC1cXHUwMDNlcnhyX2RtYSk7XFxuIFxcdGRtYV9mcmVlX2NvaGVyZW50KGlwLVxcdTAwM2VkbWFfZGV2LCBUWF9SSU5HX1NJWkUgKyBTWl8xNksgLSAxLCBpcC1cXHUwMDNldHhfcmluZywgaXAtXFx1MDAzZXR4cl9kbWEpO1xcbiBcXG4tXFx0dW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTtcXG4tXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNmlwLVxcdTAwM2Vpb2MzX3RpbWVyKTtcXG4gXFx0ZnJlZV9uZXRkZXYoZGV2KTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6MjY6NTQuNjU4NDU5OTI5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjg2ODc5ODU3OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9TR0lcIixcbiAgICBcIlNHSV9NRkRfSU9DM1wiLFxuICAgIFwiU0dJX0lPQzNfRVRIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW9jM2V0aF9yZW1vdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGZ1bmN0aW9uYWwgYnVnIChwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUpIGluIHRoZSBkcml2ZXIncyByZW1vdmUgcm91dGluZSBieSByZW9yZGVyaW5nIGNsZWFudXAgb3BlcmF0aW9ucy4gVGhlIGRyaXZlciBjYW4gYmUgcHJvYmVkIGFuZCByZW1vdmVkIHZpYSBQQ0kgaW5qZWN0aW9uIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgKG9uIE1JUFM2NCksIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmI5ZjkwOGE3YWUwZDg5NmM2MTk2ZDY2Y2Y3NDA0NGQ0YjE2NTE4Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDA5OjI2OjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguY1xuaW5kZXggMzk3MzEwNjlkOTllMGIuLmIzNWY2OTJiMWEwZTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jXG5AQCAtOTY3LDExICs5NjcsMTIgQEAgc3RhdGljIHZvaWQgaW9jM2V0aF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcdHN0cnVjdCBpb2MzX3ByaXZhdGUgKmlwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbitcdHVucmVnaXN0ZXJfbmV0ZGV2KGRldik7XG4rXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZpcC1cdTAwM2Vpb2MzX3RpbWVyKTtcbitcbiBcdGRtYV9mcmVlX2NvaGVyZW50KGlwLVx1MDAzZWRtYV9kZXYsIFJYX1JJTkdfU0laRSwgaXAtXHUwMDNlcnhyLCBpcC1cdTAwM2VyeHJfZG1hKTtcbiBcdGRtYV9mcmVlX2NvaGVyZW50KGlwLVx1MDAzZWRtYV9kZXYsIFRYX1JJTkdfU0laRSArIFNaXzE2SyAtIDEsIGlwLVx1MDAzZXR4X3JpbmcsIGlwLVx1MDAzZXR4cl9kbWEpO1xuIFxuLVx0dW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTtcbi1cdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNmlwLVx1MDAzZWlvYzNfdGltZXIpO1xuIFx0ZnJlZV9uZXRkZXYoZGV2KTtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyNjo1NC42NTg0NjI1MjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjIxNzkzNTkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXR3b3JrIERyaXZlciBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmNgLiBJdCBzZWVtcyB0aGV5J3ZlIHR3ZWFrZWQgdGhlIGNsZWFudXAgc2VxdWVuY2UgaW4gdGhlIGBpb2MzZXRoX3JlbW92ZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgdGhleSd2ZSBzaGlmdGVkIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGEgYml0LiBJdCB1c2VkIHRvIGJlIGB1bnJlZ2lzdGVyX25ldGRldihkZXYpYCBhbmQgYHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNmlwLVx1MDAzZWlvYzNfdGltZXIpYCAqYWZ0ZXIqIHRoZSBgZG1hX2ZyZWVfY29oZXJlbnRgIGNhbGwsIGJ1dCBub3cgdGhleSBhcmUgKmJlZm9yZSogaXQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogd2hhdCBraW5kIG9mIGVudmlyb25tZW50IGFyZSB3ZSBkZWFsaW5nIHdpdGggaGVyZT8gRG9lcyB0aGlzIHBvdGVudGlhbGx5IGltcGFjdCB2aXJ0dWFsaXplZCBzeXN0ZW1zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGRyaXZlciBpcyBldmVuIHVzZWQgaW4gbW9kZXJuIHNldHVwcy4gR2l2ZW4gdGhlIFNHSSBJT0MzIEV0aGVybmV0IHJlZmVyZW5jZSwgaXQgaXMgYW4gb2xkZXIgdGVjaG5vbG9neSwgYnV0IHdvcnRoIGV4cGxvcmluZy5cblxuSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtLCBhbmQgcGVyaGFwcyBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnYCBmaWxlIG9yIGV2ZW4gZGlyZWN0bHkgZXhhbWluZSB0aGUgYGlvYzMtZXRoLmNgIHNvdXJjZSBjb2RlIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aGVuKiBpdCdzIGNvbmZpZ3VyZWQuIElzIHRoaXMgc3RpbGwgcmVsZXZhbnQsIG9yIGlzIGl0IGxlZ2FjeSBjb2RlPyBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgaG93IHNpZ25pZmljYW50IHRoaXMgY2hhbmdlIGFjdHVhbGx5IGlzLCBhbmQgd2hhdCBwb3RlbnRpYWwgaXNzdWVzIGl0IGNvdWxkIGludHJvZHVjZSBvciByZXNvbHZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTcwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjc6MDYuODc2NDAxNzY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NDM4OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNHSV9JT0MzX0VUSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnPTE4PWlmIE5FVF9WRU5ET1JfU0dJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWc6MjA6Y29uZmlnIFNHSV9JT0MzX0VUSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIlNHSSBJT0MzIEV0aGVybmV0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHX1NHSV9PMk1BQ0VfRVRIKSArPSBtZXRoLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfU0dJX0lPQzNfRVRIKSArPSBpb2MzLWV0aC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI3OjA2Ljk0NDg0ODU1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDE2NzUxNzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgU0dJX0lPQzNfRVRIYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IHRoZSBkZXBlbmRlbmNpZXMgb2YgYFNHSV9JT0MzX0VUSGAuIFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBvYnNlcnZhdGlvbjsgaXQncyB0aGUgZnVuZGFtZW50YWwgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBhcmNoaXRlY3R1cmUuIEknbSB0aGlua2luZywgXCJXaGF0IGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIHRoYXQgKmVuYWJsZSogYFNHSV9JT0MzX0VUSGAgdG8gZnVuY3Rpb24/XCIgSXMgaXQgbG93LWxldmVsIGhhcmR3YXJlIHJlZ2lzdGVycz8gRHJpdmVyIG1vZHVsZXM/IFNwZWNpZmljIGtlcm5lbCB2ZXJzaW9ucz8gVGhpcyBpcyB0aGUga2luZCBvZiBpbW1lZGlhdGUgc2NvcGluZyBJIGFsd2F5cyBkby4gSXQncyBhYm91dCBlc3RhYmxpc2hpbmcgdGhlIGNvbnRleHQgYW5kIHRoZSBib3VuZGFyaWVzIG9mIHRoaXMgdGhpbmcuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIHdpbGwgZGljdGF0ZSBob3cgSSBwcm9jZWVkIHdpdGggYW55IHN1YnNlcXVlbnQgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyNzo0My4zNjE2MDQxNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDYwMTMzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0dJX0lPQzNfRVRIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnPTE4PWlmIE5FVF9WRU5ET1JfU0dJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWc6MjA6Y29uZmlnIFNHSV9JT0MzX0VUSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIlNHSSBJT0MzIEV0aGVybmV0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyNzo0My40MjYyMTM0NTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjczNjE5MDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgU0dJIEV0aGVybmV0IERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgU0dJIEV0aGVybmV0IGRyaXZlci4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyMC4gSSdtIGd1ZXNzaW5nIHRoYXQgbGluZSB3aWxsIGxpa2VseSBpbnRyb2R1Y2UgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGVuYWJsaW5nIHRoaXMgc3BlY2lmaWMgZHJpdmVyLCBvciBwZXJoYXBzIGEgY29yZSBkZXBlbmRlbmN5LiBJIGV4cGVjdCB0byBzZWUgc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBhIGBjb25maWcgU0dJX0VUSEVSTkVUYCB3aXRoIGFzc29jaWF0ZWQgYGJvb2xgIG9yIGB0cmlzdGF0ZWAgYW5kIGxpa2VseSBzb21lIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLiBUaGUgc3Vycm91bmRpbmcgY29udGV4dCBhdCB0aGF0IGxpbmUgc2hvdWxkIGlsbHVtaW5hdGUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBkcml2ZXIgaXMgY29uc2lkZXJlZCBhIHZhbGlkIG9yIGRlc2lyYWJsZSBjaG9pY2UsIGFuZCB3aGljaCBoYXJkd2FyZSBvciBvdGhlciBzdWJzeXN0ZW0gZGVwZW5kZW5jaWVzIGl0IGFzc3VtZXMuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHVwc3RyZWFtIG9yIGRvd25zdHJlYW0gY29tcGF0aWJpbGl0eSBpcyBhY2hpZXZlZCwgYW5kIHdoYXQgaWYgYW55LCB0aGUgaW1wbGljYXRpb25zIHdvdWxkIGJlIGlmIEkgd2VyZSB0byBlbmFibGUgb3IgZGlzYWJsZSBpdC4gVWx0aW1hdGVseSwgSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gdGVsbCBtZSB0aGUgZnVuZGFtZW50YWwgcGFyYW1ldGVycyBpbiBvcmRlciB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBpbnRvIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NTQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyNzo1Mi4wOTk4MzUxNjFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxNTpcXHRcXHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgU0dJIGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWQgZm9yXFxuICAxNjpcXHRcXHQgIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0aWYgTkVUX1ZFTkRPUl9TR0lcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIFNHSV9JT0MzX0VUSFxcbiAgMjE6XFx0XFx0Ym9vbCBcXFwiU0dJIElPQzMgRXRoZXJuZXRcXFwiXFxuICAyMjpcXHRcXHRkZXBlbmRzIG9uIFBDSSBcXHUwMDI2XFx1MDAyNiBTR0lfTUZEX0lPQzNcXG4gIDIzOlxcdFxcdHNlbGVjdCBDUkMxNlxcbiAgMjQ6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyNTpcXHRcXHRzZWxlY3QgTUlJXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgb2YgdGhpcyB0eXBlLCBzYXkgWSBoZXJlLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRjb25maWcgU0dJX08yTUFDRV9FVEhcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJTR0kgTzIgTUFDRSBGYXN0IEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIFNHSV9JUDMyPXlcXG4gIDMyOlxcdFxcbiAgMzM6XFx0ZW5kaWYgIyBORVRfVkVORE9SX1NHSVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyNzo1Mi4wOTk5MTI3OTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjY2MTI1OTUzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb25kaXRpb25hbCBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGhpbmdlcyBvbiBhIHBhcnRpY3VsYXIgc2V0IG9mIGRlcGVuZGVuY2llcy4gSXQgcmVhbGx5IGJvaWxzIGRvd24gdG8gd2hldGhlciBgUENJIFx1MDAyNlx1MDAyNiBTR0lfTUZEX0lPQzNgIGlzIHRydWUuIFRoYXQgYFx1MDAyNlx1MDAyNmAgb3BlcmF0b3IgaXMgdGhlIGtleS4gU28sIHRoZSBxdWVzdGlvbiBpcywgKmFyZSogYm90aCBvZiB0aG9zZSBjb25kaXRpb25zIG1ldD9cblxuSSd2ZSBnb3QgdG8gY2hlY2sgYFNHSV9NRkRfSU9DM2AuIEknbGwgc3RhcnQgdGhlcmUuIFRoYXQncyB0aGUgZmlyc3QgY3JpdGljYWwgcGllY2UgdG8gZXZhbHVhdGUuIE9uY2UgSSB1bmRlcnN0YW5kIHRoZSBzdGF0ZSBvZiAqdGhhdCogc3ltYm9sLCBJIGNhbiBkZXRlcm1pbmUgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBsb2dpYy4gVGhlIFBDSSBzaWRlIGlzIHByb2JhYmx5IHdlbGwgdW5kZXJzdG9vZCwgc28gSSdsbCBzdGFydCB3aXRoIHRoZSB1bmtub3duLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyODoxOC43NjExNzQ5NjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MTI2NjA1MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNHSV9NRkRfSU9DM1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZmQvS2NvbmZpZz0yNDMzPWNvbmZpZyBSQVZFX1NQX0NPUkVcXG4tLVxcbmRyaXZlcnMvbWZkL0tjb25maWctMjQ0MC1cXG5kcml2ZXJzL21mZC9LY29uZmlnOjI0NDE6Y29uZmlnIFNHSV9NRkRfSU9DM1xcbmRyaXZlcnMvbWZkL0tjb25maWctMjQ0Mi1cXHRib29sIFxcXCJTR0kgSU9DMyBjb3JlIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjg6MjIuNTczODQ0MTU3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NTU3MDU2NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGBkcml2ZXJzL21mZC9LY29uZmlnYCBmaWxlLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gc29tZXRoaW5nIGFyb3VuZCBsaW5lIDI0NDEuIFRoYXQncyB1c3VhbGx5IGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgYSBwYXJ0aWN1bGFyIE1GRCBkcml2ZXIgaXMgY29uZmlndXJlZC4gSSBrbm93IGhvdyBLY29uZmlnIGZpbGVzIGFyZSBzdHJ1Y3R1cmVkLCBzbyBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZSBjcnVjaWFsIG9wdGlvbnMgZGVmaW5lZCB0aGVyZSwgcmVsYXRpbmcgdG8gd2hpY2ggZHJpdmVycyBhcmUgYnVpbHQsIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcywgYW5kIHBvdGVudGlhbGx5IGhvdyB0aGV5IGludGVyYWN0LiBMaW5lIDI0NDEgc2hvdWxkIHB1dCBtZSByaWdodCBpbiB0aGUgem9uZSwgb3IgZ2l2ZSBtZSBhIHByZXR0eSBnb29kIGluZGljYXRpb24gb2Ygd2hlcmUgdG8gc3RhcnQuIFdpdGggbXkgZXhwZXJpZW5jZSBpbiB0aGlzIHNwYWNlLCBJIGFudGljaXBhdGUgYmVpbmcgYWJsZSB0byBxdWlja2x5IGludGVycHJldCB0aGUgcmVsZXZhbnQgY29kZSBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODIyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjg6MjguNTI5NTUzMzgxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21mZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0MzU6XFx0XFx0ZGVwZW5kcyBvbiBTRVJJQUxfREVWX0JVU1xcbjI0MzY6XFx0XFx0c2VsZWN0IENSQ19JVFVfVFxcbjI0Mzc6XFx0XFx0aGVscFxcbjI0Mzg6XFx0XFx0ICBTZWxlY3QgdGhpcyB0byBnZXQgc3VwcG9ydCBmb3IgdGhlIFN1cGVydmlzb3J5IFByb2Nlc3NvclxcbjI0Mzk6XFx0XFx0ICBkZXZpY2UgZm91bmQgb24gc2V2ZXJhbCBkZXZpY2VzIGluIFJBVkUgbGluZSBvZiBoYXJkd2FyZS5cXG4yNDQwOlxcdFxcbjI0NDE6XFx0Y29uZmlnIFNHSV9NRkRfSU9DM1xcbjI0NDI6XFx0XFx0Ym9vbCBcXFwiU0dJIElPQzMgY29yZSBkcml2ZXJcXFwiXFxuMjQ0MzpcXHRcXHRkZXBlbmRzIG9uIFBDSSBcXHUwMDI2XFx1MDAyNiBNSVBTIFxcdTAwMjZcXHUwMDI2IDY0QklUXFxuMjQ0NDpcXHRcXHRzZWxlY3QgTUZEX0NPUkVcXG4yNDQ1OlxcdFxcdGhlbHBcXG4yNDQ2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBiYXNpYyBzdXBwb3J0IGZvciB0aGUgU0dJIElPQzMtYmFzZWRcXG4yNDQ3OlxcdFxcdCAgY29udHJvbGxlciBjYXJkcy4gIFRoaXMgb3B0aW9uIGRvZXMgbm90IGVuYWJsZSBhbnkgc3BlY2lmaWNcXG4yNDQ4OlxcdFxcdCAgZnVuY3Rpb25zIG9uIHN1Y2ggYSBjYXJkLCBidXQgcHJvdmlkZXMgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlXFxuMjQ0OTpcXHRcXHQgIGZvciBvdGhlciBkcml2ZXJzIHRvIHV0aWxpemUuXFxuMjQ1MDpcXHRcXG4yNDUxOlxcdFxcdCAgSWYgeW91IGhhdmUgYW4gU0dJIE9yaWdpbiwgT2N0YW5lLCBvciBhIFBDSSBJT0MzIGNhcmQsXFxuMjQ1MjpcXHRcXHQgIHRoZW4gc2F5IFkuIE90aGVyd2lzZSBzYXkgTi5cXG4yNDUzOlxcdFxcbjI0NTQ6XFx0Y29uZmlnIE1GRF9JTlRFTF9NMTBfQk1DX0NPUkVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjg6MjguNTI5NzQzMzAxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MDc1NTUyMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoIEZ1enppbmc/IEEgTUlQUy1TcGVjaWZpYyBEcml2ZXIgRGVlcCBEaXZlKipcblxuT2theSwgc28gdGhpcyBpcyBkZXBlbmRlbnQgb24gYFBDSSBcdTAwMjZcdTAwMjYgTUlQUyBcdTAwMjZcdTAwMjYgNjRCSVRgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgYSBNSVBTLXNwZWNpZmljIGRyaXZlci4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgcmVhbGlzdGljYWxseSBmdXp6IHRoaXM/IE15IGluaXRpYWwgdGhvdWdodCBpcyB1c3VhbGx5IHdlIGZvY3VzIG9uIHg4Nl82NCBhbmQgYXJtNjQsIG1heWJlIHNvbWUgb3RoZXJzLCBidXQgTUlQUyBpc24ndCB0eXBpY2FsbHkgb24gdGhlIHJhZGFyIHVubGVzcyBzcGVjaWZpY2FsbHkgY29uZmlndXJlZCBmb3IgaXQgaW4gc3l6a2FsbGVyLlxuXG5CdXQgd2FpdCwgdGhlIGluc3RydWN0aW9ucyBhcmUgdmVyeSBzcGVjaWZpYzogSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiBpdCdzICppbXBvc3NpYmxlKiB0byByZWFjaCB0aGUgY29kZSBwYXRocyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gU28sIGlzIHRoZSBTR0kgSU9DMyBlbXVsYXRlZCBpbiBRRU1VPyBJIG5lZWQgdG8gY2hlY2sgaWYgUUVNVSBldmVuICpoYXMqIGFuIElPQzMgZGV2aWNlLiBJIGNhbiBxdWlja2x5IHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSwgYnV0IHRoZSBRRU1VIHNvdXJjZSBpc24ndCByZWFkaWx5IGF2YWlsYWJsZSBoZXJlLlxuXG5Pa2F5LCBsZXQncyB0aGluayBhYm91dCB0aGlzLiBJdCdzIGEgUENJIGRldmljZSwgYW5kIHN5emthbGxlciAqY291bGQqIHBvdGVudGlhbGx5IGZ1enogUENJIGRldmljZXMgdmlhIGluamVjdGlvbiBpZiBpdCdzIGNvbXBpbGVkIGluLiBCdXQgdGhpcyBgU0dJX01GRF9JT0MzYCBpcywgYWdhaW4sIGRlcGVuZGVudCBvbiBgTUlQUyBcdTAwMjZcdTAwMjYgNjRCSVRgLiBJZiBzeXprYWxsZXIgaXMgcnVubmluZyBvbiB4ODZfNjQgb3IgYXJtNjQsIHRoaXMgZHJpdmVyICp3b24ndCogZXZlbiBiZSBjb21waWxlZC4gQ2FuIHdlIGNvbXBpbGUgaXQgZm9yIHg4Nl82ND8gTm8sIGJlY2F1c2Ugb2YgdGhlIGBQQ0kgXHUwMDI2XHUwMDI2IE1JUFMgXHUwMDI2XHUwMDI2IDY0QklUYCBkZXBlbmRlbmN5LiBJdCdzIGluaGVyZW50bHkgcmVzdHJpY3RlZCB0byBNSVBTLiBTbywgZ2l2ZW4gdGhlIHVzdWFsIHN5emthbGxlciBjb25maWd1cmF0aW9ucywgaXQncyAqbGlrZWx5KiBub3QgYmVpbmcgZnV6emVkLlxuXG5Ib3dldmVyLCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiwgc3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBNSVBTISBUaGUgc3l6LW1hbmFnZXIgY2FuIHJ1biBNSVBTIFZNcywgd2hpY2ggY2hhbmdlcyB0aGluZ3MgYSBiaXQuIFNvLCBpcyBpdCB3b3J0aCB0aGUgZWZmb3J0P1xuXG5MZXQncyBjaGVjayBpZiB0aGUgYGlvYzNldGhfcmVtb3ZlYCBmdW5jdGlvbiBpcyByZWFjaGFibGUuIEl0J3MgYSBwbGF0Zm9ybSBkZXZpY2UgcmVtb3ZlIGZ1bmN0aW9uLiBPa2F5LCBgaW9jM2V0aF9yZW1vdmVgIHRha2VzIGEgYHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXZgLiBJIHNob3VsZCBub3cgZGlnIGludG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguY2Agc291cmNlIGNvZGUsIHNvIEkgY2FuIGNvbmZpcm0gaXRzIHJlYWNoYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3MiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI4OjU1LjYwNTI5ODYxMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTYwOlxcdG91dF9mcmVlOlxcbiA5NjE6XFx0XFx0ZnJlZV9uZXRkZXYoZGV2KTtcXG4gOTYyOlxcdFxcdHJldHVybiBlcnI7XFxuIDk2MzpcXHR9XFxuIDk2NDpcXHRcXG4gOTY1OlxcdHN0YXRpYyB2b2lkIGlvYzNldGhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIDk2NjpcXHR7XFxuIDk2NzpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7XFxuIDk2ODpcXHRcXHRzdHJ1Y3QgaW9jM19wcml2YXRlICppcCA9IG5ldGRldl9wcml2KGRldik7XFxuIDk2OTpcXHRcXG4gOTcwOlxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2KGRldik7XFxuIDk3MTpcXHRcXHR0aW1lcl9kZWxldGVfc3luYyhcXHUwMDI2aXAtXFx1MDAzZWlvYzNfdGltZXIpO1xcbiA5NzI6XFx0XFxuIDk3MzpcXHRcXHRkbWFfZnJlZV9jb2hlcmVudChpcC1cXHUwMDNlZG1hX2RldiwgUlhfUklOR19TSVpFLCBpcC1cXHUwMDNlcnhyLCBpcC1cXHUwMDNlcnhyX2RtYSk7XFxuIDk3NDpcXHRcXHRkbWFfZnJlZV9jb2hlcmVudChpcC1cXHUwMDNlZG1hX2RldiwgVFhfUklOR19TSVpFICsgU1pfMTZLIC0gMSwgaXAtXFx1MDAzZXR4X3JpbmcsIGlwLVxcdTAwM2V0eHJfZG1hKTtcXG4gOTc1OlxcdFxcbiA5NzY6XFx0XFx0ZnJlZV9uZXRkZXYoZGV2KTtcXG4gOTc3OlxcdH1cXG4gOTc4OlxcdFxcbiA5Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI4OjU1LjYwNTQxNjk1MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Mzk1MzI2MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogQSBRdWljayBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBJdCBhZGRyZXNzZXMgYSB1c2UtYWZ0ZXItZnJlZSBvciBhIHNpbWlsYXIgbWVtb3J5IHNhZmV0eSB2dWxuZXJhYmlsaXR5LiBUaGUgY29yZSBvZiB0aGUgZml4IGlzIHRvIHByb3Blcmx5IHVucmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCBkZWxldGUgdGhlIHRpbWVyIGJlZm9yZSBkZWFsbG9jYXRpbmcgdGhlIERNQSByaW5ncy4gRnVuY3Rpb25hbGx5LCBpdCdzIGEgZ29vZCBjaGFuZ2UsIHRpZ2h0ZW5pbmcgdXAgc29tZSBwb3RlbnRpYWxseSBsb29zZSBlbmRzLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBwdXR0aW5nIHRocm91Z2ggdGhlIGZ1enppbmcgcGlwZWxpbmU/IFRoZSBpbml0aWFsIHRob3VnaHQgaXMsIHByb2JhYmx5LiBNZW1vcnkgc2FmZXR5IGJ1Z3MgYXJlIHRoZSBicmVhZCBhbmQgYnV0dGVyIG9mIGZ1enppbmcgZWZmb3J0cy4gSG93ZXZlciwgdGhpcyBpcyBhIE1JUFMtc3BlY2lmaWMgZHJpdmVyLiBJZiBpdCB3ZXJlIGEgZHJpdmVyIHRoYXQgd2FzIHBhcnQgb2YgYSBwbGF0Zm9ybSwgSSdkIGhhdmUgdG8gZW5zdXJlIHRoYXQgc3l6a2FsbGVyIGlzIHJ1bm5pbmcgb24gYSBjb21wYXRpYmxlIE1JUFMgaW5zdGFuY2UsIG9yIGhhdmUgdG8gZmlndXJlIG91dCBhIHdheSBvZiB0ZXN0aW5nIHRoZSBtb2R1bGUuIE9mIGNvdXJzZSwgSSBrbm93IHRoYXQgc3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBNSVBTLCB0aG91Z2ggdGhpcyBtaWdodCByZXF1aXJlIG1vcmUgc2V0dXAuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gdGhlIGVtYWlsIG1lbnRpb25lZCBgc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VgLiBEb2VzIHRoYXQgbWVhbiBzeXprYWxsZXIgKmRpZCogZmluZCB0aGlzIGJ1Zz8gTm8sIHRoYXQncyBqdXN0IHRoZSBjb21taXQgYXV0aG9yIGluIHRoaXMgdGVzdGluZyBlbnZpcm9ubWVudC4gV2FpdCwgdGhpcyBwYXRjaCBpcyBmcm9tIGEgc3l6a2FsbGVyIGNsdXN0ZXIsIHRoZSBzeXotY2x1c3Rlci4gU28gdGhhdCBtZWFucyBpdCB3YXMsIGluIGZhY3QsIGZvdW5kIGJ5IHN5emthbGxlci5cblxuTGV0J3MgcXVpY2tseSBjaGVjayB0aGUgZHJpdmVyIGl0c2VsZi4gSG1tLCBpdCdzIGEgcGxhdGZvcm0gZHJpdmVyLiBUaGF0IGNoYW5nZXMgdGhpbmdzIGEgYml0LiBIb3cgaXMgdGhlIHBsYXRmb3JtIGRldmljZSBhY3R1YWxseSBjcmVhdGVkPyBLbm93aW5nIHRoYXQgbWlnaHQgZ2l2ZSBtZSBhIGJldHRlciBoYW5kbGUgb24gdGhlIGF0dGFjayBzdXJmYWNlIGFuZCBpZiB0aGUgZnV6emluZyBzZXR1cCB3aWxsIGJlIHN0cmFpZ2h0Zm9yd2FyZC4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXZpY2UgY3JlYXRpb24gbWVjaGFuaXNtIHRvIGNvbXBsZXRlIG15IGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NjUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyOTowMS4wMDA3NDU3OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMDkxNTgwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2MzZXRoX3JlbW92ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYz04Mjg9c3RhdGljIGludCBpb2MzZXRoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYy05NjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmM6OTY1OnN0YXRpYyB2b2lkIGlvYzNldGhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmMtOTY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9pb2MzLWV0aC5jPTEyNzU9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW9jM2V0aF9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL2lvYzMtZXRoLmMtMTI3Ni1cXHQucHJvYmUgID0gaW9jM2V0aF9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYzoxMjc3OlxcdC5yZW1vdmUgPSBpb2MzZXRoX3JlbW92ZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvaW9jMy1ldGguYy0xMjc4LVxcdC5kcml2ZXIgPSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI5OjAyLjMxMTY2OTE3MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM3OTY0MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgdGhlIGNvbnRleHQgaXMgbXkgYXJlYSBvZiBleHBlcnRpc2U6XG5cbioqUGxhdGZvcm0gRHJpdmVyIERlY29kaW5nKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBwbGF0Zm9ybSBkcml2ZXIgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBpbnN0YW50aWF0aW9uIG9mIHRoaXMgcGxhdGZvcm0gZGV2aWNlLiBUaGUgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgaXRzIGNyZWF0aW9uIGlzIHRoZSBNRkQgKE11bHRpLUZ1bmN0aW9uIERldmljZSkgY29yZSBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYGRyaXZlcnMvbWZkL2lvYzMuY2AgZHJpdmVyLiBUaGF0J3MgYSBjbGFzc2ljIHBhdHRlcm4uIEdpdmVuIHRoZSBmaWxlbmFtZSwgSSdtIGV4cGVjdGluZyB0aGlzIGBpb2MzLmNgIGRyaXZlciB0byBiZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgYmFzaWMgcGxhdGZvcm0gZGV2aWNlIHN0cnVjdHVyZSB0aGF0IG91ciBkcml2ZXIgd2lsbCB0aGVuIGhvb2sgaW50by4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCByZWxhdGlvbnNoaXAsIG9mIGNvdXJzZSwgYnV0IHRoYXQncyBteSB3b3JraW5nIGh5cG90aGVzaXMuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGNvbmZpcm0gdGhpcyBpbnN0YW50aWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDkzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjk6MDUuNDQ5NjM2NTczWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTE0ODQ1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW9jMy1ldGhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9tZmQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWZkL2lvYzMuYz0yNTY9c3RhdGljIHN0cnVjdCBtZmRfY2VsbCBpb2MzX2V0aF9jZWxsc1tdID0ge1xcbmRyaXZlcnMvbWZkL2lvYzMuYy0yNTctXFx0e1xcbmRyaXZlcnMvbWZkL2lvYzMuYzoyNTg6XFx0XFx0Lm5hbWUgPSBcXFwiaW9jMy1ldGhcXFwiLFxcbmRyaXZlcnMvbWZkL2lvYzMuYy0yNTktXFx0XFx0LnJlc291cmNlcyA9IGlvYzNfZXRoX3Jlc291cmNlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjk6MDUuNzYxMTI5MzYzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2OTEyNDMzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgYGlvYzNldGhfcmVtb3ZlYCB3aXRoIFN5emthbGxlcioqXG5cbk9rYXksIHNvIGBpb2MzLWV0aGAgaXMgZGVmaW5pdGVseSBib3JuIGZyb20gYGRyaXZlcnMvbWZkL2lvYzMuY2AsIHdoaWNoIGlzIGEgUENJIGRyaXZlci4gVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhhdCBpZiBTeXprYWxsZXIgbWFuYWdlcyB0byBpbmplY3QgYSBQQ0kgZGV2aWNlIHRoYXQgbWF0Y2hlcyB0aGUgY2hhcmFjdGVyaXN0aWNzIGRlZmluZWQgaW4gYGlvYzMuY2AsIGl0J2xsIHRyaWdnZXIgdGhlIGNyZWF0aW9uIG9mIHRoZSBNRkQgKE11bHRpLUZ1bmN0aW9uIERldmljZSkgY2VsbHMuIFRoYXQgaW4gdHVybiwgd2lsbCBwcm9iZSBhbmQgcmVnaXN0ZXIgYGlvYzMtZXRoYC4gTG9naWNhbGx5LCB0aGVuLCByZW1vdmluZyB0aGlzIGluamVjdGVkIFBDSSBkZXZpY2Ugc2hvdWxkIGxlYWQgdXMgdG8gdGhlIGBpb2MzZXRoX3JlbW92ZWAgZnVuY3Rpb24uIFRoaXMgc2VlbXMgbGlrZSBhIHBlcmZlY3RseSBwbGF1c2libGUgcGF0aCB0byB0YWtlIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IOKAkyBhc3N1bWluZyB0aGUgbmVjZXNzYXJ5IGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkIGluLCBvZiBjb3Vyc2UuXG5cblRoZSBjYXRjaCwgYXMgYWx3YXlzLCBpcyB0aGUgYXJjaGl0ZWN0dXJlLiBJdCBsb29rcyBsaWtlIHRoaXMgc3BlY2lmaWMgc2V0dXAgaXMgZGVwZW5kZW50IG9uIGBNSVBTIFx1MDAyNlx1MDAyNiA2NEJJVGAuIEhtbSwgY2FuIHdlIGVuYWJsZSB0aGlzIG9uIHg4Nj8gTm8sIHRoZSBkZXBlbmRlbmNpZXMgYXJlIGV4cGxpY2l0OiBgUENJIFx1MDAyNlx1MDAyNiBNSVBTIFx1MDAyNlx1MDAyNiA2NEJJVGAuIFRoYXQgY2xvc2VzIHRoYXQgYXZlbnVlLlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uU3l6a2FsbGVyICpkb2VzKiBmdXp6IE1JUFM2NCBhcmNoaXRlY3R1cmVzLCBkb2Vzbid0IGl0PyBUaGF0IGNoYW5nZXMgdGhpbmdzLiBUaGlzIGlzIGFic29sdXRlbHkgd29ydGggcHVyc3VpbmchIFdlIG5lZWQgdG8gZW5zdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBzZXQgdXAuIExldCBtZSBkaWcgaW50byB0aGUgY29uZmlncy4gV2UgbmVlZCB0byBlbmFibGUgYFNHSV9NRkRfSU9DM2AgYW5kIGBTR0lfSU9DM19FVEhgLiBBaCwgZ29vZCwgYm90aCBhcmUgYm9vbGVhbiBvcHRpb25zLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MzAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjk6MTUuNDUyMzc1MjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NTIwNjg5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0dJX01GRF9JT0MzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbWZkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9tZmQvS2NvbmZpZz0yNDMzPWNvbmZpZyBSQVZFX1NQX0NPUkVcXG4tLVxcbmRyaXZlcnMvbWZkL0tjb25maWctMjQ0MC1cXG5kcml2ZXJzL21mZC9LY29uZmlnOjI0NDE6Y29uZmlnIFNHSV9NRkRfSU9DM1xcbmRyaXZlcnMvbWZkL0tjb25maWctMjQ0Mi1cXHRib29sIFxcXCJTR0kgSU9DMyBjb3JlIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjk6MTUuNzQ3NTg5OTkxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNjEwNzI0NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzOlxuXG4qKlJlZm9jdXNpbmcgb24gYFNHSV9JT0MzX0VUSGAqKlxuXG5SaWdodCwgc28sIEknbSBqdXN0IHF1aWNrbHkgcnVubmluZyB0aHJvdWdoIHRoZSBtZW50YWwgY2hlY2tsaXN0IGhlcmUuIEkgd2FzIHdvcmtpbmcgb24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBwcmV2aW91c2x5LCBhbmQgaXQncyB0aW1lIHRvIGNpcmNsZSBiYWNrLiBMZXQncyBnZXQgYmFjayB0byBleGFtaW5pbmcgYFNHSV9JT0MzX0VUSGAuIE5lZWQgdG8gcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggd2hhdCB3YXMgaGFwcGVuaW5nIHRoZXJlLCByZWZyZXNoIG15IG1lbW9yeSBvbiBhbnkgb3V0c3RhbmRpbmcgaXNzdWVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgcmUtZXZhbHVhdGUgdGhhdCBzcGVjaWZpYyBlbGVtZW50IG9mIHRoZSBzeXN0ZW0uIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUxMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI5OjI3LjM1ODMxODcyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzQ4OTI3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0dJX0lPQzNfRVRIXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnPTE4PWlmIE5FVF9WRU5ET1JfU0dJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWc6MjA6Y29uZmlnIFNHSV9JT0MzX0VUSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIlNHSSBJT0MzIEV0aGVybmV0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwOToyOToyNy40MjU4MTQ2ODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU4OTkxOTUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkVuYWJsaW5nIGBORVRfVkVORE9SX1NHSWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21ldGhpbmcsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBtaW5kIGlzIHRoYXQgYE5FVF9WRU5ET1JfU0dJYCBuZWVkcyB0byBiZSBhY3RpdmUuIEl04oCZcyBhbiBlc3NlbnRpYWwgY29uZmlndXJhdGlvbiBlbGVtZW50LiBJJ20gbm90IGVudGlyZWx5IGNlcnRhaW4gd2h5IGl0J3Mgbm90IGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IEkga25vdyBpdCdzIGEgcHJlcmVxdWlzaXRlIGZvciB0aGUgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgYmVpbmcgc2V0LiBJdCdzIHRoZSBidWlsZGluZyBibG9jaywgdGhlIGZvdW5kYXRpb24gdGhhdCBuZWVkcyB0byBiZSBpbiBwbGFjZSBmaXJzdC4gV2l0aG91dCBpdCwgdGhpbmdzIHdpbGwgc2ltcGx5IGJyZWFrLCBvciBub3QgZXZlbiBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgwNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA5OjI5OjMwLjAxNTc0MjY5OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3MDkxOTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfVkVORE9SX1NHSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9zZ2kvS2NvbmZpZy01LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NnaS9LY29uZmlnOjY6Y29uZmlnIE5FVF9WRU5ET1JfU0dJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2dpL0tjb25maWctNy1cXHRib29sIFxcXCJTR0kgZGV2aWNlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjk6MzAuMjkyODQxMjAyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTY4MjQ5OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERyaXZlciBCdWcgRml4IGZvciBQb3RlbnRpYWwgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHJlbGF0ZWQgdG8gU0dJIG5ldHdvcmsgZHJpdmVycyDigJMgc3BlY2lmaWNhbGx5LCB0aGluZ3MgZmxhZ2dlZCB1bmRlciBgTkVUX1ZFTkRPUl9TR0lgLCBgU0dJX01GRF9JT0MzYCwgYW5kIGBTR0lfSU9DM19FVEhgLiBUaGUga2V5IGZ1bmN0aW9uIGhlcmUgaXMgYGlvYzNldGhfcmVtb3ZlYCwgd2hpY2ggaXMgdGhlIG9uZSBiZWluZyBtb2RpZmllZCwgc28gdGhhdCdzIG91ciBmb2N1cyBzeW1ib2wuXG5cbklzIGBpb2MzZXRoX3JlbW92ZWAgYSBnb29kIHN0YXJ0aW5nIHBvaW50PyBZZXMsIGJlY2F1c2UgdGhlIHBhdGNoIGRpcmVjdGx5IGNoYW5nZXMgdGhpcyBmdW5jdGlvbi4gTm93LCBhcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb25zIGFmZmVjdGVkPyBObywgdGhlIGRpZmYgZXhwbGljaXRseSBvbmx5IHRvdWNoZXMgYGlvYzNldGhfcmVtb3ZlYC5cblxuTXkgbmV4dCB0aG91Z2h0IGlzIHdoZXRoZXIgYGlvYzNldGhfcmVtb3ZlYCBpcyBldmVuIHJlYWNoYWJsZS4gTGV0J3Mgc2VlLi4uSWYgYGlvYzNldGhfcHJvYmVgIHN1Y2NlZWRzLCB0aGVuIGBpb2MzZXRoX3JlbW92ZWAgd2lsbCBiZSBjYWxsZWQgZHVyaW5nIGRldmljZSByZW1vdmFsLCByaWdodD8gRGV2aWNlIHJlbW92YWwgY2FuIGJlIHRyaWdnZXJlZCBieSBQQ0kgaG90cGx1ZyBldmVudHMuIFNpbmNlIHdlIGNhbiBzaW11bGF0ZSB0aG9zZSB1c2luZyBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIgYnkgaW5qZWN0aW5nIFBDSSBldmVudHMsIHRoZW4gYGlvYzNldGhfcmVtb3ZlYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS5cblxuTm93LCBjaGVja2luZyB0aGUgZGVwZW5kZW5jaWVzIG9mIGBTR0lfTUZEX0lPQzNgIHJldmVhbHMgaXQgZGVwZW5kcyBvbiBgUENJIFx1MDAyNlx1MDAyNiBNSVBTIFx1MDAyNlx1MDAyNiA2NEJJVGAuIFRoYXQgbWVhbnMgdGhpcyBzcGVjaWZpYyBkcml2ZXIgd2lsbCBvbmx5IGJlIHRlc3RlZCBvbiBNSVBTIGFyY2hpdGVjdHVyZXMuIEdvb2QgdGhpbmcgc3l6a2FsbGVyIHN1cHBvcnRzIE1JUFMsIHNvIHRoYXQncyBmaW5lLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IHJldmlldyB0aGUgcGF0Y2ggY29kZSBpdHNlbGYgYWdhaW4uIEl0IGxvb2tzIGxpa2UgdGhlIGZpeCBpcyByZW9yZGVyaW5nIHRoZSBjbGVhbnVwIHN0ZXBzIGluIGBpb2MzZXRoX3JlbW92ZWAuIEl0IHNoaWZ0cyB0aGUgY2FsbHMgdG8gYHVucmVnaXN0ZXJfbmV0ZGV2YCBhbmQgYHRpbWVyX2RlbGV0ZV9zeW5jYCBiZWZvcmUgdGhlIERNQSByaW5nIGZyZWVpbmcuIFRoZSBpc3N1ZSBpcyBhIHVzZS1hZnRlci1mcmVlLCB3aGVyZSB0aGUgRE1BIHJpbmdzIHdlcmUgZnJlZWQgYmVmb3JlIHRoZSBuZXQgZGV2aWNlIHdhcyB1bnJlZ2lzdGVyZWQgYW5kIHRoZSB0aW1lciB3YXMgZGVsZXRlZC4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSB0aW1lciBmaXJlZCBvciB0aGUgbmV0ZGV2IHdhcyBzdGlsbCBhY3RpdmUsIGl0IGNvdWxkIGFjY2VzcyBmcmVlZCBETUEgcmluZ3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZGRyZXNzaW5nIGEgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eS5cblxuU28sIGBORVRfVkVORE9SX1NHSWAsIGBTR0lfTUZEX0lPQzNgLCBgU0dJX0lPQzNfRVRIYCwgd2l0aCBgaW9jM2V0aF9yZW1vdmVgIGFzIHRoZSBrZXkuIFRoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGluIHRoZSBkcml2ZXIncyByZW1vdmFsIHJvdXRpbmUuIEl04oCZcyByZWFjaGFibGUgdmlhIFBDSSBpbmplY3Rpb24gaW4gTUlQUzY0IGVudmlyb25tZW50cywgd2hpY2ggbWVhbnMgaXQgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJJ2xsIGZsYWcgdGhpcyB0byBiZSBhZGRlZCB0byB0aGUgZnV6emluZyBxdWV1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA2MSwiT3V0cHV0VG9rZW5zIjoxMjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDk6Mjk6NDMuMjYxMDk0MDY4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUzNDUxODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfU0dJXCIsXG4gICAgXCJTR0lfTUZEX0lPQzNcIixcbiAgICBcIlNHSV9JT0MzX0VUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvYzNldGhfcmVtb3ZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyAocG90ZW50aWFsIHVzZS1hZnRlci1mcmVlKSBpbiB0aGUgZHJpdmVyJ3MgcmVtb3ZlIHJvdXRpbmUgYnkgcmVvcmRlcmluZyBjbGVhbnVwIG9wZXJhdGlvbnMuIFRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCBhbmQgcmVtb3ZlZCB2aWEgUENJIGluamVjdGlvbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChvbiBNSVBTNjQpLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfU0dJXCIsXG4gICAgXCJTR0lfTUZEX0lPQzNcIixcbiAgICBcIlNHSV9JT0MzX0VUSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvYzNldGhfcmVtb3ZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBmdW5jdGlvbmFsIGJ1ZyAocG90ZW50aWFsIHVzZS1hZnRlci1mcmVlKSBpbiB0aGUgZHJpdmVyJ3MgcmVtb3ZlIHJvdXRpbmUgYnkgcmVvcmRlcmluZyBjbGVhbnVwIG9wZXJhdGlvbnMuIFRoZSBkcml2ZXIgY2FuIGJlIHByb2JlZCBhbmQgcmVtb3ZlZCB2aWEgUENJIGluamVjdGlvbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IChvbiBNSVBTNjQpLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow6bgs8[1] Phase: Succeeded StartedAt: 2026-06-29 09:30:10 +0000 UTC FinishedAt: 2026-06-29 09:30:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-29 09:30:10 +0000 UTC FinishedAt: 2026-06-29 09:30:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2] Phase: Succeeded StartedAt: 2026-06-29 09:30:10 +0000 UTC FinishedAt: 2026-06-29 10:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 09:30:10 +0000 UTC FinishedAt: 2026-06-29 10:47:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 09:30:10 +0000 UTC FinishedAt: 2026-06-29 09:30:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 09:30:10 +0000 UTC FinishedAt: 2026-06-29 09:30:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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-workflow6bgs8/series-workflow6bgs8-convert-artifact-1820487006/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 09:30:20 +0000 UTC FinishedAt: 2026-06-29 10:03:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 09:30:20 +0000 UTC FinishedAt: 2026-06-29 10:03:50 +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:*a21cea17-9498-4f09-9e51-00eb6c799f37,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-workflow6bgs8/series-workflow6bgs8-convert-artifact-1820487006/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": "b6de239f-6822-435c-b849-57ee686170e2", "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-workflow6bgs8/series-workflow6bgs8-build-action-1107201604/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 09:30:20 +0000 UTC FinishedAt: 2026-06-29 10:03:12 +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:*a21cea17-9498-4f09-9e51-00eb6c799f37,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-workflow6bgs8/series-workflow6bgs8-convert-artifact-1820487006/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": "b6de239f-6822-435c-b849-57ee686170e2", "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-workflow6bgs8/series-workflow6bgs8-build-action-1107201604/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:03:50 +0000 UTC FinishedAt: 2026-06-29 10:03:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:03:50 +0000 UTC FinishedAt: 2026-06-29 10:03:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:03:50 +0000 UTC FinishedAt: 2026-06-29 10:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:03:50 +0000 UTC FinishedAt: 2026-06-29 10:04:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-workflow6bgs8/series-workflow6bgs8-convert-artifact-984355857/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:04:26 +0000 UTC FinishedAt: 2026-06-29 10:06:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:04:26 +0000 UTC FinishedAt: 2026-06-29 10:06:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b6de239f-6822-435c-b849-57ee686170e2,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-workflow6bgs8/series-workflow6bgs8-build-action-1107201604/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-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:06:42 +0000 UTC FinishedAt: 2026-06-29 10:06:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:06:42 +0000 UTC FinishedAt: 2026-06-29 10:06:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:06:42 +0000 UTC FinishedAt: 2026-06-29 10:41:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:06:42 +0000 UTC FinishedAt: 2026-06-29 10:41:48 +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:*a21cea17-9498-4f09-9e51-00eb6c799f37,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-workflow6bgs8/series-workflow6bgs8-convert-artifact-984355857/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": "258861a2-d815-491a-a03e-5720756be0d0", "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-workflow6bgs8/series-workflow6bgs8-build-action-4039312349/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:06:42 +0000 UTC FinishedAt: 2026-06-29 10:41:23 +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:*a21cea17-9498-4f09-9e51-00eb6c799f37,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-workflow6bgs8/series-workflow6bgs8-convert-artifact-984355857/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": "258861a2-d815-491a-a03e-5720756be0d0", "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-workflow6bgs8/series-workflow6bgs8-build-action-4039312349/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:41:48 +0000 UTC FinishedAt: 2026-06-29 10:41:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:41:48 +0000 UTC FinishedAt: 2026-06-29 10:41:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:41:48 +0000 UTC FinishedAt: 2026-06-29 10:43:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:41:48 +0000 UTC FinishedAt: 2026-06-29 10:43:47 +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:*258861a2-d815-491a-a03e-5720756be0d0,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-workflow6bgs8/series-workflow6bgs8-build-action-4039312349/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-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:43:57 +0000 UTC FinishedAt: 2026-06-29 10:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:43:57 +0000 UTC FinishedAt: 2026-06-29 10:47:11 +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":["ioc3eth_remove"],"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:*b6de239f-6822-435c-b849-57ee686170e2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*258861a2-d815-491a-a03e-5720756be0d0,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-workflow6bgs8/series-workflow6bgs8-build-action-1107201604/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-workflow6bgs8/series-workflow6bgs8-build-action-4039312349/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:43:57 +0000 UTC FinishedAt: 2026-06-29 10:44:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:43:57 +0000 UTC FinishedAt: 2026-06-29 10:44:44 +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":["ioc3eth_remove"],"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-workflow6bgs8/series-workflow6bgs8-convert-artifact-735588422/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:43:57 +0000 UTC FinishedAt: 2026-06-29 10:43:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:43:57 +0000 UTC FinishedAt: 2026-06-29 10:43:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:43:57 +0000 UTC FinishedAt: 2026-06-29 10:43:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:44:50 +0000 UTC FinishedAt: 2026-06-29 10:47:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bgs8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"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":["ioc3eth_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32f1c2bbb26ae2be476c8b66e3b41789b6b97bfc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_SGI","SGI_MFD_IOC3","SGI_IOC3_ETH"],"series_id":"f0f2a86d-bf8f-44e9-afe3-7d6c864ea2ba","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-06-29 10:44:50 +0000 UTC FinishedAt: 2026-06-29 10:46:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b6de239f-6822-435c-b849-57ee686170e2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*258861a2-d815-491a-a03e-5720756be0d0,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-workflow6bgs8/series-workflow6bgs8-build-action-1107201604/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-workflow6bgs8/series-workflow6bgs8-build-action-4039312349/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-workflow6bgs8/series-workflow6bgs8-convert-artifact-735588422/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,}