Name: series-workflowdx9zd Phase: Succeeded StartedAt: 2026-09-03 04:36:47 +0000 UTC FinishedAt: 2026-09-03 05:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[0] Phase: Succeeded StartedAt: 2026-09-03 04:36:47 +0000 UTC FinishedAt: 2026-09-03 04:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 04:36:47 +0000 UTC FinishedAt: 2026-09-03 04:55:41 +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": "544d85de4dc22c01badfd8cefa59829ce35c4858", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEVLINK", "NETDEVSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "544d85de4dc22c01badfd8cefa59829ce35c4858", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEVLINK", "NETDEVSIM" ], "series_id": "8a63ea0d-f924-496b-a838-57efdd9c07d4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "devlink_nl_flash_update_doit", "devlink_compat_flash_update" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZMSU5LJiMzNDssCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXQmIzM0OywKICAgICYjMzQ7ZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2bGluayBmbGFzaCB1cGRhdGUgaGFuZGxlcnMgKGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBhbmQgYGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZWApIHRvIHVzZSBgcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoKWAgaW5zdGVhZCBvZiBgcmVxdWVzdF9maXJtd2FyZSgpYCwgYXZvaWRpbmcgdGhlIGZhbGxiYWNrIHRvIHRoZSB1c2VybW9kZSBoZWxwZXIgd2hlbiByZXF1ZXN0aW5nIGZpcm13YXJlIGZpbGVzLlxuXG5Cb3RoIGNhbGwgc2l0ZXMgemVyby1pbml0aWFsaXplIHRoZWlyIHN0YWNrIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zIHBhcmFtcyA9IHt9O2ApLiBPbiBmYWlsdXJlLCB0aGUgcmV0dXJuIGNvZGUgaXMgY2hlY2tlZCBhbmQgZXhlY3V0aW9uIGV4aXRzIHdpdGhvdXQgcmVhZGluZyBgcGFyYW1zLmZ3YC4gT24gc3VjY2VzcywgdGhlIGZpcm13YXJlIHN0cnVjdCBwb2ludGVyIGlzIHNldCBieSB0aGUgZmlybXdhcmUgbG9hZGVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcgZXhwb3N1cmUsIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4sIGFuZCBzdGFuZGFyZCBLQVNBTi90ZXN0aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHN3aXRjaGVzIHRoZSBmaXJtd2FyZSByZXF1ZXN0IG1ldGhvZCBpbiBkZXZsaW5rIGZsYXNoIHVwZGF0ZSByb3V0aW5lcyBmcm9tIHJlcXVlc3RfZmlybXdhcmUoKSB0byByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgpLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0bGluayBkZXZsaW5rIGFuZCBldGh0b29sIGZsYXNoIHVwZGF0ZSBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHVzaW5nIG1vY2sgbmV0d29yayBkZXZpY2VzIGxpa2UgbmV0ZGV2c2ltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2Y4MzgwNDhhMDQ0NjU4ZjRlNmZmNjNjM2E2MzlhMWNmZTdiMjk3M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDQ6NTQ6MDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2RldmxpbmsvZGV2LmMgYi9uZXQvZGV2bGluay9kZXYuY1xuaW5kZXggNTU5NTliMGZmNWFiNC4uYjg1YmIwMmE5ZTgwNyAxMDA2NDRcbi0tLSBhL25ldC9kZXZsaW5rL2Rldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZGV2bGluay9kZXYuY1xuQEAgLTExNjksNyAmIzQzOzExNjksNyBAQCBpbnQgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIFx0bmxhX2ZpbGVfbmFtZSA9IGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9GSUxFX05BTUVdO1xuIFx0ZmlsZV9uYW1lID0gbmxhX2RhdGEobmxhX2ZpbGVfbmFtZSk7XG4tXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFx1MDAyNnBhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLVx1MDAzZWRldik7XG4mIzQzO1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstXHUwMDNlZGV2KTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVx1MDAzZWV4dGFjaywgbmxhX2ZpbGVfbmFtZSxcbiBcdFx0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gbG9jYXRlIHRoZSByZXF1ZXN0ZWQgZmlybXdhcmUgZmlsZVwmIzM0Oyk7XG5AQCAtMTI0NSw3ICYjNDM7MTI0NSw3IEBAIGludCBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSlcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZShcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cdTAwM2VkZXYpO1xuJiM0MztcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFx1MDAyNnBhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLVx1MDAzZWRldik7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0RFVkxJTksmIzM0OywKICAgICYjMzQ7TkVUREVWU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdCYjMzQ7LAogICAgJiMzNDtkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc3dpdGNoZXMgdGhlIGZpcm13YXJlIHJlcXVlc3QgbWV0aG9kIGluIGRldmxpbmsgZmxhc2ggdXBkYXRlIHJvdXRpbmVzIGZyb20gcmVxdWVzdF9maXJtd2FyZSgpIHRvIHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KCkuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXRsaW5rIGRldmxpbmsgYW5kIGV0aHRvb2wgZmxhc2ggdXBkYXRlIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdXNpbmcgbW9jayBuZXR3b3JrIGRldmljZXMgbGlrZSBuZXRkZXZzaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZjgzODA0OGEwNDQ2NThmNGU2ZmY2M2MzYTYzOWExY2ZlN2IyOTczCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwNDo1NDowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2Rldi5jIGIvbmV0L2RldmxpbmsvZGV2LmMKaW5kZXggNTU5NTliMGZmNWFiNC4uYjg1YmIwMmE5ZTgwNyAxMDA2NDQKLS0tIGEvbmV0L2RldmxpbmsvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2RldmxpbmsvZGV2LmMKQEAgLTExNjksNyAmIzQzOzExNjksNyBAQCBpbnQgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCiAJbmxhX2ZpbGVfbmFtZSA9IGluZm8tJmd0O2F0dHJzW0RFVkxJTktfQVRUUl9GTEFTSF9VUERBVEVfRklMRV9OQU1FXTsKIAlmaWxlX25hbWUgPSBubGFfZGF0YShubGFfZmlsZV9uYW1lKTsKLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZhbXA7cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstJmd0O2Rldik7CiYjNDM7CXJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KCZhbXA7cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstJmd0O2Rldik7CiAJaWYgKHJldCkgewogCQlOTF9TRVRfRVJSX01TR19BVFRSKGluZm8tJmd0O2V4dGFjaywgbmxhX2ZpbGVfbmFtZSwKIAkJCQkgICAgJiMzNDtmYWlsZWQgdG8gbG9jYXRlIHRoZSByZXF1ZXN0ZWQgZmlybXdhcmUgZmlsZSYjMzQ7KTsKQEAgLTEyNDUsNyAmIzQzOzEyNDUsNyBAQCBpbnQgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBjb25zdCBjaGFyICpmaWxlX25hbWUpCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZhbXA7cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstJmd0O2Rldik7CiYjNDM7CXJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KCZhbXA7cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstJmd0O2Rldik7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5sb2NrOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgRGV2bGluayBGaXJtd2FyZSBVcGRhdGUqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBUaGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBgbmV0L2RldmxpbmsvZGV2LmNgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWx0ZXJlZCB0aGUgZmlybXdhcmUgcmVxdWVzdCBmdW5jdGlvbnMgd2l0aGluIHRoZSBgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgYW5kIGBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVgIGZ1bmN0aW9ucy4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIHN3YXBwaW5nIGByZXF1ZXN0X2Zpcm13YXJlYCBmb3IgYHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLgoKVG8gcHJvcGVybHkgYXNzZXNzIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvZGV2bGluay9kZXYuY2AuIEkmIzM5O2xsIHVzZSBteSB0b29scyAocHJvYmFibHkgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgKSBhbmQgemVybyBpbiBvbiB0aGUgdmljaW5pdHkgb2YgbGluZXMgMTE2OSBhbmQgMTI0NS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXkmIzM5O3JlIG1ha2luZyB0aGlzIHN3aXRjaC4gSXMgdGhpcyBhYm91dCBpbXByb3ZlZCBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIG9yIGEgZGlmZmVyZW5jZSBpbiB0aGUgd2F5IHRoZSBmaXJtd2FyZSBsb2FkaW5nIGlzIGhhbmRsZWQ/IENvbnRleHQgaXMga2V5IGhlcmUsIEkgbmVlZCB0byBzZWUgaG93IHRoZSBmaXJtd2FyZSByZXF1ZXN0IG1lY2hhbmlzbSBpcyB1c2VkIHdpdGhpbiB0aGUgb3ZlcmFsbCBkZXZsaW5rIGZyYW1ld29yayB0byBmdWxseSBldmFsdWF0ZSB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgdGhlIGNvcnJlY3QgcGFyYW1ldGVycyBhcmUgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9kZXZsaW5rL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1MDpcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9DT01QT05FTlRdLFxuMTE1MTpcdFx0XHRcdFx0XHQgIFx1MDAyNnBhcmFtcy5jb21wb25lbnQsIGluZm8tXHUwMDNlZXh0YWNrKTtcbjExNTI6XHRcdGlmIChyZXQpXG4xMTUzOlx0XHRcdHJldHVybiByZXQ7XG4xMTU0Olx0XG4xMTU1Olx0XHRzdXBwb3J0ZWRfcGFyYW1zID0gZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlc3VwcG9ydGVkX2ZsYXNoX3VwZGF0ZV9wYXJhbXM7XG4xMTU2Olx0XG4xMTU3Olx0XHRubGFfb3ZlcndyaXRlX21hc2sgPSBpbmZvLVx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9GTEFTSF9VUERBVEVfT1ZFUldSSVRFX01BU0tdO1xuMTE1ODpcdFx0aWYgKG5sYV9vdmVyd3JpdGVfbWFzaykge1xuMTE1OTpcdFx0XHRzdHJ1Y3QgbmxhX2JpdGZpZWxkMzIgc2VjdGlvbnM7XG4xMTYwOlx0XG4xMTYxOlx0XHRcdGlmICghKHN1cHBvcnRlZF9wYXJhbXMgXHUwMDI2IERFVkxJTktfU1VQUE9SVF9GTEFTSF9VUERBVEVfT1ZFUldSSVRFX01BU0spKSB7XG4xMTYyOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVx1MDAzZWV4dGFjaywgbmxhX292ZXJ3cml0ZV9tYXNrLFxuMTE2MzpcdFx0XHRcdFx0XHQgICAgXCYjMzQ7b3ZlcndyaXRlIHNldHRpbmdzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlXCYjMzQ7KTtcbjExNjQ6XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMTY1Olx0XHRcdH1cbjExNjY6XHRcdFx0c2VjdGlvbnMgPSBubGFfZ2V0X2JpdGZpZWxkMzIobmxhX292ZXJ3cml0ZV9tYXNrKTtcbjExNjc6XHRcdFx0cGFyYW1zLm92ZXJ3cml0ZV9tYXNrID0gc2VjdGlvbnMudmFsdWUgXHUwMDI2IHNlY3Rpb25zLnNlbGVjdG9yO1xuMTE2ODpcdFx0fVxuMTE2OTpcdFxuMTE3MDpcdFx0bmxhX2ZpbGVfbmFtZSA9IGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9GSUxFX05BTUVdO1xuMTE3MTpcdFx0ZmlsZV9uYW1lID0gbmxhX2RhdGEobmxhX2ZpbGVfbmFtZSk7XG4xMTcyOlx0XHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cdTAwM2VkZXYpO1xuMTE3MzpcdFx0aWYgKHJldCkge1xuMTE3NDpcdFx0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLCBubGFfZmlsZV9uYW1lLFxuMTE3NTpcdFx0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byBsb2NhdGUgdGhlIHJlcXVlc3RlZCBmaXJtd2FyZSBmaWxlXCYjMzQ7KTtcbjExNzY6XHRcdFx0cmV0dXJuIHJldDtcbjExNzc6XHRcdH1cbjExNzg6XHRcbjExNzk6XHRcdGRldmxpbmtfZmxhc2hfdXBkYXRlX2JlZ2luX25vdGlmeShkZXZsaW5rKTtcbjExODA6XHRcdHJldCA9IGRldmxpbmstXHUwMDNlb3BzLVx1MDAzZWZsYXNoX3VwZGF0ZShkZXZsaW5rLCBcdTAwMjZwYXJhbXMsIGluZm8tXHUwMDNlZXh0YWNrKTtcbjExODE6XHRcdGRldmxpbmtfZmxhc2hfdXBkYXRlX2VuZF9ub3RpZnkoZGV2bGluayk7XG4xMTgyOlx0XG4xMTgzOlx0XHRyZWxlYXNlX2Zpcm13YXJlKHBhcmFtcy5mdyk7XG4xMTg0Olx0XG4xMTg1Olx0XHRyZXR1cm4gcmV0O1xuMTE4NjpcdH1cbjExODc6XHRcbjExODg6XHRzdGF0aWMgdm9pZCBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbjExODk6XHRcdFx0XHRcdFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4xMTkwOlx0e1xuMTE5MTpcdFx0c3RydWN0IGRldmxpbmtfaW5mb19yZXEgcmVxID0ge307XG4xMTkyOlx0XHRjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGF0dHI7XG4xMTkzOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xuMTE5NDpcdFx0aW50IHJlbSwgZXJyO1xuMTE5NTpcdFxuMTE5NjpcdFx0bXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7XG4xMTk3Olx0XHRpZiAoIW1zZylcbjExOTg6XHRcdFx0cmV0dXJuO1xuMTE5OTpcdFxuMTIwMDpcdFx0cmVxLm1zZyA9IG1zZztcbjEyMDE6XHRcdGVyciA9IGRldmxpbmstXHUwMDNlb3BzLVx1MDAzZWluZm9fZ2V0KGRldmxpbmssIFx1MDAyNnJlcSwgTlVMTCk7XG4xMjAyOlx0XHRpZiAoZXJyKVxuMTIwMzpcdFx0XHRnb3RvIGZyZWVfbXNnO1xuMTIwNDpcdFxuMTIwNTpcdFx0bmxhX2Zvcl9lYWNoX2F0dHJfdHlwZShubGF0dHIsIERFVkxJTktfQVRUUl9JTkZPX1ZFUlNJT05fUlVOTklORyxcbjEyMDY6XHRcdFx0XHQgICAgICAgKHZvaWQgKiltc2ctXHUwMDNlZGF0YSwgbXNnLVx1MDAzZWxlbiwgcmVtKSB7XG4xMjA3Olx0XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmt2O1xuMTIwODpcdFx0XHRpbnQgcmVtX2t2O1xuMTIwOTpcdFxuMTIxMDpcdFx0XHRubGFfZm9yX2VhY2hfbmVzdGVkX3R5cGUoa3YsIERFVkxJTktfQVRUUl9JTkZPX1ZFUlNJT05fVkFMVUUsXG4xMjExOlx0XHRcdFx0XHRcdCBubGF0dHIsIHJlbV9rdikge1xuMTIxMjpcdFx0XHRcdHN0cmxjYXQoYnVmLCBubGFfZGF0YShrdiksIGxlbik7XG4xMjEzOlx0XHRcdFx0c3RybGNhdChidWYsIFwmIzM0OyBcJiMzNDssIGxlbik7XG4xMjE0Olx0XHRcdH1cbjEyMTU6XHRcdH1cbjEyMTY6XHRmcmVlX21zZzpcbjEyMTc6XHRcdG5sbXNnX2NvbnN1bWUobXNnKTtcbjEyMTg6XHR9XG4xMjE5Olx0XG4xMjIwOlx0dm9pZCBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4xMjIxOlx0XHRcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuMTIyMjpcdHtcbjEyMjM6XHRcdGlmICghZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlaW5mb19nZXQpXG4xMjI0Olx0XHRcdHJldHVybjtcbjEyMjU6XHRcbjEyMjY6XHRcdGRldmxfbG9jayhkZXZsaW5rKTtcbjEyMjc6XHRcdGlmIChkZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXG4xMjI4Olx0XHRcdF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKGRldmxpbmssIGJ1ZiwgbGVuKTtcbjEyMjk6XHRcdGRldmxfdW5sb2NrKGRldmxpbmspO1xuMTIzMDpcdH1cbjEyMzE6XHRcbjEyMzI6XHRpbnQgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBjb25zdCBjaGFyICpmaWxlX25hbWUpXG4xMjMzOlx0e1xuMTIzNDpcdFx0c3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyBwYXJhbXMgPSB7fTtcbjEyMzU6XHRcdGludCByZXQ7XG4xMjM2Olx0XG4xMjM3Olx0XHRkZXZsX2xvY2soZGV2bGluayk7XG4xMjM4Olx0XHRpZiAoIWRldmxfaXNfcmVnaXN0ZXJlZChkZXZsaW5rKSkge1xuMTIzOTpcdFx0XHRyZXQgPSAtRU5PREVWO1xuMTI0MDpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMjQxOlx0XHR9XG4xMjQyOlx0XG4xMjQzOlx0XHRpZiAoIWRldmxpbmstXHUwMDNlb3BzLVx1MDAzZWZsYXNoX3VwZGF0ZSkge1xuMTI0NDpcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbjEyNDU6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTI0NjpcdFx0fVxuMTI0NzpcdFxuMTI0ODpcdFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstXHUwMDNlZGV2KTtcbjEyNDk6XHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI0OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqSW52ZXN0aWdhdGluZyB0aGUgZGV2bGluayBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGBkZXZsaW5rYC4gUmlnaHQsIGl0JiMzOTtzIGEgbmV0bGluayBpbnRlcmZhY2Ugc3BlY2lmaWNhbGx5IGZvciBuZXR3b3JrIGRldmljZXMsIGltcGxlbWVudGVkIHVuZGVyIGVpdGhlciBgTkVUX0RFVkxJTktgIG9yIHRoZSBvdmVyYXJjaGluZyBgTkVUYCBjb25maWcgb3B0aW9ucy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBob3cgaXMgdGhpcyB0aGluZyBhY3R1YWxseSBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgc3RhdHVzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgYG5ldC9kZXZsaW5rL0tjb25maWdgIGRpcmVjdGx5LCBhc3N1bWluZyB0aGF04oCZcyB3aGVyZSB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgZGV2bGlua2Agd291bGQgcmVzaWRlLiBJZiB0aGF0IGNvbWVzIHVwIGVtcHR5LCBvciBwcm92aWRlcyBhbiBpbmNvbXBsZXRlIHBpY3R1cmUsIHRoZW4gSSBuZWVkIHRvIGNvbnNpZGVyIGNoZWNraW5nIHRoZSBtb3JlIGdlbmVyYWwgYG5ldC9LY29uZmlnYCBmaWxlLiBTb21ldGltZXMgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkIGF0IGEgaGlnaGVyIGxldmVsLiBJZiBpdCYjMzk7cyBzdGlsbCB1bmNsZWFyLCBJIHdpbGwgdGhlbiBleHBhbmQgbXkgc2VhcmNoIGFuZCBzY2FuIGBuZXQvTWFrZWZpbGVgLiBJIGFtIHRyeWluZyB0byBkZXRlcm1pbmUgaWYgYGRldmxpbmtgIGlzIGFsd2F5cyBidWlsdCB3aGVuIGBORVRgIG9yIGBORVRfREVWTElOS2AgYXJlIGVuYWJsZWQsIG9yIGlmIGl0IGNhbiBiZSBkaXNhYmxlZCBvciBidWlsdCBhcyBhIG1vZHVsZS4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGJ1aWxkIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMTEyMSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubmV0L01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19CUklER0UpXHRcdCYjNDM7PSBicmlkZ2UvXG5uZXQvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX05FVF9ERVZMSU5LKVx0JiM0Mzs9IGRldmxpbmsvXG5uZXQvTWFrZWZpbGUtMjctb2JqLXlcdFx0XHRcdCYjNDM7PSBkc2EvXG4tLVxubmV0L2NvcmUvZGV2LmMtMTU0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2luZGlyZWN0X2NhbGxfd3JhcHBlci5oXHUwMDNlXG5uZXQvY29yZS9kZXYuYzoxNTU6I2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxubmV0L2NvcmUvZGV2LmMtMTU2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuLS1cbm5ldC9jb3JlL2Rldi5jPTEwMTI4PWludCBkZXZfZ2V0X3BoeXNfcG9ydF9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTAxMzgtXHR9XG5uZXQvY29yZS9kZXYuYzoxMDEzOTpcdHJldHVybiBkZXZsaW5rX2NvbXBhdF9waHlzX3BvcnRfbmFtZV9nZXQoZGV2LCBuYW1lLCBsZW4pO1xubmV0L2NvcmUvZGV2LmMtMTAxNDAtfVxuLS1cbm5ldC9jb3JlL2Rldi5jPTEwMTUyPWludCBuZXRpZl9nZXRfcG9ydF9wYXJlbnRfaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDE2Ni1cbm5ldC9jb3JlL2Rldi5jOjEwMTY3Olx0ZXJyID0gZGV2bGlua19jb21wYXRfc3dpdGNoX2lkX2dldChkZXYsIHBwaWQpO1xubmV0L2NvcmUvZGV2LmMtMTAxNjgtXHRpZiAoIXJlY3Vyc2UgfHwgZXJyICE9IC1FT1BOT1RTVVBQKVxuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTMzLSNpbmNsdWRlIFx1MDAzY25ldC9kcm9wcmVhc29uLmhcdTAwM2Vcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjM0OiNpbmNsdWRlIFx1MDAzY25ldC9kZXZsaW5rLmhcdTAwM2Vcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTM1LVxuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTM3LSNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9uYXBpLmhcdTAwM2Vcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjM4OiNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9kZXZsaW5rLmhcdTAwM2Vcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTM5LVxuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTEwOT1zdHJ1Y3QgbmV0X2RtX2FsZXJ0X29wcyB7XG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMTE3LVx0dm9pZCAoKmh3X3dvcmtfaXRlbV9mdW5jKShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MTE4Olx0dm9pZCAoKmh3X3RyYXBfcHJvYmUpKHZvaWQgKmlnbm9yZSwgY29uc3Qgc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMTktXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjEyMDpcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZGV2bGlua190cmFwX21ldGFkYXRhICptZXRhZGF0YSk7XG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMjEtfTtcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz0xMjM9c3RydWN0IG5ldF9kbV9za2JfY2Ige1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMTI0LVx0dW5pb24ge1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MTI1Olx0XHRzdHJ1Y3QgZGV2bGlua190cmFwX21ldGFkYXRhICpod19tZXRhZGF0YTtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTEyNi1cdFx0dm9pZCAqcGM7XG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9NDM3PXN0YXRpYyB2b2lkXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo0Mzg6bmV0X2RtX2h3X3RyYXBfc3VtbWFyeV9wcm9iZSh2b2lkICppZ25vcmUsIGNvbnN0IHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtNDM5LVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjQ0MDpcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBkZXZsaW5rX3RyYXBfbWV0YWRhdGEgKm1ldGFkYXRhKVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtNDQxLXtcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz03NDI9c3RhdGljIHNpemVfdFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6NzQzOm5ldF9kbV9mbG93X2FjdGlvbl9jb29raWVfc2l6ZShjb25zdCBzdHJ1Y3QgZGV2bGlua190cmFwX21ldGFkYXRhICpod19tZXRhZGF0YSlcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTc0NC17XG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9NzUwPW5ldF9kbV9od19wYWNrZXRfcmVwb3J0X3NpemUoc2l6ZV90IHBheWxvYWRfbGVuLFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6NzUxOlx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqaHdfbWV0YWRhdGEpXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy03NTIte1xuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTc3OD1zdGF0aWMgaW50IG5ldF9kbV9od19wYWNrZXRfcmVwb3J0X2ZpbGwoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy03ODAte1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6NzgxOlx0c3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqaHdfbWV0YWRhdGE7XG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy03ODItXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTg0NS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjg0NjpzdGF0aWMgc3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo4NDc6bmV0X2RtX2h3X21ldGFkYXRhX2NvcHkoY29uc3Qgc3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqbWV0YWRhdGEpXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy04NDgte1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtODQ5LVx0Y29uc3Qgc3RydWN0IGZsb3dfYWN0aW9uX2Nvb2tpZSAqZmFfY29va2llO1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6ODUwOlx0c3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqaHdfbWV0YWRhdGE7XG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy04NTEtXHRjb25zdCBjaGFyICp0cmFwX2dyb3VwX25hbWU7XG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9ODk0PXN0YXRpYyB2b2lkXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo4OTU6bmV0X2RtX2h3X21ldGFkYXRhX2ZyZWUoc3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqaHdfbWV0YWRhdGEpXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy04OTYte1xuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTkwND1zdGF0aWMgdm9pZCBuZXRfZG1faHdfcGFja2V0X3JlcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtOTA1LXtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjkwNjpcdHN0cnVjdCBkZXZsaW5rX3RyYXBfbWV0YWRhdGEgKmh3X21ldGFkYXRhO1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtOTA3LVx0c3RydWN0IHNrX2J1ZmYgKm1zZztcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz05NTg9c3RhdGljIHZvaWRcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjk1OTpuZXRfZG1faHdfdHJhcF9wYWNrZXRfcHJvYmUodm9pZCAqaWdub3JlLCBjb25zdCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTk2MC1cdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjk2MTpcdFx0XHQgICAgY29uc3Qgc3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqbWV0YWRhdGEpXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy05NjIte1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6OTYzOlx0c3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqbl9od19tZXRhZGF0YTtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTk2NC1cdGt0aW1lX3QgdHN0YW1wID0ga3RpbWVfZ2V0X3JlYWwoKTtcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz0xMDIzPXN0YXRpYyBpbnQgbmV0X2RtX2h3X3Byb2JlX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBuZXRfZG1fYWxlcnRfb3BzICpvcHMpXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMDI0LXtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjEwMjU6XHRyZXR1cm4gcmVnaXN0ZXJfdHJhY2VfZGV2bGlua190cmFwX3JlcG9ydChvcHMtXHUwMDNlaHdfdHJhcF9wcm9iZSwgTlVMTCk7XG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMDI2LX1cbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz0xMDI4PXN0YXRpYyB2b2lkIG5ldF9kbV9od19wcm9iZV91bnJlZ2lzdGVyKGNvbnN0IHN0cnVjdCBuZXRfZG1fYWxlcnRfb3BzICpvcHMpXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMDI5LXtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjEwMzA6XHR1bnJlZ2lzdGVyX3RyYWNlX2RldmxpbmtfdHJhcF9yZXBvcnQob3BzLVx1MDAzZWh3X3RyYXBfcHJvYmUsIE5VTEwpO1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMTAzMS1cdHRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpO1xuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTEwNDQ9c3RhdGljIGludCBuZXRfZG1faHdfbW9uaXRvcl9zdGFydChzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMTA3Mi1cdGlmIChyYykge1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MTA3MzpcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7RmFpbGVkIHRvIGNvbm5lY3QgcHJvYmUgdG8gZGV2bGlua190cmFwX3Byb2JlKCkgdHJhY2Vwb2ludFwmIzM0Oyk7XG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMDc0LVx0XHRnb3RvIGVycl9tb2R1bGVfcHV0O1xuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTEwODgtXHRcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZod19kYXRhLVx1MDAzZWRyb3BfcXVldWUpKSkge1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MTA4OTpcdFx0XHRzdHJ1Y3QgZGV2bGlua190cmFwX21ldGFkYXRhICpod19tZXRhZGF0YTtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTEwOTAtXG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9MTEwMD1zdGF0aWMgdm9pZCBuZXRfZG1faHdfbW9uaXRvcl9zdG9wKHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMTIyLVx0XHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2aHdfZGF0YS1cdTAwM2Vkcm9wX3F1ZXVlKSkpIHtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjExMjM6XHRcdFx0c3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqaHdfbWV0YWRhdGE7XG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMTI0LVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTcwMT1zdGF0aWMgdW1vZGVfdCBuZXRkZXZfcGh5c19pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTcxMS1cdFx0aWYgKCFuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZ2V0X3BoeXNfcG9ydF9uYW1lIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6NzEyOlx0XHQgICAgIW5ldGRldi1cdTAwM2VkZXZsaW5rX3BvcnQpXG5uZXQvY29yZS9uZXQtc3lzZnMuYy03MTMtXHRcdFx0cmV0dXJuIDA7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtNzE1LVx0XHRpZiAoIW5ldGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19nZXRfcG9ydF9wYXJlbnRfaWQgXHUwMDI2XHUwMDI2XG5uZXQvY29yZS9uZXQtc3lzZnMuYzo3MTY6XHRcdCAgICAhbmV0ZGV2LVx1MDAzZWRldmxpbmtfcG9ydClcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTcxNy1cdFx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01Ni0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFx1MDAzZVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NTc6I2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTgtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTI5Mj1zdGF0aWMgc2l6ZV90IHJ0bmxfcHJvdG9fZG93bl9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTMwMS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjEzMDI6c3RhdGljIHNpemVfdCBydG5sX2RldmxpbmtfcG9ydF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMzAzLXtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMzA1LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTMwNjpcdGlmIChkZXYtXHUwMDNlZGV2bGlua19wb3J0KVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTMwNzpcdFx0c2l6ZSAmIzQzOz0gZGV2bGlua19ubF9wb3J0X2hhbmRsZV9zaXplKGRldi1cdTAwM2VkZXZsaW5rX3BvcnQpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTMwOC1cbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0xMzM2PXN0YXRpYyBub2lubGluZSBzaXplX3QgaWZfbmxtc2dfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTEzOTUtXHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoTUFYX0FERFJfTEVOKSAvKiBJRkxBX1BFUk1fQUREUkVTUyAqL1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTM5NjpcdCAgICAgICAmIzQzOyBydG5sX2RldmxpbmtfcG9ydF9zaXplKGRldilcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEzOTctXHQgICAgICAgJiM0MzsgcnRubF9kcGxsX3Bpbl9zaXplKClcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yMDM1PXN0YXRpYyBpbnQgcnRubF9maWxsX3Byb3RvX2Rvd24oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMDYzLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjA2NDpzdGF0aWMgaW50IHJ0bmxfZmlsbF9kZXZsaW5rX3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwNjUtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMDY2LXtcbm5ldC9jb3JlL3J0bmV0bGluay5jOjIwNjc6XHRzdHJ1Y3QgbmxhdHRyICpkZXZsaW5rX3BvcnRfbmVzdDtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwNjgtXHRpbnQgcmV0O1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA2OS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjIwNzA6XHRkZXZsaW5rX3BvcnRfbmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9ERVZMSU5LX1BPUlQpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjA3MTpcdGlmICghZGV2bGlua19wb3J0X25lc3QpXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMDcyLVx0XHRyZXR1cm4gLUVNU0dTSVpFO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA3My1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjIwNzQ6XHRpZiAoZGV2LVx1MDAzZWRldmxpbmtfcG9ydCkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjA3NTpcdFx0cmV0ID0gZGV2bGlua19ubF9wb3J0X2hhbmRsZV9maWxsKHNrYiwgZGV2LVx1MDAzZWRldmxpbmtfcG9ydCk7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMDc2LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwNzktXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMDgwOlx0bmxhX25lc3RfZW5kKHNrYiwgZGV2bGlua19wb3J0X25lc3QpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA4MS1cdHJldHVybiAwO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwODMtbmVzdF9jYW5jZWw6XG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMDg0Olx0bmxhX25lc3RfY2FuY2VsKHNrYiwgZGV2bGlua19wb3J0X25lc3QpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA4NS1cdHJldHVybiByZXQ7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MjExMD1zdGF0aWMgaW50IHJ0bmxfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMjcyLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjI3MzpcdGlmIChydG5sX2ZpbGxfZGV2bGlua19wb3J0KHNrYiwgZGV2KSlcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIyNzQtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy04LSNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xubmV0L2RldmxpbmsvY29yZS5jOjk6I2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2RldmxpbmsuaFx1MDAzZVxubmV0L2RldmxpbmsvY29yZS5jLTEwLVxuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy0xMi1cbm5ldC9kZXZsaW5rL2NvcmUuYzoxMzpFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKGRldmxpbmtfaHdtc2cpO1xubmV0L2RldmxpbmsvY29yZS5jOjE0OkVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoZGV2bGlua19od2Vycik7XG5uZXQvZGV2bGluay9jb3JlLmM6MTU6RVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTChkZXZsaW5rX3RyYXBfcmVwb3J0KTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0xNi1cbm5ldC9kZXZsaW5rL2NvcmUuYzoxNzpERUZJTkVfWEFSUkFZX0ZMQUdTKGRldmxpbmtzLCBYQV9GTEFHU19BTExPQyk7XG5uZXQvZGV2bGluay9jb3JlLmMtMTgtXG5uZXQvZGV2bGluay9jb3JlLmM6MTk6c3RhdGljIHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rc194YV9nZXQodW5zaWduZWQgbG9uZyBpbmRleClcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMC17XG5uZXQvZGV2bGluay9jb3JlLmM6MjE6XHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMi1cbm5ldC9kZXZsaW5rL2NvcmUuYy0yMy1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNDpcdGRldmxpbmsgPSB4YV9maW5kKFx1MDAyNmRldmxpbmtzLCBcdTAwMjZpbmRleCwgaW5kZXgsIERFVkxJTktfUkVHSVNURVJFRCk7XG5uZXQvZGV2bGluay9jb3JlLmM6MjU6XHRpZiAoIWRldmxpbmsgfHwgIWRldmxpbmtfdHJ5X2dldChkZXZsaW5rKSlcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNjpcdFx0ZGV2bGluayA9IE5VTEw7XG5uZXQvZGV2bGluay9jb3JlLmMtMjctXHRyY3VfcmVhZF91bmxvY2soKTtcbm5ldC9kZXZsaW5rL2NvcmUuYzoyODpcdHJldHVybiBkZXZsaW5rO1xubmV0L2RldmxpbmsvY29yZS5jLTI5LX1cbm5ldC9kZXZsaW5rL2NvcmUuYy0zMC1cbm5ldC9kZXZsaW5rL2NvcmUuYzozMTovKiBkZXZsaW5rX3JlbHMgeGFycmF5IGNvbnRhaW5zIDE6MSByZWxhdGlvbnNoaXBzIGJldHdlZW5cbm5ldC9kZXZsaW5rL2NvcmUuYzozMjogKiBkZXZsaW5rIG9iamVjdCBhbmQgcmVsYXRlZCBuZXN0ZWQgZGV2bGluayBpbnN0YW5jZS5cbm5ldC9kZXZsaW5rL2NvcmUuYy0zMy0gKiBUaGUgeGFycmF5IGluZGV4IGlzIHVzZWQgdG8gZ2V0IHRoZSBuZXN0ZWQgb2JqZWN0IGZyb21cbi0tXG5uZXQvZGV2bGluay9jb3JlLmMtMzUtICovXG5uZXQvZGV2bGluay9jb3JlLmM6MzY6c3RhdGljIERFRklORV9YQVJSQVlfRkxBR1MoZGV2bGlua19yZWxzLCBYQV9GTEFHU19BTExPQzEpO1xubmV0L2RldmxpbmsvY29yZS5jLTM3LVxuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy0zOS1cbm5ldC9kZXZsaW5rL2NvcmUuYzo0MDpzdHJ1Y3QgZGV2bGlua19yZWwge1xubmV0L2RldmxpbmsvY29yZS5jLTQxLVx0dTMyIGluZGV4O1xubmV0L2RldmxpbmsvY29yZS5jLTQyLVx0cmVmY291bnRfdCByZWZjb3VudDtcbm5ldC9kZXZsaW5rL2NvcmUuYzo0MzpcdHUzMiBkZXZsaW5rX2luZGV4O1xubmV0L2RldmxpbmsvY29yZS5jLTQ0LVx0c3RydWN0IHtcbm5ldC9kZXZsaW5rL2NvcmUuYzo0NTpcdFx0dTMyIGRldmxpbmtfaW5kZXg7XG5uZXQvZGV2bGluay9jb3JlLmMtNDYtXHRcdHUzMiBvYmpfaW5kZXg7XG5uZXQvZGV2bGluay9jb3JlLmM6NDc6XHRcdGRldmxpbmtfcmVsX25vdGlmeV9jYl90ICpub3RpZnlfY2I7XG5uZXQvZGV2bGluay9jb3JlLmM6NDg6XHRcdGRldmxpbmtfcmVsX2NsZWFudXBfY2JfdCAqY2xlYW51cF9jYjtcbm5ldC9kZXZsaW5rL2NvcmUuYy00OS1cdFx0c3RydWN0IGRlbGF5ZWRfd29yayBub3RpZnlfd29yaztcbi0tXG5uZXQvZGV2bGluay9jb3JlLmMtNTItXG5uZXQvZGV2bGluay9jb3JlLmM6NTM6c3RhdGljIHZvaWQgZGV2bGlua19yZWxfZnJlZShzdHJ1Y3QgZGV2bGlua19yZWwgKnJlbClcbm5ldC9kZXZsaW5rL2NvcmUuYy01NC17XG5uZXQvZGV2bGluay9jb3JlLmM6NTU6XHR4YV9lcmFzZShcdTAwMjZkZXZsaW5rX3JlbHMsIHJlbC1cdTAwM2VpbmRleCk7XG5uZXQvZGV2bGluay9jb3JlLmMtNTYtXHRrZnJlZShyZWwpO1xuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy01OC1cbm5ldC9kZXZsaW5rL2NvcmUuYzo1OTpzdGF0aWMgdm9pZCBfX2RldmxpbmtfcmVsX2dldChzdHJ1Y3QgZGV2bGlua19yZWwgKnJlbClcbm5ldC9kZXZsaW5rL2NvcmUuYy02MC17XG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTYzLVxubmV0L2RldmxpbmsvY29yZS5jOjY0OnN0YXRpYyB2b2lkIF9fZGV2bGlua19yZWxfcHV0KHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsKVxubmV0L2RldmxpbmsvY29yZS5jLTY1LXtcbm5ldC9kZXZsaW5rL2NvcmUuYy02Ni1cdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cmVsLVx1MDAzZXJlZmNvdW50KSlcbm5ldC9kZXZsaW5rL2NvcmUuYzo2NzpcdFx0ZGV2bGlua19yZWxfZnJlZShyZWwpO1xubmV0L2RldmxpbmsvY29yZS5jLTY4LX1cbm5ldC9kZXZsaW5rL2NvcmUuYy02OS1cbm5ldC9kZXZsaW5rL2NvcmUuYzo3MDpzdHJ1Y3QgZGV2bGluayAqX19tdXN0X2NoZWNrIGRldmxpbmtfbmVzdGVkX2luX2dldF9sb2NrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxubmV0L2RldmxpbmsvY29yZS5jLTcxLXtcbm5ldC9kZXZsaW5rL2NvcmUuYzo3MjpcdGRldmxfYXNzZXJ0X2xvY2tlZChkZXZsaW5rKTtcbm5ldC9kZXZsaW5rL2NvcmUuYzo3MzpcdGlmICghZGV2bGluay1cdTAwM2VyZWwpXG5uZXQvZGV2bGluay9jb3JlLmMtNzQtXHRcdHJldHVybiBOVUxMO1xubmV0L2RldmxpbmsvY29yZS5jOjc1Olx0ZGV2bGluayA9IGRldmxpbmtzX3hhX2dldChkZXZsaW5rLVx1MDAzZXJlbC1cdTAwM2VuZXN0ZWRfaW4uZGV2bGlua19pbmRleCk7XG5uZXQvZGV2bGluay9jb3JlLmM6NzY6XHRpZiAoIWRldmxpbmspXG5uZXQvZGV2bGluay9jb3JlLmMtNzctXHRcdHJldHVybiBOVUxMO1xubmV0L2RldmxpbmsvY29yZS5jOjc4Olx0ZGV2bF9sb2NrKGRldmxpbmspO1xubmV0L2RldmxpbmsvY29yZS5jOjc5Olx0aWYgKGRldmxfaXNfcmVnaXN0ZXJlZChkZXZsaW5rKSlcbm5ldC9kZXZsaW5rL2NvcmUuYzo4MDpcdFx0cmV0dXJuIGRldmxpbms7XG5uZXQvZGV2bGluay9jb3JlLmM6ODE6XHRkZXZsX3VubG9jayhkZXZsaW5rKTtcbm5ldC9kZXZsaW5rL2NvcmUuYzo4MjpcdGRldmxpbmtfcHV0KGRldmxpbmspO1xubmV0L2RldmxpbmsvY29yZS5jLTgzLVx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTg1LVxubmV0L2RldmxpbmsvY29yZS5jOjg2OnN0YXRpYyB2b2lkIGRldmxpbmtfcmVsX25lc3RlZF9pbl9ub3RpZnlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvZGV2bGluay9jb3JlLmMtODcte1xubmV0L2RldmxpbmsvY29yZS5jOjg4Olx0c3RydWN0IGRldmxpbmtfcmVsICpyZWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRldmxpbmtfcmVsLFxubmV0L2RldmxpbmsvY29yZS5jLTg5LVx0XHRcdFx0XHQgICAgICAgbmVzdGVkX2luLm5vdGlmeV93b3JrLndvcmspO1xubmV0L2RldmxpbmsvY29yZS5jOjkwOlx0c3RydWN0IGRldmxpbmsgKmRldmxpbms7XG5uZXQvZGV2bGluay9jb3JlLmMtOTEtXG5uZXQvZGV2bGluay9jb3JlLmM6OTI6XHRkZXZsaW5rID0gZGV2bGlua3NfeGFfZ2V0KHJlbC1cdTAwM2VuZXN0ZWRfaW4uZGV2bGlua19pbmRleCk7XG5uZXQvZGV2bGluay9jb3JlLmM6OTM6XHRpZiAoIWRldmxpbmspXG5uZXQvZGV2bGluay9jb3JlLmMtOTQtXHRcdGdvdG8gcmVsX3B1dDtcbm5ldC9kZXZsaW5rL2NvcmUuYzo5NTpcdGlmICghZGV2bF90cnlsb2NrKGRldmxpbmspKSB7XG5uZXQvZGV2bGluay9jb3JlLmM6OTY6XHRcdGRldmxpbmtfcHV0KGRldmxpbmspO1xubmV0L2RldmxpbmsvY29yZS5jLTk3LVx0XHRnb3RvIHJlc2NoZWR1bGVfd29yaztcbm5ldC9kZXZsaW5rL2NvcmUuYy05OC1cdH1cbm5ldC9kZXZsaW5rL2NvcmUuYzo5OTpcdGlmICghZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspKSB7XG5uZXQvZGV2bGluay9jb3JlLmM6MTAwOlx0XHRkZXZsX3VubG9jayhkZXZsaW5rKTtcbm5ldC9kZXZsaW5rL2NvcmUuYzoxMDE6XHRcdGRldmxpbmtfcHV0KGRldmxpbmspO1xubmV0L2RldmxpbmsvY29yZS5jLTEwMi1cdFx0Z290byByZWxfcHV0O1xubmV0L2RldmxpbmsvY29yZS5jLTEwMy1cdH1cbm5ldC9kZXZsaW5rL2NvcmUuYzoxMDQ6XHRpZiAoIXhhX2dldF9tYXJrKFx1MDAyNmRldmxpbmtfcmVscywgcmVsLVx1MDAzZWluZGV4LCBERVZMSU5LX1JFTF9JTl9VU0UpKVxubmV0L2RldmxpbmsvY29yZS5jOjEwNTpcdFx0cmVsLVx1MDAzZW5lc3RlZF9pbi5jbGVhbnVwX2NiKGRldmxpbmssIHJlbC1cdTAwM2VuZXN0ZWRfaW4ub2JqX2luZGV4LCByZWwtXHUwMDNlaW5kZXgpO1xubmV0L2RldmxpbmsvY29yZS5jOjEwNjpcdHJlbC1cdTAwM2VuZXN0ZWRfaW4ubm90aWZ5X2NiKGRldmxpbmssIHJlbC1cdTAwM2VuZXN0ZWRfaW4ub2JqX2luZGV4KTtcbm5ldC9kZXZsaW5rL2NvcmUuYzoxMDc6XHRkZXZsX3VubG9jayhkZXZsaW5rKTtcbm5ldC9kZXZsaW5rL2NvcmUuYzoxMDg6XHRkZXZsaW5rX3B1dChkZXZsaW5rKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMDktXG5uZXQvZGV2bGluay9jb3JlLmMtMTEwLXJlbF9wdXQ6XG5uZXQvZGV2bGluay9jb3JlLmM6MTExOlx0X19kZXZsaW5rX3JlbF9wdXQocmVsKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMTItXHRyZXR1cm47XG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTExNy1cbm5ldC9kZXZsaW5rL2NvcmUuYzoxMTg6c3RhdGljIHZvaWQgZGV2bGlua19yZWxfbmVzdGVkX2luX25vdGlmeV93b3JrX3NjaGVkdWxlKHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsKVxubmV0L2RldmxpbmsvY29yZS5jLTExOS17XG5uZXQvZGV2bGluay9jb3JlLmM6MTIwOlx0X19kZXZsaW5rX3JlbF9nZXQocmVsKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMjEtXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cmVsLVx1MDAzZW5lc3RlZF9pbi5ub3RpZnlfd29yaywgMCk7XG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTEyMy1cbm5ldC9kZXZsaW5rL2NvcmUuYzoxMjQ6c3RhdGljIHN0cnVjdCBkZXZsaW5rX3JlbCAqZGV2bGlua19yZWxfYWxsb2Modm9pZClcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMjUte1xubmV0L2RldmxpbmsvY29yZS5jOjEyNjpcdHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsO1xubmV0L2RldmxpbmsvY29yZS5jLTEyNy1cdHN0YXRpYyB1MzIgbmV4dDtcbi0tXG5uZXQvZGV2bGluay9jb3JlLmMtMTMzLVxubmV0L2RldmxpbmsvY29yZS5jOjEzNDpcdGVyciA9IHhhX2FsbG9jX2N5Y2xpYyhcdTAwMjZkZXZsaW5rX3JlbHMsIFx1MDAyNnJlbC1cdTAwM2VpbmRleCwgcmVsLFxubmV0L2RldmxpbmsvY29yZS5jLTEzNS1cdFx0XHQgICAgICB4YV9saW1pdF8zMmIsIFx1MDAyNm5leHQsIEdGUF9LRVJORUwpO1xuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy0xNDItXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZyZWwtXHUwMDNlbmVzdGVkX2luLm5vdGlmeV93b3JrLFxubmV0L2RldmxpbmsvY29yZS5jOjE0MzpcdFx0XHQgIFx1MDAyNmRldmxpbmtfcmVsX25lc3RlZF9pbl9ub3RpZnlfd29yayk7XG5uZXQvZGV2bGluay9jb3JlLmMtMTQ0LVx0cmV0dXJuIHJlbDtcbi0tXG5uZXQvZGV2bGluay9jb3JlLmMtMTQ2LVxubmV0L2RldmxpbmsvY29yZS5jOjE0NzpzdGF0aWMgdm9pZCBkZXZsaW5rX3JlbF9wdXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmspXG5uZXQvZGV2bGluay9jb3JlLmMtMTQ4LXtcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNDk6XHRzdHJ1Y3QgZGV2bGlua19yZWwgKnJlbCA9IGRldmxpbmstXHUwMDNlcmVsO1xubmV0L2RldmxpbmsvY29yZS5jLTE1MC1cbi0tXG5uZXQvZGV2bGluay9jb3JlLmMtMTUyLVx0XHRyZXR1cm47XG5uZXQvZGV2bGluay9jb3JlLmM6MTUzOlx0eGFfY2xlYXJfbWFyayhcdTAwMjZkZXZsaW5rX3JlbHMsIHJlbC1cdTAwM2VpbmRleCwgREVWTElOS19SRUxfSU5fVVNFKTtcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNTQ6XHRkZXZsaW5rX3JlbF9uZXN0ZWRfaW5fbm90aWZ5X3dvcmtfc2NoZWR1bGUocmVsKTtcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNTU6XHRfX2RldmxpbmtfcmVsX3B1dChyZWwpO1xubmV0L2RldmxpbmsvY29yZS5jOjE1NjpcdGRldmxpbmstXHUwMDNlcmVsID0gTlVMTDtcbm5ldC9kZXZsaW5rL2NvcmUuYy0xNTctfVxubmV0L2RldmxpbmsvY29yZS5jLTE1OC1cbm5ldC9kZXZsaW5rL2NvcmUuYzoxNTk6dm9pZCBkZXZsaW5rX3JlbF9uZXN0ZWRfaW5fY2xlYXIodTMyIHJlbF9pbmRleClcbm5ldC9kZXZsaW5rL2NvcmUuYy0xNjAte1xubmV0L2RldmxpbmsvY29yZS5jOjE2MTpcdHhhX2NsZWFyX21hcmsoXHUwMDI2ZGV2bGlua19yZWxzLCByZWxfaW5kZXgsIERFVkxJTktfUkVMX0lOX1VTRSk7XG5uZXQvZGV2bGluay9jb3JlLmMtMTYyLX1cbm5ldC9kZXZsaW5rL2NvcmUuYy0xNjMtXG5uZXQvZGV2bGluay9jb3JlLmM6MTY0OmludCBkZXZsaW5rX3JlbF9uZXN0ZWRfaW5fYWRkKHUzMiAqcmVsX2luZGV4LCB1MzIgZGV2bGlua19pbmRleCxcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNjU6XHRcdFx0ICAgICAgdTMyIG9ial9pbmRleCwgZGV2bGlua19yZWxfbm90aWZ5X2NiX3QgKm5vdGlmeV9jYixcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNjY6XHRcdFx0ICAgICAgZGV2bGlua19yZWxfY2xlYW51cF9jYl90ICpjbGVhbnVwX2NiLFxubmV0L2RldmxpbmsvY29yZS5jOjE2NzpcdFx0XHQgICAgICBzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0xNjgte1xubmV0L2RldmxpbmsvY29yZS5jOjE2OTpcdHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsID0gZGV2bGlua19yZWxfYWxsb2MoKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0xNzAtXG5uZXQvZGV2bGluay9jb3JlLmM6MTcxOlx0QVNTRVJUX0RFVkxJTktfTk9UX1JFR0lTVEVSRUQoZGV2bGluayk7XG5uZXQvZGV2bGluay9jb3JlLmMtMTcyLVxuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy0xNzUtXG5uZXQvZGV2bGluay9jb3JlLmM6MTc2Olx0cmVsLVx1MDAzZWRldmxpbmtfaW5kZXggPSBkZXZsaW5rLVx1MDAzZWluZGV4O1xubmV0L2RldmxpbmsvY29yZS5jOjE3NzpcdHJlbC1cdTAwM2VuZXN0ZWRfaW4uZGV2bGlua19pbmRleCA9IGRldmxpbmtfaW5kZXg7XG5uZXQvZGV2bGluay9jb3JlLmMtMTc4LVx0cmVsLVx1MDAzZW5lc3RlZF9pbi5vYmpfaW5kZXggPSBvYmpfaW5kZXg7XG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTE4MS1cdCpyZWxfaW5kZXggPSByZWwtXHUwMDNlaW5kZXg7XG5uZXQvZGV2bGluay9jb3JlLmM6MTgyOlx0eGFfc2V0X21hcmsoXHUwMDI2ZGV2bGlua19yZWxzLCByZWwtXHUwMDNlaW5kZXgsIERFVkxJTktfUkVMX0lOX1VTRSk7XG5uZXQvZGV2bGluay9jb3JlLmM6MTgzOlx0ZGV2bGluay1cdTAwM2VyZWwgPSByZWw7XG5uZXQvZGV2bGluay9jb3JlLmMtMTg0LVx0cmV0dXJuIDA7XG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTE4Ny0vKipcbm5ldC9kZXZsaW5rL2NvcmUuYzoxODg6ICogZGV2bGlua19yZWxfbmVzdGVkX2luX25vdGlmeSAtIE5vdGlmeSB0aGUgb2JqZWN0IHRoaXMgZGV2bGlua1xubmV0L2RldmxpbmsvY29yZS5jLTE4OS0gKlx0XHRcdFx0ICBpbnN0YW5jZSBpcyBuZXN0ZWQgaW4uXG5uZXQvZGV2bGluay9jb3JlLmM6MTkwOiAqIEBkZXZsaW5rOiBkZXZsaW5rXG5uZXQvZGV2bGluay9jb3JlLmMtMTkxLSAqXG5uZXQvZGV2bGluay9jb3JlLmM6MTkyOiAqIFRoaXMgaXMgY2FsbGVkIHVwb24gbmV0d29yayBuYW1lc3BhY2UgY2hhbmdlIG9mIGRldmxpbmsgaW5zdGFuY2UuXG5uZXQvZGV2bGluay9jb3JlLmM6MTkzOiAqIEluIGNhc2UgdGhpcyBkZXZsaW5rIGluc3RhbmNlIGlzIG5lc3RlZCBpbiBhbm90aGVyIGRldmxpbmsgb2JqZWN0LFxubmV0L2RldmxpbmsvY29yZS5jLTE5NC0gKiBhIG5vdGlmaWNhdGlvbiBvZiBhIGNoYW5nZSBvZiB0aGlzIG9iamVjdCBzaG91bGQgYmUgc2VudFxubmV0L2RldmxpbmsvY29yZS5jOjE5NTogKiBvdmVyIG5ldGxpbmsuIFRoZSBwYXJlbnQgZGV2bGluayBpbnN0YW5jZSBsb2NrIG5lZWRzIHRvIGJlXG5uZXQvZGV2bGluay9jb3JlLmMtMTk2LSAqIHRha2VuIGR1cmluZyB0aGUgbm90aWZpY2F0aW9uIHByZXBhcmF0aW9uLlxuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy0xOTgtICovXG5uZXQvZGV2bGluay9jb3JlLmM6MTk5OnZvaWQgZGV2bGlua19yZWxfbmVzdGVkX2luX25vdGlmeShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMDAte1xubmV0L2RldmxpbmsvY29yZS5jOjIwMTpcdHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsID0gZGV2bGluay1cdTAwM2VyZWw7XG5uZXQvZGV2bGluay9jb3JlLmMtMjAyLVxuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy0yMDQtXHRcdHJldHVybjtcbm5ldC9kZXZsaW5rL2NvcmUuYzoyMDU6XHRkZXZsaW5rX3JlbF9uZXN0ZWRfaW5fbm90aWZ5X3dvcmtfc2NoZWR1bGUocmVsKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMDYtfVxubmV0L2RldmxpbmsvY29yZS5jLTIwNy1cbm5ldC9kZXZsaW5rL2NvcmUuYzoyMDg6c3RhdGljIHN0cnVjdCBkZXZsaW5rX3JlbCAqZGV2bGlua19yZWxfZmluZCh1bnNpZ25lZCBsb25nIHJlbF9pbmRleClcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMDkte1xubmV0L2RldmxpbmsvY29yZS5jOjIxMDpcdHJldHVybiB4YV9maW5kKFx1MDAyNmRldmxpbmtfcmVscywgXHUwMDI2cmVsX2luZGV4LCByZWxfaW5kZXgsXG5uZXQvZGV2bGluay9jb3JlLmMtMjExLVx0XHQgICAgICAgREVWTElOS19SRUxfSU5fVVNFKTtcbi0tXG5uZXQvZGV2bGluay9jb3JlLmMtMjEzLVxubmV0L2RldmxpbmsvY29yZS5jOjIxNDpzdGF0aWMgc3RydWN0IGRldmxpbmsgKmRldmxpbmtfcmVsX2RldmxpbmtfZ2V0KHUzMiByZWxfaW5kZXgpXG5uZXQvZGV2bGluay9jb3JlLmMtMjE1LXtcbm5ldC9kZXZsaW5rL2NvcmUuYzoyMTY6XHRzdHJ1Y3QgZGV2bGlua19yZWwgKnJlbDtcbm5ldC9kZXZsaW5rL2NvcmUuYzoyMTc6XHR1MzIgZGV2bGlua19pbmRleDtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMTgtXG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTIyMC1cdFx0cmV0dXJuIE5VTEw7XG5uZXQvZGV2bGluay9jb3JlLmM6MjIxOlx0eGFfbG9jayhcdTAwMjZkZXZsaW5rX3JlbHMpO1xubmV0L2RldmxpbmsvY29yZS5jOjIyMjpcdHJlbCA9IGRldmxpbmtfcmVsX2ZpbmQocmVsX2luZGV4KTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMjMtXHRpZiAocmVsKVxubmV0L2RldmxpbmsvY29yZS5jOjIyNDpcdFx0ZGV2bGlua19pbmRleCA9IHJlbC1cdTAwM2VkZXZsaW5rX2luZGV4O1xubmV0L2RldmxpbmsvY29yZS5jOjIyNTpcdHhhX3VubG9jayhcdTAwMjZkZXZsaW5rX3JlbHMpO1xubmV0L2RldmxpbmsvY29yZS5jLTIyNi1cdGlmICghcmVsKVxubmV0L2RldmxpbmsvY29yZS5jLTIyNy1cdFx0cmV0dXJuIE5VTEw7XG5uZXQvZGV2bGluay9jb3JlLmM6MjI4Olx0cmV0dXJuIGRldmxpbmtzX3hhX2dldChkZXZsaW5rX2luZGV4KTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMjktfVxubmV0L2RldmxpbmsvY29yZS5jLTIzMC1cbm5ldC9kZXZsaW5rL2NvcmUuYzoyMzE6aW50IGRldmxpbmtfcmVsX2RldmxpbmtfaGFuZGxlX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMzItXHRcdFx0XHQgICB1MzIgcmVsX2luZGV4LCBpbnQgYXR0cnR5cGUsXG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTIzNC17XG5uZXQvZGV2bGluay9jb3JlLmM6MjM1Olx0c3RydWN0IG5ldCAqbmV0ID0gZGV2bGlua19uZXQoZGV2bGluayk7XG5uZXQvZGV2bGluay9jb3JlLmM6MjM2Olx0c3RydWN0IGRldmxpbmsgKnJlbF9kZXZsaW5rO1xubmV0L2RldmxpbmsvY29yZS5jLTIzNy1cdGludCBlcnI7XG5uZXQvZGV2bGluay9jb3JlLmMtMjM4LVxubmV0L2RldmxpbmsvY29yZS5jOjIzOTpcdHJlbF9kZXZsaW5rID0gZGV2bGlua19yZWxfZGV2bGlua19nZXQocmVsX2luZGV4KTtcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNDA6XHRpZiAoIXJlbF9kZXZsaW5rKVxubmV0L2RldmxpbmsvY29yZS5jLTI0MS1cdFx0cmV0dXJuIDA7XG5uZXQvZGV2bGluay9jb3JlLmM6MjQyOlx0ZXJyID0gZGV2bGlua19ubF9wdXRfbmVzdGVkX2hhbmRsZShtc2csIG5ldCwgcmVsX2RldmxpbmssIGF0dHJ0eXBlKTtcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNDM6XHRkZXZsaW5rX3B1dChyZWxfZGV2bGluayk7XG5uZXQvZGV2bGluay9jb3JlLmMtMjQ0LVx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IG1zZ191cGRhdGVkKVxuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy0yNDgtXG5uZXQvZGV2bGluay9jb3JlLmM6MjQ5OnZvaWQgKmRldmxpbmtfcHJpdihzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNTAte1xubmV0L2RldmxpbmsvY29yZS5jOjI1MTpcdHJldHVybiBcdTAwMjZkZXZsaW5rLVx1MDAzZXByaXY7XG5uZXQvZGV2bGluay9jb3JlLmMtMjUyLX1cbm5ldC9kZXZsaW5rL2NvcmUuYzoyNTM6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bGlua19wcml2KTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNTQtXG5uZXQvZGV2bGluay9jb3JlLmM6MjU1OnN0cnVjdCBkZXZsaW5rICpwcml2X3RvX2Rldmxpbmsodm9pZCAqcHJpdilcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNTYte1xubmV0L2RldmxpbmsvY29yZS5jOjI1NzpcdHJldHVybiBjb250YWluZXJfb2YocHJpdiwgc3RydWN0IGRldmxpbmssIHByaXYpO1xubmV0L2RldmxpbmsvY29yZS5jLTI1OC19XG5uZXQvZGV2bGluay9jb3JlLmM6MjU5OkVYUE9SVF9TWU1CT0xfR1BMKHByaXZfdG9fZGV2bGluayk7XG5uZXQvZGV2bGluay9jb3JlLmMtMjYwLVxubmV0L2RldmxpbmsvY29yZS5jOjI2MTpzdHJ1Y3QgZGV2aWNlICpkZXZsaW5rX3RvX2Rldihjb25zdCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNjIte1xubmV0L2RldmxpbmsvY29yZS5jOjI2MzpcdHJldHVybiBkZXZsaW5rLVx1MDAzZWRldjtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNjQtfVxubmV0L2RldmxpbmsvY29yZS5jOjI2NTpFWFBPUlRfU1lNQk9MX0dQTChkZXZsaW5rX3RvX2Rldik7XG5uZXQvZGV2bGluay9jb3JlLmMtMjY2LVxubmV0L2RldmxpbmsvY29yZS5jOjI2Nzpjb25zdCBjaGFyICpkZXZsaW5rX2J1c19uYW1lKGNvbnN0IHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxubmV0L2RldmxpbmsvY29yZS5jLTI2OC17XG5uZXQvZGV2bGluay9jb3JlLmM6MjY5Olx0cmV0dXJuIGRldmxpbmstXHUwMDNlZGV2ID8gZGV2bGluay1cdTAwM2VkZXYtXHUwMDNlYnVzLVx1MDAzZW5hbWUgOiBERVZMSU5LX0lOREVYX0JVU19OQU1FO1xubmV0L2RldmxpbmsvY29yZS5jLTI3MC19XG5uZXQvZGV2bGluay9jb3JlLmM6MjcxOkVYUE9SVF9TWU1CT0xfR1BMKGRldmxpbmtfYnVzX25hbWUpO1xubmV0L2RldmxpbmsvY29yZS5jLTI3Mi1cbm5ldC9kZXZsaW5rL2NvcmUuYzoyNzM6Y29uc3QgY2hhciAqZGV2bGlua19kZXZfbmFtZShjb25zdCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNzQte1xubmV0L2RldmxpbmsvY29yZS5jOjI3NTpcdHJldHVybiBkZXZsaW5rLVx1MDAzZWRldiA/IGRldl9uYW1lKGRldmxpbmstXHUwMDNlZGV2KSA6IGRldmxpbmstXHUwMDNlZGV2X25hbWVfaW5kZXg7XG5uZXQvZGV2bGluay9jb3JlLmMtMjc2LX1cbm5ldC9kZXZsaW5rL2NvcmUuYzoyNzc6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bGlua19kZXZfbmFtZSk7XG5uZXQvZGV2bGluay9jb3JlLmMtMjc4LVxubmV0L2RldmxpbmsvY29yZS5jOjI3OTpjb25zdCBjaGFyICpkZXZsaW5rX2Rldl9kcml2ZXJfbmFtZShjb25zdCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0yODAte1xubmV0L2RldmxpbmsvY29yZS5jOjI4MTpcdHJldHVybiBkZXZsaW5rLVx1MDAzZWRldl9kcml2ZXItXHUwMDNlbmFtZTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yODItfVxubmV0L2RldmxpbmsvY29yZS5jOjI4MzpFWFBPUlRfU1lNQk9MX0dQTChkZXZsaW5rX2Rldl9kcml2ZXJfbmFtZSk7XG5uZXQvZGV2bGluay9jb3JlLmMtMjg0LVxubmV0L2RldmxpbmsvY29yZS5jOjI4NTpzdHJ1Y3QgbmV0ICpkZXZsaW5rX25ldChjb25zdCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0yODYte1xubmV0L2RldmxpbmsvY29yZS5jOjI4NzpcdHJldHVybiByZWFkX3BuZXQoXHUwMDI2ZGV2bGluay1cdTAwM2VfbmV0KTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yODgtfVxubmV0L2RldmxpbmsvY29yZS5jOjI4OTpFWFBPUlRfU1lNQk9MX0dQTChkZXZsaW5rX25ldCk7XG5uZXQvZGV2bGluay9jb3JlLmMtMjkwLVxubmV0L2RldmxpbmsvY29yZS5jOjI5MTp2b2lkIGRldmxfYXNzZXJ0X2xvY2tlZChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0yOTIte1xubmV0L2RldmxpbmsvY29yZS5jOjI5MzpcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZGV2bGluay1cdTAwM2Vsb2NrKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yOTQtfVxubmV0L2RldmxpbmsvY29yZS5jPTI5NT1FWFBPUlRfU1lNQk9MX0dQTChkZXZsX2Fzc2VydF9sb2NrZWQpO1xuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy0yOTgtLyogRm9yIHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIExPQ0tERVAgb25seSBlLmcuIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoKSAqL1xubmV0L2RldmxpbmsvY29yZS5jOjI5OTpib29sIGRldmxfbG9ja19pc19oZWxkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxubmV0L2RldmxpbmsvY29yZS5jLTMwMC17XG5uZXQvZGV2bGluay9jb3JlLmM6MzAxOlx0cmV0dXJuIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZkZXZsaW5rLVx1MDAzZWxvY2spO1xubmV0L2RldmxpbmsvY29yZS5jLTMwMi19XG5uZXQvZGV2bGluay9jb3JlLmM9MzAzPUVYUE9SVF9TWU1CT0xfR1BMKGRldmxfbG9ja19pc19oZWxkKTtcbi0tXG5uZXQvZGV2bGluay9jb3JlLmMtMzA1LVxubmV0L2RldmxpbmsvY29yZS5jOjMwNjp2b2lkIGRldmxfbG9jayhzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMDcte1xubmV0L2RldmxpbmsvY29yZS5jOjMwODpcdG11dGV4X2xvY2soXHUwMDI2ZGV2bGluay1cdTAwM2Vsb2NrKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMDktfVxubmV0L2RldmxpbmsvY29yZS5jPTMxMD1FWFBPUlRfU1lNQk9MX0dQTChkZXZsX2xvY2spO1xubmV0L2RldmxpbmsvY29yZS5jLTMxMS1cbm5ldC9kZXZsaW5rL2NvcmUuYzozMTI6aW50IGRldmxfdHJ5bG9jayhzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMTMte1xubmV0L2RldmxpbmsvY29yZS5jOjMxNDpcdHJldHVybiBtdXRleF90cnlsb2NrKFx1MDAyNmRldmxpbmstXHUwMDNlbG9jayk7XG5uZXQvZGV2bGluay9jb3JlLmMtMzE1LX1cbm5ldC9kZXZsaW5rL2NvcmUuYz0zMTY9RVhQT1JUX1NZTUJPTF9HUEwoZGV2bF90cnlsb2NrKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMTctXG5uZXQvZGV2bGluay9jb3JlLmM6MzE4OnZvaWQgZGV2bF91bmxvY2soc3RydWN0IGRldmxpbmsgKmRldmxpbmspXG5uZXQvZGV2bGluay9jb3JlLmMtMzE5LXtcbm5ldC9kZXZsaW5rL2NvcmUuYzozMjA6XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2bGluay1cdTAwM2Vsb2NrKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMjEtfVxubmV0L2RldmxpbmsvY29yZS5jPTMyMj1FWFBPUlRfU1lNQk9MX0dQTChkZXZsX3VubG9jayk7XG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTMyNC0vKipcbm5ldC9kZXZsaW5rL2NvcmUuYzozMjU6ICogZGV2bGlua190cnlfZ2V0KCkgLSB0cnkgdG8gb2J0YWluIGEgcmVmZXJlbmNlIG9uIGEgZGV2bGluayBpbnN0YW5jZVxubmV0L2RldmxpbmsvY29yZS5jOjMyNjogKiBAZGV2bGluazogaW5zdGFuY2UgdG8gcmVmZXJlbmNlXG5uZXQvZGV2bGluay9jb3JlLmMtMzI3LSAqXG5uZXQvZGV2bGluay9jb3JlLmM6MzI4OiAqIE9idGFpbiBhIHJlZmVyZW5jZSBvbiBhIGRldmxpbmsgaW5zdGFuY2UuIEEgcmVmZXJlbmNlIG9uIGEgZGV2bGluayBpbnN0YW5jZVxubmV0L2RldmxpbmsvY29yZS5jLTMyOS0gKiBvbmx5IGltcGxpZXMgdGhhdCBpdCYjMzk7cyBzYWZlIHRvIHRha2UgdGhlIGluc3RhbmNlIGxvY2suIEl0IGRvZXMgbm90IGltcGx5XG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTMzMi0gKi9cbm5ldC9kZXZsaW5rL2NvcmUuYzozMzM6c3RydWN0IGRldmxpbmsgKl9fbXVzdF9jaGVjayBkZXZsaW5rX3RyeV9nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmspXG5uZXQvZGV2bGluay9jb3JlLmMtMzM0LXtcbm5ldC9kZXZsaW5rL2NvcmUuYzozMzU6XHRpZiAocmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNmRldmxpbmstXHUwMDNlcmVmY291bnQpKVxubmV0L2RldmxpbmsvY29yZS5jOjMzNjpcdFx0cmV0dXJuIGRldmxpbms7XG5uZXQvZGV2bGluay9jb3JlLmMtMzM3LVx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTMzOS1cbm5ldC9kZXZsaW5rL2NvcmUuYzozNDA6c3RhdGljIHZvaWQgZGV2bGlua19yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0zNDEte1xubmV0L2RldmxpbmsvY29yZS5jOjM0MjpcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xubmV0L2RldmxpbmsvY29yZS5jLTM0My1cbm5ldC9kZXZsaW5rL2NvcmUuYzozNDQ6XHRkZXZsaW5rID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLCBzdHJ1Y3QgZGV2bGluaywgcndvcmspO1xubmV0L2RldmxpbmsvY29yZS5jLTM0NS1cbm5ldC9kZXZsaW5rL2NvcmUuYzozNDY6XHRtdXRleF9kZXN0cm95KFx1MDAyNmRldmxpbmstXHUwMDNlbG9jayk7XG5uZXQvZGV2bGluay9jb3JlLmM6MzQ3Olx0bG9ja2RlcF91bnJlZ2lzdGVyX2tleShcdTAwMjZkZXZsaW5rLVx1MDAzZWxvY2tfa2V5KTtcbm5ldC9kZXZsaW5rL2NvcmUuYzozNDg6XHRpZiAoZGV2bGluay1cdTAwM2VkZXYpXG5uZXQvZGV2bGluay9jb3JlLmM6MzQ5Olx0XHRwdXRfZGV2aWNlKGRldmxpbmstXHUwMDNlZGV2KTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0zNTAtXHRlbHNlXG5uZXQvZGV2bGluay9jb3JlLmM6MzUxOlx0XHRrZnJlZShkZXZsaW5rLVx1MDAzZWRldl9uYW1lX2luZGV4KTtcbm5ldC9kZXZsaW5rL2NvcmUuYzozNTI6XHRrdmZyZWUoZGV2bGluayk7XG5uZXQvZGV2bGluay9jb3JlLmMtMzUzLX1cbm5ldC9kZXZsaW5rL2NvcmUuYy0zNTQtXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkxMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE5FVF9ERVZMSU5LIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgTkVUX0RFVkxJTktgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEdpdmVuIHRoZSBuYXR1cmUgb2YgbmV0d29ya2luZyBkZXZpY2UgbGlua2luZywgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgd2lsbCBiZSBoYW5naW5nIG91dCBpbiBlaXRoZXIgYG5ldC9kZXZsaW5rL0tjb25maWdgIG9yLCBwZXJoYXBzIGlmIGl0JiMzOTtzIG1vcmUgZnVuZGFtZW50YWwsIGBuZXQvS2NvbmZpZ2AuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRob3NlIGZpbGVzIGRpcmVjdGx5LiBJIGtub3cgbXkgd2F5IGFyb3VuZCB0aGUga2VybmVsIHNvdXJjZSwgYW5kIEkmIzM5O20gZmFpcmx5IGNvbmZpZGVudCBJIGNhbiBxdWlja2x5IGxvY2F0ZSB0aGUgc3BlY2lmaWMgc3ltYm9scyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYE5FVF9ERVZMSU5LYCBhbmQgZmlndXJlIG91dCBob3cgaXQmIzM5O3MgY29udHJvbGxlZC4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0RFVkxJTksmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ3OT1jb25maWcgTkVUX1NPQ0tfTVNHXG4tLVxubmV0L0tjb25maWctNDg2LVxubmV0L0tjb25maWc6NDg3OmNvbmZpZyBORVRfREVWTElOS1xubmV0L0tjb25maWctNDg4LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjAzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgTkVUX0RFVkxJTksgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW5hYmxpbmcgY29uZGl0aW9ucyBmb3IgYE5FVF9ERVZMSU5LYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gbGluZSA0ODcgKG9yIHRoZXJlYWJvdXRzIC0gZ2l2ZSBvciB0YWtlIGEgZmV3IGxpbmVzIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24gSSYjMzk7bSBsb29raW5nIGF0KSB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGBORVRfREVWTElOS2AgaXMgZ3VhcmRlZCBiZWhpbmQgYW55IHNwZWNpZmljIHByZXJlcXVpc2l0ZXMsIG90aGVyIGNvbmZpZyBzeW1ib2xzLCBvciBhcmNoaXRlY3R1cmUgbGltaXRhdGlvbnMuIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGNoZWNraW5nIHdoZXRoZXIgaXQmIzM5O3MgYSAmIzM0O3Byb21wdCYjMzQ7IG9wdGlvbiwgbWVhbmluZyBhIGRpcmVjdCB1c2VyIGNob2ljZSwgb3IgaWYgaXQgaGFzIGEgZGVmYXVsdCB2YWx1ZSB0aGF0JiMzOTtzIGF1dG9tYXRpY2FsbHkgc2V0IHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0cyB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMgYW5kIGhvdyB0byBtYW5hZ2UgdGhlIE5FVF9ERVZMSU5LIHNldHRpbmcgZm9yIG15IHB1cnBvc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0ODA6XHRcdGJvb2xcbiA0ODE6XHRcdGRlZmF1bHQgblxuIDQ4MjpcdFx0aGVscFxuIDQ4MzpcdFx0ICBUaGUgTkVUX1NPQ0tfTVNHIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBwbGFpbiBzb2NrZXRzIChlLmcuIFRDUCkgb3JcbiA0ODQ6XHRcdCAgVUxQcyAodXBwZXIgbGF5ZXIgbW9kdWxlcywgZS5nLiBUTFMpIHRvIHByb2Nlc3MgTDcgYXBwbGljYXRpb24gZGF0YVxuIDQ4NTpcdFx0ICB3aXRoIHRoZSBoZWxwIG9mIEJQRiBwcm9ncmFtcy5cbiA0ODY6XHRcbiA0ODc6XHRjb25maWcgTkVUX0RFVkxJTktcbiA0ODg6XHRcdGJvb2xcbiA0ODk6XHRcdGRlZmF1bHQgblxuIDQ5MDpcdFxuIDQ5MTpcdGNvbmZpZyBQQUdFX1BPT0xcbiA0OTI6XHRcdGJvb2xcbiA0OTM6XHRcbiA0OTQ6XHRjb25maWcgUEFHRV9QT09MX1NUQVRTXG4gNDk1Olx0XHRkZWZhdWx0IG5cbiA0OTY6XHRcdGJvb2wgXCYjMzQ7UGFnZSBwb29sIHN0YXRzXCYjMzQ7XG4gNDk3Olx0XHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxuIDQ5ODpcdFx0aGVscFxuIDQ5OTpcdFx0ICBFbmFibGUgcGFnZSBwb29sIHN0YXRpc3RpY3MgdG8gdHJhY2sgcGFnZSBhbGxvY2F0aW9uIGFuZCByZWN5Y2xpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MjMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTkVUX0RFVkxJTksgVXNhZ2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGBORVRfREVWTElOS2AmIzM5O3MgaW5mbHVlbmNlIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIHdoZXJlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYmVpbmcgdXRpbGl6ZWQuIEkgd2FudCB0byBpZGVudGlmeSBhbGwgdGhlIG1vZHVsZXMsIHN1YnN5c3RlbXMsIGFuZCBjb2RlIHBhdGhzIHRoYXQgYXJlIGNvbmRpdGlvbmFsIG9uIG9yIGRlcGVuZGVudCB1cG9uIGBORVRfREVWTElOS2AuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgd2l0aCBhIHRhcmdldGVkIHNlYXJjaCBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gSSYjMzk7bGwgbmVlZCB0byB1c2UgdGhlIHJpZ2h0IHRvb2xzIGFuZCBxdWVyeSB0byBnZXQgYSBwcmVjaXNlIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLiBJJiMzOTttIGFpbWluZyBmb3IgYSByZXN1bHQgdGhhdCBwaW5wb2ludHMgYm90aCBkaXJlY3QgYW5kIHBvdGVudGlhbGx5IGluZGlyZWN0IHVzYWdlcywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgcnVudGltZSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaW50cm9kdWNlLiBUaGlzIGxldmVsIG9mIGFuYWx5c2lzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBhcmNoaXRlY3R1cmFsIHJhbWlmaWNhdGlvbnMgb2YgYE5FVF9ERVZMSU5LYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IE5FVF9ERVZMSU5LJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL21hcnZlbGwvS2NvbmZpZz00MD1jb25maWcgQ1JZUFRPX0RFVl9PQ1RFT05UWDJfQ1BUXG4tLVxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9LY29uZmlnLTUxLVx0c2VsZWN0IENSWVBUT19BVVRIRU5DXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL0tjb25maWc6NTI6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvS2NvbmZpZy01My1cdGhlbHBcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTM9Y29uZmlnIFpMMzA3M1hcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTYtXHRzZWxlY3QgRFBMTFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzo3Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTgtXHRzZWxlY3QgUkVHTUFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz02MDQ9Y29uZmlnIE5FVERFVlNJTVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctNjA5LVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxuZHJpdmVycy9uZXQvS2NvbmZpZzo2MTA6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L0tjb25maWctNjExLVx0c2VsZWN0IFBBR0VfUE9PTFxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnPTE2OD1jb25maWcgQ0FOX0tWQVNFUl9QQ0lFRkRcbi0tXG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZy0xNzAtXHR0cmlzdGF0ZSBcJiMzNDtLdmFzZXIgUENJZSBGRCBjYXJkc1wmIzM0O1xuZHJpdmVycy9uZXQvY2FuL0tjb25maWc6MTcxOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZy0xNzItXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnPTMxPWNvbmZpZyBDQU5fRVRBU19FUzU4WFxuLS1cbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy0zMy1cdHNlbGVjdCBDUkMxNlxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnOjM0Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWctMzUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnPTY3PWNvbmZpZyBDQU5fS1ZBU0VSX1VTQlxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnLTY4LVx0dHJpc3RhdGUgXCYjMzQ7S3Zhc2VyIENBTi9VU0IgaW50ZXJmYWNlXCYjMzQ7XG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc6Njk6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy03MC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZz0xOT1jb25maWcgRU5BX0VUSEVSTkVUXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL0tjb25maWctMjMtXHRzZWxlY3QgRElNTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZzoyNDpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL0tjb25maWctMjUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWc9MTY5PWNvbmZpZyBQRFNfQ09SRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnLTE3Mi1cdHNlbGVjdCBBVVhJTElBUllfQlVTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZzoxNzM6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnLTE3NC1cdHNlbGVjdCBQTERNRldcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTIwNz1jb25maWcgQk5YVFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjEyLVx0c2VsZWN0IENSQzMyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjIxMzpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTQtXHRzZWxlY3QgUEFHRV9QT09MXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yNTg9Y29uZmlnIEJOR0Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI2MC1cdGRlcGVuZHMgb24gUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI2MTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjItXHRzZWxlY3QgUEFHRV9QT09MXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9Njg9Y29uZmlnIExJUVVJRElPXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNzUtXHRzZWxlY3QgTElRVUlESU9fQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6NzY6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTc3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnPTI9Y29uZmlnIEZTTF9EUEFBMl9FVEhcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvS2NvbmZpZy03LVx0c2VsZWN0IEZTTF9YR01BQ19NRElPXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvS2NvbmZpZzo4Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvS2NvbmZpZy05LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnPTY9Y29uZmlnIEZVTl9FVEhcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZy05LVx0ZGVwZW5kcyBvbiBUTFMgXHUwMDI2XHUwMDI2IFRMU19ERVZJQ0UgfHwgVExTX0RFVklDRT1uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZzoxMDpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL0tjb25maWctMTEtXHRzZWxlY3QgRlVOX0NPUkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZz05MT1jb25maWcgSE5TM1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTkzLVx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjk0Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05NS1cdHNlbGVjdCBQQUdFX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvS2NvbmZpZz02PWNvbmZpZyBISU5JQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYy9LY29uZmlnLTgtXHRkZXBlbmRzIG9uIChQQ0lfTVNJIFx1MDAyNlx1MDAyNiAoWDg2IHx8IEFSTTY0KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYy9LY29uZmlnOjk6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYy9LY29uZmlnLTEwLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MTQ1PWNvbmZpZyBJWEdCRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMTUwLVx0c2VsZWN0IE1ESU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MTUxOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTE1Mi1cdHNlbGVjdCBQTERNRldcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTIyOT1jb25maWcgSTQwRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjM1LVx0c2VsZWN0IExJQklFX0FETUlOUVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyMzY6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjM3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjkxPWNvbmZpZyBJQ0Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwMi1cdHNlbGVjdCBMSUJJRV9GV0xPRyBpZiBERUJVR19GU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozMDM6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzA0LVx0c2VsZWN0IFBBQ0tJTkdcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGQvS2NvbmZpZz00PWNvbmZpZyBJWERcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGQvS2NvbmZpZy04LVx0c2VsZWN0IExJQklFX1BDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhkL0tjb25maWc6OTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhkL0tjb25maWctMTAtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz05PWNvbmZpZyBPQ1RFT05UWDJfQUZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTExLVx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjEyOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEzLVx0ZGVwZW5kcyBvbiAoNjRCSVQgXHUwMDI2XHUwMDI2IENPTVBJTEVfVEVTVCkgfHwgQVJNNjRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnPTMxPWNvbmZpZyBPQ1RFT05UWDJfUEZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMzLVx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjM0Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM1LVx0c2VsZWN0IFBBR0VfUE9PTFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZz02PWNvbmZpZyBQUkVTVEVSQVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZy05LVx0ZGVwZW5kcyBvbiBCUklER0UgfHwgQlJJREdFPW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZzoxMDpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9LY29uZmlnLTExLVx0c2VsZWN0IFBIWUxJTktcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc9Mjg9Y29uZmlnIE1MWDRfQ09SRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy0zMS1cdHNlbGVjdCBBVVhJTElBUllfQlVTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc6MzI6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy0zMy1cdGRlZmF1bHQgblxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnPTY9Y29uZmlnIE1MWDVfQ09SRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTktXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MTA6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTExLVx0ZGVwZW5kcyBvbiBNTFhGVyB8fCAhTUxYRldcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhmdy9LY29uZmlnPTY9Y29uZmlnIE1MWEZXXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4ZncvS2NvbmZpZy0xNC1cdHNlbGVjdCBYWl9ERUNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGZ3L0tjb25maWc6MTU6XHRzZWxlY3QgTkVUX0RFVkxJTktcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnPTY9Y29uZmlnIE1MWFNXX0NPUkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O01lbGxhbm94IFRlY2hub2xvZ2llcyBTd2l0Y2ggQVNJQ3Mgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZzo4Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnLTktXHRzZWxlY3QgTUxYRldcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc9MjA9Y29uZmlnIEZCTklDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI2LVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjI3Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjgtXHRzZWxlY3QgUEFHRV9QT09MXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9LY29uZmlnPTE1PWNvbmZpZyBNU0NDX09DRUxPVF9TV0lUQ0hfTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL0tjb25maWctMTYtXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL0tjb25maWc6MTc6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZy0xOC1cdHNlbGVjdCBSRUdNQVBfTU1JT1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnPTE5PWNvbmZpZyBORlBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvS2NvbmZpZy0yMy1cdGRlcGVuZHMgb24gVExTIFx1MDAyNlx1MDAyNiBUTFNfREVWSUNFIHx8IFRMU19ERVZJQ0U9blxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL0tjb25maWc6MjQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnLTI1LVx0c2VsZWN0IENSQzMyXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZz0yMD1jb25maWcgSU9OSUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnLTIzLVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZzoyNDpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yNS1cdHNlbGVjdCBESU1MSUJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZz03Nj1jb25maWcgUUVEXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL0tjb25maWctODEtXHRzZWxlY3QgQ1JDMzJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnOjgyOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZy04My1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZz0xOT1jb25maWcgU0ZDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWctMjQtXHRzZWxlY3QgQ1JDMzJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjI1Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZy0yNi1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTI9Y29uZmlnIFNUTU1BQ19FVEhcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTEyLVx0c2VsZWN0IFJFU0VUX0NPTlRST0xMRVJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6MTM6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMTQtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz02NT1jb25maWcgVElfQ1BTV19TV0lUQ0hERVZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTczLVx0c2VsZWN0IFJFR01BUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzo3NDpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy03NS1cdGltcGx5IFBIWV9USV9HTUlJX1NFTFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9OTY9Y29uZmlnIFRJX0szX0FNNjVfQ1BTV19OVVNTXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy05OC1cdGRlcGVuZHMgb24gQVJDSF9LMyBcdTAwMjZcdTAwMjYgT0YgXHUwMDI2XHUwMDI2IFRJX0szX1VETUFfR0xVRV9MQVlFUlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzo5OTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0xMDAtXHRzZWxlY3QgVElfREFWSU5DSV9NRElPXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZz02PWNvbmZpZyBESU5HSEFJXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZy04LSAgICBkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZzo5OiAgICBzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctMTAtICAgIGhlbHBcbi0tXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc9OTY9Y29uZmlnIElPU01cbi0tXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctOTgtXHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjk5Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTAwLVx0c2VsZWN0IFJFTEFZIGlmIFdXQU5fREVCVUdGU1xuLS1cbmRyaXZlcnMvcHRwL0tjb25maWc9MjExPWNvbmZpZyBQVFBfMTU4OF9DTE9DS19PQ1Bcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIxOC1cdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xuZHJpdmVycy9wdHAvS2NvbmZpZzoyMTk6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvcHRwL0tjb25maWctMjIwLVx0c2VsZWN0IENSQzE2XG4tLVxubmV0L2RzYS9LY29uZmlnPTM9bWVudWNvbmZpZyBORVRfRFNBXG4tLVxubmV0L2RzYS9LY29uZmlnLTEwLVx0c2VsZWN0IFBIWUxJTktcbm5ldC9kc2EvS2NvbmZpZzoxMTpcdHNlbGVjdCBORVRfREVWTElOS1xubmV0L2RzYS9LY29uZmlnLTEyLVx0aW1wbHkgTkVUX1NFTEZURVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgzMQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkRpdmluZyBpbnRvIGBuZXRkZXZzaW1gIGFuZCBgZGV2bGlua2AgSW50ZWdyYXRpb24qKgoKT2theSwgc28gYE5FVERFVlNJTWAgcGlja3MgYE5FVF9ERVZMSU5LYC4gSW50ZXJlc3RpbmcuIGBORVRERVZTSU1gLCByaWdodCwgdGhhdCYjMzk7cyB0aGUgc29mdHdhcmUgbW9jayBuZXR3b3JrIGRldmljZSB1c2VkIGV4dGVuc2l2ZWx5IHdpdGggUUVNVSBhbmQgc3l6a2FsbGVyIGZvciBmdXp6aW5nLiBOb3csIHRoZSBxdWVzdGlvbiBpczogZG9lcyBgbmV0ZGV2c2ltYCBhY3R1YWxseSBpbXBsZW1lbnQgdGhlIGBkZXZsaW5rYCBmbGFzaCB1cGRhdGUgZnVuY3Rpb25hbGl0eT8gR2l2ZW4gaXRzIHJvbGUgaW4gdGVzdGluZywgaXQmIzM5O3MgYSBsb2dpY2FsIHBvaW50IG9mIGludmVzdGlnYXRpb24uIExldCYjMzk7cyBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuY2Agc291cmNlIGNvZGUsIHRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJIGNvdWxkIGFsc28gZG8gYSBxdWljayBzZWFyY2ggd2l0aGluIHRoZSBgbmV0ZGV2c2ltYCBjb2RlIGZvciB0aGUgdGVybSBgZmxhc2hfdXBkYXRlYC4gVGhhdCBzaG91bGQgcXVpY2tseSByZXZlYWwgd2hldGhlciBvciBub3QgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQgYW5kIGhvdyBpdCYjMzk7cyBoYW5kbGVkLCBhc3N1bWluZyB0aGF0IHRoZSBtb2NrIGRldmljZSBpbXBsZW1lbnRzIHNvbWV0aGluZyByZWxhdGVkIHRvIHVwZGF0aW5nIGl0cyAmIzM0O2Zpcm13YXJlJiMzNDsuIFVuZGVyc3RhbmRpbmcgdGhhdCBpbnRlcmFjdGlvbiBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbGFzaF91cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTk4Nj1zdGF0aWMgaW50IG5zaW1fZGV2X2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMDAzLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjEwMDQ6c3RhdGljIGludCBuc2ltX2Rldl9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTAwNTpcdFx0XHRcdCBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTAwNi1cdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEwMTQtXHRpZiAobnNpbV9kZXYtXHUwMDNlZndfdXBkYXRlX3N0YXR1cykge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjEwMTU6XHRcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGV2bGluayxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMDE2LVx0XHRcdFx0XHRcdCAgIFwmIzM0O1ByZXBhcmluZyB0byBmbGFzaFwmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTAyMS1cdFx0aWYgKG5zaW1fZGV2LVx1MDAzZWZ3X3VwZGF0ZV9zdGF0dXMpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTAyMjpcdFx0XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssIFwmIzM0O0ZsYXNoaW5nXCYjMzQ7LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEwMjMtXHRcdFx0XHRcdFx0XHQgICBwYXJhbXMtXHUwMDNlY29tcG9uZW50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMDI5LVx0aWYgKG5zaW1fZGV2LVx1MDAzZWZ3X3VwZGF0ZV9zdGF0dXMpIHtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxMDMwOlx0XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssIFwmIzM0O0ZsYXNoaW5nXCYjMzQ7LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEwMzEtXHRcdFx0XHRcdFx0ICAgcGFyYW1zLVx1MDAzZWNvbXBvbmVudCxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTAzMy1cdFx0XHRcdFx0XHQgICBOU0lNX0RFVl9GTEFTSF9TSVpFKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxMDM0Olx0XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV90aW1lb3V0X25vdGlmeShkZXZsaW5rLCBcJiMzNDtGbGFzaCBzZWxlY3RcJiMzNDssXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTAzNS1cdFx0XHRcdFx0XHQgICAgcGFyYW1zLVx1MDAzZWNvbXBvbmVudCwgODEpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjEwMzY6XHRcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGV2bGluaywgXCYjMzQ7Rmxhc2hpbmcgZG9uZVwmIzM0OyxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMDM3LVx0XHRcdFx0XHRcdCAgIHBhcmFtcy1cdTAwM2Vjb21wb25lbnQsIDAsIDApO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz0xMzUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgbnNpbV9kZXZfZGV2bGlua19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEzNTItXHQuZXN3aXRjaF9tb2RlX2dldCA9IG5zaW1fZGV2bGlua19lc3dpdGNoX21vZGVfZ2V0LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjEzNTM6XHQuc3VwcG9ydGVkX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgPSBERVZMSU5LX1NVUFBPUlRfRkxBU0hfVVBEQVRFX09WRVJXUklURV9NQVNLLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEzNTQtXHQucmVsb2FkX2FjdGlvbnMgPSBCSVQoREVWTElOS19SRUxPQURfQUNUSU9OX0RSSVZFUl9SRUlOSVQpLFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMzU3LVx0LmluZm9fZ2V0ID0gbnNpbV9kZXZfaW5mb19nZXQsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTM1ODpcdC5mbGFzaF91cGRhdGUgPSBuc2ltX2Rldl9mbGFzaF91cGRhdGUsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTM1OS1cdC50cmFwX2luaXQgPSBuc2ltX2Rldl9kZXZsaW5rX3RyYXBfaW5pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOZXRkZXZzaW0gYW5kIERldmxpbmsgRmxhc2ggVXBkYXRlcyoqCgpPa2F5LCBzbyBOZXRkZXZzaW0gaXMgZmluYWxseSBmdWxseSBzdXBwb3J0aW5nIGRldmxpbmsgZmxhc2ggdXBkYXRlcywgd2hpY2ggaXMgZmFudGFzdGljISBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgYWN0dWFsbHkgKm1lYW5zKiBpbiBwcmFjdGljZSwgdGhvdWdoLiBXaGF0IGRvZXMgdGhlIG5ldGxpbmsgZmxhc2ggdXBkYXRlIGNvbW1hbmQgKmRvKiBhdCBhIGxvdyBsZXZlbD8KCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuIFRoZSBjb3JlIGxvZ2ljIHNob3VsZCByZXNpZGUgaW4gYG5ldC9kZXZsaW5rL2Rldi5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YC4gVGltZSB0byByZWFkIGxpbmVzIDExMjAtMTE4NS4gSSYjMzk7bGwgbmVlZCB0byBwYXJzZSB0aGUgbmV0bGluayBtZXNzYWdlcyBhbmQgY29ycmVsYXRlIHRoZW0gdG8gdGhlIHNwZWNpZmljIG9wZXJhdGlvbnMgZm9yIHRoZSBmbGFzaCB1cGRhdGUuIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgZXJyb3IgY29uZGl0aW9ucywgdmVyc2lvbmluZywgYW5kIHNlY3VyaXR5IChpZiBhcHBsaWNhYmxlKS4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkOyB1bmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCB1bmxvY2sgdGhlIHByYWN0aWNhbCBpbXBsaWNhdGlvbnMgb2YgTmV0ZGV2c2ltJiMzOTtzIG5ldyBmZWF0dXJlLiBJIGV4cGVjdCBzb21lIGludGVyZXN0aW5nIG51YW5jZXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZGV2bGluay9kZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEyMDpcdFxuMTEyMTpcdFx0cmV0ID0gZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlaW5mb19nZXQoZGV2bGluaywgXHUwMDI2cmVxLCBOVUxMKTtcbjExMjI6XHRcdGlmIChyZXQpXG4xMTIzOlx0XHRcdHJldHVybiByZXQ7XG4xMTI0Olx0XG4xMTI1Olx0XHRpZiAoIWxvb2t1cF9jdHgubG9va3VwX25hbWVfZm91bmQpIHtcbjExMjY6XHRcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihleHRhY2ssIG5sYV9jb21wb25lbnQsXG4xMTI3Olx0XHRcdFx0XHQgICAgXCYjMzQ7c2VsZWN0ZWQgY29tcG9uZW50IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcJiMzNDspO1xuMTEyODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExMjk6XHRcdH1cbjExMzA6XHRcdCpwX2NvbXBvbmVudCA9IGNvbXBvbmVudDtcbjExMzE6XHRcdHJldHVybiAwO1xuMTEzMjpcdH1cbjExMzM6XHRcbjExMzQ6XHRpbnQgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTEzNTpcdHtcbjExMzY6XHRcdHN0cnVjdCBubGF0dHIgKm5sYV9vdmVyd3JpdGVfbWFzaywgKm5sYV9maWxlX25hbWU7XG4xMTM3Olx0XHRzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zIHBhcmFtcyA9IHt9O1xuMTEzODpcdFx0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBkZXZsaW5rX25sX2N0eChpbmZvKS1cdTAwM2VkZXZsaW5rO1xuMTEzOTpcdFx0Y29uc3QgY2hhciAqZmlsZV9uYW1lO1xuMTE0MDpcdFx0dTMyIHN1cHBvcnRlZF9wYXJhbXM7XG4xMTQxOlx0XHRpbnQgcmV0O1xuMTE0MjpcdFxuMTE0MzpcdFx0aWYgKCFkZXZsaW5rLVx1MDAzZW9wcy1cdTAwM2VmbGFzaF91cGRhdGUpXG4xMTQ0Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNDU6XHRcbjExNDY6XHRcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIERFVkxJTktfQVRUUl9GTEFTSF9VUERBVEVfRklMRV9OQU1FKSlcbjExNDc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTQ4Olx0XG4xMTQ5Olx0XHRyZXQgPSBkZXZsaW5rX2ZsYXNoX2NvbXBvbmVudF9nZXQoZGV2bGluayxcbjExNTA6XHRcdFx0XHRcdFx0ICBpbmZvLVx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9GTEFTSF9VUERBVEVfQ09NUE9ORU5UXSxcbjExNTE6XHRcdFx0XHRcdFx0ICBcdTAwMjZwYXJhbXMuY29tcG9uZW50LCBpbmZvLVx1MDAzZWV4dGFjayk7XG4xMTUyOlx0XHRpZiAocmV0KVxuMTE1MzpcdFx0XHRyZXR1cm4gcmV0O1xuMTE1NDpcdFxuMTE1NTpcdFx0c3VwcG9ydGVkX3BhcmFtcyA9IGRldmxpbmstXHUwMDNlb3BzLVx1MDAzZXN1cHBvcnRlZF9mbGFzaF91cGRhdGVfcGFyYW1zO1xuMTE1NjpcdFxuMTE1NzpcdFx0bmxhX292ZXJ3cml0ZV9tYXNrID0gaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX09WRVJXUklURV9NQVNLXTtcbjExNTg6XHRcdGlmIChubGFfb3ZlcndyaXRlX21hc2spIHtcbjExNTk6XHRcdFx0c3RydWN0IG5sYV9iaXRmaWVsZDMyIHNlY3Rpb25zO1xuMTE2MDpcdFxuMTE2MTpcdFx0XHRpZiAoIShzdXBwb3J0ZWRfcGFyYW1zIFx1MDAyNiBERVZMSU5LX1NVUFBPUlRfRkxBU0hfVVBEQVRFX09WRVJXUklURV9NQVNLKSkge1xuMTE2MjpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cdTAwM2VleHRhY2ssIG5sYV9vdmVyd3JpdGVfbWFzayxcbjExNjM6XHRcdFx0XHRcdFx0ICAgIFwmIzM0O292ZXJ3cml0ZSBzZXR0aW5ncyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRldmljZVwmIzM0Oyk7XG4xMTY0Olx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTE2NTpcdFx0XHR9XG4xMTY2Olx0XHRcdHNlY3Rpb25zID0gbmxhX2dldF9iaXRmaWVsZDMyKG5sYV9vdmVyd3JpdGVfbWFzayk7XG4xMTY3Olx0XHRcdHBhcmFtcy5vdmVyd3JpdGVfbWFzayA9IHNlY3Rpb25zLnZhbHVlIFx1MDAyNiBzZWN0aW9ucy5zZWxlY3RvcjtcbjExNjg6XHRcdH1cbjExNjk6XHRcbjExNzA6XHRcdG5sYV9maWxlX25hbWUgPSBpbmZvLVx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9GTEFTSF9VUERBVEVfRklMRV9OQU1FXTtcbjExNzE6XHRcdGZpbGVfbmFtZSA9IG5sYV9kYXRhKG5sYV9maWxlX25hbWUpO1xuMTE3MjpcdFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstXHUwMDNlZGV2KTtcbjExNzM6XHRcdGlmIChyZXQpIHtcbjExNzQ6XHRcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVx1MDAzZWV4dGFjaywgbmxhX2ZpbGVfbmFtZSxcbjExNzU6XHRcdFx0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gbG9jYXRlIHRoZSByZXF1ZXN0ZWQgZmlybXdhcmUgZmlsZVwmIzM0Oyk7XG4xMTc2Olx0XHRcdHJldHVybiByZXQ7XG4xMTc3Olx0XHR9XG4xMTc4Olx0XG4xMTc5Olx0XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9iZWdpbl9ub3RpZnkoZGV2bGluayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzY0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gdGhlIERldmxpbmsgRmxhc2ggVXBkYXRlIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgIOKAkyB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGZvciBmbGFzaCB1cGRhdGVzLCBhbmQgaXQmIzM5O3MgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIGdlbmVyaWMgbmV0bGluayBkZXZsaW5rIGZhbWlseS4gR29vZCwgdGhhdCBnaXZlcyBtZSB0aGUgaW5pdGlhbCBjb250ZXh0LiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYC4gSSBzdXNwZWN0IHRoZSBsYXR0ZXIgbWlnaHQgYmUgcmVsYXRlZCB0byBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBidXQgSSBuZWVkIHRvIGNvbmZpcm0uCgpTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aGVyZSBgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYCBpcyBhY3R1YWxseSAqY2FsbGVkKiBmcm9tLiBJJiMzOTtsbCBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4gS25vd2luZyB0aGUgY2FsbCBncmFwaCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZnVsbCBmbG93IG9mIGV4ZWN1dGlvbiBhbmQgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gcHJvcGVybHkgYW5hbHl6ZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucyBiZWluZyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9kZXZsaW5rLmg9MjEyMz12b2lkIGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbmluY2x1ZGUvbmV0L2RldmxpbmsuaC0yMTI0LVx0XHRcdFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG5pbmNsdWRlL25ldC9kZXZsaW5rLmg6MjEyNTppbnQgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBjb25zdCBjaGFyICpmaWxlX25hbWUpO1xuaW5jbHVkZS9uZXQvZGV2bGluay5oLTIxMjYtaW50IGRldmxpbmtfY29tcGF0X3BoeXNfcG9ydF9uYW1lX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmluY2x1ZGUvbmV0L2RldmxpbmsuaD0yMTUxPXN0YXRpYyBpbmxpbmUgaW50XG5pbmNsdWRlL25ldC9kZXZsaW5rLmg6MjE1MjpkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSlcbmluY2x1ZGUvbmV0L2RldmxpbmsuaC0yMTUzLXtcbi0tXG5uZXQvZGV2bGluay9kZXYuYz0xMjIwPXZvaWQgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuLS1cbm5ldC9kZXZsaW5rL2Rldi5jLTEyMzEtXG5uZXQvZGV2bGluay9kZXYuYzoxMjMyOmludCBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSlcbm5ldC9kZXZsaW5rL2Rldi5jLTEyMzMte1xuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9MzY0Nj1pbnQgZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtMzY3NS1cdFx0aWYgKHN0YXRlLVx1MDAzZWRldmxpbmspXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM2NzY6XHRcdFx0cmMgPSBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUoc3RhdGUtXHUwMDNlZGV2bGluayxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzY3Ny1cdFx0XHRcdFx0XHRcdCBzdGF0ZS1cdTAwM2VlZmwuZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTE5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmlybXdhcmUgVXBkYXRlIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gYGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZWAsIGNhbGxlZCB0aHJvdWdoIGV0aHRvb2wgaW9jdGxzIChzcGVjaWZpY2FsbHkgYEVUSFRPT0xfU0ZMQVNIYCBhbmQgYEVUSFRPT0xfRkxBU0hERVZJQ0VgIGZyb20gYG5ldC9ldGh0b29sL2lvY3RsLmNgKSwgYW5kIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IHRoZSBnZW5lcmljIG5ldGxpbmsgYERFVkxJTktfQ01EX0ZMQVNIX1VQREFURWAsIGlzIGNsZWFyLiBUaGUga2V5IHF1ZXN0aW9uIGlzLCAqd2h5KiB0aGUgc2hpZnQgZnJvbSBgcmVxdWVzdF9maXJtd2FyZWAgdG8gYHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0YD8KCkFoLCByaWdodC4gYHJlcXVlc3RfZmlybXdhcmVgIGludHJvZHVjZXMgYSBmYWxsYmFjayB0byB0aGUgdXNlciBoZWxwZXIgaWYgdGhlIGZpcm13YXJlIGlzbiYjMzk7dCBpbW1lZGlhdGVseSBmb3VuZCBvbiBkaXNrIChvciB0aGUgdXNlciBoZWxwZXIgaXMgZW5hYmxlZCksIHdoZXJlYXMgYHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0YCBnb2VzIHN0cmFpZ2h0IHRvIHRoZSBmaWxlc3lzdGVtIG9yIGFueSBidWlsdC1pbiBmaXJtd2FyZS4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyBmaWd1cmluZyBvdXQgdGhlIGltcGFjdC4gRG9lcyB0aGlzIGNoYW5nZSBhZmZlY3QgYWNjZXNzaWJsZSBrZXJuZWwgbG9naWM/CgpBYnNvbHV0ZWx5LiBCb3RoIHRoZSBnZW5lcmljIG5ldGxpbmsgaW50ZXJmYWNlIChgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGApIGFuZCB0aGUgZXRodG9vbCBpb2N0bCBwYXRoIChgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYCkgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4gRnVydGhlcm1vcmUsIHRoaXMgbWVhbnMgdGhhdCBldmVuIGVtdWxhdGVkIHZpcnR1YWwgZGV2aWNlcyBsaWtlIGBuZXRkZXZzaW1gIGNhbiB0cmlnZ2VyIHRoZXNlIGZ1bmN0aW9ucywgdGh1cyBkaXJlY3RseSBtb2RpZnlpbmcgaG93IGZpcm13YXJlIGlzIGxvYWRlZC4gV2UgbmVlZCB0byBiZSB2ZXJ5IGNhcmVmdWwgdG8gdmVyaWZ5IHRoZSBzaWRlLWVmZmVjdHMuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGUgc3ltYm9scyBpbnZvbHZlZCBhcmVuJiMzOTt0IHN0YXRpYy4gSW4gYG5ldC9kZXZsaW5rL2Rldi5jYCwgYm90aCBgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgYW5kIGBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVgIGFyZSBub24tc3RhdGljLiBgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgaGFzIHRoZSBzaWduYXR1cmUgYGludCBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pYCBhbmQgYGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZWAgaGFzIHRoZSBzaWduYXR1cmUgYGludCBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSlgLiBOZXh0LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBgbmV0L2RldmxpbmsvbmV0bGlua19nZW4uY2AsIG9yIHdoZXJldmVyIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBpcyByZWdpc3RlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kZXZsaW5rL2Rldi5jPTEwOTY9c3RhdGljIGludCBkZXZsaW5rX2ZsYXNoX2NvbXBvbmVudF9nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4tLVxubmV0L2RldmxpbmsvZGV2LmMtMTEzMy1cbm5ldC9kZXZsaW5rL2Rldi5jOjExMzQ6aW50IGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9kZXZsaW5rL2Rldi5jLTExMzUte1xuLS1cbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmM9NzAyPWNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkZXZsaW5rX25sX29wc1s3NV0gPSB7XG4tLVxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYy0xMTgzLVx0XHQucHJlX2RvaXRcdD0gZGV2bGlua19ubF9wcmVfZG9pdCxcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmM6MTE4NDpcdFx0LmRvaXRcdFx0PSBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0LFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYy0xMTg1LVx0XHQucG9zdF9kb2l0XHQ9IGRldmxpbmtfbmxfcG9zdF9kb2l0LFxuLS1cbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmg9MTI0PWludCBkZXZsaW5rX25sX2hlYWx0aF9yZXBvcnRlcl9kdW1wX2NsZWFyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtMTI1LVx0XHRcdFx0XHQgICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG5uZXQvZGV2bGluay9uZXRsaW5rX2dlbi5oOjEyNjppbnQgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtMTI3LWludCBkZXZsaW5rX25sX3RyYXBfZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDQ3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2UgZmlsZXM6CgoqKkNoZWNraW5nIHRoZSBCdWlsZCBDb25maWd1cmF0aW9uIGZvciBuZXQvZGV2bGluay9kZXYuYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSAqc3BlY2lmaWNhbGx5KiByZXF1aXJlZCB0byBidWlsZCBgbmV0L2RldmxpbmsvZGV2LmNgLiBJIGFscmVhZHkga25vdyB0aGUgb3ZlcmFsbCBgbmV0L2RldmxpbmtgIGJ1aWxkIGVudmlyb25tZW50LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIHNwZWNpZmljIHRvIHRoaXMgcGFydGljdWxhciBmaWxlLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBleGFtaW5pbmcgdGhlIHJlbGV2YW50IGBNYWtlZmlsZWDigKYgYnV0IGZpcnN0LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgaXNuJiMzOTt0IHNvbWUgb2J2aW91cyBjb25maWd1cmF0aW9uIG1hY3JvIGRlZmluZWQgdGhhdCYjMzk7cyBnb2luZyB0byB0cmlwIG1lIHVwLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoYXQgYG5ldC9kZXZsaW5rL01ha2VmaWxlYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBpbmNsdWRlIHBhdGhzLCBhbnkgY3VzdG9tIGNvbXBpbGF0aW9uIGZsYWdzLCBhbmQgcG90ZW50aWFsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gaG93IHRoZSBidWlsZCBwcm9jZXNzIGhhbmRsZXMgdGhpcyBzaW5nbGUgc291cmNlIGZpbGUuIEFueSBzdXJwcmlzZXMgbHVya2luZyBpbiB0aGVyZSBjb3VsZCBwb3RlbnRpYWxseSBpbXBhY3QgdGhlIGZpbmFsIG1vZHVsZSBvciBiaW5hcnkuIEkgbmVlZCB0byBlbnN1cmUgYSBjbGVhbiBhbmQgcHJlZGljdGFibGUgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2RldmxpbmsvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLXkgOj0gY29yZS5vIG5ldGxpbmsubyBuZXRsaW5rX2dlbi5vIGRldi5vIHBvcnQubyBzYi5vIGRwaXBlLm8gXFxcbiAgIDQ6XHRcdCByZXNvdXJjZS5vIHBhcmFtLm8gcmVnaW9uLm8gaGVhbHRoLm8gdHJhcC5vIHJhdGUubyBsaW5lY2FyZC5vIHNoX2Rldi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODI4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTmV0bGluayBhbmQgSXRzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG5ldC9NYWtlZmlsZWAgYW5kIEkgc2VlIHRoaXMgbGluZTogYG9iai0kKENPTkZJR19ORVRfREVWTElOSykgJiM0Mzs9IGRldmxpbmsvYC4gQ2xlYXJseSwgYGRldmxpbmsvYCBpcyBpbmNsdWRlZCB3aGVuIGBDT05GSUdfTkVUX0RFVkxJTktgIGlzIHNldC4gTm93LCB0aGUgY29udGV4dCBzdWdnZXN0cyB0aGlzIGlzIGxpbmtlZCB0byBkZXZpY2UgZHJpdmVycyBsaWtlIGBDT05GSUdfTkVUREVWU0lNYCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXNlIGFyZSBjcml0aWNhbCB0byBteSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY3kgYmV0d2VlbiBgQ09ORklHX05FVERFVlNJTWAgYW5kIGBDT05GSUdfTkVUX0RFVkxJTktgLiBJcyBvbmUgbmVjZXNzYXJ5IGZvciB0aGUgb3RoZXIsIG9yIGFyZSB0aGV5IGluZGVwZW5kZW50PwoKQSBxdWljayBjaGVjayByZXZlYWxzIGBORVRfREVWTElOS2AgaXMgYSBib29sZWFuIGNvbmZpZyBzeW1ib2wgaW4gYG5ldC9LY29uZmlnYCwgZGVmYXVsdGluZyB0byAmIzM5O24mIzM5Oy4gUmlnaHQsIGFuZCBgTkVUREVWU0lNYCAqc2VsZWN0cyogYE5FVF9ERVZMSU5LYCwgbWVhbmluZyBpZiBJIGVuYWJsZSBgTkVUREVWU0lNYCwgSSBhdXRvbWF0aWNhbGx5IGdldCBgTkVUX0RFVkxJTktgLiBUaGlzIG1lYW5zIGBORVRfREVWTElOS2AgaXMgYSBkZXBlbmRlbmN5IG9mIGBORVRERVZTSU1gLiBTbywgaXQgc2VlbXMgSSBuZWVkIHRvIGludmVzdGlnYXRlIGBORVRERVZTSU1gIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgZ28gY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBzZWUgd2hhdCBpcyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVERFVlNJTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTYwMj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWctNjAzLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo2MDQ6Y29uZmlnIE5FVERFVlNJTVxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDUtXHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXR3b3JrIGRyaXZlcnMgYXJlIGNvbmZpZ3VyZWQsIHNvIGxldCYjMzk7cyBqdW1wIHJpZ2h0IGludG8gYGRyaXZlcnMvbmV0L0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNjA0LiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgYSBjcnVjaWFsIHNlY3Rpb24gcmVsYXRlZCB0byB0aGUgY3VycmVudCBwcm9ibGVtIHJlc2lkZXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyBkZWZpbmVkIHRoZXJlIGFuZCBob3cgaXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBvdmVyYWxsIHN5c3RlbSBzZXR1cC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBzb21lIGluc2lnaHRzIGludG8gdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzeW1ib2wgb3IgYmxvY2sgdGhhdCBhZmZlY3RzIHRoZSBiZWhhdmlvciBJIGFtIGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjA0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MDQ6XHRjb25maWcgTkVUREVWU0lNXG4gNjA1Olx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbiA2MDY6XHRcdGRlcGVuZHMgb24gREVCVUdfRlNcbiA2MDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDYwODpcdFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8IFBTQU1QTEU9blxuIDYwOTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxuIDYxMDpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gNjExOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gNjEyOlx0XHRzZWxlY3QgTkVUX1NIQVBFUlxuIDYxMzpcdFx0aGVscFxuIDYxNDpcdFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgYW5kIHNvZnR3YXJlIG1vZGVsIHRoYXQgY2FuXG4gNjE1Olx0XHQgIGJlIHVzZWQgdG8gdGVzdCB2YXJpb3VzIGNvbnRyb2wgcGF0aCBuZXR3b3JraW5nIEFQSXMsIGVzcGVjaWFsbHlcbiA2MTY6XHRcdCAgSFctb2ZmbG9hZCByZWxhdGVkLlxuIDYxNzpcdFxuIDYxODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gNjE5Olx0XHQgIHdpbGwgYmUgY2FsbGVkIG5ldGRldnNpbS5cbiA2MjA6XHRcbiA2MjE6XHRjb25maWcgTkVUX0ZBSUxPVkVSXG4gNjIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtGYWlsb3ZlciBkcml2ZXJcJiMzNDtcbiA2MjM6XHRcdHNlbGVjdCBGQUlMT1ZFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTg1MwoJCQkJCQkJb3V0cHV0OiAxMzIKCQkJCQkJCXRob3VnaHRzOiAyOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIEkgbmVlZCB0byBjb25maWd1cmUgdGhpcyBmdXp6aW5nIHNldHVwIGNvcnJlY3RseS4gRmlyc3QsIEkmIzM5O20gY2hlY2tpbmcgZm9yIGBORVRfREVWTElOS2AgYW5kIGBORVRERVZTSU1gLiBUaGVzZSBhcmUgdGhlIGtleSBwaWVjZXMgaGVyZS4gU28sIHdoYXQgc2hvdWxkIGJlIGluIGBFbmFibGVDb25maWdzYD8gSG1tLCBkZWZpbml0ZWx5IGBORVRfREVWTElOS2AgYW5kIGBORVRERVZTSU1gLiBXYWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IGBORVRfREVWTElOS2AuIElzIGl0IGRpcmVjdGx5IHNlbGVjdGFibGUsIG9yIGlzIGl0IGltcGxpY2l0bHkgZW5hYmxlZD8gUmlnaHQsIGl0IGRvZXNuJiMzOTt0IGhhdmUgYSBwcm9tcHQgaW4gYG5ldC9LY29uZmlnYCwgbWVhbmluZyBzZWxlY3RpbmcgYE5FVERFVlNJTWAgb3Igb3RoZXIgcmVsZXZhbnQgZHJpdmVycyBhY3RpdmF0ZXMgYE5FVF9ERVZMSU5LYC4gR29vZCwgc28gaW5jbHVkaW5nIGJvdGggYE5FVF9ERVZMSU5LYCBhbmQgYE5FVERFVlNJTWAgaXMgdGhlIHJpZ2h0IG1vdmUgZm9yIGJyb2FkZXIgY292ZXJhZ2UuCgpOb3csIGxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgY2hlY2tsaXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gRmlyc3QsICppcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZyo/IFllcywgYWJzb2x1dGVseS4gSXQmIzM5O3Mgd29ya2luZyB3aXRoIGZpcm13YXJlIGxvYWRpbmcgd2l0aGluIHRoZSBgZGV2bGlua2AgbmV0bGluayBjb21tYW5kIGhhbmRsZXIgKGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCkgYW5kIHRoZSBgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYCBoYW5kbGVyLiBCb3RoIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsvZXRodG9vbCBjb21tYW5kcyBmcm9tIHVucHJpdmlsZWdlZCBvciBwcml2aWxlZ2VkIHVzZXJzcGFjZSwgYW5kIGl0JiMzOTtzIG9uIHZpcnR1YWwgYW5kIGVtdWxhdGVkIG5ldHdvcmsgZGV2aWNlcyBsaWtlIGBuZXRkZXZzaW1gLiBUaGF0JiMzOTtzIGp1aWN5IHBvdGVudGlhbCBmb3IgZmluZGluZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcuCgpOZXh0LCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBgRm9jdXNTeW1ib2xzYC4gVGhleSBhcmUgY2xlYXJseSBgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgYW5kIGBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVgLiBJbXBvcnRhbnRseSwgYm90aCBhcmUgbm9uLXN0YXRpYyBhbmQgbm90IGlubGluZWQg4oCTIEFQSSBlbnRyeXBvaW50cywgcGVyZmVjdC4KCkZpbmFsbHksIGNvbmZpcm0gdGhlIGBFbmFibGVDb25maWdzYCBhZ2FpbjogYE5FVF9ERVZMSU5LYCBhbmQgYE5FVERFVlNJTWAuCgpBbHJpZ2h0LCBJIHRoaW5rIEkmIzM5O3ZlIGdvdCBldmVyeXRoaW5nIGNvdmVyZWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfREVWTElOSyYjMzQ7LAogICAgJiMzNDtORVRERVZTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0JiMzNDssCiAgICAmIzM0O2RldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzd2l0Y2hlcyB0aGUgZmlybXdhcmUgcmVxdWVzdCBtZXRob2QgaW4gZGV2bGluayBmbGFzaCB1cGRhdGUgcm91dGluZXMgZnJvbSByZXF1ZXN0X2Zpcm13YXJlKCkgdG8gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoKS4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldGxpbmsgZGV2bGluayBhbmQgZXRodG9vbCBmbGFzaCB1cGRhdGUgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB1c2luZyBtb2NrIG5ldHdvcmsgZGV2aWNlcyBsaWtlIG5ldGRldnNpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0RFVkxJTksmIzM0OywKICAgICYjMzQ7TkVUREVWU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdCYjMzQ7LAogICAgJiMzNDtkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc3dpdGNoZXMgdGhlIGZpcm13YXJlIHJlcXVlc3QgbWV0aG9kIGluIGRldmxpbmsgZmxhc2ggdXBkYXRlIHJvdXRpbmVzIGZyb20gcmVxdWVzdF9maXJtd2FyZSgpIHRvIHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KCkuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXRsaW5rIGRldmxpbmsgYW5kIGV0aHRvb2wgZmxhc2ggdXBkYXRlIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdXNpbmcgbW9jayBuZXR3b3JrIGRldmljZXMgbGlrZSBuZXRkZXZzaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkZXZsaW5rIGZsYXNoIHVwZGF0ZSBoYW5kbGVycyAoYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgIGFuZCBgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYCkgdG8gdXNlIGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgpYCBpbnN0ZWFkIG9mIGByZXF1ZXN0X2Zpcm13YXJlKClgLCBhdm9pZGluZyB0aGUgZmFsbGJhY2sgdG8gdGhlIHVzZXJtb2RlIGhlbHBlciB3aGVuIHJlcXVlc3RpbmcgZmlybXdhcmUgZmlsZXMuXG5cbkJvdGggY2FsbCBzaXRlcyB6ZXJvLWluaXRpYWxpemUgdGhlaXIgc3RhY2sgc3RydWN0dXJlcyAoYHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgcGFyYW1zID0ge307YCkuIE9uIGZhaWx1cmUsIHRoZSByZXR1cm4gY29kZSBpcyBjaGVja2VkIGFuZCBleGVjdXRpb24gZXhpdHMgd2l0aG91dCByZWFkaW5nIGBwYXJhbXMuZndgLiBPbiBzdWNjZXNzLCB0aGUgZmlybXdhcmUgc3RydWN0IHBvaW50ZXIgaXMgc2V0IGJ5IHRoZSBmaXJtd2FyZSBsb2FkZXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZSwgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiwgYW5kIHN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2Y4MzgwNDhhMDQ0NjU4ZjRlNmZmNjNjM2E2MzlhMWNmZTdiMjk3MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDQ6NTQ6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9kZXYuYyBiL25ldC9kZXZsaW5rL2Rldi5jCmluZGV4IDU1OTU5YjBmZjVhYjQuLmI4NWJiMDJhOWU4MDcgMTAwNjQ0Ci0tLSBhL25ldC9kZXZsaW5rL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kZXZsaW5rL2Rldi5jCkBAIC0xMTY5LDcgJiM0MzsxMTY5LDcgQEAgaW50IGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAogCW5sYV9maWxlX25hbWUgPSBpbmZvLSZndDthdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX0ZJTEVfTkFNRV07CiAJZmlsZV9uYW1lID0gbmxhX2RhdGEobmxhX2ZpbGVfbmFtZSk7Ci0JcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmYW1wO3BhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLSZndDtkZXYpOwomIzQzOwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgmYW1wO3BhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLSZndDtkZXYpOwogCWlmIChyZXQpIHsKIAkJTkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLSZndDtleHRhY2ssIG5sYV9maWxlX25hbWUsCiAJCQkJICAgICYjMzQ7ZmFpbGVkIHRvIGxvY2F0ZSB0aGUgcmVxdWVzdGVkIGZpcm13YXJlIGZpbGUmIzM0Oyk7CkBAIC0xMjQ1LDcgJiM0MzsxMjQ1LDcgQEAgaW50IGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgY29uc3QgY2hhciAqZmlsZV9uYW1lKQogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmYW1wO3BhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLSZndDtkZXYpOwomIzQzOwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgmYW1wO3BhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLSZndDtkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VubG9jazsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERldmxpbmsgRmxhc2ggVXBkYXRlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgbW92aW5nIGZyb20gdXNpbmcgYHJlcXVlc3RfZmlybXdhcmVgIHRvIGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdGAgd2l0aGluIHRoZSBgbmV0L2RldmxpbmsvZGV2LmNgIGZpbGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBhbmQgYGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZWAgZnVuY3Rpb25zLiBUaGlzIHNjcmVhbXMgZmlybXdhcmUgdXBkYXRlIGhhbmRsaW5nLCBhbmQgZ2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWVzLCBJJiMzOTtkIGJldCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHVwZGF0aW5nIHRoZSBmaXJtd2FyZSBvbiBhIGRldmljZSBtYW5hZ2VkIGJ5IHRoZSBkZXZsaW5rIHN1YnN5c3RlbS4KClRoZSByZWFsIHF1ZXN0aW9uIGlzICp3aHkqIHRoZSBzd2l0Y2g/IGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdGAgc3VnZ2VzdHMgYSBtb3JlIGRpcmVjdCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBmaXJtd2FyZSBibG9iLCBwb3RlbnRpYWxseSBieXBhc3Npbmcgc29tZSBpbnRlcm1lZGlhcnkgY2FjaGluZyBvciBwcm9jZXNzaW5nIHN0ZXBzIHRoYXQgYHJlcXVlc3RfZmlybXdhcmVgIG1pZ2h0IGhhdmUgaW52b2x2ZWQuIElzIHRoaXMgYWJvdXQgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBvciBwZXJoYXBzIHRvIHN1cHBvcnQgYSBuZXcgZGlyZWN0LWFjY2VzcyBtb2RlIGluIHRoZSBoYXJkd2FyZT8KClRvIGdldCBhIGJldHRlciBncmlwIG9uIHRoaXMsIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQuIExldCBtZSBwdWxsIHVwIHRoYXQgc2VjdGlvbiBvZiBgbmV0L2RldmxpbmsvZGV2LmNgIHVzaW5nIGByZWFkLWZpbGVgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDExNjAgdG8gMTI2MC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRob3NlIGByZXF1ZXN0X2Zpcm13YXJlYCBjYWxscyB3ZXJlIGJlaW5nIHVzZWQgYmVmb3JlLCBhbmQgd2hhdCBvdGhlciBjaGFuZ2VzIG9yIGNvbnNpZGVyYXRpb25zIGFyZSBiZWluZyBoYW5kbGVkIGFsb25nIHdpdGggdGhlIHVwZGF0ZSBwcm9jZXNzLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgd2hlbiBpdCBjb21lcyB0byBmaXJtd2FyZSB1cGRhdGVzIGFuZCB0aGUgZGV2bGluayBzdWJzeXN0ZW0uIFRoaXMgY291bGQgYmUgYSBzaWduaWZpY2FudCBjaGFuZ2UgYW5kIG5lZWRzIGEgZnVsbCByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2RldmxpbmsvZGV2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDExMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTUwOlx0XHRcdFx0XHRcdCAgaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX0NPTVBPTkVOVF0sXG4xMTUxOlx0XHRcdFx0XHRcdCAgXHUwMDI2cGFyYW1zLmNvbXBvbmVudCwgaW5mby1cdTAwM2VleHRhY2spO1xuMTE1MjpcdFx0aWYgKHJldClcbjExNTM6XHRcdFx0cmV0dXJuIHJldDtcbjExNTQ6XHRcbjExNTU6XHRcdHN1cHBvcnRlZF9wYXJhbXMgPSBkZXZsaW5rLVx1MDAzZW9wcy1cdTAwM2VzdXBwb3J0ZWRfZmxhc2hfdXBkYXRlX3BhcmFtcztcbjExNTY6XHRcbjExNTc6XHRcdG5sYV9vdmVyd3JpdGVfbWFzayA9IGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9PVkVSV1JJVEVfTUFTS107XG4xMTU4Olx0XHRpZiAobmxhX292ZXJ3cml0ZV9tYXNrKSB7XG4xMTU5Olx0XHRcdHN0cnVjdCBubGFfYml0ZmllbGQzMiBzZWN0aW9ucztcbjExNjA6XHRcbjExNjE6XHRcdFx0aWYgKCEoc3VwcG9ydGVkX3BhcmFtcyBcdTAwMjYgREVWTElOS19TVVBQT1JUX0ZMQVNIX1VQREFURV9PVkVSV1JJVEVfTUFTSykpIHtcbjExNjI6XHRcdFx0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLCBubGFfb3ZlcndyaXRlX21hc2ssXG4xMTYzOlx0XHRcdFx0XHRcdCAgICBcJiMzNDtvdmVyd3JpdGUgc2V0dGluZ3MgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcJiMzNDspO1xuMTE2NDpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNjU6XHRcdFx0fVxuMTE2NjpcdFx0XHRzZWN0aW9ucyA9IG5sYV9nZXRfYml0ZmllbGQzMihubGFfb3ZlcndyaXRlX21hc2spO1xuMTE2NzpcdFx0XHRwYXJhbXMub3ZlcndyaXRlX21hc2sgPSBzZWN0aW9ucy52YWx1ZSBcdTAwMjYgc2VjdGlvbnMuc2VsZWN0b3I7XG4xMTY4Olx0XHR9XG4xMTY5Olx0XG4xMTcwOlx0XHRubGFfZmlsZV9uYW1lID0gaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX0ZJTEVfTkFNRV07XG4xMTcxOlx0XHRmaWxlX25hbWUgPSBubGFfZGF0YShubGFfZmlsZV9uYW1lKTtcbjExNzI6XHRcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFx1MDAyNnBhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLVx1MDAzZWRldik7XG4xMTczOlx0XHRpZiAocmV0KSB7XG4xMTc0Olx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cdTAwM2VleHRhY2ssIG5sYV9maWxlX25hbWUsXG4xMTc1Olx0XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIGxvY2F0ZSB0aGUgcmVxdWVzdGVkIGZpcm13YXJlIGZpbGVcJiMzNDspO1xuMTE3NjpcdFx0XHRyZXR1cm4gcmV0O1xuMTE3NzpcdFx0fVxuMTE3ODpcdFxuMTE3OTpcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfYmVnaW5fbm90aWZ5KGRldmxpbmspO1xuMTE4MDpcdFx0cmV0ID0gZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlZmxhc2hfdXBkYXRlKGRldmxpbmssIFx1MDAyNnBhcmFtcywgaW5mby1cdTAwM2VleHRhY2spO1xuMTE4MTpcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfZW5kX25vdGlmeShkZXZsaW5rKTtcbjExODI6XHRcbjExODM6XHRcdHJlbGVhc2VfZmlybXdhcmUocGFyYW1zLmZ3KTtcbjExODQ6XHRcbjExODU6XHRcdHJldHVybiByZXQ7XG4xMTg2Olx0fVxuMTE4NzpcdFxuMTE4ODpcdHN0YXRpYyB2b2lkIF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuMTE4OTpcdFx0XHRcdFx0XHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbjExOTA6XHR7XG4xMTkxOlx0XHRzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSByZXEgPSB7fTtcbjExOTI6XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYXR0cjtcbjExOTM6XHRcdHN0cnVjdCBza19idWZmICptc2c7XG4xMTk0Olx0XHRpbnQgcmVtLCBlcnI7XG4xMTk1Olx0XG4xMTk2Olx0XHRtc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTtcbjExOTc6XHRcdGlmICghbXNnKVxuMTE5ODpcdFx0XHRyZXR1cm47XG4xMTk5Olx0XG4xMjAwOlx0XHRyZXEubXNnID0gbXNnO1xuMTIwMTpcdFx0ZXJyID0gZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlaW5mb19nZXQoZGV2bGluaywgXHUwMDI2cmVxLCBOVUxMKTtcbjEyMDI6XHRcdGlmIChlcnIpXG4xMjAzOlx0XHRcdGdvdG8gZnJlZV9tc2c7XG4xMjA0Olx0XG4xMjA1Olx0XHRubGFfZm9yX2VhY2hfYXR0cl90eXBlKG5sYXR0ciwgREVWTElOS19BVFRSX0lORk9fVkVSU0lPTl9SVU5OSU5HLFxuMTIwNjpcdFx0XHRcdCAgICAgICAodm9pZCAqKW1zZy1cdTAwM2VkYXRhLCBtc2ctXHUwMDNlbGVuLCByZW0pIHtcbjEyMDc6XHRcdFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqa3Y7XG4xMjA4Olx0XHRcdGludCByZW1fa3Y7XG4xMjA5Olx0XG4xMjEwOlx0XHRcdG5sYV9mb3JfZWFjaF9uZXN0ZWRfdHlwZShrdiwgREVWTElOS19BVFRSX0lORk9fVkVSU0lPTl9WQUxVRSxcbjEyMTE6XHRcdFx0XHRcdFx0IG5sYXR0ciwgcmVtX2t2KSB7XG4xMjEyOlx0XHRcdFx0c3RybGNhdChidWYsIG5sYV9kYXRhKGt2KSwgbGVuKTtcbjEyMTM6XHRcdFx0XHRzdHJsY2F0KGJ1ZiwgXCYjMzQ7IFwmIzM0OywgbGVuKTtcbjEyMTQ6XHRcdFx0fVxuMTIxNTpcdFx0fVxuMTIxNjpcdGZyZWVfbXNnOlxuMTIxNzpcdFx0bmxtc2dfY29uc3VtZShtc2cpO1xuMTIxODpcdH1cbjEyMTk6XHRcbjEyMjA6XHR2b2lkIGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbjEyMjE6XHRcdFx0XHRcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4xMjIyOlx0e1xuMTIyMzpcdFx0aWYgKCFkZXZsaW5rLVx1MDAzZW9wcy1cdTAwM2VpbmZvX2dldClcbjEyMjQ6XHRcdFx0cmV0dXJuO1xuMTIyNTpcdFxuMTIyNjpcdFx0ZGV2bF9sb2NrKGRldmxpbmspO1xuMTIyNzpcdFx0aWYgKGRldmxfaXNfcmVnaXN0ZXJlZChkZXZsaW5rKSlcbjEyMjg6XHRcdFx0X19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oZGV2bGluaywgYnVmLCBsZW4pO1xuMTIyOTpcdFx0ZGV2bF91bmxvY2soZGV2bGluayk7XG4xMjMwOlx0fVxuMTIzMTpcdFxuMTIzMjpcdGludCBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSlcbjEyMzM6XHR7XG4xMjM0Olx0XHRzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zIHBhcmFtcyA9IHt9O1xuMTIzNTpcdFx0aW50IHJldDtcbjEyMzY6XHRcbjEyMzc6XHRcdGRldmxfbG9jayhkZXZsaW5rKTtcbjEyMzg6XHRcdGlmICghZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspKSB7XG4xMjM5Olx0XHRcdHJldCA9IC1FTk9ERVY7XG4xMjQwOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjEyNDE6XHRcdH1cbjEyNDI6XHRcbjEyNDM6XHRcdGlmICghZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlZmxhc2hfdXBkYXRlKSB7XG4xMjQ0Olx0XHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuMTI0NTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMjQ2Olx0XHR9XG4xMjQ3Olx0XG4xMjQ4Olx0XHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cdTAwM2VkZXYpO1xuMTI0OTpcdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI3NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhlIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBmdW5jdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqRGlzc2VjdGluZyB0aGUgYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBmdW5jdGlvbi4gTXkgZmlyc3QgdGhvdWdodCBpczogdGhpcyBpcyB3aGVyZSB0aGUgKmFjdGlvbiogaGFwcGVucywgdGhlIG1lYXQgb2YgdGhlIGZsYXNoIHVwZGF0ZSB2aWEgbmV0bGluay4gSSBiZXQgdGhpcyBpcyB0aGUgY2VudHJhbCBjb250cm9sIHBvaW50LiBJdOKAmXMgZ290ICYjMzQ7ZG9pdCYjMzQ7IGluIHRoZSBuYW1lLCBzbyBJIGV4cGVjdCBhIGxvdCBvZiBzdGVwcyBhcmUgaGFuZGxlZCBoZXJlLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdywgdGhlIGlucHV0IHZhbGlkYXRpb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuCgpJJiMzOTttIHRoaW5raW5nLCAmIzM0O0ZsYXNoIHVwZGF0ZSYjMzQ7IHN1Z2dlc3RzIHBvdGVudGlhbGx5IHJpc2t5IG9wZXJhdGlvbnMgLSB0aGlzIGJldHRlciBoYXZlIHNvbWUgc2VyaW91cyBlcnJvciBjaGVja2luZyBhbmQgc2FmZXR5IG1lY2hhbmlzbXMgaW4gcGxhY2UuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGZvciBicmlja2luZyB0aGUgZGV2aWNlIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLiBXaGF0JiMzOTtzIHRoZSBwcm90b2NvbCBoZXJlPyBJcyB0aGVyZSBhIGNoZWNrc3VtIGludm9sdmVkPyBIb3cgZG9lcyBpdCBoYW5kbGUgcGFydGlhbCB1cGRhdGVzPyBQb3dlciBmYWlsdXJlcz8gSSBoYXZlIGEgbG90IG9mIHF1ZXN0aW9ucy4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGxpbmNocGluIG9mIGFueSBmbGFzaC1yZWxhdGVkIG5ldGxpbmsgb3BlcmF0aW9ucywgc28gaXQgbmVlZHMgdG8gYmUgYnVsbGV0cHJvb2YuIEkmIzM5O2xsIG5lZWQgdG8ga25vdzogaG93IGFyZSBjb21tYW5kcyBwYXJzZWQsIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGRhdGEsIGFuZCBob3cgdGhhdCB0cmFuc2xhdGVzIHRvIGRldmljZSBvcGVyYXRpb25zLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQuIExldCYjMzk7cyBzZWUgaG93IGl0IGtpY2tzIG9mZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZGV2bGluay9kZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEzMDpcdFx0KnBfY29tcG9uZW50ID0gY29tcG9uZW50O1xuMTEzMTpcdFx0cmV0dXJuIDA7XG4xMTMyOlx0fVxuMTEzMzpcdFxuMTEzNDpcdGludCBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4xMTM1Olx0e1xuMTEzNjpcdFx0c3RydWN0IG5sYXR0ciAqbmxhX292ZXJ3cml0ZV9tYXNrLCAqbmxhX2ZpbGVfbmFtZTtcbjExMzc6XHRcdHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgcGFyYW1zID0ge307XG4xMTM4Olx0XHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IGRldmxpbmtfbmxfY3R4KGluZm8pLVx1MDAzZWRldmxpbms7XG4xMTM5Olx0XHRjb25zdCBjaGFyICpmaWxlX25hbWU7XG4xMTQwOlx0XHR1MzIgc3VwcG9ydGVkX3BhcmFtcztcbjExNDE6XHRcdGludCByZXQ7XG4xMTQyOlx0XG4xMTQzOlx0XHRpZiAoIWRldmxpbmstXHUwMDNlb3BzLVx1MDAzZWZsYXNoX3VwZGF0ZSlcbjExNDQ6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTE0NTpcdFxuMTE0NjpcdFx0aWYgKEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9GSUxFX05BTUUpKVxuMTE0NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExNDg6XHRcbjExNDk6XHRcdHJldCA9IGRldmxpbmtfZmxhc2hfY29tcG9uZW50X2dldChkZXZsaW5rLFxuMTE1MDpcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9DT01QT05FTlRdLFxuMTE1MTpcdFx0XHRcdFx0XHQgIFx1MDAyNnBhcmFtcy5jb21wb25lbnQsIGluZm8tXHUwMDNlZXh0YWNrKTtcbjExNTI6XHRcdGlmIChyZXQpXG4xMTUzOlx0XHRcdHJldHVybiByZXQ7XG4xMTU0Olx0XG4xMTU1Olx0XHRzdXBwb3J0ZWRfcGFyYW1zID0gZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlc3VwcG9ydGVkX2ZsYXNoX3VwZGF0ZV9wYXJhbXM7XG4xMTU2Olx0XG4xMTU3Olx0XHRubGFfb3ZlcndyaXRlX21hc2sgPSBpbmZvLVx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9GTEFTSF9VUERBVEVfT1ZFUldSSVRFX01BU0tdO1xuMTE1ODpcdFx0aWYgKG5sYV9vdmVyd3JpdGVfbWFzaykge1xuMTE1OTpcdFx0XHRzdHJ1Y3QgbmxhX2JpdGZpZWxkMzIgc2VjdGlvbnM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMjgKCQkJCQkJCW91dHB1dDogMTk1CgkJCQkJCQl0aG91Z2h0czogNjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBGaXJtd2FyZSBMb2FkaW5nIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgY2hhbmdpbmcgaG93IGZpcm13YXJlIGlzIGxvYWRlZCBpbiB0aGUgYGRldmxpbmtgIGZsYXNoIHVwZGF0ZSBwYXRocywgc3BlY2lmaWNhbGx5IHN3aXRjaGluZyBmcm9tIGByZXF1ZXN0X2Zpcm13YXJlKClgIHRvIGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgpYC4gVGhlIGdvYWw/IFRvIGJ5cGFzcyB0aGUgdXNlcm1vZGUgaGVscGVyIGZhbGxiYWNrIGFuZCBzaWxlbmNlIHRob3NlIG5vaXN5IHdhcm5pbmdzIHdoZW4gYSBmaXJtd2FyZSBmaWxlIGlzbiYjMzk7dCBmb3VuZCByaWdodCBhd2F5LiBObyBuZWVkIHRvIHRyaWdnZXIgYSB1c2VyIHNwYWNlIGV2ZW50IHdoZW4gd2Uga25vdyBpdCB3b24mIzM5O3QgYmUgdGhlcmUuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpcyBtZW1vcnkgc2FmZXR5LiBBbSBJIG9wZW5pbmcgdXAgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGJ5IGRvaW5nIHRoaXM/IExldCYjMzk7cyBkaXNzZWN0IGl0LiBGaXJzdCBvZmYsIGBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zIHBhcmFtcyA9IHt9O2AgZ2V0cyB6ZXJvLWluaXRpYWxpemVkLiBOaWNlLiBgcmVxdWVzdF9maXJtd2FyZV9kaXJlY3RgIHNldHMgYHBhcmFtcy5md2AgKm9ubHkqIG9uIHN1Y2Nlc3MuIElmIHRoZXJlJiMzOTtzIGFuIGVycm9yLCBgcmV0YCBpcyBub24temVybywgYW5kIHdlIGJhaWwgb3V0IGltbWVkaWF0ZWx5LCBuZXZlciB0b3VjaGluZyBgcGFyYW1zLmZ3YC4gVGhlIGZpcm13YXJlIGxvYWRpbmcgaXRzZWxmIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBmaXJtd2FyZSBsb2FkZXIgc3Vic3lzdGVtIGFueXdheS4gTm8gbmV3IGJ1ZmZlcnMgYXJlIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZC4gTm8gcGFkZGluZyBzaGVuYW5pZ2FucyBhcmUgaGFwcGVuaW5nLiBUaGUgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIHJlbWFpbiB1bmNoYW5nZWQuIE5vcGUsIEkgZG9uJiMzOTt0IHNlZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgaGVyZS4KCk5vdywgbGV0JiMzOTtzIGJlIHRob3JvdWdoIGFuZCBjaGVjayBhZ2FpbnN0IHRoZSBLTVNBTiByZXF1aXJlbWVudHMuIFJlbWVtYmVyLCB3ZSBuZWVkIGBOZWVkc0tNU0FOPXRydWVgIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aXRoIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBmaWVsZHMuIE5vdCBoZXJlLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIE5vcGUuCjMuICBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBsYXRlciByZWFkLiBObyB3YXkuCjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBOb3BlLCB0aGUgZmlybXdhcmUgbG9hZGVyIGhhbmRsZXMgdGhlIGJ1ZmZlciwgYW5kIHdlJiMzOTtyZSBqdXN0IGdldHRpbmcgYSBwb2ludGVyIHRvIGl0LgoKU2luY2Ugbm9uZSBvZiB0aG9zZSBhcHBseSwgYE5lZWRzS01TQU49ZmFsc2VgLiBXZSYjMzk7cmUgZ29vZC4KCk9rYXksIGxldCYjMzk7cyBzdW1tYXJpemUgdGhlIHJlYXNvbmluZyBmb3IgdGhpcyBjaGFuZ2U6CjEuIFRoZSBwYXRjaCBzd2l0Y2hlcyB0aGUgZmlybXdhcmUgbG9hZGluZyBpbiBkZXZsaW5rIGZsYXNoIHVwZGF0ZSBwYXRocyBmcm9tIGByZXF1ZXN0X2Zpcm13YXJlKClgIHRvIGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgpYC4KMi4gTWVtb3J5IGlzIHNhZmUuIFRoZSBwYXJhbXMgYXJlIHplcm8taW5pdGlhbGl6ZWQsIGFuZCB0aGUgZmlybXdhcmUgcG9pbnRlciBpcyBvbmx5IHNldCBvbiBzdWNjZXNzLiBFcnJvciBwYXRocyBhcmUgaGFuZGxlZCBncmFjZWZ1bGx5LgozLiBObyBLTVNBTiBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZXhwb3NlIGhlYXAvc3RhY2sgbWVtb3J5IHRvIHRoZSB1c2VyLCBvciBleHBvc2UgcGFkZGluZy4gU3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTikgd2lsbCBjYXRjaCBhbnkgaXNzdWVzIChsaWtlIHVzZS1hZnRlci1mcmVlLCBvciBudWxsLXBvaW50ZXIgZGVyZWZlcmVuY2UpLgoKQWxyaWdodCwgSSB0aGluayBJJiMzOTt2ZSBnb3QgYSBzb2xpZCBjYXNlIGhlcmUuIExldCYjMzk7cyBnZXQgdGhpcyBtb3Zpbmcgd2l0aCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkZXZsaW5rIGZsYXNoIHVwZGF0ZSBoYW5kbGVycyAoYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgIGFuZCBgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYCkgdG8gdXNlIGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgpYCBpbnN0ZWFkIG9mIGByZXF1ZXN0X2Zpcm13YXJlKClgLCBhdm9pZGluZyB0aGUgZmFsbGJhY2sgdG8gdGhlIHVzZXJtb2RlIGhlbHBlciB3aGVuIHJlcXVlc3RpbmcgZmlybXdhcmUgZmlsZXMuXG5cbkJvdGggY2FsbCBzaXRlcyB6ZXJvLWluaXRpYWxpemUgdGhlaXIgc3RhY2sgc3RydWN0dXJlcyAoYHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgcGFyYW1zID0ge307YCkuIE9uIGZhaWx1cmUsIHRoZSByZXR1cm4gY29kZSBpcyBjaGVja2VkIGFuZCBleGVjdXRpb24gZXhpdHMgd2l0aG91dCByZWFkaW5nIGBwYXJhbXMuZndgLiBPbiBzdWNjZXNzLCB0aGUgZmlybXdhcmUgc3RydWN0IHBvaW50ZXIgaXMgc2V0IGJ5IHRoZSBmaXJtd2FyZSBsb2FkZXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZSwgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiwgYW5kIHN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRldmxpbmsgZmxhc2ggdXBkYXRlIGhhbmRsZXJzIChgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgYW5kIGBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVgKSB0byB1c2UgYHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KClgIGluc3RlYWQgb2YgYHJlcXVlc3RfZmlybXdhcmUoKWAsIGF2b2lkaW5nIHRoZSBmYWxsYmFjayB0byB0aGUgdXNlcm1vZGUgaGVscGVyIHdoZW4gcmVxdWVzdGluZyBmaXJtd2FyZSBmaWxlcy5cblxuQm90aCBjYWxsIHNpdGVzIHplcm8taW5pdGlhbGl6ZSB0aGVpciBzdGFjayBzdHJ1Y3R1cmVzIChgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyBwYXJhbXMgPSB7fTtgKS4gT24gZmFpbHVyZSwgdGhlIHJldHVybiBjb2RlIGlzIGNoZWNrZWQgYW5kIGV4ZWN1dGlvbiBleGl0cyB3aXRob3V0IHJlYWRpbmcgYHBhcmFtcy5md2AuIE9uIHN1Y2Nlc3MsIHRoZSBmaXJtd2FyZSBzdHJ1Y3QgcG9pbnRlciBpcyBzZXQgYnkgdGhlIGZpcm13YXJlIGxvYWRlci4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLCBhbmQgc3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDowOS4wNTI2NDU5NDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDc3OTAzOTk1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWTElOS1wiLFxuICAgIFwiTkVUREVWU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdFwiLFxuICAgIFwiZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkZXZsaW5rIGZsYXNoIHVwZGF0ZSBoYW5kbGVycyAoYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgIGFuZCBgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYCkgdG8gdXNlIGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgpYCBpbnN0ZWFkIG9mIGByZXF1ZXN0X2Zpcm13YXJlKClgLCBhdm9pZGluZyB0aGUgZmFsbGJhY2sgdG8gdGhlIHVzZXJtb2RlIGhlbHBlciB3aGVuIHJlcXVlc3RpbmcgZmlybXdhcmUgZmlsZXMuXFxuXFxuQm90aCBjYWxsIHNpdGVzIHplcm8taW5pdGlhbGl6ZSB0aGVpciBzdGFjayBzdHJ1Y3R1cmVzIChgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyBwYXJhbXMgPSB7fTtgKS4gT24gZmFpbHVyZSwgdGhlIHJldHVybiBjb2RlIGlzIGNoZWNrZWQgYW5kIGV4ZWN1dGlvbiBleGl0cyB3aXRob3V0IHJlYWRpbmcgYHBhcmFtcy5md2AuIE9uIHN1Y2Nlc3MsIHRoZSBmaXJtd2FyZSBzdHJ1Y3QgcG9pbnRlciBpcyBzZXQgYnkgdGhlIGZpcm13YXJlIGxvYWRlci4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLCBhbmQgc3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHN3aXRjaGVzIHRoZSBmaXJtd2FyZSByZXF1ZXN0IG1ldGhvZCBpbiBkZXZsaW5rIGZsYXNoIHVwZGF0ZSByb3V0aW5lcyBmcm9tIHJlcXVlc3RfZmlybXdhcmUoKSB0byByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgpLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0bGluayBkZXZsaW5rIGFuZCBldGh0b29sIGZsYXNoIHVwZGF0ZSBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHVzaW5nIG1vY2sgbmV0d29yayBkZXZpY2VzIGxpa2UgbmV0ZGV2c2ltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDowOS4wNTI2NTA2MDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNTQzMzcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdmODM4MDQ4YTA0NDY1OGY0ZTZmZjYzYzNhNjM5YTFjZmU3YjI5NzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAwNDo1NDowOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9kZXYuYyBiL25ldC9kZXZsaW5rL2Rldi5jXFxuaW5kZXggNTU5NTliMGZmNWFiNC4uYjg1YmIwMmE5ZTgwNyAxMDA2NDRcXG4tLS0gYS9uZXQvZGV2bGluay9kZXYuY1xcbisrKyBiL25ldC9kZXZsaW5rL2Rldi5jXFxuQEAgLTExNjksNyArMTE2OSw3IEBAIGludCBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcbiBcXHRubGFfZmlsZV9uYW1lID0gaW5mby1cXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9GSUxFX05BTUVdO1xcbiBcXHRmaWxlX25hbWUgPSBubGFfZGF0YShubGFfZmlsZV9uYW1lKTtcXG4tXFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZShcXHUwMDI2cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstXFx1MDAzZWRldik7XFxuK1xcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFxcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cXHUwMDNlZGV2KTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXFx1MDAzZWV4dGFjaywgbmxhX2ZpbGVfbmFtZSxcXG4gXFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gbG9jYXRlIHRoZSByZXF1ZXN0ZWQgZmlybXdhcmUgZmlsZVxcXCIpO1xcbkBAIC0xMjQ1LDcgKzEyNDUsNyBAQCBpbnQgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBjb25zdCBjaGFyICpmaWxlX25hbWUpXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZShcXHUwMDI2cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstXFx1MDAzZWRldik7XFxuK1xcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFxcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cXHUwMDNlZGV2KTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MDkuMzc4NzQ3NjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU2MDczNDQ4Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9ERVZMSU5LXCIsXG4gICAgXCJORVRERVZTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0XCIsXG4gICAgXCJkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzd2l0Y2hlcyB0aGUgZmlybXdhcmUgcmVxdWVzdCBtZXRob2QgaW4gZGV2bGluayBmbGFzaCB1cGRhdGUgcm91dGluZXMgZnJvbSByZXF1ZXN0X2Zpcm13YXJlKCkgdG8gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoKS4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldGxpbmsgZGV2bGluayBhbmQgZXRodG9vbCBmbGFzaCB1cGRhdGUgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB1c2luZyBtb2NrIG5ldHdvcmsgZGV2aWNlcyBsaWtlIG5ldGRldnNpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2Y4MzgwNDhhMDQ0NjU4ZjRlNmZmNjNjM2E2MzlhMWNmZTdiMjk3M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDQ6NTQ6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9kZXYuYyBiL25ldC9kZXZsaW5rL2Rldi5jXG5pbmRleCA1NTk1OWIwZmY1YWI0Li5iODViYjAyYTllODA3IDEwMDY0NFxuLS0tIGEvbmV0L2RldmxpbmsvZGV2LmNcbisrKyBiL25ldC9kZXZsaW5rL2Rldi5jXG5AQCAtMTE2OSw3ICsxMTY5LDcgQEAgaW50IGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdG5sYV9maWxlX25hbWUgPSBpbmZvLVx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9GTEFTSF9VUERBVEVfRklMRV9OQU1FXTtcbiBcdGZpbGVfbmFtZSA9IG5sYV9kYXRhKG5sYV9maWxlX25hbWUpO1xuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZShcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cdTAwM2VkZXYpO1xuK1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstXHUwMDNlZGV2KTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVx1MDAzZWV4dGFjaywgbmxhX2ZpbGVfbmFtZSxcbiBcdFx0XHRcdCAgICBcImZhaWxlZCB0byBsb2NhdGUgdGhlIHJlcXVlc3RlZCBmaXJtd2FyZSBmaWxlXCIpO1xuQEAgLTEyNDUsNyArMTI0NSw3IEBAIGludCBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSlcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZShcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cdTAwM2VkZXYpO1xuK1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstXHUwMDNlZGV2KTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjU0OjA5LjM3ODc0OTE1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMyMDcxMzczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGV2bGluayBGaXJtd2FyZSBVcGRhdGUqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCBoZXJlLCBsZXQncyBkaXZlIHJpZ2h0IGluLiBUaGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBgbmV0L2RldmxpbmsvZGV2LmNgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSd2ZSBhbHRlcmVkIHRoZSBmaXJtd2FyZSByZXF1ZXN0IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBhbmQgYGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZWAgZnVuY3Rpb25zLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgc3dhcHBpbmcgYHJlcXVlc3RfZmlybXdhcmVgIGZvciBgcmVxdWVzdF9maXJtd2FyZV9kaXJlY3RgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuXG5cblRvIHByb3Blcmx5IGFzc2VzcyB0aGlzLCBJJ20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvZGV2bGluay9kZXYuY2AuIEknbGwgdXNlIG15IHRvb2xzIChwcm9iYWJseSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmApIGFuZCB6ZXJvIGluIG9uIHRoZSB2aWNpbml0eSBvZiBsaW5lcyAxMTY5IGFuZCAxMjQ1LiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gSSdtIGtlZW4gdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGV5J3JlIG1ha2luZyB0aGlzIHN3aXRjaC4gSXMgdGhpcyBhYm91dCBpbXByb3ZlZCBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIG9yIGEgZGlmZmVyZW5jZSBpbiB0aGUgd2F5IHRoZSBmaXJtd2FyZSBsb2FkaW5nIGlzIGhhbmRsZWQ/IENvbnRleHQgaXMga2V5IGhlcmUsIEkgbmVlZCB0byBzZWUgaG93IHRoZSBmaXJtd2FyZSByZXF1ZXN0IG1lY2hhbmlzbSBpcyB1c2VkIHdpdGhpbiB0aGUgb3ZlcmFsbCBkZXZsaW5rIGZyYW1ld29yayB0byBmdWxseSBldmFsdWF0ZSB0aGUgcGF0Y2gncyBpbXBhY3QuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgY29ycmVjdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjYwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MTUuNjk5NDY2NjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjcyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2RldmxpbmsvZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1MCxcbiAgXCJMaW5lQ291bnRcIjogMTEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTA6XFx0XFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX0NPTVBPTkVOVF0sXFxuMTE1MTpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZwYXJhbXMuY29tcG9uZW50LCBpbmZvLVxcdTAwM2VleHRhY2spO1xcbjExNTI6XFx0XFx0aWYgKHJldClcXG4xMTUzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE1NDpcXHRcXG4xMTU1OlxcdFxcdHN1cHBvcnRlZF9wYXJhbXMgPSBkZXZsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZXN1cHBvcnRlZF9mbGFzaF91cGRhdGVfcGFyYW1zO1xcbjExNTY6XFx0XFxuMTE1NzpcXHRcXHRubGFfb3ZlcndyaXRlX21hc2sgPSBpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX09WRVJXUklURV9NQVNLXTtcXG4xMTU4OlxcdFxcdGlmIChubGFfb3ZlcndyaXRlX21hc2spIHtcXG4xMTU5OlxcdFxcdFxcdHN0cnVjdCBubGFfYml0ZmllbGQzMiBzZWN0aW9ucztcXG4xMTYwOlxcdFxcbjExNjE6XFx0XFx0XFx0aWYgKCEoc3VwcG9ydGVkX3BhcmFtcyBcXHUwMDI2IERFVkxJTktfU1VQUE9SVF9GTEFTSF9VUERBVEVfT1ZFUldSSVRFX01BU0spKSB7XFxuMTE2MjpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXFx1MDAzZWV4dGFjaywgbmxhX292ZXJ3cml0ZV9tYXNrLFxcbjExNjM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJvdmVyd3JpdGUgc2V0dGluZ3MgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcXFwiKTtcXG4xMTY0OlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTY1OlxcdFxcdFxcdH1cXG4xMTY2OlxcdFxcdFxcdHNlY3Rpb25zID0gbmxhX2dldF9iaXRmaWVsZDMyKG5sYV9vdmVyd3JpdGVfbWFzayk7XFxuMTE2NzpcXHRcXHRcXHRwYXJhbXMub3ZlcndyaXRlX21hc2sgPSBzZWN0aW9ucy52YWx1ZSBcXHUwMDI2IHNlY3Rpb25zLnNlbGVjdG9yO1xcbjExNjg6XFx0XFx0fVxcbjExNjk6XFx0XFxuMTE3MDpcXHRcXHRubGFfZmlsZV9uYW1lID0gaW5mby1cXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9GSUxFX05BTUVdO1xcbjExNzE6XFx0XFx0ZmlsZV9uYW1lID0gbmxhX2RhdGEobmxhX2ZpbGVfbmFtZSk7XFxuMTE3MjpcXHRcXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcXHUwMDI2cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstXFx1MDAzZWRldik7XFxuMTE3MzpcXHRcXHRpZiAocmV0KSB7XFxuMTE3NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXFx1MDAzZWV4dGFjaywgbmxhX2ZpbGVfbmFtZSxcXG4xMTc1OlxcdFxcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIGxvY2F0ZSB0aGUgcmVxdWVzdGVkIGZpcm13YXJlIGZpbGVcXFwiKTtcXG4xMTc2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE3NzpcXHRcXHR9XFxuMTE3ODpcXHRcXG4xMTc5OlxcdFxcdGRldmxpbmtfZmxhc2hfdXBkYXRlX2JlZ2luX25vdGlmeShkZXZsaW5rKTtcXG4xMTgwOlxcdFxcdHJldCA9IGRldmxpbmstXFx1MDAzZW9wcy1cXHUwMDNlZmxhc2hfdXBkYXRlKGRldmxpbmssIFxcdTAwMjZwYXJhbXMsIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuMTE4MTpcXHRcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9lbmRfbm90aWZ5KGRldmxpbmspO1xcbjExODI6XFx0XFxuMTE4MzpcXHRcXHRyZWxlYXNlX2Zpcm13YXJlKHBhcmFtcy5mdyk7XFxuMTE4NDpcXHRcXG4xMTg1OlxcdFxcdHJldHVybiByZXQ7XFxuMTE4NjpcXHR9XFxuMTE4NzpcXHRcXG4xMTg4OlxcdHN0YXRpYyB2b2lkIF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxcbjExODk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuMTE5MDpcXHR7XFxuMTE5MTpcXHRcXHRzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSByZXEgPSB7fTtcXG4xMTkyOlxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYXR0cjtcXG4xMTkzOlxcdFxcdHN0cnVjdCBza19idWZmICptc2c7XFxuMTE5NDpcXHRcXHRpbnQgcmVtLCBlcnI7XFxuMTE5NTpcXHRcXG4xMTk2OlxcdFxcdG1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xcbjExOTc6XFx0XFx0aWYgKCFtc2cpXFxuMTE5ODpcXHRcXHRcXHRyZXR1cm47XFxuMTE5OTpcXHRcXG4xMjAwOlxcdFxcdHJlcS5tc2cgPSBtc2c7XFxuMTIwMTpcXHRcXHRlcnIgPSBkZXZsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZWluZm9fZ2V0KGRldmxpbmssIFxcdTAwMjZyZXEsIE5VTEwpO1xcbjEyMDI6XFx0XFx0aWYgKGVycilcXG4xMjAzOlxcdFxcdFxcdGdvdG8gZnJlZV9tc2c7XFxuMTIwNDpcXHRcXG4xMjA1OlxcdFxcdG5sYV9mb3JfZWFjaF9hdHRyX3R5cGUobmxhdHRyLCBERVZMSU5LX0FUVFJfSU5GT19WRVJTSU9OX1JVTk5JTkcsXFxuMTIwNjpcXHRcXHRcXHRcXHQgICAgICAgKHZvaWQgKiltc2ctXFx1MDAzZWRhdGEsIG1zZy1cXHUwMDNlbGVuLCByZW0pIHtcXG4xMjA3OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmt2O1xcbjEyMDg6XFx0XFx0XFx0aW50IHJlbV9rdjtcXG4xMjA5OlxcdFxcbjEyMTA6XFx0XFx0XFx0bmxhX2Zvcl9lYWNoX25lc3RlZF90eXBlKGt2LCBERVZMSU5LX0FUVFJfSU5GT19WRVJTSU9OX1ZBTFVFLFxcbjEyMTE6XFx0XFx0XFx0XFx0XFx0XFx0IG5sYXR0ciwgcmVtX2t2KSB7XFxuMTIxMjpcXHRcXHRcXHRcXHRzdHJsY2F0KGJ1ZiwgbmxhX2RhdGEoa3YpLCBsZW4pO1xcbjEyMTM6XFx0XFx0XFx0XFx0c3RybGNhdChidWYsIFxcXCIgXFxcIiwgbGVuKTtcXG4xMjE0OlxcdFxcdFxcdH1cXG4xMjE1OlxcdFxcdH1cXG4xMjE2OlxcdGZyZWVfbXNnOlxcbjEyMTc6XFx0XFx0bmxtc2dfY29uc3VtZShtc2cpO1xcbjEyMTg6XFx0fVxcbjEyMTk6XFx0XFxuMTIyMDpcXHR2b2lkIGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4xMjIxOlxcdFxcdFxcdFxcdFxcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuMTIyMjpcXHR7XFxuMTIyMzpcXHRcXHRpZiAoIWRldmxpbmstXFx1MDAzZW9wcy1cXHUwMDNlaW5mb19nZXQpXFxuMTIyNDpcXHRcXHRcXHRyZXR1cm47XFxuMTIyNTpcXHRcXG4xMjI2OlxcdFxcdGRldmxfbG9jayhkZXZsaW5rKTtcXG4xMjI3OlxcdFxcdGlmIChkZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXFxuMTIyODpcXHRcXHRcXHRfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihkZXZsaW5rLCBidWYsIGxlbik7XFxuMTIyOTpcXHRcXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG4xMjMwOlxcdH1cXG4xMjMxOlxcdFxcbjEyMzI6XFx0aW50IGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgY29uc3QgY2hhciAqZmlsZV9uYW1lKVxcbjEyMzM6XFx0e1xcbjEyMzQ6XFx0XFx0c3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyBwYXJhbXMgPSB7fTtcXG4xMjM1OlxcdFxcdGludCByZXQ7XFxuMTIzNjpcXHRcXG4xMjM3OlxcdFxcdGRldmxfbG9jayhkZXZsaW5rKTtcXG4xMjM4OlxcdFxcdGlmICghZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspKSB7XFxuMTIzOTpcXHRcXHRcXHRyZXQgPSAtRU5PREVWO1xcbjEyNDA6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjEyNDE6XFx0XFx0fVxcbjEyNDI6XFx0XFxuMTI0MzpcXHRcXHRpZiAoIWRldmxpbmstXFx1MDAzZW9wcy1cXHUwMDNlZmxhc2hfdXBkYXRlKSB7XFxuMTI0NDpcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4xMjQ1OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMjQ2OlxcdFxcdH1cXG4xMjQ3OlxcdFxcbjEyNDg6XFx0XFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXFx1MDAyNnBhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLVxcdTAwM2VkZXYpO1xcbjEyNDk6XFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MTUuNjk5NTk2MDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDQ5Mjc5NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGRldmxpbmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gYGRldmxpbmtgLiBSaWdodCwgaXQncyBhIG5ldGxpbmsgaW50ZXJmYWNlIHNwZWNpZmljYWxseSBmb3IgbmV0d29yayBkZXZpY2VzLCBpbXBsZW1lbnRlZCB1bmRlciBlaXRoZXIgYE5FVF9ERVZMSU5LYCBvciB0aGUgb3ZlcmFyY2hpbmcgYE5FVGAgY29uZmlnIG9wdGlvbnMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogaG93IGlzIHRoaXMgdGhpbmcgYWN0dWFsbHkgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHN0YXR1cy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSdsbCBzdGFydCBieSBjaGVja2luZyBgbmV0L2RldmxpbmsvS2NvbmZpZ2AgZGlyZWN0bHksIGFzc3VtaW5nIHRoYXTigJlzIHdoZXJlIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBkZXZsaW5rYCB3b3VsZCByZXNpZGUuIElmIHRoYXQgY29tZXMgdXAgZW1wdHksIG9yIHByb3ZpZGVzIGFuIGluY29tcGxldGUgcGljdHVyZSwgdGhlbiBJIG5lZWQgdG8gY29uc2lkZXIgY2hlY2tpbmcgdGhlIG1vcmUgZ2VuZXJhbCBgbmV0L0tjb25maWdgIGZpbGUuIFNvbWV0aW1lcyBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQgYXQgYSBoaWdoZXIgbGV2ZWwuIElmIGl0J3Mgc3RpbGwgdW5jbGVhciwgSSB3aWxsIHRoZW4gZXhwYW5kIG15IHNlYXJjaCBhbmQgc2NhbiBgbmV0L01ha2VmaWxlYC4gSSBhbSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIGBkZXZsaW5rYCBpcyBhbHdheXMgYnVpbHQgd2hlbiBgTkVUYCBvciBgTkVUX0RFVkxJTktgIGFyZSBlbmFibGVkLCBvciBpZiBpdCBjYW4gYmUgZGlzYWJsZWQgb3IgYnVpbHQgYXMgYSBtb2R1bGUuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBidWlsZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MTguMTQ4ODgyNDU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODI1ODkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMTEyMSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubmV0L01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19CUklER0UpXFx0XFx0Kz0gYnJpZGdlL1xcbm5ldC9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfTkVUX0RFVkxJTkspXFx0Kz0gZGV2bGluay9cXG5uZXQvTWFrZWZpbGUtMjctb2JqLXlcXHRcXHRcXHRcXHQrPSBkc2EvXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xNTQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luZGlyZWN0X2NhbGxfd3JhcHBlci5oXFx1MDAzZVxcbm5ldC9jb3JlL2Rldi5jOjE1NTojaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG5uZXQvY29yZS9kZXYuYy0xNTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFxcdTAwM2VcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEwMTI4PWludCBkZXZfZ2V0X3BoeXNfcG9ydF9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDEzOC1cXHR9XFxubmV0L2NvcmUvZGV2LmM6MTAxMzk6XFx0cmV0dXJuIGRldmxpbmtfY29tcGF0X3BoeXNfcG9ydF9uYW1lX2dldChkZXYsIG5hbWUsIGxlbik7XFxubmV0L2NvcmUvZGV2LmMtMTAxNDAtfVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTAxNTI9aW50IG5ldGlmX2dldF9wb3J0X3BhcmVudF9pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTAxNjYtXFxubmV0L2NvcmUvZGV2LmM6MTAxNjc6XFx0ZXJyID0gZGV2bGlua19jb21wYXRfc3dpdGNoX2lkX2dldChkZXYsIHBwaWQpO1xcbm5ldC9jb3JlL2Rldi5jLTEwMTY4LVxcdGlmICghcmVjdXJzZSB8fCBlcnIgIT0gLUVPUE5PVFNVUFApXFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0zMy0jaW5jbHVkZSBcXHUwMDNjbmV0L2Ryb3ByZWFzb24uaFxcdTAwM2VcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzozNDojaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0zNS1cXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTM3LSNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvbmFwaS5oXFx1MDAzZVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjM4OiNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvZGV2bGluay5oXFx1MDAzZVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTM5LVxcbi0tXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9MTA5PXN0cnVjdCBuZXRfZG1fYWxlcnRfb3BzIHtcXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTExNy1cXHR2b2lkICgqaHdfd29ya19pdGVtX2Z1bmMpKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MTE4OlxcdHZvaWQgKCpod190cmFwX3Byb2JlKSh2b2lkICppZ25vcmUsIGNvbnN0IHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTExOS1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjEyMDpcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZGV2bGlua190cmFwX21ldGFkYXRhICptZXRhZGF0YSk7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMTIxLX07XFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz0xMjM9c3RydWN0IG5ldF9kbV9za2JfY2Ige1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTEyNC1cXHR1bmlvbiB7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MTI1OlxcdFxcdHN0cnVjdCBkZXZsaW5rX3RyYXBfbWV0YWRhdGEgKmh3X21ldGFkYXRhO1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTEyNi1cXHRcXHR2b2lkICpwYztcXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTQzNz1zdGF0aWMgdm9pZFxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjQzODpuZXRfZG1faHdfdHJhcF9zdW1tYXJ5X3Byb2JlKHZvaWQgKmlnbm9yZSwgY29uc3Qgc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtNDM5LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo0NDA6XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZGV2bGlua190cmFwX21ldGFkYXRhICptZXRhZGF0YSlcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy00NDEte1xcbi0tXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9NzQyPXN0YXRpYyBzaXplX3RcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo3NDM6bmV0X2RtX2Zsb3dfYWN0aW9uX2Nvb2tpZV9zaXplKGNvbnN0IHN0cnVjdCBkZXZsaW5rX3RyYXBfbWV0YWRhdGEgKmh3X21ldGFkYXRhKVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTc0NC17XFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz03NTA9bmV0X2RtX2h3X3BhY2tldF9yZXBvcnRfc2l6ZShzaXplX3QgcGF5bG9hZF9sZW4sXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6NzUxOlxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqaHdfbWV0YWRhdGEpXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtNzUyLXtcXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTc3OD1zdGF0aWMgaW50IG5ldF9kbV9od19wYWNrZXRfcmVwb3J0X2ZpbGwoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTc4MC17XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6NzgxOlxcdHN0cnVjdCBkZXZsaW5rX3RyYXBfbWV0YWRhdGEgKmh3X21ldGFkYXRhO1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTc4Mi1cXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xcbi0tXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtODQ1LVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjg0NjpzdGF0aWMgc3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6ODQ3Om5ldF9kbV9od19tZXRhZGF0YV9jb3B5KGNvbnN0IHN0cnVjdCBkZXZsaW5rX3RyYXBfbWV0YWRhdGEgKm1ldGFkYXRhKVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTg0OC17XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtODQ5LVxcdGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9jb29raWUgKmZhX2Nvb2tpZTtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo4NTA6XFx0c3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqaHdfbWV0YWRhdGE7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtODUxLVxcdGNvbnN0IGNoYXIgKnRyYXBfZ3JvdXBfbmFtZTtcXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTg5ND1zdGF0aWMgdm9pZFxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjg5NTpuZXRfZG1faHdfbWV0YWRhdGFfZnJlZShzdHJ1Y3QgZGV2bGlua190cmFwX21ldGFkYXRhICpod19tZXRhZGF0YSlcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy04OTYte1xcbi0tXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9OTA0PXN0YXRpYyB2b2lkIG5ldF9kbV9od19wYWNrZXRfcmVwb3J0KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtOTA1LXtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo5MDY6XFx0c3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqaHdfbWV0YWRhdGE7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtOTA3LVxcdHN0cnVjdCBza19idWZmICptc2c7XFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz05NTg9c3RhdGljIHZvaWRcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo5NTk6bmV0X2RtX2h3X3RyYXBfcGFja2V0X3Byb2JlKHZvaWQgKmlnbm9yZSwgY29uc3Qgc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtOTYwLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjk2MTpcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqbWV0YWRhdGEpXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtOTYyLXtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo5NjM6XFx0c3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqbl9od19tZXRhZGF0YTtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy05NjQtXFx0a3RpbWVfdCB0c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpO1xcbi0tXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9MTAyMz1zdGF0aWMgaW50IG5ldF9kbV9od19wcm9iZV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgbmV0X2RtX2FsZXJ0X29wcyAqb3BzKVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTEwMjQte1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjEwMjU6XFx0cmV0dXJuIHJlZ2lzdGVyX3RyYWNlX2RldmxpbmtfdHJhcF9yZXBvcnQob3BzLVxcdTAwM2Vod190cmFwX3Byb2JlLCBOVUxMKTtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMDI2LX1cXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTEwMjg9c3RhdGljIHZvaWQgbmV0X2RtX2h3X3Byb2JlX3VucmVnaXN0ZXIoY29uc3Qgc3RydWN0IG5ldF9kbV9hbGVydF9vcHMgKm9wcylcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMDI5LXtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzoxMDMwOlxcdHVucmVnaXN0ZXJfdHJhY2VfZGV2bGlua190cmFwX3JlcG9ydChvcHMtXFx1MDAzZWh3X3RyYXBfcHJvYmUsIE5VTEwpO1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTEwMzEtXFx0dHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCk7XFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz0xMDQ0PXN0YXRpYyBpbnQgbmV0X2RtX2h3X21vbml0b3Jfc3RhcnQoc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMTA3Mi1cXHRpZiAocmMpIHtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzoxMDczOlxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJGYWlsZWQgdG8gY29ubmVjdCBwcm9iZSB0byBkZXZsaW5rX3RyYXBfcHJvYmUoKSB0cmFjZXBvaW50XFxcIik7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMTA3NC1cXHRcXHRnb3RvIGVycl9tb2R1bGVfcHV0O1xcbi0tXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMTA4OC1cXHRcXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNmh3X2RhdGEtXFx1MDAzZWRyb3BfcXVldWUpKSkge1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjEwODk6XFx0XFx0XFx0c3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqaHdfbWV0YWRhdGE7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMTA5MC1cXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTExMDA9c3RhdGljIHZvaWQgbmV0X2RtX2h3X21vbml0b3Jfc3RvcChzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMTIyLVxcdFxcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcXHUwMDI2aHdfZGF0YS1cXHUwMDNlZHJvcF9xdWV1ZSkpKSB7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MTEyMzpcXHRcXHRcXHRzdHJ1Y3QgZGV2bGlua190cmFwX21ldGFkYXRhICpod19tZXRhZGF0YTtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMTI0LVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9NzAxPXN0YXRpYyB1bW9kZV90IG5ldGRldl9waHlzX2lzX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy03MTEtXFx0XFx0aWYgKCFuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19nZXRfcGh5c19wb3J0X25hbWUgXFx1MDAyNlxcdTAwMjZcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo3MTI6XFx0XFx0ICAgICFuZXRkZXYtXFx1MDAzZWRldmxpbmtfcG9ydClcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy03MTMtXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy03MTUtXFx0XFx0aWYgKCFuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19nZXRfcG9ydF9wYXJlbnRfaWQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo3MTY6XFx0XFx0ICAgICFuZXRkZXYtXFx1MDAzZWRldmxpbmtfcG9ydClcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy03MTctXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01Ni0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcXHUwMDNlXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NTc6I2luY2x1ZGUgXFx1MDAzY25ldC9kZXZsaW5rLmhcXHUwMDNlXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTgtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0xMjkyPXN0YXRpYyBzaXplX3QgcnRubF9wcm90b19kb3duX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEzMDEtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTMwMjpzdGF0aWMgc2l6ZV90IHJ0bmxfZGV2bGlua19wb3J0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMzAzLXtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEzMDUtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTMwNjpcXHRpZiAoZGV2LVxcdTAwM2VkZXZsaW5rX3BvcnQpXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTMwNzpcXHRcXHRzaXplICs9IGRldmxpbmtfbmxfcG9ydF9oYW5kbGVfc2l6ZShkZXYtXFx1MDAzZWRldmxpbmtfcG9ydCk7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTMwOC1cXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTEzMzY9c3RhdGljIG5vaW5saW5lIHNpemVfdCBpZl9ubG1zZ19zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMzk1LVxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKE1BWF9BRERSX0xFTikgLyogSUZMQV9QRVJNX0FERFJFU1MgKi9cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxMzk2OlxcdCAgICAgICArIHJ0bmxfZGV2bGlua19wb3J0X3NpemUoZGV2KVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEzOTctXFx0ICAgICAgICsgcnRubF9kcGxsX3Bpbl9zaXplKClcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTIwMzU9c3RhdGljIGludCBydG5sX2ZpbGxfcHJvdG9fZG93bihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA2My1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMDY0OnN0YXRpYyBpbnQgcnRubF9maWxsX2RldmxpbmtfcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwNjUtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwNjYte1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjIwNjc6XFx0c3RydWN0IG5sYXR0ciAqZGV2bGlua19wb3J0X25lc3Q7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA2OC1cXHRpbnQgcmV0O1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwNjktXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjA3MDpcXHRkZXZsaW5rX3BvcnRfbmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9ERVZMSU5LX1BPUlQpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjIwNzE6XFx0aWYgKCFkZXZsaW5rX3BvcnRfbmVzdClcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMDcyLVxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA3My1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMDc0OlxcdGlmIChkZXYtXFx1MDAzZWRldmxpbmtfcG9ydCkge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjIwNzU6XFx0XFx0cmV0ID0gZGV2bGlua19ubF9wb3J0X2hhbmRsZV9maWxsKHNrYiwgZGV2LVxcdTAwM2VkZXZsaW5rX3BvcnQpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwNzYtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMDc5LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjIwODA6XFx0bmxhX25lc3RfZW5kKHNrYiwgZGV2bGlua19wb3J0X25lc3QpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwODEtXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMDgzLW5lc3RfY2FuY2VsOlxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjIwODQ6XFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgZGV2bGlua19wb3J0X25lc3QpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwODUtXFx0cmV0dXJuIHJldDtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTIxMTA9c3RhdGljIGludCBydG5sX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMjcyLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjIyNzM6XFx0aWYgKHJ0bmxfZmlsbF9kZXZsaW5rX3BvcnQoc2tiLCBkZXYpKVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIyNzQtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmMtOC0jZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG5uZXQvZGV2bGluay9jb3JlLmM6OTojaW5jbHVkZSBcXHUwMDNjdHJhY2UvZXZlbnRzL2RldmxpbmsuaFxcdTAwM2VcXG5uZXQvZGV2bGluay9jb3JlLmMtMTAtXFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmMtMTItXFxubmV0L2RldmxpbmsvY29yZS5jOjEzOkVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoZGV2bGlua19od21zZyk7XFxubmV0L2RldmxpbmsvY29yZS5jOjE0OkVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoZGV2bGlua19od2Vycik7XFxubmV0L2RldmxpbmsvY29yZS5jOjE1OkVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoZGV2bGlua190cmFwX3JlcG9ydCk7XFxubmV0L2RldmxpbmsvY29yZS5jLTE2LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNzpERUZJTkVfWEFSUkFZX0ZMQUdTKGRldmxpbmtzLCBYQV9GTEFHU19BTExPQyk7XFxubmV0L2RldmxpbmsvY29yZS5jLTE4LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoxOTpzdGF0aWMgc3RydWN0IGRldmxpbmsgKmRldmxpbmtzX3hhX2dldCh1bnNpZ25lZCBsb25nIGluZGV4KVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMC17XFxubmV0L2RldmxpbmsvY29yZS5jOjIxOlxcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMi1cXG5uZXQvZGV2bGluay9jb3JlLmMtMjMtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNDpcXHRkZXZsaW5rID0geGFfZmluZChcXHUwMDI2ZGV2bGlua3MsIFxcdTAwMjZpbmRleCwgaW5kZXgsIERFVkxJTktfUkVHSVNURVJFRCk7XFxubmV0L2RldmxpbmsvY29yZS5jOjI1OlxcdGlmICghZGV2bGluayB8fCAhZGV2bGlua190cnlfZ2V0KGRldmxpbmspKVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNjpcXHRcXHRkZXZsaW5rID0gTlVMTDtcXG5uZXQvZGV2bGluay9jb3JlLmMtMjctXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxubmV0L2RldmxpbmsvY29yZS5jOjI4OlxcdHJldHVybiBkZXZsaW5rO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yOS19XFxubmV0L2RldmxpbmsvY29yZS5jLTMwLVxcbm5ldC9kZXZsaW5rL2NvcmUuYzozMTovKiBkZXZsaW5rX3JlbHMgeGFycmF5IGNvbnRhaW5zIDE6MSByZWxhdGlvbnNoaXBzIGJldHdlZW5cXG5uZXQvZGV2bGluay9jb3JlLmM6MzI6ICogZGV2bGluayBvYmplY3QgYW5kIHJlbGF0ZWQgbmVzdGVkIGRldmxpbmsgaW5zdGFuY2UuXFxubmV0L2RldmxpbmsvY29yZS5jLTMzLSAqIFRoZSB4YXJyYXkgaW5kZXggaXMgdXNlZCB0byBnZXQgdGhlIG5lc3RlZCBvYmplY3QgZnJvbVxcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTM1LSAqL1xcbm5ldC9kZXZsaW5rL2NvcmUuYzozNjpzdGF0aWMgREVGSU5FX1hBUlJBWV9GTEFHUyhkZXZsaW5rX3JlbHMsIFhBX0ZMQUdTX0FMTE9DMSk7XFxubmV0L2RldmxpbmsvY29yZS5jLTM3LVxcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTM5LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzo0MDpzdHJ1Y3QgZGV2bGlua19yZWwge1xcbm5ldC9kZXZsaW5rL2NvcmUuYy00MS1cXHR1MzIgaW5kZXg7XFxubmV0L2RldmxpbmsvY29yZS5jLTQyLVxcdHJlZmNvdW50X3QgcmVmY291bnQ7XFxubmV0L2RldmxpbmsvY29yZS5jOjQzOlxcdHUzMiBkZXZsaW5rX2luZGV4O1xcbm5ldC9kZXZsaW5rL2NvcmUuYy00NC1cXHRzdHJ1Y3Qge1xcbm5ldC9kZXZsaW5rL2NvcmUuYzo0NTpcXHRcXHR1MzIgZGV2bGlua19pbmRleDtcXG5uZXQvZGV2bGluay9jb3JlLmMtNDYtXFx0XFx0dTMyIG9ial9pbmRleDtcXG5uZXQvZGV2bGluay9jb3JlLmM6NDc6XFx0XFx0ZGV2bGlua19yZWxfbm90aWZ5X2NiX3QgKm5vdGlmeV9jYjtcXG5uZXQvZGV2bGluay9jb3JlLmM6NDg6XFx0XFx0ZGV2bGlua19yZWxfY2xlYW51cF9jYl90ICpjbGVhbnVwX2NiO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy00OS1cXHRcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG5vdGlmeV93b3JrO1xcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTUyLVxcbm5ldC9kZXZsaW5rL2NvcmUuYzo1MzpzdGF0aWMgdm9pZCBkZXZsaW5rX3JlbF9mcmVlKHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy01NC17XFxubmV0L2RldmxpbmsvY29yZS5jOjU1OlxcdHhhX2VyYXNlKFxcdTAwMjZkZXZsaW5rX3JlbHMsIHJlbC1cXHUwMDNlaW5kZXgpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy01Ni1cXHRrZnJlZShyZWwpO1xcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTU4LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzo1OTpzdGF0aWMgdm9pZCBfX2RldmxpbmtfcmVsX2dldChzdHJ1Y3QgZGV2bGlua19yZWwgKnJlbClcXG5uZXQvZGV2bGluay9jb3JlLmMtNjAte1xcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTYzLVxcbm5ldC9kZXZsaW5rL2NvcmUuYzo2NDpzdGF0aWMgdm9pZCBfX2RldmxpbmtfcmVsX3B1dChzdHJ1Y3QgZGV2bGlua19yZWwgKnJlbClcXG5uZXQvZGV2bGluay9jb3JlLmMtNjUte1xcbm5ldC9kZXZsaW5rL2NvcmUuYy02Ni1cXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZyZWwtXFx1MDAzZXJlZmNvdW50KSlcXG5uZXQvZGV2bGluay9jb3JlLmM6Njc6XFx0XFx0ZGV2bGlua19yZWxfZnJlZShyZWwpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy02OC19XFxubmV0L2RldmxpbmsvY29yZS5jLTY5LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzo3MDpzdHJ1Y3QgZGV2bGluayAqX19tdXN0X2NoZWNrIGRldmxpbmtfbmVzdGVkX2luX2dldF9sb2NrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy03MS17XFxubmV0L2RldmxpbmsvY29yZS5jOjcyOlxcdGRldmxfYXNzZXJ0X2xvY2tlZChkZXZsaW5rKTtcXG5uZXQvZGV2bGluay9jb3JlLmM6NzM6XFx0aWYgKCFkZXZsaW5rLVxcdTAwM2VyZWwpXFxubmV0L2RldmxpbmsvY29yZS5jLTc0LVxcdFxcdHJldHVybiBOVUxMO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzo3NTpcXHRkZXZsaW5rID0gZGV2bGlua3NfeGFfZ2V0KGRldmxpbmstXFx1MDAzZXJlbC1cXHUwMDNlbmVzdGVkX2luLmRldmxpbmtfaW5kZXgpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzo3NjpcXHRpZiAoIWRldmxpbmspXFxubmV0L2RldmxpbmsvY29yZS5jLTc3LVxcdFxcdHJldHVybiBOVUxMO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzo3ODpcXHRkZXZsX2xvY2soZGV2bGluayk7XFxubmV0L2RldmxpbmsvY29yZS5jOjc5OlxcdGlmIChkZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXFxubmV0L2RldmxpbmsvY29yZS5jOjgwOlxcdFxcdHJldHVybiBkZXZsaW5rO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzo4MTpcXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG5uZXQvZGV2bGluay9jb3JlLmM6ODI6XFx0ZGV2bGlua19wdXQoZGV2bGluayk7XFxubmV0L2RldmxpbmsvY29yZS5jLTgzLVxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTg1LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzo4NjpzdGF0aWMgdm9pZCBkZXZsaW5rX3JlbF9uZXN0ZWRfaW5fbm90aWZ5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy04Ny17XFxubmV0L2RldmxpbmsvY29yZS5jOjg4OlxcdHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZXZsaW5rX3JlbCxcXG5uZXQvZGV2bGluay9jb3JlLmMtODktXFx0XFx0XFx0XFx0XFx0ICAgICAgIG5lc3RlZF9pbi5ub3RpZnlfd29yay53b3JrKTtcXG5uZXQvZGV2bGluay9jb3JlLmM6OTA6XFx0c3RydWN0IGRldmxpbmsgKmRldmxpbms7XFxubmV0L2RldmxpbmsvY29yZS5jLTkxLVxcbm5ldC9kZXZsaW5rL2NvcmUuYzo5MjpcXHRkZXZsaW5rID0gZGV2bGlua3NfeGFfZ2V0KHJlbC1cXHUwMDNlbmVzdGVkX2luLmRldmxpbmtfaW5kZXgpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzo5MzpcXHRpZiAoIWRldmxpbmspXFxubmV0L2RldmxpbmsvY29yZS5jLTk0LVxcdFxcdGdvdG8gcmVsX3B1dDtcXG5uZXQvZGV2bGluay9jb3JlLmM6OTU6XFx0aWYgKCFkZXZsX3RyeWxvY2soZGV2bGluaykpIHtcXG5uZXQvZGV2bGluay9jb3JlLmM6OTY6XFx0XFx0ZGV2bGlua19wdXQoZGV2bGluayk7XFxubmV0L2RldmxpbmsvY29yZS5jLTk3LVxcdFxcdGdvdG8gcmVzY2hlZHVsZV93b3JrO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy05OC1cXHR9XFxubmV0L2RldmxpbmsvY29yZS5jOjk5OlxcdGlmICghZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspKSB7XFxubmV0L2RldmxpbmsvY29yZS5jOjEwMDpcXHRcXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG5uZXQvZGV2bGluay9jb3JlLmM6MTAxOlxcdFxcdGRldmxpbmtfcHV0KGRldmxpbmspO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMDItXFx0XFx0Z290byByZWxfcHV0O1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMDMtXFx0fVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoxMDQ6XFx0aWYgKCF4YV9nZXRfbWFyayhcXHUwMDI2ZGV2bGlua19yZWxzLCByZWwtXFx1MDAzZWluZGV4LCBERVZMSU5LX1JFTF9JTl9VU0UpKVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoxMDU6XFx0XFx0cmVsLVxcdTAwM2VuZXN0ZWRfaW4uY2xlYW51cF9jYihkZXZsaW5rLCByZWwtXFx1MDAzZW5lc3RlZF9pbi5vYmpfaW5kZXgsIHJlbC1cXHUwMDNlaW5kZXgpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoxMDY6XFx0cmVsLVxcdTAwM2VuZXN0ZWRfaW4ubm90aWZ5X2NiKGRldmxpbmssIHJlbC1cXHUwMDNlbmVzdGVkX2luLm9ial9pbmRleCk7XFxubmV0L2RldmxpbmsvY29yZS5jOjEwNzpcXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG5uZXQvZGV2bGluay9jb3JlLmM6MTA4OlxcdGRldmxpbmtfcHV0KGRldmxpbmspO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMDktXFxubmV0L2RldmxpbmsvY29yZS5jLTExMC1yZWxfcHV0Olxcbm5ldC9kZXZsaW5rL2NvcmUuYzoxMTE6XFx0X19kZXZsaW5rX3JlbF9wdXQocmVsKTtcXG5uZXQvZGV2bGluay9jb3JlLmMtMTEyLVxcdHJldHVybjtcXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMTctXFxubmV0L2RldmxpbmsvY29yZS5jOjExODpzdGF0aWMgdm9pZCBkZXZsaW5rX3JlbF9uZXN0ZWRfaW5fbm90aWZ5X3dvcmtfc2NoZWR1bGUoc3RydWN0IGRldmxpbmtfcmVsICpyZWwpXFxubmV0L2RldmxpbmsvY29yZS5jLTExOS17XFxubmV0L2RldmxpbmsvY29yZS5jOjEyMDpcXHRfX2RldmxpbmtfcmVsX2dldChyZWwpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMjEtXFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZyZWwtXFx1MDAzZW5lc3RlZF9pbi5ub3RpZnlfd29yaywgMCk7XFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmMtMTIzLVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoxMjQ6c3RhdGljIHN0cnVjdCBkZXZsaW5rX3JlbCAqZGV2bGlua19yZWxfYWxsb2Modm9pZClcXG5uZXQvZGV2bGluay9jb3JlLmMtMTI1LXtcXG5uZXQvZGV2bGluay9jb3JlLmM6MTI2OlxcdHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMjctXFx0c3RhdGljIHUzMiBuZXh0O1xcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTEzMy1cXG5uZXQvZGV2bGluay9jb3JlLmM6MTM0OlxcdGVyciA9IHhhX2FsbG9jX2N5Y2xpYyhcXHUwMDI2ZGV2bGlua19yZWxzLCBcXHUwMDI2cmVsLVxcdTAwM2VpbmRleCwgcmVsLFxcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMzUtXFx0XFx0XFx0ICAgICAgeGFfbGltaXRfMzJiLCBcXHUwMDI2bmV4dCwgR0ZQX0tFUk5FTCk7XFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmMtMTQyLVxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZyZWwtXFx1MDAzZW5lc3RlZF9pbi5ub3RpZnlfd29yayxcXG5uZXQvZGV2bGluay9jb3JlLmM6MTQzOlxcdFxcdFxcdCAgXFx1MDAyNmRldmxpbmtfcmVsX25lc3RlZF9pbl9ub3RpZnlfd29yayk7XFxubmV0L2RldmxpbmsvY29yZS5jLTE0NC1cXHRyZXR1cm4gcmVsO1xcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTE0Ni1cXG5uZXQvZGV2bGluay9jb3JlLmM6MTQ3OnN0YXRpYyB2b2lkIGRldmxpbmtfcmVsX3B1dChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcXG5uZXQvZGV2bGluay9jb3JlLmMtMTQ4LXtcXG5uZXQvZGV2bGluay9jb3JlLmM6MTQ5OlxcdHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsID0gZGV2bGluay1cXHUwMDNlcmVsO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0xNTAtXFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmMtMTUyLVxcdFxcdHJldHVybjtcXG5uZXQvZGV2bGluay9jb3JlLmM6MTUzOlxcdHhhX2NsZWFyX21hcmsoXFx1MDAyNmRldmxpbmtfcmVscywgcmVsLVxcdTAwM2VpbmRleCwgREVWTElOS19SRUxfSU5fVVNFKTtcXG5uZXQvZGV2bGluay9jb3JlLmM6MTU0OlxcdGRldmxpbmtfcmVsX25lc3RlZF9pbl9ub3RpZnlfd29ya19zY2hlZHVsZShyZWwpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNTU6XFx0X19kZXZsaW5rX3JlbF9wdXQocmVsKTtcXG5uZXQvZGV2bGluay9jb3JlLmM6MTU2OlxcdGRldmxpbmstXFx1MDAzZXJlbCA9IE5VTEw7XFxubmV0L2RldmxpbmsvY29yZS5jLTE1Ny19XFxubmV0L2RldmxpbmsvY29yZS5jLTE1OC1cXG5uZXQvZGV2bGluay9jb3JlLmM6MTU5OnZvaWQgZGV2bGlua19yZWxfbmVzdGVkX2luX2NsZWFyKHUzMiByZWxfaW5kZXgpXFxubmV0L2RldmxpbmsvY29yZS5jLTE2MC17XFxubmV0L2RldmxpbmsvY29yZS5jOjE2MTpcXHR4YV9jbGVhcl9tYXJrKFxcdTAwMjZkZXZsaW5rX3JlbHMsIHJlbF9pbmRleCwgREVWTElOS19SRUxfSU5fVVNFKTtcXG5uZXQvZGV2bGluay9jb3JlLmMtMTYyLX1cXG5uZXQvZGV2bGluay9jb3JlLmMtMTYzLVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNjQ6aW50IGRldmxpbmtfcmVsX25lc3RlZF9pbl9hZGQodTMyICpyZWxfaW5kZXgsIHUzMiBkZXZsaW5rX2luZGV4LFxcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNjU6XFx0XFx0XFx0ICAgICAgdTMyIG9ial9pbmRleCwgZGV2bGlua19yZWxfbm90aWZ5X2NiX3QgKm5vdGlmeV9jYixcXG5uZXQvZGV2bGluay9jb3JlLmM6MTY2OlxcdFxcdFxcdCAgICAgIGRldmxpbmtfcmVsX2NsZWFudXBfY2JfdCAqY2xlYW51cF9jYixcXG5uZXQvZGV2bGluay9jb3JlLmM6MTY3OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0xNjgte1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNjk6XFx0c3RydWN0IGRldmxpbmtfcmVsICpyZWwgPSBkZXZsaW5rX3JlbF9hbGxvYygpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0xNzAtXFxubmV0L2RldmxpbmsvY29yZS5jOjE3MTpcXHRBU1NFUlRfREVWTElOS19OT1RfUkVHSVNURVJFRChkZXZsaW5rKTtcXG5uZXQvZGV2bGluay9jb3JlLmMtMTcyLVxcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTE3NS1cXG5uZXQvZGV2bGluay9jb3JlLmM6MTc2OlxcdHJlbC1cXHUwMDNlZGV2bGlua19pbmRleCA9IGRldmxpbmstXFx1MDAzZWluZGV4O1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNzc6XFx0cmVsLVxcdTAwM2VuZXN0ZWRfaW4uZGV2bGlua19pbmRleCA9IGRldmxpbmtfaW5kZXg7XFxubmV0L2RldmxpbmsvY29yZS5jLTE3OC1cXHRyZWwtXFx1MDAzZW5lc3RlZF9pbi5vYmpfaW5kZXggPSBvYmpfaW5kZXg7XFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmMtMTgxLVxcdCpyZWxfaW5kZXggPSByZWwtXFx1MDAzZWluZGV4O1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoxODI6XFx0eGFfc2V0X21hcmsoXFx1MDAyNmRldmxpbmtfcmVscywgcmVsLVxcdTAwM2VpbmRleCwgREVWTElOS19SRUxfSU5fVVNFKTtcXG5uZXQvZGV2bGluay9jb3JlLmM6MTgzOlxcdGRldmxpbmstXFx1MDAzZXJlbCA9IHJlbDtcXG5uZXQvZGV2bGluay9jb3JlLmMtMTg0LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTE4Ny0vKipcXG5uZXQvZGV2bGluay9jb3JlLmM6MTg4OiAqIGRldmxpbmtfcmVsX25lc3RlZF9pbl9ub3RpZnkgLSBOb3RpZnkgdGhlIG9iamVjdCB0aGlzIGRldmxpbmtcXG5uZXQvZGV2bGluay9jb3JlLmMtMTg5LSAqXFx0XFx0XFx0XFx0ICBpbnN0YW5jZSBpcyBuZXN0ZWQgaW4uXFxubmV0L2RldmxpbmsvY29yZS5jOjE5MDogKiBAZGV2bGluazogZGV2bGlua1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0xOTEtICpcXG5uZXQvZGV2bGluay9jb3JlLmM6MTkyOiAqIFRoaXMgaXMgY2FsbGVkIHVwb24gbmV0d29yayBuYW1lc3BhY2UgY2hhbmdlIG9mIGRldmxpbmsgaW5zdGFuY2UuXFxubmV0L2RldmxpbmsvY29yZS5jOjE5MzogKiBJbiBjYXNlIHRoaXMgZGV2bGluayBpbnN0YW5jZSBpcyBuZXN0ZWQgaW4gYW5vdGhlciBkZXZsaW5rIG9iamVjdCxcXG5uZXQvZGV2bGluay9jb3JlLmMtMTk0LSAqIGEgbm90aWZpY2F0aW9uIG9mIGEgY2hhbmdlIG9mIHRoaXMgb2JqZWN0IHNob3VsZCBiZSBzZW50XFxubmV0L2RldmxpbmsvY29yZS5jOjE5NTogKiBvdmVyIG5ldGxpbmsuIFRoZSBwYXJlbnQgZGV2bGluayBpbnN0YW5jZSBsb2NrIG5lZWRzIHRvIGJlXFxubmV0L2RldmxpbmsvY29yZS5jLTE5Ni0gKiB0YWtlbiBkdXJpbmcgdGhlIG5vdGlmaWNhdGlvbiBwcmVwYXJhdGlvbi5cXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0xOTgtICovXFxubmV0L2RldmxpbmsvY29yZS5jOjE5OTp2b2lkIGRldmxpbmtfcmVsX25lc3RlZF9pbl9ub3RpZnkoc3RydWN0IGRldmxpbmsgKmRldmxpbmspXFxubmV0L2RldmxpbmsvY29yZS5jLTIwMC17XFxubmV0L2RldmxpbmsvY29yZS5jOjIwMTpcXHRzdHJ1Y3QgZGV2bGlua19yZWwgKnJlbCA9IGRldmxpbmstXFx1MDAzZXJlbDtcXG5uZXQvZGV2bGluay9jb3JlLmMtMjAyLVxcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTIwNC1cXHRcXHRyZXR1cm47XFxubmV0L2RldmxpbmsvY29yZS5jOjIwNTpcXHRkZXZsaW5rX3JlbF9uZXN0ZWRfaW5fbm90aWZ5X3dvcmtfc2NoZWR1bGUocmVsKTtcXG5uZXQvZGV2bGluay9jb3JlLmMtMjA2LX1cXG5uZXQvZGV2bGluay9jb3JlLmMtMjA3LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoyMDg6c3RhdGljIHN0cnVjdCBkZXZsaW5rX3JlbCAqZGV2bGlua19yZWxfZmluZCh1bnNpZ25lZCBsb25nIHJlbF9pbmRleClcXG5uZXQvZGV2bGluay9jb3JlLmMtMjA5LXtcXG5uZXQvZGV2bGluay9jb3JlLmM6MjEwOlxcdHJldHVybiB4YV9maW5kKFxcdTAwMjZkZXZsaW5rX3JlbHMsIFxcdTAwMjZyZWxfaW5kZXgsIHJlbF9pbmRleCxcXG5uZXQvZGV2bGluay9jb3JlLmMtMjExLVxcdFxcdCAgICAgICBERVZMSU5LX1JFTF9JTl9VU0UpO1xcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTIxMy1cXG5uZXQvZGV2bGluay9jb3JlLmM6MjE0OnN0YXRpYyBzdHJ1Y3QgZGV2bGluayAqZGV2bGlua19yZWxfZGV2bGlua19nZXQodTMyIHJlbF9pbmRleClcXG5uZXQvZGV2bGluay9jb3JlLmMtMjE1LXtcXG5uZXQvZGV2bGluay9jb3JlLmM6MjE2OlxcdHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyMTc6XFx0dTMyIGRldmxpbmtfaW5kZXg7XFxubmV0L2RldmxpbmsvY29yZS5jLTIxOC1cXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMjAtXFx0XFx0cmV0dXJuIE5VTEw7XFxubmV0L2RldmxpbmsvY29yZS5jOjIyMTpcXHR4YV9sb2NrKFxcdTAwMjZkZXZsaW5rX3JlbHMpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyMjI6XFx0cmVsID0gZGV2bGlua19yZWxfZmluZChyZWxfaW5kZXgpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMjMtXFx0aWYgKHJlbClcXG5uZXQvZGV2bGluay9jb3JlLmM6MjI0OlxcdFxcdGRldmxpbmtfaW5kZXggPSByZWwtXFx1MDAzZWRldmxpbmtfaW5kZXg7XFxubmV0L2RldmxpbmsvY29yZS5jOjIyNTpcXHR4YV91bmxvY2soXFx1MDAyNmRldmxpbmtfcmVscyk7XFxubmV0L2RldmxpbmsvY29yZS5jLTIyNi1cXHRpZiAoIXJlbClcXG5uZXQvZGV2bGluay9jb3JlLmMtMjI3LVxcdFxcdHJldHVybiBOVUxMO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyMjg6XFx0cmV0dXJuIGRldmxpbmtzX3hhX2dldChkZXZsaW5rX2luZGV4KTtcXG5uZXQvZGV2bGluay9jb3JlLmMtMjI5LX1cXG5uZXQvZGV2bGluay9jb3JlLmMtMjMwLVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoyMzE6aW50IGRldmxpbmtfcmVsX2RldmxpbmtfaGFuZGxlX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG5uZXQvZGV2bGluay9jb3JlLmMtMjMyLVxcdFxcdFxcdFxcdCAgIHUzMiByZWxfaW5kZXgsIGludCBhdHRydHlwZSxcXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMzQte1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyMzU6XFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2bGlua19uZXQoZGV2bGluayk7XFxubmV0L2RldmxpbmsvY29yZS5jOjIzNjpcXHRzdHJ1Y3QgZGV2bGluayAqcmVsX2Rldmxpbms7XFxubmV0L2RldmxpbmsvY29yZS5jLTIzNy1cXHRpbnQgZXJyO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMzgtXFxubmV0L2RldmxpbmsvY29yZS5jOjIzOTpcXHRyZWxfZGV2bGluayA9IGRldmxpbmtfcmVsX2RldmxpbmtfZ2V0KHJlbF9pbmRleCk7XFxubmV0L2RldmxpbmsvY29yZS5jOjI0MDpcXHRpZiAoIXJlbF9kZXZsaW5rKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNDEtXFx0XFx0cmV0dXJuIDA7XFxubmV0L2RldmxpbmsvY29yZS5jOjI0MjpcXHRlcnIgPSBkZXZsaW5rX25sX3B1dF9uZXN0ZWRfaGFuZGxlKG1zZywgbmV0LCByZWxfZGV2bGluaywgYXR0cnR5cGUpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNDM6XFx0ZGV2bGlua19wdXQocmVsX2RldmxpbmspO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNDQtXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgbXNnX3VwZGF0ZWQpXFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmMtMjQ4LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNDk6dm9pZCAqZGV2bGlua19wcml2KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNTAte1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNTE6XFx0cmV0dXJuIFxcdTAwMjZkZXZsaW5rLVxcdTAwM2Vwcml2O1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNTItfVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNTM6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bGlua19wcml2KTtcXG5uZXQvZGV2bGluay9jb3JlLmMtMjU0LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNTU6c3RydWN0IGRldmxpbmsgKnByaXZfdG9fZGV2bGluayh2b2lkICpwcml2KVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNTYte1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNTc6XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihwcml2LCBzdHJ1Y3QgZGV2bGluaywgcHJpdik7XFxubmV0L2RldmxpbmsvY29yZS5jLTI1OC19XFxubmV0L2RldmxpbmsvY29yZS5jOjI1OTpFWFBPUlRfU1lNQk9MX0dQTChwcml2X3RvX2RldmxpbmspO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNjAtXFxubmV0L2RldmxpbmsvY29yZS5jOjI2MTpzdHJ1Y3QgZGV2aWNlICpkZXZsaW5rX3RvX2Rldihjb25zdCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcXG5uZXQvZGV2bGluay9jb3JlLmMtMjYyLXtcXG5uZXQvZGV2bGluay9jb3JlLmM6MjYzOlxcdHJldHVybiBkZXZsaW5rLVxcdTAwM2VkZXY7XFxubmV0L2RldmxpbmsvY29yZS5jLTI2NC19XFxubmV0L2RldmxpbmsvY29yZS5jOjI2NTpFWFBPUlRfU1lNQk9MX0dQTChkZXZsaW5rX3RvX2Rldik7XFxubmV0L2RldmxpbmsvY29yZS5jLTI2Ni1cXG5uZXQvZGV2bGluay9jb3JlLmM6MjY3OmNvbnN0IGNoYXIgKmRldmxpbmtfYnVzX25hbWUoY29uc3Qgc3RydWN0IGRldmxpbmsgKmRldmxpbmspXFxubmV0L2RldmxpbmsvY29yZS5jLTI2OC17XFxubmV0L2RldmxpbmsvY29yZS5jOjI2OTpcXHRyZXR1cm4gZGV2bGluay1cXHUwMDNlZGV2ID8gZGV2bGluay1cXHUwMDNlZGV2LVxcdTAwM2VidXMtXFx1MDAzZW5hbWUgOiBERVZMSU5LX0lOREVYX0JVU19OQU1FO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNzAtfVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNzE6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bGlua19idXNfbmFtZSk7XFxubmV0L2RldmxpbmsvY29yZS5jLTI3Mi1cXG5uZXQvZGV2bGluay9jb3JlLmM6MjczOmNvbnN0IGNoYXIgKmRldmxpbmtfZGV2X25hbWUoY29uc3Qgc3RydWN0IGRldmxpbmsgKmRldmxpbmspXFxubmV0L2RldmxpbmsvY29yZS5jLTI3NC17XFxubmV0L2RldmxpbmsvY29yZS5jOjI3NTpcXHRyZXR1cm4gZGV2bGluay1cXHUwMDNlZGV2ID8gZGV2X25hbWUoZGV2bGluay1cXHUwMDNlZGV2KSA6IGRldmxpbmstXFx1MDAzZWRldl9uYW1lX2luZGV4O1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNzYtfVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNzc6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bGlua19kZXZfbmFtZSk7XFxubmV0L2RldmxpbmsvY29yZS5jLTI3OC1cXG5uZXQvZGV2bGluay9jb3JlLmM6Mjc5OmNvbnN0IGNoYXIgKmRldmxpbmtfZGV2X2RyaXZlcl9uYW1lKGNvbnN0IHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yODAte1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyODE6XFx0cmV0dXJuIGRldmxpbmstXFx1MDAzZWRldl9kcml2ZXItXFx1MDAzZW5hbWU7XFxubmV0L2RldmxpbmsvY29yZS5jLTI4Mi19XFxubmV0L2RldmxpbmsvY29yZS5jOjI4MzpFWFBPUlRfU1lNQk9MX0dQTChkZXZsaW5rX2Rldl9kcml2ZXJfbmFtZSk7XFxubmV0L2RldmxpbmsvY29yZS5jLTI4NC1cXG5uZXQvZGV2bGluay9jb3JlLmM6Mjg1OnN0cnVjdCBuZXQgKmRldmxpbmtfbmV0KGNvbnN0IHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yODYte1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyODc6XFx0cmV0dXJuIHJlYWRfcG5ldChcXHUwMDI2ZGV2bGluay1cXHUwMDNlX25ldCk7XFxubmV0L2RldmxpbmsvY29yZS5jLTI4OC19XFxubmV0L2RldmxpbmsvY29yZS5jOjI4OTpFWFBPUlRfU1lNQk9MX0dQTChkZXZsaW5rX25ldCk7XFxubmV0L2RldmxpbmsvY29yZS5jLTI5MC1cXG5uZXQvZGV2bGluay9jb3JlLmM6MjkxOnZvaWQgZGV2bF9hc3NlcnRfbG9ja2VkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yOTIte1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyOTM6XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2ZGV2bGluay1cXHUwMDNlbG9jayk7XFxubmV0L2RldmxpbmsvY29yZS5jLTI5NC19XFxubmV0L2RldmxpbmsvY29yZS5jPTI5NT1FWFBPUlRfU1lNQk9MX0dQTChkZXZsX2Fzc2VydF9sb2NrZWQpO1xcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTI5OC0vKiBGb3IgdXNlIGluIGNvbmp1bmN0aW9uIHdpdGggTE9DS0RFUCBvbmx5IGUuZy4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCgpICovXFxubmV0L2RldmxpbmsvY29yZS5jOjI5OTpib29sIGRldmxfbG9ja19pc19oZWxkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMDAte1xcbm5ldC9kZXZsaW5rL2NvcmUuYzozMDE6XFx0cmV0dXJuIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2ZGV2bGluay1cXHUwMDNlbG9jayk7XFxubmV0L2RldmxpbmsvY29yZS5jLTMwMi19XFxubmV0L2RldmxpbmsvY29yZS5jPTMwMz1FWFBPUlRfU1lNQk9MX0dQTChkZXZsX2xvY2tfaXNfaGVsZCk7XFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmMtMzA1LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzozMDY6dm9pZCBkZXZsX2xvY2soc3RydWN0IGRldmxpbmsgKmRldmxpbmspXFxubmV0L2RldmxpbmsvY29yZS5jLTMwNy17XFxubmV0L2RldmxpbmsvY29yZS5jOjMwODpcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZsaW5rLVxcdTAwM2Vsb2NrKTtcXG5uZXQvZGV2bGluay9jb3JlLmMtMzA5LX1cXG5uZXQvZGV2bGluay9jb3JlLmM9MzEwPUVYUE9SVF9TWU1CT0xfR1BMKGRldmxfbG9jayk7XFxubmV0L2RldmxpbmsvY29yZS5jLTMxMS1cXG5uZXQvZGV2bGluay9jb3JlLmM6MzEyOmludCBkZXZsX3RyeWxvY2soc3RydWN0IGRldmxpbmsgKmRldmxpbmspXFxubmV0L2RldmxpbmsvY29yZS5jLTMxMy17XFxubmV0L2RldmxpbmsvY29yZS5jOjMxNDpcXHRyZXR1cm4gbXV0ZXhfdHJ5bG9jayhcXHUwMDI2ZGV2bGluay1cXHUwMDNlbG9jayk7XFxubmV0L2RldmxpbmsvY29yZS5jLTMxNS19XFxubmV0L2RldmxpbmsvY29yZS5jPTMxNj1FWFBPUlRfU1lNQk9MX0dQTChkZXZsX3RyeWxvY2spO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMTctXFxubmV0L2RldmxpbmsvY29yZS5jOjMxODp2b2lkIGRldmxfdW5sb2NrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMTkte1xcbm5ldC9kZXZsaW5rL2NvcmUuYzozMjA6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZsaW5rLVxcdTAwM2Vsb2NrKTtcXG5uZXQvZGV2bGluay9jb3JlLmMtMzIxLX1cXG5uZXQvZGV2bGluay9jb3JlLmM9MzIyPUVYUE9SVF9TWU1CT0xfR1BMKGRldmxfdW5sb2NrKTtcXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMjQtLyoqXFxubmV0L2RldmxpbmsvY29yZS5jOjMyNTogKiBkZXZsaW5rX3RyeV9nZXQoKSAtIHRyeSB0byBvYnRhaW4gYSByZWZlcmVuY2Ugb24gYSBkZXZsaW5rIGluc3RhbmNlXFxubmV0L2RldmxpbmsvY29yZS5jOjMyNjogKiBAZGV2bGluazogaW5zdGFuY2UgdG8gcmVmZXJlbmNlXFxubmV0L2RldmxpbmsvY29yZS5jLTMyNy0gKlxcbm5ldC9kZXZsaW5rL2NvcmUuYzozMjg6ICogT2J0YWluIGEgcmVmZXJlbmNlIG9uIGEgZGV2bGluayBpbnN0YW5jZS4gQSByZWZlcmVuY2Ugb24gYSBkZXZsaW5rIGluc3RhbmNlXFxubmV0L2RldmxpbmsvY29yZS5jLTMyOS0gKiBvbmx5IGltcGxpZXMgdGhhdCBpdCdzIHNhZmUgdG8gdGFrZSB0aGUgaW5zdGFuY2UgbG9jay4gSXQgZG9lcyBub3QgaW1wbHlcXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMzItICovXFxubmV0L2RldmxpbmsvY29yZS5jOjMzMzpzdHJ1Y3QgZGV2bGluayAqX19tdXN0X2NoZWNrIGRldmxpbmtfdHJ5X2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcXG5uZXQvZGV2bGluay9jb3JlLmMtMzM0LXtcXG5uZXQvZGV2bGluay9jb3JlLmM6MzM1OlxcdGlmIChyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNmRldmxpbmstXFx1MDAzZXJlZmNvdW50KSlcXG5uZXQvZGV2bGluay9jb3JlLmM6MzM2OlxcdFxcdHJldHVybiBkZXZsaW5rO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMzctXFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmMtMzM5LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzozNDA6c3RhdGljIHZvaWQgZGV2bGlua19yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvZGV2bGluay9jb3JlLmMtMzQxLXtcXG5uZXQvZGV2bGluay9jb3JlLmM6MzQyOlxcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0zNDMtXFxubmV0L2RldmxpbmsvY29yZS5jOjM0NDpcXHRkZXZsaW5rID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLCBzdHJ1Y3QgZGV2bGluaywgcndvcmspO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0zNDUtXFxubmV0L2RldmxpbmsvY29yZS5jOjM0NjpcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZkZXZsaW5rLVxcdTAwM2Vsb2NrKTtcXG5uZXQvZGV2bGluay9jb3JlLmM6MzQ3OlxcdGxvY2tkZXBfdW5yZWdpc3Rlcl9rZXkoXFx1MDAyNmRldmxpbmstXFx1MDAzZWxvY2tfa2V5KTtcXG5uZXQvZGV2bGluay9jb3JlLmM6MzQ4OlxcdGlmIChkZXZsaW5rLVxcdTAwM2VkZXYpXFxubmV0L2RldmxpbmsvY29yZS5jOjM0OTpcXHRcXHRwdXRfZGV2aWNlKGRldmxpbmstXFx1MDAzZWRldik7XFxubmV0L2RldmxpbmsvY29yZS5jLTM1MC1cXHRlbHNlXFxubmV0L2RldmxpbmsvY29yZS5jOjM1MTpcXHRcXHRrZnJlZShkZXZsaW5rLVxcdTAwM2VkZXZfbmFtZV9pbmRleCk7XFxubmV0L2RldmxpbmsvY29yZS5jOjM1MjpcXHRrdmZyZWUoZGV2bGluayk7XFxubmV0L2RldmxpbmsvY29yZS5jLTM1My19XFxubmV0L2RldmxpbmsvY29yZS5jLTM1NC1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MTguMzg3MTQ3MTQ1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ1MDk5Mzg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBORVRfREVWTElOSyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgTkVUX0RFVkxJTktgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEdpdmVuIHRoZSBuYXR1cmUgb2YgbmV0d29ya2luZyBkZXZpY2UgbGlua2luZywgSSdtIHByZXR0eSBjZXJ0YWluIHRoZSByZWxldmFudCBkZWZpbml0aW9ucyB3aWxsIGJlIGhhbmdpbmcgb3V0IGluIGVpdGhlciBgbmV0L2RldmxpbmsvS2NvbmZpZ2Agb3IsIHBlcmhhcHMgaWYgaXQncyBtb3JlIGZ1bmRhbWVudGFsLCBgbmV0L0tjb25maWdgLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRob3NlIGZpbGVzIGRpcmVjdGx5LiBJIGtub3cgbXkgd2F5IGFyb3VuZCB0aGUga2VybmVsIHNvdXJjZSwgYW5kIEknbSBmYWlybHkgY29uZmlkZW50IEkgY2FuIHF1aWNrbHkgbG9jYXRlIHRoZSBzcGVjaWZpYyBzeW1ib2xzIGFuZCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgTkVUX0RFVkxJTktgIGFuZCBmaWd1cmUgb3V0IGhvdyBpdCdzIGNvbnRyb2xsZWQuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTExLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MjAuODM4MTQyOTMxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDY1Mjg0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0RFVkxJTktcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00Nzk9Y29uZmlnIE5FVF9TT0NLX01TR1xcbi0tXFxubmV0L0tjb25maWctNDg2LVxcbm5ldC9LY29uZmlnOjQ4Nzpjb25maWcgTkVUX0RFVkxJTktcXG5uZXQvS2NvbmZpZy00ODgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDoyMS4wMzI4MDI4MjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjAyODIxOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBORVRfREVWTElOSyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVuYWJsaW5nIGNvbmRpdGlvbnMgZm9yIGBORVRfREVWTElOS2AuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgdG8gbGluZSA0ODcgKG9yIHRoZXJlYWJvdXRzIC0gZ2l2ZSBvciB0YWtlIGEgZmV3IGxpbmVzIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24gSSdtIGxvb2tpbmcgYXQpIHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYE5FVF9ERVZMSU5LYCBpcyBndWFyZGVkIGJlaGluZCBhbnkgc3BlY2lmaWMgcHJlcmVxdWlzaXRlcywgb3RoZXIgY29uZmlnIHN5bWJvbHMsIG9yIGFyY2hpdGVjdHVyZSBsaW1pdGF0aW9ucy4gSSdtIGFsc28gaW50ZXJlc3RlZCBpbiBjaGVja2luZyB3aGV0aGVyIGl0J3MgYSBcInByb21wdFwiIG9wdGlvbiwgbWVhbmluZyBhIGRpcmVjdCB1c2VyIGNob2ljZSwgb3IgaWYgaXQgaGFzIGEgZGVmYXVsdCB2YWx1ZSB0aGF0J3MgYXV0b21hdGljYWxseSBzZXQgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHRzIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgaG93IHRoZSBzeXN0ZW0gYmVoYXZlcyBhbmQgaG93IHRvIG1hbmFnZSB0aGUgTkVUX0RFVkxJTksgc2V0dGluZyBmb3IgbXkgcHVycG9zZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjAzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MjMuNjM1NjI3MTUyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ4MDpcXHRcXHRib29sXFxuIDQ4MTpcXHRcXHRkZWZhdWx0IG5cXG4gNDgyOlxcdFxcdGhlbHBcXG4gNDgzOlxcdFxcdCAgVGhlIE5FVF9TT0NLX01TRyBwcm92aWRlcyBhIGZyYW1ld29yayBmb3IgcGxhaW4gc29ja2V0cyAoZS5nLiBUQ1ApIG9yXFxuIDQ4NDpcXHRcXHQgIFVMUHMgKHVwcGVyIGxheWVyIG1vZHVsZXMsIGUuZy4gVExTKSB0byBwcm9jZXNzIEw3IGFwcGxpY2F0aW9uIGRhdGFcXG4gNDg1OlxcdFxcdCAgd2l0aCB0aGUgaGVscCBvZiBCUEYgcHJvZ3JhbXMuXFxuIDQ4NjpcXHRcXG4gNDg3OlxcdGNvbmZpZyBORVRfREVWTElOS1xcbiA0ODg6XFx0XFx0Ym9vbFxcbiA0ODk6XFx0XFx0ZGVmYXVsdCBuXFxuIDQ5MDpcXHRcXG4gNDkxOlxcdGNvbmZpZyBQQUdFX1BPT0xcXG4gNDkyOlxcdFxcdGJvb2xcXG4gNDkzOlxcdFxcbiA0OTQ6XFx0Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xcbiA0OTU6XFx0XFx0ZGVmYXVsdCBuXFxuIDQ5NjpcXHRcXHRib29sIFxcXCJQYWdlIHBvb2wgc3RhdHNcXFwiXFxuIDQ5NzpcXHRcXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbiA0OTg6XFx0XFx0aGVscFxcbiA0OTk6XFx0XFx0ICBFbmFibGUgcGFnZSBwb29sIHN0YXRpc3RpY3MgdG8gdHJhY2sgcGFnZSBhbGxvY2F0aW9uIGFuZCByZWN5Y2xpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MjMuNjM1NzE1OTEyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0Njg1NDc3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBORVRfREVWTElOSyBVc2FnZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGBORVRfREVWTElOS2AncyBpbmZsdWVuY2Ugd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2Ygd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBiZWluZyB1dGlsaXplZC4gSSB3YW50IHRvIGlkZW50aWZ5IGFsbCB0aGUgbW9kdWxlcywgc3Vic3lzdGVtcywgYW5kIGNvZGUgcGF0aHMgdGhhdCBhcmUgY29uZGl0aW9uYWwgb24gb3IgZGVwZW5kZW50IHVwb24gYE5FVF9ERVZMSU5LYC4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgd2l0aCBhIHRhcmdldGVkIHNlYXJjaCBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gSSdsbCBuZWVkIHRvIHVzZSB0aGUgcmlnaHQgdG9vbHMgYW5kIHF1ZXJ5IHRvIGdldCBhIHByZWNpc2UgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUuIEknbSBhaW1pbmcgZm9yIGEgcmVzdWx0IHRoYXQgcGlucG9pbnRzIGJvdGggZGlyZWN0IGFuZCBwb3RlbnRpYWxseSBpbmRpcmVjdCB1c2FnZXMsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGludHJvZHVjZS4gVGhpcyBsZXZlbCBvZiBhbmFseXNpcyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgYXJjaGl0ZWN0dXJhbCByYW1pZmljYXRpb25zIG9mIGBORVRfREVWTElOS2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzIzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDoyNi4xMDQyNjY5OTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTE0MzY5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5FVF9ERVZMSU5LXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3J5cHRvL21hcnZlbGwvS2NvbmZpZz00MD1jb25maWcgQ1JZUFRPX0RFVl9PQ1RFT05UWDJfQ1BUXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL0tjb25maWctNTEtXFx0c2VsZWN0IENSWVBUT19BVVRIRU5DXFxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9LY29uZmlnOjUyOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvS2NvbmZpZy01My1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTM9Y29uZmlnIFpMMzA3M1hcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNi1cXHRzZWxlY3QgRFBMTFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6NzpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTgtXFx0c2VsZWN0IFJFR01BUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz02MDQ9Y29uZmlnIE5FVERFVlNJTVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDktXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjEwOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L0tjb25maWctNjExLVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnPTE2OD1jb25maWcgQ0FOX0tWQVNFUl9QQ0lFRkRcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3MC1cXHR0cmlzdGF0ZSBcXFwiS3Zhc2VyIFBDSWUgRkQgY2FyZHNcXFwiXFxuZHJpdmVycy9uZXQvY2FuL0tjb25maWc6MTcxOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3Mi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9MzE9Y29uZmlnIENBTl9FVEFTX0VTNThYXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWctMzMtXFx0c2VsZWN0IENSQzE2XFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnOjM0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy0zNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9Njc9Y29uZmlnIENBTl9LVkFTRVJfVVNCXFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnLTY4LVxcdHRyaXN0YXRlIFxcXCJLdmFzZXIgQ0FOL1VTQiBpbnRlcmZhY2VcXFwiXFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnOjY5OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy03MC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZz0xOT1jb25maWcgRU5BX0VUSEVSTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZy0yMy1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL0tjb25maWc6MjQ6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL0tjb25maWctMjUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWc9MTY5PWNvbmZpZyBQRFNfQ09SRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWctMTcyLVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWc6MTczOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnLTE3NC1cXHRzZWxlY3QgUExETUZXXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTIwNz1jb25maWcgQk5YVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTItXFx0c2VsZWN0IENSQzMyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyMTM6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTQtXFx0c2VsZWN0IFBBR0VfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yNTg9Y29uZmlnIEJOR0VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYwLVxcdGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNjE6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjItXFx0c2VsZWN0IFBBR0VfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9Njg9Y29uZmlnIExJUVVJRElPXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy03NS1cXHRzZWxlY3QgTElRVUlESU9fQ09SRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjc2OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTc3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnPTI9Y29uZmlnIEZTTF9EUEFBMl9FVEhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnLTctXFx0c2VsZWN0IEZTTF9YR01BQ19NRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL0tjb25maWc6ODpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnPTY9Y29uZmlnIEZVTl9FVEhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnLTktXFx0ZGVwZW5kcyBvbiBUTFMgXFx1MDAyNlxcdTAwMjYgVExTX0RFVklDRSB8fCBUTFNfREVWSUNFPW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZzoxMDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZy0xMS1cXHRzZWxlY3QgRlVOX0NPUkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTkxPWNvbmZpZyBITlMzXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05My1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjk0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk1LVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYy9LY29uZmlnPTY9Y29uZmlnIEhJTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvS2NvbmZpZy04LVxcdGRlcGVuZHMgb24gKFBDSV9NU0kgXFx1MDAyNlxcdTAwMjYgKFg4NiB8fCBBUk02NCkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL0tjb25maWc6OTpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvS2NvbmZpZy0xMC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTE0NT1jb25maWcgSVhHQkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMTUwLVxcdHNlbGVjdCBNRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoxNTE6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0xNTItXFx0c2VsZWN0IFBMRE1GV1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yMjk9Y29uZmlnIEk0MEVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjM1LVxcdHNlbGVjdCBMSUJJRV9BRE1JTlFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIzNjpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIzNy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTI5MT1jb25maWcgSUNFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwMi1cXHRzZWxlY3QgTElCSUVfRldMT0cgaWYgREVCVUdfRlNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMwMzpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwNC1cXHRzZWxlY3QgUEFDS0lOR1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhkL0tjb25maWc9ND1jb25maWcgSVhEXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGQvS2NvbmZpZy04LVxcdHNlbGVjdCBMSUJJRV9QQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGQvS2NvbmZpZzo5OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4ZC9LY29uZmlnLTEwLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9OT1jb25maWcgT0NURU9OVFgyX0FGXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTExLVxcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MTI6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMy1cXHRkZXBlbmRzIG9uICg2NEJJVCBcXHUwMDI2XFx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnPTMxPWNvbmZpZyBPQ1RFT05UWDJfUEZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzMtXFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozNDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM1LVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZz02PWNvbmZpZyBQUkVTVEVSQVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9LY29uZmlnLTktXFx0ZGVwZW5kcyBvbiBCUklER0UgfHwgQlJJREdFPW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWc6MTA6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9LY29uZmlnLTExLVxcdHNlbGVjdCBQSFlMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc9Mjg9Y29uZmlnIE1MWDRfQ09SRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnLTMxLVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnOjMyOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy0zMy1cXHRkZWZhdWx0IG5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnPTY9Y29uZmlnIE1MWDVfQ09SRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctOS1cXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjEwOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTExLVxcdGRlcGVuZHMgb24gTUxYRlcgfHwgIU1MWEZXXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhmdy9LY29uZmlnPTY9Y29uZmlnIE1MWEZXXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhmdy9LY29uZmlnLTE0LVxcdHNlbGVjdCBYWl9ERUNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhmdy9LY29uZmlnOjE1OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZz02PWNvbmZpZyBNTFhTV19DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJNZWxsYW5veCBUZWNobm9sb2dpZXMgU3dpdGNoIEFTSUNzIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZzo4OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctOS1cXHRzZWxlY3QgTUxYRldcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZz0yMD1jb25maWcgRkJOSUNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yNi1cXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjI3OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yOC1cXHRzZWxlY3QgUEFHRV9QT09MXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL0tjb25maWc9MTU9Y29uZmlnIE1TQ0NfT0NFTE9UX1NXSVRDSF9MSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL0tjb25maWctMTYtXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZzoxNzpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL0tjb25maWctMTgtXFx0c2VsZWN0IFJFR01BUF9NTUlPXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvS2NvbmZpZz0xOT1jb25maWcgTkZQXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvS2NvbmZpZy0yMy1cXHRkZXBlbmRzIG9uIFRMUyBcXHUwMDI2XFx1MDAyNiBUTFNfREVWSUNFIHx8IFRMU19ERVZJQ0U9blxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnOjI0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnLTI1LVxcdHNlbGVjdCBDUkMzMlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZz0yMD1jb25maWcgSU9OSUNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWctMjMtXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWc6MjQ6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yNS1cXHRzZWxlY3QgRElNTElCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZz03Nj1jb25maWcgUUVEXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZy04MS1cXHRzZWxlY3QgQ1JDMzJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZzo4MjpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZy04My1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZz0xOT1jb25maWcgU0ZDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZy0yNC1cXHRzZWxlY3QgQ1JDMzJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZzoyNTpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZy0yNi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTI9Y29uZmlnIFNUTU1BQ19FVEhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMTItXFx0c2VsZWN0IFJFU0VUX0NPTlRST0xMRVJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjEzOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMTQtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz02NT1jb25maWcgVElfQ1BTV19TV0lUQ0hERVZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNzMtXFx0c2VsZWN0IFJFR01BUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6NzQ6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy03NS1cXHRpbXBseSBQSFlfVElfR01JSV9TRUxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9OTY9Y29uZmlnIFRJX0szX0FNNjVfQ1BTV19OVVNTXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTk4LVxcdGRlcGVuZHMgb24gQVJDSF9LMyBcXHUwMDI2XFx1MDAyNiBPRiBcXHUwMDI2XFx1MDAyNiBUSV9LM19VRE1BX0dMVUVfTEFZRVJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjk5OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTAwLVxcdHNlbGVjdCBUSV9EQVZJTkNJX01ESU9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWc9Nj1jb25maWcgRElOR0hBSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZy04LSAgICBkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWc6OTogICAgc2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZy0xMC0gICAgaGVscFxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTk2PWNvbmZpZyBJT1NNXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctOTgtXFx0ZGVwZW5kcyBvbiBQQ0lcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6OTk6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTEwMC1cXHRzZWxlY3QgUkVMQVkgaWYgV1dBTl9ERUJVR0ZTXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnPTIxMT1jb25maWcgUFRQXzE1ODhfQ0xPQ0tfT0NQXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIxOC1cXHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcXG5kcml2ZXJzL3B0cC9LY29uZmlnOjIxOTpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIyMC1cXHRzZWxlY3QgQ1JDMTZcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZz0zPW1lbnVjb25maWcgTkVUX0RTQVxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTEwLVxcdHNlbGVjdCBQSFlMSU5LXFxubmV0L2RzYS9LY29uZmlnOjExOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbm5ldC9kc2EvS2NvbmZpZy0xMi1cXHRpbXBseSBORVRfU0VMRlRFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjU0OjI3Ljc1NTcxMzA0NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDQ2NTUxMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byBgbmV0ZGV2c2ltYCBhbmQgYGRldmxpbmtgIEludGVncmF0aW9uKipcblxuT2theSwgc28gYE5FVERFVlNJTWAgcGlja3MgYE5FVF9ERVZMSU5LYC4gSW50ZXJlc3RpbmcuIGBORVRERVZTSU1gLCByaWdodCwgdGhhdCdzIHRoZSBzb2Z0d2FyZSBtb2NrIG5ldHdvcmsgZGV2aWNlIHVzZWQgZXh0ZW5zaXZlbHkgd2l0aCBRRU1VIGFuZCBzeXprYWxsZXIgZm9yIGZ1enppbmcuIE5vdywgdGhlIHF1ZXN0aW9uIGlzOiBkb2VzIGBuZXRkZXZzaW1gIGFjdHVhbGx5IGltcGxlbWVudCB0aGUgYGRldmxpbmtgIGZsYXNoIHVwZGF0ZSBmdW5jdGlvbmFsaXR5PyBHaXZlbiBpdHMgcm9sZSBpbiB0ZXN0aW5nLCBpdCdzIGEgbG9naWNhbCBwb2ludCBvZiBpbnZlc3RpZ2F0aW9uLiBMZXQncyBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuY2Agc291cmNlIGNvZGUsIHRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJIGNvdWxkIGFsc28gZG8gYSBxdWljayBzZWFyY2ggd2l0aGluIHRoZSBgbmV0ZGV2c2ltYCBjb2RlIGZvciB0aGUgdGVybSBgZmxhc2hfdXBkYXRlYC4gVGhhdCBzaG91bGQgcXVpY2tseSByZXZlYWwgd2hldGhlciBvciBub3QgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQgYW5kIGhvdyBpdCdzIGhhbmRsZWQsIGFzc3VtaW5nIHRoYXQgdGhlIG1vY2sgZGV2aWNlIGltcGxlbWVudHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdXBkYXRpbmcgaXRzIFwiZmlybXdhcmVcIi4gVW5kZXJzdGFuZGluZyB0aGF0IGludGVyYWN0aW9uIGlzIGtleSB0byBmaWd1cmluZyBvdXQgaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODMxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MzAuODAyMjY3ODc2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzcxNjgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbGFzaF91cGRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz05ODY9c3RhdGljIGludCBuc2ltX2Rldl9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMDAzLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxMDA0OnN0YXRpYyBpbnQgbnNpbV9kZXZfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxMDA1OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEwMDYtXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMDE0LVxcdGlmIChuc2ltX2Rldi1cXHUwMDNlZndfdXBkYXRlX3N0YXR1cykge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxMDE1OlxcdFxcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGV2bGluayxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTAxNi1cXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwiUHJlcGFyaW5nIHRvIGZsYXNoXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMDIxLVxcdFxcdGlmIChuc2ltX2Rldi1cXHUwMDNlZndfdXBkYXRlX3N0YXR1cylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTAyMjpcXHRcXHRcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssIFxcXCJGbGFzaGluZ1xcXCIsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEwMjMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcGFyYW1zLVxcdTAwM2Vjb21wb25lbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTAyOS1cXHRpZiAobnNpbV9kZXYtXFx1MDAzZWZ3X3VwZGF0ZV9zdGF0dXMpIHtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTAzMDpcXHRcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssIFxcXCJGbGFzaGluZ1xcXCIsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEwMzEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgcGFyYW1zLVxcdTAwM2Vjb21wb25lbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTAzMy1cXHRcXHRcXHRcXHRcXHRcXHQgICBOU0lNX0RFVl9GTEFTSF9TSVpFKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTAzNDpcXHRcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV90aW1lb3V0X25vdGlmeShkZXZsaW5rLCBcXFwiRmxhc2ggc2VsZWN0XFxcIixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTAzNS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgcGFyYW1zLVxcdTAwM2Vjb21wb25lbnQsIDgxKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTAzNjpcXHRcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssIFxcXCJGbGFzaGluZyBkb25lXFxcIixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTAzNy1cXHRcXHRcXHRcXHRcXHRcXHQgICBwYXJhbXMtXFx1MDAzZWNvbXBvbmVudCwgMCwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTM1MD1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIG5zaW1fZGV2X2Rldmxpbmtfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEzNTItXFx0LmVzd2l0Y2hfbW9kZV9nZXQgPSBuc2ltX2RldmxpbmtfZXN3aXRjaF9tb2RlX2dldCxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTM1MzpcXHQuc3VwcG9ydGVkX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgPSBERVZMSU5LX1NVUFBPUlRfRkxBU0hfVVBEQVRFX09WRVJXUklURV9NQVNLLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMzU0LVxcdC5yZWxvYWRfYWN0aW9ucyA9IEJJVChERVZMSU5LX1JFTE9BRF9BQ1RJT05fRFJJVkVSX1JFSU5JVCksXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTM1Ny1cXHQuaW5mb19nZXQgPSBuc2ltX2Rldl9pbmZvX2dldCxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTM1ODpcXHQuZmxhc2hfdXBkYXRlID0gbnNpbV9kZXZfZmxhc2hfdXBkYXRlLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMzU5LVxcdC50cmFwX2luaXQgPSBuc2ltX2Rldl9kZXZsaW5rX3RyYXBfaW5pdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MzAuODQ5OTkwMzg0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NzQ5NDI1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmV0ZGV2c2ltIGFuZCBEZXZsaW5rIEZsYXNoIFVwZGF0ZXMqKlxuXG5Pa2F5LCBzbyBOZXRkZXZzaW0gaXMgZmluYWxseSBmdWxseSBzdXBwb3J0aW5nIGRldmxpbmsgZmxhc2ggdXBkYXRlcywgd2hpY2ggaXMgZmFudGFzdGljISBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgYWN0dWFsbHkgKm1lYW5zKiBpbiBwcmFjdGljZSwgdGhvdWdoLiBXaGF0IGRvZXMgdGhlIG5ldGxpbmsgZmxhc2ggdXBkYXRlIGNvbW1hbmQgKmRvKiBhdCBhIGxvdyBsZXZlbD9cblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgY29yZSBsb2dpYyBzaG91bGQgcmVzaWRlIGluIGBuZXQvZGV2bGluay9kZXYuY2AuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YC4gVGltZSB0byByZWFkIGxpbmVzIDExMjAtMTE4NS4gSSdsbCBuZWVkIHRvIHBhcnNlIHRoZSBuZXRsaW5rIG1lc3NhZ2VzIGFuZCBjb3JyZWxhdGUgdGhlbSB0byB0aGUgc3BlY2lmaWMgb3BlcmF0aW9ucyBmb3IgdGhlIGZsYXNoIHVwZGF0ZS4gSSdtIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IHRoZXkgaGFuZGxlIGVycm9yIGNvbmRpdGlvbnMsIHZlcnNpb25pbmcsIGFuZCBzZWN1cml0eSAoaWYgYXBwbGljYWJsZSkuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZDsgdW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgdW5sb2NrIHRoZSBwcmFjdGljYWwgaW1wbGljYXRpb25zIG9mIE5ldGRldnNpbSdzIG5ldyBmZWF0dXJlLiBJIGV4cGVjdCBzb21lIGludGVyZXN0aW5nIG51YW5jZXMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDozMy44MjQ5MzUyNTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9kZXZsaW5rL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMjA6XFx0XFxuMTEyMTpcXHRcXHRyZXQgPSBkZXZsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZWluZm9fZ2V0KGRldmxpbmssIFxcdTAwMjZyZXEsIE5VTEwpO1xcbjExMjI6XFx0XFx0aWYgKHJldClcXG4xMTIzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTEyNDpcXHRcXG4xMTI1OlxcdFxcdGlmICghbG9va3VwX2N0eC5sb29rdXBfbmFtZV9mb3VuZCkge1xcbjExMjY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfQVRUUihleHRhY2ssIG5sYV9jb21wb25lbnQsXFxuMTEyNzpcXHRcXHRcXHRcXHRcXHQgICAgXFxcInNlbGVjdGVkIGNvbXBvbmVudCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlXFxcIik7XFxuMTEyODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTI5OlxcdFxcdH1cXG4xMTMwOlxcdFxcdCpwX2NvbXBvbmVudCA9IGNvbXBvbmVudDtcXG4xMTMxOlxcdFxcdHJldHVybiAwO1xcbjExMzI6XFx0fVxcbjExMzM6XFx0XFxuMTEzNDpcXHRpbnQgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjExMzU6XFx0e1xcbjExMzY6XFx0XFx0c3RydWN0IG5sYXR0ciAqbmxhX292ZXJ3cml0ZV9tYXNrLCAqbmxhX2ZpbGVfbmFtZTtcXG4xMTM3OlxcdFxcdHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgcGFyYW1zID0ge307XFxuMTEzODpcXHRcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IGRldmxpbmtfbmxfY3R4KGluZm8pLVxcdTAwM2VkZXZsaW5rO1xcbjExMzk6XFx0XFx0Y29uc3QgY2hhciAqZmlsZV9uYW1lO1xcbjExNDA6XFx0XFx0dTMyIHN1cHBvcnRlZF9wYXJhbXM7XFxuMTE0MTpcXHRcXHRpbnQgcmV0O1xcbjExNDI6XFx0XFxuMTE0MzpcXHRcXHRpZiAoIWRldmxpbmstXFx1MDAzZW9wcy1cXHUwMDNlZmxhc2hfdXBkYXRlKVxcbjExNDQ6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjExNDU6XFx0XFxuMTE0NjpcXHRcXHRpZiAoR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX0ZJTEVfTkFNRSkpXFxuMTE0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTQ4OlxcdFxcbjExNDk6XFx0XFx0cmV0ID0gZGV2bGlua19mbGFzaF9jb21wb25lbnRfZ2V0KGRldmxpbmssXFxuMTE1MDpcXHRcXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9GTEFTSF9VUERBVEVfQ09NUE9ORU5UXSxcXG4xMTUxOlxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnBhcmFtcy5jb21wb25lbnQsIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuMTE1MjpcXHRcXHRpZiAocmV0KVxcbjExNTM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMTU0OlxcdFxcbjExNTU6XFx0XFx0c3VwcG9ydGVkX3BhcmFtcyA9IGRldmxpbmstXFx1MDAzZW9wcy1cXHUwMDNlc3VwcG9ydGVkX2ZsYXNoX3VwZGF0ZV9wYXJhbXM7XFxuMTE1NjpcXHRcXG4xMTU3OlxcdFxcdG5sYV9vdmVyd3JpdGVfbWFzayA9IGluZm8tXFx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9GTEFTSF9VUERBVEVfT1ZFUldSSVRFX01BU0tdO1xcbjExNTg6XFx0XFx0aWYgKG5sYV9vdmVyd3JpdGVfbWFzaykge1xcbjExNTk6XFx0XFx0XFx0c3RydWN0IG5sYV9iaXRmaWVsZDMyIHNlY3Rpb25zO1xcbjExNjA6XFx0XFxuMTE2MTpcXHRcXHRcXHRpZiAoIShzdXBwb3J0ZWRfcGFyYW1zIFxcdTAwMjYgREVWTElOS19TVVBQT1JUX0ZMQVNIX1VQREFURV9PVkVSV1JJVEVfTUFTSykpIHtcXG4xMTYyOlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cXHUwMDNlZXh0YWNrLCBubGFfb3ZlcndyaXRlX21hc2ssXFxuMTE2MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFxcIm92ZXJ3cml0ZSBzZXR0aW5ncyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRldmljZVxcXCIpO1xcbjExNjQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjExNjU6XFx0XFx0XFx0fVxcbjExNjY6XFx0XFx0XFx0c2VjdGlvbnMgPSBubGFfZ2V0X2JpdGZpZWxkMzIobmxhX292ZXJ3cml0ZV9tYXNrKTtcXG4xMTY3OlxcdFxcdFxcdHBhcmFtcy5vdmVyd3JpdGVfbWFzayA9IHNlY3Rpb25zLnZhbHVlIFxcdTAwMjYgc2VjdGlvbnMuc2VsZWN0b3I7XFxuMTE2ODpcXHRcXHR9XFxuMTE2OTpcXHRcXG4xMTcwOlxcdFxcdG5sYV9maWxlX25hbWUgPSBpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX0ZJTEVfTkFNRV07XFxuMTE3MTpcXHRcXHRmaWxlX25hbWUgPSBubGFfZGF0YShubGFfZmlsZV9uYW1lKTtcXG4xMTcyOlxcdFxcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFxcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cXHUwMDNlZGV2KTtcXG4xMTczOlxcdFxcdGlmIChyZXQpIHtcXG4xMTc0OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cXHUwMDNlZXh0YWNrLCBubGFfZmlsZV9uYW1lLFxcbjExNzU6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gbG9jYXRlIHRoZSByZXF1ZXN0ZWQgZmlybXdhcmUgZmlsZVxcXCIpO1xcbjExNzY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMTc3OlxcdFxcdH1cXG4xMTc4OlxcdFxcbjExNzk6XFx0XFx0ZGV2bGlua19mbGFzaF91cGRhdGVfYmVnaW5fbm90aWZ5KGRldmxpbmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDozMy44MjUwNTQzNDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0NTI1NDI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIERldmxpbmsgRmxhc2ggVXBkYXRlIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAg4oCTIHRoYXQncyB0aGUgZnVuY3Rpb24gd2UncmUgZGVhbGluZyB3aXRoIGZvciBmbGFzaCB1cGRhdGVzLCBhbmQgaXQncyB0cmlnZ2VyZWQgdGhyb3VnaCB0aGUgZ2VuZXJpYyBuZXRsaW5rIGRldmxpbmsgZmFtaWx5LiBHb29kLCB0aGF0IGdpdmVzIG1lIHRoZSBpbml0aWFsIGNvbnRleHQuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVgLiBJIHN1c3BlY3QgdGhlIGxhdHRlciBtaWdodCBiZSByZWxhdGVkIHRvIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGJ1dCBJIG5lZWQgdG8gY29uZmlybS5cblxuU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBzZWUgd2hlcmUgYGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZWAgaXMgYWN0dWFsbHkgKmNhbGxlZCogZnJvbS4gSSdsbCBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4gS25vd2luZyB0aGUgY2FsbCBncmFwaCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZnVsbCBmbG93IG9mIGV4ZWN1dGlvbiBhbmQgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QuIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byBwcm9wZXJseSBhbmFseXplIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zIGJlaW5nIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzNjQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjU0OjM2LjI3MDMxNTc5MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MjY1NzEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvZGV2bGluay5oPTIxMjM9dm9pZCBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuaW5jbHVkZS9uZXQvZGV2bGluay5oLTIxMjQtXFx0XFx0XFx0XFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XFxuaW5jbHVkZS9uZXQvZGV2bGluay5oOjIxMjU6aW50IGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgY29uc3QgY2hhciAqZmlsZV9uYW1lKTtcXG5pbmNsdWRlL25ldC9kZXZsaW5rLmgtMjEyNi1pbnQgZGV2bGlua19jb21wYXRfcGh5c19wb3J0X25hbWVfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5pbmNsdWRlL25ldC9kZXZsaW5rLmg9MjE1MT1zdGF0aWMgaW5saW5lIGludFxcbmluY2x1ZGUvbmV0L2RldmxpbmsuaDoyMTUyOmRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgY29uc3QgY2hhciAqZmlsZV9uYW1lKVxcbmluY2x1ZGUvbmV0L2RldmxpbmsuaC0yMTUzLXtcXG4tLVxcbm5ldC9kZXZsaW5rL2Rldi5jPTEyMjA9dm9pZCBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuLS1cXG5uZXQvZGV2bGluay9kZXYuYy0xMjMxLVxcbm5ldC9kZXZsaW5rL2Rldi5jOjEyMzI6aW50IGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgY29uc3QgY2hhciAqZmlsZV9uYW1lKVxcbm5ldC9kZXZsaW5rL2Rldi5jLTEyMzMte1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz0zNjQ2PWludCBkZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM2NzUtXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VkZXZsaW5rKVxcbm5ldC9ldGh0b29sL2lvY3RsLmM6MzY3NjpcXHRcXHRcXHRyYyA9IGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZShzdGF0ZS1cXHUwMDNlZGV2bGluayxcXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM2NzctXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHN0YXRlLVxcdTAwM2VlZmwuZGF0YSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjU0OjM3Ljk1Mjk3OTgzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkzNTczMDc1MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBVcGRhdGUgTWVjaGFuaXNtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gYGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZWAsIGNhbGxlZCB0aHJvdWdoIGV0aHRvb2wgaW9jdGxzIChzcGVjaWZpY2FsbHkgYEVUSFRPT0xfU0ZMQVNIYCBhbmQgYEVUSFRPT0xfRkxBU0hERVZJQ0VgIGZyb20gYG5ldC9ldGh0b29sL2lvY3RsLmNgKSwgYW5kIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IHRoZSBnZW5lcmljIG5ldGxpbmsgYERFVkxJTktfQ01EX0ZMQVNIX1VQREFURWAsIGlzIGNsZWFyLiBUaGUga2V5IHF1ZXN0aW9uIGlzLCAqd2h5KiB0aGUgc2hpZnQgZnJvbSBgcmVxdWVzdF9maXJtd2FyZWAgdG8gYHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0YD9cblxuQWgsIHJpZ2h0LiBgcmVxdWVzdF9maXJtd2FyZWAgaW50cm9kdWNlcyBhIGZhbGxiYWNrIHRvIHRoZSB1c2VyIGhlbHBlciBpZiB0aGUgZmlybXdhcmUgaXNuJ3QgaW1tZWRpYXRlbHkgZm91bmQgb24gZGlzayAob3IgdGhlIHVzZXIgaGVscGVyIGlzIGVuYWJsZWQpLCB3aGVyZWFzIGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdGAgZ29lcyBzdHJhaWdodCB0byB0aGUgZmlsZXN5c3RlbSBvciBhbnkgYnVpbHQtaW4gZmlybXdhcmUuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgZmlndXJpbmcgb3V0IHRoZSBpbXBhY3QuIERvZXMgdGhpcyBjaGFuZ2UgYWZmZWN0IGFjY2Vzc2libGUga2VybmVsIGxvZ2ljP1xuXG5BYnNvbHV0ZWx5LiBCb3RoIHRoZSBnZW5lcmljIG5ldGxpbmsgaW50ZXJmYWNlIChgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGApIGFuZCB0aGUgZXRodG9vbCBpb2N0bCBwYXRoIChgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYCkgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4gRnVydGhlcm1vcmUsIHRoaXMgbWVhbnMgdGhhdCBldmVuIGVtdWxhdGVkIHZpcnR1YWwgZGV2aWNlcyBsaWtlIGBuZXRkZXZzaW1gIGNhbiB0cmlnZ2VyIHRoZXNlIGZ1bmN0aW9ucywgdGh1cyBkaXJlY3RseSBtb2RpZnlpbmcgaG93IGZpcm13YXJlIGlzIGxvYWRlZC4gV2UgbmVlZCB0byBiZSB2ZXJ5IGNhcmVmdWwgdG8gdmVyaWZ5IHRoZSBzaWRlLWVmZmVjdHMuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoYXQgdGhlIHN5bWJvbHMgaW52b2x2ZWQgYXJlbid0IHN0YXRpYy4gSW4gYG5ldC9kZXZsaW5rL2Rldi5jYCwgYm90aCBgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgYW5kIGBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVgIGFyZSBub24tc3RhdGljLiBgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgaGFzIHRoZSBzaWduYXR1cmUgYGludCBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pYCBhbmQgYGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZWAgaGFzIHRoZSBzaWduYXR1cmUgYGludCBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSlgLiBOZXh0LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBgbmV0L2RldmxpbmsvbmV0bGlua19nZW4uY2AsIG9yIHdoZXJldmVyIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBpcyByZWdpc3RlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzExOSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDo0Ny4zMTAyODk4NzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTUxMjEzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZGV2bGluay9kZXYuYz0xMDk2PXN0YXRpYyBpbnQgZGV2bGlua19mbGFzaF9jb21wb25lbnRfZ2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxcbi0tXFxubmV0L2RldmxpbmsvZGV2LmMtMTEzMy1cXG5uZXQvZGV2bGluay9kZXYuYzoxMTM0OmludCBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L2RldmxpbmsvZGV2LmMtMTEzNS17XFxuLS1cXG5uZXQvZGV2bGluay9uZXRsaW5rX2dlbi5jPTcwMj1jb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZGV2bGlua19ubF9vcHNbNzVdID0ge1xcbi0tXFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYy0xMTgzLVxcdFxcdC5wcmVfZG9pdFxcdD0gZGV2bGlua19ubF9wcmVfZG9pdCxcXG5uZXQvZGV2bGluay9uZXRsaW5rX2dlbi5jOjExODQ6XFx0XFx0LmRvaXRcXHRcXHQ9IGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXQsXFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYy0xMTg1LVxcdFxcdC5wb3N0X2RvaXRcXHQ9IGRldmxpbmtfbmxfcG9zdF9kb2l0LFxcbi0tXFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uaD0xMjQ9aW50IGRldmxpbmtfbmxfaGVhbHRoX3JlcG9ydGVyX2R1bXBfY2xlYXJfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtMTI1LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG5uZXQvZGV2bGluay9uZXRsaW5rX2dlbi5oOjEyNjppbnQgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG5uZXQvZGV2bGluay9uZXRsaW5rX2dlbi5oLTEyNy1pbnQgZGV2bGlua19ubF90cmFwX2dldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDo0OC44NjU0MTc0OTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcyNzUyMzE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGZpbGVzOlxuXG4qKkNoZWNraW5nIHRoZSBCdWlsZCBDb25maWd1cmF0aW9uIGZvciBuZXQvZGV2bGluay9kZXYuYyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbnMgYXJlICpzcGVjaWZpY2FsbHkqIHJlcXVpcmVkIHRvIGJ1aWxkIGBuZXQvZGV2bGluay9kZXYuY2AuIEkgYWxyZWFkeSBrbm93IHRoZSBvdmVyYWxsIGBuZXQvZGV2bGlua2AgYnVpbGQgZW52aXJvbm1lbnQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBzcGVjaWZpYyB0byB0aGlzIHBhcnRpY3VsYXIgZmlsZS4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSByZWxldmFudCBgTWFrZWZpbGVg4oCmIGJ1dCBmaXJzdCwgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgaXNuJ3Qgc29tZSBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gbWFjcm8gZGVmaW5lZCB0aGF0J3MgZ29pbmcgdG8gdHJpcCBtZSB1cC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhhdCBgbmV0L2RldmxpbmsvTWFrZWZpbGVgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgaW5jbHVkZSBwYXRocywgYW55IGN1c3RvbSBjb21waWxhdGlvbiBmbGFncywgYW5kIHBvdGVudGlhbCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gaG93IHRoZSBidWlsZCBwcm9jZXNzIGhhbmRsZXMgdGhpcyBzaW5nbGUgc291cmNlIGZpbGUuIEFueSBzdXJwcmlzZXMgbHVya2luZyBpbiB0aGVyZSBjb3VsZCBwb3RlbnRpYWxseSBpbXBhY3QgdGhlIGZpbmFsIG1vZHVsZSBvciBiaW5hcnkuIEkgbmVlZCB0byBlbnN1cmUgYSBjbGVhbiBhbmQgcHJlZGljdGFibGUgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NDQ3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6NTEuNTkyOTQ0NjY4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9kZXZsaW5rL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmoteSA6PSBjb3JlLm8gbmV0bGluay5vIG5ldGxpbmtfZ2VuLm8gZGV2Lm8gcG9ydC5vIHNiLm8gZHBpcGUubyBcXFxcXFxuICAgNDpcXHRcXHQgcmVzb3VyY2UubyBwYXJhbS5vIHJlZ2lvbi5vIGhlYWx0aC5vIHRyYXAubyByYXRlLm8gbGluZWNhcmQubyBzaF9kZXYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDo1MS41OTMwMDU3MzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDAyODA0Nzk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE5ldGxpbmsgYW5kIEl0cyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbmV0L01ha2VmaWxlYCBhbmQgSSBzZWUgdGhpcyBsaW5lOiBgb2JqLSQoQ09ORklHX05FVF9ERVZMSU5LKSArPSBkZXZsaW5rL2AuIENsZWFybHksIGBkZXZsaW5rL2AgaXMgaW5jbHVkZWQgd2hlbiBgQ09ORklHX05FVF9ERVZMSU5LYCBpcyBzZXQuIE5vdywgdGhlIGNvbnRleHQgc3VnZ2VzdHMgdGhpcyBpcyBsaW5rZWQgdG8gZGV2aWNlIGRyaXZlcnMgbGlrZSBgQ09ORklHX05FVERFVlNJTWAsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVzZSBhcmUgY3JpdGljYWwgdG8gbXkgY3VycmVudCBjb25maWd1cmF0aW9uLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY3kgYmV0d2VlbiBgQ09ORklHX05FVERFVlNJTWAgYW5kIGBDT05GSUdfTkVUX0RFVkxJTktgLiBJcyBvbmUgbmVjZXNzYXJ5IGZvciB0aGUgb3RoZXIsIG9yIGFyZSB0aGV5IGluZGVwZW5kZW50P1xuXG5BIHF1aWNrIGNoZWNrIHJldmVhbHMgYE5FVF9ERVZMSU5LYCBpcyBhIGJvb2xlYW4gY29uZmlnIHN5bWJvbCBpbiBgbmV0L0tjb25maWdgLCBkZWZhdWx0aW5nIHRvICduJy4gUmlnaHQsIGFuZCBgTkVUREVWU0lNYCAqc2VsZWN0cyogYE5FVF9ERVZMSU5LYCwgbWVhbmluZyBpZiBJIGVuYWJsZSBgTkVUREVWU0lNYCwgSSBhdXRvbWF0aWNhbGx5IGdldCBgTkVUX0RFVkxJTktgLiBUaGlzIG1lYW5zIGBORVRfREVWTElOS2AgaXMgYSBkZXBlbmRlbmN5IG9mIGBORVRERVZTSU1gLiBTbywgaXQgc2VlbXMgSSBuZWVkIHRvIGludmVzdGlnYXRlIGBORVRERVZTSU1gIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgZ28gY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBzZWUgd2hhdCBpcyBnb2luZyBvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4MjgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDo1NS42MjEwNTc1NjZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTU1ODA5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUREVWU0lNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTYwMj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNjAzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA0OmNvbmZpZyBORVRERVZTSU1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDo1NS43NTA2MjAzMjFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI3Mzc1MzY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXR3b3JrIGRyaXZlcnMgYXJlIGNvbmZpZ3VyZWQsIHNvIGxldCdzIGp1bXAgcmlnaHQgaW50byBgZHJpdmVycy9uZXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2MDQuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgYSBjcnVjaWFsIHNlY3Rpb24gcmVsYXRlZCB0byB0aGUgY3VycmVudCBwcm9ibGVtIHJlc2lkZXMuIExldCdzIHNlZSB3aGF0J3MgYmVpbmcgZGVmaW5lZCB0aGVyZSBhbmQgaG93IGl0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgb3ZlcmFsbCBzeXN0ZW0gc2V0dXAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgc29tZSBpbnNpZ2h0cyBpbnRvIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGZvciBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc3ltYm9sIG9yIGJsb2NrIHRoYXQgYWZmZWN0cyB0aGUgYmVoYXZpb3IgSSBhbSBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzU3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6NTguMDI0Mzc2MjI0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjA0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjA0OlxcdGNvbmZpZyBORVRERVZTSU1cXG4gNjA1OlxcdFxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcXFwiXFxuIDYwNjpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxuIDYwNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gNjA4OlxcdFxcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCBQU0FNUExFPW5cXG4gNjA5OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfTU9DSyB8fCBQVFBfMTU4OF9DTE9DS19NT0NLPW5cXG4gNjEwOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiA2MTE6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiA2MTI6XFx0XFx0c2VsZWN0IE5FVF9TSEFQRVJcXG4gNjEzOlxcdFxcdGhlbHBcXG4gNjE0OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIGFuZCBzb2Z0d2FyZSBtb2RlbCB0aGF0IGNhblxcbiA2MTU6XFx0XFx0ICBiZSB1c2VkIHRvIHRlc3QgdmFyaW91cyBjb250cm9sIHBhdGggbmV0d29ya2luZyBBUElzLCBlc3BlY2lhbGx5XFxuIDYxNjpcXHRcXHQgIEhXLW9mZmxvYWQgcmVsYXRlZC5cXG4gNjE3OlxcdFxcbiA2MTg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDYxOTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIG5ldGRldnNpbS5cXG4gNjIwOlxcdFxcbiA2MjE6XFx0Y29uZmlnIE5FVF9GQUlMT1ZFUlxcbiA2MjI6XFx0XFx0dHJpc3RhdGUgXFxcIkZhaWxvdmVyIGRyaXZlclxcXCJcXG4gNjIzOlxcdFxcdHNlbGVjdCBGQUlMT1ZFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDo1OC4wMjQ0NDk0ODRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzM1MTkyODkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBzZWUuIEkgbmVlZCB0byBjb25maWd1cmUgdGhpcyBmdXp6aW5nIHNldHVwIGNvcnJlY3RseS4gRmlyc3QsIEknbSBjaGVja2luZyBmb3IgYE5FVF9ERVZMSU5LYCBhbmQgYE5FVERFVlNJTWAuIFRoZXNlIGFyZSB0aGUga2V5IHBpZWNlcyBoZXJlLiBTbywgd2hhdCBzaG91bGQgYmUgaW4gYEVuYWJsZUNvbmZpZ3NgPyBIbW0sIGRlZmluaXRlbHkgYE5FVF9ERVZMSU5LYCBhbmQgYE5FVERFVlNJTWAuIFdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgYE5FVF9ERVZMSU5LYC4gSXMgaXQgZGlyZWN0bHkgc2VsZWN0YWJsZSwgb3IgaXMgaXQgaW1wbGljaXRseSBlbmFibGVkPyBSaWdodCwgaXQgZG9lc24ndCBoYXZlIGEgcHJvbXB0IGluIGBuZXQvS2NvbmZpZ2AsIG1lYW5pbmcgc2VsZWN0aW5nIGBORVRERVZTSU1gIG9yIG90aGVyIHJlbGV2YW50IGRyaXZlcnMgYWN0aXZhdGVzIGBORVRfREVWTElOS2AuIEdvb2QsIHNvIGluY2x1ZGluZyBib3RoIGBORVRfREVWTElOS2AgYW5kIGBORVRERVZTSU1gIGlzIHRoZSByaWdodCBtb3ZlIGZvciBicm9hZGVyIGNvdmVyYWdlLlxuXG5Ob3csIGxldCdzIHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEZpcnN0LCAqaXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmcqPyBZZXMsIGFic29sdXRlbHkuIEl0J3Mgd29ya2luZyB3aXRoIGZpcm13YXJlIGxvYWRpbmcgd2l0aGluIHRoZSBgZGV2bGlua2AgbmV0bGluayBjb21tYW5kIGhhbmRsZXIgKGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCkgYW5kIHRoZSBgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYCBoYW5kbGVyLiBCb3RoIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsvZXRodG9vbCBjb21tYW5kcyBmcm9tIHVucHJpdmlsZWdlZCBvciBwcml2aWxlZ2VkIHVzZXJzcGFjZSwgYW5kIGl0J3Mgb24gdmlydHVhbCBhbmQgZW11bGF0ZWQgbmV0d29yayBkZXZpY2VzIGxpa2UgYG5ldGRldnNpbWAuIFRoYXQncyBqdWljeSBwb3RlbnRpYWwgZm9yIGZpbmRpbmcgc29tZXRoaW5nIGludGVyZXN0aW5nLlxuXG5OZXh0LCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBgRm9jdXNTeW1ib2xzYC4gVGhleSBhcmUgY2xlYXJseSBgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgYW5kIGBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVgLiBJbXBvcnRhbnRseSwgYm90aCBhcmUgbm9uLXN0YXRpYyBhbmQgbm90IGlubGluZWQg4oCTIEFQSSBlbnRyeXBvaW50cywgcGVyZmVjdC5cblxuRmluYWxseSwgY29uZmlybSB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFnYWluOiBgTkVUX0RFVkxJTktgIGFuZCBgTkVUREVWU0lNYC5cblxuQWxyaWdodCwgSSB0aGluayBJJ3ZlIGdvdCBldmVyeXRoaW5nIGNvdmVyZWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODUzLCJPdXRwdXRUb2tlbnMiOjEzMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjU1OjA1LjM3NjM4MTA0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU4MTEwMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9ERVZMSU5LXCIsXG4gICAgXCJORVRERVZTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0XCIsXG4gICAgXCJkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzd2l0Y2hlcyB0aGUgZmlybXdhcmUgcmVxdWVzdCBtZXRob2QgaW4gZGV2bGluayBmbGFzaCB1cGRhdGUgcm91dGluZXMgZnJvbSByZXF1ZXN0X2Zpcm13YXJlKCkgdG8gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoKS4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldGxpbmsgZGV2bGluayBhbmQgZXRodG9vbCBmbGFzaCB1cGRhdGUgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB1c2luZyBtb2NrIG5ldHdvcmsgZGV2aWNlcyBsaWtlIG5ldGRldnNpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWTElOS1wiLFxuICAgIFwiTkVUREVWU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdFwiLFxuICAgIFwiZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc3dpdGNoZXMgdGhlIGZpcm13YXJlIHJlcXVlc3QgbWV0aG9kIGluIGRldmxpbmsgZmxhc2ggdXBkYXRlIHJvdXRpbmVzIGZyb20gcmVxdWVzdF9maXJtd2FyZSgpIHRvIHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KCkuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXRsaW5rIGRldmxpbmsgYW5kIGV0aHRvb2wgZmxhc2ggdXBkYXRlIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdXNpbmcgbW9jayBuZXR3b3JrIGRldmljZXMgbGlrZSBuZXRkZXZzaW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjU1OjA1LjQ1MjE5OTY5NloiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNzk0NzU4NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NTowNS40NTI3NjI3MzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDM3ODg5MDI0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2bGluayBmbGFzaCB1cGRhdGUgaGFuZGxlcnMgKGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBhbmQgYGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZWApIHRvIHVzZSBgcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoKWAgaW5zdGVhZCBvZiBgcmVxdWVzdF9maXJtd2FyZSgpYCwgYXZvaWRpbmcgdGhlIGZhbGxiYWNrIHRvIHRoZSB1c2VybW9kZSBoZWxwZXIgd2hlbiByZXF1ZXN0aW5nIGZpcm13YXJlIGZpbGVzLlxcblxcbkJvdGggY2FsbCBzaXRlcyB6ZXJvLWluaXRpYWxpemUgdGhlaXIgc3RhY2sgc3RydWN0dXJlcyAoYHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgcGFyYW1zID0ge307YCkuIE9uIGZhaWx1cmUsIHRoZSByZXR1cm4gY29kZSBpcyBjaGVja2VkIGFuZCBleGVjdXRpb24gZXhpdHMgd2l0aG91dCByZWFkaW5nIGBwYXJhbXMuZndgLiBPbiBzdWNjZXNzLCB0aGUgZmlybXdhcmUgc3RydWN0IHBvaW50ZXIgaXMgc2V0IGJ5IHRoZSBmaXJtd2FyZSBsb2FkZXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZSwgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiwgYW5kIHN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZjgzODA0OGEwNDQ2NThmNGU2ZmY2M2MzYTYzOWExY2ZlN2IyOTczXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwNDo1NDowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2Rldi5jIGIvbmV0L2RldmxpbmsvZGV2LmNcbmluZGV4IDU1OTU5YjBmZjVhYjQuLmI4NWJiMDJhOWU4MDcgMTAwNjQ0XG4tLS0gYS9uZXQvZGV2bGluay9kZXYuY1xuKysrIGIvbmV0L2RldmxpbmsvZGV2LmNcbkBAIC0xMTY5LDcgKzExNjksNyBAQCBpbnQgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIFx0bmxhX2ZpbGVfbmFtZSA9IGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9GSUxFX05BTUVdO1xuIFx0ZmlsZV9uYW1lID0gbmxhX2RhdGEobmxhX2ZpbGVfbmFtZSk7XG4tXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFx1MDAyNnBhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLVx1MDAzZWRldik7XG4rXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cdTAwM2VkZXYpO1xuIFx0aWYgKHJldCkge1xuIFx0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLCBubGFfZmlsZV9uYW1lLFxuIFx0XHRcdFx0ICAgIFwiZmFpbGVkIHRvIGxvY2F0ZSB0aGUgcmVxdWVzdGVkIGZpcm13YXJlIGZpbGVcIik7XG5AQCAtMTI0NSw3ICsxMjQ1LDcgQEAgaW50IGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgY29uc3QgY2hhciAqZmlsZV9uYW1lKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFx1MDAyNnBhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLVx1MDAzZWRldik7XG4rXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cdTAwM2VkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTU6MDUuNDUyNzYzOTY3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMzI3NTYzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXZsaW5rIEZsYXNoIFVwZGF0ZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHdlJ3JlIG1vdmluZyBmcm9tIHVzaW5nIGByZXF1ZXN0X2Zpcm13YXJlYCB0byBgcmVxdWVzdF9maXJtd2FyZV9kaXJlY3RgIHdpdGhpbiB0aGUgYG5ldC9kZXZsaW5rL2Rldi5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgYW5kIGBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVgIGZ1bmN0aW9ucy4gVGhpcyBzY3JlYW1zIGZpcm13YXJlIHVwZGF0ZSBoYW5kbGluZywgYW5kIGdpdmVuIHRoZSBmdW5jdGlvbiBuYW1lcywgSSdkIGJldCB3ZSdyZSBkZWFsaW5nIHdpdGggdXBkYXRpbmcgdGhlIGZpcm13YXJlIG9uIGEgZGV2aWNlIG1hbmFnZWQgYnkgdGhlIGRldmxpbmsgc3Vic3lzdGVtLlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcyAqd2h5KiB0aGUgc3dpdGNoPyBgcmVxdWVzdF9maXJtd2FyZV9kaXJlY3RgIHN1Z2dlc3RzIGEgbW9yZSBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZmlybXdhcmUgYmxvYiwgcG90ZW50aWFsbHkgYnlwYXNzaW5nIHNvbWUgaW50ZXJtZWRpYXJ5IGNhY2hpbmcgb3IgcHJvY2Vzc2luZyBzdGVwcyB0aGF0IGByZXF1ZXN0X2Zpcm13YXJlYCBtaWdodCBoYXZlIGludm9sdmVkLiBJcyB0aGlzIGFib3V0IHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgb3IgcGVyaGFwcyB0byBzdXBwb3J0IGEgbmV3IGRpcmVjdC1hY2Nlc3MgbW9kZSBpbiB0aGUgaGFyZHdhcmU/XG5cblRvIGdldCBhIGJldHRlciBncmlwIG9uIHRoaXMsIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQuIExldCBtZSBwdWxsIHVwIHRoYXQgc2VjdGlvbiBvZiBgbmV0L2RldmxpbmsvZGV2LmNgIHVzaW5nIGByZWFkLWZpbGVgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDExNjAgdG8gMTI2MC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRob3NlIGByZXF1ZXN0X2Zpcm13YXJlYCBjYWxscyB3ZXJlIGJlaW5nIHVzZWQgYmVmb3JlLCBhbmQgd2hhdCBvdGhlciBjaGFuZ2VzIG9yIGNvbnNpZGVyYXRpb25zIGFyZSBiZWluZyBoYW5kbGVkIGFsb25nIHdpdGggdGhlIHVwZGF0ZSBwcm9jZXNzLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgd2hlbiBpdCBjb21lcyB0byBmaXJtd2FyZSB1cGRhdGVzIGFuZCB0aGUgZGV2bGluayBzdWJzeXN0ZW0uIFRoaXMgY291bGQgYmUgYSBzaWduaWZpY2FudCBjaGFuZ2UgYW5kIG5lZWRzIGEgZnVsbCByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NTowOS41ODU1MjQyOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2RldmxpbmsvZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1MCxcbiAgXCJMaW5lQ291bnRcIjogMTEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTA6XFx0XFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX0NPTVBPTkVOVF0sXFxuMTE1MTpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZwYXJhbXMuY29tcG9uZW50LCBpbmZvLVxcdTAwM2VleHRhY2spO1xcbjExNTI6XFx0XFx0aWYgKHJldClcXG4xMTUzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE1NDpcXHRcXG4xMTU1OlxcdFxcdHN1cHBvcnRlZF9wYXJhbXMgPSBkZXZsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZXN1cHBvcnRlZF9mbGFzaF91cGRhdGVfcGFyYW1zO1xcbjExNTY6XFx0XFxuMTE1NzpcXHRcXHRubGFfb3ZlcndyaXRlX21hc2sgPSBpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX09WRVJXUklURV9NQVNLXTtcXG4xMTU4OlxcdFxcdGlmIChubGFfb3ZlcndyaXRlX21hc2spIHtcXG4xMTU5OlxcdFxcdFxcdHN0cnVjdCBubGFfYml0ZmllbGQzMiBzZWN0aW9ucztcXG4xMTYwOlxcdFxcbjExNjE6XFx0XFx0XFx0aWYgKCEoc3VwcG9ydGVkX3BhcmFtcyBcXHUwMDI2IERFVkxJTktfU1VQUE9SVF9GTEFTSF9VUERBVEVfT1ZFUldSSVRFX01BU0spKSB7XFxuMTE2MjpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXFx1MDAzZWV4dGFjaywgbmxhX292ZXJ3cml0ZV9tYXNrLFxcbjExNjM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJvdmVyd3JpdGUgc2V0dGluZ3MgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcXFwiKTtcXG4xMTY0OlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTY1OlxcdFxcdFxcdH1cXG4xMTY2OlxcdFxcdFxcdHNlY3Rpb25zID0gbmxhX2dldF9iaXRmaWVsZDMyKG5sYV9vdmVyd3JpdGVfbWFzayk7XFxuMTE2NzpcXHRcXHRcXHRwYXJhbXMub3ZlcndyaXRlX21hc2sgPSBzZWN0aW9ucy52YWx1ZSBcXHUwMDI2IHNlY3Rpb25zLnNlbGVjdG9yO1xcbjExNjg6XFx0XFx0fVxcbjExNjk6XFx0XFxuMTE3MDpcXHRcXHRubGFfZmlsZV9uYW1lID0gaW5mby1cXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9GSUxFX05BTUVdO1xcbjExNzE6XFx0XFx0ZmlsZV9uYW1lID0gbmxhX2RhdGEobmxhX2ZpbGVfbmFtZSk7XFxuMTE3MjpcXHRcXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcXHUwMDI2cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstXFx1MDAzZWRldik7XFxuMTE3MzpcXHRcXHRpZiAocmV0KSB7XFxuMTE3NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXFx1MDAzZWV4dGFjaywgbmxhX2ZpbGVfbmFtZSxcXG4xMTc1OlxcdFxcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIGxvY2F0ZSB0aGUgcmVxdWVzdGVkIGZpcm13YXJlIGZpbGVcXFwiKTtcXG4xMTc2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE3NzpcXHRcXHR9XFxuMTE3ODpcXHRcXG4xMTc5OlxcdFxcdGRldmxpbmtfZmxhc2hfdXBkYXRlX2JlZ2luX25vdGlmeShkZXZsaW5rKTtcXG4xMTgwOlxcdFxcdHJldCA9IGRldmxpbmstXFx1MDAzZW9wcy1cXHUwMDNlZmxhc2hfdXBkYXRlKGRldmxpbmssIFxcdTAwMjZwYXJhbXMsIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuMTE4MTpcXHRcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9lbmRfbm90aWZ5KGRldmxpbmspO1xcbjExODI6XFx0XFxuMTE4MzpcXHRcXHRyZWxlYXNlX2Zpcm13YXJlKHBhcmFtcy5mdyk7XFxuMTE4NDpcXHRcXG4xMTg1OlxcdFxcdHJldHVybiByZXQ7XFxuMTE4NjpcXHR9XFxuMTE4NzpcXHRcXG4xMTg4OlxcdHN0YXRpYyB2b2lkIF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxcbjExODk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuMTE5MDpcXHR7XFxuMTE5MTpcXHRcXHRzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSByZXEgPSB7fTtcXG4xMTkyOlxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYXR0cjtcXG4xMTkzOlxcdFxcdHN0cnVjdCBza19idWZmICptc2c7XFxuMTE5NDpcXHRcXHRpbnQgcmVtLCBlcnI7XFxuMTE5NTpcXHRcXG4xMTk2OlxcdFxcdG1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xcbjExOTc6XFx0XFx0aWYgKCFtc2cpXFxuMTE5ODpcXHRcXHRcXHRyZXR1cm47XFxuMTE5OTpcXHRcXG4xMjAwOlxcdFxcdHJlcS5tc2cgPSBtc2c7XFxuMTIwMTpcXHRcXHRlcnIgPSBkZXZsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZWluZm9fZ2V0KGRldmxpbmssIFxcdTAwMjZyZXEsIE5VTEwpO1xcbjEyMDI6XFx0XFx0aWYgKGVycilcXG4xMjAzOlxcdFxcdFxcdGdvdG8gZnJlZV9tc2c7XFxuMTIwNDpcXHRcXG4xMjA1OlxcdFxcdG5sYV9mb3JfZWFjaF9hdHRyX3R5cGUobmxhdHRyLCBERVZMSU5LX0FUVFJfSU5GT19WRVJTSU9OX1JVTk5JTkcsXFxuMTIwNjpcXHRcXHRcXHRcXHQgICAgICAgKHZvaWQgKiltc2ctXFx1MDAzZWRhdGEsIG1zZy1cXHUwMDNlbGVuLCByZW0pIHtcXG4xMjA3OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmt2O1xcbjEyMDg6XFx0XFx0XFx0aW50IHJlbV9rdjtcXG4xMjA5OlxcdFxcbjEyMTA6XFx0XFx0XFx0bmxhX2Zvcl9lYWNoX25lc3RlZF90eXBlKGt2LCBERVZMSU5LX0FUVFJfSU5GT19WRVJTSU9OX1ZBTFVFLFxcbjEyMTE6XFx0XFx0XFx0XFx0XFx0XFx0IG5sYXR0ciwgcmVtX2t2KSB7XFxuMTIxMjpcXHRcXHRcXHRcXHRzdHJsY2F0KGJ1ZiwgbmxhX2RhdGEoa3YpLCBsZW4pO1xcbjEyMTM6XFx0XFx0XFx0XFx0c3RybGNhdChidWYsIFxcXCIgXFxcIiwgbGVuKTtcXG4xMjE0OlxcdFxcdFxcdH1cXG4xMjE1OlxcdFxcdH1cXG4xMjE2OlxcdGZyZWVfbXNnOlxcbjEyMTc6XFx0XFx0bmxtc2dfY29uc3VtZShtc2cpO1xcbjEyMTg6XFx0fVxcbjEyMTk6XFx0XFxuMTIyMDpcXHR2b2lkIGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4xMjIxOlxcdFxcdFxcdFxcdFxcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuMTIyMjpcXHR7XFxuMTIyMzpcXHRcXHRpZiAoIWRldmxpbmstXFx1MDAzZW9wcy1cXHUwMDNlaW5mb19nZXQpXFxuMTIyNDpcXHRcXHRcXHRyZXR1cm47XFxuMTIyNTpcXHRcXG4xMjI2OlxcdFxcdGRldmxfbG9jayhkZXZsaW5rKTtcXG4xMjI3OlxcdFxcdGlmIChkZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXFxuMTIyODpcXHRcXHRcXHRfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihkZXZsaW5rLCBidWYsIGxlbik7XFxuMTIyOTpcXHRcXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG4xMjMwOlxcdH1cXG4xMjMxOlxcdFxcbjEyMzI6XFx0aW50IGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgY29uc3QgY2hhciAqZmlsZV9uYW1lKVxcbjEyMzM6XFx0e1xcbjEyMzQ6XFx0XFx0c3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyBwYXJhbXMgPSB7fTtcXG4xMjM1OlxcdFxcdGludCByZXQ7XFxuMTIzNjpcXHRcXG4xMjM3OlxcdFxcdGRldmxfbG9jayhkZXZsaW5rKTtcXG4xMjM4OlxcdFxcdGlmICghZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspKSB7XFxuMTIzOTpcXHRcXHRcXHRyZXQgPSAtRU5PREVWO1xcbjEyNDA6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjEyNDE6XFx0XFx0fVxcbjEyNDI6XFx0XFxuMTI0MzpcXHRcXHRpZiAoIWRldmxpbmstXFx1MDAzZW9wcy1cXHUwMDNlZmxhc2hfdXBkYXRlKSB7XFxuMTI0NDpcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4xMjQ1OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMjQ2OlxcdFxcdH1cXG4xMjQ3OlxcdFxcbjEyNDg6XFx0XFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXFx1MDAyNnBhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLVxcdTAwM2VkZXYpO1xcbjEyNDk6XFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTU6MDkuNTg1NjQyODVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxNDE4NzMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyBvbiBpbiB0aGUgYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgIGZ1bmN0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgIGZ1bmN0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiB0aGlzIGlzIHdoZXJlIHRoZSAqYWN0aW9uKiBoYXBwZW5zLCB0aGUgbWVhdCBvZiB0aGUgZmxhc2ggdXBkYXRlIHZpYSBuZXRsaW5rLiBJIGJldCB0aGlzIGlzIHRoZSBjZW50cmFsIGNvbnRyb2wgcG9pbnQuIEl04oCZcyBnb3QgXCJkb2l0XCIgaW4gdGhlIG5hbWUsIHNvIEkgZXhwZWN0IGEgbG90IG9mIHN0ZXBzIGFyZSBoYW5kbGVkIGhlcmUuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZsb3csIHRoZSBpbnB1dCB2YWxpZGF0aW9uLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLlxuXG5JJ20gdGhpbmtpbmcsIFwiRmxhc2ggdXBkYXRlXCIgc3VnZ2VzdHMgcG90ZW50aWFsbHkgcmlza3kgb3BlcmF0aW9ucyAtIHRoaXMgYmV0dGVyIGhhdmUgc29tZSBzZXJpb3VzIGVycm9yIGNoZWNraW5nIGFuZCBzYWZldHkgbWVjaGFuaXNtcyBpbiBwbGFjZS4gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgZm9yIGJyaWNraW5nIHRoZSBkZXZpY2UgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuIFdoYXQncyB0aGUgcHJvdG9jb2wgaGVyZT8gSXMgdGhlcmUgYSBjaGVja3N1bSBpbnZvbHZlZD8gSG93IGRvZXMgaXQgaGFuZGxlIHBhcnRpYWwgdXBkYXRlcz8gUG93ZXIgZmFpbHVyZXM/IEkgaGF2ZSBhIGxvdCBvZiBxdWVzdGlvbnMuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHRoZSBsaW5jaHBpbiBvZiBhbnkgZmxhc2gtcmVsYXRlZCBuZXRsaW5rIG9wZXJhdGlvbnMsIHNvIGl0IG5lZWRzIHRvIGJlIGJ1bGxldHByb29mLiBJJ2xsIG5lZWQgdG8ga25vdzogaG93IGFyZSBjb21tYW5kcyBwYXJzZWQsIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGRhdGEsIGFuZCBob3cgdGhhdCB0cmFuc2xhdGVzIHRvIGRldmljZSBvcGVyYXRpb25zLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQuIExldCdzIHNlZSBob3cgaXQga2lja3Mgb2ZmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mjc0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NToxMS44OTk4MzMxNjFaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2RldmxpbmsvZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEzMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEzMDpcXHRcXHQqcF9jb21wb25lbnQgPSBjb21wb25lbnQ7XFxuMTEzMTpcXHRcXHRyZXR1cm4gMDtcXG4xMTMyOlxcdH1cXG4xMTMzOlxcdFxcbjExMzQ6XFx0aW50IGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4xMTM1OlxcdHtcXG4xMTM2OlxcdFxcdHN0cnVjdCBubGF0dHIgKm5sYV9vdmVyd3JpdGVfbWFzaywgKm5sYV9maWxlX25hbWU7XFxuMTEzNzpcXHRcXHRzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zIHBhcmFtcyA9IHt9O1xcbjExMzg6XFx0XFx0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBkZXZsaW5rX25sX2N0eChpbmZvKS1cXHUwMDNlZGV2bGluaztcXG4xMTM5OlxcdFxcdGNvbnN0IGNoYXIgKmZpbGVfbmFtZTtcXG4xMTQwOlxcdFxcdHUzMiBzdXBwb3J0ZWRfcGFyYW1zO1xcbjExNDE6XFx0XFx0aW50IHJldDtcXG4xMTQyOlxcdFxcbjExNDM6XFx0XFx0aWYgKCFkZXZsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZWZsYXNoX3VwZGF0ZSlcXG4xMTQ0OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTQ1OlxcdFxcbjExNDY6XFx0XFx0aWYgKEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9GSUxFX05BTUUpKVxcbjExNDc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTE0ODpcXHRcXG4xMTQ5OlxcdFxcdHJldCA9IGRldmxpbmtfZmxhc2hfY29tcG9uZW50X2dldChkZXZsaW5rLFxcbjExNTA6XFx0XFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX0NPTVBPTkVOVF0sXFxuMTE1MTpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZwYXJhbXMuY29tcG9uZW50LCBpbmZvLVxcdTAwM2VleHRhY2spO1xcbjExNTI6XFx0XFx0aWYgKHJldClcXG4xMTUzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE1NDpcXHRcXG4xMTU1OlxcdFxcdHN1cHBvcnRlZF9wYXJhbXMgPSBkZXZsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZXN1cHBvcnRlZF9mbGFzaF91cGRhdGVfcGFyYW1zO1xcbjExNTY6XFx0XFxuMTE1NzpcXHRcXHRubGFfb3ZlcndyaXRlX21hc2sgPSBpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX09WRVJXUklURV9NQVNLXTtcXG4xMTU4OlxcdFxcdGlmIChubGFfb3ZlcndyaXRlX21hc2spIHtcXG4xMTU5OlxcdFxcdFxcdHN0cnVjdCBubGFfYml0ZmllbGQzMiBzZWN0aW9ucztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTU6MTEuODk5OTI1OTExWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5MzE3MDE5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEZpcm13YXJlIExvYWRpbmcgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBjaGFuZ2luZyBob3cgZmlybXdhcmUgaXMgbG9hZGVkIGluIHRoZSBgZGV2bGlua2AgZmxhc2ggdXBkYXRlIHBhdGhzLCBzcGVjaWZpY2FsbHkgc3dpdGNoaW5nIGZyb20gYHJlcXVlc3RfZmlybXdhcmUoKWAgdG8gYHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KClgLiBUaGUgZ29hbD8gVG8gYnlwYXNzIHRoZSB1c2VybW9kZSBoZWxwZXIgZmFsbGJhY2sgYW5kIHNpbGVuY2UgdGhvc2Ugbm9pc3kgd2FybmluZ3Mgd2hlbiBhIGZpcm13YXJlIGZpbGUgaXNuJ3QgZm91bmQgcmlnaHQgYXdheS4gTm8gbmVlZCB0byB0cmlnZ2VyIGEgdXNlciBzcGFjZSBldmVudCB3aGVuIHdlIGtub3cgaXQgd29uJ3QgYmUgdGhlcmUuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIG1lbW9yeSBzYWZldHkuIEFtIEkgb3BlbmluZyB1cCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYnkgZG9pbmcgdGhpcz8gTGV0J3MgZGlzc2VjdCBpdC4gRmlyc3Qgb2ZmLCBgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyBwYXJhbXMgPSB7fTtgIGdldHMgemVyby1pbml0aWFsaXplZC4gTmljZS4gYHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0YCBzZXRzIGBwYXJhbXMuZndgICpvbmx5KiBvbiBzdWNjZXNzLiBJZiB0aGVyZSdzIGFuIGVycm9yLCBgcmV0YCBpcyBub24temVybywgYW5kIHdlIGJhaWwgb3V0IGltbWVkaWF0ZWx5LCBuZXZlciB0b3VjaGluZyBgcGFyYW1zLmZ3YC4gVGhlIGZpcm13YXJlIGxvYWRpbmcgaXRzZWxmIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBmaXJtd2FyZSBsb2FkZXIgc3Vic3lzdGVtIGFueXdheS4gTm8gbmV3IGJ1ZmZlcnMgYXJlIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZC4gTm8gcGFkZGluZyBzaGVuYW5pZ2FucyBhcmUgaGFwcGVuaW5nLiBUaGUgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIHJlbWFpbiB1bmNoYW5nZWQuIE5vcGUsIEkgZG9uJ3Qgc2VlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBoZXJlLlxuXG5Ob3csIGxldCdzIGJlIHRob3JvdWdoIGFuZCBjaGVjayBhZ2FpbnN0IHRoZSBLTVNBTiByZXF1aXJlbWVudHMuIFJlbWVtYmVyLCB3ZSBuZWVkIGBOZWVkc0tNU0FOPXRydWVgIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIGZpZWxkcy4gTm90IGhlcmUuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIE5vcGUuXG4zLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgbGF0ZXIgcmVhZC4gTm8gd2F5LlxuNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIE5vcGUsIHRoZSBmaXJtd2FyZSBsb2FkZXIgaGFuZGxlcyB0aGUgYnVmZmVyLCBhbmQgd2UncmUganVzdCBnZXR0aW5nIGEgcG9pbnRlciB0byBpdC5cblxuU2luY2Ugbm9uZSBvZiB0aG9zZSBhcHBseSwgYE5lZWRzS01TQU49ZmFsc2VgLiBXZSdyZSBnb29kLlxuXG5Pa2F5LCBsZXQncyBzdW1tYXJpemUgdGhlIHJlYXNvbmluZyBmb3IgdGhpcyBjaGFuZ2U6XG4xLiBUaGUgcGF0Y2ggc3dpdGNoZXMgdGhlIGZpcm13YXJlIGxvYWRpbmcgaW4gZGV2bGluayBmbGFzaCB1cGRhdGUgcGF0aHMgZnJvbSBgcmVxdWVzdF9maXJtd2FyZSgpYCB0byBgcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoKWAuXG4yLiBNZW1vcnkgaXMgc2FmZS4gVGhlIHBhcmFtcyBhcmUgemVyby1pbml0aWFsaXplZCwgYW5kIHRoZSBmaXJtd2FyZSBwb2ludGVyIGlzIG9ubHkgc2V0IG9uIHN1Y2Nlc3MuIEVycm9yIHBhdGhzIGFyZSBoYW5kbGVkIGdyYWNlZnVsbHkuXG4zLiBObyBLTVNBTiBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBleHBvc2UgaGVhcC9zdGFjayBtZW1vcnkgdG8gdGhlIHVzZXIsIG9yIGV4cG9zZSBwYWRkaW5nLiBTdGFuZGFyZCBkZXRlY3RvcnMgKEtBU0FOKSB3aWxsIGNhdGNoIGFueSBpc3N1ZXMgKGxpa2UgdXNlLWFmdGVyLWZyZWUsIG9yIG51bGwtcG9pbnRlciBkZXJlZmVyZW5jZSkuXG5cbkFscmlnaHQsIEkgdGhpbmsgSSd2ZSBnb3QgYSBzb2xpZCBjYXNlIGhlcmUuIExldCdzIGdldCB0aGlzIG1vdmluZyB3aXRoIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMjgsIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTU6MTkuODMxNjMwNzIzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkZXZsaW5rIGZsYXNoIHVwZGF0ZSBoYW5kbGVycyAoYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgIGFuZCBgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYCkgdG8gdXNlIGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgpYCBpbnN0ZWFkIG9mIGByZXF1ZXN0X2Zpcm13YXJlKClgLCBhdm9pZGluZyB0aGUgZmFsbGJhY2sgdG8gdGhlIHVzZXJtb2RlIGhlbHBlciB3aGVuIHJlcXVlc3RpbmcgZmlybXdhcmUgZmlsZXMuXFxuXFxuQm90aCBjYWxsIHNpdGVzIHplcm8taW5pdGlhbGl6ZSB0aGVpciBzdGFjayBzdHJ1Y3R1cmVzIChgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyBwYXJhbXMgPSB7fTtgKS4gT24gZmFpbHVyZSwgdGhlIHJldHVybiBjb2RlIGlzIGNoZWNrZWQgYW5kIGV4ZWN1dGlvbiBleGl0cyB3aXRob3V0IHJlYWRpbmcgYHBhcmFtcy5md2AuIE9uIHN1Y2Nlc3MsIHRoZSBmaXJtd2FyZSBzdHJ1Y3QgcG9pbnRlciBpcyBzZXQgYnkgdGhlIGZpcm13YXJlIGxvYWRlci4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLCBhbmQgc3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRldmxpbmsgZmxhc2ggdXBkYXRlIGhhbmRsZXJzIChgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgYW5kIGBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVgKSB0byB1c2UgYHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KClgIGluc3RlYWQgb2YgYHJlcXVlc3RfZmlybXdhcmUoKWAsIGF2b2lkaW5nIHRoZSBmYWxsYmFjayB0byB0aGUgdXNlcm1vZGUgaGVscGVyIHdoZW4gcmVxdWVzdGluZyBmaXJtd2FyZSBmaWxlcy5cXG5cXG5Cb3RoIGNhbGwgc2l0ZXMgemVyby1pbml0aWFsaXplIHRoZWlyIHN0YWNrIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zIHBhcmFtcyA9IHt9O2ApLiBPbiBmYWlsdXJlLCB0aGUgcmV0dXJuIGNvZGUgaXMgY2hlY2tlZCBhbmQgZXhlY3V0aW9uIGV4aXRzIHdpdGhvdXQgcmVhZGluZyBgcGFyYW1zLmZ3YC4gT24gc3VjY2VzcywgdGhlIGZpcm13YXJlIHN0cnVjdCBwb2ludGVyIGlzIHNldCBieSB0aGUgZmlybXdhcmUgbG9hZGVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcgZXhwb3N1cmUsIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4sIGFuZCBzdGFuZGFyZCBLQVNBTi90ZXN0aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdx9zd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 04:36:47 +0000 UTC FinishedAt: 2026-09-03 04:55:21 +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": "544d85de4dc22c01badfd8cefa59829ce35c4858", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEVLINK", "NETDEVSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "544d85de4dc22c01badfd8cefa59829ce35c4858", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_DEVLINK", "NETDEVSIM" ], "series_id": "8a63ea0d-f924-496b-a838-57efdd9c07d4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "devlink_nl_flash_update_doit", "devlink_compat_flash_update" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9ERVZMSU5LJiMzNDssCiAgICAmIzM0O05FVERFVlNJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXQmIzM0OywKICAgICYjMzQ7ZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2bGluayBmbGFzaCB1cGRhdGUgaGFuZGxlcnMgKGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBhbmQgYGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZWApIHRvIHVzZSBgcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoKWAgaW5zdGVhZCBvZiBgcmVxdWVzdF9maXJtd2FyZSgpYCwgYXZvaWRpbmcgdGhlIGZhbGxiYWNrIHRvIHRoZSB1c2VybW9kZSBoZWxwZXIgd2hlbiByZXF1ZXN0aW5nIGZpcm13YXJlIGZpbGVzLlxuXG5Cb3RoIGNhbGwgc2l0ZXMgemVyby1pbml0aWFsaXplIHRoZWlyIHN0YWNrIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zIHBhcmFtcyA9IHt9O2ApLiBPbiBmYWlsdXJlLCB0aGUgcmV0dXJuIGNvZGUgaXMgY2hlY2tlZCBhbmQgZXhlY3V0aW9uIGV4aXRzIHdpdGhvdXQgcmVhZGluZyBgcGFyYW1zLmZ3YC4gT24gc3VjY2VzcywgdGhlIGZpcm13YXJlIHN0cnVjdCBwb2ludGVyIGlzIHNldCBieSB0aGUgZmlybXdhcmUgbG9hZGVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcgZXhwb3N1cmUsIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4sIGFuZCBzdGFuZGFyZCBLQVNBTi90ZXN0aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHN3aXRjaGVzIHRoZSBmaXJtd2FyZSByZXF1ZXN0IG1ldGhvZCBpbiBkZXZsaW5rIGZsYXNoIHVwZGF0ZSByb3V0aW5lcyBmcm9tIHJlcXVlc3RfZmlybXdhcmUoKSB0byByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgpLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0bGluayBkZXZsaW5rIGFuZCBldGh0b29sIGZsYXNoIHVwZGF0ZSBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHVzaW5nIG1vY2sgbmV0d29yayBkZXZpY2VzIGxpa2UgbmV0ZGV2c2ltLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2Y4MzgwNDhhMDQ0NjU4ZjRlNmZmNjNjM2E2MzlhMWNmZTdiMjk3M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDQ6NTQ6MDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2RldmxpbmsvZGV2LmMgYi9uZXQvZGV2bGluay9kZXYuY1xuaW5kZXggNTU5NTliMGZmNWFiNC4uYjg1YmIwMmE5ZTgwNyAxMDA2NDRcbi0tLSBhL25ldC9kZXZsaW5rL2Rldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZGV2bGluay9kZXYuY1xuQEAgLTExNjksNyAmIzQzOzExNjksNyBAQCBpbnQgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIFx0bmxhX2ZpbGVfbmFtZSA9IGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9GSUxFX05BTUVdO1xuIFx0ZmlsZV9uYW1lID0gbmxhX2RhdGEobmxhX2ZpbGVfbmFtZSk7XG4tXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFx1MDAyNnBhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLVx1MDAzZWRldik7XG4mIzQzO1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstXHUwMDNlZGV2KTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVx1MDAzZWV4dGFjaywgbmxhX2ZpbGVfbmFtZSxcbiBcdFx0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gbG9jYXRlIHRoZSByZXF1ZXN0ZWQgZmlybXdhcmUgZmlsZVwmIzM0Oyk7XG5AQCAtMTI0NSw3ICYjNDM7MTI0NSw3IEBAIGludCBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSlcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZShcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cdTAwM2VkZXYpO1xuJiM0MztcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFx1MDAyNnBhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLVx1MDAzZWRldik7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0RFVkxJTksmIzM0OywKICAgICYjMzQ7TkVUREVWU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdCYjMzQ7LAogICAgJiMzNDtkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc3dpdGNoZXMgdGhlIGZpcm13YXJlIHJlcXVlc3QgbWV0aG9kIGluIGRldmxpbmsgZmxhc2ggdXBkYXRlIHJvdXRpbmVzIGZyb20gcmVxdWVzdF9maXJtd2FyZSgpIHRvIHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KCkuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXRsaW5rIGRldmxpbmsgYW5kIGV0aHRvb2wgZmxhc2ggdXBkYXRlIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdXNpbmcgbW9jayBuZXR3b3JrIGRldmljZXMgbGlrZSBuZXRkZXZzaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZjgzODA0OGEwNDQ2NThmNGU2ZmY2M2MzYTYzOWExY2ZlN2IyOTczCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwNDo1NDowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2Rldi5jIGIvbmV0L2RldmxpbmsvZGV2LmMKaW5kZXggNTU5NTliMGZmNWFiNC4uYjg1YmIwMmE5ZTgwNyAxMDA2NDQKLS0tIGEvbmV0L2RldmxpbmsvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2RldmxpbmsvZGV2LmMKQEAgLTExNjksNyAmIzQzOzExNjksNyBAQCBpbnQgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCiAJbmxhX2ZpbGVfbmFtZSA9IGluZm8tJmd0O2F0dHJzW0RFVkxJTktfQVRUUl9GTEFTSF9VUERBVEVfRklMRV9OQU1FXTsKIAlmaWxlX25hbWUgPSBubGFfZGF0YShubGFfZmlsZV9uYW1lKTsKLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZhbXA7cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstJmd0O2Rldik7CiYjNDM7CXJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KCZhbXA7cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstJmd0O2Rldik7CiAJaWYgKHJldCkgewogCQlOTF9TRVRfRVJSX01TR19BVFRSKGluZm8tJmd0O2V4dGFjaywgbmxhX2ZpbGVfbmFtZSwKIAkJCQkgICAgJiMzNDtmYWlsZWQgdG8gbG9jYXRlIHRoZSByZXF1ZXN0ZWQgZmlybXdhcmUgZmlsZSYjMzQ7KTsKQEAgLTEyNDUsNyAmIzQzOzEyNDUsNyBAQCBpbnQgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBjb25zdCBjaGFyICpmaWxlX25hbWUpCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZhbXA7cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstJmd0O2Rldik7CiYjNDM7CXJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KCZhbXA7cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstJmd0O2Rldik7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5sb2NrOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgRGV2bGluayBGaXJtd2FyZSBVcGRhdGUqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBUaGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBgbmV0L2RldmxpbmsvZGV2LmNgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWx0ZXJlZCB0aGUgZmlybXdhcmUgcmVxdWVzdCBmdW5jdGlvbnMgd2l0aGluIHRoZSBgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgYW5kIGBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVgIGZ1bmN0aW9ucy4gVGhlIGNvcmUgY2hhbmdlIHNlZW1zIHRvIGJlIHN3YXBwaW5nIGByZXF1ZXN0X2Zpcm13YXJlYCBmb3IgYHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLgoKVG8gcHJvcGVybHkgYXNzZXNzIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvZGV2bGluay9kZXYuY2AuIEkmIzM5O2xsIHVzZSBteSB0b29scyAocHJvYmFibHkgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgKSBhbmQgemVybyBpbiBvbiB0aGUgdmljaW5pdHkgb2YgbGluZXMgMTE2OSBhbmQgMTI0NS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQuIEkmIzM5O20ga2VlbiB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXkmIzM5O3JlIG1ha2luZyB0aGlzIHN3aXRjaC4gSXMgdGhpcyBhYm91dCBpbXByb3ZlZCBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIG9yIGEgZGlmZmVyZW5jZSBpbiB0aGUgd2F5IHRoZSBmaXJtd2FyZSBsb2FkaW5nIGlzIGhhbmRsZWQ/IENvbnRleHQgaXMga2V5IGhlcmUsIEkgbmVlZCB0byBzZWUgaG93IHRoZSBmaXJtd2FyZSByZXF1ZXN0IG1lY2hhbmlzbSBpcyB1c2VkIHdpdGhpbiB0aGUgb3ZlcmFsbCBkZXZsaW5rIGZyYW1ld29yayB0byBmdWxseSBldmFsdWF0ZSB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgdGhhdCBhbGwgdGhlIGNvcnJlY3QgcGFyYW1ldGVycyBhcmUgYmVpbmcgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9kZXZsaW5rL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1MDpcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9DT01QT05FTlRdLFxuMTE1MTpcdFx0XHRcdFx0XHQgIFx1MDAyNnBhcmFtcy5jb21wb25lbnQsIGluZm8tXHUwMDNlZXh0YWNrKTtcbjExNTI6XHRcdGlmIChyZXQpXG4xMTUzOlx0XHRcdHJldHVybiByZXQ7XG4xMTU0Olx0XG4xMTU1Olx0XHRzdXBwb3J0ZWRfcGFyYW1zID0gZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlc3VwcG9ydGVkX2ZsYXNoX3VwZGF0ZV9wYXJhbXM7XG4xMTU2Olx0XG4xMTU3Olx0XHRubGFfb3ZlcndyaXRlX21hc2sgPSBpbmZvLVx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9GTEFTSF9VUERBVEVfT1ZFUldSSVRFX01BU0tdO1xuMTE1ODpcdFx0aWYgKG5sYV9vdmVyd3JpdGVfbWFzaykge1xuMTE1OTpcdFx0XHRzdHJ1Y3QgbmxhX2JpdGZpZWxkMzIgc2VjdGlvbnM7XG4xMTYwOlx0XG4xMTYxOlx0XHRcdGlmICghKHN1cHBvcnRlZF9wYXJhbXMgXHUwMDI2IERFVkxJTktfU1VQUE9SVF9GTEFTSF9VUERBVEVfT1ZFUldSSVRFX01BU0spKSB7XG4xMTYyOlx0XHRcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVx1MDAzZWV4dGFjaywgbmxhX292ZXJ3cml0ZV9tYXNrLFxuMTE2MzpcdFx0XHRcdFx0XHQgICAgXCYjMzQ7b3ZlcndyaXRlIHNldHRpbmdzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlXCYjMzQ7KTtcbjExNjQ6XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xMTY1Olx0XHRcdH1cbjExNjY6XHRcdFx0c2VjdGlvbnMgPSBubGFfZ2V0X2JpdGZpZWxkMzIobmxhX292ZXJ3cml0ZV9tYXNrKTtcbjExNjc6XHRcdFx0cGFyYW1zLm92ZXJ3cml0ZV9tYXNrID0gc2VjdGlvbnMudmFsdWUgXHUwMDI2IHNlY3Rpb25zLnNlbGVjdG9yO1xuMTE2ODpcdFx0fVxuMTE2OTpcdFxuMTE3MDpcdFx0bmxhX2ZpbGVfbmFtZSA9IGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9GSUxFX05BTUVdO1xuMTE3MTpcdFx0ZmlsZV9uYW1lID0gbmxhX2RhdGEobmxhX2ZpbGVfbmFtZSk7XG4xMTcyOlx0XHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cdTAwM2VkZXYpO1xuMTE3MzpcdFx0aWYgKHJldCkge1xuMTE3NDpcdFx0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLCBubGFfZmlsZV9uYW1lLFxuMTE3NTpcdFx0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byBsb2NhdGUgdGhlIHJlcXVlc3RlZCBmaXJtd2FyZSBmaWxlXCYjMzQ7KTtcbjExNzY6XHRcdFx0cmV0dXJuIHJldDtcbjExNzc6XHRcdH1cbjExNzg6XHRcbjExNzk6XHRcdGRldmxpbmtfZmxhc2hfdXBkYXRlX2JlZ2luX25vdGlmeShkZXZsaW5rKTtcbjExODA6XHRcdHJldCA9IGRldmxpbmstXHUwMDNlb3BzLVx1MDAzZWZsYXNoX3VwZGF0ZShkZXZsaW5rLCBcdTAwMjZwYXJhbXMsIGluZm8tXHUwMDNlZXh0YWNrKTtcbjExODE6XHRcdGRldmxpbmtfZmxhc2hfdXBkYXRlX2VuZF9ub3RpZnkoZGV2bGluayk7XG4xMTgyOlx0XG4xMTgzOlx0XHRyZWxlYXNlX2Zpcm13YXJlKHBhcmFtcy5mdyk7XG4xMTg0Olx0XG4xMTg1Olx0XHRyZXR1cm4gcmV0O1xuMTE4NjpcdH1cbjExODc6XHRcbjExODg6XHRzdGF0aWMgdm9pZCBfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbjExODk6XHRcdFx0XHRcdFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4xMTkwOlx0e1xuMTE5MTpcdFx0c3RydWN0IGRldmxpbmtfaW5mb19yZXEgcmVxID0ge307XG4xMTkyOlx0XHRjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGF0dHI7XG4xMTkzOlx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbXNnO1xuMTE5NDpcdFx0aW50IHJlbSwgZXJyO1xuMTE5NTpcdFxuMTE5NjpcdFx0bXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7XG4xMTk3Olx0XHRpZiAoIW1zZylcbjExOTg6XHRcdFx0cmV0dXJuO1xuMTE5OTpcdFxuMTIwMDpcdFx0cmVxLm1zZyA9IG1zZztcbjEyMDE6XHRcdGVyciA9IGRldmxpbmstXHUwMDNlb3BzLVx1MDAzZWluZm9fZ2V0KGRldmxpbmssIFx1MDAyNnJlcSwgTlVMTCk7XG4xMjAyOlx0XHRpZiAoZXJyKVxuMTIwMzpcdFx0XHRnb3RvIGZyZWVfbXNnO1xuMTIwNDpcdFxuMTIwNTpcdFx0bmxhX2Zvcl9lYWNoX2F0dHJfdHlwZShubGF0dHIsIERFVkxJTktfQVRUUl9JTkZPX1ZFUlNJT05fUlVOTklORyxcbjEyMDY6XHRcdFx0XHQgICAgICAgKHZvaWQgKiltc2ctXHUwMDNlZGF0YSwgbXNnLVx1MDAzZWxlbiwgcmVtKSB7XG4xMjA3Olx0XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmt2O1xuMTIwODpcdFx0XHRpbnQgcmVtX2t2O1xuMTIwOTpcdFxuMTIxMDpcdFx0XHRubGFfZm9yX2VhY2hfbmVzdGVkX3R5cGUoa3YsIERFVkxJTktfQVRUUl9JTkZPX1ZFUlNJT05fVkFMVUUsXG4xMjExOlx0XHRcdFx0XHRcdCBubGF0dHIsIHJlbV9rdikge1xuMTIxMjpcdFx0XHRcdHN0cmxjYXQoYnVmLCBubGFfZGF0YShrdiksIGxlbik7XG4xMjEzOlx0XHRcdFx0c3RybGNhdChidWYsIFwmIzM0OyBcJiMzNDssIGxlbik7XG4xMjE0Olx0XHRcdH1cbjEyMTU6XHRcdH1cbjEyMTY6XHRmcmVlX21zZzpcbjEyMTc6XHRcdG5sbXNnX2NvbnN1bWUobXNnKTtcbjEyMTg6XHR9XG4xMjE5Olx0XG4xMjIwOlx0dm9pZCBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4xMjIxOlx0XHRcdFx0XHQgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuMTIyMjpcdHtcbjEyMjM6XHRcdGlmICghZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlaW5mb19nZXQpXG4xMjI0Olx0XHRcdHJldHVybjtcbjEyMjU6XHRcbjEyMjY6XHRcdGRldmxfbG9jayhkZXZsaW5rKTtcbjEyMjc6XHRcdGlmIChkZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXG4xMjI4Olx0XHRcdF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKGRldmxpbmssIGJ1ZiwgbGVuKTtcbjEyMjk6XHRcdGRldmxfdW5sb2NrKGRldmxpbmspO1xuMTIzMDpcdH1cbjEyMzE6XHRcbjEyMzI6XHRpbnQgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBjb25zdCBjaGFyICpmaWxlX25hbWUpXG4xMjMzOlx0e1xuMTIzNDpcdFx0c3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyBwYXJhbXMgPSB7fTtcbjEyMzU6XHRcdGludCByZXQ7XG4xMjM2Olx0XG4xMjM3Olx0XHRkZXZsX2xvY2soZGV2bGluayk7XG4xMjM4Olx0XHRpZiAoIWRldmxfaXNfcmVnaXN0ZXJlZChkZXZsaW5rKSkge1xuMTIzOTpcdFx0XHRyZXQgPSAtRU5PREVWO1xuMTI0MDpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMjQxOlx0XHR9XG4xMjQyOlx0XG4xMjQzOlx0XHRpZiAoIWRldmxpbmstXHUwMDNlb3BzLVx1MDAzZWZsYXNoX3VwZGF0ZSkge1xuMTI0NDpcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbjEyNDU6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTI0NjpcdFx0fVxuMTI0NzpcdFxuMTI0ODpcdFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstXHUwMDNlZGV2KTtcbjEyNDk6XHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI0OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqSW52ZXN0aWdhdGluZyB0aGUgZGV2bGluayBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGBkZXZsaW5rYC4gUmlnaHQsIGl0JiMzOTtzIGEgbmV0bGluayBpbnRlcmZhY2Ugc3BlY2lmaWNhbGx5IGZvciBuZXR3b3JrIGRldmljZXMsIGltcGxlbWVudGVkIHVuZGVyIGVpdGhlciBgTkVUX0RFVkxJTktgIG9yIHRoZSBvdmVyYXJjaGluZyBgTkVUYCBjb25maWcgb3B0aW9ucy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBob3cgaXMgdGhpcyB0aGluZyBhY3R1YWxseSBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgc3RhdHVzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgYG5ldC9kZXZsaW5rL0tjb25maWdgIGRpcmVjdGx5LCBhc3N1bWluZyB0aGF04oCZcyB3aGVyZSB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgZGV2bGlua2Agd291bGQgcmVzaWRlLiBJZiB0aGF0IGNvbWVzIHVwIGVtcHR5LCBvciBwcm92aWRlcyBhbiBpbmNvbXBsZXRlIHBpY3R1cmUsIHRoZW4gSSBuZWVkIHRvIGNvbnNpZGVyIGNoZWNraW5nIHRoZSBtb3JlIGdlbmVyYWwgYG5ldC9LY29uZmlnYCBmaWxlLiBTb21ldGltZXMgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkIGF0IGEgaGlnaGVyIGxldmVsLiBJZiBpdCYjMzk7cyBzdGlsbCB1bmNsZWFyLCBJIHdpbGwgdGhlbiBleHBhbmQgbXkgc2VhcmNoIGFuZCBzY2FuIGBuZXQvTWFrZWZpbGVgLiBJIGFtIHRyeWluZyB0byBkZXRlcm1pbmUgaWYgYGRldmxpbmtgIGlzIGFsd2F5cyBidWlsdCB3aGVuIGBORVRgIG9yIGBORVRfREVWTElOS2AgYXJlIGVuYWJsZWQsIG9yIGlmIGl0IGNhbiBiZSBkaXNhYmxlZCBvciBidWlsdCBhcyBhIG1vZHVsZS4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGJ1aWxkIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmxpbmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMTEyMSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubmV0L01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19CUklER0UpXHRcdCYjNDM7PSBicmlkZ2UvXG5uZXQvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX05FVF9ERVZMSU5LKVx0JiM0Mzs9IGRldmxpbmsvXG5uZXQvTWFrZWZpbGUtMjctb2JqLXlcdFx0XHRcdCYjNDM7PSBkc2EvXG4tLVxubmV0L2NvcmUvZGV2LmMtMTU0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2luZGlyZWN0X2NhbGxfd3JhcHBlci5oXHUwMDNlXG5uZXQvY29yZS9kZXYuYzoxNTU6I2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxubmV0L2NvcmUvZGV2LmMtMTU2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuLS1cbm5ldC9jb3JlL2Rldi5jPTEwMTI4PWludCBkZXZfZ2V0X3BoeXNfcG9ydF9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTAxMzgtXHR9XG5uZXQvY29yZS9kZXYuYzoxMDEzOTpcdHJldHVybiBkZXZsaW5rX2NvbXBhdF9waHlzX3BvcnRfbmFtZV9nZXQoZGV2LCBuYW1lLCBsZW4pO1xubmV0L2NvcmUvZGV2LmMtMTAxNDAtfVxuLS1cbm5ldC9jb3JlL2Rldi5jPTEwMTUyPWludCBuZXRpZl9nZXRfcG9ydF9wYXJlbnRfaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDE2Ni1cbm5ldC9jb3JlL2Rldi5jOjEwMTY3Olx0ZXJyID0gZGV2bGlua19jb21wYXRfc3dpdGNoX2lkX2dldChkZXYsIHBwaWQpO1xubmV0L2NvcmUvZGV2LmMtMTAxNjgtXHRpZiAoIXJlY3Vyc2UgfHwgZXJyICE9IC1FT1BOT1RTVVBQKVxuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTMzLSNpbmNsdWRlIFx1MDAzY25ldC9kcm9wcmVhc29uLmhcdTAwM2Vcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjM0OiNpbmNsdWRlIFx1MDAzY25ldC9kZXZsaW5rLmhcdTAwM2Vcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTM1LVxuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTM3LSNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9uYXBpLmhcdTAwM2Vcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjM4OiNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9kZXZsaW5rLmhcdTAwM2Vcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTM5LVxuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTEwOT1zdHJ1Y3QgbmV0X2RtX2FsZXJ0X29wcyB7XG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMTE3LVx0dm9pZCAoKmh3X3dvcmtfaXRlbV9mdW5jKShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MTE4Olx0dm9pZCAoKmh3X3RyYXBfcHJvYmUpKHZvaWQgKmlnbm9yZSwgY29uc3Qgc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMTktXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjEyMDpcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZGV2bGlua190cmFwX21ldGFkYXRhICptZXRhZGF0YSk7XG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMjEtfTtcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz0xMjM9c3RydWN0IG5ldF9kbV9za2JfY2Ige1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMTI0LVx0dW5pb24ge1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MTI1Olx0XHRzdHJ1Y3QgZGV2bGlua190cmFwX21ldGFkYXRhICpod19tZXRhZGF0YTtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTEyNi1cdFx0dm9pZCAqcGM7XG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9NDM3PXN0YXRpYyB2b2lkXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo0Mzg6bmV0X2RtX2h3X3RyYXBfc3VtbWFyeV9wcm9iZSh2b2lkICppZ25vcmUsIGNvbnN0IHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtNDM5LVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjQ0MDpcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBkZXZsaW5rX3RyYXBfbWV0YWRhdGEgKm1ldGFkYXRhKVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtNDQxLXtcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz03NDI9c3RhdGljIHNpemVfdFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6NzQzOm5ldF9kbV9mbG93X2FjdGlvbl9jb29raWVfc2l6ZShjb25zdCBzdHJ1Y3QgZGV2bGlua190cmFwX21ldGFkYXRhICpod19tZXRhZGF0YSlcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTc0NC17XG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9NzUwPW5ldF9kbV9od19wYWNrZXRfcmVwb3J0X3NpemUoc2l6ZV90IHBheWxvYWRfbGVuLFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6NzUxOlx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqaHdfbWV0YWRhdGEpXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy03NTIte1xuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTc3OD1zdGF0aWMgaW50IG5ldF9kbV9od19wYWNrZXRfcmVwb3J0X2ZpbGwoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy03ODAte1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6NzgxOlx0c3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqaHdfbWV0YWRhdGE7XG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy03ODItXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTg0NS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjg0NjpzdGF0aWMgc3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo4NDc6bmV0X2RtX2h3X21ldGFkYXRhX2NvcHkoY29uc3Qgc3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqbWV0YWRhdGEpXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy04NDgte1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtODQ5LVx0Y29uc3Qgc3RydWN0IGZsb3dfYWN0aW9uX2Nvb2tpZSAqZmFfY29va2llO1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6ODUwOlx0c3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqaHdfbWV0YWRhdGE7XG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy04NTEtXHRjb25zdCBjaGFyICp0cmFwX2dyb3VwX25hbWU7XG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9ODk0PXN0YXRpYyB2b2lkXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo4OTU6bmV0X2RtX2h3X21ldGFkYXRhX2ZyZWUoc3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqaHdfbWV0YWRhdGEpXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy04OTYte1xuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTkwND1zdGF0aWMgdm9pZCBuZXRfZG1faHdfcGFja2V0X3JlcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtOTA1LXtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjkwNjpcdHN0cnVjdCBkZXZsaW5rX3RyYXBfbWV0YWRhdGEgKmh3X21ldGFkYXRhO1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtOTA3LVx0c3RydWN0IHNrX2J1ZmYgKm1zZztcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz05NTg9c3RhdGljIHZvaWRcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjk1OTpuZXRfZG1faHdfdHJhcF9wYWNrZXRfcHJvYmUodm9pZCAqaWdub3JlLCBjb25zdCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTk2MC1cdFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjk2MTpcdFx0XHQgICAgY29uc3Qgc3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqbWV0YWRhdGEpXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy05NjIte1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6OTYzOlx0c3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqbl9od19tZXRhZGF0YTtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTk2NC1cdGt0aW1lX3QgdHN0YW1wID0ga3RpbWVfZ2V0X3JlYWwoKTtcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz0xMDIzPXN0YXRpYyBpbnQgbmV0X2RtX2h3X3Byb2JlX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBuZXRfZG1fYWxlcnRfb3BzICpvcHMpXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMDI0LXtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjEwMjU6XHRyZXR1cm4gcmVnaXN0ZXJfdHJhY2VfZGV2bGlua190cmFwX3JlcG9ydChvcHMtXHUwMDNlaHdfdHJhcF9wcm9iZSwgTlVMTCk7XG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMDI2LX1cbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz0xMDI4PXN0YXRpYyB2b2lkIG5ldF9kbV9od19wcm9iZV91bnJlZ2lzdGVyKGNvbnN0IHN0cnVjdCBuZXRfZG1fYWxlcnRfb3BzICpvcHMpXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMDI5LXtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjEwMzA6XHR1bnJlZ2lzdGVyX3RyYWNlX2RldmxpbmtfdHJhcF9yZXBvcnQob3BzLVx1MDAzZWh3X3RyYXBfcHJvYmUsIE5VTEwpO1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMTAzMS1cdHRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpO1xuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTEwNDQ9c3RhdGljIGludCBuZXRfZG1faHdfbW9uaXRvcl9zdGFydChzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMTA3Mi1cdGlmIChyYykge1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MTA3MzpcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7RmFpbGVkIHRvIGNvbm5lY3QgcHJvYmUgdG8gZGV2bGlua190cmFwX3Byb2JlKCkgdHJhY2Vwb2ludFwmIzM0Oyk7XG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMDc0LVx0XHRnb3RvIGVycl9tb2R1bGVfcHV0O1xuLS1cbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTEwODgtXHRcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcdTAwMjZod19kYXRhLVx1MDAzZWRyb3BfcXVldWUpKSkge1xubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MTA4OTpcdFx0XHRzdHJ1Y3QgZGV2bGlua190cmFwX21ldGFkYXRhICpod19tZXRhZGF0YTtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTEwOTAtXG4tLVxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9MTEwMD1zdGF0aWMgdm9pZCBuZXRfZG1faHdfbW9uaXRvcl9zdG9wKHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMTIyLVx0XHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2aHdfZGF0YS1cdTAwM2Vkcm9wX3F1ZXVlKSkpIHtcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjExMjM6XHRcdFx0c3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqaHdfbWV0YWRhdGE7XG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMTI0LVxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jPTcwMT1zdGF0aWMgdW1vZGVfdCBuZXRkZXZfcGh5c19pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm5ldC9jb3JlL25ldC1zeXNmcy5jLTcxMS1cdFx0aWYgKCFuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZ2V0X3BoeXNfcG9ydF9uYW1lIFx1MDAyNlx1MDAyNlxubmV0L2NvcmUvbmV0LXN5c2ZzLmM6NzEyOlx0XHQgICAgIW5ldGRldi1cdTAwM2VkZXZsaW5rX3BvcnQpXG5uZXQvY29yZS9uZXQtc3lzZnMuYy03MTMtXHRcdFx0cmV0dXJuIDA7XG4tLVxubmV0L2NvcmUvbmV0LXN5c2ZzLmMtNzE1LVx0XHRpZiAoIW5ldGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19nZXRfcG9ydF9wYXJlbnRfaWQgXHUwMDI2XHUwMDI2XG5uZXQvY29yZS9uZXQtc3lzZnMuYzo3MTY6XHRcdCAgICAhbmV0ZGV2LVx1MDAzZWRldmxpbmtfcG9ydClcbm5ldC9jb3JlL25ldC1zeXNmcy5jLTcxNy1cdFx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01Ni0jaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFx1MDAzZVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NTc6I2luY2x1ZGUgXHUwMDNjbmV0L2RldmxpbmsuaFx1MDAzZVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTgtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MTI5Mj1zdGF0aWMgc2l6ZV90IHJ0bmxfcHJvdG9fZG93bl9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTMwMS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjEzMDI6c3RhdGljIHNpemVfdCBydG5sX2RldmxpbmtfcG9ydF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMzAzLXtcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMzA1LVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTMwNjpcdGlmIChkZXYtXHUwMDNlZGV2bGlua19wb3J0KVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTMwNzpcdFx0c2l6ZSAmIzQzOz0gZGV2bGlua19ubF9wb3J0X2hhbmRsZV9zaXplKGRldi1cdTAwM2VkZXZsaW5rX3BvcnQpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTMwOC1cbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0xMzM2PXN0YXRpYyBub2lubGluZSBzaXplX3QgaWZfbmxtc2dfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTEzOTUtXHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoTUFYX0FERFJfTEVOKSAvKiBJRkxBX1BFUk1fQUREUkVTUyAqL1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTM5NjpcdCAgICAgICAmIzQzOyBydG5sX2RldmxpbmtfcG9ydF9zaXplKGRldilcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEzOTctXHQgICAgICAgJiM0MzsgcnRubF9kcGxsX3Bpbl9zaXplKClcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0yMDM1PXN0YXRpYyBpbnQgcnRubF9maWxsX3Byb3RvX2Rvd24oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMDYzLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjA2NDpzdGF0aWMgaW50IHJ0bmxfZmlsbF9kZXZsaW5rX3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwNjUtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMDY2LXtcbm5ldC9jb3JlL3J0bmV0bGluay5jOjIwNjc6XHRzdHJ1Y3QgbmxhdHRyICpkZXZsaW5rX3BvcnRfbmVzdDtcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwNjgtXHRpbnQgcmV0O1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA2OS1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjIwNzA6XHRkZXZsaW5rX3BvcnRfbmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9ERVZMSU5LX1BPUlQpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjA3MTpcdGlmICghZGV2bGlua19wb3J0X25lc3QpXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMDcyLVx0XHRyZXR1cm4gLUVNU0dTSVpFO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA3My1cbm5ldC9jb3JlL3J0bmV0bGluay5jOjIwNzQ6XHRpZiAoZGV2LVx1MDAzZWRldmxpbmtfcG9ydCkge1xubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjA3NTpcdFx0cmV0ID0gZGV2bGlua19ubF9wb3J0X2hhbmRsZV9maWxsKHNrYiwgZGV2LVx1MDAzZWRldmxpbmtfcG9ydCk7XG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMDc2LVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwNzktXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMDgwOlx0bmxhX25lc3RfZW5kKHNrYiwgZGV2bGlua19wb3J0X25lc3QpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA4MS1cdHJldHVybiAwO1xuLS1cbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwODMtbmVzdF9jYW5jZWw6XG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMDg0Olx0bmxhX25lc3RfY2FuY2VsKHNrYiwgZGV2bGlua19wb3J0X25lc3QpO1xubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA4NS1cdHJldHVybiByZXQ7XG4tLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM9MjExMD1zdGF0aWMgaW50IHJ0bmxfZmlsbF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMjcyLVxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjI3MzpcdGlmIChydG5sX2ZpbGxfZGV2bGlua19wb3J0KHNrYiwgZGV2KSlcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIyNzQtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy04LSNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xubmV0L2RldmxpbmsvY29yZS5jOjk6I2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2RldmxpbmsuaFx1MDAzZVxubmV0L2RldmxpbmsvY29yZS5jLTEwLVxuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy0xMi1cbm5ldC9kZXZsaW5rL2NvcmUuYzoxMzpFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKGRldmxpbmtfaHdtc2cpO1xubmV0L2RldmxpbmsvY29yZS5jOjE0OkVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoZGV2bGlua19od2Vycik7XG5uZXQvZGV2bGluay9jb3JlLmM6MTU6RVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTChkZXZsaW5rX3RyYXBfcmVwb3J0KTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0xNi1cbm5ldC9kZXZsaW5rL2NvcmUuYzoxNzpERUZJTkVfWEFSUkFZX0ZMQUdTKGRldmxpbmtzLCBYQV9GTEFHU19BTExPQyk7XG5uZXQvZGV2bGluay9jb3JlLmMtMTgtXG5uZXQvZGV2bGluay9jb3JlLmM6MTk6c3RhdGljIHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rc194YV9nZXQodW5zaWduZWQgbG9uZyBpbmRleClcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMC17XG5uZXQvZGV2bGluay9jb3JlLmM6MjE6XHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluaztcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMi1cbm5ldC9kZXZsaW5rL2NvcmUuYy0yMy1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNDpcdGRldmxpbmsgPSB4YV9maW5kKFx1MDAyNmRldmxpbmtzLCBcdTAwMjZpbmRleCwgaW5kZXgsIERFVkxJTktfUkVHSVNURVJFRCk7XG5uZXQvZGV2bGluay9jb3JlLmM6MjU6XHRpZiAoIWRldmxpbmsgfHwgIWRldmxpbmtfdHJ5X2dldChkZXZsaW5rKSlcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNjpcdFx0ZGV2bGluayA9IE5VTEw7XG5uZXQvZGV2bGluay9jb3JlLmMtMjctXHRyY3VfcmVhZF91bmxvY2soKTtcbm5ldC9kZXZsaW5rL2NvcmUuYzoyODpcdHJldHVybiBkZXZsaW5rO1xubmV0L2RldmxpbmsvY29yZS5jLTI5LX1cbm5ldC9kZXZsaW5rL2NvcmUuYy0zMC1cbm5ldC9kZXZsaW5rL2NvcmUuYzozMTovKiBkZXZsaW5rX3JlbHMgeGFycmF5IGNvbnRhaW5zIDE6MSByZWxhdGlvbnNoaXBzIGJldHdlZW5cbm5ldC9kZXZsaW5rL2NvcmUuYzozMjogKiBkZXZsaW5rIG9iamVjdCBhbmQgcmVsYXRlZCBuZXN0ZWQgZGV2bGluayBpbnN0YW5jZS5cbm5ldC9kZXZsaW5rL2NvcmUuYy0zMy0gKiBUaGUgeGFycmF5IGluZGV4IGlzIHVzZWQgdG8gZ2V0IHRoZSBuZXN0ZWQgb2JqZWN0IGZyb21cbi0tXG5uZXQvZGV2bGluay9jb3JlLmMtMzUtICovXG5uZXQvZGV2bGluay9jb3JlLmM6MzY6c3RhdGljIERFRklORV9YQVJSQVlfRkxBR1MoZGV2bGlua19yZWxzLCBYQV9GTEFHU19BTExPQzEpO1xubmV0L2RldmxpbmsvY29yZS5jLTM3LVxuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy0zOS1cbm5ldC9kZXZsaW5rL2NvcmUuYzo0MDpzdHJ1Y3QgZGV2bGlua19yZWwge1xubmV0L2RldmxpbmsvY29yZS5jLTQxLVx0dTMyIGluZGV4O1xubmV0L2RldmxpbmsvY29yZS5jLTQyLVx0cmVmY291bnRfdCByZWZjb3VudDtcbm5ldC9kZXZsaW5rL2NvcmUuYzo0MzpcdHUzMiBkZXZsaW5rX2luZGV4O1xubmV0L2RldmxpbmsvY29yZS5jLTQ0LVx0c3RydWN0IHtcbm5ldC9kZXZsaW5rL2NvcmUuYzo0NTpcdFx0dTMyIGRldmxpbmtfaW5kZXg7XG5uZXQvZGV2bGluay9jb3JlLmMtNDYtXHRcdHUzMiBvYmpfaW5kZXg7XG5uZXQvZGV2bGluay9jb3JlLmM6NDc6XHRcdGRldmxpbmtfcmVsX25vdGlmeV9jYl90ICpub3RpZnlfY2I7XG5uZXQvZGV2bGluay9jb3JlLmM6NDg6XHRcdGRldmxpbmtfcmVsX2NsZWFudXBfY2JfdCAqY2xlYW51cF9jYjtcbm5ldC9kZXZsaW5rL2NvcmUuYy00OS1cdFx0c3RydWN0IGRlbGF5ZWRfd29yayBub3RpZnlfd29yaztcbi0tXG5uZXQvZGV2bGluay9jb3JlLmMtNTItXG5uZXQvZGV2bGluay9jb3JlLmM6NTM6c3RhdGljIHZvaWQgZGV2bGlua19yZWxfZnJlZShzdHJ1Y3QgZGV2bGlua19yZWwgKnJlbClcbm5ldC9kZXZsaW5rL2NvcmUuYy01NC17XG5uZXQvZGV2bGluay9jb3JlLmM6NTU6XHR4YV9lcmFzZShcdTAwMjZkZXZsaW5rX3JlbHMsIHJlbC1cdTAwM2VpbmRleCk7XG5uZXQvZGV2bGluay9jb3JlLmMtNTYtXHRrZnJlZShyZWwpO1xuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy01OC1cbm5ldC9kZXZsaW5rL2NvcmUuYzo1OTpzdGF0aWMgdm9pZCBfX2RldmxpbmtfcmVsX2dldChzdHJ1Y3QgZGV2bGlua19yZWwgKnJlbClcbm5ldC9kZXZsaW5rL2NvcmUuYy02MC17XG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTYzLVxubmV0L2RldmxpbmsvY29yZS5jOjY0OnN0YXRpYyB2b2lkIF9fZGV2bGlua19yZWxfcHV0KHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsKVxubmV0L2RldmxpbmsvY29yZS5jLTY1LXtcbm5ldC9kZXZsaW5rL2NvcmUuYy02Ni1cdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cmVsLVx1MDAzZXJlZmNvdW50KSlcbm5ldC9kZXZsaW5rL2NvcmUuYzo2NzpcdFx0ZGV2bGlua19yZWxfZnJlZShyZWwpO1xubmV0L2RldmxpbmsvY29yZS5jLTY4LX1cbm5ldC9kZXZsaW5rL2NvcmUuYy02OS1cbm5ldC9kZXZsaW5rL2NvcmUuYzo3MDpzdHJ1Y3QgZGV2bGluayAqX19tdXN0X2NoZWNrIGRldmxpbmtfbmVzdGVkX2luX2dldF9sb2NrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxubmV0L2RldmxpbmsvY29yZS5jLTcxLXtcbm5ldC9kZXZsaW5rL2NvcmUuYzo3MjpcdGRldmxfYXNzZXJ0X2xvY2tlZChkZXZsaW5rKTtcbm5ldC9kZXZsaW5rL2NvcmUuYzo3MzpcdGlmICghZGV2bGluay1cdTAwM2VyZWwpXG5uZXQvZGV2bGluay9jb3JlLmMtNzQtXHRcdHJldHVybiBOVUxMO1xubmV0L2RldmxpbmsvY29yZS5jOjc1Olx0ZGV2bGluayA9IGRldmxpbmtzX3hhX2dldChkZXZsaW5rLVx1MDAzZXJlbC1cdTAwM2VuZXN0ZWRfaW4uZGV2bGlua19pbmRleCk7XG5uZXQvZGV2bGluay9jb3JlLmM6NzY6XHRpZiAoIWRldmxpbmspXG5uZXQvZGV2bGluay9jb3JlLmMtNzctXHRcdHJldHVybiBOVUxMO1xubmV0L2RldmxpbmsvY29yZS5jOjc4Olx0ZGV2bF9sb2NrKGRldmxpbmspO1xubmV0L2RldmxpbmsvY29yZS5jOjc5Olx0aWYgKGRldmxfaXNfcmVnaXN0ZXJlZChkZXZsaW5rKSlcbm5ldC9kZXZsaW5rL2NvcmUuYzo4MDpcdFx0cmV0dXJuIGRldmxpbms7XG5uZXQvZGV2bGluay9jb3JlLmM6ODE6XHRkZXZsX3VubG9jayhkZXZsaW5rKTtcbm5ldC9kZXZsaW5rL2NvcmUuYzo4MjpcdGRldmxpbmtfcHV0KGRldmxpbmspO1xubmV0L2RldmxpbmsvY29yZS5jLTgzLVx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTg1LVxubmV0L2RldmxpbmsvY29yZS5jOjg2OnN0YXRpYyB2b2lkIGRldmxpbmtfcmVsX25lc3RlZF9pbl9ub3RpZnlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvZGV2bGluay9jb3JlLmMtODcte1xubmV0L2RldmxpbmsvY29yZS5jOjg4Olx0c3RydWN0IGRldmxpbmtfcmVsICpyZWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRldmxpbmtfcmVsLFxubmV0L2RldmxpbmsvY29yZS5jLTg5LVx0XHRcdFx0XHQgICAgICAgbmVzdGVkX2luLm5vdGlmeV93b3JrLndvcmspO1xubmV0L2RldmxpbmsvY29yZS5jOjkwOlx0c3RydWN0IGRldmxpbmsgKmRldmxpbms7XG5uZXQvZGV2bGluay9jb3JlLmMtOTEtXG5uZXQvZGV2bGluay9jb3JlLmM6OTI6XHRkZXZsaW5rID0gZGV2bGlua3NfeGFfZ2V0KHJlbC1cdTAwM2VuZXN0ZWRfaW4uZGV2bGlua19pbmRleCk7XG5uZXQvZGV2bGluay9jb3JlLmM6OTM6XHRpZiAoIWRldmxpbmspXG5uZXQvZGV2bGluay9jb3JlLmMtOTQtXHRcdGdvdG8gcmVsX3B1dDtcbm5ldC9kZXZsaW5rL2NvcmUuYzo5NTpcdGlmICghZGV2bF90cnlsb2NrKGRldmxpbmspKSB7XG5uZXQvZGV2bGluay9jb3JlLmM6OTY6XHRcdGRldmxpbmtfcHV0KGRldmxpbmspO1xubmV0L2RldmxpbmsvY29yZS5jLTk3LVx0XHRnb3RvIHJlc2NoZWR1bGVfd29yaztcbm5ldC9kZXZsaW5rL2NvcmUuYy05OC1cdH1cbm5ldC9kZXZsaW5rL2NvcmUuYzo5OTpcdGlmICghZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspKSB7XG5uZXQvZGV2bGluay9jb3JlLmM6MTAwOlx0XHRkZXZsX3VubG9jayhkZXZsaW5rKTtcbm5ldC9kZXZsaW5rL2NvcmUuYzoxMDE6XHRcdGRldmxpbmtfcHV0KGRldmxpbmspO1xubmV0L2RldmxpbmsvY29yZS5jLTEwMi1cdFx0Z290byByZWxfcHV0O1xubmV0L2RldmxpbmsvY29yZS5jLTEwMy1cdH1cbm5ldC9kZXZsaW5rL2NvcmUuYzoxMDQ6XHRpZiAoIXhhX2dldF9tYXJrKFx1MDAyNmRldmxpbmtfcmVscywgcmVsLVx1MDAzZWluZGV4LCBERVZMSU5LX1JFTF9JTl9VU0UpKVxubmV0L2RldmxpbmsvY29yZS5jOjEwNTpcdFx0cmVsLVx1MDAzZW5lc3RlZF9pbi5jbGVhbnVwX2NiKGRldmxpbmssIHJlbC1cdTAwM2VuZXN0ZWRfaW4ub2JqX2luZGV4LCByZWwtXHUwMDNlaW5kZXgpO1xubmV0L2RldmxpbmsvY29yZS5jOjEwNjpcdHJlbC1cdTAwM2VuZXN0ZWRfaW4ubm90aWZ5X2NiKGRldmxpbmssIHJlbC1cdTAwM2VuZXN0ZWRfaW4ub2JqX2luZGV4KTtcbm5ldC9kZXZsaW5rL2NvcmUuYzoxMDc6XHRkZXZsX3VubG9jayhkZXZsaW5rKTtcbm5ldC9kZXZsaW5rL2NvcmUuYzoxMDg6XHRkZXZsaW5rX3B1dChkZXZsaW5rKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMDktXG5uZXQvZGV2bGluay9jb3JlLmMtMTEwLXJlbF9wdXQ6XG5uZXQvZGV2bGluay9jb3JlLmM6MTExOlx0X19kZXZsaW5rX3JlbF9wdXQocmVsKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMTItXHRyZXR1cm47XG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTExNy1cbm5ldC9kZXZsaW5rL2NvcmUuYzoxMTg6c3RhdGljIHZvaWQgZGV2bGlua19yZWxfbmVzdGVkX2luX25vdGlmeV93b3JrX3NjaGVkdWxlKHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsKVxubmV0L2RldmxpbmsvY29yZS5jLTExOS17XG5uZXQvZGV2bGluay9jb3JlLmM6MTIwOlx0X19kZXZsaW5rX3JlbF9nZXQocmVsKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMjEtXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2cmVsLVx1MDAzZW5lc3RlZF9pbi5ub3RpZnlfd29yaywgMCk7XG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTEyMy1cbm5ldC9kZXZsaW5rL2NvcmUuYzoxMjQ6c3RhdGljIHN0cnVjdCBkZXZsaW5rX3JlbCAqZGV2bGlua19yZWxfYWxsb2Modm9pZClcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMjUte1xubmV0L2RldmxpbmsvY29yZS5jOjEyNjpcdHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsO1xubmV0L2RldmxpbmsvY29yZS5jLTEyNy1cdHN0YXRpYyB1MzIgbmV4dDtcbi0tXG5uZXQvZGV2bGluay9jb3JlLmMtMTMzLVxubmV0L2RldmxpbmsvY29yZS5jOjEzNDpcdGVyciA9IHhhX2FsbG9jX2N5Y2xpYyhcdTAwMjZkZXZsaW5rX3JlbHMsIFx1MDAyNnJlbC1cdTAwM2VpbmRleCwgcmVsLFxubmV0L2RldmxpbmsvY29yZS5jLTEzNS1cdFx0XHQgICAgICB4YV9saW1pdF8zMmIsIFx1MDAyNm5leHQsIEdGUF9LRVJORUwpO1xuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy0xNDItXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZyZWwtXHUwMDNlbmVzdGVkX2luLm5vdGlmeV93b3JrLFxubmV0L2RldmxpbmsvY29yZS5jOjE0MzpcdFx0XHQgIFx1MDAyNmRldmxpbmtfcmVsX25lc3RlZF9pbl9ub3RpZnlfd29yayk7XG5uZXQvZGV2bGluay9jb3JlLmMtMTQ0LVx0cmV0dXJuIHJlbDtcbi0tXG5uZXQvZGV2bGluay9jb3JlLmMtMTQ2LVxubmV0L2RldmxpbmsvY29yZS5jOjE0NzpzdGF0aWMgdm9pZCBkZXZsaW5rX3JlbF9wdXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmspXG5uZXQvZGV2bGluay9jb3JlLmMtMTQ4LXtcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNDk6XHRzdHJ1Y3QgZGV2bGlua19yZWwgKnJlbCA9IGRldmxpbmstXHUwMDNlcmVsO1xubmV0L2RldmxpbmsvY29yZS5jLTE1MC1cbi0tXG5uZXQvZGV2bGluay9jb3JlLmMtMTUyLVx0XHRyZXR1cm47XG5uZXQvZGV2bGluay9jb3JlLmM6MTUzOlx0eGFfY2xlYXJfbWFyayhcdTAwMjZkZXZsaW5rX3JlbHMsIHJlbC1cdTAwM2VpbmRleCwgREVWTElOS19SRUxfSU5fVVNFKTtcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNTQ6XHRkZXZsaW5rX3JlbF9uZXN0ZWRfaW5fbm90aWZ5X3dvcmtfc2NoZWR1bGUocmVsKTtcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNTU6XHRfX2RldmxpbmtfcmVsX3B1dChyZWwpO1xubmV0L2RldmxpbmsvY29yZS5jOjE1NjpcdGRldmxpbmstXHUwMDNlcmVsID0gTlVMTDtcbm5ldC9kZXZsaW5rL2NvcmUuYy0xNTctfVxubmV0L2RldmxpbmsvY29yZS5jLTE1OC1cbm5ldC9kZXZsaW5rL2NvcmUuYzoxNTk6dm9pZCBkZXZsaW5rX3JlbF9uZXN0ZWRfaW5fY2xlYXIodTMyIHJlbF9pbmRleClcbm5ldC9kZXZsaW5rL2NvcmUuYy0xNjAte1xubmV0L2RldmxpbmsvY29yZS5jOjE2MTpcdHhhX2NsZWFyX21hcmsoXHUwMDI2ZGV2bGlua19yZWxzLCByZWxfaW5kZXgsIERFVkxJTktfUkVMX0lOX1VTRSk7XG5uZXQvZGV2bGluay9jb3JlLmMtMTYyLX1cbm5ldC9kZXZsaW5rL2NvcmUuYy0xNjMtXG5uZXQvZGV2bGluay9jb3JlLmM6MTY0OmludCBkZXZsaW5rX3JlbF9uZXN0ZWRfaW5fYWRkKHUzMiAqcmVsX2luZGV4LCB1MzIgZGV2bGlua19pbmRleCxcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNjU6XHRcdFx0ICAgICAgdTMyIG9ial9pbmRleCwgZGV2bGlua19yZWxfbm90aWZ5X2NiX3QgKm5vdGlmeV9jYixcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNjY6XHRcdFx0ICAgICAgZGV2bGlua19yZWxfY2xlYW51cF9jYl90ICpjbGVhbnVwX2NiLFxubmV0L2RldmxpbmsvY29yZS5jOjE2NzpcdFx0XHQgICAgICBzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0xNjgte1xubmV0L2RldmxpbmsvY29yZS5jOjE2OTpcdHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsID0gZGV2bGlua19yZWxfYWxsb2MoKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0xNzAtXG5uZXQvZGV2bGluay9jb3JlLmM6MTcxOlx0QVNTRVJUX0RFVkxJTktfTk9UX1JFR0lTVEVSRUQoZGV2bGluayk7XG5uZXQvZGV2bGluay9jb3JlLmMtMTcyLVxuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy0xNzUtXG5uZXQvZGV2bGluay9jb3JlLmM6MTc2Olx0cmVsLVx1MDAzZWRldmxpbmtfaW5kZXggPSBkZXZsaW5rLVx1MDAzZWluZGV4O1xubmV0L2RldmxpbmsvY29yZS5jOjE3NzpcdHJlbC1cdTAwM2VuZXN0ZWRfaW4uZGV2bGlua19pbmRleCA9IGRldmxpbmtfaW5kZXg7XG5uZXQvZGV2bGluay9jb3JlLmMtMTc4LVx0cmVsLVx1MDAzZW5lc3RlZF9pbi5vYmpfaW5kZXggPSBvYmpfaW5kZXg7XG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTE4MS1cdCpyZWxfaW5kZXggPSByZWwtXHUwMDNlaW5kZXg7XG5uZXQvZGV2bGluay9jb3JlLmM6MTgyOlx0eGFfc2V0X21hcmsoXHUwMDI2ZGV2bGlua19yZWxzLCByZWwtXHUwMDNlaW5kZXgsIERFVkxJTktfUkVMX0lOX1VTRSk7XG5uZXQvZGV2bGluay9jb3JlLmM6MTgzOlx0ZGV2bGluay1cdTAwM2VyZWwgPSByZWw7XG5uZXQvZGV2bGluay9jb3JlLmMtMTg0LVx0cmV0dXJuIDA7XG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTE4Ny0vKipcbm5ldC9kZXZsaW5rL2NvcmUuYzoxODg6ICogZGV2bGlua19yZWxfbmVzdGVkX2luX25vdGlmeSAtIE5vdGlmeSB0aGUgb2JqZWN0IHRoaXMgZGV2bGlua1xubmV0L2RldmxpbmsvY29yZS5jLTE4OS0gKlx0XHRcdFx0ICBpbnN0YW5jZSBpcyBuZXN0ZWQgaW4uXG5uZXQvZGV2bGluay9jb3JlLmM6MTkwOiAqIEBkZXZsaW5rOiBkZXZsaW5rXG5uZXQvZGV2bGluay9jb3JlLmMtMTkxLSAqXG5uZXQvZGV2bGluay9jb3JlLmM6MTkyOiAqIFRoaXMgaXMgY2FsbGVkIHVwb24gbmV0d29yayBuYW1lc3BhY2UgY2hhbmdlIG9mIGRldmxpbmsgaW5zdGFuY2UuXG5uZXQvZGV2bGluay9jb3JlLmM6MTkzOiAqIEluIGNhc2UgdGhpcyBkZXZsaW5rIGluc3RhbmNlIGlzIG5lc3RlZCBpbiBhbm90aGVyIGRldmxpbmsgb2JqZWN0LFxubmV0L2RldmxpbmsvY29yZS5jLTE5NC0gKiBhIG5vdGlmaWNhdGlvbiBvZiBhIGNoYW5nZSBvZiB0aGlzIG9iamVjdCBzaG91bGQgYmUgc2VudFxubmV0L2RldmxpbmsvY29yZS5jOjE5NTogKiBvdmVyIG5ldGxpbmsuIFRoZSBwYXJlbnQgZGV2bGluayBpbnN0YW5jZSBsb2NrIG5lZWRzIHRvIGJlXG5uZXQvZGV2bGluay9jb3JlLmMtMTk2LSAqIHRha2VuIGR1cmluZyB0aGUgbm90aWZpY2F0aW9uIHByZXBhcmF0aW9uLlxuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy0xOTgtICovXG5uZXQvZGV2bGluay9jb3JlLmM6MTk5OnZvaWQgZGV2bGlua19yZWxfbmVzdGVkX2luX25vdGlmeShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMDAte1xubmV0L2RldmxpbmsvY29yZS5jOjIwMTpcdHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsID0gZGV2bGluay1cdTAwM2VyZWw7XG5uZXQvZGV2bGluay9jb3JlLmMtMjAyLVxuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy0yMDQtXHRcdHJldHVybjtcbm5ldC9kZXZsaW5rL2NvcmUuYzoyMDU6XHRkZXZsaW5rX3JlbF9uZXN0ZWRfaW5fbm90aWZ5X3dvcmtfc2NoZWR1bGUocmVsKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMDYtfVxubmV0L2RldmxpbmsvY29yZS5jLTIwNy1cbm5ldC9kZXZsaW5rL2NvcmUuYzoyMDg6c3RhdGljIHN0cnVjdCBkZXZsaW5rX3JlbCAqZGV2bGlua19yZWxfZmluZCh1bnNpZ25lZCBsb25nIHJlbF9pbmRleClcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMDkte1xubmV0L2RldmxpbmsvY29yZS5jOjIxMDpcdHJldHVybiB4YV9maW5kKFx1MDAyNmRldmxpbmtfcmVscywgXHUwMDI2cmVsX2luZGV4LCByZWxfaW5kZXgsXG5uZXQvZGV2bGluay9jb3JlLmMtMjExLVx0XHQgICAgICAgREVWTElOS19SRUxfSU5fVVNFKTtcbi0tXG5uZXQvZGV2bGluay9jb3JlLmMtMjEzLVxubmV0L2RldmxpbmsvY29yZS5jOjIxNDpzdGF0aWMgc3RydWN0IGRldmxpbmsgKmRldmxpbmtfcmVsX2RldmxpbmtfZ2V0KHUzMiByZWxfaW5kZXgpXG5uZXQvZGV2bGluay9jb3JlLmMtMjE1LXtcbm5ldC9kZXZsaW5rL2NvcmUuYzoyMTY6XHRzdHJ1Y3QgZGV2bGlua19yZWwgKnJlbDtcbm5ldC9kZXZsaW5rL2NvcmUuYzoyMTc6XHR1MzIgZGV2bGlua19pbmRleDtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMTgtXG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTIyMC1cdFx0cmV0dXJuIE5VTEw7XG5uZXQvZGV2bGluay9jb3JlLmM6MjIxOlx0eGFfbG9jayhcdTAwMjZkZXZsaW5rX3JlbHMpO1xubmV0L2RldmxpbmsvY29yZS5jOjIyMjpcdHJlbCA9IGRldmxpbmtfcmVsX2ZpbmQocmVsX2luZGV4KTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMjMtXHRpZiAocmVsKVxubmV0L2RldmxpbmsvY29yZS5jOjIyNDpcdFx0ZGV2bGlua19pbmRleCA9IHJlbC1cdTAwM2VkZXZsaW5rX2luZGV4O1xubmV0L2RldmxpbmsvY29yZS5jOjIyNTpcdHhhX3VubG9jayhcdTAwMjZkZXZsaW5rX3JlbHMpO1xubmV0L2RldmxpbmsvY29yZS5jLTIyNi1cdGlmICghcmVsKVxubmV0L2RldmxpbmsvY29yZS5jLTIyNy1cdFx0cmV0dXJuIE5VTEw7XG5uZXQvZGV2bGluay9jb3JlLmM6MjI4Olx0cmV0dXJuIGRldmxpbmtzX3hhX2dldChkZXZsaW5rX2luZGV4KTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMjktfVxubmV0L2RldmxpbmsvY29yZS5jLTIzMC1cbm5ldC9kZXZsaW5rL2NvcmUuYzoyMzE6aW50IGRldmxpbmtfcmVsX2RldmxpbmtfaGFuZGxlX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMzItXHRcdFx0XHQgICB1MzIgcmVsX2luZGV4LCBpbnQgYXR0cnR5cGUsXG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTIzNC17XG5uZXQvZGV2bGluay9jb3JlLmM6MjM1Olx0c3RydWN0IG5ldCAqbmV0ID0gZGV2bGlua19uZXQoZGV2bGluayk7XG5uZXQvZGV2bGluay9jb3JlLmM6MjM2Olx0c3RydWN0IGRldmxpbmsgKnJlbF9kZXZsaW5rO1xubmV0L2RldmxpbmsvY29yZS5jLTIzNy1cdGludCBlcnI7XG5uZXQvZGV2bGluay9jb3JlLmMtMjM4LVxubmV0L2RldmxpbmsvY29yZS5jOjIzOTpcdHJlbF9kZXZsaW5rID0gZGV2bGlua19yZWxfZGV2bGlua19nZXQocmVsX2luZGV4KTtcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNDA6XHRpZiAoIXJlbF9kZXZsaW5rKVxubmV0L2RldmxpbmsvY29yZS5jLTI0MS1cdFx0cmV0dXJuIDA7XG5uZXQvZGV2bGluay9jb3JlLmM6MjQyOlx0ZXJyID0gZGV2bGlua19ubF9wdXRfbmVzdGVkX2hhbmRsZShtc2csIG5ldCwgcmVsX2RldmxpbmssIGF0dHJ0eXBlKTtcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNDM6XHRkZXZsaW5rX3B1dChyZWxfZGV2bGluayk7XG5uZXQvZGV2bGluay9jb3JlLmMtMjQ0LVx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IG1zZ191cGRhdGVkKVxuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy0yNDgtXG5uZXQvZGV2bGluay9jb3JlLmM6MjQ5OnZvaWQgKmRldmxpbmtfcHJpdihzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNTAte1xubmV0L2RldmxpbmsvY29yZS5jOjI1MTpcdHJldHVybiBcdTAwMjZkZXZsaW5rLVx1MDAzZXByaXY7XG5uZXQvZGV2bGluay9jb3JlLmMtMjUyLX1cbm5ldC9kZXZsaW5rL2NvcmUuYzoyNTM6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bGlua19wcml2KTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNTQtXG5uZXQvZGV2bGluay9jb3JlLmM6MjU1OnN0cnVjdCBkZXZsaW5rICpwcml2X3RvX2Rldmxpbmsodm9pZCAqcHJpdilcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNTYte1xubmV0L2RldmxpbmsvY29yZS5jOjI1NzpcdHJldHVybiBjb250YWluZXJfb2YocHJpdiwgc3RydWN0IGRldmxpbmssIHByaXYpO1xubmV0L2RldmxpbmsvY29yZS5jLTI1OC19XG5uZXQvZGV2bGluay9jb3JlLmM6MjU5OkVYUE9SVF9TWU1CT0xfR1BMKHByaXZfdG9fZGV2bGluayk7XG5uZXQvZGV2bGluay9jb3JlLmMtMjYwLVxubmV0L2RldmxpbmsvY29yZS5jOjI2MTpzdHJ1Y3QgZGV2aWNlICpkZXZsaW5rX3RvX2Rldihjb25zdCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNjIte1xubmV0L2RldmxpbmsvY29yZS5jOjI2MzpcdHJldHVybiBkZXZsaW5rLVx1MDAzZWRldjtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNjQtfVxubmV0L2RldmxpbmsvY29yZS5jOjI2NTpFWFBPUlRfU1lNQk9MX0dQTChkZXZsaW5rX3RvX2Rldik7XG5uZXQvZGV2bGluay9jb3JlLmMtMjY2LVxubmV0L2RldmxpbmsvY29yZS5jOjI2Nzpjb25zdCBjaGFyICpkZXZsaW5rX2J1c19uYW1lKGNvbnN0IHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxubmV0L2RldmxpbmsvY29yZS5jLTI2OC17XG5uZXQvZGV2bGluay9jb3JlLmM6MjY5Olx0cmV0dXJuIGRldmxpbmstXHUwMDNlZGV2ID8gZGV2bGluay1cdTAwM2VkZXYtXHUwMDNlYnVzLVx1MDAzZW5hbWUgOiBERVZMSU5LX0lOREVYX0JVU19OQU1FO1xubmV0L2RldmxpbmsvY29yZS5jLTI3MC19XG5uZXQvZGV2bGluay9jb3JlLmM6MjcxOkVYUE9SVF9TWU1CT0xfR1BMKGRldmxpbmtfYnVzX25hbWUpO1xubmV0L2RldmxpbmsvY29yZS5jLTI3Mi1cbm5ldC9kZXZsaW5rL2NvcmUuYzoyNzM6Y29uc3QgY2hhciAqZGV2bGlua19kZXZfbmFtZShjb25zdCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNzQte1xubmV0L2RldmxpbmsvY29yZS5jOjI3NTpcdHJldHVybiBkZXZsaW5rLVx1MDAzZWRldiA/IGRldl9uYW1lKGRldmxpbmstXHUwMDNlZGV2KSA6IGRldmxpbmstXHUwMDNlZGV2X25hbWVfaW5kZXg7XG5uZXQvZGV2bGluay9jb3JlLmMtMjc2LX1cbm5ldC9kZXZsaW5rL2NvcmUuYzoyNzc6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bGlua19kZXZfbmFtZSk7XG5uZXQvZGV2bGluay9jb3JlLmMtMjc4LVxubmV0L2RldmxpbmsvY29yZS5jOjI3OTpjb25zdCBjaGFyICpkZXZsaW5rX2Rldl9kcml2ZXJfbmFtZShjb25zdCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0yODAte1xubmV0L2RldmxpbmsvY29yZS5jOjI4MTpcdHJldHVybiBkZXZsaW5rLVx1MDAzZWRldl9kcml2ZXItXHUwMDNlbmFtZTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yODItfVxubmV0L2RldmxpbmsvY29yZS5jOjI4MzpFWFBPUlRfU1lNQk9MX0dQTChkZXZsaW5rX2Rldl9kcml2ZXJfbmFtZSk7XG5uZXQvZGV2bGluay9jb3JlLmMtMjg0LVxubmV0L2RldmxpbmsvY29yZS5jOjI4NTpzdHJ1Y3QgbmV0ICpkZXZsaW5rX25ldChjb25zdCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0yODYte1xubmV0L2RldmxpbmsvY29yZS5jOjI4NzpcdHJldHVybiByZWFkX3BuZXQoXHUwMDI2ZGV2bGluay1cdTAwM2VfbmV0KTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yODgtfVxubmV0L2RldmxpbmsvY29yZS5jOjI4OTpFWFBPUlRfU1lNQk9MX0dQTChkZXZsaW5rX25ldCk7XG5uZXQvZGV2bGluay9jb3JlLmMtMjkwLVxubmV0L2RldmxpbmsvY29yZS5jOjI5MTp2b2lkIGRldmxfYXNzZXJ0X2xvY2tlZChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0yOTIte1xubmV0L2RldmxpbmsvY29yZS5jOjI5MzpcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZGV2bGluay1cdTAwM2Vsb2NrKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0yOTQtfVxubmV0L2RldmxpbmsvY29yZS5jPTI5NT1FWFBPUlRfU1lNQk9MX0dQTChkZXZsX2Fzc2VydF9sb2NrZWQpO1xuLS1cbm5ldC9kZXZsaW5rL2NvcmUuYy0yOTgtLyogRm9yIHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIExPQ0tERVAgb25seSBlLmcuIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoKSAqL1xubmV0L2RldmxpbmsvY29yZS5jOjI5OTpib29sIGRldmxfbG9ja19pc19oZWxkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxubmV0L2RldmxpbmsvY29yZS5jLTMwMC17XG5uZXQvZGV2bGluay9jb3JlLmM6MzAxOlx0cmV0dXJuIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZkZXZsaW5rLVx1MDAzZWxvY2spO1xubmV0L2RldmxpbmsvY29yZS5jLTMwMi19XG5uZXQvZGV2bGluay9jb3JlLmM9MzAzPUVYUE9SVF9TWU1CT0xfR1BMKGRldmxfbG9ja19pc19oZWxkKTtcbi0tXG5uZXQvZGV2bGluay9jb3JlLmMtMzA1LVxubmV0L2RldmxpbmsvY29yZS5jOjMwNjp2b2lkIGRldmxfbG9jayhzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMDcte1xubmV0L2RldmxpbmsvY29yZS5jOjMwODpcdG11dGV4X2xvY2soXHUwMDI2ZGV2bGluay1cdTAwM2Vsb2NrKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMDktfVxubmV0L2RldmxpbmsvY29yZS5jPTMxMD1FWFBPUlRfU1lNQk9MX0dQTChkZXZsX2xvY2spO1xubmV0L2RldmxpbmsvY29yZS5jLTMxMS1cbm5ldC9kZXZsaW5rL2NvcmUuYzozMTI6aW50IGRldmxfdHJ5bG9jayhzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMTMte1xubmV0L2RldmxpbmsvY29yZS5jOjMxNDpcdHJldHVybiBtdXRleF90cnlsb2NrKFx1MDAyNmRldmxpbmstXHUwMDNlbG9jayk7XG5uZXQvZGV2bGluay9jb3JlLmMtMzE1LX1cbm5ldC9kZXZsaW5rL2NvcmUuYz0zMTY9RVhQT1JUX1NZTUJPTF9HUEwoZGV2bF90cnlsb2NrKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMTctXG5uZXQvZGV2bGluay9jb3JlLmM6MzE4OnZvaWQgZGV2bF91bmxvY2soc3RydWN0IGRldmxpbmsgKmRldmxpbmspXG5uZXQvZGV2bGluay9jb3JlLmMtMzE5LXtcbm5ldC9kZXZsaW5rL2NvcmUuYzozMjA6XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2bGluay1cdTAwM2Vsb2NrKTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMjEtfVxubmV0L2RldmxpbmsvY29yZS5jPTMyMj1FWFBPUlRfU1lNQk9MX0dQTChkZXZsX3VubG9jayk7XG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTMyNC0vKipcbm5ldC9kZXZsaW5rL2NvcmUuYzozMjU6ICogZGV2bGlua190cnlfZ2V0KCkgLSB0cnkgdG8gb2J0YWluIGEgcmVmZXJlbmNlIG9uIGEgZGV2bGluayBpbnN0YW5jZVxubmV0L2RldmxpbmsvY29yZS5jOjMyNjogKiBAZGV2bGluazogaW5zdGFuY2UgdG8gcmVmZXJlbmNlXG5uZXQvZGV2bGluay9jb3JlLmMtMzI3LSAqXG5uZXQvZGV2bGluay9jb3JlLmM6MzI4OiAqIE9idGFpbiBhIHJlZmVyZW5jZSBvbiBhIGRldmxpbmsgaW5zdGFuY2UuIEEgcmVmZXJlbmNlIG9uIGEgZGV2bGluayBpbnN0YW5jZVxubmV0L2RldmxpbmsvY29yZS5jLTMyOS0gKiBvbmx5IGltcGxpZXMgdGhhdCBpdCYjMzk7cyBzYWZlIHRvIHRha2UgdGhlIGluc3RhbmNlIGxvY2suIEl0IGRvZXMgbm90IGltcGx5XG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTMzMi0gKi9cbm5ldC9kZXZsaW5rL2NvcmUuYzozMzM6c3RydWN0IGRldmxpbmsgKl9fbXVzdF9jaGVjayBkZXZsaW5rX3RyeV9nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmspXG5uZXQvZGV2bGluay9jb3JlLmMtMzM0LXtcbm5ldC9kZXZsaW5rL2NvcmUuYzozMzU6XHRpZiAocmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNmRldmxpbmstXHUwMDNlcmVmY291bnQpKVxubmV0L2RldmxpbmsvY29yZS5jOjMzNjpcdFx0cmV0dXJuIGRldmxpbms7XG5uZXQvZGV2bGluay9jb3JlLmMtMzM3LVx0cmV0dXJuIE5VTEw7XG4tLVxubmV0L2RldmxpbmsvY29yZS5jLTMzOS1cbm5ldC9kZXZsaW5rL2NvcmUuYzozNDA6c3RhdGljIHZvaWQgZGV2bGlua19yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9kZXZsaW5rL2NvcmUuYy0zNDEte1xubmV0L2RldmxpbmsvY29yZS5jOjM0MjpcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xubmV0L2RldmxpbmsvY29yZS5jLTM0My1cbm5ldC9kZXZsaW5rL2NvcmUuYzozNDQ6XHRkZXZsaW5rID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLCBzdHJ1Y3QgZGV2bGluaywgcndvcmspO1xubmV0L2RldmxpbmsvY29yZS5jLTM0NS1cbm5ldC9kZXZsaW5rL2NvcmUuYzozNDY6XHRtdXRleF9kZXN0cm95KFx1MDAyNmRldmxpbmstXHUwMDNlbG9jayk7XG5uZXQvZGV2bGluay9jb3JlLmM6MzQ3Olx0bG9ja2RlcF91bnJlZ2lzdGVyX2tleShcdTAwMjZkZXZsaW5rLVx1MDAzZWxvY2tfa2V5KTtcbm5ldC9kZXZsaW5rL2NvcmUuYzozNDg6XHRpZiAoZGV2bGluay1cdTAwM2VkZXYpXG5uZXQvZGV2bGluay9jb3JlLmM6MzQ5Olx0XHRwdXRfZGV2aWNlKGRldmxpbmstXHUwMDNlZGV2KTtcbm5ldC9kZXZsaW5rL2NvcmUuYy0zNTAtXHRlbHNlXG5uZXQvZGV2bGluay9jb3JlLmM6MzUxOlx0XHRrZnJlZShkZXZsaW5rLVx1MDAzZWRldl9uYW1lX2luZGV4KTtcbm5ldC9kZXZsaW5rL2NvcmUuYzozNTI6XHRrdmZyZWUoZGV2bGluayk7XG5uZXQvZGV2bGluay9jb3JlLmMtMzUzLX1cbm5ldC9kZXZsaW5rL2NvcmUuYy0zNTQtXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkxMQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE5FVF9ERVZMSU5LIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgTkVUX0RFVkxJTktgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEdpdmVuIHRoZSBuYXR1cmUgb2YgbmV0d29ya2luZyBkZXZpY2UgbGlua2luZywgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgd2lsbCBiZSBoYW5naW5nIG91dCBpbiBlaXRoZXIgYG5ldC9kZXZsaW5rL0tjb25maWdgIG9yLCBwZXJoYXBzIGlmIGl0JiMzOTtzIG1vcmUgZnVuZGFtZW50YWwsIGBuZXQvS2NvbmZpZ2AuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRob3NlIGZpbGVzIGRpcmVjdGx5LiBJIGtub3cgbXkgd2F5IGFyb3VuZCB0aGUga2VybmVsIHNvdXJjZSwgYW5kIEkmIzM5O20gZmFpcmx5IGNvbmZpZGVudCBJIGNhbiBxdWlja2x5IGxvY2F0ZSB0aGUgc3BlY2lmaWMgc3ltYm9scyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYE5FVF9ERVZMSU5LYCBhbmQgZmlndXJlIG91dCBob3cgaXQmIzM5O3MgY29udHJvbGxlZC4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0RFVkxJTksmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ3OT1jb25maWcgTkVUX1NPQ0tfTVNHXG4tLVxubmV0L0tjb25maWctNDg2LVxubmV0L0tjb25maWc6NDg3OmNvbmZpZyBORVRfREVWTElOS1xubmV0L0tjb25maWctNDg4LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjAzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgTkVUX0RFVkxJTksgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW5hYmxpbmcgY29uZGl0aW9ucyBmb3IgYE5FVF9ERVZMSU5LYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gbGluZSA0ODcgKG9yIHRoZXJlYWJvdXRzIC0gZ2l2ZSBvciB0YWtlIGEgZmV3IGxpbmVzIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24gSSYjMzk7bSBsb29raW5nIGF0KSB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGBORVRfREVWTElOS2AgaXMgZ3VhcmRlZCBiZWhpbmQgYW55IHNwZWNpZmljIHByZXJlcXVpc2l0ZXMsIG90aGVyIGNvbmZpZyBzeW1ib2xzLCBvciBhcmNoaXRlY3R1cmUgbGltaXRhdGlvbnMuIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGNoZWNraW5nIHdoZXRoZXIgaXQmIzM5O3MgYSAmIzM0O3Byb21wdCYjMzQ7IG9wdGlvbiwgbWVhbmluZyBhIGRpcmVjdCB1c2VyIGNob2ljZSwgb3IgaWYgaXQgaGFzIGEgZGVmYXVsdCB2YWx1ZSB0aGF0JiMzOTtzIGF1dG9tYXRpY2FsbHkgc2V0IHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcy4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0cyB3aWxsIGhlbHAgbWUgZGV0ZXJtaW5lIGhvdyB0aGUgc3lzdGVtIGJlaGF2ZXMgYW5kIGhvdyB0byBtYW5hZ2UgdGhlIE5FVF9ERVZMSU5LIHNldHRpbmcgZm9yIG15IHB1cnBvc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0ODA6XHRcdGJvb2xcbiA0ODE6XHRcdGRlZmF1bHQgblxuIDQ4MjpcdFx0aGVscFxuIDQ4MzpcdFx0ICBUaGUgTkVUX1NPQ0tfTVNHIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBwbGFpbiBzb2NrZXRzIChlLmcuIFRDUCkgb3JcbiA0ODQ6XHRcdCAgVUxQcyAodXBwZXIgbGF5ZXIgbW9kdWxlcywgZS5nLiBUTFMpIHRvIHByb2Nlc3MgTDcgYXBwbGljYXRpb24gZGF0YVxuIDQ4NTpcdFx0ICB3aXRoIHRoZSBoZWxwIG9mIEJQRiBwcm9ncmFtcy5cbiA0ODY6XHRcbiA0ODc6XHRjb25maWcgTkVUX0RFVkxJTktcbiA0ODg6XHRcdGJvb2xcbiA0ODk6XHRcdGRlZmF1bHQgblxuIDQ5MDpcdFxuIDQ5MTpcdGNvbmZpZyBQQUdFX1BPT0xcbiA0OTI6XHRcdGJvb2xcbiA0OTM6XHRcbiA0OTQ6XHRjb25maWcgUEFHRV9QT09MX1NUQVRTXG4gNDk1Olx0XHRkZWZhdWx0IG5cbiA0OTY6XHRcdGJvb2wgXCYjMzQ7UGFnZSBwb29sIHN0YXRzXCYjMzQ7XG4gNDk3Olx0XHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxuIDQ5ODpcdFx0aGVscFxuIDQ5OTpcdFx0ICBFbmFibGUgcGFnZSBwb29sIHN0YXRpc3RpY3MgdG8gdHJhY2sgcGFnZSBhbGxvY2F0aW9uIGFuZCByZWN5Y2xpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MjMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTkVUX0RFVkxJTksgVXNhZ2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGBORVRfREVWTElOS2AmIzM5O3MgaW5mbHVlbmNlIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIHdoZXJlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgYmVpbmcgdXRpbGl6ZWQuIEkgd2FudCB0byBpZGVudGlmeSBhbGwgdGhlIG1vZHVsZXMsIHN1YnN5c3RlbXMsIGFuZCBjb2RlIHBhdGhzIHRoYXQgYXJlIGNvbmRpdGlvbmFsIG9uIG9yIGRlcGVuZGVudCB1cG9uIGBORVRfREVWTElOS2AuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgd2l0aCBhIHRhcmdldGVkIHNlYXJjaCBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gSSYjMzk7bGwgbmVlZCB0byB1c2UgdGhlIHJpZ2h0IHRvb2xzIGFuZCBxdWVyeSB0byBnZXQgYSBwcmVjaXNlIHBpY3R1cmUgb2YgdGhlIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLiBJJiMzOTttIGFpbWluZyBmb3IgYSByZXN1bHQgdGhhdCBwaW5wb2ludHMgYm90aCBkaXJlY3QgYW5kIHBvdGVudGlhbGx5IGluZGlyZWN0IHVzYWdlcywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgcnVudGltZSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaW50cm9kdWNlLiBUaGlzIGxldmVsIG9mIGFuYWx5c2lzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBhcmNoaXRlY3R1cmFsIHJhbWlmaWNhdGlvbnMgb2YgYE5FVF9ERVZMSU5LYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IE5FVF9ERVZMSU5LJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL21hcnZlbGwvS2NvbmZpZz00MD1jb25maWcgQ1JZUFRPX0RFVl9PQ1RFT05UWDJfQ1BUXG4tLVxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9LY29uZmlnLTUxLVx0c2VsZWN0IENSWVBUT19BVVRIRU5DXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL0tjb25maWc6NTI6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvS2NvbmZpZy01My1cdGhlbHBcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTM9Y29uZmlnIFpMMzA3M1hcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTYtXHRzZWxlY3QgRFBMTFxuZHJpdmVycy9kcGxsL3psMzA3M3gvS2NvbmZpZzo3Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTgtXHRzZWxlY3QgUkVHTUFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz02MDQ9Y29uZmlnIE5FVERFVlNJTVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctNjA5LVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxuZHJpdmVycy9uZXQvS2NvbmZpZzo2MTA6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L0tjb25maWctNjExLVx0c2VsZWN0IFBBR0VfUE9PTFxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnPTE2OD1jb25maWcgQ0FOX0tWQVNFUl9QQ0lFRkRcbi0tXG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZy0xNzAtXHR0cmlzdGF0ZSBcJiMzNDtLdmFzZXIgUENJZSBGRCBjYXJkc1wmIzM0O1xuZHJpdmVycy9uZXQvY2FuL0tjb25maWc6MTcxOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZy0xNzItXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnPTMxPWNvbmZpZyBDQU5fRVRBU19FUzU4WFxuLS1cbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy0zMy1cdHNlbGVjdCBDUkMxNlxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnOjM0Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWctMzUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnPTY3PWNvbmZpZyBDQU5fS1ZBU0VSX1VTQlxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnLTY4LVx0dHJpc3RhdGUgXCYjMzQ7S3Zhc2VyIENBTi9VU0IgaW50ZXJmYWNlXCYjMzQ7XG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc6Njk6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy03MC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZz0xOT1jb25maWcgRU5BX0VUSEVSTkVUXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL0tjb25maWctMjMtXHRzZWxlY3QgRElNTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZzoyNDpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL0tjb25maWctMjUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWc9MTY5PWNvbmZpZyBQRFNfQ09SRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnLTE3Mi1cdHNlbGVjdCBBVVhJTElBUllfQlVTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZzoxNzM6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnLTE3NC1cdHNlbGVjdCBQTERNRldcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTIwNz1jb25maWcgQk5YVFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjEyLVx0c2VsZWN0IENSQzMyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjIxMzpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTQtXHRzZWxlY3QgUEFHRV9QT09MXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yNTg9Y29uZmlnIEJOR0Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI2MC1cdGRlcGVuZHMgb24gUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI2MTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjItXHRzZWxlY3QgUEFHRV9QT09MXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9Njg9Y29uZmlnIExJUVVJRElPXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNzUtXHRzZWxlY3QgTElRVUlESU9fQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6NzY6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTc3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnPTI9Y29uZmlnIEZTTF9EUEFBMl9FVEhcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvS2NvbmZpZy03LVx0c2VsZWN0IEZTTF9YR01BQ19NRElPXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvS2NvbmZpZzo4Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvS2NvbmZpZy05LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnPTY9Y29uZmlnIEZVTl9FVEhcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZy05LVx0ZGVwZW5kcyBvbiBUTFMgXHUwMDI2XHUwMDI2IFRMU19ERVZJQ0UgfHwgVExTX0RFVklDRT1uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZzoxMDpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL0tjb25maWctMTEtXHRzZWxlY3QgRlVOX0NPUkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZz05MT1jb25maWcgSE5TM1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTkzLVx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjk0Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05NS1cdHNlbGVjdCBQQUdFX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvS2NvbmZpZz02PWNvbmZpZyBISU5JQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYy9LY29uZmlnLTgtXHRkZXBlbmRzIG9uIChQQ0lfTVNJIFx1MDAyNlx1MDAyNiAoWDg2IHx8IEFSTTY0KSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYy9LY29uZmlnOjk6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYy9LY29uZmlnLTEwLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MTQ1PWNvbmZpZyBJWEdCRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMTUwLVx0c2VsZWN0IE1ESU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc6MTUxOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTE1Mi1cdHNlbGVjdCBQTERNRldcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTIyOT1jb25maWcgSTQwRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjM1LVx0c2VsZWN0IExJQklFX0FETUlOUVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyMzY6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjM3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWc9MjkxPWNvbmZpZyBJQ0Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwMi1cdHNlbGVjdCBMSUJJRV9GV0xPRyBpZiBERUJVR19GU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozMDM6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzA0LVx0c2VsZWN0IFBBQ0tJTkdcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGQvS2NvbmZpZz00PWNvbmZpZyBJWERcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGQvS2NvbmZpZy04LVx0c2VsZWN0IExJQklFX1BDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhkL0tjb25maWc6OTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhkL0tjb25maWctMTAtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZz05PWNvbmZpZyBPQ1RFT05UWDJfQUZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTExLVx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjEyOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTEzLVx0ZGVwZW5kcyBvbiAoNjRCSVQgXHUwMDI2XHUwMDI2IENPTVBJTEVfVEVTVCkgfHwgQVJNNjRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnPTMxPWNvbmZpZyBPQ1RFT05UWDJfUEZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTMzLVx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnOjM0Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM1LVx0c2VsZWN0IFBBR0VfUE9PTFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZz02PWNvbmZpZyBQUkVTVEVSQVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZy05LVx0ZGVwZW5kcyBvbiBCUklER0UgfHwgQlJJREdFPW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZzoxMDpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9LY29uZmlnLTExLVx0c2VsZWN0IFBIWUxJTktcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc9Mjg9Y29uZmlnIE1MWDRfQ09SRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy0zMS1cdHNlbGVjdCBBVVhJTElBUllfQlVTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc6MzI6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy0zMy1cdGRlZmF1bHQgblxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnPTY9Y29uZmlnIE1MWDVfQ09SRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTktXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MTA6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTExLVx0ZGVwZW5kcyBvbiBNTFhGVyB8fCAhTUxYRldcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhmdy9LY29uZmlnPTY9Y29uZmlnIE1MWEZXXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4ZncvS2NvbmZpZy0xNC1cdHNlbGVjdCBYWl9ERUNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGZ3L0tjb25maWc6MTU6XHRzZWxlY3QgTkVUX0RFVkxJTktcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnPTY9Y29uZmlnIE1MWFNXX0NPUkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O01lbGxhbm94IFRlY2hub2xvZ2llcyBTd2l0Y2ggQVNJQ3Mgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZzo4Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnLTktXHRzZWxlY3QgTUxYRldcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc9MjA9Y29uZmlnIEZCTklDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTI2LVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjI3Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjgtXHRzZWxlY3QgUEFHRV9QT09MXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbXNjYy9LY29uZmlnPTE1PWNvbmZpZyBNU0NDX09DRUxPVF9TV0lUQ0hfTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL0tjb25maWctMTYtXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL0tjb25maWc6MTc6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZy0xOC1cdHNlbGVjdCBSRUdNQVBfTU1JT1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnPTE5PWNvbmZpZyBORlBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvS2NvbmZpZy0yMy1cdGRlcGVuZHMgb24gVExTIFx1MDAyNlx1MDAyNiBUTFNfREVWSUNFIHx8IFRMU19ERVZJQ0U9blxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL0tjb25maWc6MjQ6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnLTI1LVx0c2VsZWN0IENSQzMyXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZz0yMD1jb25maWcgSU9OSUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnLTIzLVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZzoyNDpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yNS1cdHNlbGVjdCBESU1MSUJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZz03Nj1jb25maWcgUUVEXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL0tjb25maWctODEtXHRzZWxlY3QgQ1JDMzJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnOjgyOlx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZy04My1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZz0xOT1jb25maWcgU0ZDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc2ZjL0tjb25maWctMjQtXHRzZWxlY3QgQ1JDMzJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NmYy9LY29uZmlnOjI1Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZy0yNi1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTI9Y29uZmlnIFNUTU1BQ19FVEhcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTEyLVx0c2VsZWN0IFJFU0VUX0NPTlRST0xMRVJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6MTM6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMTQtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz02NT1jb25maWcgVElfQ1BTV19TV0lUQ0hERVZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTczLVx0c2VsZWN0IFJFR01BUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzo3NDpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy03NS1cdGltcGx5IFBIWV9USV9HTUlJX1NFTFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9OTY9Y29uZmlnIFRJX0szX0FNNjVfQ1BTV19OVVNTXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy05OC1cdGRlcGVuZHMgb24gQVJDSF9LMyBcdTAwMjZcdTAwMjYgT0YgXHUwMDI2XHUwMDI2IFRJX0szX1VETUFfR0xVRV9MQVlFUlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzo5OTpcdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0xMDAtXHRzZWxlY3QgVElfREFWSU5DSV9NRElPXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZz02PWNvbmZpZyBESU5HSEFJXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZy04LSAgICBkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZzo5OiAgICBzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWctMTAtICAgIGhlbHBcbi0tXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc9OTY9Y29uZmlnIElPU01cbi0tXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctOTgtXHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjk5Olx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTAwLVx0c2VsZWN0IFJFTEFZIGlmIFdXQU5fREVCVUdGU1xuLS1cbmRyaXZlcnMvcHRwL0tjb25maWc9MjExPWNvbmZpZyBQVFBfMTU4OF9DTE9DS19PQ1Bcbi0tXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIxOC1cdGRlcGVuZHMgb24gQ09NTU9OX0NMS1xuZHJpdmVycy9wdHAvS2NvbmZpZzoyMTk6XHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvcHRwL0tjb25maWctMjIwLVx0c2VsZWN0IENSQzE2XG4tLVxubmV0L2RzYS9LY29uZmlnPTM9bWVudWNvbmZpZyBORVRfRFNBXG4tLVxubmV0L2RzYS9LY29uZmlnLTEwLVx0c2VsZWN0IFBIWUxJTktcbm5ldC9kc2EvS2NvbmZpZzoxMTpcdHNlbGVjdCBORVRfREVWTElOS1xubmV0L2RzYS9LY29uZmlnLTEyLVx0aW1wbHkgTkVUX1NFTEZURVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgzMQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkRpdmluZyBpbnRvIGBuZXRkZXZzaW1gIGFuZCBgZGV2bGlua2AgSW50ZWdyYXRpb24qKgoKT2theSwgc28gYE5FVERFVlNJTWAgcGlja3MgYE5FVF9ERVZMSU5LYC4gSW50ZXJlc3RpbmcuIGBORVRERVZTSU1gLCByaWdodCwgdGhhdCYjMzk7cyB0aGUgc29mdHdhcmUgbW9jayBuZXR3b3JrIGRldmljZSB1c2VkIGV4dGVuc2l2ZWx5IHdpdGggUUVNVSBhbmQgc3l6a2FsbGVyIGZvciBmdXp6aW5nLiBOb3csIHRoZSBxdWVzdGlvbiBpczogZG9lcyBgbmV0ZGV2c2ltYCBhY3R1YWxseSBpbXBsZW1lbnQgdGhlIGBkZXZsaW5rYCBmbGFzaCB1cGRhdGUgZnVuY3Rpb25hbGl0eT8gR2l2ZW4gaXRzIHJvbGUgaW4gdGVzdGluZywgaXQmIzM5O3MgYSBsb2dpY2FsIHBvaW50IG9mIGludmVzdGlnYXRpb24uIExldCYjMzk7cyBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuY2Agc291cmNlIGNvZGUsIHRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJIGNvdWxkIGFsc28gZG8gYSBxdWljayBzZWFyY2ggd2l0aGluIHRoZSBgbmV0ZGV2c2ltYCBjb2RlIGZvciB0aGUgdGVybSBgZmxhc2hfdXBkYXRlYC4gVGhhdCBzaG91bGQgcXVpY2tseSByZXZlYWwgd2hldGhlciBvciBub3QgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQgYW5kIGhvdyBpdCYjMzk7cyBoYW5kbGVkLCBhc3N1bWluZyB0aGF0IHRoZSBtb2NrIGRldmljZSBpbXBsZW1lbnRzIHNvbWV0aGluZyByZWxhdGVkIHRvIHVwZGF0aW5nIGl0cyAmIzM0O2Zpcm13YXJlJiMzNDsuIFVuZGVyc3RhbmRpbmcgdGhhdCBpbnRlcmFjdGlvbiBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbGFzaF91cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRkZXZzaW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jPTk4Nj1zdGF0aWMgaW50IG5zaW1fZGV2X2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMDAzLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjEwMDQ6c3RhdGljIGludCBuc2ltX2Rldl9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTAwNTpcdFx0XHRcdCBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTAwNi1cdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEwMTQtXHRpZiAobnNpbV9kZXYtXHUwMDNlZndfdXBkYXRlX3N0YXR1cykge1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjEwMTU6XHRcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGV2bGluayxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMDE2LVx0XHRcdFx0XHRcdCAgIFwmIzM0O1ByZXBhcmluZyB0byBmbGFzaFwmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTAyMS1cdFx0aWYgKG5zaW1fZGV2LVx1MDAzZWZ3X3VwZGF0ZV9zdGF0dXMpXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTAyMjpcdFx0XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssIFwmIzM0O0ZsYXNoaW5nXCYjMzQ7LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEwMjMtXHRcdFx0XHRcdFx0XHQgICBwYXJhbXMtXHUwMDNlY29tcG9uZW50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMDI5LVx0aWYgKG5zaW1fZGV2LVx1MDAzZWZ3X3VwZGF0ZV9zdGF0dXMpIHtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxMDMwOlx0XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssIFwmIzM0O0ZsYXNoaW5nXCYjMzQ7LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEwMzEtXHRcdFx0XHRcdFx0ICAgcGFyYW1zLVx1MDAzZWNvbXBvbmVudCxcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTAzMy1cdFx0XHRcdFx0XHQgICBOU0lNX0RFVl9GTEFTSF9TSVpFKTtcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxMDM0Olx0XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV90aW1lb3V0X25vdGlmeShkZXZsaW5rLCBcJiMzNDtGbGFzaCBzZWxlY3RcJiMzNDssXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTAzNS1cdFx0XHRcdFx0XHQgICAgcGFyYW1zLVx1MDAzZWNvbXBvbmVudCwgODEpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjEwMzY6XHRcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGV2bGluaywgXCYjMzQ7Rmxhc2hpbmcgZG9uZVwmIzM0OyxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMDM3LVx0XHRcdFx0XHRcdCAgIHBhcmFtcy1cdTAwM2Vjb21wb25lbnQsIDAsIDApO1xuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz0xMzUwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgbnNpbV9kZXZfZGV2bGlua19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEzNTItXHQuZXN3aXRjaF9tb2RlX2dldCA9IG5zaW1fZGV2bGlua19lc3dpdGNoX21vZGVfZ2V0LFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jOjEzNTM6XHQuc3VwcG9ydGVkX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgPSBERVZMSU5LX1NVUFBPUlRfRkxBU0hfVVBEQVRFX09WRVJXUklURV9NQVNLLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEzNTQtXHQucmVsb2FkX2FjdGlvbnMgPSBCSVQoREVWTElOS19SRUxPQURfQUNUSU9OX0RSSVZFUl9SRUlOSVQpLFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMzU3LVx0LmluZm9fZ2V0ID0gbnNpbV9kZXZfaW5mb19nZXQsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTM1ODpcdC5mbGFzaF91cGRhdGUgPSBuc2ltX2Rldl9mbGFzaF91cGRhdGUsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTM1OS1cdC50cmFwX2luaXQgPSBuc2ltX2Rldl9kZXZsaW5rX3RyYXBfaW5pdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOZXRkZXZzaW0gYW5kIERldmxpbmsgRmxhc2ggVXBkYXRlcyoqCgpPa2F5LCBzbyBOZXRkZXZzaW0gaXMgZmluYWxseSBmdWxseSBzdXBwb3J0aW5nIGRldmxpbmsgZmxhc2ggdXBkYXRlcywgd2hpY2ggaXMgZmFudGFzdGljISBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgYWN0dWFsbHkgKm1lYW5zKiBpbiBwcmFjdGljZSwgdGhvdWdoLiBXaGF0IGRvZXMgdGhlIG5ldGxpbmsgZmxhc2ggdXBkYXRlIGNvbW1hbmQgKmRvKiBhdCBhIGxvdyBsZXZlbD8KCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuIFRoZSBjb3JlIGxvZ2ljIHNob3VsZCByZXNpZGUgaW4gYG5ldC9kZXZsaW5rL2Rldi5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YC4gVGltZSB0byByZWFkIGxpbmVzIDExMjAtMTE4NS4gSSYjMzk7bGwgbmVlZCB0byBwYXJzZSB0aGUgbmV0bGluayBtZXNzYWdlcyBhbmQgY29ycmVsYXRlIHRoZW0gdG8gdGhlIHNwZWNpZmljIG9wZXJhdGlvbnMgZm9yIHRoZSBmbGFzaCB1cGRhdGUuIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhleSBoYW5kbGUgZXJyb3IgY29uZGl0aW9ucywgdmVyc2lvbmluZywgYW5kIHNlY3VyaXR5IChpZiBhcHBsaWNhYmxlKS4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkOyB1bmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCB1bmxvY2sgdGhlIHByYWN0aWNhbCBpbXBsaWNhdGlvbnMgb2YgTmV0ZGV2c2ltJiMzOTtzIG5ldyBmZWF0dXJlLiBJIGV4cGVjdCBzb21lIGludGVyZXN0aW5nIG51YW5jZXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZGV2bGluay9kZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEyMDpcdFxuMTEyMTpcdFx0cmV0ID0gZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlaW5mb19nZXQoZGV2bGluaywgXHUwMDI2cmVxLCBOVUxMKTtcbjExMjI6XHRcdGlmIChyZXQpXG4xMTIzOlx0XHRcdHJldHVybiByZXQ7XG4xMTI0Olx0XG4xMTI1Olx0XHRpZiAoIWxvb2t1cF9jdHgubG9va3VwX25hbWVfZm91bmQpIHtcbjExMjY6XHRcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihleHRhY2ssIG5sYV9jb21wb25lbnQsXG4xMTI3Olx0XHRcdFx0XHQgICAgXCYjMzQ7c2VsZWN0ZWQgY29tcG9uZW50IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcJiMzNDspO1xuMTEyODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExMjk6XHRcdH1cbjExMzA6XHRcdCpwX2NvbXBvbmVudCA9IGNvbXBvbmVudDtcbjExMzE6XHRcdHJldHVybiAwO1xuMTEzMjpcdH1cbjExMzM6XHRcbjExMzQ6XHRpbnQgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMTEzNTpcdHtcbjExMzY6XHRcdHN0cnVjdCBubGF0dHIgKm5sYV9vdmVyd3JpdGVfbWFzaywgKm5sYV9maWxlX25hbWU7XG4xMTM3Olx0XHRzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zIHBhcmFtcyA9IHt9O1xuMTEzODpcdFx0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBkZXZsaW5rX25sX2N0eChpbmZvKS1cdTAwM2VkZXZsaW5rO1xuMTEzOTpcdFx0Y29uc3QgY2hhciAqZmlsZV9uYW1lO1xuMTE0MDpcdFx0dTMyIHN1cHBvcnRlZF9wYXJhbXM7XG4xMTQxOlx0XHRpbnQgcmV0O1xuMTE0MjpcdFxuMTE0MzpcdFx0aWYgKCFkZXZsaW5rLVx1MDAzZW9wcy1cdTAwM2VmbGFzaF91cGRhdGUpXG4xMTQ0Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNDU6XHRcbjExNDY6XHRcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIERFVkxJTktfQVRUUl9GTEFTSF9VUERBVEVfRklMRV9OQU1FKSlcbjExNDc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTQ4Olx0XG4xMTQ5Olx0XHRyZXQgPSBkZXZsaW5rX2ZsYXNoX2NvbXBvbmVudF9nZXQoZGV2bGluayxcbjExNTA6XHRcdFx0XHRcdFx0ICBpbmZvLVx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9GTEFTSF9VUERBVEVfQ09NUE9ORU5UXSxcbjExNTE6XHRcdFx0XHRcdFx0ICBcdTAwMjZwYXJhbXMuY29tcG9uZW50LCBpbmZvLVx1MDAzZWV4dGFjayk7XG4xMTUyOlx0XHRpZiAocmV0KVxuMTE1MzpcdFx0XHRyZXR1cm4gcmV0O1xuMTE1NDpcdFxuMTE1NTpcdFx0c3VwcG9ydGVkX3BhcmFtcyA9IGRldmxpbmstXHUwMDNlb3BzLVx1MDAzZXN1cHBvcnRlZF9mbGFzaF91cGRhdGVfcGFyYW1zO1xuMTE1NjpcdFxuMTE1NzpcdFx0bmxhX292ZXJ3cml0ZV9tYXNrID0gaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX09WRVJXUklURV9NQVNLXTtcbjExNTg6XHRcdGlmIChubGFfb3ZlcndyaXRlX21hc2spIHtcbjExNTk6XHRcdFx0c3RydWN0IG5sYV9iaXRmaWVsZDMyIHNlY3Rpb25zO1xuMTE2MDpcdFxuMTE2MTpcdFx0XHRpZiAoIShzdXBwb3J0ZWRfcGFyYW1zIFx1MDAyNiBERVZMSU5LX1NVUFBPUlRfRkxBU0hfVVBEQVRFX09WRVJXUklURV9NQVNLKSkge1xuMTE2MjpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cdTAwM2VleHRhY2ssIG5sYV9vdmVyd3JpdGVfbWFzayxcbjExNjM6XHRcdFx0XHRcdFx0ICAgIFwmIzM0O292ZXJ3cml0ZSBzZXR0aW5ncyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRldmljZVwmIzM0Oyk7XG4xMTY0Olx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTE2NTpcdFx0XHR9XG4xMTY2Olx0XHRcdHNlY3Rpb25zID0gbmxhX2dldF9iaXRmaWVsZDMyKG5sYV9vdmVyd3JpdGVfbWFzayk7XG4xMTY3Olx0XHRcdHBhcmFtcy5vdmVyd3JpdGVfbWFzayA9IHNlY3Rpb25zLnZhbHVlIFx1MDAyNiBzZWN0aW9ucy5zZWxlY3RvcjtcbjExNjg6XHRcdH1cbjExNjk6XHRcbjExNzA6XHRcdG5sYV9maWxlX25hbWUgPSBpbmZvLVx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9GTEFTSF9VUERBVEVfRklMRV9OQU1FXTtcbjExNzE6XHRcdGZpbGVfbmFtZSA9IG5sYV9kYXRhKG5sYV9maWxlX25hbWUpO1xuMTE3MjpcdFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstXHUwMDNlZGV2KTtcbjExNzM6XHRcdGlmIChyZXQpIHtcbjExNzQ6XHRcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVx1MDAzZWV4dGFjaywgbmxhX2ZpbGVfbmFtZSxcbjExNzU6XHRcdFx0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gbG9jYXRlIHRoZSByZXF1ZXN0ZWQgZmlybXdhcmUgZmlsZVwmIzM0Oyk7XG4xMTc2Olx0XHRcdHJldHVybiByZXQ7XG4xMTc3Olx0XHR9XG4xMTc4Olx0XG4xMTc5Olx0XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9iZWdpbl9ub3RpZnkoZGV2bGluayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzY0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gdGhlIERldmxpbmsgRmxhc2ggVXBkYXRlIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgIOKAkyB0aGF0JiMzOTtzIHRoZSBmdW5jdGlvbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGZvciBmbGFzaCB1cGRhdGVzLCBhbmQgaXQmIzM5O3MgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIGdlbmVyaWMgbmV0bGluayBkZXZsaW5rIGZhbWlseS4gR29vZCwgdGhhdCBnaXZlcyBtZSB0aGUgaW5pdGlhbCBjb250ZXh0LiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYC4gSSBzdXNwZWN0IHRoZSBsYXR0ZXIgbWlnaHQgYmUgcmVsYXRlZCB0byBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBidXQgSSBuZWVkIHRvIGNvbmZpcm0uCgpTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHNlZSB3aGVyZSBgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYCBpcyBhY3R1YWxseSAqY2FsbGVkKiBmcm9tLiBJJiMzOTtsbCBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4gS25vd2luZyB0aGUgY2FsbCBncmFwaCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZnVsbCBmbG93IG9mIGV4ZWN1dGlvbiBhbmQgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gcHJvcGVybHkgYW5hbHl6ZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucyBiZWluZyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9kZXZsaW5rLmg9MjEyMz12b2lkIGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbmluY2x1ZGUvbmV0L2RldmxpbmsuaC0yMTI0LVx0XHRcdFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XG5pbmNsdWRlL25ldC9kZXZsaW5rLmg6MjEyNTppbnQgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBjb25zdCBjaGFyICpmaWxlX25hbWUpO1xuaW5jbHVkZS9uZXQvZGV2bGluay5oLTIxMjYtaW50IGRldmxpbmtfY29tcGF0X3BoeXNfcG9ydF9uYW1lX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmluY2x1ZGUvbmV0L2RldmxpbmsuaD0yMTUxPXN0YXRpYyBpbmxpbmUgaW50XG5pbmNsdWRlL25ldC9kZXZsaW5rLmg6MjE1MjpkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSlcbmluY2x1ZGUvbmV0L2RldmxpbmsuaC0yMTUzLXtcbi0tXG5uZXQvZGV2bGluay9kZXYuYz0xMjIwPXZvaWQgZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuLS1cbm5ldC9kZXZsaW5rL2Rldi5jLTEyMzEtXG5uZXQvZGV2bGluay9kZXYuYzoxMjMyOmludCBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSlcbm5ldC9kZXZsaW5rL2Rldi5jLTEyMzMte1xuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmM9MzY0Nj1pbnQgZGV2X2V0aHRvb2woc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgaWZyZXEgKmlmciwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKVxuLS1cbm5ldC9ldGh0b29sL2lvY3RsLmMtMzY3NS1cdFx0aWYgKHN0YXRlLVx1MDAzZWRldmxpbmspXG5uZXQvZXRodG9vbC9pb2N0bC5jOjM2NzY6XHRcdFx0cmMgPSBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUoc3RhdGUtXHUwMDNlZGV2bGluayxcbm5ldC9ldGh0b29sL2lvY3RsLmMtMzY3Ny1cdFx0XHRcdFx0XHRcdCBzdGF0ZS1cdTAwM2VlZmwuZGF0YSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTE5CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmlybXdhcmUgVXBkYXRlIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gYGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZWAsIGNhbGxlZCB0aHJvdWdoIGV0aHRvb2wgaW9jdGxzIChzcGVjaWZpY2FsbHkgYEVUSFRPT0xfU0ZMQVNIYCBhbmQgYEVUSFRPT0xfRkxBU0hERVZJQ0VgIGZyb20gYG5ldC9ldGh0b29sL2lvY3RsLmNgKSwgYW5kIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IHRoZSBnZW5lcmljIG5ldGxpbmsgYERFVkxJTktfQ01EX0ZMQVNIX1VQREFURWAsIGlzIGNsZWFyLiBUaGUga2V5IHF1ZXN0aW9uIGlzLCAqd2h5KiB0aGUgc2hpZnQgZnJvbSBgcmVxdWVzdF9maXJtd2FyZWAgdG8gYHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0YD8KCkFoLCByaWdodC4gYHJlcXVlc3RfZmlybXdhcmVgIGludHJvZHVjZXMgYSBmYWxsYmFjayB0byB0aGUgdXNlciBoZWxwZXIgaWYgdGhlIGZpcm13YXJlIGlzbiYjMzk7dCBpbW1lZGlhdGVseSBmb3VuZCBvbiBkaXNrIChvciB0aGUgdXNlciBoZWxwZXIgaXMgZW5hYmxlZCksIHdoZXJlYXMgYHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0YCBnb2VzIHN0cmFpZ2h0IHRvIHRoZSBmaWxlc3lzdGVtIG9yIGFueSBidWlsdC1pbiBmaXJtd2FyZS4gVGhpcyBpcyBhIGNydWNpYWwgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyBmaWd1cmluZyBvdXQgdGhlIGltcGFjdC4gRG9lcyB0aGlzIGNoYW5nZSBhZmZlY3QgYWNjZXNzaWJsZSBrZXJuZWwgbG9naWM/CgpBYnNvbHV0ZWx5LiBCb3RoIHRoZSBnZW5lcmljIG5ldGxpbmsgaW50ZXJmYWNlIChgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGApIGFuZCB0aGUgZXRodG9vbCBpb2N0bCBwYXRoIChgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYCkgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4gRnVydGhlcm1vcmUsIHRoaXMgbWVhbnMgdGhhdCBldmVuIGVtdWxhdGVkIHZpcnR1YWwgZGV2aWNlcyBsaWtlIGBuZXRkZXZzaW1gIGNhbiB0cmlnZ2VyIHRoZXNlIGZ1bmN0aW9ucywgdGh1cyBkaXJlY3RseSBtb2RpZnlpbmcgaG93IGZpcm13YXJlIGlzIGxvYWRlZC4gV2UgbmVlZCB0byBiZSB2ZXJ5IGNhcmVmdWwgdG8gdmVyaWZ5IHRoZSBzaWRlLWVmZmVjdHMuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCB0aGUgc3ltYm9scyBpbnZvbHZlZCBhcmVuJiMzOTt0IHN0YXRpYy4gSW4gYG5ldC9kZXZsaW5rL2Rldi5jYCwgYm90aCBgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgYW5kIGBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVgIGFyZSBub24tc3RhdGljLiBgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgaGFzIHRoZSBzaWduYXR1cmUgYGludCBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pYCBhbmQgYGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZWAgaGFzIHRoZSBzaWduYXR1cmUgYGludCBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSlgLiBOZXh0LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBgbmV0L2RldmxpbmsvbmV0bGlua19nZW4uY2AsIG9yIHdoZXJldmVyIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBpcyByZWdpc3RlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kZXZsaW5rL2Rldi5jPTEwOTY9c3RhdGljIGludCBkZXZsaW5rX2ZsYXNoX2NvbXBvbmVudF9nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4tLVxubmV0L2RldmxpbmsvZGV2LmMtMTEzMy1cbm5ldC9kZXZsaW5rL2Rldi5jOjExMzQ6aW50IGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbm5ldC9kZXZsaW5rL2Rldi5jLTExMzUte1xuLS1cbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmM9NzAyPWNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkZXZsaW5rX25sX29wc1s3NV0gPSB7XG4tLVxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYy0xMTgzLVx0XHQucHJlX2RvaXRcdD0gZGV2bGlua19ubF9wcmVfZG9pdCxcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmM6MTE4NDpcdFx0LmRvaXRcdFx0PSBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0LFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYy0xMTg1LVx0XHQucG9zdF9kb2l0XHQ9IGRldmxpbmtfbmxfcG9zdF9kb2l0LFxuLS1cbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmg9MTI0PWludCBkZXZsaW5rX25sX2hlYWx0aF9yZXBvcnRlcl9kdW1wX2NsZWFyX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtMTI1LVx0XHRcdFx0XHQgICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG5uZXQvZGV2bGluay9uZXRsaW5rX2dlbi5oOjEyNjppbnQgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtMTI3LWludCBkZXZsaW5rX25sX3RyYXBfZ2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDQ3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2UgZmlsZXM6CgoqKkNoZWNraW5nIHRoZSBCdWlsZCBDb25maWd1cmF0aW9uIGZvciBuZXQvZGV2bGluay9kZXYuYyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSAqc3BlY2lmaWNhbGx5KiByZXF1aXJlZCB0byBidWlsZCBgbmV0L2RldmxpbmsvZGV2LmNgLiBJIGFscmVhZHkga25vdyB0aGUgb3ZlcmFsbCBgbmV0L2RldmxpbmtgIGJ1aWxkIGVudmlyb25tZW50LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIHNwZWNpZmljIHRvIHRoaXMgcGFydGljdWxhciBmaWxlLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBleGFtaW5pbmcgdGhlIHJlbGV2YW50IGBNYWtlZmlsZWDigKYgYnV0IGZpcnN0LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgaXNuJiMzOTt0IHNvbWUgb2J2aW91cyBjb25maWd1cmF0aW9uIG1hY3JvIGRlZmluZWQgdGhhdCYjMzk7cyBnb2luZyB0byB0cmlwIG1lIHVwLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoYXQgYG5ldC9kZXZsaW5rL01ha2VmaWxlYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzLCBpbmNsdWRlIHBhdGhzLCBhbnkgY3VzdG9tIGNvbXBpbGF0aW9uIGZsYWdzLCBhbmQgcG90ZW50aWFsIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gaG93IHRoZSBidWlsZCBwcm9jZXNzIGhhbmRsZXMgdGhpcyBzaW5nbGUgc291cmNlIGZpbGUuIEFueSBzdXJwcmlzZXMgbHVya2luZyBpbiB0aGVyZSBjb3VsZCBwb3RlbnRpYWxseSBpbXBhY3QgdGhlIGZpbmFsIG1vZHVsZSBvciBiaW5hcnkuIEkgbmVlZCB0byBlbnN1cmUgYSBjbGVhbiBhbmQgcHJlZGljdGFibGUgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2RldmxpbmsvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0XG4gICAzOlx0b2JqLXkgOj0gY29yZS5vIG5ldGxpbmsubyBuZXRsaW5rX2dlbi5vIGRldi5vIHBvcnQubyBzYi5vIGRwaXBlLm8gXFxcbiAgIDQ6XHRcdCByZXNvdXJjZS5vIHBhcmFtLm8gcmVnaW9uLm8gaGVhbHRoLm8gdHJhcC5vIHJhdGUubyBsaW5lY2FyZC5vIHNoX2Rldi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODI4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTmV0bGluayBhbmQgSXRzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYG5ldC9NYWtlZmlsZWAgYW5kIEkgc2VlIHRoaXMgbGluZTogYG9iai0kKENPTkZJR19ORVRfREVWTElOSykgJiM0Mzs9IGRldmxpbmsvYC4gQ2xlYXJseSwgYGRldmxpbmsvYCBpcyBpbmNsdWRlZCB3aGVuIGBDT05GSUdfTkVUX0RFVkxJTktgIGlzIHNldC4gTm93LCB0aGUgY29udGV4dCBzdWdnZXN0cyB0aGlzIGlzIGxpbmtlZCB0byBkZXZpY2UgZHJpdmVycyBsaWtlIGBDT05GSUdfTkVUREVWU0lNYCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXNlIGFyZSBjcml0aWNhbCB0byBteSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY3kgYmV0d2VlbiBgQ09ORklHX05FVERFVlNJTWAgYW5kIGBDT05GSUdfTkVUX0RFVkxJTktgLiBJcyBvbmUgbmVjZXNzYXJ5IGZvciB0aGUgb3RoZXIsIG9yIGFyZSB0aGV5IGluZGVwZW5kZW50PwoKQSBxdWljayBjaGVjayByZXZlYWxzIGBORVRfREVWTElOS2AgaXMgYSBib29sZWFuIGNvbmZpZyBzeW1ib2wgaW4gYG5ldC9LY29uZmlnYCwgZGVmYXVsdGluZyB0byAmIzM5O24mIzM5Oy4gUmlnaHQsIGFuZCBgTkVUREVWU0lNYCAqc2VsZWN0cyogYE5FVF9ERVZMSU5LYCwgbWVhbmluZyBpZiBJIGVuYWJsZSBgTkVUREVWU0lNYCwgSSBhdXRvbWF0aWNhbGx5IGdldCBgTkVUX0RFVkxJTktgLiBUaGlzIG1lYW5zIGBORVRfREVWTElOS2AgaXMgYSBkZXBlbmRlbmN5IG9mIGBORVRERVZTSU1gLiBTbywgaXQgc2VlbXMgSSBuZWVkIHRvIGludmVzdGlnYXRlIGBORVRERVZTSU1gIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgZ28gY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBzZWUgd2hhdCBpcyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVERFVlNJTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTYwMj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvaHlwZXJ2L0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWctNjAzLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo2MDQ6Y29uZmlnIE5FVERFVlNJTVxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDUtXHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXR3b3JrIGRyaXZlcnMgYXJlIGNvbmZpZ3VyZWQsIHNvIGxldCYjMzk7cyBqdW1wIHJpZ2h0IGludG8gYGRyaXZlcnMvbmV0L0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNjA0LiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgYSBjcnVjaWFsIHNlY3Rpb24gcmVsYXRlZCB0byB0aGUgY3VycmVudCBwcm9ibGVtIHJlc2lkZXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyBkZWZpbmVkIHRoZXJlIGFuZCBob3cgaXQgbWlnaHQgaW5mbHVlbmNlIHRoZSBvdmVyYWxsIHN5c3RlbSBzZXR1cC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBzb21lIGluc2lnaHRzIGludG8gdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzeW1ib2wgb3IgYmxvY2sgdGhhdCBhZmZlY3RzIHRoZSBiZWhhdmlvciBJIGFtIGRlYnVnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjA0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MDQ6XHRjb25maWcgTkVUREVWU0lNXG4gNjA1Olx0XHR0cmlzdGF0ZSBcJiMzNDtTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcJiMzNDtcbiA2MDY6XHRcdGRlcGVuZHMgb24gREVCVUdfRlNcbiA2MDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDYwODpcdFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8IFBTQU1QTEU9blxuIDYwOTpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxuIDYxMDpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gNjExOlx0XHRzZWxlY3QgUEFHRV9QT09MXG4gNjEyOlx0XHRzZWxlY3QgTkVUX1NIQVBFUlxuIDYxMzpcdFx0aGVscFxuIDYxNDpcdFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgYW5kIHNvZnR3YXJlIG1vZGVsIHRoYXQgY2FuXG4gNjE1Olx0XHQgIGJlIHVzZWQgdG8gdGVzdCB2YXJpb3VzIGNvbnRyb2wgcGF0aCBuZXR3b3JraW5nIEFQSXMsIGVzcGVjaWFsbHlcbiA2MTY6XHRcdCAgSFctb2ZmbG9hZCByZWxhdGVkLlxuIDYxNzpcdFxuIDYxODpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gNjE5Olx0XHQgIHdpbGwgYmUgY2FsbGVkIG5ldGRldnNpbS5cbiA2MjA6XHRcbiA2MjE6XHRjb25maWcgTkVUX0ZBSUxPVkVSXG4gNjIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtGYWlsb3ZlciBkcml2ZXJcJiMzNDtcbiA2MjM6XHRcdHNlbGVjdCBGQUlMT1ZFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTg1MwoJCQkJCQkJb3V0cHV0OiAxMzIKCQkJCQkJCXRob3VnaHRzOiAyOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIEkgbmVlZCB0byBjb25maWd1cmUgdGhpcyBmdXp6aW5nIHNldHVwIGNvcnJlY3RseS4gRmlyc3QsIEkmIzM5O20gY2hlY2tpbmcgZm9yIGBORVRfREVWTElOS2AgYW5kIGBORVRERVZTSU1gLiBUaGVzZSBhcmUgdGhlIGtleSBwaWVjZXMgaGVyZS4gU28sIHdoYXQgc2hvdWxkIGJlIGluIGBFbmFibGVDb25maWdzYD8gSG1tLCBkZWZpbml0ZWx5IGBORVRfREVWTElOS2AgYW5kIGBORVRERVZTSU1gLiBXYWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IGBORVRfREVWTElOS2AuIElzIGl0IGRpcmVjdGx5IHNlbGVjdGFibGUsIG9yIGlzIGl0IGltcGxpY2l0bHkgZW5hYmxlZD8gUmlnaHQsIGl0IGRvZXNuJiMzOTt0IGhhdmUgYSBwcm9tcHQgaW4gYG5ldC9LY29uZmlnYCwgbWVhbmluZyBzZWxlY3RpbmcgYE5FVERFVlNJTWAgb3Igb3RoZXIgcmVsZXZhbnQgZHJpdmVycyBhY3RpdmF0ZXMgYE5FVF9ERVZMSU5LYC4gR29vZCwgc28gaW5jbHVkaW5nIGJvdGggYE5FVF9ERVZMSU5LYCBhbmQgYE5FVERFVlNJTWAgaXMgdGhlIHJpZ2h0IG1vdmUgZm9yIGJyb2FkZXIgY292ZXJhZ2UuCgpOb3csIGxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgY2hlY2tsaXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gRmlyc3QsICppcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZyo/IFllcywgYWJzb2x1dGVseS4gSXQmIzM5O3Mgd29ya2luZyB3aXRoIGZpcm13YXJlIGxvYWRpbmcgd2l0aGluIHRoZSBgZGV2bGlua2AgbmV0bGluayBjb21tYW5kIGhhbmRsZXIgKGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCkgYW5kIHRoZSBgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYCBoYW5kbGVyLiBCb3RoIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsvZXRodG9vbCBjb21tYW5kcyBmcm9tIHVucHJpdmlsZWdlZCBvciBwcml2aWxlZ2VkIHVzZXJzcGFjZSwgYW5kIGl0JiMzOTtzIG9uIHZpcnR1YWwgYW5kIGVtdWxhdGVkIG5ldHdvcmsgZGV2aWNlcyBsaWtlIGBuZXRkZXZzaW1gLiBUaGF0JiMzOTtzIGp1aWN5IHBvdGVudGlhbCBmb3IgZmluZGluZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcuCgpOZXh0LCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBgRm9jdXNTeW1ib2xzYC4gVGhleSBhcmUgY2xlYXJseSBgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgYW5kIGBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVgLiBJbXBvcnRhbnRseSwgYm90aCBhcmUgbm9uLXN0YXRpYyBhbmQgbm90IGlubGluZWQg4oCTIEFQSSBlbnRyeXBvaW50cywgcGVyZmVjdC4KCkZpbmFsbHksIGNvbmZpcm0gdGhlIGBFbmFibGVDb25maWdzYCBhZ2FpbjogYE5FVF9ERVZMSU5LYCBhbmQgYE5FVERFVlNJTWAuCgpBbHJpZ2h0LCBJIHRoaW5rIEkmIzM5O3ZlIGdvdCBldmVyeXRoaW5nIGNvdmVyZWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfREVWTElOSyYjMzQ7LAogICAgJiMzNDtORVRERVZTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0JiMzNDssCiAgICAmIzM0O2RldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzd2l0Y2hlcyB0aGUgZmlybXdhcmUgcmVxdWVzdCBtZXRob2QgaW4gZGV2bGluayBmbGFzaCB1cGRhdGUgcm91dGluZXMgZnJvbSByZXF1ZXN0X2Zpcm13YXJlKCkgdG8gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoKS4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldGxpbmsgZGV2bGluayBhbmQgZXRodG9vbCBmbGFzaCB1cGRhdGUgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB1c2luZyBtb2NrIG5ldHdvcmsgZGV2aWNlcyBsaWtlIG5ldGRldnNpbS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0RFVkxJTksmIzM0OywKICAgICYjMzQ7TkVUREVWU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdCYjMzQ7LAogICAgJiMzNDtkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc3dpdGNoZXMgdGhlIGZpcm13YXJlIHJlcXVlc3QgbWV0aG9kIGluIGRldmxpbmsgZmxhc2ggdXBkYXRlIHJvdXRpbmVzIGZyb20gcmVxdWVzdF9maXJtd2FyZSgpIHRvIHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KCkuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXRsaW5rIGRldmxpbmsgYW5kIGV0aHRvb2wgZmxhc2ggdXBkYXRlIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdXNpbmcgbW9jayBuZXR3b3JrIGRldmljZXMgbGlrZSBuZXRkZXZzaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkZXZsaW5rIGZsYXNoIHVwZGF0ZSBoYW5kbGVycyAoYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgIGFuZCBgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYCkgdG8gdXNlIGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgpYCBpbnN0ZWFkIG9mIGByZXF1ZXN0X2Zpcm13YXJlKClgLCBhdm9pZGluZyB0aGUgZmFsbGJhY2sgdG8gdGhlIHVzZXJtb2RlIGhlbHBlciB3aGVuIHJlcXVlc3RpbmcgZmlybXdhcmUgZmlsZXMuXG5cbkJvdGggY2FsbCBzaXRlcyB6ZXJvLWluaXRpYWxpemUgdGhlaXIgc3RhY2sgc3RydWN0dXJlcyAoYHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgcGFyYW1zID0ge307YCkuIE9uIGZhaWx1cmUsIHRoZSByZXR1cm4gY29kZSBpcyBjaGVja2VkIGFuZCBleGVjdXRpb24gZXhpdHMgd2l0aG91dCByZWFkaW5nIGBwYXJhbXMuZndgLiBPbiBzdWNjZXNzLCB0aGUgZmlybXdhcmUgc3RydWN0IHBvaW50ZXIgaXMgc2V0IGJ5IHRoZSBmaXJtd2FyZSBsb2FkZXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZSwgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiwgYW5kIHN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2Y4MzgwNDhhMDQ0NjU4ZjRlNmZmNjNjM2E2MzlhMWNmZTdiMjk3MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDQ6NTQ6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9kZXYuYyBiL25ldC9kZXZsaW5rL2Rldi5jCmluZGV4IDU1OTU5YjBmZjVhYjQuLmI4NWJiMDJhOWU4MDcgMTAwNjQ0Ci0tLSBhL25ldC9kZXZsaW5rL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kZXZsaW5rL2Rldi5jCkBAIC0xMTY5LDcgJiM0MzsxMTY5LDcgQEAgaW50IGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAogCW5sYV9maWxlX25hbWUgPSBpbmZvLSZndDthdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX0ZJTEVfTkFNRV07CiAJZmlsZV9uYW1lID0gbmxhX2RhdGEobmxhX2ZpbGVfbmFtZSk7Ci0JcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmYW1wO3BhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLSZndDtkZXYpOwomIzQzOwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgmYW1wO3BhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLSZndDtkZXYpOwogCWlmIChyZXQpIHsKIAkJTkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLSZndDtleHRhY2ssIG5sYV9maWxlX25hbWUsCiAJCQkJICAgICYjMzQ7ZmFpbGVkIHRvIGxvY2F0ZSB0aGUgcmVxdWVzdGVkIGZpcm13YXJlIGZpbGUmIzM0Oyk7CkBAIC0xMjQ1LDcgJiM0MzsxMjQ1LDcgQEAgaW50IGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgY29uc3QgY2hhciAqZmlsZV9uYW1lKQogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmYW1wO3BhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLSZndDtkZXYpOwomIzQzOwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgmYW1wO3BhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLSZndDtkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VubG9jazsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERldmxpbmsgRmxhc2ggVXBkYXRlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgbW92aW5nIGZyb20gdXNpbmcgYHJlcXVlc3RfZmlybXdhcmVgIHRvIGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdGAgd2l0aGluIHRoZSBgbmV0L2RldmxpbmsvZGV2LmNgIGZpbGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBhbmQgYGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZWAgZnVuY3Rpb25zLiBUaGlzIHNjcmVhbXMgZmlybXdhcmUgdXBkYXRlIGhhbmRsaW5nLCBhbmQgZ2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWVzLCBJJiMzOTtkIGJldCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHVwZGF0aW5nIHRoZSBmaXJtd2FyZSBvbiBhIGRldmljZSBtYW5hZ2VkIGJ5IHRoZSBkZXZsaW5rIHN1YnN5c3RlbS4KClRoZSByZWFsIHF1ZXN0aW9uIGlzICp3aHkqIHRoZSBzd2l0Y2g/IGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdGAgc3VnZ2VzdHMgYSBtb3JlIGRpcmVjdCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBmaXJtd2FyZSBibG9iLCBwb3RlbnRpYWxseSBieXBhc3Npbmcgc29tZSBpbnRlcm1lZGlhcnkgY2FjaGluZyBvciBwcm9jZXNzaW5nIHN0ZXBzIHRoYXQgYHJlcXVlc3RfZmlybXdhcmVgIG1pZ2h0IGhhdmUgaW52b2x2ZWQuIElzIHRoaXMgYWJvdXQgcGVyZm9ybWFuY2UsIHNlY3VyaXR5LCBvciBwZXJoYXBzIHRvIHN1cHBvcnQgYSBuZXcgZGlyZWN0LWFjY2VzcyBtb2RlIGluIHRoZSBoYXJkd2FyZT8KClRvIGdldCBhIGJldHRlciBncmlwIG9uIHRoaXMsIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQuIExldCBtZSBwdWxsIHVwIHRoYXQgc2VjdGlvbiBvZiBgbmV0L2RldmxpbmsvZGV2LmNgIHVzaW5nIGByZWFkLWZpbGVgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDExNjAgdG8gMTI2MC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRob3NlIGByZXF1ZXN0X2Zpcm13YXJlYCBjYWxscyB3ZXJlIGJlaW5nIHVzZWQgYmVmb3JlLCBhbmQgd2hhdCBvdGhlciBjaGFuZ2VzIG9yIGNvbnNpZGVyYXRpb25zIGFyZSBiZWluZyBoYW5kbGVkIGFsb25nIHdpdGggdGhlIHVwZGF0ZSBwcm9jZXNzLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgd2hlbiBpdCBjb21lcyB0byBmaXJtd2FyZSB1cGRhdGVzIGFuZCB0aGUgZGV2bGluayBzdWJzeXN0ZW0uIFRoaXMgY291bGQgYmUgYSBzaWduaWZpY2FudCBjaGFuZ2UgYW5kIG5lZWRzIGEgZnVsbCByZXZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2RldmxpbmsvZGV2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDExMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTUwOlx0XHRcdFx0XHRcdCAgaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX0NPTVBPTkVOVF0sXG4xMTUxOlx0XHRcdFx0XHRcdCAgXHUwMDI2cGFyYW1zLmNvbXBvbmVudCwgaW5mby1cdTAwM2VleHRhY2spO1xuMTE1MjpcdFx0aWYgKHJldClcbjExNTM6XHRcdFx0cmV0dXJuIHJldDtcbjExNTQ6XHRcbjExNTU6XHRcdHN1cHBvcnRlZF9wYXJhbXMgPSBkZXZsaW5rLVx1MDAzZW9wcy1cdTAwM2VzdXBwb3J0ZWRfZmxhc2hfdXBkYXRlX3BhcmFtcztcbjExNTY6XHRcbjExNTc6XHRcdG5sYV9vdmVyd3JpdGVfbWFzayA9IGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9PVkVSV1JJVEVfTUFTS107XG4xMTU4Olx0XHRpZiAobmxhX292ZXJ3cml0ZV9tYXNrKSB7XG4xMTU5Olx0XHRcdHN0cnVjdCBubGFfYml0ZmllbGQzMiBzZWN0aW9ucztcbjExNjA6XHRcbjExNjE6XHRcdFx0aWYgKCEoc3VwcG9ydGVkX3BhcmFtcyBcdTAwMjYgREVWTElOS19TVVBQT1JUX0ZMQVNIX1VQREFURV9PVkVSV1JJVEVfTUFTSykpIHtcbjExNjI6XHRcdFx0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLCBubGFfb3ZlcndyaXRlX21hc2ssXG4xMTYzOlx0XHRcdFx0XHRcdCAgICBcJiMzNDtvdmVyd3JpdGUgc2V0dGluZ3MgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcJiMzNDspO1xuMTE2NDpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjExNjU6XHRcdFx0fVxuMTE2NjpcdFx0XHRzZWN0aW9ucyA9IG5sYV9nZXRfYml0ZmllbGQzMihubGFfb3ZlcndyaXRlX21hc2spO1xuMTE2NzpcdFx0XHRwYXJhbXMub3ZlcndyaXRlX21hc2sgPSBzZWN0aW9ucy52YWx1ZSBcdTAwMjYgc2VjdGlvbnMuc2VsZWN0b3I7XG4xMTY4Olx0XHR9XG4xMTY5Olx0XG4xMTcwOlx0XHRubGFfZmlsZV9uYW1lID0gaW5mby1cdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX0ZJTEVfTkFNRV07XG4xMTcxOlx0XHRmaWxlX25hbWUgPSBubGFfZGF0YShubGFfZmlsZV9uYW1lKTtcbjExNzI6XHRcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFx1MDAyNnBhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLVx1MDAzZWRldik7XG4xMTczOlx0XHRpZiAocmV0KSB7XG4xMTc0Olx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cdTAwM2VleHRhY2ssIG5sYV9maWxlX25hbWUsXG4xMTc1Olx0XHRcdFx0XHQgICAgXCYjMzQ7ZmFpbGVkIHRvIGxvY2F0ZSB0aGUgcmVxdWVzdGVkIGZpcm13YXJlIGZpbGVcJiMzNDspO1xuMTE3NjpcdFx0XHRyZXR1cm4gcmV0O1xuMTE3NzpcdFx0fVxuMTE3ODpcdFxuMTE3OTpcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfYmVnaW5fbm90aWZ5KGRldmxpbmspO1xuMTE4MDpcdFx0cmV0ID0gZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlZmxhc2hfdXBkYXRlKGRldmxpbmssIFx1MDAyNnBhcmFtcywgaW5mby1cdTAwM2VleHRhY2spO1xuMTE4MTpcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfZW5kX25vdGlmeShkZXZsaW5rKTtcbjExODI6XHRcbjExODM6XHRcdHJlbGVhc2VfZmlybXdhcmUocGFyYW1zLmZ3KTtcbjExODQ6XHRcbjExODU6XHRcdHJldHVybiByZXQ7XG4xMTg2Olx0fVxuMTE4NzpcdFxuMTE4ODpcdHN0YXRpYyB2b2lkIF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuMTE4OTpcdFx0XHRcdFx0XHQgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbjExOTA6XHR7XG4xMTkxOlx0XHRzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSByZXEgPSB7fTtcbjExOTI6XHRcdGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYXR0cjtcbjExOTM6XHRcdHN0cnVjdCBza19idWZmICptc2c7XG4xMTk0Olx0XHRpbnQgcmVtLCBlcnI7XG4xMTk1Olx0XG4xMTk2Olx0XHRtc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTtcbjExOTc6XHRcdGlmICghbXNnKVxuMTE5ODpcdFx0XHRyZXR1cm47XG4xMTk5Olx0XG4xMjAwOlx0XHRyZXEubXNnID0gbXNnO1xuMTIwMTpcdFx0ZXJyID0gZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlaW5mb19nZXQoZGV2bGluaywgXHUwMDI2cmVxLCBOVUxMKTtcbjEyMDI6XHRcdGlmIChlcnIpXG4xMjAzOlx0XHRcdGdvdG8gZnJlZV9tc2c7XG4xMjA0Olx0XG4xMjA1Olx0XHRubGFfZm9yX2VhY2hfYXR0cl90eXBlKG5sYXR0ciwgREVWTElOS19BVFRSX0lORk9fVkVSU0lPTl9SVU5OSU5HLFxuMTIwNjpcdFx0XHRcdCAgICAgICAodm9pZCAqKW1zZy1cdTAwM2VkYXRhLCBtc2ctXHUwMDNlbGVuLCByZW0pIHtcbjEyMDc6XHRcdFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqa3Y7XG4xMjA4Olx0XHRcdGludCByZW1fa3Y7XG4xMjA5Olx0XG4xMjEwOlx0XHRcdG5sYV9mb3JfZWFjaF9uZXN0ZWRfdHlwZShrdiwgREVWTElOS19BVFRSX0lORk9fVkVSU0lPTl9WQUxVRSxcbjEyMTE6XHRcdFx0XHRcdFx0IG5sYXR0ciwgcmVtX2t2KSB7XG4xMjEyOlx0XHRcdFx0c3RybGNhdChidWYsIG5sYV9kYXRhKGt2KSwgbGVuKTtcbjEyMTM6XHRcdFx0XHRzdHJsY2F0KGJ1ZiwgXCYjMzQ7IFwmIzM0OywgbGVuKTtcbjEyMTQ6XHRcdFx0fVxuMTIxNTpcdFx0fVxuMTIxNjpcdGZyZWVfbXNnOlxuMTIxNzpcdFx0bmxtc2dfY29uc3VtZShtc2cpO1xuMTIxODpcdH1cbjEyMTk6XHRcbjEyMjA6XHR2b2lkIGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbjEyMjE6XHRcdFx0XHRcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4xMjIyOlx0e1xuMTIyMzpcdFx0aWYgKCFkZXZsaW5rLVx1MDAzZW9wcy1cdTAwM2VpbmZvX2dldClcbjEyMjQ6XHRcdFx0cmV0dXJuO1xuMTIyNTpcdFxuMTIyNjpcdFx0ZGV2bF9sb2NrKGRldmxpbmspO1xuMTIyNzpcdFx0aWYgKGRldmxfaXNfcmVnaXN0ZXJlZChkZXZsaW5rKSlcbjEyMjg6XHRcdFx0X19kZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oZGV2bGluaywgYnVmLCBsZW4pO1xuMTIyOTpcdFx0ZGV2bF91bmxvY2soZGV2bGluayk7XG4xMjMwOlx0fVxuMTIzMTpcdFxuMTIzMjpcdGludCBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSlcbjEyMzM6XHR7XG4xMjM0Olx0XHRzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zIHBhcmFtcyA9IHt9O1xuMTIzNTpcdFx0aW50IHJldDtcbjEyMzY6XHRcbjEyMzc6XHRcdGRldmxfbG9jayhkZXZsaW5rKTtcbjEyMzg6XHRcdGlmICghZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspKSB7XG4xMjM5Olx0XHRcdHJldCA9IC1FTk9ERVY7XG4xMjQwOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjEyNDE6XHRcdH1cbjEyNDI6XHRcbjEyNDM6XHRcdGlmICghZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlZmxhc2hfdXBkYXRlKSB7XG4xMjQ0Olx0XHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuMTI0NTpcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4xMjQ2Olx0XHR9XG4xMjQ3Olx0XG4xMjQ4Olx0XHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cdTAwM2VkZXYpO1xuMTI0OTpcdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI3NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhlIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBmdW5jdGlvbiwgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqRGlzc2VjdGluZyB0aGUgYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBmdW5jdGlvbi4gTXkgZmlyc3QgdGhvdWdodCBpczogdGhpcyBpcyB3aGVyZSB0aGUgKmFjdGlvbiogaGFwcGVucywgdGhlIG1lYXQgb2YgdGhlIGZsYXNoIHVwZGF0ZSB2aWEgbmV0bGluay4gSSBiZXQgdGhpcyBpcyB0aGUgY2VudHJhbCBjb250cm9sIHBvaW50LiBJdOKAmXMgZ290ICYjMzQ7ZG9pdCYjMzQ7IGluIHRoZSBuYW1lLCBzbyBJIGV4cGVjdCBhIGxvdCBvZiBzdGVwcyBhcmUgaGFuZGxlZCBoZXJlLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdywgdGhlIGlucHV0IHZhbGlkYXRpb24sIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuCgpJJiMzOTttIHRoaW5raW5nLCAmIzM0O0ZsYXNoIHVwZGF0ZSYjMzQ7IHN1Z2dlc3RzIHBvdGVudGlhbGx5IHJpc2t5IG9wZXJhdGlvbnMgLSB0aGlzIGJldHRlciBoYXZlIHNvbWUgc2VyaW91cyBlcnJvciBjaGVja2luZyBhbmQgc2FmZXR5IG1lY2hhbmlzbXMgaW4gcGxhY2UuIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGZvciBicmlja2luZyB0aGUgZGV2aWNlIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLiBXaGF0JiMzOTtzIHRoZSBwcm90b2NvbCBoZXJlPyBJcyB0aGVyZSBhIGNoZWNrc3VtIGludm9sdmVkPyBIb3cgZG9lcyBpdCBoYW5kbGUgcGFydGlhbCB1cGRhdGVzPyBQb3dlciBmYWlsdXJlcz8gSSBoYXZlIGEgbG90IG9mIHF1ZXN0aW9ucy4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGxpbmNocGluIG9mIGFueSBmbGFzaC1yZWxhdGVkIG5ldGxpbmsgb3BlcmF0aW9ucywgc28gaXQgbmVlZHMgdG8gYmUgYnVsbGV0cHJvb2YuIEkmIzM5O2xsIG5lZWQgdG8ga25vdzogaG93IGFyZSBjb21tYW5kcyBwYXJzZWQsIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGRhdGEsIGFuZCBob3cgdGhhdCB0cmFuc2xhdGVzIHRvIGRldmljZSBvcGVyYXRpb25zLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQuIExldCYjMzk7cyBzZWUgaG93IGl0IGtpY2tzIG9mZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDQ6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZGV2bGluay9kZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEzMDpcdFx0KnBfY29tcG9uZW50ID0gY29tcG9uZW50O1xuMTEzMTpcdFx0cmV0dXJuIDA7XG4xMTMyOlx0fVxuMTEzMzpcdFxuMTEzNDpcdGludCBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4xMTM1Olx0e1xuMTEzNjpcdFx0c3RydWN0IG5sYXR0ciAqbmxhX292ZXJ3cml0ZV9tYXNrLCAqbmxhX2ZpbGVfbmFtZTtcbjExMzc6XHRcdHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgcGFyYW1zID0ge307XG4xMTM4Olx0XHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IGRldmxpbmtfbmxfY3R4KGluZm8pLVx1MDAzZWRldmxpbms7XG4xMTM5Olx0XHRjb25zdCBjaGFyICpmaWxlX25hbWU7XG4xMTQwOlx0XHR1MzIgc3VwcG9ydGVkX3BhcmFtcztcbjExNDE6XHRcdGludCByZXQ7XG4xMTQyOlx0XG4xMTQzOlx0XHRpZiAoIWRldmxpbmstXHUwMDNlb3BzLVx1MDAzZWZsYXNoX3VwZGF0ZSlcbjExNDQ6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTE0NTpcdFxuMTE0NjpcdFx0aWYgKEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9GSUxFX05BTUUpKVxuMTE0NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExNDg6XHRcbjExNDk6XHRcdHJldCA9IGRldmxpbmtfZmxhc2hfY29tcG9uZW50X2dldChkZXZsaW5rLFxuMTE1MDpcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9DT01QT05FTlRdLFxuMTE1MTpcdFx0XHRcdFx0XHQgIFx1MDAyNnBhcmFtcy5jb21wb25lbnQsIGluZm8tXHUwMDNlZXh0YWNrKTtcbjExNTI6XHRcdGlmIChyZXQpXG4xMTUzOlx0XHRcdHJldHVybiByZXQ7XG4xMTU0Olx0XG4xMTU1Olx0XHRzdXBwb3J0ZWRfcGFyYW1zID0gZGV2bGluay1cdTAwM2VvcHMtXHUwMDNlc3VwcG9ydGVkX2ZsYXNoX3VwZGF0ZV9wYXJhbXM7XG4xMTU2Olx0XG4xMTU3Olx0XHRubGFfb3ZlcndyaXRlX21hc2sgPSBpbmZvLVx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9GTEFTSF9VUERBVEVfT1ZFUldSSVRFX01BU0tdO1xuMTE1ODpcdFx0aWYgKG5sYV9vdmVyd3JpdGVfbWFzaykge1xuMTE1OTpcdFx0XHRzdHJ1Y3QgbmxhX2JpdGZpZWxkMzIgc2VjdGlvbnM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMjgKCQkJCQkJCW91dHB1dDogMTk1CgkJCQkJCQl0aG91Z2h0czogNjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBGaXJtd2FyZSBMb2FkaW5nIENoYW5nZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgY2hhbmdpbmcgaG93IGZpcm13YXJlIGlzIGxvYWRlZCBpbiB0aGUgYGRldmxpbmtgIGZsYXNoIHVwZGF0ZSBwYXRocywgc3BlY2lmaWNhbGx5IHN3aXRjaGluZyBmcm9tIGByZXF1ZXN0X2Zpcm13YXJlKClgIHRvIGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgpYC4gVGhlIGdvYWw/IFRvIGJ5cGFzcyB0aGUgdXNlcm1vZGUgaGVscGVyIGZhbGxiYWNrIGFuZCBzaWxlbmNlIHRob3NlIG5vaXN5IHdhcm5pbmdzIHdoZW4gYSBmaXJtd2FyZSBmaWxlIGlzbiYjMzk7dCBmb3VuZCByaWdodCBhd2F5LiBObyBuZWVkIHRvIHRyaWdnZXIgYSB1c2VyIHNwYWNlIGV2ZW50IHdoZW4gd2Uga25vdyBpdCB3b24mIzM5O3QgYmUgdGhlcmUuCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpcyBtZW1vcnkgc2FmZXR5LiBBbSBJIG9wZW5pbmcgdXAgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGJ5IGRvaW5nIHRoaXM/IExldCYjMzk7cyBkaXNzZWN0IGl0LiBGaXJzdCBvZmYsIGBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zIHBhcmFtcyA9IHt9O2AgZ2V0cyB6ZXJvLWluaXRpYWxpemVkLiBOaWNlLiBgcmVxdWVzdF9maXJtd2FyZV9kaXJlY3RgIHNldHMgYHBhcmFtcy5md2AgKm9ubHkqIG9uIHN1Y2Nlc3MuIElmIHRoZXJlJiMzOTtzIGFuIGVycm9yLCBgcmV0YCBpcyBub24temVybywgYW5kIHdlIGJhaWwgb3V0IGltbWVkaWF0ZWx5LCBuZXZlciB0b3VjaGluZyBgcGFyYW1zLmZ3YC4gVGhlIGZpcm13YXJlIGxvYWRpbmcgaXRzZWxmIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBmaXJtd2FyZSBsb2FkZXIgc3Vic3lzdGVtIGFueXdheS4gTm8gbmV3IGJ1ZmZlcnMgYXJlIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZC4gTm8gcGFkZGluZyBzaGVuYW5pZ2FucyBhcmUgaGFwcGVuaW5nLiBUaGUgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIHJlbWFpbiB1bmNoYW5nZWQuIE5vcGUsIEkgZG9uJiMzOTt0IHNlZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgaGVyZS4KCk5vdywgbGV0JiMzOTtzIGJlIHRob3JvdWdoIGFuZCBjaGVjayBhZ2FpbnN0IHRoZSBLTVNBTiByZXF1aXJlbWVudHMuIFJlbWVtYmVyLCB3ZSBuZWVkIGBOZWVkc0tNU0FOPXRydWVgIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aXRoIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBmaWVsZHMuIE5vdCBoZXJlLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIE5vcGUuCjMuICBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBsYXRlciByZWFkLiBObyB3YXkuCjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBOb3BlLCB0aGUgZmlybXdhcmUgbG9hZGVyIGhhbmRsZXMgdGhlIGJ1ZmZlciwgYW5kIHdlJiMzOTtyZSBqdXN0IGdldHRpbmcgYSBwb2ludGVyIHRvIGl0LgoKU2luY2Ugbm9uZSBvZiB0aG9zZSBhcHBseSwgYE5lZWRzS01TQU49ZmFsc2VgLiBXZSYjMzk7cmUgZ29vZC4KCk9rYXksIGxldCYjMzk7cyBzdW1tYXJpemUgdGhlIHJlYXNvbmluZyBmb3IgdGhpcyBjaGFuZ2U6CjEuIFRoZSBwYXRjaCBzd2l0Y2hlcyB0aGUgZmlybXdhcmUgbG9hZGluZyBpbiBkZXZsaW5rIGZsYXNoIHVwZGF0ZSBwYXRocyBmcm9tIGByZXF1ZXN0X2Zpcm13YXJlKClgIHRvIGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgpYC4KMi4gTWVtb3J5IGlzIHNhZmUuIFRoZSBwYXJhbXMgYXJlIHplcm8taW5pdGlhbGl6ZWQsIGFuZCB0aGUgZmlybXdhcmUgcG9pbnRlciBpcyBvbmx5IHNldCBvbiBzdWNjZXNzLiBFcnJvciBwYXRocyBhcmUgaGFuZGxlZCBncmFjZWZ1bGx5LgozLiBObyBLTVNBTiBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZXhwb3NlIGhlYXAvc3RhY2sgbWVtb3J5IHRvIHRoZSB1c2VyLCBvciBleHBvc2UgcGFkZGluZy4gU3RhbmRhcmQgZGV0ZWN0b3JzIChLQVNBTikgd2lsbCBjYXRjaCBhbnkgaXNzdWVzIChsaWtlIHVzZS1hZnRlci1mcmVlLCBvciBudWxsLXBvaW50ZXIgZGVyZWZlcmVuY2UpLgoKQWxyaWdodCwgSSB0aGluayBJJiMzOTt2ZSBnb3QgYSBzb2xpZCBjYXNlIGhlcmUuIExldCYjMzk7cyBnZXQgdGhpcyBtb3Zpbmcgd2l0aCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkZXZsaW5rIGZsYXNoIHVwZGF0ZSBoYW5kbGVycyAoYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgIGFuZCBgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYCkgdG8gdXNlIGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgpYCBpbnN0ZWFkIG9mIGByZXF1ZXN0X2Zpcm13YXJlKClgLCBhdm9pZGluZyB0aGUgZmFsbGJhY2sgdG8gdGhlIHVzZXJtb2RlIGhlbHBlciB3aGVuIHJlcXVlc3RpbmcgZmlybXdhcmUgZmlsZXMuXG5cbkJvdGggY2FsbCBzaXRlcyB6ZXJvLWluaXRpYWxpemUgdGhlaXIgc3RhY2sgc3RydWN0dXJlcyAoYHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgcGFyYW1zID0ge307YCkuIE9uIGZhaWx1cmUsIHRoZSByZXR1cm4gY29kZSBpcyBjaGVja2VkIGFuZCBleGVjdXRpb24gZXhpdHMgd2l0aG91dCByZWFkaW5nIGBwYXJhbXMuZndgLiBPbiBzdWNjZXNzLCB0aGUgZmlybXdhcmUgc3RydWN0IHBvaW50ZXIgaXMgc2V0IGJ5IHRoZSBmaXJtd2FyZSBsb2FkZXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZSwgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiwgYW5kIHN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRldmxpbmsgZmxhc2ggdXBkYXRlIGhhbmRsZXJzIChgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgYW5kIGBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVgKSB0byB1c2UgYHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KClgIGluc3RlYWQgb2YgYHJlcXVlc3RfZmlybXdhcmUoKWAsIGF2b2lkaW5nIHRoZSBmYWxsYmFjayB0byB0aGUgdXNlcm1vZGUgaGVscGVyIHdoZW4gcmVxdWVzdGluZyBmaXJtd2FyZSBmaWxlcy5cblxuQm90aCBjYWxsIHNpdGVzIHplcm8taW5pdGlhbGl6ZSB0aGVpciBzdGFjayBzdHJ1Y3R1cmVzIChgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyBwYXJhbXMgPSB7fTtgKS4gT24gZmFpbHVyZSwgdGhlIHJldHVybiBjb2RlIGlzIGNoZWNrZWQgYW5kIGV4ZWN1dGlvbiBleGl0cyB3aXRob3V0IHJlYWRpbmcgYHBhcmFtcy5md2AuIE9uIHN1Y2Nlc3MsIHRoZSBmaXJtd2FyZSBzdHJ1Y3QgcG9pbnRlciBpcyBzZXQgYnkgdGhlIGZpcm13YXJlIGxvYWRlci4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLCBhbmQgc3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDowOS4wNTI2NDU5NDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDc3OTAzOTk1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWTElOS1wiLFxuICAgIFwiTkVUREVWU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdFwiLFxuICAgIFwiZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkZXZsaW5rIGZsYXNoIHVwZGF0ZSBoYW5kbGVycyAoYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgIGFuZCBgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYCkgdG8gdXNlIGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgpYCBpbnN0ZWFkIG9mIGByZXF1ZXN0X2Zpcm13YXJlKClgLCBhdm9pZGluZyB0aGUgZmFsbGJhY2sgdG8gdGhlIHVzZXJtb2RlIGhlbHBlciB3aGVuIHJlcXVlc3RpbmcgZmlybXdhcmUgZmlsZXMuXFxuXFxuQm90aCBjYWxsIHNpdGVzIHplcm8taW5pdGlhbGl6ZSB0aGVpciBzdGFjayBzdHJ1Y3R1cmVzIChgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyBwYXJhbXMgPSB7fTtgKS4gT24gZmFpbHVyZSwgdGhlIHJldHVybiBjb2RlIGlzIGNoZWNrZWQgYW5kIGV4ZWN1dGlvbiBleGl0cyB3aXRob3V0IHJlYWRpbmcgYHBhcmFtcy5md2AuIE9uIHN1Y2Nlc3MsIHRoZSBmaXJtd2FyZSBzdHJ1Y3QgcG9pbnRlciBpcyBzZXQgYnkgdGhlIGZpcm13YXJlIGxvYWRlci4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLCBhbmQgc3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHN3aXRjaGVzIHRoZSBmaXJtd2FyZSByZXF1ZXN0IG1ldGhvZCBpbiBkZXZsaW5rIGZsYXNoIHVwZGF0ZSByb3V0aW5lcyBmcm9tIHJlcXVlc3RfZmlybXdhcmUoKSB0byByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgpLiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0bGluayBkZXZsaW5rIGFuZCBldGh0b29sIGZsYXNoIHVwZGF0ZSBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzIHVzaW5nIG1vY2sgbmV0d29yayBkZXZpY2VzIGxpa2UgbmV0ZGV2c2ltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDowOS4wNTI2NTA2MDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNTQzMzcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdmODM4MDQ4YTA0NDY1OGY0ZTZmZjYzYzNhNjM5YTFjZmU3YjI5NzNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBTZXAgMyAwNDo1NDowOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9kZXYuYyBiL25ldC9kZXZsaW5rL2Rldi5jXFxuaW5kZXggNTU5NTliMGZmNWFiNC4uYjg1YmIwMmE5ZTgwNyAxMDA2NDRcXG4tLS0gYS9uZXQvZGV2bGluay9kZXYuY1xcbisrKyBiL25ldC9kZXZsaW5rL2Rldi5jXFxuQEAgLTExNjksNyArMTE2OSw3IEBAIGludCBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIFxcbiBcXHRubGFfZmlsZV9uYW1lID0gaW5mby1cXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9GSUxFX05BTUVdO1xcbiBcXHRmaWxlX25hbWUgPSBubGFfZGF0YShubGFfZmlsZV9uYW1lKTtcXG4tXFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZShcXHUwMDI2cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstXFx1MDAzZWRldik7XFxuK1xcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFxcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cXHUwMDNlZGV2KTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXFx1MDAzZWV4dGFjaywgbmxhX2ZpbGVfbmFtZSxcXG4gXFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gbG9jYXRlIHRoZSByZXF1ZXN0ZWQgZmlybXdhcmUgZmlsZVxcXCIpO1xcbkBAIC0xMjQ1LDcgKzEyNDUsNyBAQCBpbnQgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBjb25zdCBjaGFyICpmaWxlX25hbWUpXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZShcXHUwMDI2cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstXFx1MDAzZWRldik7XFxuK1xcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFxcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cXHUwMDNlZGV2KTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MDkuMzc4NzQ3NjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU2MDczNDQ4Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9ERVZMSU5LXCIsXG4gICAgXCJORVRERVZTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0XCIsXG4gICAgXCJkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzd2l0Y2hlcyB0aGUgZmlybXdhcmUgcmVxdWVzdCBtZXRob2QgaW4gZGV2bGluayBmbGFzaCB1cGRhdGUgcm91dGluZXMgZnJvbSByZXF1ZXN0X2Zpcm13YXJlKCkgdG8gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoKS4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldGxpbmsgZGV2bGluayBhbmQgZXRodG9vbCBmbGFzaCB1cGRhdGUgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB1c2luZyBtb2NrIG5ldHdvcmsgZGV2aWNlcyBsaWtlIG5ldGRldnNpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2Y4MzgwNDhhMDQ0NjU4ZjRlNmZmNjNjM2E2MzlhMWNmZTdiMjk3M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDQ6NTQ6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvZGV2bGluay9kZXYuYyBiL25ldC9kZXZsaW5rL2Rldi5jXG5pbmRleCA1NTk1OWIwZmY1YWI0Li5iODViYjAyYTllODA3IDEwMDY0NFxuLS0tIGEvbmV0L2RldmxpbmsvZGV2LmNcbisrKyBiL25ldC9kZXZsaW5rL2Rldi5jXG5AQCAtMTE2OSw3ICsxMTY5LDcgQEAgaW50IGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiBcbiBcdG5sYV9maWxlX25hbWUgPSBpbmZvLVx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9GTEFTSF9VUERBVEVfRklMRV9OQU1FXTtcbiBcdGZpbGVfbmFtZSA9IG5sYV9kYXRhKG5sYV9maWxlX25hbWUpO1xuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZShcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cdTAwM2VkZXYpO1xuK1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstXHUwMDNlZGV2KTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihpbmZvLVx1MDAzZWV4dGFjaywgbmxhX2ZpbGVfbmFtZSxcbiBcdFx0XHRcdCAgICBcImZhaWxlZCB0byBsb2NhdGUgdGhlIHJlcXVlc3RlZCBmaXJtd2FyZSBmaWxlXCIpO1xuQEAgLTEyNDUsNyArMTI0NSw3IEBAIGludCBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSlcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZShcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cdTAwM2VkZXYpO1xuK1x0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXHUwMDI2cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstXHUwMDNlZGV2KTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjU0OjA5LjM3ODc0OTE1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMyMDcxMzczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGV2bGluayBGaXJtd2FyZSBVcGRhdGUqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwYXRjaCBoZXJlLCBsZXQncyBkaXZlIHJpZ2h0IGluLiBUaGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBgbmV0L2RldmxpbmsvZGV2LmNgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSd2ZSBhbHRlcmVkIHRoZSBmaXJtd2FyZSByZXF1ZXN0IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBhbmQgYGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZWAgZnVuY3Rpb25zLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgc3dhcHBpbmcgYHJlcXVlc3RfZmlybXdhcmVgIGZvciBgcmVxdWVzdF9maXJtd2FyZV9kaXJlY3RgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuXG5cblRvIHByb3Blcmx5IGFzc2VzcyB0aGlzLCBJJ20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvZGV2bGluay9kZXYuY2AuIEknbGwgdXNlIG15IHRvb2xzIChwcm9iYWJseSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmApIGFuZCB6ZXJvIGluIG9uIHRoZSB2aWNpbml0eSBvZiBsaW5lcyAxMTY5IGFuZCAxMjQ1LiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZC4gSSdtIGtlZW4gdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGV5J3JlIG1ha2luZyB0aGlzIHN3aXRjaC4gSXMgdGhpcyBhYm91dCBpbXByb3ZlZCBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIG9yIGEgZGlmZmVyZW5jZSBpbiB0aGUgd2F5IHRoZSBmaXJtd2FyZSBsb2FkaW5nIGlzIGhhbmRsZWQ/IENvbnRleHQgaXMga2V5IGhlcmUsIEkgbmVlZCB0byBzZWUgaG93IHRoZSBmaXJtd2FyZSByZXF1ZXN0IG1lY2hhbmlzbSBpcyB1c2VkIHdpdGhpbiB0aGUgb3ZlcmFsbCBkZXZsaW5rIGZyYW1ld29yayB0byBmdWxseSBldmFsdWF0ZSB0aGUgcGF0Y2gncyBpbXBhY3QuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IGFsbCB0aGUgY29ycmVjdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjYwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MTUuNjk5NDY2NjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjcyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2RldmxpbmsvZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1MCxcbiAgXCJMaW5lQ291bnRcIjogMTEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTA6XFx0XFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX0NPTVBPTkVOVF0sXFxuMTE1MTpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZwYXJhbXMuY29tcG9uZW50LCBpbmZvLVxcdTAwM2VleHRhY2spO1xcbjExNTI6XFx0XFx0aWYgKHJldClcXG4xMTUzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE1NDpcXHRcXG4xMTU1OlxcdFxcdHN1cHBvcnRlZF9wYXJhbXMgPSBkZXZsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZXN1cHBvcnRlZF9mbGFzaF91cGRhdGVfcGFyYW1zO1xcbjExNTY6XFx0XFxuMTE1NzpcXHRcXHRubGFfb3ZlcndyaXRlX21hc2sgPSBpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX09WRVJXUklURV9NQVNLXTtcXG4xMTU4OlxcdFxcdGlmIChubGFfb3ZlcndyaXRlX21hc2spIHtcXG4xMTU5OlxcdFxcdFxcdHN0cnVjdCBubGFfYml0ZmllbGQzMiBzZWN0aW9ucztcXG4xMTYwOlxcdFxcbjExNjE6XFx0XFx0XFx0aWYgKCEoc3VwcG9ydGVkX3BhcmFtcyBcXHUwMDI2IERFVkxJTktfU1VQUE9SVF9GTEFTSF9VUERBVEVfT1ZFUldSSVRFX01BU0spKSB7XFxuMTE2MjpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXFx1MDAzZWV4dGFjaywgbmxhX292ZXJ3cml0ZV9tYXNrLFxcbjExNjM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJvdmVyd3JpdGUgc2V0dGluZ3MgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcXFwiKTtcXG4xMTY0OlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTY1OlxcdFxcdFxcdH1cXG4xMTY2OlxcdFxcdFxcdHNlY3Rpb25zID0gbmxhX2dldF9iaXRmaWVsZDMyKG5sYV9vdmVyd3JpdGVfbWFzayk7XFxuMTE2NzpcXHRcXHRcXHRwYXJhbXMub3ZlcndyaXRlX21hc2sgPSBzZWN0aW9ucy52YWx1ZSBcXHUwMDI2IHNlY3Rpb25zLnNlbGVjdG9yO1xcbjExNjg6XFx0XFx0fVxcbjExNjk6XFx0XFxuMTE3MDpcXHRcXHRubGFfZmlsZV9uYW1lID0gaW5mby1cXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9GSUxFX05BTUVdO1xcbjExNzE6XFx0XFx0ZmlsZV9uYW1lID0gbmxhX2RhdGEobmxhX2ZpbGVfbmFtZSk7XFxuMTE3MjpcXHRcXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcXHUwMDI2cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstXFx1MDAzZWRldik7XFxuMTE3MzpcXHRcXHRpZiAocmV0KSB7XFxuMTE3NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXFx1MDAzZWV4dGFjaywgbmxhX2ZpbGVfbmFtZSxcXG4xMTc1OlxcdFxcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIGxvY2F0ZSB0aGUgcmVxdWVzdGVkIGZpcm13YXJlIGZpbGVcXFwiKTtcXG4xMTc2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE3NzpcXHRcXHR9XFxuMTE3ODpcXHRcXG4xMTc5OlxcdFxcdGRldmxpbmtfZmxhc2hfdXBkYXRlX2JlZ2luX25vdGlmeShkZXZsaW5rKTtcXG4xMTgwOlxcdFxcdHJldCA9IGRldmxpbmstXFx1MDAzZW9wcy1cXHUwMDNlZmxhc2hfdXBkYXRlKGRldmxpbmssIFxcdTAwMjZwYXJhbXMsIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuMTE4MTpcXHRcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9lbmRfbm90aWZ5KGRldmxpbmspO1xcbjExODI6XFx0XFxuMTE4MzpcXHRcXHRyZWxlYXNlX2Zpcm13YXJlKHBhcmFtcy5mdyk7XFxuMTE4NDpcXHRcXG4xMTg1OlxcdFxcdHJldHVybiByZXQ7XFxuMTE4NjpcXHR9XFxuMTE4NzpcXHRcXG4xMTg4OlxcdHN0YXRpYyB2b2lkIF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxcbjExODk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuMTE5MDpcXHR7XFxuMTE5MTpcXHRcXHRzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSByZXEgPSB7fTtcXG4xMTkyOlxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYXR0cjtcXG4xMTkzOlxcdFxcdHN0cnVjdCBza19idWZmICptc2c7XFxuMTE5NDpcXHRcXHRpbnQgcmVtLCBlcnI7XFxuMTE5NTpcXHRcXG4xMTk2OlxcdFxcdG1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xcbjExOTc6XFx0XFx0aWYgKCFtc2cpXFxuMTE5ODpcXHRcXHRcXHRyZXR1cm47XFxuMTE5OTpcXHRcXG4xMjAwOlxcdFxcdHJlcS5tc2cgPSBtc2c7XFxuMTIwMTpcXHRcXHRlcnIgPSBkZXZsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZWluZm9fZ2V0KGRldmxpbmssIFxcdTAwMjZyZXEsIE5VTEwpO1xcbjEyMDI6XFx0XFx0aWYgKGVycilcXG4xMjAzOlxcdFxcdFxcdGdvdG8gZnJlZV9tc2c7XFxuMTIwNDpcXHRcXG4xMjA1OlxcdFxcdG5sYV9mb3JfZWFjaF9hdHRyX3R5cGUobmxhdHRyLCBERVZMSU5LX0FUVFJfSU5GT19WRVJTSU9OX1JVTk5JTkcsXFxuMTIwNjpcXHRcXHRcXHRcXHQgICAgICAgKHZvaWQgKiltc2ctXFx1MDAzZWRhdGEsIG1zZy1cXHUwMDNlbGVuLCByZW0pIHtcXG4xMjA3OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmt2O1xcbjEyMDg6XFx0XFx0XFx0aW50IHJlbV9rdjtcXG4xMjA5OlxcdFxcbjEyMTA6XFx0XFx0XFx0bmxhX2Zvcl9lYWNoX25lc3RlZF90eXBlKGt2LCBERVZMSU5LX0FUVFJfSU5GT19WRVJTSU9OX1ZBTFVFLFxcbjEyMTE6XFx0XFx0XFx0XFx0XFx0XFx0IG5sYXR0ciwgcmVtX2t2KSB7XFxuMTIxMjpcXHRcXHRcXHRcXHRzdHJsY2F0KGJ1ZiwgbmxhX2RhdGEoa3YpLCBsZW4pO1xcbjEyMTM6XFx0XFx0XFx0XFx0c3RybGNhdChidWYsIFxcXCIgXFxcIiwgbGVuKTtcXG4xMjE0OlxcdFxcdFxcdH1cXG4xMjE1OlxcdFxcdH1cXG4xMjE2OlxcdGZyZWVfbXNnOlxcbjEyMTc6XFx0XFx0bmxtc2dfY29uc3VtZShtc2cpO1xcbjEyMTg6XFx0fVxcbjEyMTk6XFx0XFxuMTIyMDpcXHR2b2lkIGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4xMjIxOlxcdFxcdFxcdFxcdFxcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuMTIyMjpcXHR7XFxuMTIyMzpcXHRcXHRpZiAoIWRldmxpbmstXFx1MDAzZW9wcy1cXHUwMDNlaW5mb19nZXQpXFxuMTIyNDpcXHRcXHRcXHRyZXR1cm47XFxuMTIyNTpcXHRcXG4xMjI2OlxcdFxcdGRldmxfbG9jayhkZXZsaW5rKTtcXG4xMjI3OlxcdFxcdGlmIChkZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXFxuMTIyODpcXHRcXHRcXHRfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihkZXZsaW5rLCBidWYsIGxlbik7XFxuMTIyOTpcXHRcXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG4xMjMwOlxcdH1cXG4xMjMxOlxcdFxcbjEyMzI6XFx0aW50IGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgY29uc3QgY2hhciAqZmlsZV9uYW1lKVxcbjEyMzM6XFx0e1xcbjEyMzQ6XFx0XFx0c3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyBwYXJhbXMgPSB7fTtcXG4xMjM1OlxcdFxcdGludCByZXQ7XFxuMTIzNjpcXHRcXG4xMjM3OlxcdFxcdGRldmxfbG9jayhkZXZsaW5rKTtcXG4xMjM4OlxcdFxcdGlmICghZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspKSB7XFxuMTIzOTpcXHRcXHRcXHRyZXQgPSAtRU5PREVWO1xcbjEyNDA6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjEyNDE6XFx0XFx0fVxcbjEyNDI6XFx0XFxuMTI0MzpcXHRcXHRpZiAoIWRldmxpbmstXFx1MDAzZW9wcy1cXHUwMDNlZmxhc2hfdXBkYXRlKSB7XFxuMTI0NDpcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4xMjQ1OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMjQ2OlxcdFxcdH1cXG4xMjQ3OlxcdFxcbjEyNDg6XFx0XFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXFx1MDAyNnBhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLVxcdTAwM2VkZXYpO1xcbjEyNDk6XFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MTUuNjk5NTk2MDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDQ5Mjc5NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGRldmxpbmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gYGRldmxpbmtgLiBSaWdodCwgaXQncyBhIG5ldGxpbmsgaW50ZXJmYWNlIHNwZWNpZmljYWxseSBmb3IgbmV0d29yayBkZXZpY2VzLCBpbXBsZW1lbnRlZCB1bmRlciBlaXRoZXIgYE5FVF9ERVZMSU5LYCBvciB0aGUgb3ZlcmFyY2hpbmcgYE5FVGAgY29uZmlnIG9wdGlvbnMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogaG93IGlzIHRoaXMgdGhpbmcgYWN0dWFsbHkgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHN0YXR1cy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSdsbCBzdGFydCBieSBjaGVja2luZyBgbmV0L2RldmxpbmsvS2NvbmZpZ2AgZGlyZWN0bHksIGFzc3VtaW5nIHRoYXTigJlzIHdoZXJlIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBkZXZsaW5rYCB3b3VsZCByZXNpZGUuIElmIHRoYXQgY29tZXMgdXAgZW1wdHksIG9yIHByb3ZpZGVzIGFuIGluY29tcGxldGUgcGljdHVyZSwgdGhlbiBJIG5lZWQgdG8gY29uc2lkZXIgY2hlY2tpbmcgdGhlIG1vcmUgZ2VuZXJhbCBgbmV0L0tjb25maWdgIGZpbGUuIFNvbWV0aW1lcyBkZXBlbmRlbmNpZXMgYXJlIGRlZmluZWQgYXQgYSBoaWdoZXIgbGV2ZWwuIElmIGl0J3Mgc3RpbGwgdW5jbGVhciwgSSB3aWxsIHRoZW4gZXhwYW5kIG15IHNlYXJjaCBhbmQgc2NhbiBgbmV0L01ha2VmaWxlYC4gSSBhbSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIGBkZXZsaW5rYCBpcyBhbHdheXMgYnVpbHQgd2hlbiBgTkVUYCBvciBgTkVUX0RFVkxJTktgIGFyZSBlbmFibGVkLCBvciBpZiBpdCBjYW4gYmUgZGlzYWJsZWQgb3IgYnVpbHQgYXMgYSBtb2R1bGUuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBidWlsZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MTguMTQ4ODgyNDU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODI1ODkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZsaW5rXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMTEyMSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubmV0L01ha2VmaWxlPTI1PW9iai0kKENPTkZJR19CUklER0UpXFx0XFx0Kz0gYnJpZGdlL1xcbm5ldC9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfTkVUX0RFVkxJTkspXFx0Kz0gZGV2bGluay9cXG5uZXQvTWFrZWZpbGUtMjctb2JqLXlcXHRcXHRcXHRcXHQrPSBkc2EvXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xNTQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luZGlyZWN0X2NhbGxfd3JhcHBlci5oXFx1MDAzZVxcbm5ldC9jb3JlL2Rldi5jOjE1NTojaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG5uZXQvY29yZS9kZXYuYy0xNTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFxcdTAwM2VcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEwMTI4PWludCBkZXZfZ2V0X3BoeXNfcG9ydF9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDEzOC1cXHR9XFxubmV0L2NvcmUvZGV2LmM6MTAxMzk6XFx0cmV0dXJuIGRldmxpbmtfY29tcGF0X3BoeXNfcG9ydF9uYW1lX2dldChkZXYsIG5hbWUsIGxlbik7XFxubmV0L2NvcmUvZGV2LmMtMTAxNDAtfVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTAxNTI9aW50IG5ldGlmX2dldF9wb3J0X3BhcmVudF9pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTAxNjYtXFxubmV0L2NvcmUvZGV2LmM6MTAxNjc6XFx0ZXJyID0gZGV2bGlua19jb21wYXRfc3dpdGNoX2lkX2dldChkZXYsIHBwaWQpO1xcbm5ldC9jb3JlL2Rldi5jLTEwMTY4LVxcdGlmICghcmVjdXJzZSB8fCBlcnIgIT0gLUVPUE5PVFNVUFApXFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0zMy0jaW5jbHVkZSBcXHUwMDNjbmV0L2Ryb3ByZWFzb24uaFxcdTAwM2VcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzozNDojaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0zNS1cXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTM3LSNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvbmFwaS5oXFx1MDAzZVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjM4OiNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvZGV2bGluay5oXFx1MDAzZVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTM5LVxcbi0tXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9MTA5PXN0cnVjdCBuZXRfZG1fYWxlcnRfb3BzIHtcXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTExNy1cXHR2b2lkICgqaHdfd29ya19pdGVtX2Z1bmMpKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MTE4OlxcdHZvaWQgKCpod190cmFwX3Byb2JlKSh2b2lkICppZ25vcmUsIGNvbnN0IHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTExOS1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjEyMDpcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZGV2bGlua190cmFwX21ldGFkYXRhICptZXRhZGF0YSk7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMTIxLX07XFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz0xMjM9c3RydWN0IG5ldF9kbV9za2JfY2Ige1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTEyNC1cXHR1bmlvbiB7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MTI1OlxcdFxcdHN0cnVjdCBkZXZsaW5rX3RyYXBfbWV0YWRhdGEgKmh3X21ldGFkYXRhO1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTEyNi1cXHRcXHR2b2lkICpwYztcXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTQzNz1zdGF0aWMgdm9pZFxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjQzODpuZXRfZG1faHdfdHJhcF9zdW1tYXJ5X3Byb2JlKHZvaWQgKmlnbm9yZSwgY29uc3Qgc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtNDM5LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo0NDA6XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZGV2bGlua190cmFwX21ldGFkYXRhICptZXRhZGF0YSlcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy00NDEte1xcbi0tXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9NzQyPXN0YXRpYyBzaXplX3RcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo3NDM6bmV0X2RtX2Zsb3dfYWN0aW9uX2Nvb2tpZV9zaXplKGNvbnN0IHN0cnVjdCBkZXZsaW5rX3RyYXBfbWV0YWRhdGEgKmh3X21ldGFkYXRhKVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTc0NC17XFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz03NTA9bmV0X2RtX2h3X3BhY2tldF9yZXBvcnRfc2l6ZShzaXplX3QgcGF5bG9hZF9sZW4sXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6NzUxOlxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqaHdfbWV0YWRhdGEpXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtNzUyLXtcXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTc3OD1zdGF0aWMgaW50IG5ldF9kbV9od19wYWNrZXRfcmVwb3J0X2ZpbGwoc3RydWN0IHNrX2J1ZmYgKm1zZyxcXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTc4MC17XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6NzgxOlxcdHN0cnVjdCBkZXZsaW5rX3RyYXBfbWV0YWRhdGEgKmh3X21ldGFkYXRhO1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTc4Mi1cXHRzdHJ1Y3QgbmxhdHRyICphdHRyO1xcbi0tXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtODQ1LVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjg0NjpzdGF0aWMgc3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6ODQ3Om5ldF9kbV9od19tZXRhZGF0YV9jb3B5KGNvbnN0IHN0cnVjdCBkZXZsaW5rX3RyYXBfbWV0YWRhdGEgKm1ldGFkYXRhKVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTg0OC17XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtODQ5LVxcdGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9jb29raWUgKmZhX2Nvb2tpZTtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo4NTA6XFx0c3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqaHdfbWV0YWRhdGE7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtODUxLVxcdGNvbnN0IGNoYXIgKnRyYXBfZ3JvdXBfbmFtZTtcXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTg5ND1zdGF0aWMgdm9pZFxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjg5NTpuZXRfZG1faHdfbWV0YWRhdGFfZnJlZShzdHJ1Y3QgZGV2bGlua190cmFwX21ldGFkYXRhICpod19tZXRhZGF0YSlcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy04OTYte1xcbi0tXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9OTA0PXN0YXRpYyB2b2lkIG5ldF9kbV9od19wYWNrZXRfcmVwb3J0KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtOTA1LXtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo5MDY6XFx0c3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqaHdfbWV0YWRhdGE7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtOTA3LVxcdHN0cnVjdCBza19idWZmICptc2c7XFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz05NTg9c3RhdGljIHZvaWRcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo5NTk6bmV0X2RtX2h3X3RyYXBfcGFja2V0X3Byb2JlKHZvaWQgKmlnbm9yZSwgY29uc3Qgc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtOTYwLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjk2MTpcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqbWV0YWRhdGEpXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtOTYyLXtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzo5NjM6XFx0c3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqbl9od19tZXRhZGF0YTtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy05NjQtXFx0a3RpbWVfdCB0c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpO1xcbi0tXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM9MTAyMz1zdGF0aWMgaW50IG5ldF9kbV9od19wcm9iZV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgbmV0X2RtX2FsZXJ0X29wcyAqb3BzKVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTEwMjQte1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjEwMjU6XFx0cmV0dXJuIHJlZ2lzdGVyX3RyYWNlX2RldmxpbmtfdHJhcF9yZXBvcnQob3BzLVxcdTAwM2Vod190cmFwX3Byb2JlLCBOVUxMKTtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMDI2LX1cXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTEwMjg9c3RhdGljIHZvaWQgbmV0X2RtX2h3X3Byb2JlX3VucmVnaXN0ZXIoY29uc3Qgc3RydWN0IG5ldF9kbV9hbGVydF9vcHMgKm9wcylcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMDI5LXtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzoxMDMwOlxcdHVucmVnaXN0ZXJfdHJhY2VfZGV2bGlua190cmFwX3JlcG9ydChvcHMtXFx1MDAzZWh3X3RyYXBfcHJvYmUsIE5VTEwpO1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jLTEwMzEtXFx0dHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCk7XFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYz0xMDQ0PXN0YXRpYyBpbnQgbmV0X2RtX2h3X21vbml0b3Jfc3RhcnQoc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMTA3Mi1cXHRpZiAocmMpIHtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYzoxMDczOlxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJGYWlsZWQgdG8gY29ubmVjdCBwcm9iZSB0byBkZXZsaW5rX3RyYXBfcHJvYmUoKSB0cmFjZXBvaW50XFxcIik7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMTA3NC1cXHRcXHRnb3RvIGVycl9tb2R1bGVfcHV0O1xcbi0tXFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMTA4OC1cXHRcXHR3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoXFx1MDAyNmh3X2RhdGEtXFx1MDAzZWRyb3BfcXVldWUpKSkge1xcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jOjEwODk6XFx0XFx0XFx0c3RydWN0IGRldmxpbmtfdHJhcF9tZXRhZGF0YSAqaHdfbWV0YWRhdGE7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmMtMTA5MC1cXG4tLVxcbm5ldC9jb3JlL2Ryb3BfbW9uaXRvci5jPTExMDA9c3RhdGljIHZvaWQgbmV0X2RtX2h3X21vbml0b3Jfc3RvcChzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMTIyLVxcdFxcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShcXHUwMDI2aHdfZGF0YS1cXHUwMDNlZHJvcF9xdWV1ZSkpKSB7XFxubmV0L2NvcmUvZHJvcF9tb25pdG9yLmM6MTEyMzpcXHRcXHRcXHRzdHJ1Y3QgZGV2bGlua190cmFwX21ldGFkYXRhICpod19tZXRhZGF0YTtcXG5uZXQvY29yZS9kcm9wX21vbml0b3IuYy0xMTI0LVxcbi0tXFxubmV0L2NvcmUvbmV0LXN5c2ZzLmM9NzAxPXN0YXRpYyB1bW9kZV90IG5ldGRldl9waHlzX2lzX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy03MTEtXFx0XFx0aWYgKCFuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19nZXRfcGh5c19wb3J0X25hbWUgXFx1MDAyNlxcdTAwMjZcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo3MTI6XFx0XFx0ICAgICFuZXRkZXYtXFx1MDAzZWRldmxpbmtfcG9ydClcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy03MTMtXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvY29yZS9uZXQtc3lzZnMuYy03MTUtXFx0XFx0aWYgKCFuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19nZXRfcG9ydF9wYXJlbnRfaWQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvY29yZS9uZXQtc3lzZnMuYzo3MTY6XFx0XFx0ICAgICFuZXRkZXYtXFx1MDAzZWRldmxpbmtfcG9ydClcXG5uZXQvY29yZS9uZXQtc3lzZnMuYy03MTctXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy01Ni0jaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcXHUwMDNlXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6NTc6I2luY2x1ZGUgXFx1MDAzY25ldC9kZXZsaW5rLmhcXHUwMDNlXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtNTgtI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYz0xMjkyPXN0YXRpYyBzaXplX3QgcnRubF9wcm90b19kb3duX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEzMDEtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTMwMjpzdGF0aWMgc2l6ZV90IHJ0bmxfZGV2bGlua19wb3J0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMzAzLXtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEzMDUtXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTMwNjpcXHRpZiAoZGV2LVxcdTAwM2VkZXZsaW5rX3BvcnQpXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MTMwNzpcXHRcXHRzaXplICs9IGRldmxpbmtfbmxfcG9ydF9oYW5kbGVfc2l6ZShkZXYtXFx1MDAzZWRldmxpbmtfcG9ydCk7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMTMwOC1cXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTEzMzY9c3RhdGljIG5vaW5saW5lIHNpemVfdCBpZl9ubG1zZ19zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0xMzk1LVxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKE1BWF9BRERSX0xFTikgLyogSUZMQV9QRVJNX0FERFJFU1MgKi9cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoxMzk2OlxcdCAgICAgICArIHJ0bmxfZGV2bGlua19wb3J0X3NpemUoZGV2KVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTEzOTctXFx0ICAgICAgICsgcnRubF9kcGxsX3Bpbl9zaXplKClcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTIwMzU9c3RhdGljIGludCBydG5sX2ZpbGxfcHJvdG9fZG93bihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA2My1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMDY0OnN0YXRpYyBpbnQgcnRubF9maWxsX2RldmxpbmtfcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwNjUtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwNjYte1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjIwNjc6XFx0c3RydWN0IG5sYXR0ciAqZGV2bGlua19wb3J0X25lc3Q7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA2OC1cXHRpbnQgcmV0O1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwNjktXFxubmV0L2NvcmUvcnRuZXRsaW5rLmM6MjA3MDpcXHRkZXZsaW5rX3BvcnRfbmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9ERVZMSU5LX1BPUlQpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjIwNzE6XFx0aWYgKCFkZXZsaW5rX3BvcnRfbmVzdClcXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMDcyLVxcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxubmV0L2NvcmUvcnRuZXRsaW5rLmMtMjA3My1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYzoyMDc0OlxcdGlmIChkZXYtXFx1MDAzZWRldmxpbmtfcG9ydCkge1xcbm5ldC9jb3JlL3J0bmV0bGluay5jOjIwNzU6XFx0XFx0cmV0ID0gZGV2bGlua19ubF9wb3J0X2hhbmRsZV9maWxsKHNrYiwgZGV2LVxcdTAwM2VkZXZsaW5rX3BvcnQpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwNzYtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMDc5LVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjIwODA6XFx0bmxhX25lc3RfZW5kKHNrYiwgZGV2bGlua19wb3J0X25lc3QpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwODEtXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMDgzLW5lc3RfY2FuY2VsOlxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjIwODQ6XFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgZGV2bGlua19wb3J0X25lc3QpO1xcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIwODUtXFx0cmV0dXJuIHJldDtcXG4tLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jPTIxMTA9c3RhdGljIGludCBydG5sX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9ydG5ldGxpbmsuYy0yMjcyLVxcbm5ldC9jb3JlL3J0bmV0bGluay5jOjIyNzM6XFx0aWYgKHJ0bmxfZmlsbF9kZXZsaW5rX3BvcnQoc2tiLCBkZXYpKVxcbm5ldC9jb3JlL3J0bmV0bGluay5jLTIyNzQtXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmMtOC0jZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG5uZXQvZGV2bGluay9jb3JlLmM6OTojaW5jbHVkZSBcXHUwMDNjdHJhY2UvZXZlbnRzL2RldmxpbmsuaFxcdTAwM2VcXG5uZXQvZGV2bGluay9jb3JlLmMtMTAtXFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmMtMTItXFxubmV0L2RldmxpbmsvY29yZS5jOjEzOkVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoZGV2bGlua19od21zZyk7XFxubmV0L2RldmxpbmsvY29yZS5jOjE0OkVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoZGV2bGlua19od2Vycik7XFxubmV0L2RldmxpbmsvY29yZS5jOjE1OkVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoZGV2bGlua190cmFwX3JlcG9ydCk7XFxubmV0L2RldmxpbmsvY29yZS5jLTE2LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNzpERUZJTkVfWEFSUkFZX0ZMQUdTKGRldmxpbmtzLCBYQV9GTEFHU19BTExPQyk7XFxubmV0L2RldmxpbmsvY29yZS5jLTE4LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoxOTpzdGF0aWMgc3RydWN0IGRldmxpbmsgKmRldmxpbmtzX3hhX2dldCh1bnNpZ25lZCBsb25nIGluZGV4KVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMC17XFxubmV0L2RldmxpbmsvY29yZS5jOjIxOlxcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMi1cXG5uZXQvZGV2bGluay9jb3JlLmMtMjMtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNDpcXHRkZXZsaW5rID0geGFfZmluZChcXHUwMDI2ZGV2bGlua3MsIFxcdTAwMjZpbmRleCwgaW5kZXgsIERFVkxJTktfUkVHSVNURVJFRCk7XFxubmV0L2RldmxpbmsvY29yZS5jOjI1OlxcdGlmICghZGV2bGluayB8fCAhZGV2bGlua190cnlfZ2V0KGRldmxpbmspKVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNjpcXHRcXHRkZXZsaW5rID0gTlVMTDtcXG5uZXQvZGV2bGluay9jb3JlLmMtMjctXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxubmV0L2RldmxpbmsvY29yZS5jOjI4OlxcdHJldHVybiBkZXZsaW5rO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yOS19XFxubmV0L2RldmxpbmsvY29yZS5jLTMwLVxcbm5ldC9kZXZsaW5rL2NvcmUuYzozMTovKiBkZXZsaW5rX3JlbHMgeGFycmF5IGNvbnRhaW5zIDE6MSByZWxhdGlvbnNoaXBzIGJldHdlZW5cXG5uZXQvZGV2bGluay9jb3JlLmM6MzI6ICogZGV2bGluayBvYmplY3QgYW5kIHJlbGF0ZWQgbmVzdGVkIGRldmxpbmsgaW5zdGFuY2UuXFxubmV0L2RldmxpbmsvY29yZS5jLTMzLSAqIFRoZSB4YXJyYXkgaW5kZXggaXMgdXNlZCB0byBnZXQgdGhlIG5lc3RlZCBvYmplY3QgZnJvbVxcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTM1LSAqL1xcbm5ldC9kZXZsaW5rL2NvcmUuYzozNjpzdGF0aWMgREVGSU5FX1hBUlJBWV9GTEFHUyhkZXZsaW5rX3JlbHMsIFhBX0ZMQUdTX0FMTE9DMSk7XFxubmV0L2RldmxpbmsvY29yZS5jLTM3LVxcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTM5LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzo0MDpzdHJ1Y3QgZGV2bGlua19yZWwge1xcbm5ldC9kZXZsaW5rL2NvcmUuYy00MS1cXHR1MzIgaW5kZXg7XFxubmV0L2RldmxpbmsvY29yZS5jLTQyLVxcdHJlZmNvdW50X3QgcmVmY291bnQ7XFxubmV0L2RldmxpbmsvY29yZS5jOjQzOlxcdHUzMiBkZXZsaW5rX2luZGV4O1xcbm5ldC9kZXZsaW5rL2NvcmUuYy00NC1cXHRzdHJ1Y3Qge1xcbm5ldC9kZXZsaW5rL2NvcmUuYzo0NTpcXHRcXHR1MzIgZGV2bGlua19pbmRleDtcXG5uZXQvZGV2bGluay9jb3JlLmMtNDYtXFx0XFx0dTMyIG9ial9pbmRleDtcXG5uZXQvZGV2bGluay9jb3JlLmM6NDc6XFx0XFx0ZGV2bGlua19yZWxfbm90aWZ5X2NiX3QgKm5vdGlmeV9jYjtcXG5uZXQvZGV2bGluay9jb3JlLmM6NDg6XFx0XFx0ZGV2bGlua19yZWxfY2xlYW51cF9jYl90ICpjbGVhbnVwX2NiO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy00OS1cXHRcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG5vdGlmeV93b3JrO1xcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTUyLVxcbm5ldC9kZXZsaW5rL2NvcmUuYzo1MzpzdGF0aWMgdm9pZCBkZXZsaW5rX3JlbF9mcmVlKHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy01NC17XFxubmV0L2RldmxpbmsvY29yZS5jOjU1OlxcdHhhX2VyYXNlKFxcdTAwMjZkZXZsaW5rX3JlbHMsIHJlbC1cXHUwMDNlaW5kZXgpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy01Ni1cXHRrZnJlZShyZWwpO1xcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTU4LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzo1OTpzdGF0aWMgdm9pZCBfX2RldmxpbmtfcmVsX2dldChzdHJ1Y3QgZGV2bGlua19yZWwgKnJlbClcXG5uZXQvZGV2bGluay9jb3JlLmMtNjAte1xcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTYzLVxcbm5ldC9kZXZsaW5rL2NvcmUuYzo2NDpzdGF0aWMgdm9pZCBfX2RldmxpbmtfcmVsX3B1dChzdHJ1Y3QgZGV2bGlua19yZWwgKnJlbClcXG5uZXQvZGV2bGluay9jb3JlLmMtNjUte1xcbm5ldC9kZXZsaW5rL2NvcmUuYy02Ni1cXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZyZWwtXFx1MDAzZXJlZmNvdW50KSlcXG5uZXQvZGV2bGluay9jb3JlLmM6Njc6XFx0XFx0ZGV2bGlua19yZWxfZnJlZShyZWwpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy02OC19XFxubmV0L2RldmxpbmsvY29yZS5jLTY5LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzo3MDpzdHJ1Y3QgZGV2bGluayAqX19tdXN0X2NoZWNrIGRldmxpbmtfbmVzdGVkX2luX2dldF9sb2NrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy03MS17XFxubmV0L2RldmxpbmsvY29yZS5jOjcyOlxcdGRldmxfYXNzZXJ0X2xvY2tlZChkZXZsaW5rKTtcXG5uZXQvZGV2bGluay9jb3JlLmM6NzM6XFx0aWYgKCFkZXZsaW5rLVxcdTAwM2VyZWwpXFxubmV0L2RldmxpbmsvY29yZS5jLTc0LVxcdFxcdHJldHVybiBOVUxMO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzo3NTpcXHRkZXZsaW5rID0gZGV2bGlua3NfeGFfZ2V0KGRldmxpbmstXFx1MDAzZXJlbC1cXHUwMDNlbmVzdGVkX2luLmRldmxpbmtfaW5kZXgpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzo3NjpcXHRpZiAoIWRldmxpbmspXFxubmV0L2RldmxpbmsvY29yZS5jLTc3LVxcdFxcdHJldHVybiBOVUxMO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzo3ODpcXHRkZXZsX2xvY2soZGV2bGluayk7XFxubmV0L2RldmxpbmsvY29yZS5jOjc5OlxcdGlmIChkZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXFxubmV0L2RldmxpbmsvY29yZS5jOjgwOlxcdFxcdHJldHVybiBkZXZsaW5rO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzo4MTpcXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG5uZXQvZGV2bGluay9jb3JlLmM6ODI6XFx0ZGV2bGlua19wdXQoZGV2bGluayk7XFxubmV0L2RldmxpbmsvY29yZS5jLTgzLVxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTg1LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzo4NjpzdGF0aWMgdm9pZCBkZXZsaW5rX3JlbF9uZXN0ZWRfaW5fbm90aWZ5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy04Ny17XFxubmV0L2RldmxpbmsvY29yZS5jOjg4OlxcdHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZXZsaW5rX3JlbCxcXG5uZXQvZGV2bGluay9jb3JlLmMtODktXFx0XFx0XFx0XFx0XFx0ICAgICAgIG5lc3RlZF9pbi5ub3RpZnlfd29yay53b3JrKTtcXG5uZXQvZGV2bGluay9jb3JlLmM6OTA6XFx0c3RydWN0IGRldmxpbmsgKmRldmxpbms7XFxubmV0L2RldmxpbmsvY29yZS5jLTkxLVxcbm5ldC9kZXZsaW5rL2NvcmUuYzo5MjpcXHRkZXZsaW5rID0gZGV2bGlua3NfeGFfZ2V0KHJlbC1cXHUwMDNlbmVzdGVkX2luLmRldmxpbmtfaW5kZXgpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzo5MzpcXHRpZiAoIWRldmxpbmspXFxubmV0L2RldmxpbmsvY29yZS5jLTk0LVxcdFxcdGdvdG8gcmVsX3B1dDtcXG5uZXQvZGV2bGluay9jb3JlLmM6OTU6XFx0aWYgKCFkZXZsX3RyeWxvY2soZGV2bGluaykpIHtcXG5uZXQvZGV2bGluay9jb3JlLmM6OTY6XFx0XFx0ZGV2bGlua19wdXQoZGV2bGluayk7XFxubmV0L2RldmxpbmsvY29yZS5jLTk3LVxcdFxcdGdvdG8gcmVzY2hlZHVsZV93b3JrO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy05OC1cXHR9XFxubmV0L2RldmxpbmsvY29yZS5jOjk5OlxcdGlmICghZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspKSB7XFxubmV0L2RldmxpbmsvY29yZS5jOjEwMDpcXHRcXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG5uZXQvZGV2bGluay9jb3JlLmM6MTAxOlxcdFxcdGRldmxpbmtfcHV0KGRldmxpbmspO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMDItXFx0XFx0Z290byByZWxfcHV0O1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMDMtXFx0fVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoxMDQ6XFx0aWYgKCF4YV9nZXRfbWFyayhcXHUwMDI2ZGV2bGlua19yZWxzLCByZWwtXFx1MDAzZWluZGV4LCBERVZMSU5LX1JFTF9JTl9VU0UpKVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoxMDU6XFx0XFx0cmVsLVxcdTAwM2VuZXN0ZWRfaW4uY2xlYW51cF9jYihkZXZsaW5rLCByZWwtXFx1MDAzZW5lc3RlZF9pbi5vYmpfaW5kZXgsIHJlbC1cXHUwMDNlaW5kZXgpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoxMDY6XFx0cmVsLVxcdTAwM2VuZXN0ZWRfaW4ubm90aWZ5X2NiKGRldmxpbmssIHJlbC1cXHUwMDNlbmVzdGVkX2luLm9ial9pbmRleCk7XFxubmV0L2RldmxpbmsvY29yZS5jOjEwNzpcXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG5uZXQvZGV2bGluay9jb3JlLmM6MTA4OlxcdGRldmxpbmtfcHV0KGRldmxpbmspO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMDktXFxubmV0L2RldmxpbmsvY29yZS5jLTExMC1yZWxfcHV0Olxcbm5ldC9kZXZsaW5rL2NvcmUuYzoxMTE6XFx0X19kZXZsaW5rX3JlbF9wdXQocmVsKTtcXG5uZXQvZGV2bGluay9jb3JlLmMtMTEyLVxcdHJldHVybjtcXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMTctXFxubmV0L2RldmxpbmsvY29yZS5jOjExODpzdGF0aWMgdm9pZCBkZXZsaW5rX3JlbF9uZXN0ZWRfaW5fbm90aWZ5X3dvcmtfc2NoZWR1bGUoc3RydWN0IGRldmxpbmtfcmVsICpyZWwpXFxubmV0L2RldmxpbmsvY29yZS5jLTExOS17XFxubmV0L2RldmxpbmsvY29yZS5jOjEyMDpcXHRfX2RldmxpbmtfcmVsX2dldChyZWwpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMjEtXFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZyZWwtXFx1MDAzZW5lc3RlZF9pbi5ub3RpZnlfd29yaywgMCk7XFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmMtMTIzLVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoxMjQ6c3RhdGljIHN0cnVjdCBkZXZsaW5rX3JlbCAqZGV2bGlua19yZWxfYWxsb2Modm9pZClcXG5uZXQvZGV2bGluay9jb3JlLmMtMTI1LXtcXG5uZXQvZGV2bGluay9jb3JlLmM6MTI2OlxcdHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMjctXFx0c3RhdGljIHUzMiBuZXh0O1xcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTEzMy1cXG5uZXQvZGV2bGluay9jb3JlLmM6MTM0OlxcdGVyciA9IHhhX2FsbG9jX2N5Y2xpYyhcXHUwMDI2ZGV2bGlua19yZWxzLCBcXHUwMDI2cmVsLVxcdTAwM2VpbmRleCwgcmVsLFxcbm5ldC9kZXZsaW5rL2NvcmUuYy0xMzUtXFx0XFx0XFx0ICAgICAgeGFfbGltaXRfMzJiLCBcXHUwMDI2bmV4dCwgR0ZQX0tFUk5FTCk7XFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmMtMTQyLVxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZyZWwtXFx1MDAzZW5lc3RlZF9pbi5ub3RpZnlfd29yayxcXG5uZXQvZGV2bGluay9jb3JlLmM6MTQzOlxcdFxcdFxcdCAgXFx1MDAyNmRldmxpbmtfcmVsX25lc3RlZF9pbl9ub3RpZnlfd29yayk7XFxubmV0L2RldmxpbmsvY29yZS5jLTE0NC1cXHRyZXR1cm4gcmVsO1xcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTE0Ni1cXG5uZXQvZGV2bGluay9jb3JlLmM6MTQ3OnN0YXRpYyB2b2lkIGRldmxpbmtfcmVsX3B1dChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcXG5uZXQvZGV2bGluay9jb3JlLmMtMTQ4LXtcXG5uZXQvZGV2bGluay9jb3JlLmM6MTQ5OlxcdHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsID0gZGV2bGluay1cXHUwMDNlcmVsO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0xNTAtXFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmMtMTUyLVxcdFxcdHJldHVybjtcXG5uZXQvZGV2bGluay9jb3JlLmM6MTUzOlxcdHhhX2NsZWFyX21hcmsoXFx1MDAyNmRldmxpbmtfcmVscywgcmVsLVxcdTAwM2VpbmRleCwgREVWTElOS19SRUxfSU5fVVNFKTtcXG5uZXQvZGV2bGluay9jb3JlLmM6MTU0OlxcdGRldmxpbmtfcmVsX25lc3RlZF9pbl9ub3RpZnlfd29ya19zY2hlZHVsZShyZWwpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNTU6XFx0X19kZXZsaW5rX3JlbF9wdXQocmVsKTtcXG5uZXQvZGV2bGluay9jb3JlLmM6MTU2OlxcdGRldmxpbmstXFx1MDAzZXJlbCA9IE5VTEw7XFxubmV0L2RldmxpbmsvY29yZS5jLTE1Ny19XFxubmV0L2RldmxpbmsvY29yZS5jLTE1OC1cXG5uZXQvZGV2bGluay9jb3JlLmM6MTU5OnZvaWQgZGV2bGlua19yZWxfbmVzdGVkX2luX2NsZWFyKHUzMiByZWxfaW5kZXgpXFxubmV0L2RldmxpbmsvY29yZS5jLTE2MC17XFxubmV0L2RldmxpbmsvY29yZS5jOjE2MTpcXHR4YV9jbGVhcl9tYXJrKFxcdTAwMjZkZXZsaW5rX3JlbHMsIHJlbF9pbmRleCwgREVWTElOS19SRUxfSU5fVVNFKTtcXG5uZXQvZGV2bGluay9jb3JlLmMtMTYyLX1cXG5uZXQvZGV2bGluay9jb3JlLmMtMTYzLVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNjQ6aW50IGRldmxpbmtfcmVsX25lc3RlZF9pbl9hZGQodTMyICpyZWxfaW5kZXgsIHUzMiBkZXZsaW5rX2luZGV4LFxcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNjU6XFx0XFx0XFx0ICAgICAgdTMyIG9ial9pbmRleCwgZGV2bGlua19yZWxfbm90aWZ5X2NiX3QgKm5vdGlmeV9jYixcXG5uZXQvZGV2bGluay9jb3JlLmM6MTY2OlxcdFxcdFxcdCAgICAgIGRldmxpbmtfcmVsX2NsZWFudXBfY2JfdCAqY2xlYW51cF9jYixcXG5uZXQvZGV2bGluay9jb3JlLmM6MTY3OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0xNjgte1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNjk6XFx0c3RydWN0IGRldmxpbmtfcmVsICpyZWwgPSBkZXZsaW5rX3JlbF9hbGxvYygpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0xNzAtXFxubmV0L2RldmxpbmsvY29yZS5jOjE3MTpcXHRBU1NFUlRfREVWTElOS19OT1RfUkVHSVNURVJFRChkZXZsaW5rKTtcXG5uZXQvZGV2bGluay9jb3JlLmMtMTcyLVxcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTE3NS1cXG5uZXQvZGV2bGluay9jb3JlLmM6MTc2OlxcdHJlbC1cXHUwMDNlZGV2bGlua19pbmRleCA9IGRldmxpbmstXFx1MDAzZWluZGV4O1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoxNzc6XFx0cmVsLVxcdTAwM2VuZXN0ZWRfaW4uZGV2bGlua19pbmRleCA9IGRldmxpbmtfaW5kZXg7XFxubmV0L2RldmxpbmsvY29yZS5jLTE3OC1cXHRyZWwtXFx1MDAzZW5lc3RlZF9pbi5vYmpfaW5kZXggPSBvYmpfaW5kZXg7XFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmMtMTgxLVxcdCpyZWxfaW5kZXggPSByZWwtXFx1MDAzZWluZGV4O1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoxODI6XFx0eGFfc2V0X21hcmsoXFx1MDAyNmRldmxpbmtfcmVscywgcmVsLVxcdTAwM2VpbmRleCwgREVWTElOS19SRUxfSU5fVVNFKTtcXG5uZXQvZGV2bGluay9jb3JlLmM6MTgzOlxcdGRldmxpbmstXFx1MDAzZXJlbCA9IHJlbDtcXG5uZXQvZGV2bGluay9jb3JlLmMtMTg0LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTE4Ny0vKipcXG5uZXQvZGV2bGluay9jb3JlLmM6MTg4OiAqIGRldmxpbmtfcmVsX25lc3RlZF9pbl9ub3RpZnkgLSBOb3RpZnkgdGhlIG9iamVjdCB0aGlzIGRldmxpbmtcXG5uZXQvZGV2bGluay9jb3JlLmMtMTg5LSAqXFx0XFx0XFx0XFx0ICBpbnN0YW5jZSBpcyBuZXN0ZWQgaW4uXFxubmV0L2RldmxpbmsvY29yZS5jOjE5MDogKiBAZGV2bGluazogZGV2bGlua1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0xOTEtICpcXG5uZXQvZGV2bGluay9jb3JlLmM6MTkyOiAqIFRoaXMgaXMgY2FsbGVkIHVwb24gbmV0d29yayBuYW1lc3BhY2UgY2hhbmdlIG9mIGRldmxpbmsgaW5zdGFuY2UuXFxubmV0L2RldmxpbmsvY29yZS5jOjE5MzogKiBJbiBjYXNlIHRoaXMgZGV2bGluayBpbnN0YW5jZSBpcyBuZXN0ZWQgaW4gYW5vdGhlciBkZXZsaW5rIG9iamVjdCxcXG5uZXQvZGV2bGluay9jb3JlLmMtMTk0LSAqIGEgbm90aWZpY2F0aW9uIG9mIGEgY2hhbmdlIG9mIHRoaXMgb2JqZWN0IHNob3VsZCBiZSBzZW50XFxubmV0L2RldmxpbmsvY29yZS5jOjE5NTogKiBvdmVyIG5ldGxpbmsuIFRoZSBwYXJlbnQgZGV2bGluayBpbnN0YW5jZSBsb2NrIG5lZWRzIHRvIGJlXFxubmV0L2RldmxpbmsvY29yZS5jLTE5Ni0gKiB0YWtlbiBkdXJpbmcgdGhlIG5vdGlmaWNhdGlvbiBwcmVwYXJhdGlvbi5cXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0xOTgtICovXFxubmV0L2RldmxpbmsvY29yZS5jOjE5OTp2b2lkIGRldmxpbmtfcmVsX25lc3RlZF9pbl9ub3RpZnkoc3RydWN0IGRldmxpbmsgKmRldmxpbmspXFxubmV0L2RldmxpbmsvY29yZS5jLTIwMC17XFxubmV0L2RldmxpbmsvY29yZS5jOjIwMTpcXHRzdHJ1Y3QgZGV2bGlua19yZWwgKnJlbCA9IGRldmxpbmstXFx1MDAzZXJlbDtcXG5uZXQvZGV2bGluay9jb3JlLmMtMjAyLVxcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTIwNC1cXHRcXHRyZXR1cm47XFxubmV0L2RldmxpbmsvY29yZS5jOjIwNTpcXHRkZXZsaW5rX3JlbF9uZXN0ZWRfaW5fbm90aWZ5X3dvcmtfc2NoZWR1bGUocmVsKTtcXG5uZXQvZGV2bGluay9jb3JlLmMtMjA2LX1cXG5uZXQvZGV2bGluay9jb3JlLmMtMjA3LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoyMDg6c3RhdGljIHN0cnVjdCBkZXZsaW5rX3JlbCAqZGV2bGlua19yZWxfZmluZCh1bnNpZ25lZCBsb25nIHJlbF9pbmRleClcXG5uZXQvZGV2bGluay9jb3JlLmMtMjA5LXtcXG5uZXQvZGV2bGluay9jb3JlLmM6MjEwOlxcdHJldHVybiB4YV9maW5kKFxcdTAwMjZkZXZsaW5rX3JlbHMsIFxcdTAwMjZyZWxfaW5kZXgsIHJlbF9pbmRleCxcXG5uZXQvZGV2bGluay9jb3JlLmMtMjExLVxcdFxcdCAgICAgICBERVZMSU5LX1JFTF9JTl9VU0UpO1xcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTIxMy1cXG5uZXQvZGV2bGluay9jb3JlLmM6MjE0OnN0YXRpYyBzdHJ1Y3QgZGV2bGluayAqZGV2bGlua19yZWxfZGV2bGlua19nZXQodTMyIHJlbF9pbmRleClcXG5uZXQvZGV2bGluay9jb3JlLmMtMjE1LXtcXG5uZXQvZGV2bGluay9jb3JlLmM6MjE2OlxcdHN0cnVjdCBkZXZsaW5rX3JlbCAqcmVsO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyMTc6XFx0dTMyIGRldmxpbmtfaW5kZXg7XFxubmV0L2RldmxpbmsvY29yZS5jLTIxOC1cXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMjAtXFx0XFx0cmV0dXJuIE5VTEw7XFxubmV0L2RldmxpbmsvY29yZS5jOjIyMTpcXHR4YV9sb2NrKFxcdTAwMjZkZXZsaW5rX3JlbHMpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyMjI6XFx0cmVsID0gZGV2bGlua19yZWxfZmluZChyZWxfaW5kZXgpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMjMtXFx0aWYgKHJlbClcXG5uZXQvZGV2bGluay9jb3JlLmM6MjI0OlxcdFxcdGRldmxpbmtfaW5kZXggPSByZWwtXFx1MDAzZWRldmxpbmtfaW5kZXg7XFxubmV0L2RldmxpbmsvY29yZS5jOjIyNTpcXHR4YV91bmxvY2soXFx1MDAyNmRldmxpbmtfcmVscyk7XFxubmV0L2RldmxpbmsvY29yZS5jLTIyNi1cXHRpZiAoIXJlbClcXG5uZXQvZGV2bGluay9jb3JlLmMtMjI3LVxcdFxcdHJldHVybiBOVUxMO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyMjg6XFx0cmV0dXJuIGRldmxpbmtzX3hhX2dldChkZXZsaW5rX2luZGV4KTtcXG5uZXQvZGV2bGluay9jb3JlLmMtMjI5LX1cXG5uZXQvZGV2bGluay9jb3JlLmMtMjMwLVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoyMzE6aW50IGRldmxpbmtfcmVsX2RldmxpbmtfaGFuZGxlX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG5uZXQvZGV2bGluay9jb3JlLmMtMjMyLVxcdFxcdFxcdFxcdCAgIHUzMiByZWxfaW5kZXgsIGludCBhdHRydHlwZSxcXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMzQte1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyMzU6XFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2bGlua19uZXQoZGV2bGluayk7XFxubmV0L2RldmxpbmsvY29yZS5jOjIzNjpcXHRzdHJ1Y3QgZGV2bGluayAqcmVsX2Rldmxpbms7XFxubmV0L2RldmxpbmsvY29yZS5jLTIzNy1cXHRpbnQgZXJyO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yMzgtXFxubmV0L2RldmxpbmsvY29yZS5jOjIzOTpcXHRyZWxfZGV2bGluayA9IGRldmxpbmtfcmVsX2RldmxpbmtfZ2V0KHJlbF9pbmRleCk7XFxubmV0L2RldmxpbmsvY29yZS5jOjI0MDpcXHRpZiAoIXJlbF9kZXZsaW5rKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNDEtXFx0XFx0cmV0dXJuIDA7XFxubmV0L2RldmxpbmsvY29yZS5jOjI0MjpcXHRlcnIgPSBkZXZsaW5rX25sX3B1dF9uZXN0ZWRfaGFuZGxlKG1zZywgbmV0LCByZWxfZGV2bGluaywgYXR0cnR5cGUpO1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNDM6XFx0ZGV2bGlua19wdXQocmVsX2RldmxpbmspO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNDQtXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgbXNnX3VwZGF0ZWQpXFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmMtMjQ4LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNDk6dm9pZCAqZGV2bGlua19wcml2KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNTAte1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNTE6XFx0cmV0dXJuIFxcdTAwMjZkZXZsaW5rLVxcdTAwM2Vwcml2O1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNTItfVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNTM6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bGlua19wcml2KTtcXG5uZXQvZGV2bGluay9jb3JlLmMtMjU0LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNTU6c3RydWN0IGRldmxpbmsgKnByaXZfdG9fZGV2bGluayh2b2lkICpwcml2KVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNTYte1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNTc6XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihwcml2LCBzdHJ1Y3QgZGV2bGluaywgcHJpdik7XFxubmV0L2RldmxpbmsvY29yZS5jLTI1OC19XFxubmV0L2RldmxpbmsvY29yZS5jOjI1OTpFWFBPUlRfU1lNQk9MX0dQTChwcml2X3RvX2RldmxpbmspO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNjAtXFxubmV0L2RldmxpbmsvY29yZS5jOjI2MTpzdHJ1Y3QgZGV2aWNlICpkZXZsaW5rX3RvX2Rldihjb25zdCBzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcXG5uZXQvZGV2bGluay9jb3JlLmMtMjYyLXtcXG5uZXQvZGV2bGluay9jb3JlLmM6MjYzOlxcdHJldHVybiBkZXZsaW5rLVxcdTAwM2VkZXY7XFxubmV0L2RldmxpbmsvY29yZS5jLTI2NC19XFxubmV0L2RldmxpbmsvY29yZS5jOjI2NTpFWFBPUlRfU1lNQk9MX0dQTChkZXZsaW5rX3RvX2Rldik7XFxubmV0L2RldmxpbmsvY29yZS5jLTI2Ni1cXG5uZXQvZGV2bGluay9jb3JlLmM6MjY3OmNvbnN0IGNoYXIgKmRldmxpbmtfYnVzX25hbWUoY29uc3Qgc3RydWN0IGRldmxpbmsgKmRldmxpbmspXFxubmV0L2RldmxpbmsvY29yZS5jLTI2OC17XFxubmV0L2RldmxpbmsvY29yZS5jOjI2OTpcXHRyZXR1cm4gZGV2bGluay1cXHUwMDNlZGV2ID8gZGV2bGluay1cXHUwMDNlZGV2LVxcdTAwM2VidXMtXFx1MDAzZW5hbWUgOiBERVZMSU5LX0lOREVYX0JVU19OQU1FO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNzAtfVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNzE6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bGlua19idXNfbmFtZSk7XFxubmV0L2RldmxpbmsvY29yZS5jLTI3Mi1cXG5uZXQvZGV2bGluay9jb3JlLmM6MjczOmNvbnN0IGNoYXIgKmRldmxpbmtfZGV2X25hbWUoY29uc3Qgc3RydWN0IGRldmxpbmsgKmRldmxpbmspXFxubmV0L2RldmxpbmsvY29yZS5jLTI3NC17XFxubmV0L2RldmxpbmsvY29yZS5jOjI3NTpcXHRyZXR1cm4gZGV2bGluay1cXHUwMDNlZGV2ID8gZGV2X25hbWUoZGV2bGluay1cXHUwMDNlZGV2KSA6IGRldmxpbmstXFx1MDAzZWRldl9uYW1lX2luZGV4O1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0yNzYtfVxcbm5ldC9kZXZsaW5rL2NvcmUuYzoyNzc6RVhQT1JUX1NZTUJPTF9HUEwoZGV2bGlua19kZXZfbmFtZSk7XFxubmV0L2RldmxpbmsvY29yZS5jLTI3OC1cXG5uZXQvZGV2bGluay9jb3JlLmM6Mjc5OmNvbnN0IGNoYXIgKmRldmxpbmtfZGV2X2RyaXZlcl9uYW1lKGNvbnN0IHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yODAte1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyODE6XFx0cmV0dXJuIGRldmxpbmstXFx1MDAzZWRldl9kcml2ZXItXFx1MDAzZW5hbWU7XFxubmV0L2RldmxpbmsvY29yZS5jLTI4Mi19XFxubmV0L2RldmxpbmsvY29yZS5jOjI4MzpFWFBPUlRfU1lNQk9MX0dQTChkZXZsaW5rX2Rldl9kcml2ZXJfbmFtZSk7XFxubmV0L2RldmxpbmsvY29yZS5jLTI4NC1cXG5uZXQvZGV2bGluay9jb3JlLmM6Mjg1OnN0cnVjdCBuZXQgKmRldmxpbmtfbmV0KGNvbnN0IHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yODYte1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyODc6XFx0cmV0dXJuIHJlYWRfcG5ldChcXHUwMDI2ZGV2bGluay1cXHUwMDNlX25ldCk7XFxubmV0L2RldmxpbmsvY29yZS5jLTI4OC19XFxubmV0L2RldmxpbmsvY29yZS5jOjI4OTpFWFBPUlRfU1lNQk9MX0dQTChkZXZsaW5rX25ldCk7XFxubmV0L2RldmxpbmsvY29yZS5jLTI5MC1cXG5uZXQvZGV2bGluay9jb3JlLmM6MjkxOnZvaWQgZGV2bF9hc3NlcnRfbG9ja2VkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0yOTIte1xcbm5ldC9kZXZsaW5rL2NvcmUuYzoyOTM6XFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2ZGV2bGluay1cXHUwMDNlbG9jayk7XFxubmV0L2RldmxpbmsvY29yZS5jLTI5NC19XFxubmV0L2RldmxpbmsvY29yZS5jPTI5NT1FWFBPUlRfU1lNQk9MX0dQTChkZXZsX2Fzc2VydF9sb2NrZWQpO1xcbi0tXFxubmV0L2RldmxpbmsvY29yZS5jLTI5OC0vKiBGb3IgdXNlIGluIGNvbmp1bmN0aW9uIHdpdGggTE9DS0RFUCBvbmx5IGUuZy4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCgpICovXFxubmV0L2RldmxpbmsvY29yZS5jOjI5OTpib29sIGRldmxfbG9ja19pc19oZWxkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMDAte1xcbm5ldC9kZXZsaW5rL2NvcmUuYzozMDE6XFx0cmV0dXJuIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2ZGV2bGluay1cXHUwMDNlbG9jayk7XFxubmV0L2RldmxpbmsvY29yZS5jLTMwMi19XFxubmV0L2RldmxpbmsvY29yZS5jPTMwMz1FWFBPUlRfU1lNQk9MX0dQTChkZXZsX2xvY2tfaXNfaGVsZCk7XFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmMtMzA1LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzozMDY6dm9pZCBkZXZsX2xvY2soc3RydWN0IGRldmxpbmsgKmRldmxpbmspXFxubmV0L2RldmxpbmsvY29yZS5jLTMwNy17XFxubmV0L2RldmxpbmsvY29yZS5jOjMwODpcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZsaW5rLVxcdTAwM2Vsb2NrKTtcXG5uZXQvZGV2bGluay9jb3JlLmMtMzA5LX1cXG5uZXQvZGV2bGluay9jb3JlLmM9MzEwPUVYUE9SVF9TWU1CT0xfR1BMKGRldmxfbG9jayk7XFxubmV0L2RldmxpbmsvY29yZS5jLTMxMS1cXG5uZXQvZGV2bGluay9jb3JlLmM6MzEyOmludCBkZXZsX3RyeWxvY2soc3RydWN0IGRldmxpbmsgKmRldmxpbmspXFxubmV0L2RldmxpbmsvY29yZS5jLTMxMy17XFxubmV0L2RldmxpbmsvY29yZS5jOjMxNDpcXHRyZXR1cm4gbXV0ZXhfdHJ5bG9jayhcXHUwMDI2ZGV2bGluay1cXHUwMDNlbG9jayk7XFxubmV0L2RldmxpbmsvY29yZS5jLTMxNS19XFxubmV0L2RldmxpbmsvY29yZS5jPTMxNj1FWFBPUlRfU1lNQk9MX0dQTChkZXZsX3RyeWxvY2spO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMTctXFxubmV0L2RldmxpbmsvY29yZS5jOjMxODp2b2lkIGRldmxfdW5sb2NrKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rKVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMTkte1xcbm5ldC9kZXZsaW5rL2NvcmUuYzozMjA6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZsaW5rLVxcdTAwM2Vsb2NrKTtcXG5uZXQvZGV2bGluay9jb3JlLmMtMzIxLX1cXG5uZXQvZGV2bGluay9jb3JlLmM9MzIyPUVYUE9SVF9TWU1CT0xfR1BMKGRldmxfdW5sb2NrKTtcXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMjQtLyoqXFxubmV0L2RldmxpbmsvY29yZS5jOjMyNTogKiBkZXZsaW5rX3RyeV9nZXQoKSAtIHRyeSB0byBvYnRhaW4gYSByZWZlcmVuY2Ugb24gYSBkZXZsaW5rIGluc3RhbmNlXFxubmV0L2RldmxpbmsvY29yZS5jOjMyNjogKiBAZGV2bGluazogaW5zdGFuY2UgdG8gcmVmZXJlbmNlXFxubmV0L2RldmxpbmsvY29yZS5jLTMyNy0gKlxcbm5ldC9kZXZsaW5rL2NvcmUuYzozMjg6ICogT2J0YWluIGEgcmVmZXJlbmNlIG9uIGEgZGV2bGluayBpbnN0YW5jZS4gQSByZWZlcmVuY2Ugb24gYSBkZXZsaW5rIGluc3RhbmNlXFxubmV0L2RldmxpbmsvY29yZS5jLTMyOS0gKiBvbmx5IGltcGxpZXMgdGhhdCBpdCdzIHNhZmUgdG8gdGFrZSB0aGUgaW5zdGFuY2UgbG9jay4gSXQgZG9lcyBub3QgaW1wbHlcXG4tLVxcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMzItICovXFxubmV0L2RldmxpbmsvY29yZS5jOjMzMzpzdHJ1Y3QgZGV2bGluayAqX19tdXN0X2NoZWNrIGRldmxpbmtfdHJ5X2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaylcXG5uZXQvZGV2bGluay9jb3JlLmMtMzM0LXtcXG5uZXQvZGV2bGluay9jb3JlLmM6MzM1OlxcdGlmIChyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNmRldmxpbmstXFx1MDAzZXJlZmNvdW50KSlcXG5uZXQvZGV2bGluay9jb3JlLmM6MzM2OlxcdFxcdHJldHVybiBkZXZsaW5rO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0zMzctXFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5uZXQvZGV2bGluay9jb3JlLmMtMzM5LVxcbm5ldC9kZXZsaW5rL2NvcmUuYzozNDA6c3RhdGljIHZvaWQgZGV2bGlua19yZWxlYXNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvZGV2bGluay9jb3JlLmMtMzQxLXtcXG5uZXQvZGV2bGluay9jb3JlLmM6MzQyOlxcdHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0zNDMtXFxubmV0L2RldmxpbmsvY29yZS5jOjM0NDpcXHRkZXZsaW5rID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLCBzdHJ1Y3QgZGV2bGluaywgcndvcmspO1xcbm5ldC9kZXZsaW5rL2NvcmUuYy0zNDUtXFxubmV0L2RldmxpbmsvY29yZS5jOjM0NjpcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZkZXZsaW5rLVxcdTAwM2Vsb2NrKTtcXG5uZXQvZGV2bGluay9jb3JlLmM6MzQ3OlxcdGxvY2tkZXBfdW5yZWdpc3Rlcl9rZXkoXFx1MDAyNmRldmxpbmstXFx1MDAzZWxvY2tfa2V5KTtcXG5uZXQvZGV2bGluay9jb3JlLmM6MzQ4OlxcdGlmIChkZXZsaW5rLVxcdTAwM2VkZXYpXFxubmV0L2RldmxpbmsvY29yZS5jOjM0OTpcXHRcXHRwdXRfZGV2aWNlKGRldmxpbmstXFx1MDAzZWRldik7XFxubmV0L2RldmxpbmsvY29yZS5jLTM1MC1cXHRlbHNlXFxubmV0L2RldmxpbmsvY29yZS5jOjM1MTpcXHRcXHRrZnJlZShkZXZsaW5rLVxcdTAwM2VkZXZfbmFtZV9pbmRleCk7XFxubmV0L2RldmxpbmsvY29yZS5jOjM1MjpcXHRrdmZyZWUoZGV2bGluayk7XFxubmV0L2RldmxpbmsvY29yZS5jLTM1My19XFxubmV0L2RldmxpbmsvY29yZS5jLTM1NC1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MTguMzg3MTQ3MTQ1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ1MDk5Mzg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBORVRfREVWTElOSyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgTkVUX0RFVkxJTktgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEdpdmVuIHRoZSBuYXR1cmUgb2YgbmV0d29ya2luZyBkZXZpY2UgbGlua2luZywgSSdtIHByZXR0eSBjZXJ0YWluIHRoZSByZWxldmFudCBkZWZpbml0aW9ucyB3aWxsIGJlIGhhbmdpbmcgb3V0IGluIGVpdGhlciBgbmV0L2RldmxpbmsvS2NvbmZpZ2Agb3IsIHBlcmhhcHMgaWYgaXQncyBtb3JlIGZ1bmRhbWVudGFsLCBgbmV0L0tjb25maWdgLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRob3NlIGZpbGVzIGRpcmVjdGx5LiBJIGtub3cgbXkgd2F5IGFyb3VuZCB0aGUga2VybmVsIHNvdXJjZSwgYW5kIEknbSBmYWlybHkgY29uZmlkZW50IEkgY2FuIHF1aWNrbHkgbG9jYXRlIHRoZSBzcGVjaWZpYyBzeW1ib2xzIGFuZCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgTkVUX0RFVkxJTktgIGFuZCBmaWd1cmUgb3V0IGhvdyBpdCdzIGNvbnRyb2xsZWQuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTExLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MjAuODM4MTQyOTMxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDY1Mjg0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0RFVkxJTktcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz00Nzk9Y29uZmlnIE5FVF9TT0NLX01TR1xcbi0tXFxubmV0L0tjb25maWctNDg2LVxcbm5ldC9LY29uZmlnOjQ4Nzpjb25maWcgTkVUX0RFVkxJTktcXG5uZXQvS2NvbmZpZy00ODgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDoyMS4wMzI4MDI4MjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjAyODIxOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBORVRfREVWTElOSyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGBuZXQvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVuYWJsaW5nIGNvbmRpdGlvbnMgZm9yIGBORVRfREVWTElOS2AuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGp1bXAgdG8gbGluZSA0ODcgKG9yIHRoZXJlYWJvdXRzIC0gZ2l2ZSBvciB0YWtlIGEgZmV3IGxpbmVzIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24gSSdtIGxvb2tpbmcgYXQpIHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGhhbmRsZWQuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgYE5FVF9ERVZMSU5LYCBpcyBndWFyZGVkIGJlaGluZCBhbnkgc3BlY2lmaWMgcHJlcmVxdWlzaXRlcywgb3RoZXIgY29uZmlnIHN5bWJvbHMsIG9yIGFyY2hpdGVjdHVyZSBsaW1pdGF0aW9ucy4gSSdtIGFsc28gaW50ZXJlc3RlZCBpbiBjaGVja2luZyB3aGV0aGVyIGl0J3MgYSBcInByb21wdFwiIG9wdGlvbiwgbWVhbmluZyBhIGRpcmVjdCB1c2VyIGNob2ljZSwgb3IgaWYgaXQgaGFzIGEgZGVmYXVsdCB2YWx1ZSB0aGF0J3MgYXV0b21hdGljYWxseSBzZXQgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHRzIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgaG93IHRoZSBzeXN0ZW0gYmVoYXZlcyBhbmQgaG93IHRvIG1hbmFnZSB0aGUgTkVUX0RFVkxJTksgc2V0dGluZyBmb3IgbXkgcHVycG9zZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjAzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MjMuNjM1NjI3MTUyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ4MDpcXHRcXHRib29sXFxuIDQ4MTpcXHRcXHRkZWZhdWx0IG5cXG4gNDgyOlxcdFxcdGhlbHBcXG4gNDgzOlxcdFxcdCAgVGhlIE5FVF9TT0NLX01TRyBwcm92aWRlcyBhIGZyYW1ld29yayBmb3IgcGxhaW4gc29ja2V0cyAoZS5nLiBUQ1ApIG9yXFxuIDQ4NDpcXHRcXHQgIFVMUHMgKHVwcGVyIGxheWVyIG1vZHVsZXMsIGUuZy4gVExTKSB0byBwcm9jZXNzIEw3IGFwcGxpY2F0aW9uIGRhdGFcXG4gNDg1OlxcdFxcdCAgd2l0aCB0aGUgaGVscCBvZiBCUEYgcHJvZ3JhbXMuXFxuIDQ4NjpcXHRcXG4gNDg3OlxcdGNvbmZpZyBORVRfREVWTElOS1xcbiA0ODg6XFx0XFx0Ym9vbFxcbiA0ODk6XFx0XFx0ZGVmYXVsdCBuXFxuIDQ5MDpcXHRcXG4gNDkxOlxcdGNvbmZpZyBQQUdFX1BPT0xcXG4gNDkyOlxcdFxcdGJvb2xcXG4gNDkzOlxcdFxcbiA0OTQ6XFx0Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xcbiA0OTU6XFx0XFx0ZGVmYXVsdCBuXFxuIDQ5NjpcXHRcXHRib29sIFxcXCJQYWdlIHBvb2wgc3RhdHNcXFwiXFxuIDQ5NzpcXHRcXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbiA0OTg6XFx0XFx0aGVscFxcbiA0OTk6XFx0XFx0ICBFbmFibGUgcGFnZSBwb29sIHN0YXRpc3RpY3MgdG8gdHJhY2sgcGFnZSBhbGxvY2F0aW9uIGFuZCByZWN5Y2xpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MjMuNjM1NzE1OTEyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0Njg1NDc3NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBORVRfREVWTElOSyBVc2FnZSoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGBORVRfREVWTElOS2AncyBpbmZsdWVuY2Ugd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2Ygd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBiZWluZyB1dGlsaXplZC4gSSB3YW50IHRvIGlkZW50aWZ5IGFsbCB0aGUgbW9kdWxlcywgc3Vic3lzdGVtcywgYW5kIGNvZGUgcGF0aHMgdGhhdCBhcmUgY29uZGl0aW9uYWwgb24gb3IgZGVwZW5kZW50IHVwb24gYE5FVF9ERVZMSU5LYC4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgd2l0aCBhIHRhcmdldGVkIHNlYXJjaCBhY3Jvc3MgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gSSdsbCBuZWVkIHRvIHVzZSB0aGUgcmlnaHQgdG9vbHMgYW5kIHF1ZXJ5IHRvIGdldCBhIHByZWNpc2UgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUuIEknbSBhaW1pbmcgZm9yIGEgcmVzdWx0IHRoYXQgcGlucG9pbnRzIGJvdGggZGlyZWN0IGFuZCBwb3RlbnRpYWxseSBpbmRpcmVjdCB1c2FnZXMsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIHJ1bnRpbWUgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGludHJvZHVjZS4gVGhpcyBsZXZlbCBvZiBhbmFseXNpcyBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgYXJjaGl0ZWN0dXJhbCByYW1pZmljYXRpb25zIG9mIGBORVRfREVWTElOS2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzIzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDoyNi4xMDQyNjY5OTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTE0MzY5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5FVF9ERVZMSU5LXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvY3J5cHRvL21hcnZlbGwvS2NvbmZpZz00MD1jb25maWcgQ1JZUFRPX0RFVl9PQ1RFT05UWDJfQ1BUXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL0tjb25maWctNTEtXFx0c2VsZWN0IENSWVBUT19BVVRIRU5DXFxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9LY29uZmlnOjUyOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvS2NvbmZpZy01My1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnPTM9Y29uZmlnIFpMMzA3M1hcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWctNi1cXHRzZWxlY3QgRFBMTFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L0tjb25maWc6NzpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9LY29uZmlnLTgtXFx0c2VsZWN0IFJFR01BUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZz02MDQ9Y29uZmlnIE5FVERFVlNJTVxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MDktXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19NT0NLIHx8IFBUUF8xNTg4X0NMT0NLX01PQ0s9blxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjEwOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L0tjb25maWctNjExLVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnPTE2OD1jb25maWcgQ0FOX0tWQVNFUl9QQ0lFRkRcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3MC1cXHR0cmlzdGF0ZSBcXFwiS3Zhc2VyIFBDSWUgRkQgY2FyZHNcXFwiXFxuZHJpdmVycy9uZXQvY2FuL0tjb25maWc6MTcxOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTE3Mi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9MzE9Y29uZmlnIENBTl9FVEFTX0VTNThYXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWctMzMtXFx0c2VsZWN0IENSQzE2XFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnOjM0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy0zNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWc9Njc9Y29uZmlnIENBTl9LVkFTRVJfVVNCXFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnLTY4LVxcdHRyaXN0YXRlIFxcXCJLdmFzZXIgQ0FOL1VTQiBpbnRlcmZhY2VcXFwiXFxuZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnOjY5OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZy03MC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZz0xOT1jb25maWcgRU5BX0VUSEVSTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWF6b24vS2NvbmZpZy0yMy1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL0tjb25maWc6MjQ6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1hem9uL0tjb25maWctMjUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWc9MTY5PWNvbmZpZyBQRFNfQ09SRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWctMTcyLVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWc6MTczOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnLTE3NC1cXHRzZWxlY3QgUExETUZXXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTIwNz1jb25maWcgQk5YVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTItXFx0c2VsZWN0IENSQzMyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyMTM6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMTQtXFx0c2VsZWN0IFBBR0VfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yNTg9Y29uZmlnIEJOR0VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYwLVxcdGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNjE6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjItXFx0c2VsZWN0IFBBR0VfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9Njg9Y29uZmlnIExJUVVJRElPXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy03NS1cXHRzZWxlY3QgTElRVUlESU9fQ09SRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjc2OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTc3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnPTI9Y29uZmlnIEZTTF9EUEFBMl9FVEhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9LY29uZmlnLTctXFx0c2VsZWN0IEZTTF9YR01BQ19NRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL0tjb25maWc6ODpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvS2NvbmZpZy05LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnPTY9Y29uZmlnIEZVTl9FVEhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9LY29uZmlnLTktXFx0ZGVwZW5kcyBvbiBUTFMgXFx1MDAyNlxcdTAwMjYgVExTX0RFVklDRSB8fCBUTFNfREVWSUNFPW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZzoxMDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvS2NvbmZpZy0xMS1cXHRzZWxlY3QgRlVOX0NPUkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTkxPWNvbmZpZyBITlMzXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05My1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjk0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk1LVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYy9LY29uZmlnPTY9Y29uZmlnIEhJTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvS2NvbmZpZy04LVxcdGRlcGVuZHMgb24gKFBDSV9NU0kgXFx1MDAyNlxcdTAwMjYgKFg4NiB8fCBBUk02NCkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljL0tjb25maWc6OTpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMvS2NvbmZpZy0xMC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTE0NT1jb25maWcgSVhHQkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMTUwLVxcdHNlbGVjdCBNRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoxNTE6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0xNTItXFx0c2VsZWN0IFBMRE1GV1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yMjk9Y29uZmlnIEk0MEVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjM1LVxcdHNlbGVjdCBMSUJJRV9BRE1JTlFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjIzNjpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTIzNy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTI5MT1jb25maWcgSUNFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwMi1cXHRzZWxlY3QgTElCSUVfRldMT0cgaWYgREVCVUdfRlNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMwMzpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMwNC1cXHRzZWxlY3QgUEFDS0lOR1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhkL0tjb25maWc9ND1jb25maWcgSVhEXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGQvS2NvbmZpZy04LVxcdHNlbGVjdCBMSUJJRV9QQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGQvS2NvbmZpZzo5OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4ZC9LY29uZmlnLTEwLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9OT1jb25maWcgT0NURU9OVFgyX0FGXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTExLVxcdHNlbGVjdCBPQ1RFT05UWDJfTUJPWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MTI6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0xMy1cXHRkZXBlbmRzIG9uICg2NEJJVCBcXHUwMDI2XFx1MDAyNiBDT01QSUxFX1RFU1QpIHx8IEFSTTY0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnPTMxPWNvbmZpZyBPQ1RFT05UWDJfUEZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzMtXFx0c2VsZWN0IE9DVEVPTlRYMl9NQk9YXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozNDpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM1LVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvS2NvbmZpZz02PWNvbmZpZyBQUkVTVEVSQVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9LY29uZmlnLTktXFx0ZGVwZW5kcyBvbiBCUklER0UgfHwgQlJJREdFPW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL0tjb25maWc6MTA6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9LY29uZmlnLTExLVxcdHNlbGVjdCBQSFlMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc9Mjg9Y29uZmlnIE1MWDRfQ09SRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnLTMxLVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnOjMyOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy0zMy1cXHRkZWZhdWx0IG5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnPTY9Y29uZmlnIE1MWDVfQ09SRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWctOS1cXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnOjEwOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTExLVxcdGRlcGVuZHMgb24gTUxYRlcgfHwgIU1MWEZXXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhmdy9LY29uZmlnPTY9Y29uZmlnIE1MWEZXXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhmdy9LY29uZmlnLTE0LVxcdHNlbGVjdCBYWl9ERUNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhmdy9LY29uZmlnOjE1OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZz02PWNvbmZpZyBNTFhTV19DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJNZWxsYW5veCBUZWNobm9sb2dpZXMgU3dpdGNoIEFTSUNzIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZzo4OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctOS1cXHRzZWxlY3QgTUxYRldcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZz0yMD1jb25maWcgRkJOSUNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yNi1cXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjI3OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yOC1cXHRzZWxlY3QgUEFHRV9QT09MXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL0tjb25maWc9MTU9Y29uZmlnIE1TQ0NfT0NFTE9UX1NXSVRDSF9MSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL0tjb25maWctMTYtXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21zY2MvS2NvbmZpZzoxNzpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tc2NjL0tjb25maWctMTgtXFx0c2VsZWN0IFJFR01BUF9NTUlPXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvS2NvbmZpZz0xOT1jb25maWcgTkZQXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvS2NvbmZpZy0yMy1cXHRkZXBlbmRzIG9uIFRMUyBcXHUwMDI2XFx1MDAyNiBUTFNfREVWSUNFIHx8IFRMU19ERVZJQ0U9blxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnOjI0OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnLTI1LVxcdHNlbGVjdCBDUkMzMlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZz0yMD1jb25maWcgSU9OSUNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWctMjMtXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWc6MjQ6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yNS1cXHRzZWxlY3QgRElNTElCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZz03Nj1jb25maWcgUUVEXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZy04MS1cXHRzZWxlY3QgQ1JDMzJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZzo4MjpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZy04My1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZz0xOT1jb25maWcgU0ZDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZy0yNC1cXHRzZWxlY3QgQ1JDMzJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZzoyNTpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zZmMvS2NvbmZpZy0yNi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTI9Y29uZmlnIFNUTU1BQ19FVEhcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMTItXFx0c2VsZWN0IFJFU0VUX0NPTlRST0xMRVJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnOjEzOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMTQtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz02NT1jb25maWcgVElfQ1BTV19TV0lUQ0hERVZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNzMtXFx0c2VsZWN0IFJFR01BUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6NzQ6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy03NS1cXHRpbXBseSBQSFlfVElfR01JSV9TRUxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9OTY9Y29uZmlnIFRJX0szX0FNNjVfQ1BTV19OVVNTXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTk4LVxcdGRlcGVuZHMgb24gQVJDSF9LMyBcXHUwMDI2XFx1MDAyNiBPRiBcXHUwMDI2XFx1MDAyNiBUSV9LM19VRE1BX0dMVUVfTEFZRVJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjk5OlxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTAwLVxcdHNlbGVjdCBUSV9EQVZJTkNJX01ESU9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWc9Nj1jb25maWcgRElOR0hBSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZy04LSAgICBkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3p0ZS9kaW5naGFpL0tjb25maWc6OTogICAgc2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvenRlL2RpbmdoYWkvS2NvbmZpZy0xMC0gICAgaGVscFxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTk2PWNvbmZpZyBJT1NNXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctOTgtXFx0ZGVwZW5kcyBvbiBQQ0lcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6OTk6XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTEwMC1cXHRzZWxlY3QgUkVMQVkgaWYgV1dBTl9ERUJVR0ZTXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnPTIxMT1jb25maWcgUFRQXzE1ODhfQ0xPQ0tfT0NQXFxuLS1cXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIxOC1cXHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcXG5kcml2ZXJzL3B0cC9LY29uZmlnOjIxOTpcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL3B0cC9LY29uZmlnLTIyMC1cXHRzZWxlY3QgQ1JDMTZcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZz0zPW1lbnVjb25maWcgTkVUX0RTQVxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTEwLVxcdHNlbGVjdCBQSFlMSU5LXFxubmV0L2RzYS9LY29uZmlnOjExOlxcdHNlbGVjdCBORVRfREVWTElOS1xcbm5ldC9kc2EvS2NvbmZpZy0xMi1cXHRpbXBseSBORVRfU0VMRlRFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjU0OjI3Ljc1NTcxMzA0NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDQ2NTUxMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byBgbmV0ZGV2c2ltYCBhbmQgYGRldmxpbmtgIEludGVncmF0aW9uKipcblxuT2theSwgc28gYE5FVERFVlNJTWAgcGlja3MgYE5FVF9ERVZMSU5LYC4gSW50ZXJlc3RpbmcuIGBORVRERVZTSU1gLCByaWdodCwgdGhhdCdzIHRoZSBzb2Z0d2FyZSBtb2NrIG5ldHdvcmsgZGV2aWNlIHVzZWQgZXh0ZW5zaXZlbHkgd2l0aCBRRU1VIGFuZCBzeXprYWxsZXIgZm9yIGZ1enppbmcuIE5vdywgdGhlIHF1ZXN0aW9uIGlzOiBkb2VzIGBuZXRkZXZzaW1gIGFjdHVhbGx5IGltcGxlbWVudCB0aGUgYGRldmxpbmtgIGZsYXNoIHVwZGF0ZSBmdW5jdGlvbmFsaXR5PyBHaXZlbiBpdHMgcm9sZSBpbiB0ZXN0aW5nLCBpdCdzIGEgbG9naWNhbCBwb2ludCBvZiBpbnZlc3RpZ2F0aW9uLiBMZXQncyBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuY2Agc291cmNlIGNvZGUsIHRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJIGNvdWxkIGFsc28gZG8gYSBxdWljayBzZWFyY2ggd2l0aGluIHRoZSBgbmV0ZGV2c2ltYCBjb2RlIGZvciB0aGUgdGVybSBgZmxhc2hfdXBkYXRlYC4gVGhhdCBzaG91bGQgcXVpY2tseSByZXZlYWwgd2hldGhlciBvciBub3QgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQgYW5kIGhvdyBpdCdzIGhhbmRsZWQsIGFzc3VtaW5nIHRoYXQgdGhlIG1vY2sgZGV2aWNlIGltcGxlbWVudHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdXBkYXRpbmcgaXRzIFwiZmlybXdhcmVcIi4gVW5kZXJzdGFuZGluZyB0aGF0IGludGVyYWN0aW9uIGlzIGtleSB0byBmaWd1cmluZyBvdXQgaG93IHRoZSBjb2RlIGlzIHN0cnVjdHVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODMxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MzAuODAyMjY3ODc2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzcxNjgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbGFzaF91cGRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0ZGV2c2ltXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYz05ODY9c3RhdGljIGludCBuc2ltX2Rldl9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMDAzLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxMDA0OnN0YXRpYyBpbnQgbnNpbV9kZXZfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxMDA1OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEwMDYtXFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMDE0LVxcdGlmIChuc2ltX2Rldi1cXHUwMDNlZndfdXBkYXRlX3N0YXR1cykge1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYzoxMDE1OlxcdFxcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGV2bGluayxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTAxNi1cXHRcXHRcXHRcXHRcXHRcXHQgICBcXFwiUHJlcGFyaW5nIHRvIGZsYXNoXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMDIxLVxcdFxcdGlmIChuc2ltX2Rldi1cXHUwMDNlZndfdXBkYXRlX3N0YXR1cylcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTAyMjpcXHRcXHRcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssIFxcXCJGbGFzaGluZ1xcXCIsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEwMjMtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcGFyYW1zLVxcdTAwM2Vjb21wb25lbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTAyOS1cXHRpZiAobnNpbV9kZXYtXFx1MDAzZWZ3X3VwZGF0ZV9zdGF0dXMpIHtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTAzMDpcXHRcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssIFxcXCJGbGFzaGluZ1xcXCIsXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEwMzEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgcGFyYW1zLVxcdTAwM2Vjb21wb25lbnQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTAzMy1cXHRcXHRcXHRcXHRcXHRcXHQgICBOU0lNX0RFVl9GTEFTSF9TSVpFKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTAzNDpcXHRcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV90aW1lb3V0X25vdGlmeShkZXZsaW5rLCBcXFwiRmxhc2ggc2VsZWN0XFxcIixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTAzNS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgcGFyYW1zLVxcdTAwM2Vjb21wb25lbnQsIDgxKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTAzNjpcXHRcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRldmxpbmssIFxcXCJGbGFzaGluZyBkb25lXFxcIixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTAzNy1cXHRcXHRcXHRcXHRcXHRcXHQgICBwYXJhbXMtXFx1MDAzZWNvbXBvbmVudCwgMCwgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM9MTM1MD1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIG5zaW1fZGV2X2Rldmxpbmtfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2Rldi5jLTEzNTItXFx0LmVzd2l0Y2hfbW9kZV9nZXQgPSBuc2ltX2RldmxpbmtfZXN3aXRjaF9tb2RlX2dldCxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTM1MzpcXHQuc3VwcG9ydGVkX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgPSBERVZMSU5LX1NVUFBPUlRfRkxBU0hfVVBEQVRFX09WRVJXUklURV9NQVNLLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMzU0LVxcdC5yZWxvYWRfYWN0aW9ucyA9IEJJVChERVZMSU5LX1JFTE9BRF9BQ1RJT05fRFJJVkVSX1JFSU5JVCksXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmMtMTM1Ny1cXHQuaW5mb19nZXQgPSBuc2ltX2Rldl9pbmZvX2dldCxcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZGV2LmM6MTM1ODpcXHQuZmxhc2hfdXBkYXRlID0gbnNpbV9kZXZfZmxhc2hfdXBkYXRlLFxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9kZXYuYy0xMzU5LVxcdC50cmFwX2luaXQgPSBuc2ltX2Rldl9kZXZsaW5rX3RyYXBfaW5pdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6MzAuODQ5OTkwMzg0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NzQ5NDI1ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmV0ZGV2c2ltIGFuZCBEZXZsaW5rIEZsYXNoIFVwZGF0ZXMqKlxuXG5Pa2F5LCBzbyBOZXRkZXZzaW0gaXMgZmluYWxseSBmdWxseSBzdXBwb3J0aW5nIGRldmxpbmsgZmxhc2ggdXBkYXRlcywgd2hpY2ggaXMgZmFudGFzdGljISBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQgYWN0dWFsbHkgKm1lYW5zKiBpbiBwcmFjdGljZSwgdGhvdWdoLiBXaGF0IGRvZXMgdGhlIG5ldGxpbmsgZmxhc2ggdXBkYXRlIGNvbW1hbmQgKmRvKiBhdCBhIGxvdyBsZXZlbD9cblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgY29yZSBsb2dpYyBzaG91bGQgcmVzaWRlIGluIGBuZXQvZGV2bGluay9kZXYuY2AuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YC4gVGltZSB0byByZWFkIGxpbmVzIDExMjAtMTE4NS4gSSdsbCBuZWVkIHRvIHBhcnNlIHRoZSBuZXRsaW5rIG1lc3NhZ2VzIGFuZCBjb3JyZWxhdGUgdGhlbSB0byB0aGUgc3BlY2lmaWMgb3BlcmF0aW9ucyBmb3IgdGhlIGZsYXNoIHVwZGF0ZS4gSSdtIGVzcGVjaWFsbHkga2VlbiB0byBzZWUgaG93IHRoZXkgaGFuZGxlIGVycm9yIGNvbmRpdGlvbnMsIHZlcnNpb25pbmcsIGFuZCBzZWN1cml0eSAoaWYgYXBwbGljYWJsZSkuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZDsgdW5kZXJzdGFuZGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgdW5sb2NrIHRoZSBwcmFjdGljYWwgaW1wbGljYXRpb25zIG9mIE5ldGRldnNpbSdzIG5ldyBmZWF0dXJlLiBJIGV4cGVjdCBzb21lIGludGVyZXN0aW5nIG51YW5jZXMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEwNTMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDozMy44MjQ5MzUyNTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9kZXZsaW5rL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMjA6XFx0XFxuMTEyMTpcXHRcXHRyZXQgPSBkZXZsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZWluZm9fZ2V0KGRldmxpbmssIFxcdTAwMjZyZXEsIE5VTEwpO1xcbjExMjI6XFx0XFx0aWYgKHJldClcXG4xMTIzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTEyNDpcXHRcXG4xMTI1OlxcdFxcdGlmICghbG9va3VwX2N0eC5sb29rdXBfbmFtZV9mb3VuZCkge1xcbjExMjY6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfQVRUUihleHRhY2ssIG5sYV9jb21wb25lbnQsXFxuMTEyNzpcXHRcXHRcXHRcXHRcXHQgICAgXFxcInNlbGVjdGVkIGNvbXBvbmVudCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlXFxcIik7XFxuMTEyODpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTI5OlxcdFxcdH1cXG4xMTMwOlxcdFxcdCpwX2NvbXBvbmVudCA9IGNvbXBvbmVudDtcXG4xMTMxOlxcdFxcdHJldHVybiAwO1xcbjExMzI6XFx0fVxcbjExMzM6XFx0XFxuMTEzNDpcXHRpbnQgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjExMzU6XFx0e1xcbjExMzY6XFx0XFx0c3RydWN0IG5sYXR0ciAqbmxhX292ZXJ3cml0ZV9tYXNrLCAqbmxhX2ZpbGVfbmFtZTtcXG4xMTM3OlxcdFxcdHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgcGFyYW1zID0ge307XFxuMTEzODpcXHRcXHRzdHJ1Y3QgZGV2bGluayAqZGV2bGluayA9IGRldmxpbmtfbmxfY3R4KGluZm8pLVxcdTAwM2VkZXZsaW5rO1xcbjExMzk6XFx0XFx0Y29uc3QgY2hhciAqZmlsZV9uYW1lO1xcbjExNDA6XFx0XFx0dTMyIHN1cHBvcnRlZF9wYXJhbXM7XFxuMTE0MTpcXHRcXHRpbnQgcmV0O1xcbjExNDI6XFx0XFxuMTE0MzpcXHRcXHRpZiAoIWRldmxpbmstXFx1MDAzZW9wcy1cXHUwMDNlZmxhc2hfdXBkYXRlKVxcbjExNDQ6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjExNDU6XFx0XFxuMTE0NjpcXHRcXHRpZiAoR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX0ZJTEVfTkFNRSkpXFxuMTE0NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTQ4OlxcdFxcbjExNDk6XFx0XFx0cmV0ID0gZGV2bGlua19mbGFzaF9jb21wb25lbnRfZ2V0KGRldmxpbmssXFxuMTE1MDpcXHRcXHRcXHRcXHRcXHRcXHQgIGluZm8tXFx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9GTEFTSF9VUERBVEVfQ09NUE9ORU5UXSxcXG4xMTUxOlxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnBhcmFtcy5jb21wb25lbnQsIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuMTE1MjpcXHRcXHRpZiAocmV0KVxcbjExNTM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMTU0OlxcdFxcbjExNTU6XFx0XFx0c3VwcG9ydGVkX3BhcmFtcyA9IGRldmxpbmstXFx1MDAzZW9wcy1cXHUwMDNlc3VwcG9ydGVkX2ZsYXNoX3VwZGF0ZV9wYXJhbXM7XFxuMTE1NjpcXHRcXG4xMTU3OlxcdFxcdG5sYV9vdmVyd3JpdGVfbWFzayA9IGluZm8tXFx1MDAzZWF0dHJzW0RFVkxJTktfQVRUUl9GTEFTSF9VUERBVEVfT1ZFUldSSVRFX01BU0tdO1xcbjExNTg6XFx0XFx0aWYgKG5sYV9vdmVyd3JpdGVfbWFzaykge1xcbjExNTk6XFx0XFx0XFx0c3RydWN0IG5sYV9iaXRmaWVsZDMyIHNlY3Rpb25zO1xcbjExNjA6XFx0XFxuMTE2MTpcXHRcXHRcXHRpZiAoIShzdXBwb3J0ZWRfcGFyYW1zIFxcdTAwMjYgREVWTElOS19TVVBQT1JUX0ZMQVNIX1VQREFURV9PVkVSV1JJVEVfTUFTSykpIHtcXG4xMTYyOlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cXHUwMDNlZXh0YWNrLCBubGFfb3ZlcndyaXRlX21hc2ssXFxuMTE2MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFxcIm92ZXJ3cml0ZSBzZXR0aW5ncyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRldmljZVxcXCIpO1xcbjExNjQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjExNjU6XFx0XFx0XFx0fVxcbjExNjY6XFx0XFx0XFx0c2VjdGlvbnMgPSBubGFfZ2V0X2JpdGZpZWxkMzIobmxhX292ZXJ3cml0ZV9tYXNrKTtcXG4xMTY3OlxcdFxcdFxcdHBhcmFtcy5vdmVyd3JpdGVfbWFzayA9IHNlY3Rpb25zLnZhbHVlIFxcdTAwMjYgc2VjdGlvbnMuc2VsZWN0b3I7XFxuMTE2ODpcXHRcXHR9XFxuMTE2OTpcXHRcXG4xMTcwOlxcdFxcdG5sYV9maWxlX25hbWUgPSBpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX0ZJTEVfTkFNRV07XFxuMTE3MTpcXHRcXHRmaWxlX25hbWUgPSBubGFfZGF0YShubGFfZmlsZV9uYW1lKTtcXG4xMTcyOlxcdFxcdHJldCA9IHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KFxcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cXHUwMDNlZGV2KTtcXG4xMTczOlxcdFxcdGlmIChyZXQpIHtcXG4xMTc0OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0FUVFIoaW5mby1cXHUwMDNlZXh0YWNrLCBubGFfZmlsZV9uYW1lLFxcbjExNzU6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gbG9jYXRlIHRoZSByZXF1ZXN0ZWQgZmlybXdhcmUgZmlsZVxcXCIpO1xcbjExNzY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMTc3OlxcdFxcdH1cXG4xMTc4OlxcdFxcbjExNzk6XFx0XFx0ZGV2bGlua19mbGFzaF91cGRhdGVfYmVnaW5fbm90aWZ5KGRldmxpbmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDozMy44MjUwNTQzNDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0NTI1NDI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIERldmxpbmsgRmxhc2ggVXBkYXRlIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAg4oCTIHRoYXQncyB0aGUgZnVuY3Rpb24gd2UncmUgZGVhbGluZyB3aXRoIGZvciBmbGFzaCB1cGRhdGVzLCBhbmQgaXQncyB0cmlnZ2VyZWQgdGhyb3VnaCB0aGUgZ2VuZXJpYyBuZXRsaW5rIGRldmxpbmsgZmFtaWx5LiBHb29kLCB0aGF0IGdpdmVzIG1lIHRoZSBpbml0aWFsIGNvbnRleHQuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIGBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVgLiBJIHN1c3BlY3QgdGhlIGxhdHRlciBtaWdodCBiZSByZWxhdGVkIHRvIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGJ1dCBJIG5lZWQgdG8gY29uZmlybS5cblxuU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBzZWUgd2hlcmUgYGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZWAgaXMgYWN0dWFsbHkgKmNhbGxlZCogZnJvbS4gSSdsbCBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4gS25vd2luZyB0aGUgY2FsbCBncmFwaCB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZnVsbCBmbG93IG9mIGV4ZWN1dGlvbiBhbmQgaG93IHRoZXNlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QuIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byBwcm9wZXJseSBhbmFseXplIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zIGJlaW5nIGNhbGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzNjQsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjU0OjM2LjI3MDMxNTc5MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MjY1NzEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvZGV2bGluay5oPTIxMjM9dm9pZCBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuaW5jbHVkZS9uZXQvZGV2bGluay5oLTIxMjQtXFx0XFx0XFx0XFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7XFxuaW5jbHVkZS9uZXQvZGV2bGluay5oOjIxMjU6aW50IGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgY29uc3QgY2hhciAqZmlsZV9uYW1lKTtcXG5pbmNsdWRlL25ldC9kZXZsaW5rLmgtMjEyNi1pbnQgZGV2bGlua19jb21wYXRfcGh5c19wb3J0X25hbWVfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5pbmNsdWRlL25ldC9kZXZsaW5rLmg9MjE1MT1zdGF0aWMgaW5saW5lIGludFxcbmluY2x1ZGUvbmV0L2RldmxpbmsuaDoyMTUyOmRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgY29uc3QgY2hhciAqZmlsZV9uYW1lKVxcbmluY2x1ZGUvbmV0L2RldmxpbmsuaC0yMTUzLXtcXG4tLVxcbm5ldC9kZXZsaW5rL2Rldi5jPTEyMjA9dm9pZCBkZXZsaW5rX2NvbXBhdF9ydW5uaW5nX3ZlcnNpb24oc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuLS1cXG5uZXQvZGV2bGluay9kZXYuYy0xMjMxLVxcbm5ldC9kZXZsaW5rL2Rldi5jOjEyMzI6aW50IGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgY29uc3QgY2hhciAqZmlsZV9uYW1lKVxcbm5ldC9kZXZsaW5rL2Rldi5jLTEyMzMte1xcbi0tXFxubmV0L2V0aHRvb2wvaW9jdGwuYz0zNjQ2PWludCBkZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpXFxuLS1cXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM2NzUtXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VkZXZsaW5rKVxcbm5ldC9ldGh0b29sL2lvY3RsLmM6MzY3NjpcXHRcXHRcXHRyYyA9IGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZShzdGF0ZS1cXHUwMDNlZGV2bGluayxcXG5uZXQvZXRodG9vbC9pb2N0bC5jLTM2NzctXFx0XFx0XFx0XFx0XFx0XFx0XFx0IHN0YXRlLVxcdTAwM2VlZmwuZGF0YSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjU0OjM3Ljk1Mjk3OTgzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkzNTczMDc1MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGaXJtd2FyZSBVcGRhdGUgTWVjaGFuaXNtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gYGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZWAsIGNhbGxlZCB0aHJvdWdoIGV0aHRvb2wgaW9jdGxzIChzcGVjaWZpY2FsbHkgYEVUSFRPT0xfU0ZMQVNIYCBhbmQgYEVUSFRPT0xfRkxBU0hERVZJQ0VgIGZyb20gYG5ldC9ldGh0b29sL2lvY3RsLmNgKSwgYW5kIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IHRoZSBnZW5lcmljIG5ldGxpbmsgYERFVkxJTktfQ01EX0ZMQVNIX1VQREFURWAsIGlzIGNsZWFyLiBUaGUga2V5IHF1ZXN0aW9uIGlzLCAqd2h5KiB0aGUgc2hpZnQgZnJvbSBgcmVxdWVzdF9maXJtd2FyZWAgdG8gYHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0YD9cblxuQWgsIHJpZ2h0LiBgcmVxdWVzdF9maXJtd2FyZWAgaW50cm9kdWNlcyBhIGZhbGxiYWNrIHRvIHRoZSB1c2VyIGhlbHBlciBpZiB0aGUgZmlybXdhcmUgaXNuJ3QgaW1tZWRpYXRlbHkgZm91bmQgb24gZGlzayAob3IgdGhlIHVzZXIgaGVscGVyIGlzIGVuYWJsZWQpLCB3aGVyZWFzIGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdGAgZ29lcyBzdHJhaWdodCB0byB0aGUgZmlsZXN5c3RlbSBvciBhbnkgYnVpbHQtaW4gZmlybXdhcmUuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgZmlndXJpbmcgb3V0IHRoZSBpbXBhY3QuIERvZXMgdGhpcyBjaGFuZ2UgYWZmZWN0IGFjY2Vzc2libGUga2VybmVsIGxvZ2ljP1xuXG5BYnNvbHV0ZWx5LiBCb3RoIHRoZSBnZW5lcmljIG5ldGxpbmsgaW50ZXJmYWNlIChgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGApIGFuZCB0aGUgZXRodG9vbCBpb2N0bCBwYXRoIChgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYCkgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZS4gRnVydGhlcm1vcmUsIHRoaXMgbWVhbnMgdGhhdCBldmVuIGVtdWxhdGVkIHZpcnR1YWwgZGV2aWNlcyBsaWtlIGBuZXRkZXZzaW1gIGNhbiB0cmlnZ2VyIHRoZXNlIGZ1bmN0aW9ucywgdGh1cyBkaXJlY3RseSBtb2RpZnlpbmcgaG93IGZpcm13YXJlIGlzIGxvYWRlZC4gV2UgbmVlZCB0byBiZSB2ZXJ5IGNhcmVmdWwgdG8gdmVyaWZ5IHRoZSBzaWRlLWVmZmVjdHMuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoYXQgdGhlIHN5bWJvbHMgaW52b2x2ZWQgYXJlbid0IHN0YXRpYy4gSW4gYG5ldC9kZXZsaW5rL2Rldi5jYCwgYm90aCBgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgYW5kIGBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVgIGFyZSBub24tc3RhdGljLiBgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgaGFzIHRoZSBzaWduYXR1cmUgYGludCBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pYCBhbmQgYGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZWAgaGFzIHRoZSBzaWduYXR1cmUgYGludCBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSlgLiBOZXh0LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBgbmV0L2RldmxpbmsvbmV0bGlua19nZW4uY2AsIG9yIHdoZXJldmVyIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBpcyByZWdpc3RlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzExOSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDo0Ny4zMTAyODk4NzFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTUxMjEzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZGV2bGluay9kZXYuYz0xMDk2PXN0YXRpYyBpbnQgZGV2bGlua19mbGFzaF9jb21wb25lbnRfZ2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxcbi0tXFxubmV0L2RldmxpbmsvZGV2LmMtMTEzMy1cXG5uZXQvZGV2bGluay9kZXYuYzoxMTM0OmludCBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxubmV0L2RldmxpbmsvZGV2LmMtMTEzNS17XFxuLS1cXG5uZXQvZGV2bGluay9uZXRsaW5rX2dlbi5jPTcwMj1jb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZGV2bGlua19ubF9vcHNbNzVdID0ge1xcbi0tXFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYy0xMTgzLVxcdFxcdC5wcmVfZG9pdFxcdD0gZGV2bGlua19ubF9wcmVfZG9pdCxcXG5uZXQvZGV2bGluay9uZXRsaW5rX2dlbi5jOjExODQ6XFx0XFx0LmRvaXRcXHRcXHQ9IGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXQsXFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uYy0xMTg1LVxcdFxcdC5wb3N0X2RvaXRcXHQ9IGRldmxpbmtfbmxfcG9zdF9kb2l0LFxcbi0tXFxubmV0L2RldmxpbmsvbmV0bGlua19nZW4uaD0xMjQ9aW50IGRldmxpbmtfbmxfaGVhbHRoX3JlcG9ydGVyX2R1bXBfY2xlYXJfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9kZXZsaW5rL25ldGxpbmtfZ2VuLmgtMTI1LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG5uZXQvZGV2bGluay9uZXRsaW5rX2dlbi5oOjEyNjppbnQgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG5uZXQvZGV2bGluay9uZXRsaW5rX2dlbi5oLTEyNy1pbnQgZGV2bGlua19ubF90cmFwX2dldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDo0OC44NjU0MTc0OTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcyNzUyMzE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGZpbGVzOlxuXG4qKkNoZWNraW5nIHRoZSBCdWlsZCBDb25maWd1cmF0aW9uIGZvciBuZXQvZGV2bGluay9kZXYuYyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlndXJhdGlvbnMgYXJlICpzcGVjaWZpY2FsbHkqIHJlcXVpcmVkIHRvIGJ1aWxkIGBuZXQvZGV2bGluay9kZXYuY2AuIEkgYWxyZWFkeSBrbm93IHRoZSBvdmVyYWxsIGBuZXQvZGV2bGlua2AgYnVpbGQgZW52aXJvbm1lbnQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBzcGVjaWZpYyB0byB0aGlzIHBhcnRpY3VsYXIgZmlsZS4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSByZWxldmFudCBgTWFrZWZpbGVg4oCmIGJ1dCBmaXJzdCwgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhlcmUgaXNuJ3Qgc29tZSBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gbWFjcm8gZGVmaW5lZCB0aGF0J3MgZ29pbmcgdG8gdHJpcCBtZSB1cC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhhdCBgbmV0L2RldmxpbmsvTWFrZWZpbGVgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgaW5jbHVkZSBwYXRocywgYW55IGN1c3RvbSBjb21waWxhdGlvbiBmbGFncywgYW5kIHBvdGVudGlhbCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gaG93IHRoZSBidWlsZCBwcm9jZXNzIGhhbmRsZXMgdGhpcyBzaW5nbGUgc291cmNlIGZpbGUuIEFueSBzdXJwcmlzZXMgbHVya2luZyBpbiB0aGVyZSBjb3VsZCBwb3RlbnRpYWxseSBpbXBhY3QgdGhlIGZpbmFsIG1vZHVsZSBvciBiaW5hcnkuIEkgbmVlZCB0byBlbnN1cmUgYSBjbGVhbiBhbmQgcHJlZGljdGFibGUgYnVpbGQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NDQ3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6NTEuNTkyOTQ0NjY4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9kZXZsaW5rL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmoteSA6PSBjb3JlLm8gbmV0bGluay5vIG5ldGxpbmtfZ2VuLm8gZGV2Lm8gcG9ydC5vIHNiLm8gZHBpcGUubyBcXFxcXFxuICAgNDpcXHRcXHQgcmVzb3VyY2UubyBwYXJhbS5vIHJlZ2lvbi5vIGhlYWx0aC5vIHRyYXAubyByYXRlLm8gbGluZWNhcmQubyBzaF9kZXYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDo1MS41OTMwMDU3MzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDAyODA0Nzk5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE5ldGxpbmsgYW5kIEl0cyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbmV0L01ha2VmaWxlYCBhbmQgSSBzZWUgdGhpcyBsaW5lOiBgb2JqLSQoQ09ORklHX05FVF9ERVZMSU5LKSArPSBkZXZsaW5rL2AuIENsZWFybHksIGBkZXZsaW5rL2AgaXMgaW5jbHVkZWQgd2hlbiBgQ09ORklHX05FVF9ERVZMSU5LYCBpcyBzZXQuIE5vdywgdGhlIGNvbnRleHQgc3VnZ2VzdHMgdGhpcyBpcyBsaW5rZWQgdG8gZGV2aWNlIGRyaXZlcnMgbGlrZSBgQ09ORklHX05FVERFVlNJTWAsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVzZSBhcmUgY3JpdGljYWwgdG8gbXkgY3VycmVudCBjb25maWd1cmF0aW9uLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgdGhlIGRlcGVuZGVuY3kgYmV0d2VlbiBgQ09ORklHX05FVERFVlNJTWAgYW5kIGBDT05GSUdfTkVUX0RFVkxJTktgLiBJcyBvbmUgbmVjZXNzYXJ5IGZvciB0aGUgb3RoZXIsIG9yIGFyZSB0aGV5IGluZGVwZW5kZW50P1xuXG5BIHF1aWNrIGNoZWNrIHJldmVhbHMgYE5FVF9ERVZMSU5LYCBpcyBhIGJvb2xlYW4gY29uZmlnIHN5bWJvbCBpbiBgbmV0L0tjb25maWdgLCBkZWZhdWx0aW5nIHRvICduJy4gUmlnaHQsIGFuZCBgTkVUREVWU0lNYCAqc2VsZWN0cyogYE5FVF9ERVZMSU5LYCwgbWVhbmluZyBpZiBJIGVuYWJsZSBgTkVUREVWU0lNYCwgSSBhdXRvbWF0aWNhbGx5IGdldCBgTkVUX0RFVkxJTktgLiBUaGlzIG1lYW5zIGBORVRfREVWTElOS2AgaXMgYSBkZXBlbmRlbmN5IG9mIGBORVRERVZTSU1gLiBTbywgaXQgc2VlbXMgSSBuZWVkIHRvIGludmVzdGlnYXRlIGBORVRERVZTSU1gIG1vcmUgY2xvc2VseS4gSSBzaG91bGQgZ28gY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCB0byBzZWUgd2hhdCBpcyBnb2luZyBvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4MjgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDo1NS42MjEwNTc1NjZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTU1ODA5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUREVWU0lNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTYwMj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2h5cGVydi9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNjAzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6NjA0OmNvbmZpZyBORVRERVZTSU1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTYwNS1cXHR0cmlzdGF0ZSBcXFwiU2ltdWxhdGVkIG5ldHdvcmtpbmcgZGV2aWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDo1NS43NTA2MjAzMjFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI3Mzc1MzY4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIG5pdHR5LWdyaXR0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXR3b3JrIGRyaXZlcnMgYXJlIGNvbmZpZ3VyZWQsIHNvIGxldCdzIGp1bXAgcmlnaHQgaW50byBgZHJpdmVycy9uZXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2MDQuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgYSBjcnVjaWFsIHNlY3Rpb24gcmVsYXRlZCB0byB0aGUgY3VycmVudCBwcm9ibGVtIHJlc2lkZXMuIExldCdzIHNlZSB3aGF0J3MgYmVpbmcgZGVmaW5lZCB0aGVyZSBhbmQgaG93IGl0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgb3ZlcmFsbCBzeXN0ZW0gc2V0dXAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgc29tZSBpbnNpZ2h0cyBpbnRvIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGZvciBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc3ltYm9sIG9yIGJsb2NrIHRoYXQgYWZmZWN0cyB0aGUgYmVoYXZpb3IgSSBhbSBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzU3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTQ6NTguMDI0Mzc2MjI0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjA0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjA0OlxcdGNvbmZpZyBORVRERVZTSU1cXG4gNjA1OlxcdFxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgbmV0d29ya2luZyBkZXZpY2VcXFwiXFxuIDYwNjpcXHRcXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxuIDYwNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gNjA4OlxcdFxcdGRlcGVuZHMgb24gUFNBTVBMRSB8fCBQU0FNUExFPW5cXG4gNjA5OlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfTU9DSyB8fCBQVFBfMTU4OF9DTE9DS19NT0NLPW5cXG4gNjEwOlxcdFxcdHNlbGVjdCBORVRfREVWTElOS1xcbiA2MTE6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTFxcbiA2MTI6XFx0XFx0c2VsZWN0IE5FVF9TSEFQRVJcXG4gNjEzOlxcdFxcdGhlbHBcXG4gNjE0OlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIGFuZCBzb2Z0d2FyZSBtb2RlbCB0aGF0IGNhblxcbiA2MTU6XFx0XFx0ICBiZSB1c2VkIHRvIHRlc3QgdmFyaW91cyBjb250cm9sIHBhdGggbmV0d29ya2luZyBBUElzLCBlc3BlY2lhbGx5XFxuIDYxNjpcXHRcXHQgIEhXLW9mZmxvYWQgcmVsYXRlZC5cXG4gNjE3OlxcdFxcbiA2MTg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDYxOTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIG5ldGRldnNpbS5cXG4gNjIwOlxcdFxcbiA2MjE6XFx0Y29uZmlnIE5FVF9GQUlMT1ZFUlxcbiA2MjI6XFx0XFx0dHJpc3RhdGUgXFxcIkZhaWxvdmVyIGRyaXZlclxcXCJcXG4gNjIzOlxcdFxcdHNlbGVjdCBGQUlMT1ZFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NDo1OC4wMjQ0NDk0ODRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzM1MTkyODkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBzZWUuIEkgbmVlZCB0byBjb25maWd1cmUgdGhpcyBmdXp6aW5nIHNldHVwIGNvcnJlY3RseS4gRmlyc3QsIEknbSBjaGVja2luZyBmb3IgYE5FVF9ERVZMSU5LYCBhbmQgYE5FVERFVlNJTWAuIFRoZXNlIGFyZSB0aGUga2V5IHBpZWNlcyBoZXJlLiBTbywgd2hhdCBzaG91bGQgYmUgaW4gYEVuYWJsZUNvbmZpZ3NgPyBIbW0sIGRlZmluaXRlbHkgYE5FVF9ERVZMSU5LYCBhbmQgYE5FVERFVlNJTWAuIFdhaXQgYSBtaW51dGUuLi4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgYE5FVF9ERVZMSU5LYC4gSXMgaXQgZGlyZWN0bHkgc2VsZWN0YWJsZSwgb3IgaXMgaXQgaW1wbGljaXRseSBlbmFibGVkPyBSaWdodCwgaXQgZG9lc24ndCBoYXZlIGEgcHJvbXB0IGluIGBuZXQvS2NvbmZpZ2AsIG1lYW5pbmcgc2VsZWN0aW5nIGBORVRERVZTSU1gIG9yIG90aGVyIHJlbGV2YW50IGRyaXZlcnMgYWN0aXZhdGVzIGBORVRfREVWTElOS2AuIEdvb2QsIHNvIGluY2x1ZGluZyBib3RoIGBORVRfREVWTElOS2AgYW5kIGBORVRERVZTSU1gIGlzIHRoZSByaWdodCBtb3ZlIGZvciBicm9hZGVyIGNvdmVyYWdlLlxuXG5Ob3csIGxldCdzIHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEZpcnN0LCAqaXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmcqPyBZZXMsIGFic29sdXRlbHkuIEl0J3Mgd29ya2luZyB3aXRoIGZpcm13YXJlIGxvYWRpbmcgd2l0aGluIHRoZSBgZGV2bGlua2AgbmV0bGluayBjb21tYW5kIGhhbmRsZXIgKGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCkgYW5kIHRoZSBgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYCBoYW5kbGVyLiBCb3RoIGFyZSByZWFjaGFibGUgdmlhIG5ldGxpbmsvZXRodG9vbCBjb21tYW5kcyBmcm9tIHVucHJpdmlsZWdlZCBvciBwcml2aWxlZ2VkIHVzZXJzcGFjZSwgYW5kIGl0J3Mgb24gdmlydHVhbCBhbmQgZW11bGF0ZWQgbmV0d29yayBkZXZpY2VzIGxpa2UgYG5ldGRldnNpbWAuIFRoYXQncyBqdWljeSBwb3RlbnRpYWwgZm9yIGZpbmRpbmcgc29tZXRoaW5nIGludGVyZXN0aW5nLlxuXG5OZXh0LCBJIG5lZWQgdG8gZGVmaW5lIHRoZSBgRm9jdXNTeW1ib2xzYC4gVGhleSBhcmUgY2xlYXJseSBgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgYW5kIGBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVgLiBJbXBvcnRhbnRseSwgYm90aCBhcmUgbm9uLXN0YXRpYyBhbmQgbm90IGlubGluZWQg4oCTIEFQSSBlbnRyeXBvaW50cywgcGVyZmVjdC5cblxuRmluYWxseSwgY29uZmlybSB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFnYWluOiBgTkVUX0RFVkxJTktgIGFuZCBgTkVUREVWU0lNYC5cblxuQWxyaWdodCwgSSB0aGluayBJJ3ZlIGdvdCBldmVyeXRoaW5nIGNvdmVyZWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODUzLCJPdXRwdXRUb2tlbnMiOjEzMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjU1OjA1LjM3NjM4MTA0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU4MTEwMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9ERVZMSU5LXCIsXG4gICAgXCJORVRERVZTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0XCIsXG4gICAgXCJkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzd2l0Y2hlcyB0aGUgZmlybXdhcmUgcmVxdWVzdCBtZXRob2QgaW4gZGV2bGluayBmbGFzaCB1cGRhdGUgcm91dGluZXMgZnJvbSByZXF1ZXN0X2Zpcm13YXJlKCkgdG8gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoKS4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldGxpbmsgZGV2bGluayBhbmQgZXRodG9vbCBmbGFzaCB1cGRhdGUgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cyB1c2luZyBtb2NrIG5ldHdvcmsgZGV2aWNlcyBsaWtlIG5ldGRldnNpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfREVWTElOS1wiLFxuICAgIFwiTkVUREVWU0lNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdFwiLFxuICAgIFwiZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc3dpdGNoZXMgdGhlIGZpcm13YXJlIHJlcXVlc3QgbWV0aG9kIGluIGRldmxpbmsgZmxhc2ggdXBkYXRlIHJvdXRpbmVzIGZyb20gcmVxdWVzdF9maXJtd2FyZSgpIHRvIHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KCkuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXRsaW5rIGRldmxpbmsgYW5kIGV0aHRvb2wgZmxhc2ggdXBkYXRlIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMgdXNpbmcgbW9jayBuZXR3b3JrIGRldmljZXMgbGlrZSBuZXRkZXZzaW0uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA0OjU1OjA1LjQ1MjE5OTY5NloiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNzk0NzU4NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NTowNS40NTI3NjI3MzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDM3ODg5MDI0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2bGluayBmbGFzaCB1cGRhdGUgaGFuZGxlcnMgKGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBhbmQgYGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZWApIHRvIHVzZSBgcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoKWAgaW5zdGVhZCBvZiBgcmVxdWVzdF9maXJtd2FyZSgpYCwgYXZvaWRpbmcgdGhlIGZhbGxiYWNrIHRvIHRoZSB1c2VybW9kZSBoZWxwZXIgd2hlbiByZXF1ZXN0aW5nIGZpcm13YXJlIGZpbGVzLlxcblxcbkJvdGggY2FsbCBzaXRlcyB6ZXJvLWluaXRpYWxpemUgdGhlaXIgc3RhY2sgc3RydWN0dXJlcyAoYHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgcGFyYW1zID0ge307YCkuIE9uIGZhaWx1cmUsIHRoZSByZXR1cm4gY29kZSBpcyBjaGVja2VkIGFuZCBleGVjdXRpb24gZXhpdHMgd2l0aG91dCByZWFkaW5nIGBwYXJhbXMuZndgLiBPbiBzdWNjZXNzLCB0aGUgZmlybXdhcmUgc3RydWN0IHBvaW50ZXIgaXMgc2V0IGJ5IHRoZSBmaXJtd2FyZSBsb2FkZXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3QgcGFkZGluZyBleHBvc3VyZSwgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiwgYW5kIHN0YW5kYXJkIEtBU0FOL3Rlc3RpbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZjgzODA0OGEwNDQ2NThmNGU2ZmY2M2MzYTYzOWExY2ZlN2IyOTczXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwNDo1NDowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9kZXZsaW5rL2Rldi5jIGIvbmV0L2RldmxpbmsvZGV2LmNcbmluZGV4IDU1OTU5YjBmZjVhYjQuLmI4NWJiMDJhOWU4MDcgMTAwNjQ0XG4tLS0gYS9uZXQvZGV2bGluay9kZXYuY1xuKysrIGIvbmV0L2RldmxpbmsvZGV2LmNcbkBAIC0xMTY5LDcgKzExNjksNyBAQCBpbnQgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFxuIFx0bmxhX2ZpbGVfbmFtZSA9IGluZm8tXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9GSUxFX05BTUVdO1xuIFx0ZmlsZV9uYW1lID0gbmxhX2RhdGEobmxhX2ZpbGVfbmFtZSk7XG4tXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFx1MDAyNnBhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLVx1MDAzZWRldik7XG4rXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cdTAwM2VkZXYpO1xuIFx0aWYgKHJldCkge1xuIFx0XHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXHUwMDNlZXh0YWNrLCBubGFfZmlsZV9uYW1lLFxuIFx0XHRcdFx0ICAgIFwiZmFpbGVkIHRvIGxvY2F0ZSB0aGUgcmVxdWVzdGVkIGZpcm13YXJlIGZpbGVcIik7XG5AQCAtMTI0NSw3ICsxMjQ1LDcgQEAgaW50IGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgY29uc3QgY2hhciAqZmlsZV9uYW1lKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKFx1MDAyNnBhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLVx1MDAzZWRldik7XG4rXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcdTAwMjZwYXJhbXMuZncsIGZpbGVfbmFtZSwgZGV2bGluay1cdTAwM2VkZXYpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTU6MDUuNDUyNzYzOTY3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQxMzI3NTYzNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXZsaW5rIEZsYXNoIFVwZGF0ZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIHdlJ3JlIG1vdmluZyBmcm9tIHVzaW5nIGByZXF1ZXN0X2Zpcm13YXJlYCB0byBgcmVxdWVzdF9maXJtd2FyZV9kaXJlY3RgIHdpdGhpbiB0aGUgYG5ldC9kZXZsaW5rL2Rldi5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgYW5kIGBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVgIGZ1bmN0aW9ucy4gVGhpcyBzY3JlYW1zIGZpcm13YXJlIHVwZGF0ZSBoYW5kbGluZywgYW5kIGdpdmVuIHRoZSBmdW5jdGlvbiBuYW1lcywgSSdkIGJldCB3ZSdyZSBkZWFsaW5nIHdpdGggdXBkYXRpbmcgdGhlIGZpcm13YXJlIG9uIGEgZGV2aWNlIG1hbmFnZWQgYnkgdGhlIGRldmxpbmsgc3Vic3lzdGVtLlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpcyAqd2h5KiB0aGUgc3dpdGNoPyBgcmVxdWVzdF9maXJtd2FyZV9kaXJlY3RgIHN1Z2dlc3RzIGEgbW9yZSBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZmlybXdhcmUgYmxvYiwgcG90ZW50aWFsbHkgYnlwYXNzaW5nIHNvbWUgaW50ZXJtZWRpYXJ5IGNhY2hpbmcgb3IgcHJvY2Vzc2luZyBzdGVwcyB0aGF0IGByZXF1ZXN0X2Zpcm13YXJlYCBtaWdodCBoYXZlIGludm9sdmVkLiBJcyB0aGlzIGFib3V0IHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgb3IgcGVyaGFwcyB0byBzdXBwb3J0IGEgbmV3IGRpcmVjdC1hY2Nlc3MgbW9kZSBpbiB0aGUgaGFyZHdhcmU/XG5cblRvIGdldCBhIGJldHRlciBncmlwIG9uIHRoaXMsIEkgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQuIExldCBtZSBwdWxsIHVwIHRoYXQgc2VjdGlvbiBvZiBgbmV0L2RldmxpbmsvZGV2LmNgIHVzaW5nIGByZWFkLWZpbGVgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDExNjAgdG8gMTI2MC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRob3NlIGByZXF1ZXN0X2Zpcm13YXJlYCBjYWxscyB3ZXJlIGJlaW5nIHVzZWQgYmVmb3JlLCBhbmQgd2hhdCBvdGhlciBjaGFuZ2VzIG9yIGNvbnNpZGVyYXRpb25zIGFyZSBiZWluZyBoYW5kbGVkIGFsb25nIHdpdGggdGhlIHVwZGF0ZSBwcm9jZXNzLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgd2hlbiBpdCBjb21lcyB0byBmaXJtd2FyZSB1cGRhdGVzIGFuZCB0aGUgZGV2bGluayBzdWJzeXN0ZW0uIFRoaXMgY291bGQgYmUgYSBzaWduaWZpY2FudCBjaGFuZ2UgYW5kIG5lZWRzIGEgZnVsbCByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NTowOS41ODU1MjQyOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2RldmxpbmsvZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1MCxcbiAgXCJMaW5lQ291bnRcIjogMTEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExNTA6XFx0XFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX0NPTVBPTkVOVF0sXFxuMTE1MTpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZwYXJhbXMuY29tcG9uZW50LCBpbmZvLVxcdTAwM2VleHRhY2spO1xcbjExNTI6XFx0XFx0aWYgKHJldClcXG4xMTUzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE1NDpcXHRcXG4xMTU1OlxcdFxcdHN1cHBvcnRlZF9wYXJhbXMgPSBkZXZsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZXN1cHBvcnRlZF9mbGFzaF91cGRhdGVfcGFyYW1zO1xcbjExNTY6XFx0XFxuMTE1NzpcXHRcXHRubGFfb3ZlcndyaXRlX21hc2sgPSBpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX09WRVJXUklURV9NQVNLXTtcXG4xMTU4OlxcdFxcdGlmIChubGFfb3ZlcndyaXRlX21hc2spIHtcXG4xMTU5OlxcdFxcdFxcdHN0cnVjdCBubGFfYml0ZmllbGQzMiBzZWN0aW9ucztcXG4xMTYwOlxcdFxcbjExNjE6XFx0XFx0XFx0aWYgKCEoc3VwcG9ydGVkX3BhcmFtcyBcXHUwMDI2IERFVkxJTktfU1VQUE9SVF9GTEFTSF9VUERBVEVfT1ZFUldSSVRFX01BU0spKSB7XFxuMTE2MjpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXFx1MDAzZWV4dGFjaywgbmxhX292ZXJ3cml0ZV9tYXNrLFxcbjExNjM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJvdmVyd3JpdGUgc2V0dGluZ3MgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcXFwiKTtcXG4xMTY0OlxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTY1OlxcdFxcdFxcdH1cXG4xMTY2OlxcdFxcdFxcdHNlY3Rpb25zID0gbmxhX2dldF9iaXRmaWVsZDMyKG5sYV9vdmVyd3JpdGVfbWFzayk7XFxuMTE2NzpcXHRcXHRcXHRwYXJhbXMub3ZlcndyaXRlX21hc2sgPSBzZWN0aW9ucy52YWx1ZSBcXHUwMDI2IHNlY3Rpb25zLnNlbGVjdG9yO1xcbjExNjg6XFx0XFx0fVxcbjExNjk6XFx0XFxuMTE3MDpcXHRcXHRubGFfZmlsZV9uYW1lID0gaW5mby1cXHUwMDNlYXR0cnNbREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9GSUxFX05BTUVdO1xcbjExNzE6XFx0XFx0ZmlsZV9uYW1lID0gbmxhX2RhdGEobmxhX2ZpbGVfbmFtZSk7XFxuMTE3MjpcXHRcXHRyZXQgPSByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdChcXHUwMDI2cGFyYW1zLmZ3LCBmaWxlX25hbWUsIGRldmxpbmstXFx1MDAzZWRldik7XFxuMTE3MzpcXHRcXHRpZiAocmV0KSB7XFxuMTE3NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSKGluZm8tXFx1MDAzZWV4dGFjaywgbmxhX2ZpbGVfbmFtZSxcXG4xMTc1OlxcdFxcdFxcdFxcdFxcdCAgICBcXFwiZmFpbGVkIHRvIGxvY2F0ZSB0aGUgcmVxdWVzdGVkIGZpcm13YXJlIGZpbGVcXFwiKTtcXG4xMTc2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE3NzpcXHRcXHR9XFxuMTE3ODpcXHRcXG4xMTc5OlxcdFxcdGRldmxpbmtfZmxhc2hfdXBkYXRlX2JlZ2luX25vdGlmeShkZXZsaW5rKTtcXG4xMTgwOlxcdFxcdHJldCA9IGRldmxpbmstXFx1MDAzZW9wcy1cXHUwMDNlZmxhc2hfdXBkYXRlKGRldmxpbmssIFxcdTAwMjZwYXJhbXMsIGluZm8tXFx1MDAzZWV4dGFjayk7XFxuMTE4MTpcXHRcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9lbmRfbm90aWZ5KGRldmxpbmspO1xcbjExODI6XFx0XFxuMTE4MzpcXHRcXHRyZWxlYXNlX2Zpcm13YXJlKHBhcmFtcy5mdyk7XFxuMTE4NDpcXHRcXG4xMTg1OlxcdFxcdHJldHVybiByZXQ7XFxuMTE4NjpcXHR9XFxuMTE4NzpcXHRcXG4xMTg4OlxcdHN0YXRpYyB2b2lkIF9fZGV2bGlua19jb21wYXRfcnVubmluZ192ZXJzaW9uKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxcbjExODk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuMTE5MDpcXHR7XFxuMTE5MTpcXHRcXHRzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSByZXEgPSB7fTtcXG4xMTkyOlxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYXR0cjtcXG4xMTkzOlxcdFxcdHN0cnVjdCBza19idWZmICptc2c7XFxuMTE5NDpcXHRcXHRpbnQgcmVtLCBlcnI7XFxuMTE5NTpcXHRcXG4xMTk2OlxcdFxcdG1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpO1xcbjExOTc6XFx0XFx0aWYgKCFtc2cpXFxuMTE5ODpcXHRcXHRcXHRyZXR1cm47XFxuMTE5OTpcXHRcXG4xMjAwOlxcdFxcdHJlcS5tc2cgPSBtc2c7XFxuMTIwMTpcXHRcXHRlcnIgPSBkZXZsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZWluZm9fZ2V0KGRldmxpbmssIFxcdTAwMjZyZXEsIE5VTEwpO1xcbjEyMDI6XFx0XFx0aWYgKGVycilcXG4xMjAzOlxcdFxcdFxcdGdvdG8gZnJlZV9tc2c7XFxuMTIwNDpcXHRcXG4xMjA1OlxcdFxcdG5sYV9mb3JfZWFjaF9hdHRyX3R5cGUobmxhdHRyLCBERVZMSU5LX0FUVFJfSU5GT19WRVJTSU9OX1JVTk5JTkcsXFxuMTIwNjpcXHRcXHRcXHRcXHQgICAgICAgKHZvaWQgKiltc2ctXFx1MDAzZWRhdGEsIG1zZy1cXHUwMDNlbGVuLCByZW0pIHtcXG4xMjA3OlxcdFxcdFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmt2O1xcbjEyMDg6XFx0XFx0XFx0aW50IHJlbV9rdjtcXG4xMjA5OlxcdFxcbjEyMTA6XFx0XFx0XFx0bmxhX2Zvcl9lYWNoX25lc3RlZF90eXBlKGt2LCBERVZMSU5LX0FUVFJfSU5GT19WRVJTSU9OX1ZBTFVFLFxcbjEyMTE6XFx0XFx0XFx0XFx0XFx0XFx0IG5sYXR0ciwgcmVtX2t2KSB7XFxuMTIxMjpcXHRcXHRcXHRcXHRzdHJsY2F0KGJ1ZiwgbmxhX2RhdGEoa3YpLCBsZW4pO1xcbjEyMTM6XFx0XFx0XFx0XFx0c3RybGNhdChidWYsIFxcXCIgXFxcIiwgbGVuKTtcXG4xMjE0OlxcdFxcdFxcdH1cXG4xMjE1OlxcdFxcdH1cXG4xMjE2OlxcdGZyZWVfbXNnOlxcbjEyMTc6XFx0XFx0bmxtc2dfY29uc3VtZShtc2cpO1xcbjEyMTg6XFx0fVxcbjEyMTk6XFx0XFxuMTIyMDpcXHR2b2lkIGRldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4xMjIxOlxcdFxcdFxcdFxcdFxcdCAgICBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuMTIyMjpcXHR7XFxuMTIyMzpcXHRcXHRpZiAoIWRldmxpbmstXFx1MDAzZW9wcy1cXHUwMDNlaW5mb19nZXQpXFxuMTIyNDpcXHRcXHRcXHRyZXR1cm47XFxuMTIyNTpcXHRcXG4xMjI2OlxcdFxcdGRldmxfbG9jayhkZXZsaW5rKTtcXG4xMjI3OlxcdFxcdGlmIChkZXZsX2lzX3JlZ2lzdGVyZWQoZGV2bGluaykpXFxuMTIyODpcXHRcXHRcXHRfX2RldmxpbmtfY29tcGF0X3J1bm5pbmdfdmVyc2lvbihkZXZsaW5rLCBidWYsIGxlbik7XFxuMTIyOTpcXHRcXHRkZXZsX3VubG9jayhkZXZsaW5rKTtcXG4xMjMwOlxcdH1cXG4xMjMxOlxcdFxcbjEyMzI6XFx0aW50IGRldmxpbmtfY29tcGF0X2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgY29uc3QgY2hhciAqZmlsZV9uYW1lKVxcbjEyMzM6XFx0e1xcbjEyMzQ6XFx0XFx0c3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyBwYXJhbXMgPSB7fTtcXG4xMjM1OlxcdFxcdGludCByZXQ7XFxuMTIzNjpcXHRcXG4xMjM3OlxcdFxcdGRldmxfbG9jayhkZXZsaW5rKTtcXG4xMjM4OlxcdFxcdGlmICghZGV2bF9pc19yZWdpc3RlcmVkKGRldmxpbmspKSB7XFxuMTIzOTpcXHRcXHRcXHRyZXQgPSAtRU5PREVWO1xcbjEyNDA6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjEyNDE6XFx0XFx0fVxcbjEyNDI6XFx0XFxuMTI0MzpcXHRcXHRpZiAoIWRldmxpbmstXFx1MDAzZW9wcy1cXHUwMDNlZmxhc2hfdXBkYXRlKSB7XFxuMTI0NDpcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4xMjQ1OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMjQ2OlxcdFxcdH1cXG4xMjQ3OlxcdFxcbjEyNDg6XFx0XFx0cmV0ID0gcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoXFx1MDAyNnBhcmFtcy5mdywgZmlsZV9uYW1lLCBkZXZsaW5rLVxcdTAwM2VkZXYpO1xcbjEyNDk6XFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTU6MDkuNTg1NjQyODVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxNDE4NzMzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyBvbiBpbiB0aGUgYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgIGZ1bmN0aW9uLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIGBkZXZsaW5rX25sX2ZsYXNoX3VwZGF0ZV9kb2l0YCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgIGZ1bmN0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiB0aGlzIGlzIHdoZXJlIHRoZSAqYWN0aW9uKiBoYXBwZW5zLCB0aGUgbWVhdCBvZiB0aGUgZmxhc2ggdXBkYXRlIHZpYSBuZXRsaW5rLiBJIGJldCB0aGlzIGlzIHRoZSBjZW50cmFsIGNvbnRyb2wgcG9pbnQuIEl04oCZcyBnb3QgXCJkb2l0XCIgaW4gdGhlIG5hbWUsIHNvIEkgZXhwZWN0IGEgbG90IG9mIHN0ZXBzIGFyZSBoYW5kbGVkIGhlcmUuIEknbSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZsb3csIHRoZSBpbnB1dCB2YWxpZGF0aW9uLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLlxuXG5JJ20gdGhpbmtpbmcsIFwiRmxhc2ggdXBkYXRlXCIgc3VnZ2VzdHMgcG90ZW50aWFsbHkgcmlza3kgb3BlcmF0aW9ucyAtIHRoaXMgYmV0dGVyIGhhdmUgc29tZSBzZXJpb3VzIGVycm9yIGNoZWNraW5nIGFuZCBzYWZldHkgbWVjaGFuaXNtcyBpbiBwbGFjZS4gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgZm9yIGJyaWNraW5nIHRoZSBkZXZpY2UgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuIFdoYXQncyB0aGUgcHJvdG9jb2wgaGVyZT8gSXMgdGhlcmUgYSBjaGVja3N1bSBpbnZvbHZlZD8gSG93IGRvZXMgaXQgaGFuZGxlIHBhcnRpYWwgdXBkYXRlcz8gUG93ZXIgZmFpbHVyZXM/IEkgaGF2ZSBhIGxvdCBvZiBxdWVzdGlvbnMuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHRoZSBsaW5jaHBpbiBvZiBhbnkgZmxhc2gtcmVsYXRlZCBuZXRsaW5rIG9wZXJhdGlvbnMsIHNvIGl0IG5lZWRzIHRvIGJlIGJ1bGxldHByb29mLiBJJ2xsIG5lZWQgdG8ga25vdzogaG93IGFyZSBjb21tYW5kcyBwYXJzZWQsIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGRhdGEsIGFuZCBob3cgdGhhdCB0cmFuc2xhdGVzIHRvIGRldmljZSBvcGVyYXRpb25zLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQuIExldCdzIHNlZSBob3cgaXQga2lja3Mgb2ZmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mjc0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNDo1NToxMS44OTk4MzMxNjFaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2RldmxpbmsvZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEzMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEzMDpcXHRcXHQqcF9jb21wb25lbnQgPSBjb21wb25lbnQ7XFxuMTEzMTpcXHRcXHRyZXR1cm4gMDtcXG4xMTMyOlxcdH1cXG4xMTMzOlxcdFxcbjExMzQ6XFx0aW50IGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4xMTM1OlxcdHtcXG4xMTM2OlxcdFxcdHN0cnVjdCBubGF0dHIgKm5sYV9vdmVyd3JpdGVfbWFzaywgKm5sYV9maWxlX25hbWU7XFxuMTEzNzpcXHRcXHRzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zIHBhcmFtcyA9IHt9O1xcbjExMzg6XFx0XFx0c3RydWN0IGRldmxpbmsgKmRldmxpbmsgPSBkZXZsaW5rX25sX2N0eChpbmZvKS1cXHUwMDNlZGV2bGluaztcXG4xMTM5OlxcdFxcdGNvbnN0IGNoYXIgKmZpbGVfbmFtZTtcXG4xMTQwOlxcdFxcdHUzMiBzdXBwb3J0ZWRfcGFyYW1zO1xcbjExNDE6XFx0XFx0aW50IHJldDtcXG4xMTQyOlxcdFxcbjExNDM6XFx0XFx0aWYgKCFkZXZsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZWZsYXNoX3VwZGF0ZSlcXG4xMTQ0OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMTQ1OlxcdFxcbjExNDY6XFx0XFx0aWYgKEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgREVWTElOS19BVFRSX0ZMQVNIX1VQREFURV9GSUxFX05BTUUpKVxcbjExNDc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTE0ODpcXHRcXG4xMTQ5OlxcdFxcdHJldCA9IGRldmxpbmtfZmxhc2hfY29tcG9uZW50X2dldChkZXZsaW5rLFxcbjExNTA6XFx0XFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX0NPTVBPTkVOVF0sXFxuMTE1MTpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZwYXJhbXMuY29tcG9uZW50LCBpbmZvLVxcdTAwM2VleHRhY2spO1xcbjExNTI6XFx0XFx0aWYgKHJldClcXG4xMTUzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTE1NDpcXHRcXG4xMTU1OlxcdFxcdHN1cHBvcnRlZF9wYXJhbXMgPSBkZXZsaW5rLVxcdTAwM2VvcHMtXFx1MDAzZXN1cHBvcnRlZF9mbGFzaF91cGRhdGVfcGFyYW1zO1xcbjExNTY6XFx0XFxuMTE1NzpcXHRcXHRubGFfb3ZlcndyaXRlX21hc2sgPSBpbmZvLVxcdTAwM2VhdHRyc1tERVZMSU5LX0FUVFJfRkxBU0hfVVBEQVRFX09WRVJXUklURV9NQVNLXTtcXG4xMTU4OlxcdFxcdGlmIChubGFfb3ZlcndyaXRlX21hc2spIHtcXG4xMTU5OlxcdFxcdFxcdHN0cnVjdCBubGFfYml0ZmllbGQzMiBzZWN0aW9ucztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTU6MTEuODk5OTI1OTExWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5MzE3MDE5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEZpcm13YXJlIExvYWRpbmcgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCBjaGFuZ2luZyBob3cgZmlybXdhcmUgaXMgbG9hZGVkIGluIHRoZSBgZGV2bGlua2AgZmxhc2ggdXBkYXRlIHBhdGhzLCBzcGVjaWZpY2FsbHkgc3dpdGNoaW5nIGZyb20gYHJlcXVlc3RfZmlybXdhcmUoKWAgdG8gYHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KClgLiBUaGUgZ29hbD8gVG8gYnlwYXNzIHRoZSB1c2VybW9kZSBoZWxwZXIgZmFsbGJhY2sgYW5kIHNpbGVuY2UgdGhvc2Ugbm9pc3kgd2FybmluZ3Mgd2hlbiBhIGZpcm13YXJlIGZpbGUgaXNuJ3QgZm91bmQgcmlnaHQgYXdheS4gTm8gbmVlZCB0byB0cmlnZ2VyIGEgdXNlciBzcGFjZSBldmVudCB3aGVuIHdlIGtub3cgaXQgd29uJ3QgYmUgdGhlcmUuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzIG1lbW9yeSBzYWZldHkuIEFtIEkgb3BlbmluZyB1cCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYnkgZG9pbmcgdGhpcz8gTGV0J3MgZGlzc2VjdCBpdC4gRmlyc3Qgb2ZmLCBgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyBwYXJhbXMgPSB7fTtgIGdldHMgemVyby1pbml0aWFsaXplZC4gTmljZS4gYHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0YCBzZXRzIGBwYXJhbXMuZndgICpvbmx5KiBvbiBzdWNjZXNzLiBJZiB0aGVyZSdzIGFuIGVycm9yLCBgcmV0YCBpcyBub24temVybywgYW5kIHdlIGJhaWwgb3V0IGltbWVkaWF0ZWx5LCBuZXZlciB0b3VjaGluZyBgcGFyYW1zLmZ3YC4gVGhlIGZpcm13YXJlIGxvYWRpbmcgaXRzZWxmIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBmaXJtd2FyZSBsb2FkZXIgc3Vic3lzdGVtIGFueXdheS4gTm8gbmV3IGJ1ZmZlcnMgYXJlIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQgb3IgcmVhZC4gTm8gcGFkZGluZyBzaGVuYW5pZ2FucyBhcmUgaGFwcGVuaW5nLiBUaGUgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIHJlbWFpbiB1bmNoYW5nZWQuIE5vcGUsIEkgZG9uJ3Qgc2VlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBoZXJlLlxuXG5Ob3csIGxldCdzIGJlIHRob3JvdWdoIGFuZCBjaGVjayBhZ2FpbnN0IHRoZSBLTVNBTiByZXF1aXJlbWVudHMuIFJlbWVtYmVyLCB3ZSBuZWVkIGBOZWVkc0tNU0FOPXRydWVgIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIGZpZWxkcy4gTm90IGhlcmUuXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIE5vcGUuXG4zLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgbGF0ZXIgcmVhZC4gTm8gd2F5LlxuNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIE5vcGUsIHRoZSBmaXJtd2FyZSBsb2FkZXIgaGFuZGxlcyB0aGUgYnVmZmVyLCBhbmQgd2UncmUganVzdCBnZXR0aW5nIGEgcG9pbnRlciB0byBpdC5cblxuU2luY2Ugbm9uZSBvZiB0aG9zZSBhcHBseSwgYE5lZWRzS01TQU49ZmFsc2VgLiBXZSdyZSBnb29kLlxuXG5Pa2F5LCBsZXQncyBzdW1tYXJpemUgdGhlIHJlYXNvbmluZyBmb3IgdGhpcyBjaGFuZ2U6XG4xLiBUaGUgcGF0Y2ggc3dpdGNoZXMgdGhlIGZpcm13YXJlIGxvYWRpbmcgaW4gZGV2bGluayBmbGFzaCB1cGRhdGUgcGF0aHMgZnJvbSBgcmVxdWVzdF9maXJtd2FyZSgpYCB0byBgcmVxdWVzdF9maXJtd2FyZV9kaXJlY3QoKWAuXG4yLiBNZW1vcnkgaXMgc2FmZS4gVGhlIHBhcmFtcyBhcmUgemVyby1pbml0aWFsaXplZCwgYW5kIHRoZSBmaXJtd2FyZSBwb2ludGVyIGlzIG9ubHkgc2V0IG9uIHN1Y2Nlc3MuIEVycm9yIHBhdGhzIGFyZSBoYW5kbGVkIGdyYWNlZnVsbHkuXG4zLiBObyBLTVNBTiBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBleHBvc2UgaGVhcC9zdGFjayBtZW1vcnkgdG8gdGhlIHVzZXIsIG9yIGV4cG9zZSBwYWRkaW5nLiBTdGFuZGFyZCBkZXRlY3RvcnMgKEtBU0FOKSB3aWxsIGNhdGNoIGFueSBpc3N1ZXMgKGxpa2UgdXNlLWFmdGVyLWZyZWUsIG9yIG51bGwtcG9pbnRlciBkZXJlZmVyZW5jZSkuXG5cbkFscmlnaHQsIEkgdGhpbmsgSSd2ZSBnb3QgYSBzb2xpZCBjYXNlIGhlcmUuIExldCdzIGdldCB0aGlzIG1vdmluZyB3aXRoIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMjgsIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDQ6NTU6MTkuODMxNjMwNzIzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkZXZsaW5rIGZsYXNoIHVwZGF0ZSBoYW5kbGVycyAoYGRldmxpbmtfbmxfZmxhc2hfdXBkYXRlX2RvaXRgIGFuZCBgZGV2bGlua19jb21wYXRfZmxhc2hfdXBkYXRlYCkgdG8gdXNlIGByZXF1ZXN0X2Zpcm13YXJlX2RpcmVjdCgpYCBpbnN0ZWFkIG9mIGByZXF1ZXN0X2Zpcm13YXJlKClgLCBhdm9pZGluZyB0aGUgZmFsbGJhY2sgdG8gdGhlIHVzZXJtb2RlIGhlbHBlciB3aGVuIHJlcXVlc3RpbmcgZmlybXdhcmUgZmlsZXMuXFxuXFxuQm90aCBjYWxsIHNpdGVzIHplcm8taW5pdGlhbGl6ZSB0aGVpciBzdGFjayBzdHJ1Y3R1cmVzIChgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyBwYXJhbXMgPSB7fTtgKS4gT24gZmFpbHVyZSwgdGhlIHJldHVybiBjb2RlIGlzIGNoZWNrZWQgYW5kIGV4ZWN1dGlvbiBleGl0cyB3aXRob3V0IHJlYWRpbmcgYHBhcmFtcy5md2AuIE9uIHN1Y2Nlc3MsIHRoZSBmaXJtd2FyZSBzdHJ1Y3QgcG9pbnRlciBpcyBzZXQgYnkgdGhlIGZpcm13YXJlIGxvYWRlci4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdCBwYWRkaW5nIGV4cG9zdXJlLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLCBhbmQgc3RhbmRhcmQgS0FTQU4vdGVzdGluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRldmxpbmsgZmxhc2ggdXBkYXRlIGhhbmRsZXJzIChgZGV2bGlua19ubF9mbGFzaF91cGRhdGVfZG9pdGAgYW5kIGBkZXZsaW5rX2NvbXBhdF9mbGFzaF91cGRhdGVgKSB0byB1c2UgYHJlcXVlc3RfZmlybXdhcmVfZGlyZWN0KClgIGluc3RlYWQgb2YgYHJlcXVlc3RfZmlybXdhcmUoKWAsIGF2b2lkaW5nIHRoZSBmYWxsYmFjayB0byB0aGUgdXNlcm1vZGUgaGVscGVyIHdoZW4gcmVxdWVzdGluZyBmaXJtd2FyZSBmaWxlcy5cXG5cXG5Cb3RoIGNhbGwgc2l0ZXMgemVyby1pbml0aWFsaXplIHRoZWlyIHN0YWNrIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zIHBhcmFtcyA9IHt9O2ApLiBPbiBmYWlsdXJlLCB0aGUgcmV0dXJuIGNvZGUgaXMgY2hlY2tlZCBhbmQgZXhlY3V0aW9uIGV4aXRzIHdpdGhvdXQgcmVhZGluZyBgcGFyYW1zLmZ3YC4gT24gc3VjY2VzcywgdGhlIGZpcm13YXJlIHN0cnVjdCBwb2ludGVyIGlzIHNldCBieSB0aGUgZmlybXdhcmUgbG9hZGVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcgZXhwb3N1cmUsIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4sIGFuZCBzdGFuZGFyZCBLQVNBTi90ZXN0aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdx9zd[1] Phase: Succeeded StartedAt: 2026-09-03 04:55:41 +0000 UTC FinishedAt: 2026-09-03 04:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 04:55:41 +0000 UTC FinishedAt: 2026-09-03 04:55:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2] Phase: Succeeded StartedAt: 2026-09-03 04:55:41 +0000 UTC FinishedAt: 2026-09-03 05:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 04:55:41 +0000 UTC FinishedAt: 2026-09-03 05:37:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 04:55:41 +0000 UTC FinishedAt: 2026-09-03 04:55:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 04:55:41 +0000 UTC FinishedAt: 2026-09-03 04:55:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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-workflowdx9zd/series-workflowdx9zd-convert-artifact-62331389/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 04:55:51 +0000 UTC FinishedAt: 2026-09-03 05:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 04:55:51 +0000 UTC FinishedAt: 2026-09-03 05:15:11 +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:*eba813d4-1f99-49fd-9c44-efec1e30c045,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-workflowdx9zd/series-workflowdx9zd-convert-artifact-62331389/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": "588b69f0-4b7b-4e84-a7f5-012248f6189d", "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-workflowdx9zd/series-workflowdx9zd-build-action-784073523/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 04:55:51 +0000 UTC FinishedAt: 2026-09-03 05:13:59 +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:*eba813d4-1f99-49fd-9c44-efec1e30c045,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-workflowdx9zd/series-workflowdx9zd-convert-artifact-62331389/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": "588b69f0-4b7b-4e84-a7f5-012248f6189d", "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-workflowdx9zd/series-workflowdx9zd-build-action-784073523/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:15:11 +0000 UTC FinishedAt: 2026-09-03 05:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:15:11 +0000 UTC FinishedAt: 2026-09-03 05:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:15:11 +0000 UTC FinishedAt: 2026-09-03 05:15:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:15:11 +0000 UTC FinishedAt: 2026-09-03 05:15:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-workflowdx9zd/series-workflowdx9zd-convert-artifact-3562542168/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:15:30 +0000 UTC FinishedAt: 2026-09-03 05:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:15:30 +0000 UTC FinishedAt: 2026-09-03 05:17:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*588b69f0-4b7b-4e84-a7f5-012248f6189d,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-workflowdx9zd/series-workflowdx9zd-build-action-784073523/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-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:17:41 +0000 UTC FinishedAt: 2026-09-03 05:17:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:17:41 +0000 UTC FinishedAt: 2026-09-03 05:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:17:42 +0000 UTC FinishedAt: 2026-09-03 05:33:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:17:42 +0000 UTC FinishedAt: 2026-09-03 05:33:53 +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:*eba813d4-1f99-49fd-9c44-efec1e30c045,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-workflowdx9zd/series-workflowdx9zd-convert-artifact-3562542168/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": "20d394f1-fbb5-44c4-b9d3-b8e4484e15e4", "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-workflowdx9zd/series-workflowdx9zd-build-action-1023655364/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:17:42 +0000 UTC FinishedAt: 2026-09-03 05:33:43 +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:*eba813d4-1f99-49fd-9c44-efec1e30c045,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-workflowdx9zd/series-workflowdx9zd-convert-artifact-3562542168/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": "20d394f1-fbb5-44c4-b9d3-b8e4484e15e4", "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-workflowdx9zd/series-workflowdx9zd-build-action-1023655364/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:33:53 +0000 UTC FinishedAt: 2026-09-03 05:33:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:33:53 +0000 UTC FinishedAt: 2026-09-03 05:33:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:33:53 +0000 UTC FinishedAt: 2026-09-03 05:35:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:33:53 +0000 UTC FinishedAt: 2026-09-03 05:35:48 +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:*20d394f1-fbb5-44c4-b9d3-b8e4484e15e4,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-workflowdx9zd/series-workflowdx9zd-build-action-1023655364/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-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:35:57 +0000 UTC FinishedAt: 2026-09-03 05:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:35:57 +0000 UTC FinishedAt: 2026-09-03 05:37:14 +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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"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:*588b69f0-4b7b-4e84-a7f5-012248f6189d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*20d394f1-fbb5-44c4-b9d3-b8e4484e15e4,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-workflowdx9zd/series-workflowdx9zd-build-action-784073523/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-workflowdx9zd/series-workflowdx9zd-build-action-1023655364/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:35:57 +0000 UTC FinishedAt: 2026-09-03 05:36:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:35:57 +0000 UTC FinishedAt: 2026-09-03 05:36:01 +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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"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-workflowdx9zd/series-workflowdx9zd-convert-artifact-2414857777/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:35:57 +0000 UTC FinishedAt: 2026-09-03 05:35:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:35:57 +0000 UTC FinishedAt: 2026-09-03 05:35:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:35:57 +0000 UTC FinishedAt: 2026-09-03 05:35:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:36:07 +0000 UTC FinishedAt: 2026-09-03 05:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdx9zd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"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":["devlink_nl_flash_update_doit","devlink_compat_flash_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_DEVLINK","NETDEVSIM"],"series_id":"8a63ea0d-f924-496b-a838-57efdd9c07d4","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-09-03 05:36:07 +0000 UTC FinishedAt: 2026-09-03 05:37:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*588b69f0-4b7b-4e84-a7f5-012248f6189d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*20d394f1-fbb5-44c4-b9d3-b8e4484e15e4,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-workflowdx9zd/series-workflowdx9zd-build-action-784073523/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-workflowdx9zd/series-workflowdx9zd-build-action-1023655364/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-workflowdx9zd/series-workflowdx9zd-convert-artifact-2414857777/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,}