Name: series-workflowdhldv Phase: Succeeded StartedAt: 2026-08-25 04:52:36 +0000 UTC FinishedAt: 2026-08-25 08:49:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[0] Phase: Succeeded StartedAt: 2026-08-25 04:52:36 +0000 UTC FinishedAt: 2026-08-25 05:10:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 04:52:36 +0000 UTC FinishedAt: 2026-08-25 05:10:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ETHTOOL_NETLINK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ETHTOOL_NETLINK" ], "series_id": "9efbd7b1-620a-4f70-9c56-1f5773c6efd6" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ethnl_act_phy_test" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VUSFRPT0xfTkVUTElOSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V0aG5sX2FjdF9waHlfdGVzdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kcyAoYElOVEZfQ0FQU19HRVRgLCBgUEhZX1RFU1RfR0VUYCwgYFBIWV9URVNUX0FDVGApIHRvIHF1ZXJ5IGludGVyZmFjZSBjYXBhYmlsaXRpZXMgYW5kIGNvbmZpZ3VyZSBQSFkgdGVzdHMuIFRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGJldHdlZW4gdGhlIGV0aHRvb2wgY29yZSBhbmQgdGhlIGRyaXZlcnMgKGBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHNgIGFuZCBgc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3RgKSBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5LlxuXG5Ib3dldmVyLCB0aGUgZXRodG9vbCBuZXRsaW5rIGZyYW1ld29yayBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZXMgdGhlIHJlcGx5IGRhdGEgc3RydWN0dXJlcyB2aWEgYGV0aG5sX2luaXRfcmVwbHlfZGF0YSgpYCAod2hpY2ggY2FsbHMgYG1lbXNldChyZXBseV9kYXRhLCAwLCBvcHMtXHUwMDNlcmVwbHlfZGF0YV9zaXplKWApIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlIGRyaXZlciBjYWxsYmFja3MgKGUuZy4sIGBnZXRfaW50Zl9jYXBzYCkuIFNpbWlsYXJseSwgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YSgpYCBleHBsaWNpdGx5IGNhbGxzIGBtZW1zZXQoXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0LCAwLCBzaXplb2YoZGF0YS1cdTAwM2V0ZXN0KSlgLCBhbmQgYGV0aG5sX2FjdF9waHlfdGVzdCgpYCBpbml0aWFsaXplcyBpdHMgbG9jYWwgc3RydWN0IHdpdGggYD0ge31gLlxuXG5CZWNhdXNlIGFsbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSB1c2UsIHRoZXJlIGlzIG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBvciBoZWFwIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBldmVuIGlmIGEgZHJpdmVyIGZhaWxzIHRvIHBvcHVsYXRlIGFsbCBmaWVsZHMuIEZ1cnRoZXJtb3JlLCB0aGUgbmV0bGluayByZXNwb25zZSBpcyBjb25zdHJ1Y3RlZCBieSBzZXJpYWxpemluZyBpbmRpdmlkdWFsIGZpZWxkcyB1c2luZyBgbmxhX3B1dF91MzJgLCBgbmxhX3B1dF9zdHJpbmdgLCBldGMuLCByYXRoZXIgdGhhbiBjb3B5aW5nIHJhdyBzdHJ1Y3RzLCB3aGljaCBpbmhlcmVudGx5IGF2b2lkcyBsZWFraW5nIHN0cnVjdCBwYWRkaW5nLlxuXG5BbnkgcG90ZW50aWFsIGlzc3Vlcywgc3VjaCBhcyBhIGRyaXZlciB3cml0aW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGJsb2Nrc2AgYXJyYXkgb3IgcmV0dXJuaW5nIGFuIGludmFsaWQgYG51bV9ibG9ja3NgIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyByZWFkcywgd291bGQgYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbmV3IGV0aHRvb2wgbmV0bGluayBtZXNzYWdlcyAoRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVCwgRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULCBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QpIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljaWVzLiBFdmVuIHRob3VnaCBubyBkcml2ZXJzIGN1cnJlbnRseSBpbXBsZW1lbnQgdGhlIHVuZGVybHlpbmcgZXRodG9vbCBvcGVyYXRpb25zLCB0aGUgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcsIHBvbGljeSB2YWxpZGF0aW9uLCBhbmQgaW5pdGlhbCBoYW5kbGVyIGZ1bmN0aW9ucyAobGlrZSBldGhubF9hY3RfcGh5X3Rlc3QpIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyLXNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDUwNmRkMTA4NjM4ZTVkNzdkMjNmMzBlZmRmMmNmN2ZhODZkZWU5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDA1OjA2OjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5pbmRleCA1ZGQ0ZDFiNWQ5NGJiLi4zNjFlYjNjNjY1NzcwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuQEAgLTIxMCw2ICYjNDM7MjEwLDU1IEBAIGRlZmluaXRpb25zOlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IGRpc2NhcmRcbiAgICAgICAgIHZhbHVlOiAzMVxuJiM0MzsgIC1cbiYjNDM7ICAgIG5hbWU6IGludGYtY29tcG9uZW50XG4mIzQzOyAgICB0eXBlOiBlbnVtXG4mIzQzOyAgICBkb2M6IFR5cGUgb2YgaGFyZHdhcmUgY29tcG9uZW50IGluIHRoZSBpbnRlcmZhY2UuXG4mIzQzOyAgICBlbnRyaWVzOlxuJiM0MzsgICAgICAtIG1hY1xuJiM0MzsgICAgICAtIHBoeVxuJiM0MzsgICAgICAtIG1vZHVsZVxuJiM0MzsgIC1cbiYjNDM7ICAgIG5hbWU6IGludGYtc3VibGF5ZXJcbiYjNDM7ICAgIHR5cGU6IGVudW1cbiYjNDM7ICAgIGRvYzogODAyLjMgc3VibGF5ZXIgd2l0aGluIGEgY29tcG9uZW50LlxuJiM0MzsgICAgZW50cmllczpcbiYjNDM7ICAgICAgLSBub25lXG4mIzQzOyAgICAgIC0gcnNcbiYjNDM7ICAgICAgLSBwY3NcbiYjNDM7ICAgICAgLSBmZWNcbiYjNDM7ICAgICAgLSBwbWFcbiYjNDM7ICAgICAgLSBwbWRcbiYjNDM7ICAtXG4mIzQzOyAgICBuYW1lOiBwaHktdGVzdC1wYXR0ZXJuXG4mIzQzOyAgICB0eXBlOiBlbnVtXG4mIzQzOyAgICBkb2M6IFBIWSB0ZXN0IHBhdHRlcm4gdHlwZXMgZm9yIFBSQlMgZ2VuZXJhdGlvbi9jaGVja2luZy5cbiYjNDM7ICAgIGVudHJpZXM6XG4mIzQzOyAgICAgIC0gb2ZmXG4mIzQzOyAgICAgIC0gcHJiczdcbiYjNDM7ICAgICAgLSBwcmJzOVxuJiM0MzsgICAgICAtIHByYnMxMVxuJiM0MzsgICAgICAtIHByYnMxM1xuJiM0MzsgICAgICAtIHByYnMxNVxuJiM0MzsgICAgICAtIHByYnMyM1xuJiM0MzsgICAgICAtIHByYnMzMVxuJiM0MzsgICAgICAtIHNzcHJxXG4mIzQzOyAgICAgIC0gcHJiczEzcVxuJiM0MzsgICAgICAtIHByYnMzMXFcbiYjNDM7ICAgICAgLSBzcXVhcmUtbnJ6XG4mIzQzOyAgICAgIC0gc3F1YXJlLXBhbTRcbiYjNDM7ICAgICAgLSB0eC1saW5lYXJpdHlcbiYjNDM7ICAgICAgLSBzY3JhbWJsZWQtaWRsZVxuJiM0MzsgICAgICAtIGsyOC01XG4mIzQzOyAgICAgIC0gazI4LTdcbiYjNDM7ICAtXG4mIzQzOyAgICBuYW1lOiBwaHktdGVzdC1hY3Rpb25cbiYjNDM7ICAgIHR5cGU6IGVudW1cbiYjNDM7ICAgIGRvYzogQkVSVCBjb250cm9sIGFjdGlvbnMuXG4mIzQzOyAgICBlbnRyaWVzOlxuJiM0MzsgICAgICAtIG5vbmVcbiYjNDM7ICAgICAgLSBzdGFydFxuJiM0MzsgICAgICAtIHN0b3BcbiBcbiBhdHRyaWJ1dGUtc2V0czpcbiAgIC1cbkBAIC0xOTA1LDYgJiM0MzsxOTU0LDExNSBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIG5hbWU6IGxpbmtcbiAgICAgICAgIHR5cGU6IG5lc3RcbiAgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBtc2Utc25hcHNob3RcbiYjNDM7ICAtXG4mIzQzOyAgICBuYW1lOiBpbnRmLWJsb2NrXG4mIzQzOyAgICBkb2M6IEEgc2luZ2xlIGZ1bmN0aW9uYWwgYmxvY2sgaW4gdGhlIGludGVyZmFjZS5cbiYjNDM7ICAgIGF0dHJpYnV0ZXM6XG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBpZFxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogY29tcG9uZW50XG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgICAgZW51bTogaW50Zi1jb21wb25lbnRcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHN1YmxheWVyXG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgICAgZW51bTogaW50Zi1zdWJsYXllclxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogaW5zdGFuY2VcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBkb2M6IHxcbiYjNDM7ICAgICAgICAgIElkZW50aWZpZXMgdGhlIGhhcmR3YXJlIGVudGl0eSB3aGVuIG11bHRpcGxlIGluc3RhbmNlcyBvZlxuJiM0MzsgICAgICAgICAgdGhlIHNhbWUgY29tcG9uZW50IGV4aXN0IGluIHRoZSBpbnRlcmZhY2UuIFRoZSBkcml2ZXJcbiYjNDM7ICAgICAgICAgIGFzc2lnbnMgaW5zdGFuY2UgbnVtYmVycyBzZXF1ZW50aWFsbHkgYmFzZWQgb24gcG9zaXRpb24gaW5cbiYjNDM7ICAgICAgICAgIHRoZSBwaHlzaWNhbCBwYXRoLiBEZWZhdWx0cyB0byAwIHdoZW4gb25seSBvbmUgaW5zdGFuY2Ugb2ZcbiYjNDM7ICAgICAgICAgIGEgZ2l2ZW4gY29tcG9uZW50IGV4aXN0cy5cbiYjNDM7ICAgICAgICAgIEZvciBQSFk6IGluc3RhbmNlIDAgaXMgdGhlIGludGVybmFsL2hvc3Qtc2lkZSBQSFksXG4mIzQzOyAgICAgICAgICBpbnN0YW5jZSAxIGlzIGFuIGV4dGVybmFsIFBIWSBmdXJ0aGVyIGFsb25nIHRoZSBwYXRoXG4mIzQzOyAgICAgICAgICB0b3dhcmQgdGhlIGxpbmUgc2lkZS5cbiYjNDM7ICAgICAgICAgIEZvciBNQUM6IGluc3RhbmNlIDAgaXMgdGhlIGhvc3QtZmFjaW5nIE1BQywgaW5zdGFuY2UgMSBpc1xuJiM0MzsgICAgICAgICAgYSBzZWNvbmRhcnkgTUFDIGZ1cnRoZXIgYWxvbmcgdGhlIGRhdGEgcGF0aCAoZS5nLiwgYmVoaW5kXG4mIzQzOyAgICAgICAgICBhbiBlbWJlZGRlZCBzd2l0Y2gpLlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogbmFtZVxuJiM0MzsgICAgICAgIHR5cGU6IHN0cmluZ1xuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogZGVwdGhcbiYjNDM7ICAgICAgICB0eXBlOiB1OFxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogbGFuZXNcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGxvb3BiYWNrLXN1cHBvcnRlZFxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogc3VwcG9ydGVkLXR4LXBhdHRlcm5zXG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBzdXBwb3J0ZWQtcngtcGF0dGVybnNcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGVycm9yLWluamVjdC1zdXBwb3J0ZWRcbiYjNDM7ICAgICAgICB0eXBlOiBmbGFnXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBiZXJ0LXN1cHBvcnRlZFxuJiM0MzsgICAgICAgIHR5cGU6IGZsYWdcbiYjNDM7ICAtXG4mIzQzOyAgICBuYW1lOiBpbnRmLWNhcHNcbiYjNDM7ICAgIGRvYzogSW50ZXJmYWNlIGNhcGFiaWxpdGllcyBtZXNzYWdlLlxuJiM0MzsgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGhlYWRlclxuJiM0MzsgICAgICAgIHR5cGU6IG5lc3RcbiYjNDM7ICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogaGVhZGVyXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBibG9ja3NcbiYjNDM7ICAgICAgICB0eXBlOiBuZXN0XG4mIzQzOyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGludGYtYmxvY2tcbiYjNDM7ICAgICAgICBtdWx0aS1hdHRyOiB0cnVlXG4mIzQzOyAgLVxuJiM0MzsgICAgbmFtZTogcGh5LXRlc3RcbiYjNDM7ICAgIGRvYzogUEhZIHRlc3QgY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzLlxuJiM0MzsgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGhlYWRlclxuJiM0MzsgICAgICAgIHR5cGU6IG5lc3RcbiYjNDM7ICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogaGVhZGVyXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBibG9jay1pZFxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogbGFuZVxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogdHgtcGF0dGVyblxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAgIGVudW06IHBoeS10ZXN0LXBhdHRlcm5cbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHJ4LXBhdHRlcm5cbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBlbnVtOiBwaHktdGVzdC1wYXR0ZXJuXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBiZXJ0LWFjdGlvblxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAgIGVudW06IHBoeS10ZXN0LWFjdGlvblxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogaW5qZWN0LWVycm9yLWNvdW50XG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBhY3RpdmUtdGVzdHNcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBkb2M6IEJpdG1hc2sgb2YgY3VycmVudGx5IHJ1bm5pbmcgdGVzdHMgKGJpdCAwID0gQkVSVCkuXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBjaGVja2VyLWxvY2tcbiYjNDM7ICAgICAgICB0eXBlOiB1OFxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogZXJyb3ItY291bnRcbiYjNDM7ICAgICAgICB0eXBlOiB1NjRcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHRvdGFsLWJpdHMtc2VudFxuJiM0MzsgICAgICAgIHR5cGU6IHU2NFxuIFxuIG9wZXJhdGlvbnM6XG4gICBlbnVtLW1vZGVsOiBkaXJlY3Rpb25hbFxuQEAgLTI4NTksNiAmIzQzOzMwMTcsNTQgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgICAtIHdvcnN0LWNoYW5uZWxcbiAgICAgICAgICAgICAtIGxpbmtcbiAgICAgICBkdW1wOiAqbXNlLWdldC1vcFxuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBpbnRmLWNhcHMtZ2V0XG4mIzQzOyAgICAgIGRvYzogR2V0IGludGVyZmFjZSBjYXBhYmlsaXRpZXMgKGZ1bmN0aW9uYWwgYmxvY2sgbGF5b3V0KS5cbiYjNDM7ICAgICAgYXR0cmlidXRlLXNldDogaW50Zi1jYXBzXG4mIzQzOyAgICAgIGRvOiBcdTAwMjZpbnRmLWNhcHMtZ2V0LW9wXG4mIzQzOyAgICAgICAgcmVxdWVzdDpcbiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6XG4mIzQzOyAgICAgICAgICAgIC0gaGVhZGVyXG4mIzQzOyAgICAgICAgcmVwbHk6XG4mIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOlxuJiM0MzsgICAgICAgICAgICAtIGhlYWRlclxuJiM0MzsgICAgICAgICAgICAtIGJsb2Nrc1xuJiM0MzsgICAgICBkdW1wOiAqaW50Zi1jYXBzLWdldC1vcFxuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBwaHktdGVzdC1nZXRcbiYjNDM7ICAgICAgZG9jOiBHZXQgUEhZIHRlc3Qgc3RhdHVzIChwYXR0ZXJucywgQkVSVCBjb3VudGVycykuXG4mIzQzOyAgICAgIGF0dHJpYnV0ZS1zZXQ6IHBoeS10ZXN0XG4mIzQzOyAgICAgIGRvOlxuJiM0MzsgICAgICAgIHJlcXVlc3Q6XG4mIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOlxuJiM0MzsgICAgICAgICAgICAtIGhlYWRlclxuJiM0MzsgICAgICAgICAgICAtIGJsb2NrLWlkXG4mIzQzOyAgICAgICAgICAgIC0gbGFuZVxuJiM0MzsgICAgICAgIHJlcGx5OlxuJiM0MzsgICAgICAgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgICAgICAgLSBoZWFkZXJcbiYjNDM7ICAgICAgICAgICAgLSBibG9jay1pZFxuJiM0MzsgICAgICAgICAgICAtIGxhbmVcbiYjNDM7ICAgICAgICAgICAgLSB0eC1wYXR0ZXJuXG4mIzQzOyAgICAgICAgICAgIC0gcngtcGF0dGVyblxuJiM0MzsgICAgICAgICAgICAtIGFjdGl2ZS10ZXN0c1xuJiM0MzsgICAgICAgICAgICAtIGNoZWNrZXItbG9ja1xuJiM0MzsgICAgICAgICAgICAtIGVycm9yLWNvdW50XG4mIzQzOyAgICAgICAgICAgIC0gdG90YWwtYml0cy1zZW50XG4mIzQzOyAgICAtXG4mIzQzOyAgICAgIG5hbWU6IHBoeS10ZXN0LWFjdFxuJiM0MzsgICAgICBkb2M6IENvbmZpZ3VyZSBQSFkgdGVzdCAoc2V0IHBhdHRlcm5zLCBzdGFydC9zdG9wIEJFUlQsIGluamVjdCBlcnJvcnMpLlxuJiM0MzsgICAgICBhdHRyaWJ1dGUtc2V0OiBwaHktdGVzdFxuJiM0MzsgICAgICBkbzpcbiYjNDM7ICAgICAgICByZXF1ZXN0OlxuJiM0MzsgICAgICAgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgICAgICAgLSBoZWFkZXJcbiYjNDM7ICAgICAgICAgICAgLSBibG9jay1pZFxuJiM0MzsgICAgICAgICAgICAtIGxhbmVcbiYjNDM7ICAgICAgICAgICAgLSB0eC1wYXR0ZXJuXG4mIzQzOyAgICAgICAgICAgIC0gcngtcGF0dGVyblxuJiM0MzsgICAgICAgICAgICAtIGJlcnQtYWN0aW9uXG4mIzQzOyAgICAgICAgICAgIC0gaW5qZWN0LWVycm9yLWNvdW50XG4gXG4gbWNhc3QtZ3JvdXBzOlxuICAgbGlzdDpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG5pbmRleCAxMjY4M2I1ZDEyNWU0Li5mOTc0OGU3MzlmMDNlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG5AQCAtMTE5Nyw2ICYjNDM7MTE5Nyw5MiBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XG4gICogU2VlIFx1MDAyNnN0cnVjdCBuZXRfZGV2aWNlIGFuZCBcdTAwMjZzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZm9yIGRvY3VtZW50YXRpb25cbiAgKiBvZiB0aGUgZ2VuZXJpYyBuZXRkZXYgZmVhdHVyZXMgaW50ZXJmYWNlLlxuICAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBJTlRGX0NBUFNfTUFYX0JMT0NLU1x0MTZcbiYjNDM7I2RlZmluZSBJTlRGX0JMT0NLX05BTUVfTEVOXHQzMlxuJiM0MztcbiYjNDM7I2RlZmluZSBMT09QQkFDS19TVVBQT1JUX0xPQ0FMXHRCSVQoMClcbiYjNDM7I2RlZmluZSBMT09QQkFDS19TVVBQT1JUX1JFTU9URVx0QklUKDEpXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayAtIFNpbmdsZSBmdW5jdGlvbmFsIGJsb2NrIGluIHRoZSBpbnRlcmZhY2VcbiYjNDM7ICogQGlkOiBVbmlxdWUgYmxvY2sgaWRlbnRpZmllclxuJiM0MzsgKiBAY29tcG9uZW50OiBIYXJkd2FyZSBjb21wb25lbnQgKE1BQywgUEhZLCBNT0RVTEUpXG4mIzQzOyAqIEBzdWJsYXllcjogODAyLjMgc3VibGF5ZXIgKFJTLCBQQ1MsIEZFQywgUE1BLCBQTUQsIG9yIE5PTkUpXG4mIzQzOyAqIEBpbnN0YW5jZTogSW5kZXggd2hlbiBtdWx0aXBsZSBpbnN0YW5jZXMgb2Ygc2FtZSBjb21wb25lbnQgZXhpc3RcbiYjNDM7ICogQG5hbWU6IERyaXZlci1jaG9zZW4gbGFiZWxcbiYjNDM7ICogQGRlcHRoOiBPcmRlcmluZyB3aXRoaW4gc2FtZSAoY29tcG9uZW50LCBzdWJsYXllcikgdHVwbGVcbiYjNDM7ICogQGxhbmVzOiBOdW1iZXIgb2YgbGFuZXNcbiYjNDM7ICogQGxvb3BiYWNrX3N1cHBvcnRlZDogQml0bWFzayBvZiBzdXBwb3J0ZWQgbG9vcGJhY2sgZGlyZWN0aW9uc1xuJiM0MzsgKiBAc3VwcG9ydGVkX3R4X3BhdHRlcm5zOiBCaXRtYXNrIG9mIHBhdHRlcm5zIHRoaXMgYmxvY2sgY2FuIGdlbmVyYXRlXG4mIzQzOyAqIEBzdXBwb3J0ZWRfcnhfcGF0dGVybnM6IEJpdG1hc2sgb2YgcGF0dGVybnMgdGhpcyBibG9jayBjYW4gY2hlY2tcbiYjNDM7ICogQGVycm9yX2luamVjdF9zdXBwb3J0ZWQ6IEJsb2NrIHN1cHBvcnRzIGJpdCBlcnJvciBpbmplY3Rpb25cbiYjNDM7ICogQGJlcnRfc3VwcG9ydGVkOiBCbG9jayBzdXBwb3J0cyBCRVJUIGNvdW50ZXJzXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrIHtcbiYjNDM7XHR1MzIgaWQ7XG4mIzQzO1x0ZW51bSBpbnRmX2NvbXBvbmVudCBjb21wb25lbnQ7XG4mIzQzO1x0ZW51bSBpbnRmX3N1YmxheWVyIHN1YmxheWVyO1xuJiM0MztcdHUzMiBpbnN0YW5jZTtcbiYjNDM7XHRjaGFyIG5hbWVbSU5URl9CTE9DS19OQU1FX0xFTl07XG4mIzQzO1x0dTggZGVwdGg7XG4mIzQzO1x0dTMyIGxhbmVzO1xuJiM0MztcdHUzMiBsb29wYmFja19zdXBwb3J0ZWQ7XG4mIzQzO1x0dTMyIHN1cHBvcnRlZF90eF9wYXR0ZXJucztcbiYjNDM7XHR1MzIgc3VwcG9ydGVkX3J4X3BhdHRlcm5zO1xuJiM0MztcdGJvb2wgZXJyb3JfaW5qZWN0X3N1cHBvcnRlZDtcbiYjNDM7XHRib29sIGJlcnRfc3VwcG9ydGVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBldGh0b29sX2ludGZfY2FwcyAtIEludGVyZmFjZSBjYXBhYmlsaXRpZXMgKGFsbCBibG9ja3MpXG4mIzQzOyAqIEBudW1fYmxvY2tzOiBOdW1iZXIgb2YgdmFsaWQgZW50cmllcyBpbiBibG9ja3NbXVxuJiM0MzsgKiBAYmxvY2tzOiBBcnJheSBvZiBmdW5jdGlvbmFsIGJsb2Nrc1xuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzIHtcbiYjNDM7XHR1MzIgbnVtX2Jsb2NrcztcbiYjNDM7XHRzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrIGJsb2Nrc1tJTlRGX0NBUFNfTUFYX0JMT0NLU107XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBCaXRtYXNrIG9mIHdoaWNoIGV0aHRvb2xfcGh5X3Rlc3QgZmllbGRzIHdlcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgKi9cbiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfVFhfUEFUVEVSTlx0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfUlhfUEFUVEVSTlx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfQkVSVF9BQ1RJT05cdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgUEhZX1RFU1RfQ01EX0lOSkVDVF9DT1VOVFx0XHRCSVQoMylcbiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfTEFORVx0XHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIFBIWV9URVNUX0NNRF9CTE9DS19JRFx0XHRcdEJJVCg1KVxuJiM0MztcbiYjNDM7LyogQml0bWFzayBvZiBjdXJyZW50bHkgYWN0aXZlIHRlc3RzIChyZWFkLW9ubHkpICovXG4mIzQzOyNkZWZpbmUgUEhZX1RFU1RfQUNUSVZFX0JFUlRcdFx0QklUKDApXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgLSBQSFkgdGVzdCBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXNcbiYjNDM7ICogQGNtZDogQml0bWFzayBvZiB3aGljaCBmaWVsZHMgYXJlIHZhbGlkIChQSFlfVEVTVF9DTURfKilcbiYjNDM7ICogQGJsb2NrX2lkOiBCbG9jayB0byBvcGVyYXRlIG9uIChmcm9tIGludGYtY2Fwcy1nZXQpXG4mIzQzOyAqIEBsYW5lOiBMYW5lIG51bWJlciAoMC1iYXNlZClcbiYjNDM7ICogQHR4X3BhdHRlcm46IFRYIHBhdHRlcm4gZ2VuZXJhdG9yIHNldHRpbmdcbiYjNDM7ICogQHJ4X3BhdHRlcm46IFJYIHBhdHRlcm4gY2hlY2tlciBzZXR0aW5nXG4mIzQzOyAqIEBiZXJ0X2FjdGlvbjogQkVSVCBzdGFydC9zdG9wIGNvbnRyb2xcbiYjNDM7ICogQGluamVjdF9lcnJvcl9jb3VudDogTnVtYmVyIG9mIGVycm9ycyB0byBpbmplY3RcbiYjNDM7ICogQGFjdGl2ZV90ZXN0czogQml0bWFzayBvZiBydW5uaW5nIHRlc3RzIChQSFlfVEVTVF9BQ1RJVkVfKilcbiYjNDM7ICogQGNoZWNrZXJfbG9jazogUlggY2hlY2tlciBsb2NrIHN0YXR1cyAocmVhZC1vbmx5KVxuJiM0MzsgKiBAZXJyb3JfY291bnQ6IEJFUlQgZXJyb3IgY291bnRlciAocmVhZC1vbmx5KVxuJiM0MzsgKiBAdG90YWxfYml0c19zZW50OiBCRVJUIHRvdGFsIGJpdHMgY291bnRlciAocmVhZC1vbmx5KVxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3Qge1xuJiM0MztcdHUzMiBjbWQ7XG4mIzQzO1x0dTMyIGJsb2NrX2lkO1xuJiM0MztcdHUzMiBsYW5lO1xuJiM0MztcdGVudW0gcGh5X3Rlc3RfcGF0dGVybiB0eF9wYXR0ZXJuO1xuJiM0MztcdGVudW0gcGh5X3Rlc3RfcGF0dGVybiByeF9wYXR0ZXJuO1xuJiM0MztcdGVudW0gcGh5X3Rlc3RfYWN0aW9uIGJlcnRfYWN0aW9uO1xuJiM0MztcdHUzMiBpbmplY3RfZXJyb3JfY291bnQ7XG4mIzQzO1x0dTMyIGFjdGl2ZV90ZXN0cztcbiYjNDM7XHR1OCBjaGVja2VyX2xvY2s7XG4mIzQzO1x0dTY0IGVycm9yX2NvdW50O1xuJiM0MztcdHU2NCB0b3RhbF9iaXRzX3NlbnQ7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBldGh0b29sX29wcyB7XG4gXHR1MzIgICAgIHN1cHBvcnRlZF9pbnB1dF94ZnJtOjg7XG4gXHR1MzIgICAgIGNhcF9saW5rX2xhbmVzX3N1cHBvcnRlZDoxO1xuQEAgLTEzNTQsNiAmIzQzOzE0NDAsMTIgQEAgc3RydWN0IGV0aHRvb2xfb3BzIHtcbiBcdGludFx0KCpzZXRfbW0pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX21tX2NmZyAqY2ZnLFxuIFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBcdHZvaWRcdCgqZ2V0X21tX3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqc3RhdHMpO1xuJiM0MztcdGludFx0KCpnZXRfaW50Zl9jYXBzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHMgKmNhcHMpO1xuJiM0MztcdGludFx0KCpnZXRfcGh5X3Rlc3QpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnRlc3QpO1xuJiM0MztcdGludFx0KCpzZXRfcGh5X3Rlc3QpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnRlc3QpO1xuIH07XG4gXG4gaW50IGV0aHRvb2xfY2hlY2tfb3BzKGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuaW5kZXggODEzNGJhZjc4NjBmMy4uMzEwMmJiN2JhMzM3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbkBAIC04OTMsNiAmIzQzOzg5Myw5IEBAIGVudW0ge1xuIFx0RVRIVE9PTF9NU0dfUlNTX0NSRUFURV9BQ1QsXG4gXHRFVEhUT09MX01TR19SU1NfREVMRVRFX0FDVCxcbiBcdEVUSFRPT0xfTVNHX01TRV9HRVQsXG4mIzQzO1x0RVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVCxcbiYjNDM7XHRFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsXG4mIzQzO1x0RVRIVE9PTF9NU0dfUEhZX1RFU1RfQUNULFxuIFxuIFx0X19FVEhUT09MX01TR19VU0VSX0NOVCxcbiBcdEVUSFRPT0xfTVNHX1VTRVJfTUFYID0gKF9fRVRIVE9PTF9NU0dfVVNFUl9DTlQgLSAxKVxuQEAgLTk1NCw2ICYjNDM7OTU3LDggQEAgZW51bSB7XG4gXHRFVEhUT09MX01TR19SU1NfQ1JFQVRFX05URixcbiBcdEVUSFRPT0xfTVNHX1JTU19ERUxFVEVfTlRGLFxuIFx0RVRIVE9PTF9NU0dfTVNFX0dFVF9SRVBMWSxcbiYjNDM7XHRFVEhUT09MX01TR19JTlRGX0NBUFNfR0VUX1JFUExZLFxuJiM0MztcdEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVF9SRVBMWSxcbiBcbiBcdF9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCxcbiBcdEVUSFRPT0xfTVNHX0tFUk5FTF9NQVggPSAoX19FVEhUT09MX01TR19LRVJORUxfQ05UIC0gMSlcbkBAIC05NjEsNCAmIzQzOzk2NiwxMDMgQEAgZW51bSB7XG4gXG4gI2RlZmluZSBFVEhUT09MX01DR1JQX01PTklUT1JfTkFNRVx0XCYjMzQ7bW9uaXRvclwmIzM0O1xuIFxuJiM0MzsvKiBJbnRlcmZhY2UgY29tcG9uZW50IHR5cGVzICovXG4mIzQzO2VudW0gaW50Zl9jb21wb25lbnQge1xuJiM0MztcdElOVEZfQ09NUE9ORU5UX01BQyxcbiYjNDM7XHRJTlRGX0NPTVBPTkVOVF9QSFksXG4mIzQzO1x0SU5URl9DT01QT05FTlRfTU9EVUxFLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogSW50ZXJmYWNlIHN1YmxheWVyIHR5cGVzICovXG4mIzQzO2VudW0gaW50Zl9zdWJsYXllciB7XG4mIzQzO1x0SU5URl9TVUJMQVlFUl9OT05FLFxuJiM0MztcdElOVEZfU1VCTEFZRVJfUlMsXG4mIzQzO1x0SU5URl9TVUJMQVlFUl9QQ1MsXG4mIzQzO1x0SU5URl9TVUJMQVlFUl9GRUMsXG4mIzQzO1x0SU5URl9TVUJMQVlFUl9QTUEsXG4mIzQzO1x0SU5URl9TVUJMQVlFUl9QTUQsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBBdHRyaWJ1dGVzIG9mIGEgc2luZ2xlIGludGVyZmFjZSBibG9jayAqL1xuJiM0MztlbnVtIHtcbiYjNDM7XHRFVEhUT09MX0FfSU5URl9CTE9DS19JRCxcbiYjNDM7XHRFVEhUT09MX0FfSU5URl9CTE9DS19DT01QT05FTlQsXG4mIzQzO1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfU1VCTEFZRVIsXG4mIzQzO1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfSU5TVEFOQ0UsXG4mIzQzO1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfTkFNRSxcbiYjNDM7XHRFVEhUT09MX0FfSU5URl9CTE9DS19ERVBUSCxcbiYjNDM7XHRFVEhUT09MX0FfSU5URl9CTE9DS19MQU5FUyxcbiYjNDM7XHRFVEhUT09MX0FfSU5URl9CTE9DS19MT09QQkFDS19TVVBQT1JURUQsXG4mIzQzO1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfVFhfUEFUVEVSTlMsXG4mIzQzO1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfUlhfUEFUVEVSTlMsXG4mIzQzO1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfRVJST1JfSU5KRUNULFxuJiM0MztcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX0JFUlQsXG4mIzQzO1xuJiM0MztcdF9fRVRIVE9PTF9BX0lOVEZfQkxPQ0tfQ05ULFxuJiM0MztcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX01BWCA9IChfX0VUSFRPT0xfQV9JTlRGX0JMT0NLX0NOVCAtIDEpXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBBdHRyaWJ1dGVzIG9mIGludGYtY2Fwcy1nZXQgbWVzc2FnZSAqL1xuJiM0MztlbnVtIHtcbiYjNDM7XHRFVEhUT09MX0FfSU5URl9DQVBTX1VOU1BFQyxcbiYjNDM7XHRFVEhUT09MX0FfSU5URl9DQVBTX0hFQURFUixcbiYjNDM7XHRFVEhUT09MX0FfSU5URl9DQVBTX0JMT0NLUyxcbiYjNDM7XG4mIzQzO1x0X19FVEhUT09MX0FfSU5URl9DQVBTX0NOVCxcbiYjNDM7XHRFVEhUT09MX0FfSU5URl9DQVBTX01BWCA9IChfX0VUSFRPT0xfQV9JTlRGX0NBUFNfQ05UIC0gMSlcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFBIWSB0ZXN0IHBhdHRlcm4gdHlwZXMgKi9cbiYjNDM7ZW51bSBwaHlfdGVzdF9wYXR0ZXJuIHtcbiYjNDM7XHRQSFlfVEVTVF9QQVRURVJOX09GRixcbiYjNDM7XHRQSFlfVEVTVF9QQVRURVJOX1BSQlM3LFxuJiM0MztcdFBIWV9URVNUX1BBVFRFUk5fUFJCUzksXG4mIzQzO1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMTEsXG4mIzQzO1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMTMsXG4mIzQzO1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMTUsXG4mIzQzO1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMjMsXG4mIzQzO1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMzEsXG4mIzQzO1x0UEhZX1RFU1RfUEFUVEVSTl9TU1BSUSxcbiYjNDM7XHRQSFlfVEVTVF9QQVRURVJOX1BSQlMxM1EsXG4mIzQzO1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMzFRLFxuJiM0MztcdFBIWV9URVNUX1BBVFRFUk5fU1FVQVJFX05SWixcbiYjNDM7XHRQSFlfVEVTVF9QQVRURVJOX1NRVUFSRV9QQU00LFxuJiM0MztcdFBIWV9URVNUX1BBVFRFUk5fVFhfTElORUFSSVRZLFxuJiM0MztcdFBIWV9URVNUX1BBVFRFUk5fU0NSQU1CTEVEX0lETEUsXG4mIzQzO1x0UEhZX1RFU1RfUEFUVEVSTl9LMjhfNSxcbiYjNDM7XHRQSFlfVEVTVF9QQVRURVJOX0syOF83LFxuJiM0MztcbiYjNDM7XHRfX1BIWV9URVNUX1BBVFRFUk5fQ09VTlQsXG4mIzQzO1x0UEhZX1RFU1RfUEFUVEVSTl9NQVggPSAoX19QSFlfVEVTVF9QQVRURVJOX0NPVU5UIC0gMSlcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFBIWSB0ZXN0IEJFUlQgYWN0aW9ucyAqL1xuJiM0MztlbnVtIHBoeV90ZXN0X2FjdGlvbiB7XG4mIzQzO1x0UEhZX1RFU1RfQUNUSU9OX05PTkUsXG4mIzQzO1x0UEhZX1RFU1RfQUNUSU9OX1NUQVJULFxuJiM0MztcdFBIWV9URVNUX0FDVElPTl9TVE9QLFxuJiM0MztcbiYjNDM7XHRfX1BIWV9URVNUX0FDVElPTl9DT1VOVCxcbiYjNDM7XHRQSFlfVEVTVF9BQ1RJT05fTUFYID0gKF9fUEhZX1RFU1RfQUNUSU9OX0NPVU5UIC0gMSlcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIEF0dHJpYnV0ZXMgb2YgcGh5LXRlc3QtZ2V0IC8gcGh5LXRlc3QtYWN0IG1lc3NhZ2VzICovXG4mIzQzO2VudW0ge1xuJiM0MztcdEVUSFRPT0xfQV9QSFlfVEVTVF9VTlNQRUMsXG4mIzQzO1x0RVRIVE9PTF9BX1BIWV9URVNUX0hFQURFUixcbiYjNDM7XHRFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSUQsXG4mIzQzO1x0RVRIVE9PTF9BX1BIWV9URVNUX0xBTkUsXG4mIzQzO1x0RVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk4sXG4mIzQzO1x0RVRIVE9PTF9BX1BIWV9URVNUX1JYX1BBVFRFUk4sXG4mIzQzO1x0RVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OLFxuJiM0MztcdEVUSFRPT0xfQV9QSFlfVEVTVF9JTkpFQ1RfRVJST1JfQ09VTlQsXG4mIzQzO1x0RVRIVE9PTF9BX1BIWV9URVNUX0FDVElWRV9URVNUUyxcbiYjNDM7XHRFVEhUT09MX0FfUEhZX1RFU1RfQ0hFQ0tFUl9MT0NLLFxuJiM0MztcdEVUSFRPT0xfQV9QSFlfVEVTVF9FUlJPUl9DT1VOVCxcbiYjNDM7XHRFVEhUT09MX0FfUEhZX1RFU1RfVE9UQUxfQklUU19TRU5ULFxuJiM0MztcbiYjNDM7XHRfX0VUSFRPT0xfQV9QSFlfVEVTVF9DTlQsXG4mIzQzO1x0RVRIVE9PTF9BX1BIWV9URVNUX01BWCA9IChfX0VUSFRPT0xfQV9QSFlfVEVTVF9DTlQgLSAxKVxuJiM0Mzt9O1xuJiM0MztcbiAjZW5kaWYgLyogX1VBUElfTElOVVhfRVRIVE9PTF9ORVRMSU5LX0dFTkVSQVRFRF9IICovXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvTWFrZWZpbGUgYi9uZXQvZXRodG9vbC9NYWtlZmlsZVxuaW5kZXggNjI5YzEwOTE2NjcwZS4uN2RkMmM1NjI0Y2VkZiAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9NYWtlZmlsZVxuQEAgLTksNCAmIzQzOzksNCBAQCBldGh0b29sX25sLXlcdDo9IG5ldGxpbmsubyBiaXRzZXQubyBzdHJzZXQubyBsaW5raW5mby5vIGxpbmttb2Rlcy5vIHJzcy5vIFxcXG4gXHRcdCAgIGNoYW5uZWxzLm8gY29hbGVzY2UubyBwYXVzZS5vIGVlZS5vIHRzaW5mby5vIGNhYmxldGVzdC5vIFxcXG4gXHRcdCAgIHR1bm5lbHMubyBmZWMubyBlZXByb20ubyBzdGF0cy5vIHBoY192Y2xvY2tzLm8gbW0ubyBcXFxuIFx0XHQgICBtb2R1bGUubyBjbWlzX2Z3X3VwZGF0ZS5vIGNtaXNfY2RiLm8gcHNlLXBkLm8gcGxjYS5vIFxcXG4tXHRcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm9cbiYjNDM7XHRcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm8gaW50Zl9jYXBzLm8gcGh5dGVzdC5vXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMgYi9uZXQvZXRodG9vbC9pbnRmX2NhcHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmU0NWNjYzRiODhjOWZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL2ludGZfY2Fwcy5jXG5AQCAtMCwwICYjNDM7MSwxMzAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bmV0bGluay5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NvbW1vbi5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgaW50Zl9jYXBzX3JlcV9pbmZvIHtcbiYjNDM7XHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSB7XG4mIzQzO1x0c3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgYmFzZTtcbiYjNDM7XHRzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHMgY2FwcztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSU5URl9DQVBTX1JFUERBVEEoX19yZXBseV9iYXNlKSBcXFxuJiM0MztcdGNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSwgYmFzZSlcbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2ludGZfY2Fwc19nZXRfcG9saWN5W0VUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSICYjNDM7IDFdID0ge1xuJiM0MztcdFtFVEhUT09MX0FfSU5URl9DQVBTX0hFQURFUl0gPVxuJiM0MztcdFx0TkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGludGZfY2Fwc19yZXBseV9zaXplKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4mIzQzO1x0XHRcdFx0Y29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGEgKmRhdGEgPSBJTlRGX0NBUFNfUkVQREFUQShyZXBseV9iYXNlKTtcbiYjNDM7XHRpbnQgbGVuID0gMDtcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGF0YS1cdTAwM2VjYXBzLm51bV9ibG9ja3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKDApO1x0XHQvKiBuZXN0ZWQgYmxvY2sgKi9cbiYjNDM7XHRcdGxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogaWQgKi9cbiYjNDM7XHRcdGxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogY29tcG9uZW50ICovXG4mIzQzO1x0XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIHN1YmxheWVyICovXG4mIzQzO1x0XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIGluc3RhbmNlICovXG4mIzQzO1x0XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKElOVEZfQkxPQ0tfTkFNRV9MRU4pOyAvKiBuYW1lICovXG4mIzQzO1x0XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpO1x0LyogZGVwdGggKi9cbiYjNDM7XHRcdGxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogbGFuZXMgKi9cbiYjNDM7XHRcdGxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogbG9vcGJhY2tfc3VwcG9ydGVkICovXG4mIzQzO1x0XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIHR4X3BhdHRlcm5zICovXG4mIzQzO1x0XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIHJ4X3BhdHRlcm5zICovXG4mIzQzO1x0XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKDApO1x0XHQvKiBlcnJvcl9pbmplY3QgKGZsYWcpICovXG4mIzQzO1x0XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKDApO1x0XHQvKiBiZXJ0IChmbGFnKSAqL1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Lyogb3V0ZXIgQkxPQ0tTIG5lc3QgKi9cbiYjNDM7XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKDApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbGVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGludGZfY2Fwc19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlLFxuJiM0MztcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSAqZGF0YSA9IElOVEZfQ0FQU19SRVBEQVRBKHJlcGx5X2Jhc2UpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSByZXBseV9iYXNlLVx1MDAzZWRldjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2ludGZfY2FwcylcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfaW50Zl9jYXBzKGRldiwgXHUwMDI2ZGF0YS1cdTAwM2VjYXBzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpbnRmX2NhcHNfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4mIzQzO1x0XHRcdFx0Y29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGEgKmRhdGEgPSBJTlRGX0NBUFNfUkVQREFUQShyZXBseV9iYXNlKTtcbiYjNDM7XHRzdHJ1Y3QgbmxhdHRyICpibG9ja3NfYXR0cjtcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XG4mIzQzO1x0YmxvY2tzX2F0dHIgPSBubGFfbmVzdF9zdGFydChza2IsIEVUSFRPT0xfQV9JTlRGX0NBUFNfQkxPQ0tTKTtcbiYjNDM7XHRpZiAoIWJsb2Nrc19hdHRyKVxuJiM0MztcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGF0YS1cdTAwM2VjYXBzLm51bV9ibG9ja3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrICpiID0gXHUwMDI2ZGF0YS1cdTAwM2VjYXBzLmJsb2Nrc1tpXTtcbiYjNDM7XHRcdHN0cnVjdCBubGF0dHIgKmJsb2NrX2F0dHI7XG4mIzQzO1xuJiM0MztcdFx0YmxvY2tfYXR0ciA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgMCk7XG4mIzQzO1x0XHRpZiAoIWJsb2NrX2F0dHIpXG4mIzQzO1x0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0lELCBiLVx1MDAzZWlkKSB8fFxuJiM0MztcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfQ09NUE9ORU5ULFxuJiM0MztcdFx0XHRcdGItXHUwMDNlY29tcG9uZW50KSB8fFxuJiM0MztcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfU1VCTEFZRVIsXG4mIzQzO1x0XHRcdFx0Yi1cdTAwM2VzdWJsYXllcikgfHxcbiYjNDM7XHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0lOU1RBTkNFLFxuJiM0MztcdFx0XHRcdGItXHUwMDNlaW5zdGFuY2UpIHx8XG4mIzQzO1x0XHQgICAgbmxhX3B1dF9zdHJpbmcoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19OQU1FLCBiLVx1MDAzZW5hbWUpIHx8XG4mIzQzO1x0XHQgICAgbmxhX3B1dF91OChza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0RFUFRILCBiLVx1MDAzZWRlcHRoKSB8fFxuJiM0MztcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTEFORVMsIGItXHUwMDNlbGFuZXMpIHx8XG4mIzQzO1x0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19MT09QQkFDS19TVVBQT1JURUQsXG4mIzQzO1x0XHRcdFx0Yi1cdTAwM2Vsb29wYmFja19zdXBwb3J0ZWQpIHx8XG4mIzQzO1x0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19UWF9QQVRURVJOUyxcbiYjNDM7XHRcdFx0XHRiLVx1MDAzZXN1cHBvcnRlZF90eF9wYXR0ZXJucykgfHxcbiYjNDM7XHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX1JYX1BBVFRFUk5TLFxuJiM0MztcdFx0XHRcdGItXHUwMDNlc3VwcG9ydGVkX3J4X3BhdHRlcm5zKSlcbiYjNDM7XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4mIzQzO1x0XHRpZiAoYi1cdTAwM2VlcnJvcl9pbmplY3Rfc3VwcG9ydGVkIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIG5sYV9wdXRfZmxhZyhza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0VSUk9SX0lOSkVDVCkpXG4mIzQzO1x0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuJiM0MztcdFx0aWYgKGItXHUwMDNlYmVydF9zdXBwb3J0ZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgbmxhX3B1dF9mbGFnKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfQkVSVCkpXG4mIzQzO1x0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuJiM0MztcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjNDM7XG4mIzQzO1x0XHRubGFfbmVzdF9lbmQoc2tiLCBibG9ja19hdHRyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5sYV9uZXN0X2VuZChza2IsIGJsb2Nrc19hdHRyKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO25sYV9wdXRfZmFpbHVyZTpcbiYjNDM7XHRubGFfbmVzdF9jYW5jZWwoc2tiLCBibG9ja3NfYXR0cik7XG4mIzQzO1x0cmV0dXJuIC1FTVNHU0laRTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcyA9IHtcbiYjNDM7XHQucmVxdWVzdF9jbWRcdD0gRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVCxcbiYjNDM7XHQucmVwbHlfY21kXHQ9IEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRfUkVQTFksXG4mIzQzO1x0Lmhkcl9hdHRyXHQ9IEVUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSLFxuJiM0MztcdC5yZXFfaW5mb19zaXplXHQ9IHNpemVvZihzdHJ1Y3QgaW50Zl9jYXBzX3JlcV9pbmZvKSxcbiYjNDM7XHQucmVwbHlfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSksXG4mIzQzO1x0LnByZXBhcmVfZGF0YVx0PSBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhLFxuJiM0MztcdC5yZXBseV9zaXplXHQ9IGludGZfY2Fwc19yZXBseV9zaXplLFxuJiM0MztcdC5maWxsX3JlcGx5XHQ9IGludGZfY2Fwc19maWxsX3JlcGx5LFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuYyBiL25ldC9ldGh0b29sL25ldGxpbmsuY1xuaW5kZXggMWFmMzk1YjU0MzMwZS4uNTZlNWM4MTE0NTRiYiAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvbmV0bGluay5jXG5AQCAtNDMxLDYgJiM0Mzs0MzEsOCBAQCBldGhubF9kZWZhdWx0X3JlcXVlc3RzW19fRVRIVE9PTF9NU0dfVVNFUl9DTlRdID0ge1xuIFx0W0VUSFRPT0xfTVNHX1RTQ09ORklHX1NFVF1cdD0gXHUwMDI2ZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHMsXG4gXHRbRVRIVE9PTF9NU0dfUEhZX0dFVF1cdFx0PSBcdTAwMjZldGhubF9waHlfcmVxdWVzdF9vcHMsXG4gXHRbRVRIVE9PTF9NU0dfTVNFX0dFVF1cdFx0PSBcdTAwMjZldGhubF9tc2VfcmVxdWVzdF9vcHMsXG4mIzQzO1x0W0VUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRdXHQ9IFx1MDAyNmV0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcyxcbiYjNDM7XHRbRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VUXVx0PSBcdTAwMjZldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcyxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmV0aG5sX2R1bXBfY29udGV4dChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5AQCAtMTU3Miw2ICYjNDM7MTU3NCwyOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfb3BzIGV0aHRvb2xfZ2VubF9vcHNbXSA9IHtcbiBcdFx0LnBvbGljeSA9IGV0aG5sX21zZV9nZXRfcG9saWN5LFxuIFx0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfbXNlX2dldF9wb2xpY3kpIC0gMSxcbiBcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LmNtZFx0PSBFVEhUT09MX01TR19JTlRGX0NBUFNfR0VULFxuJiM0MztcdFx0LmRvaXRcdD0gZXRobmxfZGVmYXVsdF9kb2l0LFxuJiM0MztcdFx0LnN0YXJ0XHQ9IGV0aG5sX2RlZmF1bHRfc3RhcnQsXG4mIzQzO1x0XHQuZHVtcGl0XHQ9IGV0aG5sX2RlZmF1bHRfZHVtcGl0LFxuJiM0MztcdFx0LmRvbmVcdD0gZXRobmxfZGVmYXVsdF9kb25lLFxuJiM0MztcdFx0LnBvbGljeSA9IGV0aG5sX2ludGZfY2Fwc19nZXRfcG9saWN5LFxuJiM0MztcdFx0Lm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX2ludGZfY2Fwc19nZXRfcG9saWN5KSAtIDEsXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuY21kXHQ9IEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVCxcbiYjNDM7XHRcdC5kb2l0XHQ9IGV0aG5sX2RlZmF1bHRfZG9pdCxcbiYjNDM7XHRcdC5wb2xpY3kgPSBldGhubF9waHlfdGVzdF9nZXRfcG9saWN5LFxuJiM0MztcdFx0Lm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3kpIC0gMSxcbiYjNDM7XHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5jbWRcdD0gRVRIVE9PTF9NU0dfUEhZX1RFU1RfQUNULFxuJiM0MztcdFx0LmZsYWdzXHQ9IEdFTkxfVU5TX0FETUlOX1BFUk0sXG4mIzQzO1x0XHQuZG9pdFx0PSBldGhubF9hY3RfcGh5X3Rlc3QsXG4mIzQzO1x0XHQucG9saWN5ID0gZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeSxcbiYjNDM7XHRcdC5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9waHlfdGVzdF9hY3RfcG9saWN5KSAtIDEsXG4mIzQzO1x0fSxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgZXRodG9vbF9ubF9tY2dycHNbXSA9IHtcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmggYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbmluZGV4IDNlOTY5YTA3MGY5ZmUuLjFjYWJhNjBkODNjNDMgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxuQEAgLTQ3NCw2ICYjNDM7NDc0LDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tbV9yZXF1ZXN0X29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BoeV9yZXF1ZXN0X29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3RzY29uZmlnX3JlcXVlc3Rfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfbXNlX3JlcXVlc3Rfb3BzO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcztcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcztcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtFVEhUT09MX0FfSEVBREVSX0ZMQUdTICYjNDM7IDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5X3N0YXRzW0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgJiM0MzsgMV07XG5AQCAtNTMwLDYgJiM0Mzs1MzIsMTEgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfSEVBREVSICYjNDM7IDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19nZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19IRUFERVIgJiM0MzsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX3NldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX01BWCAmIzQzOyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfbXNlX2dldF9wb2xpY3lbRVRIVE9PTF9BX01TRV9IRUFERVIgJiM0MzsgMV07XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeVtFVEhUT09MX0FfSU5URl9DQVBTX0hFQURFUiAmIzQzOyAxXTtcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkUgJiM0MzsgMV07XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9NQVggJiM0MzsgMV07XG4mIzQzO1xuJiM0MztpbnQgZXRobmxfYWN0X3BoeV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIFxuIGludCBldGhubF9zZXRfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gaW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BoeXRlc3QuYyBiL25ldC9ldGh0b29sL3BoeXRlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmRlZGNkMDM2YjdjMmVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL3BoeXRlc3QuY1xuQEAgLTAsMCAmIzQzOzEsMTcxIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O25ldGxpbmsuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjb21tb24uaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IHBoeV90ZXN0X3JlcV9pbmZvIHtcbiYjNDM7XHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhIHtcbiYjNDM7XHRzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSBiYXNlO1xuJiM0MztcdHN0cnVjdCBldGh0b29sX3BoeV90ZXN0IHRlc3Q7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBIWV9URVNUX1JFUERBVEEoX19yZXBseV9iYXNlKSBcXFxuJiM0MztcdGNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhLCBiYXNlKVxuJiM0MztcbiYjNDM7LyogUEhZX1RFU1RfR0VUICovXG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FICYjNDM7IDFdID0ge1xuJiM0MztcdFtFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXVx0PSBOTEFfUE9MSUNZX05FU1RFRChldGhubF9oZWFkZXJfcG9saWN5KSxcbiYjNDM7XHRbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuJiM0MztcdFtFVEhUT09MX0FfUEhZX1RFU1RfTEFORV1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGh5X3Rlc3RfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuJiM0MztcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7XHQvKiBibG9ja19pZCAqL1xuJiM0MztcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MztcdC8qIGxhbmUgKi9cbiYjNDM7XHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7XHQvKiB0eF9wYXR0ZXJuICovXG4mIzQzO1x0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzO1x0LyogcnhfcGF0dGVybiAqL1xuJiM0MztcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MztcdC8qIGFjdGl2ZV90ZXN0cyAqL1xuJiM0MztcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSAgJiM0MztcdC8qIGNoZWNrZXJfbG9jayAqL1xuJiM0MztcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTY0KSkgJiM0MztcdC8qIGVycm9yX2NvdW50ICovXG4mIzQzO1x0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1NjQpKTtcdC8qIHRvdGFsX2JpdHNfc2VudCAqL1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBoeV90ZXN0X3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSxcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhICpkYXRhID0gUEhZX1RFU1RfUkVQREFUQShyZXBseV9iYXNlKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmVwbHlfYmFzZS1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby1cdTAwM2VhdHRycztcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X3BoeV90ZXN0KVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0LCAwLCBzaXplb2YoZGF0YS1cdTAwM2V0ZXN0KSk7XG4mIzQzO1xuJiM0MztcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKSB7XG4mIzQzO1x0XHRkYXRhLVx1MDAzZXRlc3QuYmxvY2tfaWQgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKTtcbiYjNDM7XHRcdGRhdGEtXHUwMDNldGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0JMT0NLX0lEO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKSB7XG4mIzQzO1x0XHRkYXRhLVx1MDAzZXRlc3QubGFuZSA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXSk7XG4mIzQzO1x0XHRkYXRhLVx1MDAzZXRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9MQU5FO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfcGh5X3Rlc3QoZGV2LCBcdTAwMjZkYXRhLVx1MDAzZXRlc3QpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBoeV90ZXN0X2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhICpkYXRhID0gUEhZX1RFU1RfUkVQREFUQShyZXBseV9iYXNlKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCAqdCA9IFx1MDAyNmRhdGEtXHUwMDNldGVzdDtcbiYjNDM7XG4mIzQzO1x0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lELCB0LVx1MDAzZWJsb2NrX2lkKSB8fFxuJiM0MztcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9MQU5FLCB0LVx1MDAzZWxhbmUpIHx8XG4mIzQzO1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk4sIHQtXHUwMDNldHhfcGF0dGVybikgfHxcbiYjNDM7XHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTiwgdC1cdTAwM2VyeF9wYXR0ZXJuKSB8fFxuJiM0MztcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9BQ1RJVkVfVEVTVFMsXG4mIzQzO1x0XHRcdHQtXHUwMDNlYWN0aXZlX3Rlc3RzKSB8fFxuJiM0MztcdCAgICBubGFfcHV0X3U4KHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0NIRUNLRVJfTE9DSywgdC1cdTAwM2VjaGVja2VyX2xvY2spIHx8XG4mIzQzO1x0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0VSUk9SX0NPVU5ULFxuJiM0MztcdFx0XHQgICAgICB0LVx1MDAzZWVycm9yX2NvdW50LCBFVEhUT09MX0FfUEhZX1RFU1RfVU5TUEVDKSB8fFxuJiM0MztcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9UT1RBTF9CSVRTX1NFTlQsXG4mIzQzO1x0XHRcdCAgICAgIHQtXHUwMDNldG90YWxfYml0c19zZW50LCBFVEhUT09MX0FfUEhZX1RFU1RfVU5TUEVDKSlcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcGh5X3Rlc3RfcmVxdWVzdF9vcHMgPSB7XG4mIzQzO1x0LnJlcXVlc3RfY21kXHQ9IEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVCxcbiYjNDM7XHQucmVwbHlfY21kXHQ9IEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVF9SRVBMWSxcbiYjNDM7XHQuaGRyX2F0dHJcdD0gRVRIVE9PTF9BX1BIWV9URVNUX0hFQURFUixcbiYjNDM7XHQucmVxX2luZm9fc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHBoeV90ZXN0X3JlcV9pbmZvKSxcbiYjNDM7XHQucmVwbHlfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhKSxcbiYjNDM7XHQucHJlcGFyZV9kYXRhXHQ9IHBoeV90ZXN0X3ByZXBhcmVfZGF0YSxcbiYjNDM7XHQucmVwbHlfc2l6ZVx0PSBwaHlfdGVzdF9yZXBseV9zaXplLFxuJiM0MztcdC5maWxsX3JlcGx5XHQ9IHBoeV90ZXN0X2ZpbGxfcmVwbHksXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBQSFlfVEVTVF9BQ1QgKi9cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV90ZXN0X2FjdF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9URVNUX01BWCAmIzQzOyAxXSA9IHtcbiYjNDM7XHRbRVRIVE9PTF9BX1BIWV9URVNUX0hFQURFUl1cdFx0PSBOTEFfUE9MSUNZX05FU1RFRChldGhubF9oZWFkZXJfcG9saWN5KSxcbiYjNDM7XHRbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4mIzQzO1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4mIzQzO1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4mIzQzO1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4mIzQzO1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9CRVJUX0FDVElPTl1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiYjNDM7XHRbRVRIVE9PTF9BX1BIWV9URVNUX0lOSkVDVF9FUlJPUl9DT1VOVF1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2ludCBldGhubF9hY3RfcGh5X3Rlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBldGhubF9yZXFfaW5mbyByZXFfaW5mbyA9IHt9O1xuJiM0MztcdHN0cnVjdCBubGF0dHIgKip0YiA9IGluZm8tXHUwMDNlYXR0cnM7XG4mIzQzO1x0c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgdGVzdCA9IHt9O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoXHUwMDI2cmVxX2luZm8sXG4mIzQzO1x0XHRcdFx0XHQgdGJbRVRIVE9PTF9BX1BIWV9URVNUX0hFQURFUl0sXG4mIzQzO1x0XHRcdFx0XHQgZ2VubF9pbmZvX25ldChpbmZvKSwgaW5mby1cdTAwM2VleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgdHJ1ZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGRldiA9IHJlcV9pbmZvLmRldjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlc2V0X3BoeV90ZXN0KSB7XG4mIzQzO1x0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdGdvdG8gb3V0X2RldjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKSB7XG4mIzQzO1x0XHR0ZXN0LmJsb2NrX2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSk7XG4mIzQzO1x0XHR0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfQkxPQ0tfSUQ7XG4mIzQzO1x0fVxuJiM0MztcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfTEFORV0pIHtcbiYjNDM7XHRcdHRlc3QubGFuZSA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXSk7XG4mIzQzO1x0XHR0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfTEFORTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOXSkge1xuJiM0MztcdFx0dGVzdC50eF9wYXR0ZXJuID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dKTtcbiYjNDM7XHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9UWF9QQVRURVJOO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX1JYX1BBVFRFUk5dKSB7XG4mIzQzO1x0XHR0ZXN0LnJ4X3BhdHRlcm4gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl0pO1xuJiM0MztcdFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX1JYX1BBVFRFUk47XG4mIzQzO1x0fVxuJiM0MztcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkVSVF9BQ1RJT05dKSB7XG4mIzQzO1x0XHR0ZXN0LmJlcnRfYWN0aW9uID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OXSk7XG4mIzQzO1x0XHR0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfQkVSVF9BQ1RJT047XG4mIzQzO1x0fVxuJiM0MztcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXSkge1xuJiM0MztcdFx0dGVzdC5pbmplY3RfZXJyb3JfY291bnQgPVxuJiM0MztcdFx0XHRubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXSk7XG4mIzQzO1x0XHR0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfSU5KRUNUX0NPVU5UO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1x0cmV0ID0gZXRobmxfb3BzX2JlZ2luKGRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0X3J0bmw7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VzZXRfcGh5X3Rlc3QoZGV2LCBcdTAwMjZ0ZXN0KTtcbiYjNDM7XHRldGhubF9vcHNfY29tcGxldGUoZGV2KTtcbiYjNDM7XG4mIzQzO291dF9ydG5sOlxuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO291dF9kZXY6XG4mIzQzO1x0ZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9wdXQoXHUwMDI2cmVxX2luZm8pO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVRIVE9PTF9ORVRMSU5LJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXRobmxfYWN0X3BoeV90ZXN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbmV3IGV0aHRvb2wgbmV0bGluayBtZXNzYWdlcyAoRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVCwgRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULCBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QpIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljaWVzLiBFdmVuIHRob3VnaCBubyBkcml2ZXJzIGN1cnJlbnRseSBpbXBsZW1lbnQgdGhlIHVuZGVybHlpbmcgZXRodG9vbCBvcGVyYXRpb25zLCB0aGUgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcsIHBvbGljeSB2YWxpZGF0aW9uLCBhbmQgaW5pdGlhbCBoYW5kbGVyIGZ1bmN0aW9ucyAobGlrZSBldGhubF9hY3RfcGh5X3Rlc3QpIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyLXNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDUwNmRkMTA4NjM4ZTVkNzdkMjNmMzBlZmRmMmNmN2ZhODZkZWU5YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDA1OjA2OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwKaW5kZXggNWRkNGQxYjVkOTRiYi4uMzYxZWIzYzY2NTc3MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sCkBAIC0yMTAsNiAmIzQzOzIxMCw1NSBAQCBkZWZpbml0aW9uczoKICAgICAgIC0KICAgICAgICAgbmFtZTogZGlzY2FyZAogICAgICAgICB2YWx1ZTogMzEKJiM0MzsgIC0KJiM0MzsgICAgbmFtZTogaW50Zi1jb21wb25lbnQKJiM0MzsgICAgdHlwZTogZW51bQomIzQzOyAgICBkb2M6IFR5cGUgb2YgaGFyZHdhcmUgY29tcG9uZW50IGluIHRoZSBpbnRlcmZhY2UuCiYjNDM7ICAgIGVudHJpZXM6CiYjNDM7ICAgICAgLSBtYWMKJiM0MzsgICAgICAtIHBoeQomIzQzOyAgICAgIC0gbW9kdWxlCiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IGludGYtc3VibGF5ZXIKJiM0MzsgICAgdHlwZTogZW51bQomIzQzOyAgICBkb2M6IDgwMi4zIHN1YmxheWVyIHdpdGhpbiBhIGNvbXBvbmVudC4KJiM0MzsgICAgZW50cmllczoKJiM0MzsgICAgICAtIG5vbmUKJiM0MzsgICAgICAtIHJzCiYjNDM7ICAgICAgLSBwY3MKJiM0MzsgICAgICAtIGZlYwomIzQzOyAgICAgIC0gcG1hCiYjNDM7ICAgICAgLSBwbWQKJiM0MzsgIC0KJiM0MzsgICAgbmFtZTogcGh5LXRlc3QtcGF0dGVybgomIzQzOyAgICB0eXBlOiBlbnVtCiYjNDM7ICAgIGRvYzogUEhZIHRlc3QgcGF0dGVybiB0eXBlcyBmb3IgUFJCUyBnZW5lcmF0aW9uL2NoZWNraW5nLgomIzQzOyAgICBlbnRyaWVzOgomIzQzOyAgICAgIC0gb2ZmCiYjNDM7ICAgICAgLSBwcmJzNwomIzQzOyAgICAgIC0gcHJiczkKJiM0MzsgICAgICAtIHByYnMxMQomIzQzOyAgICAgIC0gcHJiczEzCiYjNDM7ICAgICAgLSBwcmJzMTUKJiM0MzsgICAgICAtIHByYnMyMwomIzQzOyAgICAgIC0gcHJiczMxCiYjNDM7ICAgICAgLSBzc3BycQomIzQzOyAgICAgIC0gcHJiczEzcQomIzQzOyAgICAgIC0gcHJiczMxcQomIzQzOyAgICAgIC0gc3F1YXJlLW5yegomIzQzOyAgICAgIC0gc3F1YXJlLXBhbTQKJiM0MzsgICAgICAtIHR4LWxpbmVhcml0eQomIzQzOyAgICAgIC0gc2NyYW1ibGVkLWlkbGUKJiM0MzsgICAgICAtIGsyOC01CiYjNDM7ICAgICAgLSBrMjgtNwomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBwaHktdGVzdC1hY3Rpb24KJiM0MzsgICAgdHlwZTogZW51bQomIzQzOyAgICBkb2M6IEJFUlQgY29udHJvbCBhY3Rpb25zLgomIzQzOyAgICBlbnRyaWVzOgomIzQzOyAgICAgIC0gbm9uZQomIzQzOyAgICAgIC0gc3RhcnQKJiM0MzsgICAgICAtIHN0b3AKIAogYXR0cmlidXRlLXNldHM6CiAgIC0KQEAgLTE5MDUsNiAmIzQzOzE5NTQsMTE1IEBAIGF0dHJpYnV0ZS1zZXRzOgogICAgICAgICBuYW1lOiBsaW5rCiAgICAgICAgIHR5cGU6IG5lc3QKICAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IG1zZS1zbmFwc2hvdAomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBpbnRmLWJsb2NrCiYjNDM7ICAgIGRvYzogQSBzaW5nbGUgZnVuY3Rpb25hbCBibG9jayBpbiB0aGUgaW50ZXJmYWNlLgomIzQzOyAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGlkCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBjb21wb25lbnQKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZW51bTogaW50Zi1jb21wb25lbnQKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBzdWJsYXllcgomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBlbnVtOiBpbnRmLXN1YmxheWVyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogaW5zdGFuY2UKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZG9jOiB8CiYjNDM7ICAgICAgICAgIElkZW50aWZpZXMgdGhlIGhhcmR3YXJlIGVudGl0eSB3aGVuIG11bHRpcGxlIGluc3RhbmNlcyBvZgomIzQzOyAgICAgICAgICB0aGUgc2FtZSBjb21wb25lbnQgZXhpc3QgaW4gdGhlIGludGVyZmFjZS4gVGhlIGRyaXZlcgomIzQzOyAgICAgICAgICBhc3NpZ25zIGluc3RhbmNlIG51bWJlcnMgc2VxdWVudGlhbGx5IGJhc2VkIG9uIHBvc2l0aW9uIGluCiYjNDM7ICAgICAgICAgIHRoZSBwaHlzaWNhbCBwYXRoLiBEZWZhdWx0cyB0byAwIHdoZW4gb25seSBvbmUgaW5zdGFuY2Ugb2YKJiM0MzsgICAgICAgICAgYSBnaXZlbiBjb21wb25lbnQgZXhpc3RzLgomIzQzOyAgICAgICAgICBGb3IgUEhZOiBpbnN0YW5jZSAwIGlzIHRoZSBpbnRlcm5hbC9ob3N0LXNpZGUgUEhZLAomIzQzOyAgICAgICAgICBpbnN0YW5jZSAxIGlzIGFuIGV4dGVybmFsIFBIWSBmdXJ0aGVyIGFsb25nIHRoZSBwYXRoCiYjNDM7ICAgICAgICAgIHRvd2FyZCB0aGUgbGluZSBzaWRlLgomIzQzOyAgICAgICAgICBGb3IgTUFDOiBpbnN0YW5jZSAwIGlzIHRoZSBob3N0LWZhY2luZyBNQUMsIGluc3RhbmNlIDEgaXMKJiM0MzsgICAgICAgICAgYSBzZWNvbmRhcnkgTUFDIGZ1cnRoZXIgYWxvbmcgdGhlIGRhdGEgcGF0aCAoZS5nLiwgYmVoaW5kCiYjNDM7ICAgICAgICAgIGFuIGVtYmVkZGVkIHN3aXRjaCkuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogbmFtZQomIzQzOyAgICAgICAgdHlwZTogc3RyaW5nCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZGVwdGgKJiM0MzsgICAgICAgIHR5cGU6IHU4CiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogbGFuZXMKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGxvb3BiYWNrLXN1cHBvcnRlZAomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogc3VwcG9ydGVkLXR4LXBhdHRlcm5zCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBzdXBwb3J0ZWQtcngtcGF0dGVybnMKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGVycm9yLWluamVjdC1zdXBwb3J0ZWQKJiM0MzsgICAgICAgIHR5cGU6IGZsYWcKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBiZXJ0LXN1cHBvcnRlZAomIzQzOyAgICAgICAgdHlwZTogZmxhZwomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBpbnRmLWNhcHMKJiM0MzsgICAgZG9jOiBJbnRlcmZhY2UgY2FwYWJpbGl0aWVzIG1lc3NhZ2UuCiYjNDM7ICAgIGF0dHJpYnV0ZXM6CiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogaGVhZGVyCiYjNDM7ICAgICAgICB0eXBlOiBuZXN0CiYjNDM7ICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogaGVhZGVyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogYmxvY2tzCiYjNDM7ICAgICAgICB0eXBlOiBuZXN0CiYjNDM7ICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogaW50Zi1ibG9jawomIzQzOyAgICAgICAgbXVsdGktYXR0cjogdHJ1ZQomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBwaHktdGVzdAomIzQzOyAgICBkb2M6IFBIWSB0ZXN0IGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1cy4KJiM0MzsgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBoZWFkZXIKJiM0MzsgICAgICAgIHR5cGU6IG5lc3QKJiM0MzsgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBoZWFkZXIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBibG9jay1pZAomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogbGFuZQomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogdHgtcGF0dGVybgomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBlbnVtOiBwaHktdGVzdC1wYXR0ZXJuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogcngtcGF0dGVybgomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBlbnVtOiBwaHktdGVzdC1wYXR0ZXJuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogYmVydC1hY3Rpb24KJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZW51bTogcGh5LXRlc3QtYWN0aW9uCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogaW5qZWN0LWVycm9yLWNvdW50CiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBhY3RpdmUtdGVzdHMKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZG9jOiBCaXRtYXNrIG9mIGN1cnJlbnRseSBydW5uaW5nIHRlc3RzIChiaXQgMCA9IEJFUlQpLgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGNoZWNrZXItbG9jawomIzQzOyAgICAgICAgdHlwZTogdTgKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBlcnJvci1jb3VudAomIzQzOyAgICAgICAgdHlwZTogdTY0CiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogdG90YWwtYml0cy1zZW50CiYjNDM7ICAgICAgICB0eXBlOiB1NjQKIAogb3BlcmF0aW9uczoKICAgZW51bS1tb2RlbDogZGlyZWN0aW9uYWwKQEAgLTI4NTksNiAmIzQzOzMwMTcsNTQgQEAgb3BlcmF0aW9uczoKICAgICAgICAgICAgIC0gd29yc3QtY2hhbm5lbAogICAgICAgICAgICAgLSBsaW5rCiAgICAgICBkdW1wOiAqbXNlLWdldC1vcAomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogaW50Zi1jYXBzLWdldAomIzQzOyAgICAgIGRvYzogR2V0IGludGVyZmFjZSBjYXBhYmlsaXRpZXMgKGZ1bmN0aW9uYWwgYmxvY2sgbGF5b3V0KS4KJiM0MzsgICAgICBhdHRyaWJ1dGUtc2V0OiBpbnRmLWNhcHMKJiM0MzsgICAgICBkbzogJmFtcDtpbnRmLWNhcHMtZ2V0LW9wCiYjNDM7ICAgICAgICByZXF1ZXN0OgomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAgIC0gaGVhZGVyCiYjNDM7ICAgICAgICByZXBseToKJiM0MzsgICAgICAgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAgICAgICAtIGhlYWRlcgomIzQzOyAgICAgICAgICAgIC0gYmxvY2tzCiYjNDM7ICAgICAgZHVtcDogKmludGYtY2Fwcy1nZXQtb3AKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IHBoeS10ZXN0LWdldAomIzQzOyAgICAgIGRvYzogR2V0IFBIWSB0ZXN0IHN0YXR1cyAocGF0dGVybnMsIEJFUlQgY291bnRlcnMpLgomIzQzOyAgICAgIGF0dHJpYnV0ZS1zZXQ6IHBoeS10ZXN0CiYjNDM7ICAgICAgZG86CiYjNDM7ICAgICAgICByZXF1ZXN0OgomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAgIC0gaGVhZGVyCiYjNDM7ICAgICAgICAgICAgLSBibG9jay1pZAomIzQzOyAgICAgICAgICAgIC0gbGFuZQomIzQzOyAgICAgICAgcmVwbHk6CiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6CiYjNDM7ICAgICAgICAgICAgLSBoZWFkZXIKJiM0MzsgICAgICAgICAgICAtIGJsb2NrLWlkCiYjNDM7ICAgICAgICAgICAgLSBsYW5lCiYjNDM7ICAgICAgICAgICAgLSB0eC1wYXR0ZXJuCiYjNDM7ICAgICAgICAgICAgLSByeC1wYXR0ZXJuCiYjNDM7ICAgICAgICAgICAgLSBhY3RpdmUtdGVzdHMKJiM0MzsgICAgICAgICAgICAtIGNoZWNrZXItbG9jawomIzQzOyAgICAgICAgICAgIC0gZXJyb3ItY291bnQKJiM0MzsgICAgICAgICAgICAtIHRvdGFsLWJpdHMtc2VudAomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogcGh5LXRlc3QtYWN0CiYjNDM7ICAgICAgZG9jOiBDb25maWd1cmUgUEhZIHRlc3QgKHNldCBwYXR0ZXJucywgc3RhcnQvc3RvcCBCRVJULCBpbmplY3QgZXJyb3JzKS4KJiM0MzsgICAgICBhdHRyaWJ1dGUtc2V0OiBwaHktdGVzdAomIzQzOyAgICAgIGRvOgomIzQzOyAgICAgICAgcmVxdWVzdDoKJiM0MzsgICAgICAgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAgICAgICAtIGhlYWRlcgomIzQzOyAgICAgICAgICAgIC0gYmxvY2staWQKJiM0MzsgICAgICAgICAgICAtIGxhbmUKJiM0MzsgICAgICAgICAgICAtIHR4LXBhdHRlcm4KJiM0MzsgICAgICAgICAgICAtIHJ4LXBhdHRlcm4KJiM0MzsgICAgICAgICAgICAtIGJlcnQtYWN0aW9uCiYjNDM7ICAgICAgICAgICAgLSBpbmplY3QtZXJyb3ItY291bnQKIAogbWNhc3QtZ3JvdXBzOgogICBsaXN0OgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAppbmRleCAxMjY4M2I1ZDEyNWU0Li5mOTc0OGU3MzlmMDNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaApAQCAtMTE5Nyw2ICYjNDM7MTE5Nyw5MiBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7CiAgKiBTZWUgJmFtcDtzdHJ1Y3QgbmV0X2RldmljZSBhbmQgJmFtcDtzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZm9yIGRvY3VtZW50YXRpb24KICAqIG9mIHRoZSBnZW5lcmljIG5ldGRldiBmZWF0dXJlcyBpbnRlcmZhY2UuCiAgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIElOVEZfQ0FQU19NQVhfQkxPQ0tTCTE2CiYjNDM7I2RlZmluZSBJTlRGX0JMT0NLX05BTUVfTEVOCTMyCiYjNDM7CiYjNDM7I2RlZmluZSBMT09QQkFDS19TVVBQT1JUX0xPQ0FMCUJJVCgwKQomIzQzOyNkZWZpbmUgTE9PUEJBQ0tfU1VQUE9SVF9SRU1PVEUJQklUKDEpCiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayAtIFNpbmdsZSBmdW5jdGlvbmFsIGJsb2NrIGluIHRoZSBpbnRlcmZhY2UKJiM0MzsgKiBAaWQ6IFVuaXF1ZSBibG9jayBpZGVudGlmaWVyCiYjNDM7ICogQGNvbXBvbmVudDogSGFyZHdhcmUgY29tcG9uZW50IChNQUMsIFBIWSwgTU9EVUxFKQomIzQzOyAqIEBzdWJsYXllcjogODAyLjMgc3VibGF5ZXIgKFJTLCBQQ1MsIEZFQywgUE1BLCBQTUQsIG9yIE5PTkUpCiYjNDM7ICogQGluc3RhbmNlOiBJbmRleCB3aGVuIG11bHRpcGxlIGluc3RhbmNlcyBvZiBzYW1lIGNvbXBvbmVudCBleGlzdAomIzQzOyAqIEBuYW1lOiBEcml2ZXItY2hvc2VuIGxhYmVsCiYjNDM7ICogQGRlcHRoOiBPcmRlcmluZyB3aXRoaW4gc2FtZSAoY29tcG9uZW50LCBzdWJsYXllcikgdHVwbGUKJiM0MzsgKiBAbGFuZXM6IE51bWJlciBvZiBsYW5lcwomIzQzOyAqIEBsb29wYmFja19zdXBwb3J0ZWQ6IEJpdG1hc2sgb2Ygc3VwcG9ydGVkIGxvb3BiYWNrIGRpcmVjdGlvbnMKJiM0MzsgKiBAc3VwcG9ydGVkX3R4X3BhdHRlcm5zOiBCaXRtYXNrIG9mIHBhdHRlcm5zIHRoaXMgYmxvY2sgY2FuIGdlbmVyYXRlCiYjNDM7ICogQHN1cHBvcnRlZF9yeF9wYXR0ZXJuczogQml0bWFzayBvZiBwYXR0ZXJucyB0aGlzIGJsb2NrIGNhbiBjaGVjawomIzQzOyAqIEBlcnJvcl9pbmplY3Rfc3VwcG9ydGVkOiBCbG9jayBzdXBwb3J0cyBiaXQgZXJyb3IgaW5qZWN0aW9uCiYjNDM7ICogQGJlcnRfc3VwcG9ydGVkOiBCbG9jayBzdXBwb3J0cyBCRVJUIGNvdW50ZXJzCiYjNDM7ICovCiYjNDM7c3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayB7CiYjNDM7CXUzMiBpZDsKJiM0MzsJZW51bSBpbnRmX2NvbXBvbmVudCBjb21wb25lbnQ7CiYjNDM7CWVudW0gaW50Zl9zdWJsYXllciBzdWJsYXllcjsKJiM0MzsJdTMyIGluc3RhbmNlOwomIzQzOwljaGFyIG5hbWVbSU5URl9CTE9DS19OQU1FX0xFTl07CiYjNDM7CXU4IGRlcHRoOwomIzQzOwl1MzIgbGFuZXM7CiYjNDM7CXUzMiBsb29wYmFja19zdXBwb3J0ZWQ7CiYjNDM7CXUzMiBzdXBwb3J0ZWRfdHhfcGF0dGVybnM7CiYjNDM7CXUzMiBzdXBwb3J0ZWRfcnhfcGF0dGVybnM7CiYjNDM7CWJvb2wgZXJyb3JfaW5qZWN0X3N1cHBvcnRlZDsKJiM0MzsJYm9vbCBiZXJ0X3N1cHBvcnRlZDsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBldGh0b29sX2ludGZfY2FwcyAtIEludGVyZmFjZSBjYXBhYmlsaXRpZXMgKGFsbCBibG9ja3MpCiYjNDM7ICogQG51bV9ibG9ja3M6IE51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIGJsb2Nrc1tdCiYjNDM7ICogQGJsb2NrczogQXJyYXkgb2YgZnVuY3Rpb25hbCBibG9ja3MKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHMgewomIzQzOwl1MzIgbnVtX2Jsb2NrczsKJiM0MzsJc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayBibG9ja3NbSU5URl9DQVBTX01BWF9CTE9DS1NdOwomIzQzO307CiYjNDM7CiYjNDM7LyogQml0bWFzayBvZiB3aGljaCBldGh0b29sX3BoeV90ZXN0IGZpZWxkcyB3ZXJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkICovCiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfVFhfUEFUVEVSTgkJQklUKDApCiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfUlhfUEFUVEVSTgkJQklUKDEpCiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfQkVSVF9BQ1RJT04JCUJJVCgyKQomIzQzOyNkZWZpbmUgUEhZX1RFU1RfQ01EX0lOSkVDVF9DT1VOVAkJQklUKDMpCiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfTEFORQkJCUJJVCg0KQomIzQzOyNkZWZpbmUgUEhZX1RFU1RfQ01EX0JMT0NLX0lECQkJQklUKDUpCiYjNDM7CiYjNDM7LyogQml0bWFzayBvZiBjdXJyZW50bHkgYWN0aXZlIHRlc3RzIChyZWFkLW9ubHkpICovCiYjNDM7I2RlZmluZSBQSFlfVEVTVF9BQ1RJVkVfQkVSVAkJQklUKDApCiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgLSBQSFkgdGVzdCBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMKJiM0MzsgKiBAY21kOiBCaXRtYXNrIG9mIHdoaWNoIGZpZWxkcyBhcmUgdmFsaWQgKFBIWV9URVNUX0NNRF8qKQomIzQzOyAqIEBibG9ja19pZDogQmxvY2sgdG8gb3BlcmF0ZSBvbiAoZnJvbSBpbnRmLWNhcHMtZ2V0KQomIzQzOyAqIEBsYW5lOiBMYW5lIG51bWJlciAoMC1iYXNlZCkKJiM0MzsgKiBAdHhfcGF0dGVybjogVFggcGF0dGVybiBnZW5lcmF0b3Igc2V0dGluZwomIzQzOyAqIEByeF9wYXR0ZXJuOiBSWCBwYXR0ZXJuIGNoZWNrZXIgc2V0dGluZwomIzQzOyAqIEBiZXJ0X2FjdGlvbjogQkVSVCBzdGFydC9zdG9wIGNvbnRyb2wKJiM0MzsgKiBAaW5qZWN0X2Vycm9yX2NvdW50OiBOdW1iZXIgb2YgZXJyb3JzIHRvIGluamVjdAomIzQzOyAqIEBhY3RpdmVfdGVzdHM6IEJpdG1hc2sgb2YgcnVubmluZyB0ZXN0cyAoUEhZX1RFU1RfQUNUSVZFXyopCiYjNDM7ICogQGNoZWNrZXJfbG9jazogUlggY2hlY2tlciBsb2NrIHN0YXR1cyAocmVhZC1vbmx5KQomIzQzOyAqIEBlcnJvcl9jb3VudDogQkVSVCBlcnJvciBjb3VudGVyIChyZWFkLW9ubHkpCiYjNDM7ICogQHRvdGFsX2JpdHNfc2VudDogQkVSVCB0b3RhbCBiaXRzIGNvdW50ZXIgKHJlYWQtb25seSkKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCB7CiYjNDM7CXUzMiBjbWQ7CiYjNDM7CXUzMiBibG9ja19pZDsKJiM0MzsJdTMyIGxhbmU7CiYjNDM7CWVudW0gcGh5X3Rlc3RfcGF0dGVybiB0eF9wYXR0ZXJuOwomIzQzOwllbnVtIHBoeV90ZXN0X3BhdHRlcm4gcnhfcGF0dGVybjsKJiM0MzsJZW51bSBwaHlfdGVzdF9hY3Rpb24gYmVydF9hY3Rpb247CiYjNDM7CXUzMiBpbmplY3RfZXJyb3JfY291bnQ7CiYjNDM7CXUzMiBhY3RpdmVfdGVzdHM7CiYjNDM7CXU4IGNoZWNrZXJfbG9jazsKJiM0MzsJdTY0IGVycm9yX2NvdW50OwomIzQzOwl1NjQgdG90YWxfYml0c19zZW50OwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgZXRodG9vbF9vcHMgewogCXUzMiAgICAgc3VwcG9ydGVkX2lucHV0X3hmcm06ODsKIAl1MzIgICAgIGNhcF9saW5rX2xhbmVzX3N1cHBvcnRlZDoxOwpAQCAtMTM1NCw2ICYjNDM7MTQ0MCwxMiBAQCBzdHJ1Y3QgZXRodG9vbF9vcHMgewogCWludAkoKnNldF9tbSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfbW1fY2ZnICpjZmcsCiAJCQkgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiAJdm9pZAkoKmdldF9tbV9zdGF0cykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfbW1fc3RhdHMgKnN0YXRzKTsKJiM0MzsJaW50CSgqZ2V0X2ludGZfY2Fwcykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJIHN0cnVjdCBldGh0b29sX2ludGZfY2FwcyAqY2Fwcyk7CiYjNDM7CWludAkoKmdldF9waHlfdGVzdCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnRlc3QpOwomIzQzOwlpbnQJKCpzZXRfcGh5X3Rlc3QpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCXN0cnVjdCBldGh0b29sX3BoeV90ZXN0ICp0ZXN0KTsKIH07CiAKIGludCBldGh0b29sX2NoZWNrX29wcyhjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaAppbmRleCA4MTM0YmFmNzg2MGYzLi4zMTAyYmI3YmEzMzdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmgKQEAgLTg5Myw2ICYjNDM7ODkzLDkgQEAgZW51bSB7CiAJRVRIVE9PTF9NU0dfUlNTX0NSRUFURV9BQ1QsCiAJRVRIVE9PTF9NU0dfUlNTX0RFTEVURV9BQ1QsCiAJRVRIVE9PTF9NU0dfTVNFX0dFVCwKJiM0MzsJRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVCwKJiM0MzsJRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULAomIzQzOwlFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QsCiAKIAlfX0VUSFRPT0xfTVNHX1VTRVJfQ05ULAogCUVUSFRPT0xfTVNHX1VTRVJfTUFYID0gKF9fRVRIVE9PTF9NU0dfVVNFUl9DTlQgLSAxKQpAQCAtOTU0LDYgJiM0Mzs5NTcsOCBAQCBlbnVtIHsKIAlFVEhUT09MX01TR19SU1NfQ1JFQVRFX05URiwKIAlFVEhUT09MX01TR19SU1NfREVMRVRFX05URiwKIAlFVEhUT09MX01TR19NU0VfR0VUX1JFUExZLAomIzQzOwlFVEhUT09MX01TR19JTlRGX0NBUFNfR0VUX1JFUExZLAomIzQzOwlFVEhUT09MX01TR19QSFlfVEVTVF9HRVRfUkVQTFksCiAKIAlfX0VUSFRPT0xfTVNHX0tFUk5FTF9DTlQsCiAJRVRIVE9PTF9NU0dfS0VSTkVMX01BWCA9IChfX0VUSFRPT0xfTVNHX0tFUk5FTF9DTlQgLSAxKQpAQCAtOTYxLDQgJiM0Mzs5NjYsMTAzIEBAIGVudW0gewogCiAjZGVmaW5lIEVUSFRPT0xfTUNHUlBfTU9OSVRPUl9OQU1FCSYjMzQ7bW9uaXRvciYjMzQ7CiAKJiM0MzsvKiBJbnRlcmZhY2UgY29tcG9uZW50IHR5cGVzICovCiYjNDM7ZW51bSBpbnRmX2NvbXBvbmVudCB7CiYjNDM7CUlOVEZfQ09NUE9ORU5UX01BQywKJiM0MzsJSU5URl9DT01QT05FTlRfUEhZLAomIzQzOwlJTlRGX0NPTVBPTkVOVF9NT0RVTEUsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBJbnRlcmZhY2Ugc3VibGF5ZXIgdHlwZXMgKi8KJiM0MztlbnVtIGludGZfc3VibGF5ZXIgewomIzQzOwlJTlRGX1NVQkxBWUVSX05PTkUsCiYjNDM7CUlOVEZfU1VCTEFZRVJfUlMsCiYjNDM7CUlOVEZfU1VCTEFZRVJfUENTLAomIzQzOwlJTlRGX1NVQkxBWUVSX0ZFQywKJiM0MzsJSU5URl9TVUJMQVlFUl9QTUEsCiYjNDM7CUlOVEZfU1VCTEFZRVJfUE1ELAomIzQzO307CiYjNDM7CiYjNDM7LyogQXR0cmlidXRlcyBvZiBhIHNpbmdsZSBpbnRlcmZhY2UgYmxvY2sgKi8KJiM0MztlbnVtIHsKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQkxPQ0tfSUQsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0JMT0NLX0NPTVBPTkVOVCwKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQkxPQ0tfU1VCTEFZRVIsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0JMT0NLX0lOU1RBTkNFLAomIzQzOwlFVEhUT09MX0FfSU5URl9CTE9DS19OQU1FLAomIzQzOwlFVEhUT09MX0FfSU5URl9CTE9DS19ERVBUSCwKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTEFORVMsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0JMT0NLX0xPT1BCQUNLX1NVUFBPUlRFRCwKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQkxPQ0tfVFhfUEFUVEVSTlMsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0JMT0NLX1JYX1BBVFRFUk5TLAomIzQzOwlFVEhUT09MX0FfSU5URl9CTE9DS19FUlJPUl9JTkpFQ1QsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0JMT0NLX0JFUlQsCiYjNDM7CiYjNDM7CV9fRVRIVE9PTF9BX0lOVEZfQkxPQ0tfQ05ULAomIzQzOwlFVEhUT09MX0FfSU5URl9CTE9DS19NQVggPSAoX19FVEhUT09MX0FfSU5URl9CTE9DS19DTlQgLSAxKQomIzQzO307CiYjNDM7CiYjNDM7LyogQXR0cmlidXRlcyBvZiBpbnRmLWNhcHMtZ2V0IG1lc3NhZ2UgKi8KJiM0MztlbnVtIHsKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQ0FQU19VTlNQRUMsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSLAomIzQzOwlFVEhUT09MX0FfSU5URl9DQVBTX0JMT0NLUywKJiM0MzsKJiM0MzsJX19FVEhUT09MX0FfSU5URl9DQVBTX0NOVCwKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQ0FQU19NQVggPSAoX19FVEhUT09MX0FfSU5URl9DQVBTX0NOVCAtIDEpCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBQSFkgdGVzdCBwYXR0ZXJuIHR5cGVzICovCiYjNDM7ZW51bSBwaHlfdGVzdF9wYXR0ZXJuIHsKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9PRkYsCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fUFJCUzcsCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fUFJCUzksCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fUFJCUzExLAomIzQzOwlQSFlfVEVTVF9QQVRURVJOX1BSQlMxMywKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9QUkJTMTUsCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fUFJCUzIzLAomIzQzOwlQSFlfVEVTVF9QQVRURVJOX1BSQlMzMSwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9TU1BSUSwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9QUkJTMTNRLAomIzQzOwlQSFlfVEVTVF9QQVRURVJOX1BSQlMzMVEsCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fU1FVQVJFX05SWiwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9TUVVBUkVfUEFNNCwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9UWF9MSU5FQVJJVFksCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fU0NSQU1CTEVEX0lETEUsCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fSzI4XzUsCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fSzI4XzcsCiYjNDM7CiYjNDM7CV9fUEhZX1RFU1RfUEFUVEVSTl9DT1VOVCwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9NQVggPSAoX19QSFlfVEVTVF9QQVRURVJOX0NPVU5UIC0gMSkKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFBIWSB0ZXN0IEJFUlQgYWN0aW9ucyAqLwomIzQzO2VudW0gcGh5X3Rlc3RfYWN0aW9uIHsKJiM0MzsJUEhZX1RFU1RfQUNUSU9OX05PTkUsCiYjNDM7CVBIWV9URVNUX0FDVElPTl9TVEFSVCwKJiM0MzsJUEhZX1RFU1RfQUNUSU9OX1NUT1AsCiYjNDM7CiYjNDM7CV9fUEhZX1RFU1RfQUNUSU9OX0NPVU5ULAomIzQzOwlQSFlfVEVTVF9BQ1RJT05fTUFYID0gKF9fUEhZX1RFU1RfQUNUSU9OX0NPVU5UIC0gMSkKJiM0Mzt9OwomIzQzOwomIzQzOy8qIEF0dHJpYnV0ZXMgb2YgcGh5LXRlc3QtZ2V0IC8gcGh5LXRlc3QtYWN0IG1lc3NhZ2VzICovCiYjNDM7ZW51bSB7CiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9VTlNQRUMsCiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9IRUFERVIsCiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9CTE9DS19JRCwKJiM0MzsJRVRIVE9PTF9BX1BIWV9URVNUX0xBTkUsCiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOLAomIzQzOwlFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTiwKJiM0MzsJRVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OLAomIzQzOwlFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5ULAomIzQzOwlFVEhUT09MX0FfUEhZX1RFU1RfQUNUSVZFX1RFU1RTLAomIzQzOwlFVEhUT09MX0FfUEhZX1RFU1RfQ0hFQ0tFUl9MT0NLLAomIzQzOwlFVEhUT09MX0FfUEhZX1RFU1RfRVJST1JfQ09VTlQsCiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9UT1RBTF9CSVRTX1NFTlQsCiYjNDM7CiYjNDM7CV9fRVRIVE9PTF9BX1BIWV9URVNUX0NOVCwKJiM0MzsJRVRIVE9PTF9BX1BIWV9URVNUX01BWCA9IChfX0VUSFRPT0xfQV9QSFlfVEVTVF9DTlQgLSAxKQomIzQzO307CiYjNDM7CiAjZW5kaWYgLyogX1VBUElfTElOVVhfRVRIVE9PTF9ORVRMSU5LX0dFTkVSQVRFRF9IICovCmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9NYWtlZmlsZSBiL25ldC9ldGh0b29sL01ha2VmaWxlCmluZGV4IDYyOWMxMDkxNjY3MGUuLjdkZDJjNTYyNGNlZGYgMTAwNjQ0Ci0tLSBhL25ldC9ldGh0b29sL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL01ha2VmaWxlCkBAIC05LDQgJiM0Mzs5LDQgQEAgZXRodG9vbF9ubC15CTo9IG5ldGxpbmsubyBiaXRzZXQubyBzdHJzZXQubyBsaW5raW5mby5vIGxpbmttb2Rlcy5vIHJzcy5vIFwKIAkJICAgY2hhbm5lbHMubyBjb2FsZXNjZS5vIHBhdXNlLm8gZWVlLm8gdHNpbmZvLm8gY2FibGV0ZXN0Lm8gXAogCQkgICB0dW5uZWxzLm8gZmVjLm8gZWVwcm9tLm8gc3RhdHMubyBwaGNfdmNsb2Nrcy5vIG1tLm8gXAogCQkgICBtb2R1bGUubyBjbWlzX2Z3X3VwZGF0ZS5vIGNtaXNfY2RiLm8gcHNlLXBkLm8gcGxjYS5vIFwKLQkJICAgcGh5Lm8gdHNjb25maWcubyBtc2UubwomIzQzOwkJICAgcGh5Lm8gdHNjb25maWcubyBtc2UubyBpbnRmX2NhcHMubyBwaHl0ZXN0Lm8KZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL2ludGZfY2Fwcy5jIGIvbmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZTQ1Y2NjNGI4OGM5ZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL2ludGZfY2Fwcy5jCkBAIC0wLDAgJiM0MzsxLDEzMCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O25ldGxpbmsuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtjb21tb24uaCYjMzQ7CiYjNDM7CiYjNDM7c3RydWN0IGludGZfY2Fwc19yZXFfaW5mbyB7CiYjNDM7CXN0cnVjdCBldGhubF9yZXFfaW5mbyBiYXNlOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhIHsKJiM0MzsJc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgYmFzZTsKJiM0MzsJc3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzIGNhcHM7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIElOVEZfQ0FQU19SRVBEQVRBKF9fcmVwbHlfYmFzZSkgXAomIzQzOwljb250YWluZXJfb2YoX19yZXBseV9iYXNlLCBzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGEsIGJhc2UpCiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3lbRVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIgJiM0MzsgMV0gPSB7CiYjNDM7CVtFVEhUT09MX0FfSU5URl9DQVBTX0hFQURFUl0gPQomIzQzOwkJTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGludGZfY2Fwc19yZXBseV9zaXplKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhICpkYXRhID0gSU5URl9DQVBTX1JFUERBVEEocmVwbHlfYmFzZSk7CiYjNDM7CWludCBsZW4gPSAwOwomIzQzOwl1MzIgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGRhdGEtJmd0O2NhcHMubnVtX2Jsb2NrczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoMCk7CQkvKiBuZXN0ZWQgYmxvY2sgKi8KJiM0MzsJCWxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwkvKiBpZCAqLwomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CS8qIGNvbXBvbmVudCAqLwomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CS8qIHN1YmxheWVyICovCiYjNDM7CQlsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsJLyogaW5zdGFuY2UgKi8KJiM0MzsJCWxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoSU5URl9CTE9DS19OQU1FX0xFTik7IC8qIG5hbWUgKi8KJiM0MzsJCWxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSk7CS8qIGRlcHRoICovCiYjNDM7CQlsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsJLyogbGFuZXMgKi8KJiM0MzsJCWxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwkvKiBsb29wYmFja19zdXBwb3J0ZWQgKi8KJiM0MzsJCWxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwkvKiB0eF9wYXR0ZXJucyAqLwomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CS8qIHJ4X3BhdHRlcm5zICovCiYjNDM7CQlsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKDApOwkJLyogZXJyb3JfaW5qZWN0IChmbGFnKSAqLwomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZSgwKTsJCS8qIGJlcnQgKGZsYWcpICovCiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogb3V0ZXIgQkxPQ0tTIG5lc3QgKi8KJiM0MzsJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZSgwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGxlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsCiYjNDM7CQkJCSAgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UsCiYjNDM7CQkJCSAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSAqZGF0YSA9IElOVEZfQ0FQU19SRVBEQVRBKHJlcGx5X2Jhc2UpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmVwbHlfYmFzZS0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlpZiAoIWRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9pbnRmX2NhcHMpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiBkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtnZXRfaW50Zl9jYXBzKGRldiwgJmFtcDtkYXRhLSZndDtjYXBzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpbnRmX2NhcHNfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQljb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLAomIzQzOwkJCQljb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSAqZGF0YSA9IElOVEZfQ0FQU19SRVBEQVRBKHJlcGx5X2Jhc2UpOwomIzQzOwlzdHJ1Y3QgbmxhdHRyICpibG9ja3NfYXR0cjsKJiM0MzsJdTMyIGk7CiYjNDM7CiYjNDM7CWJsb2Nrc19hdHRyID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBFVEhUT09MX0FfSU5URl9DQVBTX0JMT0NLUyk7CiYjNDM7CWlmICghYmxvY2tzX2F0dHIpCiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGF0YS0mZ3Q7Y2Fwcy5udW1fYmxvY2tzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayAqYiA9ICZhbXA7ZGF0YS0mZ3Q7Y2Fwcy5ibG9ja3NbaV07CiYjNDM7CQlzdHJ1Y3QgbmxhdHRyICpibG9ja19hdHRyOwomIzQzOwomIzQzOwkJYmxvY2tfYXR0ciA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgMCk7CiYjNDM7CQlpZiAoIWJsb2NrX2F0dHIpCiYjNDM7CQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CiYjNDM7CQlpZiAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19JRCwgYi0mZ3Q7aWQpIHx8CiYjNDM7CQkgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19DT01QT05FTlQsCiYjNDM7CQkJCWItJmd0O2NvbXBvbmVudCkgfHwKJiM0MzsJCSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX1NVQkxBWUVSLAomIzQzOwkJCQliLSZndDtzdWJsYXllcikgfHwKJiM0MzsJCSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0lOU1RBTkNFLAomIzQzOwkJCQliLSZndDtpbnN0YW5jZSkgfHwKJiM0MzsJCSAgICBubGFfcHV0X3N0cmluZyhza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX05BTUUsIGItJmd0O25hbWUpIHx8CiYjNDM7CQkgICAgbmxhX3B1dF91OChza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0RFUFRILCBiLSZndDtkZXB0aCkgfHwKJiM0MzsJCSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0xBTkVTLCBiLSZndDtsYW5lcykgfHwKJiM0MzsJCSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0xPT1BCQUNLX1NVUFBPUlRFRCwKJiM0MzsJCQkJYi0mZ3Q7bG9vcGJhY2tfc3VwcG9ydGVkKSB8fAomIzQzOwkJICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfVFhfUEFUVEVSTlMsCiYjNDM7CQkJCWItJmd0O3N1cHBvcnRlZF90eF9wYXR0ZXJucykgfHwKJiM0MzsJCSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX1JYX1BBVFRFUk5TLAomIzQzOwkJCQliLSZndDtzdXBwb3J0ZWRfcnhfcGF0dGVybnMpKQomIzQzOwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwomIzQzOwkJaWYgKGItJmd0O2Vycm9yX2luamVjdF9zdXBwb3J0ZWQgJmFtcDsmYW1wOwomIzQzOwkJICAgIG5sYV9wdXRfZmxhZyhza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0VSUk9SX0lOSkVDVCkpCiYjNDM7CQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CQlpZiAoYi0mZ3Q7YmVydF9zdXBwb3J0ZWQgJmFtcDsmYW1wOwomIzQzOwkJICAgIG5sYV9wdXRfZmxhZyhza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0JFUlQpKQomIzQzOwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwomIzQzOwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwomIzQzOwomIzQzOwkJbmxhX25lc3RfZW5kKHNrYiwgYmxvY2tfYXR0cik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmxhX25lc3RfZW5kKHNrYiwgYmxvY2tzX2F0dHIpOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztubGFfcHV0X2ZhaWx1cmU6CiYjNDM7CW5sYV9uZXN0X2NhbmNlbChza2IsIGJsb2Nrc19hdHRyKTsKJiM0MzsJcmV0dXJuIC1FTVNHU0laRTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcyA9IHsKJiM0MzsJLnJlcXVlc3RfY21kCT0gRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVCwKJiM0MzsJLnJlcGx5X2NtZAk9IEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRfUkVQTFksCiYjNDM7CS5oZHJfYXR0cgk9IEVUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSLAomIzQzOwkucmVxX2luZm9fc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaW50Zl9jYXBzX3JlcV9pbmZvKSwKJiM0MzsJLnJlcGx5X2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGEpLAomIzQzOwkucHJlcGFyZV9kYXRhCT0gaW50Zl9jYXBzX3ByZXBhcmVfZGF0YSwKJiM0MzsJLnJlcGx5X3NpemUJPSBpbnRmX2NhcHNfcmVwbHlfc2l6ZSwKJiM0MzsJLmZpbGxfcmVwbHkJPSBpbnRmX2NhcHNfZmlsbF9yZXBseSwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5jIGIvbmV0L2V0aHRvb2wvbmV0bGluay5jCmluZGV4IDFhZjM5NWI1NDMzMGUuLjU2ZTVjODExNDU0YmIgMTAwNjQ0Ci0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmMKQEAgLTQzMSw2ICYjNDM7NDMxLDggQEAgZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tfX0VUSFRPT0xfTVNHX1VTRVJfQ05UXSA9IHsKIAlbRVRIVE9PTF9NU0dfVFNDT05GSUdfU0VUXQk9ICZhbXA7ZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHMsCiAJW0VUSFRPT0xfTVNHX1BIWV9HRVRdCQk9ICZhbXA7ZXRobmxfcGh5X3JlcXVlc3Rfb3BzLAogCVtFVEhUT09MX01TR19NU0VfR0VUXQkJPSAmYW1wO2V0aG5sX21zZV9yZXF1ZXN0X29wcywKJiM0MzsJW0VUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRdCT0gJmFtcDtldGhubF9pbnRmX2NhcHNfcmVxdWVzdF9vcHMsCiYjNDM7CVtFVEhUT09MX01TR19QSFlfVEVTVF9HRVRdCT0gJmFtcDtldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmV0aG5sX2R1bXBfY29udGV4dChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCkBAIC0xNTcyLDYgJiM0MzsxNTc0LDI4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9vcHMgZXRodG9vbF9nZW5sX29wc1tdID0gewogCQkucG9saWN5ID0gZXRobmxfbXNlX2dldF9wb2xpY3ksCiAJCS5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9tc2VfZ2V0X3BvbGljeSkgLSAxLAogCX0sCiYjNDM7CXsKJiM0MzsJCS5jbWQJPSBFVEhUT09MX01TR19JTlRGX0NBUFNfR0VULAomIzQzOwkJLmRvaXQJPSBldGhubF9kZWZhdWx0X2RvaXQsCiYjNDM7CQkuc3RhcnQJPSBldGhubF9kZWZhdWx0X3N0YXJ0LAomIzQzOwkJLmR1bXBpdAk9IGV0aG5sX2RlZmF1bHRfZHVtcGl0LAomIzQzOwkJLmRvbmUJPSBldGhubF9kZWZhdWx0X2RvbmUsCiYjNDM7CQkucG9saWN5ID0gZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3ksCiYjNDM7CQkubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3kpIC0gMSwKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLmNtZAk9IEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVCwKJiM0MzsJCS5kb2l0CT0gZXRobmxfZGVmYXVsdF9kb2l0LAomIzQzOwkJLnBvbGljeSA9IGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3ksCiYjNDM7CQkubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcGh5X3Rlc3RfZ2V0X3BvbGljeSkgLSAxLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkuY21kCT0gRVRIVE9PTF9NU0dfUEhZX1RFU1RfQUNULAomIzQzOwkJLmZsYWdzCT0gR0VOTF9VTlNfQURNSU5fUEVSTSwKJiM0MzsJCS5kb2l0CT0gZXRobmxfYWN0X3BoeV90ZXN0LAomIzQzOwkJLnBvbGljeSA9IGV0aG5sX3BoeV90ZXN0X2FjdF9wb2xpY3ksCiYjNDM7CQkubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeSkgLSAxLAomIzQzOwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBldGh0b29sX25sX21jZ3Jwc1tdID0gewpkaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5oIGIvbmV0L2V0aHRvb2wvbmV0bGluay5oCmluZGV4IDNlOTY5YTA3MGY5ZmUuLjFjYWJhNjBkODNjNDMgMTAwNjQ0Ci0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmgKQEAgLTQ3NCw2ICYjNDM7NDc0LDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tbV9yZXF1ZXN0X29wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcGh5X3JlcXVlc3Rfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfbXNlX3JlcXVlc3Rfb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfaW50Zl9jYXBzX3JlcXVlc3Rfb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcGh5X3Rlc3RfcmVxdWVzdF9vcHM7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5W0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgJiM0MzsgMV07CiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeV9zdGF0c1tFVEhUT09MX0FfSEVBREVSX0ZMQUdTICYjNDM7IDFdOwpAQCAtNTMwLDYgJiM0Mzs1MzIsMTEgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfSEVBREVSICYjNDM7IDFdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX2dldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX0hFQURFUiAmIzQzOyAxXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19zZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19NQVggJiM0MzsgMV07CiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfbXNlX2dldF9wb2xpY3lbRVRIVE9PTF9BX01TRV9IRUFERVIgJiM0MzsgMV07CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2ludGZfY2Fwc19nZXRfcG9saWN5W0VUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSICYjNDM7IDFdOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FICYjNDM7IDFdOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9NQVggJiM0MzsgMV07CiYjNDM7CiYjNDM7aW50IGV0aG5sX2FjdF9waHlfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKIAogaW50IGV0aG5sX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKIGludCBldGhubF9hY3RfY2FibGVfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BoeXRlc3QuYyBiL25ldC9ldGh0b29sL3BoeXRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5kZWRjZDAzNmI3YzJlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvcGh5dGVzdC5jCkBAIC0wLDAgJiM0MzsxLDE3MSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O25ldGxpbmsuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtjb21tb24uaCYjMzQ7CiYjNDM7CiYjNDM7c3RydWN0IHBoeV90ZXN0X3JlcV9pbmZvIHsKJiM0MzsJc3RydWN0IGV0aG5sX3JlcV9pbmZvIGJhc2U7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcGh5X3Rlc3RfcmVwbHlfZGF0YSB7CiYjNDM7CXN0cnVjdCBldGhubF9yZXBseV9kYXRhIGJhc2U7CiYjNDM7CXN0cnVjdCBldGh0b29sX3BoeV90ZXN0IHRlc3Q7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIFBIWV9URVNUX1JFUERBVEEoX19yZXBseV9iYXNlKSBcCiYjNDM7CWNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhLCBiYXNlKQomIzQzOwomIzQzOy8qIFBIWV9URVNUX0dFVCAqLwomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkUgJiM0MzsgMV0gPSB7CiYjNDM7CVtFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXQk9IE5MQV9QT0xJQ1lfTkVTVEVEKGV0aG5sX2hlYWRlcl9wb2xpY3kpLAomIzQzOwlbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiYjNDM7CVtFVEhUT09MX0FfUEhZX1RFU1RfTEFORV0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBwaHlfdGVzdF9yZXBseV9zaXplKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlKQomIzQzO3sKJiM0MzsJcmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOwkvKiBibG9ja19pZCAqLwomIzQzOwkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7CS8qIGxhbmUgKi8KJiM0MzsJICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOwkvKiB0eF9wYXR0ZXJuICovCiYjNDM7CSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MzsJLyogcnhfcGF0dGVybiAqLwomIzQzOwkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7CS8qIGFjdGl2ZV90ZXN0cyAqLwomIzQzOwkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSkgICYjNDM7CS8qIGNoZWNrZXJfbG9jayAqLwomIzQzOwkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU2NCkpICYjNDM7CS8qIGVycm9yX2NvdW50ICovCiYjNDM7CSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTY0KSk7CS8qIHRvdGFsX2JpdHNfc2VudCAqLwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBoeV90ZXN0X3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLAomIzQzOwkJCQkgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UsCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeV90ZXN0X3JlcGx5X2RhdGEgKmRhdGEgPSBQSFlfVEVTVF9SRVBEQVRBKHJlcGx5X2Jhc2UpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmVwbHlfYmFzZS0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLSZndDthdHRyczsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtnZXRfcGh5X3Rlc3QpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CW1lbXNldCgmYW1wO2RhdGEtJmd0O3Rlc3QsIDAsIHNpemVvZihkYXRhLSZndDt0ZXN0KSk7CiYjNDM7CiYjNDM7CWlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKSB7CiYjNDM7CQlkYXRhLSZndDt0ZXN0LmJsb2NrX2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSk7CiYjNDM7CQlkYXRhLSZndDt0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfQkxPQ0tfSUQ7CiYjNDM7CX0KJiM0MzsJaWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXSkgewomIzQzOwkJZGF0YS0mZ3Q7dGVzdC5sYW5lID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKTsKJiM0MzsJCWRhdGEtJmd0O3Rlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9MQU5FOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtnZXRfcGh5X3Rlc3QoZGV2LCAmYW1wO2RhdGEtJmd0O3Rlc3QpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBoeV90ZXN0X2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgICAgICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSwKJiM0MzsJCQkgICAgICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcGh5X3Rlc3RfcmVwbHlfZGF0YSAqZGF0YSA9IFBIWV9URVNUX1JFUERBVEEocmVwbHlfYmFzZSk7CiYjNDM7CWNvbnN0IHN0cnVjdCBldGh0b29sX3BoeV90ZXN0ICp0ID0gJmFtcDtkYXRhLSZndDt0ZXN0OwomIzQzOwomIzQzOwlpZiAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSUQsIHQtJmd0O2Jsb2NrX2lkKSB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfTEFORSwgdC0mZ3Q7bGFuZSkgfHwKJiM0MzsJICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk4sIHQtJmd0O3R4X3BhdHRlcm4pIHx8CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOLCB0LSZndDtyeF9wYXR0ZXJuKSB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfQUNUSVZFX1RFU1RTLAomIzQzOwkJCXQtJmd0O2FjdGl2ZV90ZXN0cykgfHwKJiM0MzsJICAgIG5sYV9wdXRfdTgoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfQ0hFQ0tFUl9MT0NLLCB0LSZndDtjaGVja2VyX2xvY2spIHx8CiYjNDM7CSAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9FUlJPUl9DT1VOVCwKJiM0MzsJCQkgICAgICB0LSZndDtlcnJvcl9jb3VudCwgRVRIVE9PTF9BX1BIWV9URVNUX1VOU1BFQykgfHwKJiM0MzsJICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX1RPVEFMX0JJVFNfU0VOVCwKJiM0MzsJCQkgICAgICB0LSZndDt0b3RhbF9iaXRzX3NlbnQsIEVUSFRPT0xfQV9QSFlfVEVTVF9VTlNQRUMpKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcyA9IHsKJiM0MzsJLnJlcXVlc3RfY21kCT0gRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULAomIzQzOwkucmVwbHlfY21kCT0gRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VUX1JFUExZLAomIzQzOwkuaGRyX2F0dHIJPSBFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSLAomIzQzOwkucmVxX2luZm9fc2l6ZQk9IHNpemVvZihzdHJ1Y3QgcGh5X3Rlc3RfcmVxX2luZm8pLAomIzQzOwkucmVwbHlfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhKSwKJiM0MzsJLnByZXBhcmVfZGF0YQk9IHBoeV90ZXN0X3ByZXBhcmVfZGF0YSwKJiM0MzsJLnJlcGx5X3NpemUJPSBwaHlfdGVzdF9yZXBseV9zaXplLAomIzQzOwkuZmlsbF9yZXBseQk9IHBoeV90ZXN0X2ZpbGxfcmVwbHksCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBQSFlfVEVTVF9BQ1QgKi8KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9NQVggJiM0MzsgMV0gPSB7CiYjNDM7CVtFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXQkJPSBOTEFfUE9MSUNZX05FU1RFRChldGhubF9oZWFkZXJfcG9saWN5KSwKJiM0MzsJW0VUSFRPT0xfQV9QSFlfVEVTVF9CTE9DS19JRF0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKJiM0MzsJW0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAomIzQzOwlbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiYjNDM7CVtFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKJiM0MzsJW0VUSFRPT0xfQV9QSFlfVEVTVF9CRVJUX0FDVElPTl0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAomIzQzOwlbRVRIVE9PTF9BX1BIWV9URVNUX0lOSkVDVF9FUlJPUl9DT1VOVF0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAomIzQzO307CiYjNDM7CiYjNDM7aW50IGV0aG5sX2FjdF9waHlfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IGV0aG5sX3JlcV9pbmZvIHJlcV9pbmZvID0ge307CiYjNDM7CXN0cnVjdCBubGF0dHIgKip0YiA9IGluZm8tJmd0O2F0dHJzOwomIzQzOwlzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCB0ZXN0ID0ge307CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGV0aG5sX3BhcnNlX2hlYWRlcl9kZXZfZ2V0KCZhbXA7cmVxX2luZm8sCiYjNDM7CQkJCQkgdGJbRVRIVE9PTF9BX1BIWV9URVNUX0hFQURFUl0sCiYjNDM7CQkJCQkgZ2VubF9pbmZvX25ldChpbmZvKSwgaW5mby0mZ3Q7ZXh0YWNrLAomIzQzOwkJCQkJIHRydWUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWRldiA9IHJlcV9pbmZvLmRldjsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtzZXRfcGh5X3Rlc3QpIHsKJiM0MzsJCXJldCA9IC1FT1BOT1RTVVBQOwomIzQzOwkJZ290byBvdXRfZGV2OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKSB7CiYjNDM7CQl0ZXN0LmJsb2NrX2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSk7CiYjNDM7CQl0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfQkxPQ0tfSUQ7CiYjNDM7CX0KJiM0MzsJaWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXSkgewomIzQzOwkJdGVzdC5sYW5lID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKTsKJiM0MzsJCXRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9MQU5FOwomIzQzOwl9CiYjNDM7CWlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfVFhfUEFUVEVSTl0pIHsKJiM0MzsJCXRlc3QudHhfcGF0dGVybiA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOXSk7CiYjNDM7CQl0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfVFhfUEFUVEVSTjsKJiM0MzsJfQomIzQzOwlpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX1JYX1BBVFRFUk5dKSB7CiYjNDM7CQl0ZXN0LnJ4X3BhdHRlcm4gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl0pOwomIzQzOwkJdGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX1JYX1BBVFRFUk47CiYjNDM7CX0KJiM0MzsJaWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9CRVJUX0FDVElPTl0pIHsKJiM0MzsJCXRlc3QuYmVydF9hY3Rpb24gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfQkVSVF9BQ1RJT05dKTsKJiM0MzsJCXRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CRVJUX0FDVElPTjsKJiM0MzsJfQomIzQzOwlpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0lOSkVDVF9FUlJPUl9DT1VOVF0pIHsKJiM0MzsJCXRlc3QuaW5qZWN0X2Vycm9yX2NvdW50ID0KJiM0MzsJCQlubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXSk7CiYjNDM7CQl0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfSU5KRUNUX0NPVU5UOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJ0bmxfbG9jaygpOwomIzQzOwlyZXQgPSBldGhubF9vcHNfYmVnaW4oZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dF9ydG5sOwomIzQzOwomIzQzOwlyZXQgPSBkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtzZXRfcGh5X3Rlc3QoZGV2LCAmYW1wO3Rlc3QpOwomIzQzOwlldGhubF9vcHNfY29tcGxldGUoZGV2KTsKJiM0MzsKJiM0MztvdXRfcnRubDoKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MztvdXRfZGV2OgomIzQzOwlldGhubF9wYXJzZV9oZWFkZXJfZGV2X3B1dCgmYW1wO3JlcV9pbmZvKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDEzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEV0aHRvb2wgTmV0bGluayBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBmZXcgbmV3IGV0aHRvb2wgbmV0bGluayBtZXNzYWdlczogYEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRgLCBgRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VUYCwgYW5kIGBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1RgLiBUaGVzZSBhcmUgc3BlY2lmaWNhbGx5IGFpbWVkIGF0IHJldHJpZXZpbmcgaW50ZXJmYWNlIGNhcGFiaWxpdGllcyDigJMgc291bmRzIGxpa2UgYSBmdW5jdGlvbmFsIGJsb2NrIGRpYWdyYW0g4oCTIGFuZCBnZXR0aW5nL3NldHRpbmcgUEhZIHRlc3Qgc3RhdHVzLCB3aGljaCBpbmNsdWRlcyB0aGluZ3MgbGlrZSBwYXR0ZXJuIGNvbmZpZ3VyYXRpb25zIGFuZCBCRVJUIGNvdW50ZXJzLiBTZWVtcyByZWFzb25hYmxlLCBnaXZlbiB0aGUgZGlyZWN0aW9uIHdlJiMzOTt2ZSBiZWVuIGdvaW5nIHdpdGggZXRodG9vbC4KClRoZSBjaGFuZ2VzIGFyZSBmYWlybHkgY29uY2VudHJhdGVkOiB0aGUgY29yZSBgbmV0L2V0aHRvb2wvbmV0bGluay5jYCwgdGhlIGhlYWRlciBpbiBgbmV0L2V0aHRvb2wvbmV0bGluay5oYCwgdGhlIGBNYWtlZmlsZWAsIGFuZCB0aGVuIG5ldyBzb3VyY2UgZmlsZXMgYG5ldC9ldGh0b29sL2ludGZfY2Fwcy5jYCBhbmQgYG5ldC9ldGh0b29sL3BoeXRlc3QuY2AuIE9mIGNvdXJzZSwgd2UgaGF2ZSB0aGUgY29ycmVzcG9uZGluZyB1cGRhdGVzIHRvIHRoZSBldGh0b29sIGtlcm5lbCBoZWFkZXJzIGluIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgYW5kIHRoZSB1c2VyLXNwYWNlIEFQSSBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaGAuIFN0YW5kYXJkIHN0dWZmLgoKTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVzZSBuZXcgbWVzc2FnZXMgYXJlIGFjdHVhbGx5IGJlaW5nIGhhbmRsZWQuIE9rYXksIHRoZXkmIzM5O3JlIGFkZGVkIHRvIGBldGh0b29sX2dlbmxfb3BzYCB3aXRoaW4gYG5ldC9ldGh0b29sL25ldGxpbmsuY2AsIHRoYXQgc2VlbXMgcmlnaHQuIExvb2tpbmcgYXQgdGhlIGltcGxlbWVudGF0aW9uLCBgRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVGAgYW5kIGBFVEhUT09MX01TR19QSFlfVEVTVF9HRVRgIGFyZSB1c2luZyBgZXRobmxfZGVmYXVsdF9kb2l0YCDigJMgd2hpY2ggbGlrZWx5IGltcGxpZXMgc29tZSBnZW5lcmljIG5ldGxpbmsgaGFuZGxpbmcg4oCTIHdoaWxlIGBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1RgIHNwZWNpZmljYWxseSB1c2VzIGBldGhubF9hY3RfcGh5X3Rlc3RgLgoKQWxyaWdodCwgbGV0JiMzOTtzIHRyYWNrIGRvd24gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciBgZXRobmxfYWN0X3BoeV90ZXN0YCBhbmQgYWxzbyBgZXRobmxfaW50Zl9jYXBzX3JlcXVlc3Rfb3BzYCBhbmQgYGV0aG5sX3BoeV90ZXN0X3JlcXVlc3Rfb3BzYC4gQWhhISBUaGV5JiMzOTtyZSBkZWZpbmVkIHdpdGhpbiBgbmV0L2V0aHRvb2wvcGh5dGVzdC5jYCBhbmQgYG5ldC9ldGh0b29sL2ludGZfY2Fwcy5jYCwgYXMgZXhwZWN0ZWQuCgpPbmUgY3JpdGljYWwgY2hlY2s6IHdoYXQgYWJvdXQgdGhlIGNvbmZpZz8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGV0aHRvb2wgbmV0bGluayBpcyBhY3R1YWxseSBlbmFibGVkLiBgQ09ORklHX0VUSFRPT0xfTkVUTElOS2Agc2hvdWxkIGRvIGl0LiBXYWl0LCBob2xkIG9uLiBgQ09ORklHX0VUSFRPT0xfTkVUTElOS2AgaXMgdXN1YWxseSBhdXRvLWVuYWJsZWQgb3IgZGVwZW5kcyBvbiBgQ09ORklHX05FVGAuIEkgc2hvdWxkIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBkZXBlbmRlbmN5IGlzIGFzIEkgZXhwZWN0LiBMZXQmIzM5O3MgbG9vayBhdCBgbmV0L2V0aHRvb2wvS2NvbmZpZ2Agb3IgYG5ldC9LY29uZmlnYCB0byBiZSBzdXJlLiBOb3RoaW5nIHRvbyB0cmlja3ksIGhvcGVmdWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVRIVE9PTF9ORVRMSU5LJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTUwNz1jb25maWcgRkFJTE9WRVJcbi0tXG5uZXQvS2NvbmZpZy01MTktXG5uZXQvS2NvbmZpZzo1MjA6Y29uZmlnIEVUSFRPT0xfTkVUTElOS1xubmV0L0tjb25maWctNTIxLVx0Ym9vbCBcJiMzNDtOZXRsaW5rIGludGVyZmFjZSBmb3IgZXRodG9vbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTQ2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgZGlyZWN0bHkgdG8gYG5ldC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZXNpZGUsIHNvIGl04oCZcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBhbmQgbW9kaWZ5aW5nIG5ldHdvcmstcmVsYXRlZCBzZXR0aW5ncy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gVGhpcyBpcyB3aGVyZSB0aGUgaW5pdGlhbCB3b3JrIGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTE1Olx0XHQgIGZhaWxvdmVyIG5ldGRldi4gVGhpcyBlbmFibGVzIHBhcmF2aXJ0dWFsIGRyaXZlcnMgdG8gdXNlIGFcbiA1MTY6XHRcdCAgVkYgYXMgYW4gYWNjZWxlcmF0ZWQgbG93IGxhdGVuY3kgZGF0YXBhdGguIEl0IGFsc28gYWxsb3dzIGxpdmVcbiA1MTc6XHRcdCAgbWlncmF0aW9uIG9mIFZNcyB3aXRoIGRpcmVjdCBhdHRhY2hlZCBWRnMgYnkgZmFpbGluZyBvdmVyIHRvIHRoZVxuIDUxODpcdFx0ICBwYXJhdmlydHVhbCBkYXRhcGF0aCB3aGVuIHRoZSBWRiBpcyB1bnBsdWdnZWQuXG4gNTE5Olx0XG4gNTIwOlx0Y29uZmlnIEVUSFRPT0xfTkVUTElOS1xuIDUyMTpcdFx0Ym9vbCBcJiMzNDtOZXRsaW5rIGludGVyZmFjZSBmb3IgZXRodG9vbFwmIzM0O1xuIDUyMjpcdFx0c2VsZWN0IERJTUxJQlxuIDUyMzpcdFx0ZGVmYXVsdCB5XG4gNTI0Olx0XHRoZWxwXG4gNTI1Olx0XHQgIEFuIGFsdGVybmF0aXZlIHVzZXJzcGFjZSBpbnRlcmZhY2UgZm9yIGV0aHRvb2wgYmFzZWQgb24gZ2VuZXJpY1xuIDUyNjpcdFx0ICBuZXRsaW5rLiBJdCBwcm92aWRlcyBiZXR0ZXIgZXh0ZW5zaWJpbGl0eSBhbmQgc29tZSBuZXcgZmVhdHVyZXMsXG4gNTI3Olx0XHQgIGUuZy4gbm90aWZpY2F0aW9uIG1lc3NhZ2VzLlxuIDUyODpcdFxuIDUyOTpcdGNvbmZpZyBORVRERVZfQUREUl9MSVNUX1RFU1RcbiA1MzA6XHRcdHRyaXN0YXRlIFwmIzM0O1VuaXQgdGVzdHMgZm9yIGRldmljZSBhZGRyZXNzIGxpc3RcJiMzNDtcbiA1MzE6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gNTMyOlx0XHRkZXBlbmRzIG9uIEtVTklUXG4gNTMzOlx0XG4gNTM0Olx0Y29uZmlnIE5FVF9URVNUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1ODAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoaXMgZmVhdHVyZSBpcyBvbiBieSBkZWZhdWx0IOKAkyBnb29kIHRvIGtub3cuIE5vdywgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9uIGNhbGxzLiBJIHNlZSB0aGVzZSBhcyBrZXk6IGBldGhubF9hY3RfcGh5X3Rlc3RgLCBgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YWAsIGBpbnRmX2NhcHNfZmlsbF9yZXBseWAsIGBwaHlfdGVzdF9wcmVwYXJlX2RhdGFgLCBhbmQgYHBoeV90ZXN0X2ZpbGxfcmVwbHlgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGJ1aWxkaW5nIGJsb2NrcyByZWxhdGVkIHRvIGVpdGhlciBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzIG9yIHRoZSBQSFkgdGVzdGluZyBpdHNlbGYuIE15IG5leHQgc3RlcCwgYW5kIGl0JiMzOTtzIGEgY3JpdGljYWwgb25lLCBpcyB0byBkZXRlcm1pbmUgd2hpY2ggZHJpdmVycyBhcmUgYWN0dWFsbHkgKnVzaW5nKiB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBsb2NhdGUgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgZ2V0X2ludGZfY2Fwc2AsIGBnZXRfcGh5X3Rlc3RgLCBhbmQgYHNldF9waHlfdGVzdGAuIFRoYXQgd2lsbCByZXZlYWwgdGhlIHNwZWNpZmljIGhhcmR3YXJlIHRoZXNlIGZlYXR1cmVzIGFyZSBpbXBhY3RpbmcgYW5kIGhvdyB0aGV5JiMzOTtyZSBiZWluZyB1c2VkIHdpdGhpbiB0aGF0IGNvbnRleHQuIEZyb20gdGhlcmUsIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBleGlzdGluZyBkcml2ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwuZ2V0X2ludGZfY2FwcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5MjUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgZ2V0X3BoeV90ZXN0YCBhbmQgYHNldF9waHlfdGVzdGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlc2UgdHdvIGZ1bmN0aW9ucywgYGdldF9waHlfdGVzdGAgYW5kIGBzZXRfcGh5X3Rlc3RgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkb3VibGUtY2hlY2sgdGhlaXIgaW1wbGVtZW50YXRpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJmYWNlIHdpdGggdGhlIFBIWSBsYXllciBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCBob3cgdGhleSBoYW5kbGUgdGVzdCBtb2RlIGNvbmZpZ3VyYXRpb24uIEFyZSB0aGV5IHJlYWRpbmcvd3JpdGluZyBkaXJlY3RseSB0byByZWdpc3RlcnMsIG9yIGFyZSB0aGV5IHVzaW5nIHNvbWUgYWJzdHJhY3Rpb24gbGF5ZXIgbGlrZSBhIGRyaXZlcj8gSWYgaXQmIzM5O3MgdGhlIGxhdHRlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRyaXZlciYjMzk7cyB1bmRlcmx5aW5nIG1lY2hhbmlzbXMuCgpXaGF0JiMzOTtzIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZT8gQXJlIHRoZXNlIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgc3BlY2lmaWMgUEhZIHRlc3QgbW9kZXMsIG9yIGFyZSB0aGV5IG1vcmUgZ2VuZXJhbCwgcHJvdmlkaW5nIGEgd3JhcHBlciBmb3IgZGlmZmVyZW50IHRlc3Qgc2NlbmFyaW9zPyBJIG5lZWQgdG8gbG9vayBhdCBhbnkgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyBhc3NvY2lhdGVkIHdpdGggdGhlbSB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIGludGVuZGVkIHB1cnBvc2UgYW5kIHNjb3BlLgoKRnVydGhlcm1vcmUsIEkgbmVlZCB0byBjb25zaWRlciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCBlc3BlY2lhbGx5IGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgYWNjZXNzZWQgY29uY3VycmVudGx5LCBvciBmcm9tIGRpZmZlcmVudCBjb250ZXh0cy4gSSB3YW50IHRvIGxvb2sgY2xvc2VseSBhdCB3aGF0IHRoZXNlIGZ1bmN0aW9ucyBkbywgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aHJlYWQgc2FmZXR5LCBhbmQgY29uY3VycmVuY3kuIEkgd2FudCB0byBzZWUgaWYgYW55IG11dGV4ZXMsIHNlbWFwaG9yZXMsIG9yIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFyZSBiZWluZyB1c2VkIHRvIHByb3RlY3Qgc2hhcmVkIHJlc291cmNlcy4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgZXJyb3IgaGFuZGxpbmcuIEhvdyByb2J1c3QgYXJlIHRoZXNlIGZ1bmN0aW9ucz8gRG8gdGhleSBoYW5kbGUgZGlmZmVyZW50IHR5cGVzIG9mIFBIWSBpbml0aWFsaXphdGlvbiBmYWlsdXJlcywgb3IgaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLCBvciBjb21tdW5pY2F0aW9uIGVycm9ycyBncmFjZWZ1bGx5PyBBcmUgdGhlcmUgcHJvcGVyIGVycm9yIGNvZGVzIG9yIGV4Y2VwdGlvbiBoYW5kbGluZz8gQW55IHVuaXQgdGVzdHMgZm9yIHRoZXNlIGZ1bmN0aW9ucz8gV2hhdCBhcmUgdGhleSB0ZXN0aW5nPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcLmdldF9waHlfdGVzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzExCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBFVEhUT09MIE5ldGxpbmsgUEhZIFRlc3QgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBFVEhUT09MIG5ldGxpbmsgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgUEhZIHRlc3QgZnVuY3Rpb25hbGl0eS4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNpbmNlIG5vIGN1cnJlbnQgZHJpdmVycyBpbXBsZW1lbnQgdGhlc2UgZmVhdHVyZXMgeWV0LCB0aGlzIGFyZWEgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBuZXRsaW5rIGNvcmUgaXRzZWxmIGlzIHJlYWNoYWJsZSwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuCgpUaGUgY29yZSBwYXJzZXMgdGhlIG5ldGxpbmsgbWVzc2FnZXMgYW5kIHRoZW4gY2FsbHMgZHJpdmVyIG9wZXJhdGlvbnMgaWYgdGhleSBleGlzdC4gSWYgdGhlIGRyaXZlciBkb2VzbiYjMzk7dCBzdXBwb3J0IHRoZSBvcGVyYXRpb24sIGl0IHJldHVybnMgYC1FT1BOT1RTVVBQYCwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIEhvd2V2ZXIsIGV2ZW4gaWYgdGhlIGRyaXZlciBvcHMgYXJlIG1pc3NpbmcsIHNvbWUgcGFyc2luZyBsb2dpYyBpbiBgZXRobmxfYWN0X3BoeV90ZXN0YCBhbmQgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YWAgbWlnaHQgYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBjaGVjay4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQuIExvb2tpbmcgZGVlcGVyLCBJIHNlZSB0aGF0IGBldGhubF9kZWZhdWx0X2RvaXRgIGNhbGxzIGBwcmVwYXJlX2RhdGFgIHdoaWNoIGNhbGxzIGBkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtnZXRfaW50Zl9jYXBzYC4gQW5kIGlmIHRoaXMgaXMgTlVMTCwgYC1FT1BOT1RTVVBQYCBpcyByZXR1cm5lZC4gU28gaXQgbWFrZXMgc2Vuc2UgdGhhdCBgaW50Zl9jYXBzX2ZpbGxfcmVwbHlgIHdvbiYjMzk7dCBiZSByZWFjaGVkLgoKQnV0IHdhaXQsIGBldGhubF9hY3RfcGh5X3Rlc3RgIGRvZXMgc29tZSBhdHRyaWJ1dGUgcGFyc2luZyAqYmVmb3JlKiB0aGUgY2hlY2sgZm9yIGBkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtzZXRfcGh5X3Rlc3RgLiBPa2F5LCBsZXQmIzM5O3MgZXhhbWluZSBgZXRobmxfYWN0X3BoeV90ZXN0YC4KCmBgYGMKCXJldCA9IGV0aG5sX3BhcnNlX2hlYWRlcl9kZXZfZ2V0KCZhbXA7cmVxX2luZm8sCgkJCQkJIHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9IRUFERVJdLAoJCQkJCSBnZW5sX2luZm9fbmV0KGluZm8pLCBpbmZvLSZndDtleHRhY2ssCgkJCQkJIHRydWUpOwoJaWYgKHJldCAmbHQ7IDApCgkJcmV0dXJuIHJldDsKCglkZXYgPSByZXFfaW5mby5kZXY7CgoJaWYgKCFkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtzZXRfcGh5X3Rlc3QpIHsKCQlyZXQgPSAtRU9QTk9UU1VQUDsKCQlnb3RvIG91dF9kZXY7Cgl9CmBgYAoKT2theSwgSSBzZWUuIGBldGhubF9hY3RfcGh5X3Rlc3RgIGNoZWNrcyBmb3IgYHNldF9waHlfdGVzdGAgKmltbWVkaWF0ZWx5KiBhZnRlciByZXRyaWV2aW5nIHRoZSBkZXZpY2UuCgpgYGBjCglpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSkgewoJCXRlc3QuYmxvY2tfaWQgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKTsKCQl0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfQkxPQ0tfSUQ7Cgl9CmBgYAoKQW5kIHRoaXMgYXR0cmlidXRlIHBhcnNpbmcgaXMgZG9uZSAqKmFmdGVyKiogdGhlIGNoZWNrOgoKYGBgYwoJaWYgKCFkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtzZXRfcGh5X3Rlc3QpIHsKCQlyZXQgPSAtRU9QTk9UU1VQUDsKCQlnb3RvIG91dF9kZXY7Cgl9CmBgYAoKU28gaXQgbG9va3MgbGlrZSBpZiBubyBkcml2ZXIgaW1wbGVtZW50cyBgc2V0X3BoeV90ZXN0YCwgdGhhdCBwYXJzaW5nIGxvZ2ljIGlzbiYjMzk7dCBldmVuIHJlYWNoZWQuIEhtbS4gSSBiZXR0ZXIgZG91YmxlLWNoZWNrIGBldGhubF9hY3RfcGh5X3Rlc3RgIHRvIGJlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgc29tZXRoaW5nIGNydWNpYWwuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGdldCByaWdodCBiZWZvcmUgSSBzdGFydCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL3BoeXRlc3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTA5Olx0XG4gMTEwOlx0aW50IGV0aG5sX2FjdF9waHlfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIDExMTpcdHtcbiAxMTI6XHRcdHN0cnVjdCBldGhubF9yZXFfaW5mbyByZXFfaW5mbyA9IHt9O1xuIDExMzpcdFx0c3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby1cdTAwM2VhdHRycztcbiAxMTQ6XHRcdHN0cnVjdCBldGh0b29sX3BoeV90ZXN0IHRlc3QgPSB7fTtcbiAxMTU6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gMTE2Olx0XHRpbnQgcmV0O1xuIDExNzpcdFxuIDExODpcdFx0cmV0ID0gZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoXHUwMDI2cmVxX2luZm8sXG4gMTE5Olx0XHRcdFx0XHRcdCB0YltFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXSxcbiAxMjA6XHRcdFx0XHRcdFx0IGdlbmxfaW5mb19uZXQoaW5mbyksIGluZm8tXHUwMDNlZXh0YWNrLFxuIDEyMTpcdFx0XHRcdFx0XHQgdHJ1ZSk7XG4gMTIyOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDEyMzpcdFx0XHRyZXR1cm4gcmV0O1xuIDEyNDpcdFxuIDEyNTpcdFx0ZGV2ID0gcmVxX2luZm8uZGV2O1xuIDEyNjpcdFxuIDEyNzpcdFx0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlc2V0X3BoeV90ZXN0KSB7XG4gMTI4Olx0XHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuIDEyOTpcdFx0XHRnb3RvIG91dF9kZXY7XG4gMTMwOlx0XHR9XG4gMTMxOlx0XG4gMTMyOlx0XHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSkge1xuIDEzMzpcdFx0XHR0ZXN0LmJsb2NrX2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSk7XG4gMTM0Olx0XHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CTE9DS19JRDtcbiAxMzU6XHRcdH1cbiAxMzY6XHRcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfTEFORV0pIHtcbiAxMzc6XHRcdFx0dGVzdC5sYW5lID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKTtcbiAxMzg6XHRcdFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0xBTkU7XG4gMTM5Olx0XHR9XG4gMTQwOlx0XHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dKSB7XG4gMTQxOlx0XHRcdHRlc3QudHhfcGF0dGVybiA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOXSk7XG4gMTQyOlx0XHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9UWF9QQVRURVJOO1xuIDE0MzpcdFx0fVxuIDE0NDpcdFx0aWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOXSkge1xuIDE0NTpcdFx0XHR0ZXN0LnJ4X3BhdHRlcm4gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl0pO1xuIDE0NjpcdFx0XHR0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfUlhfUEFUVEVSTjtcbiAxNDc6XHRcdH1cbiAxNDg6XHRcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkVSVF9BQ1RJT05dKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjY4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUG90ZW50aWFsOiBFdGh0b29sIE5ldGxpbmsgSW50ZXJmYWNlKioKCk9rYXksIHNvIHRoZSBwYXJzaW5nIGl0c2VsZiBoYXBwZW5zICphZnRlciogdGhlIGluaXRpYWwgY2hlY2tzLCB3aGljaCBpcyBnb29kLiBCdXQgd2FpdCwgdGhlIE5ldGxpbmsgcG9saWN5IHBhcnNpbmcsIGhhbmRsZWQgYnkgdGhlIGdlbmVyaWMgTmV0bGluayBjb3JlLCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gSSBrbm93IHRoZSBwb2xpY2llcyBhcmUgZGVmaW5lZCBpbiBgZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeWAsIGBldGhubF9waHlfdGVzdF9nZXRfcG9saWN5YCwgYW5kIGBldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeWAsIGFuZCBgZXRobmxfYWN0X3BoeV90ZXN0YCBnZXRzIHVzIHRoYXQgZmFyLgoKU28sIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgeWVzISBUaGVzZSBhcmUgbmV3IE5ldGxpbmsgbWVzc2FnZXMgYW5kIHBvbGljaWVzLCBwZXJmZWN0IGZvciBTeXprYWxsZXIuIEl0IGNhbiBwb2tlIGF0IHRoZSBtZXNzYWdlIGZvcm1hdHMuIEV2ZW4gaWYgdGhlcmUmIzM5O3Mgbm8gZHJpdmVyIGFjdHVhbGx5ICp1c2luZyogdGhpcyBmdW5jdGlvbmFsaXR5IHlldCwgdGhlIHBhcnNpbmcgYW5kIGluaXRpYWwgaGFuZGxlcnMgYXJlIGRlZmluaXRlbHkgdGhlcmUgYW5kIHJlYWNoYWJsZS4KCkhtbSwgb24gc2Vjb25kIHRob3VnaHQsIGlmIG5vIGRyaXZlciBpbXBsZW1lbnRzIHRoZXNlIGZ1bmN0aW9ucywgdGhlIGNvdmVyYWdlIGZyb20gZnV6emluZyB3aWxsIGJlIHZlcnkgbGltaXRlZC4gSXQgd291bGQgZXNzZW50aWFsbHkganVzdCBiZSB0ZXN0aW5nIHRoZSBwYXJzaW5nIGxvZ2ljIGl0c2VsZi4gQnV0LCBpdCBpcyBzdGlsbCBuZXcga2VybmVsIGNvZGUsIGFuZCBhbnkgY292ZXJhZ2UgaXMgdmFsdWFibGUuIExldCYjMzk7cyBub3Qgd3JpdGUgdGhpcyBvZmYgY29tcGxldGVseS4gSSBzaG91bGQgcXVpY2tseSBjaGVjayB0aGUgY3VycmVudCBrZXJuZWwgdHJlZSB0byBzZWUgaWYgYW55IGRyaXZlciB3YXMgYWRkZWQgdG8gaW1wbGVtZW50IHRoaXMgZmVhdHVyZS4gUGVyaGFwcyBhIHJlbGF0ZWQgY29tbWl0IGluIHRoZSBzYW1lIHNlcmllcyBzbnVjayBhIGRyaXZlciBpbi4gR290dGEgY2hlY2sgaXQgb3V0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfcGh5X3Rlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5jPTMyOTk9RVhQT1JUX1NZTUJPTChkcm1fZHBfZ2V0X3BoeV90ZXN0X3BhdHRlcm4pO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9oZWxwZXIuYy0zMzAxLS8qKlxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5jOjMzMDI6ICogZHJtX2RwX3NldF9waHlfdGVzdF9wYXR0ZXJuKCkgLSBzZXQgdGhlIHBhdHRlcm4gdG8gdGhlIHNpbmsuXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfaGVscGVyLmMtMzMwMy0gKiBAYXV4OiBEaXNwbGF5UG9ydCBBVVggY2hhbm5lbFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9oZWxwZXIuYy0zMzA4LSAqL1xuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5jOjMzMDk6aW50IGRybV9kcF9zZXRfcGh5X3Rlc3RfcGF0dGVybihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LFxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5jLTMzMTAtXHRcdFx0XHRzdHJ1Y3QgZHJtX2RwX3BoeV90ZXN0X3BhcmFtcyAqZGF0YSwgdTggZHBfcmV2KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9oZWxwZXIuYy0zMzM0LX1cbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9oZWxwZXIuYzozMzM1OkVYUE9SVF9TWU1CT0woZHJtX2RwX3NldF9waHlfdGVzdF9wYXR0ZXJuKTtcbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9oZWxwZXIuYy0zMzM2LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfdGVzdC5jPTMwNj1zdGF0aWMgdm9pZCBpbnRlbF9kcF9wcm9jZXNzX3BoeV9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF90ZXN0LmMtMzMwLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF90ZXN0LmM6MzMxOlx0ZHJtX2RwX3NldF9waHlfdGVzdF9wYXR0ZXJuKFx1MDAyNmludGVsX2RwLVx1MDAzZWF1eCwgZGF0YSxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfdGVzdC5jLTMzMi1cdFx0XHRcdCAgICBpbnRlbF9kcC1cdTAwM2VkcGNkW0RQX0RQQ0RfUkVWXSk7XG4tLVxuaW5jbHVkZS9kcm0vZGlzcGxheS9kcm1fZHBfaGVscGVyLmg9OTg5PWludCBkcm1fZHBfZ2V0X3BoeV90ZXN0X3BhdHRlcm4oc3RydWN0IGRybV9kcF9hdXggKmF1eCxcbmluY2x1ZGUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5oLTk5MC1cdFx0XHRcdHN0cnVjdCBkcm1fZHBfcGh5X3Rlc3RfcGFyYW1zICpkYXRhKTtcbmluY2x1ZGUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5oOjk5MTppbnQgZHJtX2RwX3NldF9waHlfdGVzdF9wYXR0ZXJuKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsXG5pbmNsdWRlL2RybS9kaXNwbGF5L2RybV9kcF9oZWxwZXIuaC05OTItXHRcdFx0XHRzdHJ1Y3QgZHJtX2RwX3BoeV90ZXN0X3BhcmFtcyAqZGF0YSwgdTggZHBfcmV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD0xMjg2PXN0cnVjdCBldGh0b29sX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTQ0Ni1cdFx0XHRcdHN0cnVjdCBldGh0b29sX3BoeV90ZXN0ICp0ZXN0KTtcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjE0NDc6XHRpbnRcdCgqc2V0X3BoeV90ZXN0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTQ0OC1cdFx0XHRcdHN0cnVjdCBldGh0b29sX3BoeV90ZXN0ICp0ZXN0KTtcbi0tXG5uZXQvZXRodG9vbC9waHl0ZXN0LmM9MTEwPWludCBldGhubF9hY3RfcGh5X3Rlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9waHl0ZXN0LmMtMTI2LVxubmV0L2V0aHRvb2wvcGh5dGVzdC5jOjEyNzpcdGlmICghZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZXNldF9waHlfdGVzdCkge1xubmV0L2V0aHRvb2wvcGh5dGVzdC5jLTEyOC1cdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2V0aHRvb2wvcGh5dGVzdC5jLTE2Mi1cbm5ldC9ldGh0b29sL3BoeXRlc3QuYzoxNjM6XHRyZXQgPSBkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlc2V0X3BoeV90ZXN0KGRldiwgXHUwMDI2dGVzdCk7XG5uZXQvZXRodG9vbC9waHl0ZXN0LmMtMTY0LVx0ZXRobmxfb3BzX2NvbXBsZXRlKGRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzQyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBNaXNzaW5nIEltcGxlbWVudGF0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBjb2RlIGFuZCwgYXMgSSBzdXNwZWN0ZWQsIG5vbmUgb2YgdGhlIGRyaXZlcnMgYXJlIGFjdHVhbGx5IGltcGxlbWVudGluZyBgc2V0X3BoeV90ZXN0YCwgYGdldF9waHlfdGVzdGAsIG9yIGBnZXRfaW50Zl9jYXBzYCBhdCB0aGlzIHBvaW50LiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgcmVkIGZsYWcsIGJ1dCBub3QgbmVjZXNzYXJpbHkgdW5leHBlY3RlZCBnaXZlbiB0aGUgc3RhZ2Ugb2YgZGV2ZWxvcG1lbnQuIFdlIG1pZ2h0IGJlIHJlbHlpbmcgb24gZGVmYXVsdCBvciBwbGFjZWhvbGRlciBiZWhhdmlvciBmb3Igbm93LiBJJiMzOTtkIGJldHRlciBjb25maXJtIHRoYXQgdGhlIGludGVyZmFjZSBjYXBhYmlsaXRpZXMgYXJlIGNvcnJlY3RseSBlc3RhYmxpc2hlZC4gTGV0IG1lIGp1bXAgaW4gYW5kIGhhdmUgYSBxdWljayBsb29rIGF0IGBnZXRfaW50Zl9jYXBzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X2ludGZfY2FwcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD0xMjg2PXN0cnVjdCBldGh0b29sX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTQ0Mi1cdHZvaWRcdCgqZ2V0X21tX3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqc3RhdHMpO1xuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6MTQ0MzpcdGludFx0KCpnZXRfaW50Zl9jYXBzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTQ0NC1cdFx0XHRcdCBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHMgKmNhcHMpO1xuLS1cbm5ldC9ldGh0b29sL2ludGZfY2Fwcy5jPTUyPXN0YXRpYyBpbnQgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuLS1cbm5ldC9ldGh0b29sL2ludGZfY2Fwcy5jLTU4LVxubmV0L2V0aHRvb2wvaW50Zl9jYXBzLmM6NTk6XHRpZiAoIWRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfaW50Zl9jYXBzKVxubmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMtNjAtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbm5ldC9ldGh0b29sL2ludGZfY2Fwcy5jLTYxLVxubmV0L2V0aHRvb2wvaW50Zl9jYXBzLmM6NjI6XHRyZXR1cm4gZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9pbnRmX2NhcHMoZGV2LCBcdTAwMjZkYXRhLVx1MDAzZWNhcHMpO1xubmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMtNjMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI4OQoJCQkJCQkJb3V0cHV0OiAxNTYKCQkJCQkJCXRob3VnaHRzOiAxMDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBQcm9wb3NlZCBFdGh0b29sIE5ldGxpbmsgQWRkaXRpb25zIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgdGhlIG5ldyBldGh0b29sIG5ldGxpbmsgYWRkaXRpb25zLiBUaGUgY29yZSBvZiBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gQnV0IHdhaXQsIHRoaXMgaW50cm9kdWNlcyBuZXcgbmV0bGluayBtZXNzYWdlIHR5cGVzIGFuZCBwb2xpY2llcywgd2hpY2ggKnN5emthbGxlciogd2lsbCBkZWZpbml0ZWx5IGdvIGFmdGVyLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLiBUaGUgcGFyc2luZyBvZiB0aGVzZSBuZXRsaW5rIG1lc3NhZ2VzIGlzIHJlYWNoYWJsZS4gSSBtZWFuLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgZXRobmxfYWN0X3BoeV90ZXN0YCBzcGVjaWZpY2FsbHkg4oCTIHRoZSBmdW5jdGlvbiBjYWxsIHRoYXQgcGFyc2VzIHRoZSBoZWFkZXIsIHJldHJpZXZlcyB0aGUgZGV2aWNlLCBhbmQgdGhlbiBkb2VzIGEgY2hlY2sgb2YgYHNldF9waHlfdGVzdGAgYW5kIHJlbGF0ZWQgbmV0bGluayBwb2xpY2llcy4gSSBhbSB0aGlua2luZyB0aGF0IGBldGhubF9wYXJzZV9oZWFkZXJfZGV2X2dldGAgaXMgcmVhY2hhYmxlIHdoaWNoIGdpdmVzIG1lIGNvbmZpZGVuY2UuCgpUaGUgcmVhY2hhYmxlIG5ldGxpbmsgcG9saWNpZXMgYXJlIGBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5YCwgYGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3lgLCBhbmQgYGV0aG5sX2ludGZfY2Fwc19nZXRfcG9saWN5YC4gVGhlc2Ugd2lsbCBiZSB1c2VkIGJ5IHRoZSBuZXRsaW5rIGNvcmUgdG8gdmFsaWRhdGUgYXR0cmlidXRlcy4gVGhpcyAqaXMqIG5ldyBuZXRsaW5rIEFQSSwgYW5kIHRoYXQmIzM5O3MgdXN1YWxseSBnb29kIGZvciBmdXp6aW5nLiBTbyB5ZWFoLCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1dvcnRoRnV6emluZyA9IHRydWUmIzM0Oy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9scy4gVGhlIG9idmlvdXMgb25lcyBhcmUgYGV0aG5sX2FjdF9waHlfdGVzdGAsIGBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhYCwgYW5kIGBwaHlfdGVzdF9wcmVwYXJlX2RhdGFgLiBCdXQgaG9sZCBvbiwgYGludGZfY2Fwc19wcmVwYXJlX2RhdGFgIGFuZCBgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhYCBhcmUgYWN0dWFsbHkgY2FsbGVkIGJ5IGBldGhubF9kZWZhdWx0X2RvaXRgLiBMZXQgbWUgZG91YmxlLWNoZWNrIGZvciBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuLi4gQWgsIG5vLCB0aGUgb3RoZXJzLCBsaWtlIGBpbnRmX2NhcHNfcmVwbHlfc2l6ZWAsIGBpbnRmX2NhcHNfZmlsbF9yZXBseWAsIGBwaHlfdGVzdF9yZXBseV9zaXplYCwgYW5kIGBwaHlfdGVzdF9maWxsX3JlcGx5YCwgd29uJiMzOTt0IGJlIHJlYWNoZWQgYmVjYXVzZSBgcHJlcGFyZV9kYXRhYCByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIFNvLCBiYWNrIHRvIGZvY3VzaW5nIG9uIGBldGhubF9hY3RfcGh5X3Rlc3RgLCBgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YWAsIGFuZCBgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhYC4KCkhhbmcgb24sIGBldGhubF9hY3RfcGh5X3Rlc3RgIGl0c2VsZiBtaWdodCBqdXN0IGJlIHJldHVybmluZyBgLUVPUE5PVFNVUFBgIGJ1dCB0aGlzIG5lZWRzIGZ1enppbmchIFRoZSBuZXRsaW5rIHBvbGljeSBwYXJzaW5nIGlzIGhhcHBlbmluZyAqYmVmb3JlKiB0aGUgYGRvaXRgIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhlIGtlcm5lbCBpcyBnb2luZyB0byBwYXJzZSB0aG9zZSBhdHRyaWJ1dGVzIGFjY29yZGluZyB0byB0aGUgbmV3IHBvbGljaWVzLCBhbmQgKnN5emthbGxlciogY2FuIGRlZmluaXRlbHkgZnV6eiB0aG9zZSBuZXRsaW5rIG1lc3NhZ2VzLiBPa2F5LCBkZWZpbml0ZWx5ICYjMzQ7V29ydGhGdXp6aW5nID0gdHJ1ZSYjMzQ7LgoKTGV0JiMzOTtzIGxpc3QgdGhlIGZvY3VzIHN5bWJvbHM6CmBldGhubF9hY3RfcGh5X3Rlc3RgCmBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhYApgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhYAoKQnV0IHdhaXQsIGBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhYCBhbmQgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YWAgYXJlICpzdGF0aWMqIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBPa2F5LCBgZXRobmxfYWN0X3BoeV90ZXN0YCBpcyB0aGUgb25lIHRvIGZvY3VzIG9uLiBJdCYjMzk7cyBub24tc3RhdGljLCBzbywgdGhhdCYjMzk7cyBwZXJmZWN0LiBUaGUgb3RoZXJzIGFyZSBzdGF0aWMsIGJ1dCB0aGV5JiMzOTtyZSBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gdGhlIGBldGhubF9pbnRmX2NhcHNfcmVxdWVzdF9vcHNgIGFuZCBgZXRobmxfcGh5X3Rlc3RfcmVxdWVzdF9vcHNgIHN0cnVjdHVyZXMuIFNvLCBJIGNhbiBqdXN0IHVzZSBgZXRobmxfYWN0X3BoeV90ZXN0YCBhcyB0aGUgZm9jdXMgc3ltYm9sLgoKTGV0IG1lIHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLi4uIG5vcGUsIGp1c3QgYGV0aG5sX2FjdF9waHlfdGVzdGAuCgpSZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgYEVUSFRPT0xfTkVUTElOS2AgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgSSYjMzk7bGwgYWRkIGl0IHRvIGJlIHNhZmUuIEl0JiMzOTtzIGEgYm9vbCwgc28gbm8gaGFybSBpbiBiZWluZyBleHBsaWNpdC4KCkkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGBldGhubF9hY3RfcGh5X3Rlc3RgIGlzIGluZGVlZCBub24tc3RhdGljLCBqdXN0IHRvIGJlIHN1cmUuLi4gWWVzLCBpdCYjMzk7cyBkZWZpbmVkIGluIGBuZXQvZXRodG9vbC9waHl0ZXN0LmNgIGFuZCBkZWNsYXJlZCBpbiBgbmV0L2V0aHRvb2wvbmV0bGluay5oYC4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zPyBOby4KCkFscmlnaHQsIGxldCYjMzk7cyByZXZpZXcgdGhlIGluc3RydWN0aW9ucyB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbiYjMzk7dCBqdXN0IGEgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50IGNoYW5nZSBvciBzb21ldGhpbmcgdGhhdCYjMzk7cyB1bnJlYWNoYWJsZS4gTm8sIHRoaXMgYWRkcyBuZXcgbmV0bGluayBtZXNzYWdlcyB0byB0aGUgKmNvcmUqIGV0aHRvb2wgbmV0bGluayBpbnRlcmZhY2UuIEl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBTbzogYFdvcnRoRnV6emluZyA9IHRydWVgLgoKKipGb2N1cyBzeW1ib2w6KioKYGV0aG5sX2FjdF9waHlfdGVzdGAKCioqQ29uZmlnczoqKgpgRVRIVE9PTF9ORVRMSU5LYAoKKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGV0aHRvb2wgbmV0bGluayBtZXNzYWdlcyAoYEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRgLCBgRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VUYCwgYEVUSFRPT0xfTVNHX1BIWV9URVNUX0FDVGApIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZSBwb2xpY2llcwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFVEhUT09MX05FVExJTksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtldGhubF9hY3RfcGh5X3Rlc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBuZXcgZXRodG9vbCBuZXRsaW5rIG1lc3NhZ2VzIChFVEhUT09MX01TR19JTlRGX0NBUFNfR0VULCBFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsIEVUSFRPT0xfTVNHX1BIWV9URVNUX0FDVCkgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgbmV0bGluayBhdHRyaWJ1dGUgcG9saWNpZXMuIEV2ZW4gdGhvdWdoIG5vIGRyaXZlcnMgY3VycmVudGx5IGltcGxlbWVudCB0aGUgdW5kZXJseWluZyBldGh0b29sIG9wZXJhdGlvbnMsIHRoZSBuZXRsaW5rIG1lc3NhZ2UgcGFyc2luZywgcG9saWN5IHZhbGlkYXRpb24sIGFuZCBpbml0aWFsIGhhbmRsZXIgZnVuY3Rpb25zIChsaWtlIGV0aG5sX2FjdF9waHlfdGVzdCkgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXItc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VUSFRPT0xfTkVUTElOSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V0aG5sX2FjdF9waHlfdGVzdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldyBldGh0b29sIG5ldGxpbmsgbWVzc2FnZXMgKEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVQsIEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVCwgRVRIVE9PTF9NU0dfUEhZX1RFU1RfQUNUKSBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBuZXRsaW5rIGF0dHJpYnV0ZSBwb2xpY2llcy4gRXZlbiB0aG91Z2ggbm8gZHJpdmVycyBjdXJyZW50bHkgaW1wbGVtZW50IHRoZSB1bmRlcmx5aW5nIGV0aHRvb2wgb3BlcmF0aW9ucywgdGhlIG5ldGxpbmsgbWVzc2FnZSBwYXJzaW5nLCBwb2xpY3kgdmFsaWRhdGlvbiwgYW5kIGluaXRpYWwgaGFuZGxlciBmdW5jdGlvbnMgKGxpa2UgZXRobmxfYWN0X3BoeV90ZXN0KSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlci1zcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBldGh0b29sIG5ldGxpbmsgY29tbWFuZHMgKGBJTlRGX0NBUFNfR0VUYCwgYFBIWV9URVNUX0dFVGAsIGBQSFlfVEVTVF9BQ1RgKSB0byBxdWVyeSBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzIGFuZCBjb25maWd1cmUgUEhZIHRlc3RzLiBUaGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZSBldGh0b29sIGNvcmUgYW5kIHRoZSBkcml2ZXJzIChgc3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzYCBhbmQgYHN0cnVjdCBldGh0b29sX3BoeV90ZXN0YCkgYXJlIGFsbG9jYXRlZCBkeW5hbWljYWxseS5cblxuSG93ZXZlciwgdGhlIGV0aHRvb2wgbmV0bGluayBmcmFtZXdvcmsgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVzIHRoZSByZXBseSBkYXRhIHN0cnVjdHVyZXMgdmlhIGBldGhubF9pbml0X3JlcGx5X2RhdGEoKWAgKHdoaWNoIGNhbGxzIGBtZW1zZXQocmVwbHlfZGF0YSwgMCwgb3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSlgKSBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZSBkcml2ZXIgY2FsbGJhY2tzIChlLmcuLCBgZ2V0X2ludGZfY2Fwc2ApLiBTaW1pbGFybHksIGBwaHlfdGVzdF9wcmVwYXJlX2RhdGEoKWAgZXhwbGljaXRseSBjYWxscyBgbWVtc2V0KFx1MDAyNmRhdGEtXHUwMDNldGVzdCwgMCwgc2l6ZW9mKGRhdGEtXHUwMDNldGVzdCkpYCwgYW5kIGBldGhubF9hY3RfcGh5X3Rlc3QoKWAgaW5pdGlhbGl6ZXMgaXRzIGxvY2FsIHN0cnVjdCB3aXRoIGA9IHt9YC5cblxuQmVjYXVzZSBhbGwgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCBiZWZvcmUgdXNlLCB0aGVyZSBpcyBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgb3IgaGVhcCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgZXZlbiBpZiBhIGRyaXZlciBmYWlscyB0byBwb3B1bGF0ZSBhbGwgZmllbGRzLiBGdXJ0aGVybW9yZSwgdGhlIG5ldGxpbmsgcmVzcG9uc2UgaXMgY29uc3RydWN0ZWQgYnkgc2VyaWFsaXppbmcgaW5kaXZpZHVhbCBmaWVsZHMgdXNpbmcgYG5sYV9wdXRfdTMyYCwgYG5sYV9wdXRfc3RyaW5nYCwgZXRjLiwgcmF0aGVyIHRoYW4gY29weWluZyByYXcgc3RydWN0cywgd2hpY2ggaW5oZXJlbnRseSBhdm9pZHMgbGVha2luZyBzdHJ1Y3QgcGFkZGluZy5cblxuQW55IHBvdGVudGlhbCBpc3N1ZXMsIHN1Y2ggYXMgYSBkcml2ZXIgd3JpdGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGBibG9ja3NgIGFycmF5IG9yIHJldHVybmluZyBhbiBpbnZhbGlkIGBudW1fYmxvY2tzYCBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMsIHdvdWxkIGJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNTA2ZGQxMDg2MzhlNWQ3N2QyM2YzMGVmZGYyY2Y3ZmE4NmRlZTljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDU6MDY6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbAppbmRleCA1ZGQ0ZDFiNWQ5NGJiLi4zNjFlYjNjNjY1NzcwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwKQEAgLTIxMCw2ICYjNDM7MjEwLDU1IEBAIGRlZmluaXRpb25zOgogICAgICAgLQogICAgICAgICBuYW1lOiBkaXNjYXJkCiAgICAgICAgIHZhbHVlOiAzMQomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBpbnRmLWNvbXBvbmVudAomIzQzOyAgICB0eXBlOiBlbnVtCiYjNDM7ICAgIGRvYzogVHlwZSBvZiBoYXJkd2FyZSBjb21wb25lbnQgaW4gdGhlIGludGVyZmFjZS4KJiM0MzsgICAgZW50cmllczoKJiM0MzsgICAgICAtIG1hYwomIzQzOyAgICAgIC0gcGh5CiYjNDM7ICAgICAgLSBtb2R1bGUKJiM0MzsgIC0KJiM0MzsgICAgbmFtZTogaW50Zi1zdWJsYXllcgomIzQzOyAgICB0eXBlOiBlbnVtCiYjNDM7ICAgIGRvYzogODAyLjMgc3VibGF5ZXIgd2l0aGluIGEgY29tcG9uZW50LgomIzQzOyAgICBlbnRyaWVzOgomIzQzOyAgICAgIC0gbm9uZQomIzQzOyAgICAgIC0gcnMKJiM0MzsgICAgICAtIHBjcwomIzQzOyAgICAgIC0gZmVjCiYjNDM7ICAgICAgLSBwbWEKJiM0MzsgICAgICAtIHBtZAomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBwaHktdGVzdC1wYXR0ZXJuCiYjNDM7ICAgIHR5cGU6IGVudW0KJiM0MzsgICAgZG9jOiBQSFkgdGVzdCBwYXR0ZXJuIHR5cGVzIGZvciBQUkJTIGdlbmVyYXRpb24vY2hlY2tpbmcuCiYjNDM7ICAgIGVudHJpZXM6CiYjNDM7ICAgICAgLSBvZmYKJiM0MzsgICAgICAtIHByYnM3CiYjNDM7ICAgICAgLSBwcmJzOQomIzQzOyAgICAgIC0gcHJiczExCiYjNDM7ICAgICAgLSBwcmJzMTMKJiM0MzsgICAgICAtIHByYnMxNQomIzQzOyAgICAgIC0gcHJiczIzCiYjNDM7ICAgICAgLSBwcmJzMzEKJiM0MzsgICAgICAtIHNzcHJxCiYjNDM7ICAgICAgLSBwcmJzMTNxCiYjNDM7ICAgICAgLSBwcmJzMzFxCiYjNDM7ICAgICAgLSBzcXVhcmUtbnJ6CiYjNDM7ICAgICAgLSBzcXVhcmUtcGFtNAomIzQzOyAgICAgIC0gdHgtbGluZWFyaXR5CiYjNDM7ICAgICAgLSBzY3JhbWJsZWQtaWRsZQomIzQzOyAgICAgIC0gazI4LTUKJiM0MzsgICAgICAtIGsyOC03CiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IHBoeS10ZXN0LWFjdGlvbgomIzQzOyAgICB0eXBlOiBlbnVtCiYjNDM7ICAgIGRvYzogQkVSVCBjb250cm9sIGFjdGlvbnMuCiYjNDM7ICAgIGVudHJpZXM6CiYjNDM7ICAgICAgLSBub25lCiYjNDM7ICAgICAgLSBzdGFydAomIzQzOyAgICAgIC0gc3RvcAogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTkwNSw2ICYjNDM7MTk1NCwxMTUgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIG5hbWU6IGxpbmsKICAgICAgICAgdHlwZTogbmVzdAogICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogbXNlLXNuYXBzaG90CiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IGludGYtYmxvY2sKJiM0MzsgICAgZG9jOiBBIHNpbmdsZSBmdW5jdGlvbmFsIGJsb2NrIGluIHRoZSBpbnRlcmZhY2UuCiYjNDM7ICAgIGF0dHJpYnV0ZXM6CiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogaWQKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGNvbXBvbmVudAomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBlbnVtOiBpbnRmLWNvbXBvbmVudAomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHN1YmxheWVyCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIGVudW06IGludGYtc3VibGF5ZXIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBpbnN0YW5jZQomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBkb2M6IHwKJiM0MzsgICAgICAgICAgSWRlbnRpZmllcyB0aGUgaGFyZHdhcmUgZW50aXR5IHdoZW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mCiYjNDM7ICAgICAgICAgIHRoZSBzYW1lIGNvbXBvbmVudCBleGlzdCBpbiB0aGUgaW50ZXJmYWNlLiBUaGUgZHJpdmVyCiYjNDM7ICAgICAgICAgIGFzc2lnbnMgaW5zdGFuY2UgbnVtYmVycyBzZXF1ZW50aWFsbHkgYmFzZWQgb24gcG9zaXRpb24gaW4KJiM0MzsgICAgICAgICAgdGhlIHBoeXNpY2FsIHBhdGguIERlZmF1bHRzIHRvIDAgd2hlbiBvbmx5IG9uZSBpbnN0YW5jZSBvZgomIzQzOyAgICAgICAgICBhIGdpdmVuIGNvbXBvbmVudCBleGlzdHMuCiYjNDM7ICAgICAgICAgIEZvciBQSFk6IGluc3RhbmNlIDAgaXMgdGhlIGludGVybmFsL2hvc3Qtc2lkZSBQSFksCiYjNDM7ICAgICAgICAgIGluc3RhbmNlIDEgaXMgYW4gZXh0ZXJuYWwgUEhZIGZ1cnRoZXIgYWxvbmcgdGhlIHBhdGgKJiM0MzsgICAgICAgICAgdG93YXJkIHRoZSBsaW5lIHNpZGUuCiYjNDM7ICAgICAgICAgIEZvciBNQUM6IGluc3RhbmNlIDAgaXMgdGhlIGhvc3QtZmFjaW5nIE1BQywgaW5zdGFuY2UgMSBpcwomIzQzOyAgICAgICAgICBhIHNlY29uZGFyeSBNQUMgZnVydGhlciBhbG9uZyB0aGUgZGF0YSBwYXRoIChlLmcuLCBiZWhpbmQKJiM0MzsgICAgICAgICAgYW4gZW1iZWRkZWQgc3dpdGNoKS4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBuYW1lCiYjNDM7ICAgICAgICB0eXBlOiBzdHJpbmcKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBkZXB0aAomIzQzOyAgICAgICAgdHlwZTogdTgKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBsYW5lcwomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogbG9vcGJhY2stc3VwcG9ydGVkCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBzdXBwb3J0ZWQtdHgtcGF0dGVybnMKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHN1cHBvcnRlZC1yeC1wYXR0ZXJucwomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZXJyb3ItaW5qZWN0LXN1cHBvcnRlZAomIzQzOyAgICAgICAgdHlwZTogZmxhZwomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGJlcnQtc3VwcG9ydGVkCiYjNDM7ICAgICAgICB0eXBlOiBmbGFnCiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IGludGYtY2FwcwomIzQzOyAgICBkb2M6IEludGVyZmFjZSBjYXBhYmlsaXRpZXMgbWVzc2FnZS4KJiM0MzsgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBoZWFkZXIKJiM0MzsgICAgICAgIHR5cGU6IG5lc3QKJiM0MzsgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBoZWFkZXIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBibG9ja3MKJiM0MzsgICAgICAgIHR5cGU6IG5lc3QKJiM0MzsgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBpbnRmLWJsb2NrCiYjNDM7ICAgICAgICBtdWx0aS1hdHRyOiB0cnVlCiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IHBoeS10ZXN0CiYjNDM7ICAgIGRvYzogUEhZIHRlc3QgY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzLgomIzQzOyAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGhlYWRlcgomIzQzOyAgICAgICAgdHlwZTogbmVzdAomIzQzOyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGhlYWRlcgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGJsb2NrLWlkCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBsYW5lCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiB0eC1wYXR0ZXJuCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIGVudW06IHBoeS10ZXN0LXBhdHRlcm4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiByeC1wYXR0ZXJuCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIGVudW06IHBoeS10ZXN0LXBhdHRlcm4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBiZXJ0LWFjdGlvbgomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBlbnVtOiBwaHktdGVzdC1hY3Rpb24KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBpbmplY3QtZXJyb3ItY291bnQKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGFjdGl2ZS10ZXN0cwomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBkb2M6IEJpdG1hc2sgb2YgY3VycmVudGx5IHJ1bm5pbmcgdGVzdHMgKGJpdCAwID0gQkVSVCkuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogY2hlY2tlci1sb2NrCiYjNDM7ICAgICAgICB0eXBlOiB1OAomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGVycm9yLWNvdW50CiYjNDM7ICAgICAgICB0eXBlOiB1NjQKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiB0b3RhbC1iaXRzLXNlbnQKJiM0MzsgICAgICAgIHR5cGU6IHU2NAogCiBvcGVyYXRpb25zOgogICBlbnVtLW1vZGVsOiBkaXJlY3Rpb25hbApAQCAtMjg1OSw2ICYjNDM7MzAxNyw1NCBAQCBvcGVyYXRpb25zOgogICAgICAgICAgICAgLSB3b3JzdC1jaGFubmVsCiAgICAgICAgICAgICAtIGxpbmsKICAgICAgIGR1bXA6ICptc2UtZ2V0LW9wCiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBpbnRmLWNhcHMtZ2V0CiYjNDM7ICAgICAgZG9jOiBHZXQgaW50ZXJmYWNlIGNhcGFiaWxpdGllcyAoZnVuY3Rpb25hbCBibG9jayBsYXlvdXQpLgomIzQzOyAgICAgIGF0dHJpYnV0ZS1zZXQ6IGludGYtY2FwcwomIzQzOyAgICAgIGRvOiAmYW1wO2ludGYtY2Fwcy1nZXQtb3AKJiM0MzsgICAgICAgIHJlcXVlc3Q6CiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6CiYjNDM7ICAgICAgICAgICAgLSBoZWFkZXIKJiM0MzsgICAgICAgIHJlcGx5OgomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAgIC0gaGVhZGVyCiYjNDM7ICAgICAgICAgICAgLSBibG9ja3MKJiM0MzsgICAgICBkdW1wOiAqaW50Zi1jYXBzLWdldC1vcAomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogcGh5LXRlc3QtZ2V0CiYjNDM7ICAgICAgZG9jOiBHZXQgUEhZIHRlc3Qgc3RhdHVzIChwYXR0ZXJucywgQkVSVCBjb3VudGVycykuCiYjNDM7ICAgICAgYXR0cmlidXRlLXNldDogcGh5LXRlc3QKJiM0MzsgICAgICBkbzoKJiM0MzsgICAgICAgIHJlcXVlc3Q6CiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6CiYjNDM7ICAgICAgICAgICAgLSBoZWFkZXIKJiM0MzsgICAgICAgICAgICAtIGJsb2NrLWlkCiYjNDM7ICAgICAgICAgICAgLSBsYW5lCiYjNDM7ICAgICAgICByZXBseToKJiM0MzsgICAgICAgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAgICAgICAtIGhlYWRlcgomIzQzOyAgICAgICAgICAgIC0gYmxvY2staWQKJiM0MzsgICAgICAgICAgICAtIGxhbmUKJiM0MzsgICAgICAgICAgICAtIHR4LXBhdHRlcm4KJiM0MzsgICAgICAgICAgICAtIHJ4LXBhdHRlcm4KJiM0MzsgICAgICAgICAgICAtIGFjdGl2ZS10ZXN0cwomIzQzOyAgICAgICAgICAgIC0gY2hlY2tlci1sb2NrCiYjNDM7ICAgICAgICAgICAgLSBlcnJvci1jb3VudAomIzQzOyAgICAgICAgICAgIC0gdG90YWwtYml0cy1zZW50CiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBwaHktdGVzdC1hY3QKJiM0MzsgICAgICBkb2M6IENvbmZpZ3VyZSBQSFkgdGVzdCAoc2V0IHBhdHRlcm5zLCBzdGFydC9zdG9wIEJFUlQsIGluamVjdCBlcnJvcnMpLgomIzQzOyAgICAgIGF0dHJpYnV0ZS1zZXQ6IHBoeS10ZXN0CiYjNDM7ICAgICAgZG86CiYjNDM7ICAgICAgICByZXF1ZXN0OgomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAgIC0gaGVhZGVyCiYjNDM7ICAgICAgICAgICAgLSBibG9jay1pZAomIzQzOyAgICAgICAgICAgIC0gbGFuZQomIzQzOyAgICAgICAgICAgIC0gdHgtcGF0dGVybgomIzQzOyAgICAgICAgICAgIC0gcngtcGF0dGVybgomIzQzOyAgICAgICAgICAgIC0gYmVydC1hY3Rpb24KJiM0MzsgICAgICAgICAgICAtIGluamVjdC1lcnJvci1jb3VudAogCiBtY2FzdC1ncm91cHM6CiAgIGxpc3Q6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCmluZGV4IDEyNjgzYjVkMTI1ZTQuLmY5NzQ4ZTczOWYwM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCkBAIC0xMTk3LDYgJiM0MzsxMTk3LDkyIEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvIHsKICAqIFNlZSAmYW1wO3N0cnVjdCBuZXRfZGV2aWNlIGFuZCAmYW1wO3N0cnVjdCBuZXRfZGV2aWNlX29wcyBmb3IgZG9jdW1lbnRhdGlvbgogICogb2YgdGhlIGdlbmVyaWMgbmV0ZGV2IGZlYXR1cmVzIGludGVyZmFjZS4KICAqLwomIzQzOwomIzQzOyNkZWZpbmUgSU5URl9DQVBTX01BWF9CTE9DS1MJMTYKJiM0MzsjZGVmaW5lIElOVEZfQkxPQ0tfTkFNRV9MRU4JMzIKJiM0MzsKJiM0MzsjZGVmaW5lIExPT1BCQUNLX1NVUFBPUlRfTE9DQUwJQklUKDApCiYjNDM7I2RlZmluZSBMT09QQkFDS19TVVBQT1JUX1JFTU9URQlCSVQoMSkKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrIC0gU2luZ2xlIGZ1bmN0aW9uYWwgYmxvY2sgaW4gdGhlIGludGVyZmFjZQomIzQzOyAqIEBpZDogVW5pcXVlIGJsb2NrIGlkZW50aWZpZXIKJiM0MzsgKiBAY29tcG9uZW50OiBIYXJkd2FyZSBjb21wb25lbnQgKE1BQywgUEhZLCBNT0RVTEUpCiYjNDM7ICogQHN1YmxheWVyOiA4MDIuMyBzdWJsYXllciAoUlMsIFBDUywgRkVDLCBQTUEsIFBNRCwgb3IgTk9ORSkKJiM0MzsgKiBAaW5zdGFuY2U6IEluZGV4IHdoZW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHNhbWUgY29tcG9uZW50IGV4aXN0CiYjNDM7ICogQG5hbWU6IERyaXZlci1jaG9zZW4gbGFiZWwKJiM0MzsgKiBAZGVwdGg6IE9yZGVyaW5nIHdpdGhpbiBzYW1lIChjb21wb25lbnQsIHN1YmxheWVyKSB0dXBsZQomIzQzOyAqIEBsYW5lczogTnVtYmVyIG9mIGxhbmVzCiYjNDM7ICogQGxvb3BiYWNrX3N1cHBvcnRlZDogQml0bWFzayBvZiBzdXBwb3J0ZWQgbG9vcGJhY2sgZGlyZWN0aW9ucwomIzQzOyAqIEBzdXBwb3J0ZWRfdHhfcGF0dGVybnM6IEJpdG1hc2sgb2YgcGF0dGVybnMgdGhpcyBibG9jayBjYW4gZ2VuZXJhdGUKJiM0MzsgKiBAc3VwcG9ydGVkX3J4X3BhdHRlcm5zOiBCaXRtYXNrIG9mIHBhdHRlcm5zIHRoaXMgYmxvY2sgY2FuIGNoZWNrCiYjNDM7ICogQGVycm9yX2luamVjdF9zdXBwb3J0ZWQ6IEJsb2NrIHN1cHBvcnRzIGJpdCBlcnJvciBpbmplY3Rpb24KJiM0MzsgKiBAYmVydF9zdXBwb3J0ZWQ6IEJsb2NrIHN1cHBvcnRzIEJFUlQgY291bnRlcnMKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrIHsKJiM0MzsJdTMyIGlkOwomIzQzOwllbnVtIGludGZfY29tcG9uZW50IGNvbXBvbmVudDsKJiM0MzsJZW51bSBpbnRmX3N1YmxheWVyIHN1YmxheWVyOwomIzQzOwl1MzIgaW5zdGFuY2U7CiYjNDM7CWNoYXIgbmFtZVtJTlRGX0JMT0NLX05BTUVfTEVOXTsKJiM0MzsJdTggZGVwdGg7CiYjNDM7CXUzMiBsYW5lczsKJiM0MzsJdTMyIGxvb3BiYWNrX3N1cHBvcnRlZDsKJiM0MzsJdTMyIHN1cHBvcnRlZF90eF9wYXR0ZXJuczsKJiM0MzsJdTMyIHN1cHBvcnRlZF9yeF9wYXR0ZXJuczsKJiM0MzsJYm9vbCBlcnJvcl9pbmplY3Rfc3VwcG9ydGVkOwomIzQzOwlib29sIGJlcnRfc3VwcG9ydGVkOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzIC0gSW50ZXJmYWNlIGNhcGFiaWxpdGllcyAoYWxsIGJsb2NrcykKJiM0MzsgKiBAbnVtX2Jsb2NrczogTnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4gYmxvY2tzW10KJiM0MzsgKiBAYmxvY2tzOiBBcnJheSBvZiBmdW5jdGlvbmFsIGJsb2NrcwomIzQzOyAqLwomIzQzO3N0cnVjdCBldGh0b29sX2ludGZfY2FwcyB7CiYjNDM7CXUzMiBudW1fYmxvY2tzOwomIzQzOwlzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrIGJsb2Nrc1tJTlRGX0NBUFNfTUFYX0JMT0NLU107CiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBCaXRtYXNrIG9mIHdoaWNoIGV0aHRvb2xfcGh5X3Rlc3QgZmllbGRzIHdlcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgKi8KJiM0MzsjZGVmaW5lIFBIWV9URVNUX0NNRF9UWF9QQVRURVJOCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFBIWV9URVNUX0NNRF9SWF9QQVRURVJOCQlCSVQoMSkKJiM0MzsjZGVmaW5lIFBIWV9URVNUX0NNRF9CRVJUX0FDVElPTgkJQklUKDIpCiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfSU5KRUNUX0NPVU5UCQlCSVQoMykKJiM0MzsjZGVmaW5lIFBIWV9URVNUX0NNRF9MQU5FCQkJQklUKDQpCiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfQkxPQ0tfSUQJCQlCSVQoNSkKJiM0MzsKJiM0MzsvKiBCaXRtYXNrIG9mIGN1cnJlbnRseSBhY3RpdmUgdGVzdHMgKHJlYWQtb25seSkgKi8KJiM0MzsjZGVmaW5lIFBIWV9URVNUX0FDVElWRV9CRVJUCQlCSVQoMCkKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCAtIFBIWSB0ZXN0IGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1cwomIzQzOyAqIEBjbWQ6IEJpdG1hc2sgb2Ygd2hpY2ggZmllbGRzIGFyZSB2YWxpZCAoUEhZX1RFU1RfQ01EXyopCiYjNDM7ICogQGJsb2NrX2lkOiBCbG9jayB0byBvcGVyYXRlIG9uIChmcm9tIGludGYtY2Fwcy1nZXQpCiYjNDM7ICogQGxhbmU6IExhbmUgbnVtYmVyICgwLWJhc2VkKQomIzQzOyAqIEB0eF9wYXR0ZXJuOiBUWCBwYXR0ZXJuIGdlbmVyYXRvciBzZXR0aW5nCiYjNDM7ICogQHJ4X3BhdHRlcm46IFJYIHBhdHRlcm4gY2hlY2tlciBzZXR0aW5nCiYjNDM7ICogQGJlcnRfYWN0aW9uOiBCRVJUIHN0YXJ0L3N0b3AgY29udHJvbAomIzQzOyAqIEBpbmplY3RfZXJyb3JfY291bnQ6IE51bWJlciBvZiBlcnJvcnMgdG8gaW5qZWN0CiYjNDM7ICogQGFjdGl2ZV90ZXN0czogQml0bWFzayBvZiBydW5uaW5nIHRlc3RzIChQSFlfVEVTVF9BQ1RJVkVfKikKJiM0MzsgKiBAY2hlY2tlcl9sb2NrOiBSWCBjaGVja2VyIGxvY2sgc3RhdHVzIChyZWFkLW9ubHkpCiYjNDM7ICogQGVycm9yX2NvdW50OiBCRVJUIGVycm9yIGNvdW50ZXIgKHJlYWQtb25seSkKJiM0MzsgKiBAdG90YWxfYml0c19zZW50OiBCRVJUIHRvdGFsIGJpdHMgY291bnRlciAocmVhZC1vbmx5KQomIzQzOyAqLwomIzQzO3N0cnVjdCBldGh0b29sX3BoeV90ZXN0IHsKJiM0MzsJdTMyIGNtZDsKJiM0MzsJdTMyIGJsb2NrX2lkOwomIzQzOwl1MzIgbGFuZTsKJiM0MzsJZW51bSBwaHlfdGVzdF9wYXR0ZXJuIHR4X3BhdHRlcm47CiYjNDM7CWVudW0gcGh5X3Rlc3RfcGF0dGVybiByeF9wYXR0ZXJuOwomIzQzOwllbnVtIHBoeV90ZXN0X2FjdGlvbiBiZXJ0X2FjdGlvbjsKJiM0MzsJdTMyIGluamVjdF9lcnJvcl9jb3VudDsKJiM0MzsJdTMyIGFjdGl2ZV90ZXN0czsKJiM0MzsJdTggY2hlY2tlcl9sb2NrOwomIzQzOwl1NjQgZXJyb3JfY291bnQ7CiYjNDM7CXU2NCB0b3RhbF9iaXRzX3NlbnQ7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBldGh0b29sX29wcyB7CiAJdTMyICAgICBzdXBwb3J0ZWRfaW5wdXRfeGZybTo4OwogCXUzMiAgICAgY2FwX2xpbmtfbGFuZXNfc3VwcG9ydGVkOjE7CkBAIC0xMzU0LDYgJiM0MzsxNDQwLDEyIEBAIHN0cnVjdCBldGh0b29sX29wcyB7CiAJaW50CSgqc2V0X21tKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9jZmcgKmNmZywKIAkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIAl2b2lkCSgqZ2V0X21tX3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqc3RhdHMpOwomIzQzOwlpbnQJKCpnZXRfaW50Zl9jYXBzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgc3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzICpjYXBzKTsKJiM0MzsJaW50CSgqZ2V0X3BoeV90ZXN0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQlzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCAqdGVzdCk7CiYjNDM7CWludAkoKnNldF9waHlfdGVzdCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnRlc3QpOwogfTsKIAogaW50IGV0aHRvb2xfY2hlY2tfb3BzKGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oCmluZGV4IDgxMzRiYWY3ODYwZjMuLjMxMDJiYjdiYTMzN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaApAQCAtODkzLDYgJiM0Mzs4OTMsOSBAQCBlbnVtIHsKIAlFVEhUT09MX01TR19SU1NfQ1JFQVRFX0FDVCwKIAlFVEhUT09MX01TR19SU1NfREVMRVRFX0FDVCwKIAlFVEhUT09MX01TR19NU0VfR0VULAomIzQzOwlFVEhUT09MX01TR19JTlRGX0NBUFNfR0VULAomIzQzOwlFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsCiYjNDM7CUVUSFRPT0xfTVNHX1BIWV9URVNUX0FDVCwKIAogCV9fRVRIVE9PTF9NU0dfVVNFUl9DTlQsCiAJRVRIVE9PTF9NU0dfVVNFUl9NQVggPSAoX19FVEhUT09MX01TR19VU0VSX0NOVCAtIDEpCkBAIC05NTQsNiAmIzQzOzk1Nyw4IEBAIGVudW0gewogCUVUSFRPT0xfTVNHX1JTU19DUkVBVEVfTlRGLAogCUVUSFRPT0xfTVNHX1JTU19ERUxFVEVfTlRGLAogCUVUSFRPT0xfTVNHX01TRV9HRVRfUkVQTFksCiYjNDM7CUVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRfUkVQTFksCiYjNDM7CUVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVF9SRVBMWSwKIAogCV9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCwKIAlFVEhUT09MX01TR19LRVJORUxfTUFYID0gKF9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCAtIDEpCkBAIC05NjEsNCAmIzQzOzk2NiwxMDMgQEAgZW51bSB7CiAKICNkZWZpbmUgRVRIVE9PTF9NQ0dSUF9NT05JVE9SX05BTUUJJiMzNDttb25pdG9yJiMzNDsKIAomIzQzOy8qIEludGVyZmFjZSBjb21wb25lbnQgdHlwZXMgKi8KJiM0MztlbnVtIGludGZfY29tcG9uZW50IHsKJiM0MzsJSU5URl9DT01QT05FTlRfTUFDLAomIzQzOwlJTlRGX0NPTVBPTkVOVF9QSFksCiYjNDM7CUlOVEZfQ09NUE9ORU5UX01PRFVMRSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qIEludGVyZmFjZSBzdWJsYXllciB0eXBlcyAqLwomIzQzO2VudW0gaW50Zl9zdWJsYXllciB7CiYjNDM7CUlOVEZfU1VCTEFZRVJfTk9ORSwKJiM0MzsJSU5URl9TVUJMQVlFUl9SUywKJiM0MzsJSU5URl9TVUJMQVlFUl9QQ1MsCiYjNDM7CUlOVEZfU1VCTEFZRVJfRkVDLAomIzQzOwlJTlRGX1NVQkxBWUVSX1BNQSwKJiM0MzsJSU5URl9TVUJMQVlFUl9QTUQsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBBdHRyaWJ1dGVzIG9mIGEgc2luZ2xlIGludGVyZmFjZSBibG9jayAqLwomIzQzO2VudW0gewomIzQzOwlFVEhUT09MX0FfSU5URl9CTE9DS19JRCwKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQkxPQ0tfQ09NUE9ORU5ULAomIzQzOwlFVEhUT09MX0FfSU5URl9CTE9DS19TVUJMQVlFUiwKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQkxPQ0tfSU5TVEFOQ0UsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0JMT0NLX05BTUUsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0JMT0NLX0RFUFRILAomIzQzOwlFVEhUT09MX0FfSU5URl9CTE9DS19MQU5FUywKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTE9PUEJBQ0tfU1VQUE9SVEVELAomIzQzOwlFVEhUT09MX0FfSU5URl9CTE9DS19UWF9QQVRURVJOUywKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQkxPQ0tfUlhfUEFUVEVSTlMsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0JMT0NLX0VSUk9SX0lOSkVDVCwKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQkxPQ0tfQkVSVCwKJiM0MzsKJiM0MzsJX19FVEhUT09MX0FfSU5URl9CTE9DS19DTlQsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0JMT0NLX01BWCA9IChfX0VUSFRPT0xfQV9JTlRGX0JMT0NLX0NOVCAtIDEpCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBBdHRyaWJ1dGVzIG9mIGludGYtY2Fwcy1nZXQgbWVzc2FnZSAqLwomIzQzO2VudW0gewomIzQzOwlFVEhUT09MX0FfSU5URl9DQVBTX1VOU1BFQywKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0NBUFNfQkxPQ0tTLAomIzQzOwomIzQzOwlfX0VUSFRPT0xfQV9JTlRGX0NBUFNfQ05ULAomIzQzOwlFVEhUT09MX0FfSU5URl9DQVBTX01BWCA9IChfX0VUSFRPT0xfQV9JTlRGX0NBUFNfQ05UIC0gMSkKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFBIWSB0ZXN0IHBhdHRlcm4gdHlwZXMgKi8KJiM0MztlbnVtIHBoeV90ZXN0X3BhdHRlcm4gewomIzQzOwlQSFlfVEVTVF9QQVRURVJOX09GRiwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9QUkJTNywKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9QUkJTOSwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9QUkJTMTEsCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fUFJCUzEzLAomIzQzOwlQSFlfVEVTVF9QQVRURVJOX1BSQlMxNSwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9QUkJTMjMsCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fUFJCUzMxLAomIzQzOwlQSFlfVEVTVF9QQVRURVJOX1NTUFJRLAomIzQzOwlQSFlfVEVTVF9QQVRURVJOX1BSQlMxM1EsCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fUFJCUzMxUSwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9TUVVBUkVfTlJaLAomIzQzOwlQSFlfVEVTVF9QQVRURVJOX1NRVUFSRV9QQU00LAomIzQzOwlQSFlfVEVTVF9QQVRURVJOX1RYX0xJTkVBUklUWSwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9TQ1JBTUJMRURfSURMRSwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9LMjhfNSwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9LMjhfNywKJiM0MzsKJiM0MzsJX19QSFlfVEVTVF9QQVRURVJOX0NPVU5ULAomIzQzOwlQSFlfVEVTVF9QQVRURVJOX01BWCA9IChfX1BIWV9URVNUX1BBVFRFUk5fQ09VTlQgLSAxKQomIzQzO307CiYjNDM7CiYjNDM7LyogUEhZIHRlc3QgQkVSVCBhY3Rpb25zICovCiYjNDM7ZW51bSBwaHlfdGVzdF9hY3Rpb24gewomIzQzOwlQSFlfVEVTVF9BQ1RJT05fTk9ORSwKJiM0MzsJUEhZX1RFU1RfQUNUSU9OX1NUQVJULAomIzQzOwlQSFlfVEVTVF9BQ1RJT05fU1RPUCwKJiM0MzsKJiM0MzsJX19QSFlfVEVTVF9BQ1RJT05fQ09VTlQsCiYjNDM7CVBIWV9URVNUX0FDVElPTl9NQVggPSAoX19QSFlfVEVTVF9BQ1RJT05fQ09VTlQgLSAxKQomIzQzO307CiYjNDM7CiYjNDM7LyogQXR0cmlidXRlcyBvZiBwaHktdGVzdC1nZXQgLyBwaHktdGVzdC1hY3QgbWVzc2FnZXMgKi8KJiM0MztlbnVtIHsKJiM0MzsJRVRIVE9PTF9BX1BIWV9URVNUX1VOU1BFQywKJiM0MzsJRVRIVE9PTF9BX1BIWV9URVNUX0hFQURFUiwKJiM0MzsJRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lELAomIzQzOwlFVEhUT09MX0FfUEhZX1RFU1RfTEFORSwKJiM0MzsJRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk4sCiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOLAomIzQzOwlFVEhUT09MX0FfUEhZX1RFU1RfQkVSVF9BQ1RJT04sCiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9JTkpFQ1RfRVJST1JfQ09VTlQsCiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9BQ1RJVkVfVEVTVFMsCiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9DSEVDS0VSX0xPQ0ssCiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9FUlJPUl9DT1VOVCwKJiM0MzsJRVRIVE9PTF9BX1BIWV9URVNUX1RPVEFMX0JJVFNfU0VOVCwKJiM0MzsKJiM0MzsJX19FVEhUT09MX0FfUEhZX1RFU1RfQ05ULAomIzQzOwlFVEhUT09MX0FfUEhZX1RFU1RfTUFYID0gKF9fRVRIVE9PTF9BX1BIWV9URVNUX0NOVCAtIDEpCiYjNDM7fTsKJiM0MzsKICNlbmRpZiAvKiBfVUFQSV9MSU5VWF9FVEhUT09MX05FVExJTktfR0VORVJBVEVEX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL01ha2VmaWxlIGIvbmV0L2V0aHRvb2wvTWFrZWZpbGUKaW5kZXggNjI5YzEwOTE2NjcwZS4uN2RkMmM1NjI0Y2VkZiAxMDA2NDQKLS0tIGEvbmV0L2V0aHRvb2wvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvTWFrZWZpbGUKQEAgLTksNCAmIzQzOzksNCBAQCBldGh0b29sX25sLXkJOj0gbmV0bGluay5vIGJpdHNldC5vIHN0cnNldC5vIGxpbmtpbmZvLm8gbGlua21vZGVzLm8gcnNzLm8gXAogCQkgICBjaGFubmVscy5vIGNvYWxlc2NlLm8gcGF1c2UubyBlZWUubyB0c2luZm8ubyBjYWJsZXRlc3QubyBcCiAJCSAgIHR1bm5lbHMubyBmZWMubyBlZXByb20ubyBzdGF0cy5vIHBoY192Y2xvY2tzLm8gbW0ubyBcCiAJCSAgIG1vZHVsZS5vIGNtaXNfZndfdXBkYXRlLm8gY21pc19jZGIubyBwc2UtcGQubyBwbGNhLm8gXAotCQkgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vCiYjNDM7CQkgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vIGludGZfY2Fwcy5vIHBoeXRlc3QubwpkaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMgYi9uZXQvZXRodG9vbC9pbnRmX2NhcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5lNDVjY2M0Yjg4YzlmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMKQEAgLTAsMCAmIzQzOzEsMTMwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7bmV0bGluay5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgaW50Zl9jYXBzX3JlcV9pbmZvIHsKJiM0MzsJc3RydWN0IGV0aG5sX3JlcV9pbmZvIGJhc2U7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGEgewomIzQzOwlzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSBiYXNlOwomIzQzOwlzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHMgY2FwczsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgSU5URl9DQVBTX1JFUERBVEEoX19yZXBseV9iYXNlKSBcCiYjNDM7CWNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSwgYmFzZSkKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeVtFVEhUT09MX0FfSU5URl9DQVBTX0hFQURFUiAmIzQzOyAxXSA9IHsKJiM0MzsJW0VUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSXSA9CiYjNDM7CQlOTEFfUE9MSUNZX05FU1RFRChldGhubF9oZWFkZXJfcG9saWN5KSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgaW50Zl9jYXBzX3JlcGx5X3NpemUoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSwKJiM0MzsJCQkJY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGEgKmRhdGEgPSBJTlRGX0NBUFNfUkVQREFUQShyZXBseV9iYXNlKTsKJiM0MzsJaW50IGxlbiA9IDA7CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGF0YS0mZ3Q7Y2Fwcy5udW1fYmxvY2tzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZSgwKTsJCS8qIG5lc3RlZCBibG9jayAqLwomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CS8qIGlkICovCiYjNDM7CQlsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsJLyogY29tcG9uZW50ICovCiYjNDM7CQlsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsJLyogc3VibGF5ZXIgKi8KJiM0MzsJCWxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwkvKiBpbnN0YW5jZSAqLwomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZShJTlRGX0JMT0NLX05BTUVfTEVOKTsgLyogbmFtZSAqLwomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKTsJLyogZGVwdGggKi8KJiM0MzsJCWxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwkvKiBsYW5lcyAqLwomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CS8qIGxvb3BiYWNrX3N1cHBvcnRlZCAqLwomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CS8qIHR4X3BhdHRlcm5zICovCiYjNDM7CQlsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsJLyogcnhfcGF0dGVybnMgKi8KJiM0MzsJCWxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoMCk7CQkvKiBlcnJvcl9pbmplY3QgKGZsYWcpICovCiYjNDM7CQlsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKDApOwkJLyogYmVydCAoZmxhZykgKi8KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBvdXRlciBCTE9DS1MgbmVzdCAqLwomIzQzOwlsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKDApOwomIzQzOwomIzQzOwlyZXR1cm4gbGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGludGZfY2Fwc19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSwKJiM0MzsJCQkJICBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSwKJiM0MzsJCQkJICBjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhICpkYXRhID0gSU5URl9DQVBTX1JFUERBVEEocmVwbHlfYmFzZSk7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSByZXBseV9iYXNlLSZndDtkZXY7CiYjNDM7CiYjNDM7CWlmICghZGV2LSZndDtldGh0b29sX29wcy0mZ3Q7Z2V0X2ludGZfY2FwcykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9pbnRmX2NhcHMoZGV2LCAmYW1wO2RhdGEtJmd0O2NhcHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGludGZfY2Fwc19maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhICpkYXRhID0gSU5URl9DQVBTX1JFUERBVEEocmVwbHlfYmFzZSk7CiYjNDM7CXN0cnVjdCBubGF0dHIgKmJsb2Nrc19hdHRyOwomIzQzOwl1MzIgaTsKJiM0MzsKJiM0MzsJYmxvY2tzX2F0dHIgPSBubGFfbmVzdF9zdGFydChza2IsIEVUSFRPT0xfQV9JTlRGX0NBUFNfQkxPQ0tTKTsKJiM0MzsJaWYgKCFibG9ja3NfYXR0cikKJiM0MzsJCXJldHVybiAtRU1TR1NJWkU7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkYXRhLSZndDtjYXBzLm51bV9ibG9ja3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrICpiID0gJmFtcDtkYXRhLSZndDtjYXBzLmJsb2Nrc1tpXTsKJiM0MzsJCXN0cnVjdCBubGF0dHIgKmJsb2NrX2F0dHI7CiYjNDM7CiYjNDM7CQlibG9ja19hdHRyID0gbmxhX25lc3Rfc3RhcnQoc2tiLCAwKTsKJiM0MzsJCWlmICghYmxvY2tfYXR0cikKJiM0MzsJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKJiM0MzsKJiM0MzsJCWlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0lELCBiLSZndDtpZCkgfHwKJiM0MzsJCSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0NPTVBPTkVOVCwKJiM0MzsJCQkJYi0mZ3Q7Y29tcG9uZW50KSB8fAomIzQzOwkJICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfU1VCTEFZRVIsCiYjNDM7CQkJCWItJmd0O3N1YmxheWVyKSB8fAomIzQzOwkJICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfSU5TVEFOQ0UsCiYjNDM7CQkJCWItJmd0O2luc3RhbmNlKSB8fAomIzQzOwkJICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTkFNRSwgYi0mZ3Q7bmFtZSkgfHwKJiM0MzsJCSAgICBubGFfcHV0X3U4KHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfREVQVEgsIGItJmd0O2RlcHRoKSB8fAomIzQzOwkJICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTEFORVMsIGItJmd0O2xhbmVzKSB8fAomIzQzOwkJICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTE9PUEJBQ0tfU1VQUE9SVEVELAomIzQzOwkJCQliLSZndDtsb29wYmFja19zdXBwb3J0ZWQpIHx8CiYjNDM7CQkgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19UWF9QQVRURVJOUywKJiM0MzsJCQkJYi0mZ3Q7c3VwcG9ydGVkX3R4X3BhdHRlcm5zKSB8fAomIzQzOwkJICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfUlhfUEFUVEVSTlMsCiYjNDM7CQkJCWItJmd0O3N1cHBvcnRlZF9yeF9wYXR0ZXJucykpCiYjNDM7CQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CQlpZiAoYi0mZ3Q7ZXJyb3JfaW5qZWN0X3N1cHBvcnRlZCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbmxhX3B1dF9mbGFnKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfRVJST1JfSU5KRUNUKSkKJiM0MzsJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKJiM0MzsJCWlmIChiLSZndDtiZXJ0X3N1cHBvcnRlZCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbmxhX3B1dF9mbGFnKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfQkVSVCkpCiYjNDM7CQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CiYjNDM7CQlubGFfbmVzdF9lbmQoc2tiLCBibG9ja19hdHRyKTsKJiM0MzsJfQomIzQzOwomIzQzOwlubGFfbmVzdF9lbmQoc2tiLCBibG9ja3NfYXR0cik7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO25sYV9wdXRfZmFpbHVyZToKJiM0MzsJbmxhX25lc3RfY2FuY2VsKHNrYiwgYmxvY2tzX2F0dHIpOwomIzQzOwlyZXR1cm4gLUVNU0dTSVpFOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfaW50Zl9jYXBzX3JlcXVlc3Rfb3BzID0gewomIzQzOwkucmVxdWVzdF9jbWQJPSBFVEhUT09MX01TR19JTlRGX0NBUFNfR0VULAomIzQzOwkucmVwbHlfY21kCT0gRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVF9SRVBMWSwKJiM0MzsJLmhkcl9hdHRyCT0gRVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIsCiYjNDM7CS5yZXFfaW5mb19zaXplCT0gc2l6ZW9mKHN0cnVjdCBpbnRmX2NhcHNfcmVxX2luZm8pLAomIzQzOwkucmVwbHlfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSksCiYjNDM7CS5wcmVwYXJlX2RhdGEJPSBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhLAomIzQzOwkucmVwbHlfc2l6ZQk9IGludGZfY2Fwc19yZXBseV9zaXplLAomIzQzOwkuZmlsbF9yZXBseQk9IGludGZfY2Fwc19maWxsX3JlcGx5LAomIzQzO307CmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmMgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmMKaW5kZXggMWFmMzk1YjU0MzMwZS4uNTZlNWM4MTE0NTRiYiAxMDA2NDQKLS0tIGEvbmV0L2V0aHRvb2wvbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL25ldGxpbmsuYwpAQCAtNDMxLDYgJiM0Mzs0MzEsOCBAQCBldGhubF9kZWZhdWx0X3JlcXVlc3RzW19fRVRIVE9PTF9NU0dfVVNFUl9DTlRdID0gewogCVtFVEhUT09MX01TR19UU0NPTkZJR19TRVRdCT0gJmFtcDtldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wcywKIAlbRVRIVE9PTF9NU0dfUEhZX0dFVF0JCT0gJmFtcDtldGhubF9waHlfcmVxdWVzdF9vcHMsCiAJW0VUSFRPT0xfTVNHX01TRV9HRVRdCQk9ICZhbXA7ZXRobmxfbXNlX3JlcXVlc3Rfb3BzLAomIzQzOwlbRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVF0JPSAmYW1wO2V0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcywKJiM0MzsJW0VUSFRPT0xfTVNHX1BIWV9URVNUX0dFVF0JPSAmYW1wO2V0aG5sX3BoeV90ZXN0X3JlcXVlc3Rfb3BzLAogfTsKIAogc3RhdGljIHN0cnVjdCBldGhubF9kdW1wX2N0eCAqZXRobmxfZHVtcF9jb250ZXh0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKQEAgLTE1NzIsNiAmIzQzOzE1NzQsMjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBldGh0b29sX2dlbmxfb3BzW10gPSB7CiAJCS5wb2xpY3kgPSBldGhubF9tc2VfZ2V0X3BvbGljeSwKIAkJLm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX21zZV9nZXRfcG9saWN5KSAtIDEsCiAJfSwKJiM0MzsJewomIzQzOwkJLmNtZAk9IEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVQsCiYjNDM7CQkuZG9pdAk9IGV0aG5sX2RlZmF1bHRfZG9pdCwKJiM0MzsJCS5zdGFydAk9IGV0aG5sX2RlZmF1bHRfc3RhcnQsCiYjNDM7CQkuZHVtcGl0CT0gZXRobmxfZGVmYXVsdF9kdW1waXQsCiYjNDM7CQkuZG9uZQk9IGV0aG5sX2RlZmF1bHRfZG9uZSwKJiM0MzsJCS5wb2xpY3kgPSBldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeSwKJiM0MzsJCS5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeSkgLSAxLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkuY21kCT0gRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULAomIzQzOwkJLmRvaXQJPSBldGhubF9kZWZhdWx0X2RvaXQsCiYjNDM7CQkucG9saWN5ID0gZXRobmxfcGh5X3Rlc3RfZ2V0X3BvbGljeSwKJiM0MzsJCS5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9waHlfdGVzdF9nZXRfcG9saWN5KSAtIDEsCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS5jbWQJPSBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QsCiYjNDM7CQkuZmxhZ3MJPSBHRU5MX1VOU19BRE1JTl9QRVJNLAomIzQzOwkJLmRvaXQJPSBldGhubF9hY3RfcGh5X3Rlc3QsCiYjNDM7CQkucG9saWN5ID0gZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeSwKJiM0MzsJCS5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9waHlfdGVzdF9hY3RfcG9saWN5KSAtIDEsCiYjNDM7CX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGV0aHRvb2xfbmxfbWNncnBzW10gPSB7CmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmggYi9uZXQvZXRodG9vbC9uZXRsaW5rLmgKaW5kZXggM2U5NjlhMDcwZjlmZS4uMWNhYmE2MGQ4M2M0MyAxMDA2NDQKLS0tIGEvbmV0L2V0aHRvb2wvbmV0bGluay5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL25ldGxpbmsuaApAQCAtNDc0LDYgJiM0Mzs0NzQsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX21tX3JlcXVlc3Rfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfcmVxdWVzdF9vcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3RzY29uZmlnX3JlcXVlc3Rfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tc2VfcmVxdWVzdF9vcHM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9pbnRmX2NhcHNfcmVxdWVzdF9vcHM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wczsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lbRVRIVE9PTF9BX0hFQURFUl9GTEFHUyAmIzQzOyAxXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5X3N0YXRzW0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgJiM0MzsgMV07CkBAIC01MzAsNiAmIzQzOzUzMiwxMSBAQCBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9IRUFERVIgJiM0MzsgMV07CiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfdHNjb25maWdfZ2V0X3BvbGljeVtFVEhUT09MX0FfVFNDT05GSUdfSEVBREVSICYjNDM7IDFdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX3NldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX01BWCAmIzQzOyAxXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9tc2VfZ2V0X3BvbGljeVtFVEhUT09MX0FfTVNFX0hFQURFUiAmIzQzOyAxXTsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3lbRVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIgJiM0MzsgMV07CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkUgJiM0MzsgMV07CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV90ZXN0X2FjdF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9URVNUX01BWCAmIzQzOyAxXTsKJiM0MzsKJiM0MztpbnQgZXRobmxfYWN0X3BoeV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogCiBpbnQgZXRobmxfc2V0X2ZlYXR1cmVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogaW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwpkaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvcGh5dGVzdC5jIGIvbmV0L2V0aHRvb2wvcGh5dGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmRlZGNkMDM2YjdjMmUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9waHl0ZXN0LmMKQEAgLTAsMCAmIzQzOzEsMTcxIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7bmV0bGluay5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgcGh5X3Rlc3RfcmVxX2luZm8gewomIzQzOwlzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhIHsKJiM0MzsJc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgYmFzZTsKJiM0MzsJc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgdGVzdDsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgUEhZX1RFU1RfUkVQREFUQShfX3JlcGx5X2Jhc2UpIFwKJiM0MzsJY29udGFpbmVyX29mKF9fcmVwbHlfYmFzZSwgc3RydWN0IHBoeV90ZXN0X3JlcGx5X2RhdGEsIGJhc2UpCiYjNDM7CiYjNDM7LyogUEhZX1RFU1RfR0VUICovCiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X3Rlc3RfZ2V0X3BvbGljeVtFVEhUT09MX0FfUEhZX1RFU1RfTEFORSAmIzQzOyAxXSA9IHsKJiM0MzsJW0VUSFRPT0xfQV9QSFlfVEVTVF9IRUFERVJdCT0gTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksCiYjNDM7CVtFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKJiM0MzsJW0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHBoeV90ZXN0X3JlcGx5X3NpemUoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSwKJiM0MzsJCQkgICAgICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7CS8qIGJsb2NrX2lkICovCiYjNDM7CSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MzsJLyogbGFuZSAqLwomIzQzOwkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7CS8qIHR4X3BhdHRlcm4gKi8KJiM0MzsJICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOwkvKiByeF9wYXR0ZXJuICovCiYjNDM7CSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MzsJLyogYWN0aXZlX3Rlc3RzICovCiYjNDM7CSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSAgJiM0MzsJLyogY2hlY2tlcl9sb2NrICovCiYjNDM7CSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTY0KSkgJiM0MzsJLyogZXJyb3JfY291bnQgKi8KJiM0MzsJICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1NjQpKTsJLyogdG90YWxfYml0c19zZW50ICovCiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsCiYjNDM7CQkJCSBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSwKJiM0MzsJCQkJIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGh5X3Rlc3RfcmVwbHlfZGF0YSAqZGF0YSA9IFBIWV9URVNUX1JFUERBVEEocmVwbHlfYmFzZSk7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSByZXBseV9iYXNlLSZndDtkZXY7CiYjNDM7CXN0cnVjdCBubGF0dHIgKip0YiA9IGluZm8tJmd0O2F0dHJzOwomIzQzOwomIzQzOwlpZiAoIWRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9waHlfdGVzdCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJbWVtc2V0KCZhbXA7ZGF0YS0mZ3Q7dGVzdCwgMCwgc2l6ZW9mKGRhdGEtJmd0O3Rlc3QpKTsKJiM0MzsKJiM0MzsJaWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9CTE9DS19JRF0pIHsKJiM0MzsJCWRhdGEtJmd0O3Rlc3QuYmxvY2tfaWQgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKTsKJiM0MzsJCWRhdGEtJmd0O3Rlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CTE9DS19JRDsKJiM0MzsJfQomIzQzOwlpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKSB7CiYjNDM7CQlkYXRhLSZndDt0ZXN0LmxhbmUgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfTEFORV0pOwomIzQzOwkJZGF0YS0mZ3Q7dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0xBTkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9waHlfdGVzdChkZXYsICZhbXA7ZGF0YS0mZ3Q7dGVzdCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGh5X3Rlc3RfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhICpkYXRhID0gUEhZX1RFU1RfUkVQREFUQShyZXBseV9iYXNlKTsKJiM0MzsJY29uc3Qgc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnQgPSAmYW1wO2RhdGEtJmd0O3Rlc3Q7CiYjNDM7CiYjNDM7CWlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9CTE9DS19JRCwgdC0mZ3Q7YmxvY2tfaWQpIHx8CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9MQU5FLCB0LSZndDtsYW5lKSB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfVFhfUEFUVEVSTiwgdC0mZ3Q7dHhfcGF0dGVybikgfHwKJiM0MzsJICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX1JYX1BBVFRFUk4sIHQtJmd0O3J4X3BhdHRlcm4pIHx8CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9BQ1RJVkVfVEVTVFMsCiYjNDM7CQkJdC0mZ3Q7YWN0aXZlX3Rlc3RzKSB8fAomIzQzOwkgICAgbmxhX3B1dF91OChza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9DSEVDS0VSX0xPQ0ssIHQtJmd0O2NoZWNrZXJfbG9jaykgfHwKJiM0MzsJICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0VSUk9SX0NPVU5ULAomIzQzOwkJCSAgICAgIHQtJmd0O2Vycm9yX2NvdW50LCBFVEhUT09MX0FfUEhZX1RFU1RfVU5TUEVDKSB8fAomIzQzOwkgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfVE9UQUxfQklUU19TRU5ULAomIzQzOwkJCSAgICAgIHQtJmd0O3RvdGFsX2JpdHNfc2VudCwgRVRIVE9PTF9BX1BIWV9URVNUX1VOU1BFQykpCiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BoeV90ZXN0X3JlcXVlc3Rfb3BzID0gewomIzQzOwkucmVxdWVzdF9jbWQJPSBFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsCiYjNDM7CS5yZXBseV9jbWQJPSBFVEhUT09MX01TR19QSFlfVEVTVF9HRVRfUkVQTFksCiYjNDM7CS5oZHJfYXR0cgk9IEVUSFRPT0xfQV9QSFlfVEVTVF9IRUFERVIsCiYjNDM7CS5yZXFfaW5mb19zaXplCT0gc2l6ZW9mKHN0cnVjdCBwaHlfdGVzdF9yZXFfaW5mbyksCiYjNDM7CS5yZXBseV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHBoeV90ZXN0X3JlcGx5X2RhdGEpLAomIzQzOwkucHJlcGFyZV9kYXRhCT0gcGh5X3Rlc3RfcHJlcGFyZV9kYXRhLAomIzQzOwkucmVwbHlfc2l6ZQk9IHBoeV90ZXN0X3JlcGx5X3NpemUsCiYjNDM7CS5maWxsX3JlcGx5CT0gcGh5X3Rlc3RfZmlsbF9yZXBseSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFBIWV9URVNUX0FDVCAqLwomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV90ZXN0X2FjdF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9URVNUX01BWCAmIzQzOyAxXSA9IHsKJiM0MzsJW0VUSFRPT0xfQV9QSFlfVEVTVF9IRUFERVJdCQk9IE5MQV9QT0xJQ1lfTkVTVEVEKGV0aG5sX2hlYWRlcl9wb2xpY3kpLAomIzQzOwlbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAomIzQzOwlbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiYjNDM7CVtFVEhUT09MX0FfUEhZX1RFU1RfVFhfUEFUVEVSTl0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKJiM0MzsJW0VUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAomIzQzOwlbRVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiYjNDM7CVtFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiYjNDM7fTsKJiM0MzsKJiM0MztpbnQgZXRobmxfYWN0X3BoeV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXRobmxfcmVxX2luZm8gcmVxX2luZm8gPSB7fTsKJiM0MzsJc3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby0mZ3Q7YXR0cnM7CiYjNDM7CXN0cnVjdCBldGh0b29sX3BoeV90ZXN0IHRlc3QgPSB7fTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoJmFtcDtyZXFfaW5mbywKJiM0MzsJCQkJCSB0YltFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXSwKJiM0MzsJCQkJCSBnZW5sX2luZm9fbmV0KGluZm8pLCBpbmZvLSZndDtleHRhY2ssCiYjNDM7CQkJCQkgdHJ1ZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJZGV2ID0gcmVxX2luZm8uZGV2OwomIzQzOwomIzQzOwlpZiAoIWRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O3NldF9waHlfdGVzdCkgewomIzQzOwkJcmV0ID0gLUVPUE5PVFNVUFA7CiYjNDM7CQlnb3RvIG91dF9kZXY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9CTE9DS19JRF0pIHsKJiM0MzsJCXRlc3QuYmxvY2tfaWQgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKTsKJiM0MzsJCXRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CTE9DS19JRDsKJiM0MzsJfQomIzQzOwlpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKSB7CiYjNDM7CQl0ZXN0LmxhbmUgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfTEFORV0pOwomIzQzOwkJdGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0xBTkU7CiYjNDM7CX0KJiM0MzsJaWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOXSkgewomIzQzOwkJdGVzdC50eF9wYXR0ZXJuID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dKTsKJiM0MzsJCXRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9UWF9QQVRURVJOOwomIzQzOwl9CiYjNDM7CWlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl0pIHsKJiM0MzsJCXRlc3QucnhfcGF0dGVybiA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOXSk7CiYjNDM7CQl0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfUlhfUEFUVEVSTjsKJiM0MzsJfQomIzQzOwlpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OXSkgewomIzQzOwkJdGVzdC5iZXJ0X2FjdGlvbiA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9CRVJUX0FDVElPTl0pOwomIzQzOwkJdGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0JFUlRfQUNUSU9OOwomIzQzOwl9CiYjNDM7CWlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXSkgewomIzQzOwkJdGVzdC5pbmplY3RfZXJyb3JfY291bnQgPQomIzQzOwkJCW5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9JTkpFQ1RfRVJST1JfQ09VTlRdKTsKJiM0MzsJCXRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9JTkpFQ1RfQ09VTlQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CXJldCA9IGV0aG5sX29wc19iZWdpbihkZXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0X3J0bmw7CiYjNDM7CiYjNDM7CXJldCA9IGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O3NldF9waHlfdGVzdChkZXYsICZhbXA7dGVzdCk7CiYjNDM7CWV0aG5sX29wc19jb21wbGV0ZShkZXYpOwomIzQzOwomIzQzO291dF9ydG5sOgomIzQzOwlydG5sX3VubG9jaygpOwomIzQzO291dF9kZXY6CiYjNDM7CWV0aG5sX3BhcnNlX2hlYWRlcl9kZXZfcHV0KCZhbXA7cmVxX2luZm8pOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDEwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV3IGV0aHRvb2wgTmV0bGluayBDb21tYW5kcyoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IHRoaXMgbmV3IHBhdGNoIHNlcmllcyBhZGRpbmcgYSBmZXcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmRzOiBgRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVGAsIGBFVEhUT09MX01TR19QSFlfVEVTVF9HRVRgLCBhbmQgYEVUSFRPT0xfTVNHX1BIWV9URVNUX0FDVGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIHVzaW5nIGBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHNgIGFuZCBgc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3RgIHRvIGhhbmRsZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGtlcm5lbCBkcml2ZXJzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgYGludGZfY2Fwc19wcmVwYXJlX2RhdGFgIGluIGBuZXQvZXRodG9vbC9pbnRmX2NhcHMuY2AgdG8gc2VlIGhvdyBpdCB3b3Jrcy4KClNwZWNpZmljYWxseSwgdGhpcyBzbmlwcGV0OgoKYGBgYwpzdGF0aWMgaW50IGludGZfY2Fwc19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSwKCQkJCSAgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UsCgkJCQkgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCnsKCXN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSAqZGF0YSA9IElOVEZfQ0FQU19SRVBEQVRBKHJlcGx5X2Jhc2UpOwoJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJlcGx5X2Jhc2UtJmd0O2RldjsKCglpZiAoIWRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9pbnRmX2NhcHMpCgkJcmV0dXJuIC1FT1BOT1RTVVBQOwoKCXJldHVybiBkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtnZXRfaW50Zl9jYXBzKGRldiwgJmFtcDtkYXRhLSZndDtjYXBzKTsKfQpgYGAKCldhaXQgYSBzZWNvbmTigKYgYGRhdGEtJmd0O2NhcHNgIGlzICpkaXJlY3RseSogcGFzc2VkIHRvIGBkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtnZXRfaW50Zl9jYXBzKGRldiwgJmFtcDtkYXRhLSZndDtjYXBzKWAuIFRoZSBkcml2ZXImIzM5O3MgYGdldF9pbnRmX2NhcHNgIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIHdyaXRlIGludG8gdGhhdCBgZGF0YS0mZ3Q7Y2Fwc2Agc3RydWN0LiBCdXQgaXMgdGhhdCBgZGF0YS0mZ3Q7Y2Fwc2AgKmluaXRpYWxpemVkKiBiZWZvcmUgdGhlIGNhbGw/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8ga25vdy4gV2hlcmUgaXMgaXQgZ2V0dGluZyBhbGxvY2F0ZWQ/CgpPa2F5LCBzbyBgZGF0YWAgaXMgcGFydCBvZiBgc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhYCwgd2hpY2ggaXMgYWxsb2NhdGVkIGJ5IHRoZSBldGh0b29sIG5ldGxpbmsgZnJhbWV3b3JrLiBSaWdodCwgbGV0IG1lIGNoZWNrIGhvdyB0aGUgYHJlcGx5X2RhdGFgIGl0c2VsZiBpcyBhbGxvY2F0ZWQgd2l0aGluIHRoZSBmcmFtZXdvcmsgaW4gYG5ldC9ldGh0b29sL25ldGxpbmsuY2AuIEkgc2hvdWxkIHByb2JhYmx5IHVzZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gZmluZCBvdXQgd2hlcmUgYHJlcGx5X2RhdGFgIGlzIGFsbG9jYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2MuKnJlcGx5X2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZXRodG9vbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvbmV0bGluay5jPTUwOT1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYy01MjktXHRcdHJldHVybiAtRU5PTUVNO1xubmV0L2V0aHRvb2wvbmV0bGluay5jOjUzMDpcdHJlcGx5X2RhdGEgPSBrbWFsbG9jKG9wcy1cdTAwM2VyZXBseV9kYXRhX3NpemUsIEdGUF9LRVJORUwpO1xubmV0L2V0aHRvb2wvbmV0bGluay5jLTUzMS1cdGlmICghcmVwbHlfZGF0YSkge1xuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYz02NzI9c3RhdGljIGludCBldGhubF9kZWZhdWx0X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNjkwLVx0XHRyZXR1cm4gLUVOT01FTTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo2OTE6XHRyZXBseV9kYXRhID0ga21hbGxvYyhvcHMtXHUwMDNlcmVwbHlfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYy02OTItXHRpZiAoIXJlcGx5X2RhdGEpIHtcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM9NzI1PXN0YXRpYyBpbnQgZXRobmxfcGVycGh5X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNzQ0LVx0XHRyZXR1cm4gLUVOT01FTTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo3NDU6XHRyZXBseV9kYXRhID0ga21hbGxvYyhvcHMtXHUwMDNlcmVwbHlfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYy03NDYtXHRpZiAoIXJlcGx5X2RhdGEpIHtcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM9OTk4PXN0YXRpYyB2b2lkIGV0aG5sX2RlZmF1bHRfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jLTEwMTktXHRcdHJldHVybjtcbm5ldC9ldGh0b29sL25ldGxpbmsuYzoxMDIwOlx0cmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSwgR0ZQX0tFUk5FTCk7XG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMTAyMS1cdGlmICghcmVwbHlfZGF0YSkge1xuLS1cbm5ldC9ldGh0b29sL3Jzcy5jPTExOD1zdGF0aWMgaW50XG5uZXQvZXRodG9vbC9yc3MuYzoxMTk6cnNzX2dldF9kYXRhX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCByc3NfcmVwbHlfZGF0YSAqZGF0YSlcbm5ldC9ldGh0b29sL3Jzcy5jLTEyMC17XG4tLVxubmV0L2V0aHRvb2wvdHNjb25maWcuYz0xOTk9c3RhdGljIGludCB0c2NvbmZpZ19zZW5kX3JlcGx5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvdHNjb25maWcuYy0yMTAtXHRcdHJldHVybiAtRU5PTUVNO1xubmV0L2V0aHRvb2wvdHNjb25maWcuYzoyMTE6XHRyZXBseV9kYXRhID0ga21hbGxvY19vYmooKnJlcGx5X2RhdGEpO1xubmV0L2V0aHRvb2wvdHNjb25maWcuYy0yMTItXHRpZiAoIXJlcGx5X2RhdGEpIHtcbi0tXG5uZXQvZXRodG9vbC90c2luZm8uYz01MDA9aW50IGV0aG5sX3RzaW5mb19zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2V0aHRvb2wvdHNpbmZvLmMtNTEzLVx0XHRyZXR1cm4gLUVOT01FTTtcbm5ldC9ldGh0b29sL3RzaW5mby5jOjUxNDpcdHJlcGx5X2RhdGEgPSBremFsbG9jX29iaigqcmVwbHlfZGF0YSk7XG5uZXQvZXRodG9vbC90c2luZm8uYy01MTUtXHRpZiAoIXJlcGx5X2RhdGEpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IFZ1bG5lcmFiaWxpdHkgaW4gZXRodG9vbCYjMzk7cyBJbnRlcmZhY2UgQ2FwYWJpbGl0aWVzIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYGV0aHRvb2xgIGhhbmRsZXMgaW50ZXJmYWNlIGNhcGFiaWxpdGllcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGV0aG5sX2RlZmF1bHRfZG9pdGAgYW5kIGBldGhubF9kZWZhdWx0X3N0YXJ0YCBmdW5jdGlvbnMuIEkgc2VlIHRoYXQgYHJlcGx5X2RhdGFgIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY2Agd2l0aG91dCB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgaXNzdWU6IHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlzbiYjMzk7dCB6ZXJvZWQsIG1lYW5pbmcgaXQgY29udGFpbnMgd2hhdGV2ZXIgZ2FyYmFnZSBoYXBwZW5lZCB0byBiZSB0aGVyZSBwcmV2aW91c2x5IG9uIHRoZSBoZWFwLgoKVGhlbiwgSSBmb2N1c2VkIG9uIHRoZSBgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YWAgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlIGRyaXZlciYjMzk7cyBgZ2V0X2ludGZfY2Fwc2AgZnVuY3Rpb24sIHBhc3NpbmcgaXQgYSBwb2ludGVyIHRvIGEgYHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YWAuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IGBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhYCAqZG9lc24mIzM5O3QqIHplcm8taW5pdGlhbGl6ZSB0aGUgYGRhdGEtJmd0O2NhcHNgIHN0cnVjdHVyZSBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhpcyBzdHJ1Y3R1cmUuCgpUaGUgdnVsbmVyYWJpbGl0eSBzdGVtcyBmcm9tIHdoYXQgaGFwcGVucyBpZiB0aGUgZHJpdmVyJiMzOTtzIGBnZXRfaW50Zl9jYXBzYCBmdW5jdGlvbiBkb2VzbiYjMzk7dCBjb21wbGV0ZWx5IGluaXRpYWxpemUgdGhlIGBkYXRhLSZndDtjYXBzYCBzdHJ1Y3R1cmUsIHBlcmhhcHMgZHVlIHRvIGFuIGVycm9yIGNvbmRpdGlvbiBvciBhIGxhY2sgb2YgY29tcGxldGUgaW5pdGlhbGl6YXRpb24uIElmIGl0IGRvZXNuJiMzOTt0IGluaXRpYWxpemUgYWxsIHRoZSBmaWVsZHMsIGluY2x1ZGluZywgaW1wb3J0YW50bHksIGBudW1fYmxvY2tzYCwgdGhlIHZhbHVlcyB3aXRoaW4gYGRhdGEtJmd0O2NhcHNgIGFyZSBlc3NlbnRpYWxseSBnYXJiYWdlIGZyb20gdGhlIGhlYXAuIFRoZXNlIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGNhbiB0aGVuIGdldCBwYXNzZWQgdG8gdXNlciBzcGFjZS4KClNwZWNpZmljYWxseSwgdGhlIGBpbnRmX2NhcHNfZmlsbF9yZXBseWAgZnVuY3Rpb24gaXRlcmF0ZXMgdGhyb3VnaCBhIGBibG9ja3NgIGFycmF5IGJhc2VkIG9uIGBkYXRhLSZndDtjYXBzLm51bV9ibG9ja3NgLiBJZiBgbnVtX2Jsb2Nrc2AgaXMgdW5pbml0aWFsaXplZCwgaXQgY291bGQgYmUgYSBsYXJnZSwgcmFuZG9tIHZhbHVlLCBsZWFkaW5nIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGFjY2Vzc2luZyB0aGUgYGJsb2Nrc2AgYXJyYXkgYW5kIHNlbmRpbmcgdGhhdCB0byB0aGUgdXNlci4KCkhvd2V2ZXIsIGV2ZW4gaWYgdGhlIGRyaXZlciBjb3JyZWN0bHkgc2V0cyBgbnVtX2Jsb2Nrc2AsIGl0IG1pZ2h0IG5vdCBmdWxseSBpbml0aWFsaXplIGFsbCB0aGUgZmllbGRzIHdpdGhpbiB0aGUgYGJsb2Nrc2AgYXJyYXkuIFRoaXMgbWVhbnMgdGhhdCBpZiBgZ2V0X2ludGZfY2Fwc2AgZG9lc24mIzM5O3QgZnVsbHkgaW5pdGlhbGl6ZSB0aGUgZGF0YSwgdGhlIGNvbnRlbnRzIG9mIHRoZSBgYmxvY2tzYCBhcnJheSAoaW5jbHVkaW5nIHRoZSBgbmFtZWAgZmllbGQsIHdoaWNoIGlzIHVzZWQgd2l0aCBgbmxhX3B1dF9zdHJpbmdgKSBjb3VsZCBjb250YWluIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhpcyBtaWdodCBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaWYgdGhlIG5hbWUgaXMgbm90IG51bGwgdGVybWluYXRlZCBhbmQgdGhlbiB1c2VyIHNwYWNlIG1heSBhbHNvIGxlYWsgc3RhY2sgb3IgaGVhcCBtZW1vcnkuCgpJIGNvbmZpcm1lZCB0aGF0IGBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhYCBkb2VzICpub3QqIHplcm8gdGhlIGBkYXRhLSZndDtjYXBzYCBzdHJ1Y3R1cmUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdGhlIGRyaXZlciwgaW4gY29udHJhc3QgdG8gd2hhdCBoYXBwZW5zIGluIGBwaHlfdGVzdF9wcmVwYXJlX2RhdGFgLCB3aGljaCAqZG9lcyogaW5pdGlhbGl6ZSBpdHMgZGF0YS4KClRoaXMgaXMgYSBjbGFzc2ljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluZm8tbGVhayBzaXR1YXRpb24sIHdoZXJlIGtlcm5lbCBtZW1vcnkgZW5kcyB1cCBiZWluZyBsZWFrZWQgdG8gdXNlciBzcGFjZSwgcG90ZW50aWFsbHkgY29udGFpbmluZyBzZW5zaXRpdmUgZGF0YSwgb3IgY2F1c2luZyBjcmFzaGVzLiBJIHNob3VsZCBmaWxlIGEgS01TQU4gcmVwb3J0IGZvciB0aGlzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXBseV9kYXRhID0ga21hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9uZXRsaW5rLmM9NTA5PXN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jLTUyOS1cdFx0cmV0dXJuIC1FTk9NRU07XG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NTMwOlx0cmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSwgR0ZQX0tFUk5FTCk7XG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNTMxLVx0aWYgKCFyZXBseV9kYXRhKSB7XG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jPTY3Mj1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYy02OTAtXHRcdHJldHVybiAtRU5PTUVNO1xubmV0L2V0aHRvb2wvbmV0bGluay5jOjY5MTpcdHJlcGx5X2RhdGEgPSBrbWFsbG9jKG9wcy1cdTAwM2VyZXBseV9kYXRhX3NpemUsIEdGUF9LRVJORUwpO1xubmV0L2V0aHRvb2wvbmV0bGluay5jLTY5Mi1cdGlmICghcmVwbHlfZGF0YSkge1xuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYz03MjU9c3RhdGljIGludCBldGhubF9wZXJwaHlfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYy03NDQtXHRcdHJldHVybiAtRU5PTUVNO1xubmV0L2V0aHRvb2wvbmV0bGluay5jOjc0NTpcdHJlcGx5X2RhdGEgPSBrbWFsbG9jKG9wcy1cdTAwM2VyZXBseV9kYXRhX3NpemUsIEdGUF9LRVJORUwpO1xubmV0L2V0aHRvb2wvbmV0bGluay5jLTc0Ni1cdGlmICghcmVwbHlfZGF0YSkge1xuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYz05OTg9c3RhdGljIHZvaWQgZXRobmxfZGVmYXVsdF9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMTAxOS1cdFx0cmV0dXJuO1xubmV0L2V0aHRvb2wvbmV0bGluay5jOjEwMjA6XHRyZXBseV9kYXRhID0ga21hbGxvYyhvcHMtXHUwMDNlcmVwbHlfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYy0xMDIxLVx0aWYgKCFyZXBseV9kYXRhKSB7XG4tLVxubmV0L2V0aHRvb2wvdHNjb25maWcuYz0xOTk9c3RhdGljIGludCB0c2NvbmZpZ19zZW5kX3JlcGx5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvdHNjb25maWcuYy0yMTAtXHRcdHJldHVybiAtRU5PTUVNO1xubmV0L2V0aHRvb2wvdHNjb25maWcuYzoyMTE6XHRyZXBseV9kYXRhID0ga21hbGxvY19vYmooKnJlcGx5X2RhdGEpO1xubmV0L2V0aHRvb2wvdHNjb25maWcuYy0yMTItXHRpZiAoIXJlcGx5X2RhdGEpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5pbml0aWFsaXplZCBNZW1vcnkgVnVsbmVyYWJpbGl0eSBpbiBuZXRsaW5rIEF0dHJpYnV0ZXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIGFzIGV4cGVjdGVkLCBgcmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLSZndDtyZXBseV9kYXRhX3NpemUsIEdGUF9LRVJORUwpO2AgaXMgdXNlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBgcmVwbHlfZGF0YWAgaXMganVzdCB1bmluaXRpYWxpemVkIGhlYXAgbWVtb3J5LCBhIGNsYXNzaWMgc291cmNlIG9mIHByb2JsZW1zLgoKVGhlIGBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhYCBmdW5jdGlvbiBpcyB3aGVyZSBteSBhdHRlbnRpb24gaXMgZHJhd24uIFNwZWNpZmljYWxseSwgaXQgcGFzc2VzIGBkYXRhLSZndDtjYXBzYCB0byB0aGUgZHJpdmVyJiMzOTtzIGBnZXRfaW50Zl9jYXBzYCBjYWxsYmFjay4gTXkgY29uY2VybiBpcyB0aGF0IGlmIHRoZSBkcml2ZXIgZG9lc24mIzM5O3QgaW5pdGlhbGl6ZSAqYWxsKiB0aGUgZmllbGRzIG9mIGBkYXRhLSZndDtjYXBzYCwgc2F5IGBudW1fYmxvY2tzYCBvciBldmVuIGp1c3QgdGhlIGluZGl2aWR1YWwgZmllbGRzIHdpdGhpbiBgYmxvY2tzW11gLCB0aGVuIGBpbnRmX2NhcHNfZmlsbF9yZXBseWAgd2lsbCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdoZW4gaXQgZ29lcyB0byBjb25zdHJ1Y3QgdGhlIG5ldGxpbmsgYXR0cmlidXRlcy4gRnVuY3Rpb25zIGxpa2UgYG5sYV9wdXRfdTMyYCwgYG5sYV9wdXRfc3RyaW5nYCwgZXRjLiwgd2lsbCBlZmZlY3RpdmVseSBsZWFrIHRoaXMgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UgdmlhIHRoZSBza2IuIEtNU0FOIGlzIGRldGVjdGluZyB0aGlzLCBhcyBpdCBzaG91bGQsIGJlY2F1c2UgS0FTQU4gd291bGRuJiMzOTt0IGNhdGNoIGl0IHNpbmNlIHRoZSBtZW1vcnkgaXMgYm90aCBhbGxvY2F0ZWQgYW5kIHdpdGhpbiBib3VuZHMuCgpJIG5lZWRlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBTbyBJIHRoZW4gZXhhbWluZWQgYGV0aG5sX2FjdF9waHlfdGVzdGAuCgpgYGBjCmludCBldGhubF9hY3RfcGh5X3Rlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKewoJc3RydWN0IGV0aG5sX3JlcV9pbmZvIHJlcV9pbmZvID0ge307CglzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLSZndDthdHRyczsKCXN0cnVjdCBldGh0b29sX3BoeV90ZXN0IHRlc3QgPSB7fTsKYGBgCgpGb3J0dW5hdGVseSwgYHRlc3RgIGlzIGluaXRpYWxpemVkIHRvIHplcm8gKGA9IHt9YCksIHNvIHRoYXQgb25lIGlzIHNhZmUuCgpUaGVuIG9uIHRvIGBwaHlfdGVzdF9wcmVwYXJlX2RhdGFgPwpgYGBjCnN0YXRpYyBpbnQgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsCgkJCQkgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UsCgkJCQkgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKewoJc3RydWN0IHBoeV90ZXN0X3JlcGx5X2RhdGEgKmRhdGEgPSBQSFlfVEVTVF9SRVBEQVRBKHJlcGx5X2Jhc2UpOwoJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJlcGx5X2Jhc2UtJmd0O2RldjsKCXN0cnVjdCBubGF0dHIgKip0YiA9IGluZm8tJmd0O2F0dHJzOwoKCWlmICghZGV2LSZndDtldGh0b29sX29wcy0mZ3Q7Z2V0X3BoeV90ZXN0KQoJCXJldHVybiAtRU9QTk9UU1VQUDsKCgltZW1zZXQoJmFtcDtkYXRhLSZndDt0ZXN0LCAwLCBzaXplb2YoZGF0YS0mZ3Q7dGVzdCkpOwpgYGAKSXQgZXhwbGljaXRseSBkb2VzIGBtZW1zZXQoJmFtcDtkYXRhLSZndDt0ZXN0LCAwLCBzaXplb2YoZGF0YS0mZ3Q7dGVzdCkpO2AsIHNvIHRoYXQgbG9va3Mgc2FmZSB0b28uIEdvb2QuCgpCdXQgd2FpdCwgYGludGZfY2Fwc19wcmVwYXJlX2RhdGFgIGlzIHRoZSBvbmUgdG8gZm9jdXMgb24hCgpgYGBjCnN0YXRpYyBpbnQgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLAoJCQkJICBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSwKCQkJCSAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKewoJc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhICpkYXRhID0gSU5URl9DQVBTX1JFUERBVEEocmVwbHlfYmFzZSk7CglzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmVwbHlfYmFzZS0mZ3Q7ZGV2OwoKCWlmICghZGV2LSZndDtldGh0b29sX29wcy0mZ3Q7Z2V0X2ludGZfY2FwcykKCQlyZXR1cm4gLUVPUE5PVFNVUFA7CgoJcmV0dXJuIGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9pbnRmX2NhcHMoZGV2LCAmYW1wO2RhdGEtJmd0O2NhcHMpOwp9CmBgYAoKVGhlcmUmIzM5O3Mgbm8gYG1lbXNldGAgaGVyZSEgVGhhdCBtZWFucyB0aGUgYGRhdGFgIHN0cnVjdCwgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jYCBpbiBgZXRobmxfZGVmYXVsdF9kb2l0YCwgaXMgcGFzc2VkIHRvIGBnZXRfaW50Zl9jYXBzYC4gSWYgdGhlIGRyaXZlciAqZG9lc24mIzM5O3QqIGZ1bGx5IGluaXRpYWxpemUgYGRhdGEtJmd0O2NhcHNgLCB3ZSAqd2lsbCogbGVhayB1bmluaXRpYWxpemVkIGhlYXAgbWVtb3J5IHRvIHVzZXIgc3BhY2UgdmlhIGBpbnRmX2NhcHNfZmlsbF9yZXBseWAuIFRoaXMgaXMgYSBkZWZpbml0ZSB2dWxuZXJhYmlsaXR5LgoKVGltZSB0byBkb3VibGUtY2hlY2sgYGV0aG5sX2RlZmF1bHRfZG9pdGAgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCBzb21laG93IHplcm9pbmcgdGhlIG1lbW9yeSB0aGF0JiMzOTtzIGdldHRpbmcgYWxsb2NhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTAwOlx0c3RhdGljIHZvaWQgZXRobmxfaW5pdF9yZXBseV9kYXRhKHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhLFxuIDUwMTpcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgKm9wcyxcbiA1MDI6XHRcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiA1MDM6XHR7XG4gNTA0Olx0XHRtZW1zZXQocmVwbHlfZGF0YSwgMCwgb3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSk7XG4gNTA1Olx0XHRyZXBseV9kYXRhLVx1MDAzZWRldiA9IGRldjtcbiA1MDY6XHR9XG4gNTA3Olx0XG4gNTA4Olx0LyogZGVmYXVsdCAtXHUwMDNlZG9pdCgpIGhhbmRsZXIgZm9yIEdFVCB0eXBlIHJlcXVlc3RzICovXG4gNTA5Olx0c3RhdGljIGludCBldGhubF9kZWZhdWx0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiA1MTA6XHR7XG4gNTExOlx0XHRzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSA9IE5VTEw7XG4gNTEyOlx0XHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvID0gTlVMTDtcbiA1MTM6XHRcdGNvbnN0IHU4IGNtZCA9IGluZm8tXHUwMDNlZ2VubGhkci1cdTAwM2VjbWQ7XG4gNTE0Olx0XHRjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgKm9wcztcbiA1MTU6XHRcdGJvb2wgbmVlZF9ydG5sID0gZmFsc2U7XG4gNTE2Olx0XHRpbnQgaGRyX2xlbiwgcmVwbHlfbGVuO1xuIDUxNzpcdFx0c3RydWN0IHNrX2J1ZmYgKnJza2I7XG4gNTE4Olx0XHR2b2lkICpyZXBseV9wYXlsb2FkO1xuIDUxOTpcdFx0aW50IHJldDtcbiA1MjA6XHRcbiA1MjE6XHRcdG9wcyA9IGV0aG5sX2RlZmF1bHRfcmVxdWVzdHNbY21kXTtcbiA1MjI6XHRcdGlmIChXQVJOX09OQ0UoIW9wcywgXCYjMzQ7Y21kICV1IGhhcyBubyBldGhubF9yZXF1ZXN0X29wc1xcblwmIzM0OywgY21kKSlcbiA1MjM6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDUyNDpcdFx0aWYgKEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgb3BzLVx1MDAzZWhkcl9hdHRyKSlcbiA1MjU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTI2Olx0XG4gNTI3Olx0XHRyZXFfaW5mbyA9IGt6YWxsb2Mob3BzLVx1MDAzZXJlcV9pbmZvX3NpemUsIEdGUF9LRVJORUwpO1xuIDUyODpcdFx0aWYgKCFyZXFfaW5mbylcbiA1Mjk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNTMwOlx0XHRyZXBseV9kYXRhID0ga21hbGxvYyhvcHMtXHUwMDNlcmVwbHlfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTtcbiA1MzE6XHRcdGlmICghcmVwbHlfZGF0YSkge1xuIDUzMjpcdFx0XHRrZnJlZShyZXFfaW5mbyk7XG4gNTMzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDUzNDpcdFx0fVxuIDUzNTpcdFxuIDUzNjpcdFx0cmV0ID0gZXRobmxfZGVmYXVsdF9wYXJzZShyZXFfaW5mbywgaW5mbywgb3BzLCAhb3BzLVx1MDAzZWFsbG93X25vZGV2X2RvKTtcbiA1Mzc6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNTM4Olx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gNTM5Olx0XHRldGhubF9pbml0X3JlcGx5X2RhdGEocmVwbHlfZGF0YSwgb3BzLCByZXFfaW5mby1cdTAwM2VkZXYpO1xuIDU0MDpcdFxuIDU0MTpcdFx0aWYgKHJlcV9pbmZvLVx1MDAzZWRldikge1xuIDU0MjpcdFx0XHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2socmVxX2luZm8tXHUwMDNlZGV2KSB8fFxuIDU0MzpcdFx0XHRcdCAgICBldGh0b29sX25sX21zZ19uZWVkc19ydG5sKHJlcV9pbmZvLVx1MDAzZWRldiwgY21kKTtcbiA1NDQ6XHRcdFx0aWYgKG5lZWRfcnRubClcbiA1NDU6XHRcdFx0XHRydG5sX2xvY2soKTtcbiA1NDY6XHRcdFx0bmV0ZGV2X2xvY2tfb3BzKHJlcV9pbmZvLVx1MDAzZWRldik7XG4gNTQ3Olx0XHR9XG4gNTQ4Olx0XHRyZXQgPSBvcHMtXHUwMDNlcHJlcGFyZV9kYXRhKHJlcV9pbmZvLCByZXBseV9kYXRhLCBpbmZvKTtcbiA1NDk6XHRcdGlmIChyZXFfaW5mby1cdTAwM2VkZXYpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxOTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBEYXRhIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIGBldGhubF9pbml0X3JlcGx5X2RhdGFgIGlzIGNhbGxpbmcgYG1lbXNldGAgdG8gemVybyBvdXQgdGhlIGByZXBseV9kYXRhYCBidWZmZXIuIExldCYjMzk7cyBjb25maXJtIHRoYXQgd2l0aCBhIHF1aWNrIGNoZWNrIG9mIGxpbmUgNTA0OiBZdXAsIHRoZXJlIGl0IGlzOiBgbWVtc2V0KHJlcGx5X2RhdGEsIDAsIG9wcy0mZ3Q7cmVwbHlfZGF0YV9zaXplKTtgLiBBbmQgaXQmIzM5O3MgY2FsbGVkIGF0IGxpbmUgNTM5LCBzbyBgZXRobmxfaW5pdF9yZXBseV9kYXRhKHJlcGx5X2RhdGEsIG9wcywgcmVxX2luZm8tJmd0O2Rldik7YCBpcyBkZWZpbml0ZWx5IGluaXRpYWxpemluZyB0aGF0IGByZXBseV9kYXRhYCBidWZmZXIuCgpBaGEhIElmIGByZXBseV9kYXRhYCBpcyBiZWluZyB6ZXJvZWQgb3V0IHJpZ2h0IHRoZXJlLCB0aGVuIHRoZSBgZGF0YS0mZ3Q7Y2Fwc2AgZmllbGQgaW4gYGludGZfY2Fwc19wcmVwYXJlX2RhdGFgIHNob3VsZCAqYWxyZWFkeSogYmUgemVyb2VkIGFzIHdlbGwuIFRoaXMgY2hhbmdlcyB0aGluZ3M7IHRoZSBleHBsaWNpdCB6ZXJvaW5nIEkgd2FzIGV4cGVjdGluZyBtaWdodCBiZSByZWR1bmRhbnQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBub3RoaW5nIGVsc2Ugb3ZlcndyaXRlcyB0aGlzIGFzIHdlbGwsIGFuZCBkb3VibGUtY2hlY2sgYGV0aG5sX2RlZmF1bHRfc3RhcnRgIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY3MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjcyOlx0c3RhdGljIGludCBldGhubF9kZWZhdWx0X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiA2NzM6XHR7XG4gNjc0Olx0XHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xuIDY3NTpcdFx0c3RydWN0IGV0aG5sX2R1bXBfY3R4ICpjdHggPSBldGhubF9kdW1wX2NvbnRleHQoY2IpO1xuIDY3NjpcdFx0c3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGE7XG4gNjc3Olx0XHRjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgKm9wcztcbiA2Nzg6XHRcdHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm87XG4gNjc5Olx0XHRzdHJ1Y3QgZ2VubG1zZ2hkciAqZ2hkcjtcbiA2ODA6XHRcdGludCByZXQ7XG4gNjgxOlx0XG4gNjgyOlx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mKCpjdHgpIFx1MDAzZSBzaXplb2YoY2ItXHUwMDNlY3R4KSk7XG4gNjgzOlx0XG4gNjg0Olx0XHRnaGRyID0gbmxtc2dfZGF0YShjYi1cdTAwM2VubGgpO1xuIDY4NTpcdFx0b3BzID0gZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tnaGRyLVx1MDAzZWNtZF07XG4gNjg2Olx0XHRpZiAoV0FSTl9PTkNFKCFvcHMsIFwmIzM0O2NtZCAldSBoYXMgbm8gZXRobmxfcmVxdWVzdF9vcHNcXG5cJiMzNDssIGdoZHItXHUwMDNlY21kKSlcbiA2ODc6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDY4ODpcdFx0cmVxX2luZm8gPSBremFsbG9jKG9wcy1cdTAwM2VyZXFfaW5mb19zaXplLCBHRlBfS0VSTkVMKTtcbiA2ODk6XHRcdGlmICghcmVxX2luZm8pXG4gNjkwOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDY5MTpcdFx0cmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gNjkyOlx0XHRpZiAoIXJlcGx5X2RhdGEpIHtcbiA2OTM6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiA2OTQ6XHRcdFx0Z290byBmcmVlX3JlcV9pbmZvO1xuIDY5NTpcdFx0fVxuIDY5NjpcdFxuIDY5NzpcdFx0cmV0ID0gZXRobmxfZGVmYXVsdF9wYXJzZShyZXFfaW5mbywgXHUwMDI2aW5mby1cdTAwM2VpbmZvLCBvcHMsIGZhbHNlKTtcbiA2OTg6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNjk5Olx0XHRcdGdvdG8gZnJlZV9yZXBseV9kYXRhO1xuIDcwMDpcdFx0aWYgKHJlcV9pbmZvLVx1MDAzZWRldikge1xuIDcwMTpcdFx0XHQvKiBXZSBpZ25vcmUgZGV2aWNlIHNwZWNpZmljYXRpb24gaW4gZHVtcCByZXF1ZXN0cyBidXQgYXMgdGhlXG4gNzAyOlx0XHRcdCAqIHNhbWUgcGFyc2VyIGFzIGZvciBub24tZHVtcCAoZG9pdCkgcmVxdWVzdHMgaXMgdXNlZCwgaXRcbiA3MDM6XHRcdFx0ICogd291bGQgdGFrZSByZWZlcmVuY2UgdG8gdGhlIGRldmljZSBpZiBpdCBmaW5kcyBvbmVcbiA3MDQ6XHRcdFx0ICovXG4gNzA1Olx0XHRcdG5ldGRldl9wdXQocmVxX2luZm8tXHUwMDNlZGV2LCBcdTAwMjZyZXFfaW5mby1cdTAwM2VkZXZfdHJhY2tlcik7XG4gNzA2Olx0XHRcdHJlcV9pbmZvLVx1MDAzZWRldiA9IE5VTEw7XG4gNzA3Olx0XHR9XG4gNzA4Olx0XG4gNzA5Olx0XHRjdHgtXHUwMDNlb3BzID0gb3BzO1xuIDcxMDpcdFx0Y3R4LVx1MDAzZXJlcV9pbmZvID0gcmVxX2luZm87XG4gNzExOlx0XHRjdHgtXHUwMDNlcmVwbHlfZGF0YSA9IHJlcGx5X2RhdGE7XG4gNzEyOlx0XHRjdHgtXHUwMDNlcG9zX2lmaW5kZXggPSAwO1xuIDcxMzpcdFxuIDcxNDpcdFx0cmV0dXJuIDA7XG4gNzE1Olx0XG4gNzE2Olx0ZnJlZV9yZXBseV9kYXRhOlxuIDcxNzpcdFx0a2ZyZWUocmVwbHlfZGF0YSk7XG4gNzE4Olx0ZnJlZV9yZXFfaW5mbzpcbiA3MTk6XHRcdGtmcmVlKHJlcV9pbmZvKTtcbiA3MjA6XHRcbiA3MjE6XHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDIxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgZXRobmxfZGVmYXVsdF9zdGFydGAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGV0aG5sX2RlZmF1bHRfc3RhcnRgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYHJlcGx5X2RhdGFgIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY2AgYnV0IGl0ICppc24mIzM5O3QqIHplcm9lZCBvdXQuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBvciBhdCBsZWFzdCBhbiBhcmVhIGZvciBkZWJ1Z2dpbmcgbGF0ZXIsIGFzIHRoYXQgbWVtb3J5IG1pZ2h0IGNvbnRhaW4gZ2FyYmFnZS4gV2FpdCBhIG1pbnV0ZS4uLiB0aGlzIGlzIHRoZSBkdW1waXQgbW9kdWxlLCBpc24mIzM5O3QgaXQ/IE9rYXksIHNvIGBldGhubF9kZWZhdWx0X3N0YXJ0YCBpcyBzcGVjaWZpYyB0byB0aGUgZHVtcGl0IGZ1bmN0aW9uYWxpdHkuIEFscmlnaHQsIGxldCYjMzk7cyB0cmFjZSB0aGlzIGByZXBseV9kYXRhYCB2YXJpYWJsZSB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBkdW1waXQgY29kZSBhbmQgc2VlIGV4YWN0bHkgaG93IGl0JiMzOTtzIGJlaW5nIHV0aWxpemVkLCBhbmQgd2hlcmUgYW5kIHdoZXRoZXIgaXQgZ2V0cyBjbGVhbmVkIHVwLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBpbmZvcm1hdGlvbiBpbiB0aGVyZSBkb2VzIG5vdCBnbyB3aGVyZSBpdCBpc24mIzM5O3Qgc3VwcG9zZWQgdG8sIGFuZCB0aGF0IHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBzdWZmZXIgZnJvbSBhbnkgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcyMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzIyOlx0fVxuIDcyMzpcdFxuIDcyNDpcdC8qIHBlci1QSFkgLVx1MDAzZXN0YXJ0KCkgaGFuZGxlciBmb3IgR0VUIHJlcXVlc3RzICovXG4gNzI1Olx0c3RhdGljIGludCBldGhubF9wZXJwaHlfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIDcyNjpcdHtcbiA3Mjc6XHRcdHN0cnVjdCBldGhubF9wZXJwaHlfZHVtcF9jdHggKnBoeV9jdHggPSBldGhubF9wZXJwaHlfZHVtcF9jb250ZXh0KGNiKTtcbiA3Mjg6XHRcdGNvbnN0IHN0cnVjdCBnZW5sX2R1bXBpdF9pbmZvICppbmZvID0gZ2VubF9kdW1waXRfaW5mbyhjYik7XG4gNzI5Olx0XHRzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmN0eCA9IFx1MDAyNnBoeV9jdHgtXHUwMDNlZXRobmxfY3R4O1xuIDczMDpcdFx0c3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGE7XG4gNzMxOlx0XHRjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgKm9wcztcbiA3MzI6XHRcdHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm87XG4gNzMzOlx0XHRzdHJ1Y3QgZ2VubG1zZ2hkciAqZ2hkcjtcbiA3MzQ6XHRcdGludCByZXQ7XG4gNzM1Olx0XG4gNzM2Olx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mKCpjdHgpIFx1MDAzZSBzaXplb2YoY2ItXHUwMDNlY3R4KSk7XG4gNzM3Olx0XG4gNzM4Olx0XHRnaGRyID0gbmxtc2dfZGF0YShjYi1cdTAwM2VubGgpO1xuIDczOTpcdFx0b3BzID0gZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tnaGRyLVx1MDAzZWNtZF07XG4gNzQwOlx0XHRpZiAoV0FSTl9PTkNFKCFvcHMsIFwmIzM0O2NtZCAldSBoYXMgbm8gZXRobmxfcmVxdWVzdF9vcHNcXG5cJiMzNDssIGdoZHItXHUwMDNlY21kKSlcbiA3NDE6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDc0MjpcdFx0cmVxX2luZm8gPSBremFsbG9jKG9wcy1cdTAwM2VyZXFfaW5mb19zaXplLCBHRlBfS0VSTkVMKTtcbiA3NDM6XHRcdGlmICghcmVxX2luZm8pXG4gNzQ0Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDc0NTpcdFx0cmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gNzQ2Olx0XHRpZiAoIXJlcGx5X2RhdGEpIHtcbiA3NDc6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiA3NDg6XHRcdFx0Z290byBmcmVlX3JlcV9pbmZvO1xuIDc0OTpcdFx0fVxuIDc1MDpcdFxuIDc1MTpcdFx0LyogVW5saWtlIHBlci1kZXYgZHVtcCwgZG9uJiMzOTt0IGlnbm9yZSBkZXYuIFRoZSBkdW1wIGhhbmRsZXJcbiA3NTI6XHRcdCAqIHdpbGwgbm90aWNlIGl0IGFuZCBkdW1wIFBIWXMgZnJvbSBnaXZlbiBkZXYuIFdlIG9ubHkga2VlcCB0cmFjayBvZlxuIDc1MzpcdFx0ICogdGhlIGRldiYjMzk7cyBpZmluZGV4LCAuZHVtcGl0KCkgd2lsbCBncmFiIGFuZCByZWxlYXNlIHRoZSBuZXRkZXYgaXRzZWxmLlxuIDc1NDpcdFx0ICovXG4gNzU1Olx0XHRyZXQgPSBldGhubF9kZWZhdWx0X3BhcnNlKHJlcV9pbmZvLCBcdTAwMjZpbmZvLVx1MDAzZWluZm8sIG9wcywgZmFsc2UpO1xuIDc1NjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA3NTc6XHRcdFx0Z290byBmcmVlX3JlcGx5X2RhdGE7XG4gNzU4Olx0XHRpZiAocmVxX2luZm8tXHUwMDNlZGV2KSB7XG4gNzU5Olx0XHRcdHBoeV9jdHgtXHUwMDNlaWZpbmRleCA9IHJlcV9pbmZvLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4O1xuIDc2MDpcdFx0XHRuZXRkZXZfcHV0KHJlcV9pbmZvLVx1MDAzZWRldiwgXHUwMDI2cmVxX2luZm8tXHUwMDNlZGV2X3RyYWNrZXIpO1xuIDc2MTpcdFx0XHRyZXFfaW5mby1cdTAwM2VkZXYgPSBOVUxMO1xuIDc2MjpcdFx0fVxuIDc2MzpcdFxuIDc2NDpcdFx0Y3R4LVx1MDAzZW9wcyA9IG9wcztcbiA3NjU6XHRcdGN0eC1cdTAwM2VyZXFfaW5mbyA9IHJlcV9pbmZvO1xuIDc2NjpcdFx0Y3R4LVx1MDAzZXJlcGx5X2RhdGEgPSByZXBseV9kYXRhO1xuIDc2NzpcdFx0Y3R4LVx1MDAzZXBvc19pZmluZGV4ID0gMDtcbiA3Njg6XHRcbiA3Njk6XHRcdHJldHVybiAwO1xuIDc3MDpcdFxuIDc3MTpcdGZyZWVfcmVwbHlfZGF0YTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NzEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYGV0aG5sX2RlZmF1bHRfZHVtcGl0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBtZW50YWwgY2hlY2tsaXN0IHN0YXJ0cyB3aXRoIGBldGhubF9kZWZhdWx0X2R1bXBpdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhpcyBzcGVjaWZpYyBlbnRpdHkgaXMsIHByb2JhYmx5IGEgZnVuY3Rpb24sIHBlcmhhcHMgYSB2YXJpYWJsZSwgb3IgcG90ZW50aWFsbHkgZXZlbiBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gSSBjYW4gaW5mZXIgZnJvbSB0aGUgbmFtZSB0aGF0IHRoaXMgaGFzIHRvIGRvIHdpdGggc29tZSBkZWZhdWx0IHNldHRpbmdzIHRoYXQgbGlrZWx5IGdldCAmIzM0O2R1bXBlZCYjMzQ7IHNvbWV3aGVyZS4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIGVpdGhlciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3IgbG93LWxldmVsIEV0aGVybmV0IGRyaXZlciBzZXR0aW5ncy4gTGV0IG1lIHN0YXJ0IGJ5IHNlZWluZyB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgYW5kIGRlZmluZWQsIHBlcmhhcHMgYSBxdWljayBgZ3JlcGAgb3IgYGZpbmRgIHdpbGwgZ2V0IG1lIHN0YXJ0ZWQuIEZyb20gdGhlcmUgSSYjMzk7bGwgaW52ZXN0aWdhdGUgaG93IGl0JiMzOTtzIHVzZWQgYW5kIHdoYXQgY29udGV4dCBpdCYjMzk7cyBhcHBsaWVkIGluLCBpbiB0aGlzIHN5c3RlbS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBwcm9jZXNzIGJlZm9yZSBJIGludmVzdGlnYXRlIHRoZSBpbnRyaWNhY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NzIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc3MjpcdFx0a2ZyZWUocmVwbHlfZGF0YSk7XG4gNzczOlx0ZnJlZV9yZXFfaW5mbzpcbiA3NzQ6XHRcdGtmcmVlKHJlcV9pbmZvKTtcbiA3NzU6XHRcbiA3NzY6XHRcdHJldHVybiByZXQ7XG4gNzc3Olx0fVxuIDc3ODpcdFxuIDc3OTpcdHN0YXRpYyBpbnQgZXRobmxfcGVycGh5X2R1bXBfb25lX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDc4MDpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZXRobmxfcGVycGh5X2R1bXBfY3R4ICpjdHgsXG4gNzgxOlx0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gNzgyOlx0e1xuIDc4MzpcdFx0c3RydWN0IGV0aG5sX2R1bXBfY3R4ICpldGhubF9jdHggPSBcdTAwMjZjdHgtXHUwMDNlZXRobmxfY3R4O1xuIDc4NDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGV0aG5sX2N0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2VkZXY7XG4gNzg1Olx0XHRzdHJ1Y3QgcGh5X2RldmljZV9ub2RlICpwZG47XG4gNzg2Olx0XHRpbnQgcmV0O1xuIDc4NzpcdFxuIDc4ODpcdFx0aWYgKCFkZXYtXHUwMDNlbGlua190b3BvKVxuIDc4OTpcdFx0XHRyZXR1cm4gMDtcbiA3OTA6XHRcbiA3OTE6XHRcdHhhX2Zvcl9lYWNoX3N0YXJ0KFx1MDAyNmRldi1cdTAwM2VsaW5rX3RvcG8tXHUwMDNlcGh5cywgY3R4LVx1MDAzZXBvc19waHlpbmRleCwgcGRuLFxuIDc5MjpcdFx0XHRcdCAgY3R4LVx1MDAzZXBvc19waHlpbmRleCkge1xuIDc5MzpcdFx0XHRldGhubF9jdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlcGh5X2luZGV4ID0gY3R4LVx1MDAzZXBvc19waHlpbmRleDtcbiA3OTQ6XHRcbiA3OTU6XHRcdFx0LyogV2UgY2FuIHJlLXVzZSB0aGUgb3JpZ2luYWwgZHVtcF9vbmUgYXMgLVx1MDAzZXByZXBhcmVfZGF0YSBpblxuIDc5NjpcdFx0XHQgKiBjb21tYW5kcyB1c2UgZXRobmxfcmVxX2dldF9waHlkZXYoKSwgd2hpY2ggZ2V0cyB0aGUgUEhZIGZyb21cbiA3OTc6XHRcdFx0ICogdGhlIHJlcV9pbmZvLVx1MDAzZXBoeV9pbmRleFxuIDc5ODpcdFx0XHQgKi9cbiA3OTk6XHRcdFx0cmV0ID0gZXRobmxfZGVmYXVsdF9kdW1wX29uZShza2IsIGRldiwgZXRobmxfY3R4LCBpbmZvKTtcbiA4MDA6XHRcdFx0aWYgKHJldClcbiA4MDE6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDgwMjpcdFx0fVxuIDgwMzpcdFxuIDgwNDpcdFx0Y3R4LVx1MDAzZXBvc19waHlpbmRleCA9IDA7XG4gODA1Olx0XG4gODA2Olx0XHRyZXR1cm4gMDtcbiA4MDc6XHR9XG4gODA4Olx0XG4gODA5Olx0c3RhdGljIGludCBldGhubF9wZXJwaHlfZHVtcF9hbGxfZGV2KHN0cnVjdCBza19idWZmICpza2IsXG4gODEwOlx0XHRcdFx0XHQgICAgIHN0cnVjdCBldGhubF9wZXJwaHlfZHVtcF9jdHggKmN0eCxcbiA4MTE6XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiA4MTI6XHR7XG4gODEzOlx0XHRzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmV0aG5sX2N0eCA9IFx1MDAyNmN0eC1cdTAwM2VldGhubF9jdHg7XG4gODE0Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuIDgxNTpcdFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG4gODE2Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIDgxNzpcdFx0aW50IHJldCA9IDA7XG4gODE4Olx0XG4gODE5Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gODIwOlx0XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgZXRobmxfY3R4LVx1MDAzZXBvc19pZmluZGV4KSB7XG4gODIxOlx0XHRcdG5ldGRldl9ob2xkKGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzYyMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDYWxsIFN0YWNrKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYGV0aG5sX2RlZmF1bHRfZHVtcF9vbmVgIGlzIGJlaW5nIGludm9rZWQuIFJpZ2h0IGF3YXksIG15IGJyYWluIGp1bXBzIHRvIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhhdCBmdW5jdGlvbiBkZWZpbmVkLCBhbmQgd2hhdCBpdHMgbGlrZWx5IHB1cnBvc2UgbWlnaHQgYmUgaW4gdGhpcyBjb250ZXh0LiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBldGhubF9kZWZhdWx0X2R1bXBfb25lYCBpdHNlbGYgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcgd2l0aGluIHRoaXMgcGFydGljdWxhciBjYWxsIHN0YWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgZnVsbHkgdG8gZXZhbHVhdGUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgaW52b2NhdGlvbiwgYW5kIHdoZXJlIHRoZSB2YWx1ZXMgYmVpbmcgcHJvY2Vzc2VkIGNvbWUgZnJvbS4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvbmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODIyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MjI6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gODIzOlx0XG4gODI0Olx0XHRcdC8qIHBlci1QSFkgY29tbWFuZHMgdXNlIGV0aG5sX3JlcV9nZXRfcGh5ZGV2KCksIHdoaWNoIG5lZWRzIHRoZVxuIDgyNTpcdFx0XHQgKiBuZXRfZGV2aWNlIGluIHRoZSByZXFfaW5mb1xuIDgyNjpcdFx0XHQgKi9cbiA4Mjc6XHRcdFx0ZXRobmxfY3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZWRldiA9IGRldjtcbiA4Mjg6XHRcdFx0cmV0ID0gZXRobmxfcGVycGh5X2R1bXBfb25lX2Rldihza2IsIGN0eCwgaW5mbyk7XG4gODI5Olx0XG4gODMwOlx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiA4MzE6XHRcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldl90cmFja2VyKTtcbiA4MzI6XHRcdFx0ZXRobmxfY3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZWRldiA9IE5VTEw7XG4gODMzOlx0XG4gODM0Olx0XHRcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUCkge1xuIDgzNTpcdFx0XHRcdGlmIChsaWtlbHkoc2tiLVx1MDAzZWxlbikpXG4gODM2Olx0XHRcdFx0XHRyZXQgPSBza2ItXHUwMDNlbGVuO1xuIDgzNzpcdFx0XHRcdGJyZWFrO1xuIDgzODpcdFx0XHR9XG4gODM5Olx0XHRcdHJldCA9IDA7XG4gODQwOlx0XHR9XG4gODQxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA4NDI6XHRcbiA4NDM6XHRcdHJldHVybiByZXQ7XG4gODQ0Olx0fVxuIDg0NTpcdFxuIDg0NjpcdC8qIHBlci1QSFkgLVx1MDAzZWR1bXBpdCgpIGhhbmRsZXIgZm9yIEdFVCByZXF1ZXN0cy4gKi9cbiA4NDc6XHRzdGF0aWMgaW50IGV0aG5sX3BlcnBoeV9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA4NDg6XHRcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIDg0OTpcdHtcbiA4NTA6XHRcdHN0cnVjdCBldGhubF9wZXJwaHlfZHVtcF9jdHggKmN0eCA9IGV0aG5sX3BlcnBoeV9kdW1wX2NvbnRleHQoY2IpO1xuIDg1MTpcdFx0Y29uc3Qgc3RydWN0IGdlbmxfZHVtcGl0X2luZm8gKmluZm8gPSBnZW5sX2R1bXBpdF9pbmZvKGNiKTtcbiA4NTI6XHRcdHN0cnVjdCBldGhubF9kdW1wX2N0eCAqZXRobmxfY3R4ID0gXHUwMDI2Y3R4LVx1MDAzZWV0aG5sX2N0eDtcbiA4NTM6XHRcdGludCByZXQgPSAwO1xuIDg1NDpcdFxuIDg1NTpcdFx0aWYgKGN0eC1cdTAwM2VpZmluZGV4KSB7XG4gODU2Olx0XHRcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuIDg1NzpcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIDg1ODpcdFxuIDg1OTpcdFx0XHRkZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4KGdlbmxfaW5mb19uZXQoXHUwMDI2aW5mby1cdTAwM2VpbmZvKSxcbiA4NjA6XHRcdFx0XHRcdFx0ICBjdHgtXHUwMDNlaWZpbmRleCwgXHUwMDI2ZGV2X3RyYWNrZXIsXG4gODYxOlx0XHRcdFx0XHRcdCAgR0ZQX0tFUk5FTCk7XG4gODYyOlx0XHRcdGlmICghZGV2KVxuIDg2MzpcdFx0XHRcdHJldHVybiAtRU5PREVWO1xuIDg2NDpcdFxuIDg2NTpcdFx0XHRldGhubF9jdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlZGV2ID0gZGV2O1xuIDg2NjpcdFx0XHRyZXQgPSBldGhubF9wZXJwaHlfZHVtcF9vbmVfZGV2KHNrYiwgY3R4LCBnZW5sX2luZm9fZHVtcChjYikpO1xuIDg2NzpcdFxuIDg2ODpcdFx0XHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVPUE5PVFNVUFAgXHUwMDI2XHUwMDI2IGxpa2VseShza2ItXHUwMDNlbGVuKSlcbiA4Njk6XHRcdFx0XHRyZXQgPSBza2ItXHUwMDNlbGVuO1xuIDg3MDpcdFxuIDg3MTpcdFx0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDYxNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBmb3IgYGV0aG5sX2RlZmF1bHRfZHVtcF9vbmVgKioKCk9rYXksIHNvIHRoZSBodW50IGJlZ2lucy4gSSYjMzk7bSBsb29raW5nIGZvciBgZXRobmxfZGVmYXVsdF9kdW1wX29uZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LiBJcyB0aGlzIGEgZnVuY3Rpb24sIGEgdmFyaWFibGUsIGEgbWFjcm8/IEl0cyBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyBhIGZ1bmN0aW9uIG9yIHBvdGVudGlhbGx5IGEgbWFjcm8uIFRoZSBgZXRobmxgIHByZWZpeCBpcyBsaWtlbHkgc29tZSBzb3J0IG9mIG1vZHVsZSBvciBuYW1lc3BhY2U7IHBlcmhhcHMgcmVsYXRlZCB0byBFdGhlcm5ldCBvciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIGdpdmVuIHRoZSBgbmxgIGZvciAmIzM0O25ldGxpbmsmIzM0Oy4gVGhlICYjMzQ7ZGVmYXVsdCYjMzQ7IHByb2JhYmx5IGhpbnRzIGF0IGEgZGVmYXVsdCBvciBmYWxsYmFjayBtZWNoYW5pc20uIEFuZCAmIzM0O2R1bXBcX29uZSYjMzQ7Li4uIGRlZmluaXRlbHkgc291bmRzIGxpa2Ugc29tZSBraW5kIG9mIGRhdGEgcmV0cmlldmFsLCBsaWtlbHkgcmVsYXRlZCB0byBkdW1waW5nIG9yIG91dHB1dHRpbmcgYSBzaW5nbGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgb3Igc3RhdGUuCgpNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBmb3JtaW5nIGEgaHlwb3RoZXNpcy4gSXMgdGhpcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgRXRoZXJuZXQgaW50ZXJmYWNlJiMzOTtzIGRlZmF1bHQgY29uZmlndXJhdGlvbj8gT3IgcGVyaGFwcyByZWxhdGVkIHRvIGFuIG92ZXJhbGwgc3lzdGVtIGRlZmF1bHQgZm9yIG5ldHdvcmsgaW50ZXJmYWNlcz8KCkkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGNvZGViYXNlOyBJIGNhbiB1c2UgZ3JlcCwgYWNrLCByaXBncmVwLCBvciBzaW1pbGFyIHRvb2xzLCBkZXBlbmRpbmcgb24gdGhlIHNjYWxlIGFuZCBjb21wbGV4aXR5IG9mIHRoZSBwcm9qZWN0LiBJJiMzOTtkIHN0YXJ0IHdpdGggYSBicm9hZCBzZWFyY2gsIGxvb2tpbmcgZm9yIHRoZSBleGFjdCBuYW1lLCBhbmQgdmFyaWF0aW9ucyBsaWtlICYjMzQ7ZXRobmwmIzM0OyBhbmQgJiMzNDtkdW1wJiMzNDsuIEkmIzM5O2xsIGFsc28gY29uc2lkZXIgc2VhcmNoaW5nIGZvciByZWxhdGVkIHRlcm1zIGxpa2UgJiMzNDtuZXRsaW5rJiMzNDssICYjMzQ7ZXRoZXJuZXQmIzM0OywgJiMzNDtkZWZhdWx0IGNvbmZpZ3VyYXRpb24mIzM0OywgJiMzNDtpbnRlcmZhY2UgZHVtcCYjMzQ7LCBvciBzaW1pbGFyLgoKSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBsYW5ndWFnZSBvciBmcmFtZXdvcmsgaGVyZS4gRm9yIGV4YW1wbGUsIGlmIGl0JiMzOTtzIGtlcm5lbCBzcGFjZSwgSSBtaWdodCBleHBlY3QgdG8gc2VlIGEgbG90IG9mIEMgY29kZS4gSWYgaXQgaXMgdXNlcnNwYWNlLCBpdCBjb3VsZCBiZSBDLCBDJiM0MzsmIzQzOywgUHl0aG9uLCBvciB3aGF0ZXZlciB0aGUgcHJvamVjdCBpcyB1c2luZy4gU28gSSBoYXZlIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gZG9pbmcgdGhlIHNlYXJjaC4gQmFzZWQgb24gdGhlIGxhbmd1YWdlIGFuZCBmcmFtZXdvcmsgdGhlIHNlYXJjaCBtaWdodCBkaWZmZXIgYXMgd2VsbC4KCk9uY2UgSSBoYXZlIGEgbGlzdCBvZiBwb3NzaWJsZSBsb2NhdGlvbnMgb3IgdXNhZ2VzLCBJJiMzOTtsbCB0aGVuIGRyaWxsIGRvd24gYW5kIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLCB3aGF0IGl0IGRvZXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgY29tcG9uZW50cywgaW4gb3JkZXIgdG8gZmlndXJlIG91dCB3aGF0IGl0IGRvZXMgaW4gZGV0YWlsLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHdoZXJlIHRoZSAmIzM0O2R1bXAmIzM0OyBvY2N1cnMsIHdoZW4gaXQmIzM5O3MgY2FsbGVkLCBhbmQgd2hvIGNhbGxzIGl0LiBUaGlzIHdpbGwgaGVscCBtZSBjb25uZWN0IHRoZSBkb3RzIGFib3V0IGl0cyBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgaW52b2x2ZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlcywgc29ja2V0IGNhbGxzLCBuZXRsaW5rIG1lc3NhZ2VzLCBhbmQgcG90ZW50aWFsbHkgc29tZSBmb3JtIG9mIHN0YXRlIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V0aG5sX2RlZmF1bHRfZHVtcF9vbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZXRodG9vbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvbmV0bGluay5jPTUwOT1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYy01OTUtXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NTk2OnN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9kdW1wX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTU5Ny1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGV0aG5sX2R1bXBfY3R4ICpjdHgsXG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jPTY0MD1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jLTY1My1cbm5ldC9ldGh0b29sL25ldGxpbmsuYzo2NTQ6XHRcdHJldCA9IGV0aG5sX2RlZmF1bHRfZHVtcF9vbmUoc2tiLCBkZXYsIGN0eCwgZ2VubF9pbmZvX2R1bXAoY2IpKTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYy02NTUtXG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jPTc3OT1zdGF0aWMgaW50IGV0aG5sX3BlcnBoeV9kdW1wX29uZV9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNzk4LVx0XHQgKi9cbm5ldC9ldGh0b29sL25ldGxpbmsuYzo3OTk6XHRcdHJldCA9IGV0aG5sX2RlZmF1bHRfZHVtcF9vbmUoc2tiLCBkZXYsIGV0aG5sX2N0eCwgaW5mbyk7XG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtODAwLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUyNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGBldGhubF9kZWZhdWx0X2R1bXBfb25lYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnVzaW5lc3MuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIGBldGhubF9kZWZhdWx0X2R1bXBfb25lYC4gSSYjMzk7bSBhc3N1bWluZyBmcm9tIHRoZSBuYW1pbmcgY29udmVudGlvbiB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgZGVmYXVsdCBkdW1wLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGV0aG5pYyBuZXR3b3JrIChldGhubCkgY29uZmlndXJhdGlvbnMgb3IgZGF0YS4gVGhlICYjMzQ7b25lJiMzNDsgYXQgdGhlIGVuZCBzdWdnZXN0cyBhIHByaW1hcnkgb3IgYmFzZSBjb25maWd1cmF0aW9uLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB2YXJpb3VzIHBvdGVudGlhbCBjb250ZXh0czogaXMgdGhpcyBhIHNwZWNpZmljIG5ldHdvcmsgcGFyYW1ldGVyIGR1bXA/IEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGluaXRpYWwgc3RhdGUgb2YgYSBwYXJ0aWN1bGFyIGRldmljZSBvciBzeXN0ZW0gcmVsYXRlZCB0byBldGhubD8gT3IgcGVyaGFwcyBpdCYjMzk7cyBhIHNuYXBzaG90IG9mIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgZXRobmwgaW50ZXJmYWNlIGl0c2VsZj8KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGZpbGUgdGhhdCBjb3VsZCBjb250YWluIGFueXRoaW5nIGZyb20gYmFzaWMgTUFDIGFkZHJlc3MgYXNzaWdubWVudHMgYW5kIE1UVSBzaXplcyB0byBtb3JlIGNvbXBsZXggcm91dGluZyBpbmZvcm1hdGlvbiwgVkxBTiBjb25maWd1cmF0aW9ucywgb3IgZXZlbiBzZWN1cml0eSBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBldGhubCBwcm90b2NvbHMuIE15IGZvY3VzIHdpbGwgYmUgb24gcXVpY2tseSBpZGVudGlmeWluZyB0aGUga2V5IGVsZW1lbnRzIGFuZCBhc3Nlc3NpbmcgdGhlaXIgaW1wbGljYXRpb25zLCBhcyB3ZWxsIGFzIGxvb2tpbmcgZm9yIGFueSBvYnZpb3VzIGRldmlhdGlvbnMgZnJvbSBzdGFuZGFyZCBwcmFjdGljZS4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55dGhpbmcgdGhhdCBjb3VsZCBzdWdnZXN0IHVuZGVybHlpbmcgYXNzdW1wdGlvbnMgb3IgaGFyZGNvZGVkIHZhbHVlcy4gTXkgZ29hbCBpcyB0byByYXBpZGx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCB0aGUgbGlrZWx5IHB1cnBvc2Ugb2YgdGhpcyBkdW1wLiBOb3csIGxldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvbmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTk2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1OTY6XHRzdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZHVtcF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiA1OTc6XHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGV0aG5sX2R1bXBfY3R4ICpjdHgsXG4gNTk4Olx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gNTk5Olx0e1xuIDYwMDpcdFx0Ym9vbCBuZWVkX3J0bmw7XG4gNjAxOlx0XHR2b2lkICplaGRyO1xuIDYwMjpcdFx0aW50IHJldDtcbiA2MDM6XHRcbiA2MDQ6XHRcdGVoZHIgPSBnZW5sbXNnX3B1dChza2IsIGluZm8tXHUwMDNlc25kX3BvcnRpZCwgaW5mby1cdTAwM2VzbmRfc2VxLFxuIDYwNTpcdFx0XHRcdCAgIFx1MDAyNmV0aHRvb2xfZ2VubF9mYW1pbHksIE5MTV9GX01VTFRJLFxuIDYwNjpcdFx0XHRcdCAgIGN0eC1cdTAwM2VvcHMtXHUwMDNlcmVwbHlfY21kKTtcbiA2MDc6XHRcdGlmICghZWhkcilcbiA2MDg6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiA2MDk6XHRcbiA2MTA6XHRcdGV0aG5sX2luaXRfcmVwbHlfZGF0YShjdHgtXHUwMDNlcmVwbHlfZGF0YSwgY3R4LVx1MDAzZW9wcywgZGV2KTtcbiA2MTE6XHRcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpIHx8XG4gNjEyOlx0XHRcdCAgICBldGh0b29sX25sX21zZ19uZWVkc19ydG5sKGRldiwgY3R4LVx1MDAzZW9wcy1cdTAwM2VyZXF1ZXN0X2NtZCk7XG4gNjEzOlx0XHRpZiAobmVlZF9ydG5sKVxuIDYxNDpcdFx0XHRydG5sX2xvY2soKTtcbiA2MTU6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuIDYxNjpcdFx0cmV0ID0gY3R4LVx1MDAzZW9wcy1cdTAwM2VwcmVwYXJlX2RhdGEoY3R4LVx1MDAzZXJlcV9pbmZvLCBjdHgtXHUwMDNlcmVwbHlfZGF0YSwgaW5mbyk7XG4gNjE3Olx0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuIDYxODpcdFx0aWYgKG5lZWRfcnRubClcbiA2MTk6XHRcdFx0cnRubF91bmxvY2soKTtcbiA2MjA6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNjIxOlx0XHRcdGdvdG8gb3V0X2NhbmNlbDtcbiA2MjI6XHRcdHJldCA9IGV0aG5sX2ZpbGxfcmVwbHlfaGVhZGVyKHNrYiwgZGV2LCBjdHgtXHUwMDNlb3BzLVx1MDAzZWhkcl9hdHRyKTtcbiA2MjM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNjI0Olx0XHRcdGdvdG8gb3V0O1xuIDYyNTpcdFx0cmV0ID0gY3R4LVx1MDAzZW9wcy1cdTAwM2VmaWxsX3JlcGx5KHNrYiwgY3R4LVx1MDAzZXJlcV9pbmZvLCBjdHgtXHUwMDNlcmVwbHlfZGF0YSk7XG4gNjI2Olx0XG4gNjI3Olx0b3V0OlxuIDYyODpcdFx0aWYgKGN0eC1cdTAwM2VvcHMtXHUwMDNlY2xlYW51cF9kYXRhKVxuIDYyOTpcdFx0XHRjdHgtXHUwMDNlb3BzLVx1MDAzZWNsZWFudXBfZGF0YShjdHgtXHUwMDNlcmVwbHlfZGF0YSk7XG4gNjMwOlx0b3V0X2NhbmNlbDpcbiA2MzE6XHRcdGN0eC1cdTAwM2VyZXBseV9kYXRhLVx1MDAzZWRldiA9IE5VTEw7XG4gNjMyOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDYzMzpcdFx0XHRnZW5sbXNnX2NhbmNlbChza2IsIGVoZHIpO1xuIDYzNDpcdFx0ZWxzZVxuIDYzNTpcdFx0XHRnZW5sbXNnX2VuZChza2IsIGVoZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjU1NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEb3VibGUtQ2hlY2tpbmcgdGhlIERhdGEgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBub3RpY2luZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIFRoZSBjYWxsIHRvIGBldGhubF9pbml0X3JlcGx5X2RhdGEoY3R4LSZndDtyZXBseV9kYXRhLCBjdHgtJmd0O29wcywgZGV2KTtgIHBvcHMgdXAgaW4gYGV0aG5sX2RlZmF1bHRfZHVtcF9vbmVgIHRvbywgbm90IGp1c3QgaW4gdGhlIGBkb2l0YCBwYXRoLiBSaWdodCwgYW5kIGVhcmxpZXIgd2UgdmVyaWZpZWQgdGhhdCBgZXRobmxfaW5pdF9yZXBseV9kYXRhYCBpbmNsdWRlcyBhIGBtZW1zZXQocmVwbHlfZGF0YSwgMCwgb3BzLSZndDtyZXBseV9kYXRhX3NpemUpO2AuIFRoYXQgYG1lbXNldGAgaXMgY3JpdGljYWwhCgpTbywgdGhlIGByZXBseV9kYXRhYCBidWZmZXIgaXMgZGVmaW5pdGVseSBnZXR0aW5nIHplcm9lZCBvdXQgKmJlZm9yZSogYHByZXBhcmVfZGF0YWAgZ2V0cyBjYWxsZWQuIFRoaXMgaG9sZHMgdHJ1ZSBmb3IgYm90aCB0aGUgYGRvaXRgIGFuZCBgZHVtcGl0YCBleGVjdXRpb24gcGF0aHMuIEl0JiMzOTtzIGdvb2QgdGhhdCB3ZSYjMzk7cmUgY292ZXJpbmcgb3VyIGJhc2VzLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIHRha2UgYSBxdWljayBsb29rIGJhY2sgYXQgdGhlIGBldGhubF9pbml0X3JlcGx5X2RhdGFgIGZ1bmN0aW9uIGl0c2VsZi4gQWx3YXlzIHdvcnRoIGEgZG91YmxlLWNoZWNrIG9uIGluaXRpYWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTAwOlx0c3RhdGljIHZvaWQgZXRobmxfaW5pdF9yZXBseV9kYXRhKHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhLFxuIDUwMTpcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgKm9wcyxcbiA1MDI6XHRcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiA1MDM6XHR7XG4gNTA0Olx0XHRtZW1zZXQocmVwbHlfZGF0YSwgMCwgb3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSk7XG4gNTA1Olx0XHRyZXBseV9kYXRhLVx1MDAzZWRldiA9IGRldjtcbiA1MDY6XHR9XG4gNTA3Olx0XG4gNTA4Olx0LyogZGVmYXVsdCAtXHUwMDNlZG9pdCgpIGhhbmRsZXIgZm9yIEdFVCB0eXBlIHJlcXVlc3RzICovXG4gNTA5Olx0c3RhdGljIGludCBldGhubF9kZWZhdWx0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxMTgKCQkJCQkJCW91dHB1dDogMzc3CgkJCQkJCQl0aG91Z2h0czogNzg2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipTdW1tYXJ5IG9mIHRoZSBDb2RlIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb25lIHRocm91Z2ggdGhpcyBwYXRjaCB3aXRoIGEgZmluZS10b290aCBjb21iLCBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gdGhlIG5ldyBldGh0b29sIG5ldGxpbmsgZnVuY3Rpb25hbGl0eS4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBhYm91dCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLiBIb3dldmVyLCBhZnRlciBjYXJlZnVsbHkgdHJhY2luZyB0aGUgY29kZSBleGVjdXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHBhdGhzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy4KCkhlcmUmIzM5O3MgbXkgcmVhc29uaW5nLiBGaXJzdCwgSSBjb25maXJtZWQgdGhhdCB0aGUgcHJpbWFyeSBgcmVwbHlfZGF0YWAgc3RydWN0dXJlIHVzZWQgZm9yIGJvdGggYElOVEZfQ0FQU19HRVRgIGFuZCBgUEhZX1RFU1RfR0VUYCBpcyBhbHdheXMgemVyb2VkIG91dCBiZWZvcmUgdGhlIGRyaXZlciYjMzk7cyBgZ2V0X2ludGZfY2Fwc2AgYW5kIGBnZXRfcGh5X3Rlc3RgIGNhbGxiYWNrcyBhcmUgaW52b2tlZC4gVGhlIGBldGhubF9pbml0X3JlcGx5X2RhdGFgIGZ1bmN0aW9uLCB3aGljaCBpcyBjYWxsZWQgaW4gbXVsdGlwbGUgcGxhY2VzLCBleHBsaWNpdGx5IHVzZXMgYG1lbXNldGAgdG8gemVybyB0aGUgZW50aXJlIGFsbG9jYXRlZCBtZW1vcnkgcmVnaW9uIChgb3BzLSZndDtyZXBseV9kYXRhX3NpemVgKS4gVGhpcyBpbmNsdWRlcyBhbGwgZmllbGRzIHdpdGhpbiBzdHJ1Y3R1cmVzIGxpa2UgYHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YWAgYW5kIGBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHNgLiBUaGlzIG1lYW5zIHRoYXQgZXZlbiBpZiB0aGUgZHJpdmVyICpmYWlscyogdG8gaW5pdGlhbGl6ZSBhIHNwZWNpZmljIGZpZWxkLCBpdCB3aWxsIGRlZmF1bHQgdG8gemVyby4KCkkgdGhlbiByZXZpc2l0ZWQgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YWAgd2hpY2ggSSBmb3VuZCBoYXMgYW4gZXh0cmEgYG1lbXNldGAgY2FsbCwgYW5kIHdoaWNoIGNhbiBiZSByZWR1bmRhbnQsIGJ1dCBkb2VzbiYjMzk7dCBjYXVzZSBhbnkgaXNzdWVzIGFzIGl0IGd1YXJhbnRlZXMgdGhlIHN0cnVjdCBpcyBpbmRlZWQgemVyb2VkLiBJIGFsc28gcmV2aWV3ZWQgYGV0aG5sX2FjdF9waHlfdGVzdGAgd2hpY2ggZGVmaW5lcyBgdGVzdCA9IHt9YCwgd2hpY2ggYWxzbyBndWFyYW50ZWVzIHRoZSBzdHJ1Y3QgaXMgemVyb2VkLiBBbHNvIGFueSBsb2NhbCBvciBzdGF0aWNhbGx5IGRlZmluZWQgc3RydWN0cyBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4KClRoZSBjb2RlIHVzZXMgaW5kaXZpZHVhbCBgbmxhX3B1dF8qYCBmdW5jdGlvbnMgKGUuZy4sIGBubGFfcHV0X3UzMmAsIGBubGFfcHV0X3N0cmluZ2AsIGBubGFfcHV0X2ZsYWdgLCBhbmQgYG5sYV9wdXRfdTY0XzY0Yml0YCkgdG8gc2VyaWFsaXplIHRoZSBkYXRhIGludG8gbmV0bGluayBtZXNzYWdlcy4gVGhlc2UgZnVuY3Rpb25zIGRlYWwgd2l0aCBjb3B5aW5nIHRoZSB2YWx1ZSBvZiBpbmRpdmlkdWFsIGZpZWxkcywgbm90IHRoZSBlbnRpcmUgc3RydWN0LiBUaGlzIGlzIGltcG9ydGFudDogZXZlbiBpZiB0aGVyZSBhcmUgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJ5dGVzIHdpdGhpbiBhIHN0cnVjdCwgdGhlc2UgcGFkZGluZyBieXRlcyB3b3VsZCBub3QgYmUgY29waWVkIGludG8gdGhlIG5ldGxpbmsgbWVzc2FnZS4gVGhlIGZ1bmN0aW9ucyBjb3B5IHRoZSBhY3R1YWwgZGF0YSBmaWVsZHMgb25seS4KCkkgYWxzbyBsb29rZWQgYXQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzLiBUaGlzIGNhbiBvY2N1ciwgZm9yIGluc3RhbmNlLCBpZiB0aGUgZHJpdmVyIHNldHMgYW4gaW52YWxpZCBgbnVtX2Jsb2Nrc2AgdmFsdWUsIHNvIHRoYXQgYSBsb29wIGluIGEgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiBnb2VzIHBhc3QgdGhlIHZhbGlkIGJsb2NrIHJhbmdlLiBUaGF0IHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4KCkkgZGlkIGlkZW50aWZ5IGEgbG9naWMgYnVnIHdpdGhpbiBgaW50Zl9jYXBzX2ZpbGxfcmVwbHlgLCB3aGVyZSBhbiB1bmNvbmRpdGlvbmFsIGBnb3RvIG5sYV9wdXRfZmFpbHVyZTtgIGlzIHByZXNlbnQuIEhvd2V2ZXIsIHRoaXMgaXMgYSBjb2RlIGJ1ZyB0aGF0IHdpbGwgY2F1c2UgdGhlIGZ1bmN0aW9uIHRvIGFsd2F5cyBmYWlsLiBCdXQsIGNydWNpYWxseSwgaXQmIzM5O3Mgbm90IGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gVGhlIG5ldGxpbmsgbWVzc2FnZSB3b3VsZCBiZSBjYW5jZWxlZCwgc28gbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgd291bGQgYmUgZXhwb3NlZC4KClRoZXJlZm9yZSwgc2luY2UgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwbGljaXRseSB6ZXJvZWQgYmVmb3JlIHVzZSwgYW5kIGRhdGEgZmllbGRzIGFyZSBpbmRpdmlkdWFsbHkgc2VyaWFsaXplZCBpbnRvIG5ldGxpbmsgbWVzc2FnZXMsIGFuZCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlzIGNhdWdodCBieSBLQVNBTiwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEkgY29uY2x1ZGUgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYCBmb3IgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmRzIChgSU5URl9DQVBTX0dFVGAsIGBQSFlfVEVTVF9HRVRgLCBgUEhZX1RFU1RfQUNUYCkgdG8gcXVlcnkgaW50ZXJmYWNlIGNhcGFiaWxpdGllcyBhbmQgY29uZmlndXJlIFBIWSB0ZXN0cy4gVGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgZXRodG9vbCBjb3JlIGFuZCB0aGUgZHJpdmVycyAoYHN0cnVjdCBldGh0b29sX2ludGZfY2Fwc2AgYW5kIGBzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdGApIGFyZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkuXG5cbkhvd2V2ZXIsIHRoZSBldGh0b29sIG5ldGxpbmsgZnJhbWV3b3JrIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplcyB0aGUgcmVwbHkgZGF0YSBzdHJ1Y3R1cmVzIHZpYSBgZXRobmxfaW5pdF9yZXBseV9kYXRhKClgICh3aGljaCBjYWxscyBgbWVtc2V0KHJlcGx5X2RhdGEsIDAsIG9wcy1cdTAwM2VyZXBseV9kYXRhX3NpemUpYCkgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUgZHJpdmVyIGNhbGxiYWNrcyAoZS5nLiwgYGdldF9pbnRmX2NhcHNgKS4gU2ltaWxhcmx5LCBgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhKClgIGV4cGxpY2l0bHkgY2FsbHMgYG1lbXNldChcdTAwMjZkYXRhLVx1MDAzZXRlc3QsIDAsIHNpemVvZihkYXRhLVx1MDAzZXRlc3QpKWAsIGFuZCBgZXRobmxfYWN0X3BoeV90ZXN0KClgIGluaXRpYWxpemVzIGl0cyBsb2NhbCBzdHJ1Y3Qgd2l0aCBgPSB7fWAuXG5cbkJlY2F1c2UgYWxsIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0YWNrIG9yIGhlYXAgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGV2ZW4gaWYgYSBkcml2ZXIgZmFpbHMgdG8gcG9wdWxhdGUgYWxsIGZpZWxkcy4gRnVydGhlcm1vcmUsIHRoZSBuZXRsaW5rIHJlc3BvbnNlIGlzIGNvbnN0cnVjdGVkIGJ5IHNlcmlhbGl6aW5nIGluZGl2aWR1YWwgZmllbGRzIHVzaW5nIGBubGFfcHV0X3UzMmAsIGBubGFfcHV0X3N0cmluZ2AsIGV0Yy4sIHJhdGhlciB0aGFuIGNvcHlpbmcgcmF3IHN0cnVjdHMsIHdoaWNoIGluaGVyZW50bHkgYXZvaWRzIGxlYWtpbmcgc3RydWN0IHBhZGRpbmcuXG5cbkFueSBwb3RlbnRpYWwgaXNzdWVzLCBzdWNoIGFzIGEgZHJpdmVyIHdyaXRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBgYmxvY2tzYCBhcnJheSBvciByZXR1cm5pbmcgYW4gaW52YWxpZCBgbnVtX2Jsb2Nrc2AgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzLCB3b3VsZCBiZSByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kcyAoYElOVEZfQ0FQU19HRVRgLCBgUEhZX1RFU1RfR0VUYCwgYFBIWV9URVNUX0FDVGApIHRvIHF1ZXJ5IGludGVyZmFjZSBjYXBhYmlsaXRpZXMgYW5kIGNvbmZpZ3VyZSBQSFkgdGVzdHMuIFRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGJldHdlZW4gdGhlIGV0aHRvb2wgY29yZSBhbmQgdGhlIGRyaXZlcnMgKGBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHNgIGFuZCBgc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3RgKSBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5LlxuXG5Ib3dldmVyLCB0aGUgZXRodG9vbCBuZXRsaW5rIGZyYW1ld29yayBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZXMgdGhlIHJlcGx5IGRhdGEgc3RydWN0dXJlcyB2aWEgYGV0aG5sX2luaXRfcmVwbHlfZGF0YSgpYCAod2hpY2ggY2FsbHMgYG1lbXNldChyZXBseV9kYXRhLCAwLCBvcHMtXHUwMDNlcmVwbHlfZGF0YV9zaXplKWApIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlIGRyaXZlciBjYWxsYmFja3MgKGUuZy4sIGBnZXRfaW50Zl9jYXBzYCkuIFNpbWlsYXJseSwgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YSgpYCBleHBsaWNpdGx5IGNhbGxzIGBtZW1zZXQoXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0LCAwLCBzaXplb2YoZGF0YS1cdTAwM2V0ZXN0KSlgLCBhbmQgYGV0aG5sX2FjdF9waHlfdGVzdCgpYCBpbml0aWFsaXplcyBpdHMgbG9jYWwgc3RydWN0IHdpdGggYD0ge31gLlxuXG5CZWNhdXNlIGFsbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSB1c2UsIHRoZXJlIGlzIG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBvciBoZWFwIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBldmVuIGlmIGEgZHJpdmVyIGZhaWxzIHRvIHBvcHVsYXRlIGFsbCBmaWVsZHMuIEZ1cnRoZXJtb3JlLCB0aGUgbmV0bGluayByZXNwb25zZSBpcyBjb25zdHJ1Y3RlZCBieSBzZXJpYWxpemluZyBpbmRpdmlkdWFsIGZpZWxkcyB1c2luZyBgbmxhX3B1dF91MzJgLCBgbmxhX3B1dF9zdHJpbmdgLCBldGMuLCByYXRoZXIgdGhhbiBjb3B5aW5nIHJhdyBzdHJ1Y3RzLCB3aGljaCBpbmhlcmVudGx5IGF2b2lkcyBsZWFraW5nIHN0cnVjdCBwYWRkaW5nLlxuXG5BbnkgcG90ZW50aWFsIGlzc3Vlcywgc3VjaCBhcyBhIGRyaXZlciB3cml0aW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGJsb2Nrc2AgYXJyYXkgb3IgcmV0dXJuaW5nIGFuIGludmFsaWQgYG51bV9ibG9ja3NgIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyByZWFkcywgd291bGQgYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA2OjE1LjMxODM4MTg2OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDE2MTY4NzQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFVEhUT09MX05FVExJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJldGhubF9hY3RfcGh5X3Rlc3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kcyAoYElOVEZfQ0FQU19HRVRgLCBgUEhZX1RFU1RfR0VUYCwgYFBIWV9URVNUX0FDVGApIHRvIHF1ZXJ5IGludGVyZmFjZSBjYXBhYmlsaXRpZXMgYW5kIGNvbmZpZ3VyZSBQSFkgdGVzdHMuIFRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGJldHdlZW4gdGhlIGV0aHRvb2wgY29yZSBhbmQgdGhlIGRyaXZlcnMgKGBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHNgIGFuZCBgc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3RgKSBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5Llxcblxcbkhvd2V2ZXIsIHRoZSBldGh0b29sIG5ldGxpbmsgZnJhbWV3b3JrIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplcyB0aGUgcmVwbHkgZGF0YSBzdHJ1Y3R1cmVzIHZpYSBgZXRobmxfaW5pdF9yZXBseV9kYXRhKClgICh3aGljaCBjYWxscyBgbWVtc2V0KHJlcGx5X2RhdGEsIDAsIG9wcy1cXHUwMDNlcmVwbHlfZGF0YV9zaXplKWApIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlIGRyaXZlciBjYWxsYmFja3MgKGUuZy4sIGBnZXRfaW50Zl9jYXBzYCkuIFNpbWlsYXJseSwgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YSgpYCBleHBsaWNpdGx5IGNhbGxzIGBtZW1zZXQoXFx1MDAyNmRhdGEtXFx1MDAzZXRlc3QsIDAsIHNpemVvZihkYXRhLVxcdTAwM2V0ZXN0KSlgLCBhbmQgYGV0aG5sX2FjdF9waHlfdGVzdCgpYCBpbml0aWFsaXplcyBpdHMgbG9jYWwgc3RydWN0IHdpdGggYD0ge31gLlxcblxcbkJlY2F1c2UgYWxsIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0YWNrIG9yIGhlYXAgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGV2ZW4gaWYgYSBkcml2ZXIgZmFpbHMgdG8gcG9wdWxhdGUgYWxsIGZpZWxkcy4gRnVydGhlcm1vcmUsIHRoZSBuZXRsaW5rIHJlc3BvbnNlIGlzIGNvbnN0cnVjdGVkIGJ5IHNlcmlhbGl6aW5nIGluZGl2aWR1YWwgZmllbGRzIHVzaW5nIGBubGFfcHV0X3UzMmAsIGBubGFfcHV0X3N0cmluZ2AsIGV0Yy4sIHJhdGhlciB0aGFuIGNvcHlpbmcgcmF3IHN0cnVjdHMsIHdoaWNoIGluaGVyZW50bHkgYXZvaWRzIGxlYWtpbmcgc3RydWN0IHBhZGRpbmcuXFxuXFxuQW55IHBvdGVudGlhbCBpc3N1ZXMsIHN1Y2ggYXMgYSBkcml2ZXIgd3JpdGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGBibG9ja3NgIGFycmF5IG9yIHJldHVybmluZyBhbiBpbnZhbGlkIGBudW1fYmxvY2tzYCBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMsIHdvdWxkIGJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbmV3IGV0aHRvb2wgbmV0bGluayBtZXNzYWdlcyAoRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVCwgRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULCBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QpIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljaWVzLiBFdmVuIHRob3VnaCBubyBkcml2ZXJzIGN1cnJlbnRseSBpbXBsZW1lbnQgdGhlIHVuZGVybHlpbmcgZXRodG9vbCBvcGVyYXRpb25zLCB0aGUgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcsIHBvbGljeSB2YWxpZGF0aW9uLCBhbmQgaW5pdGlhbCBoYW5kbGVyIGZ1bmN0aW9ucyAobGlrZSBldGhubF9hY3RfcGh5X3Rlc3QpIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyLXNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjoxNS4zMTgzODYzOThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMTg3OTY2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ1MDZkZDEwODYzOGU1ZDc3ZDIzZjMwZWZkZjJjZjdmYTg2ZGVlOWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDU6MDY6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWxcXG5pbmRleCA1ZGQ0ZDFiNWQ5NGJiLi4zNjFlYjNjNjY1NzcwIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXFxuQEAgLTIxMCw2ICsyMTAsNTUgQEAgZGVmaW5pdGlvbnM6XFxuICAgICAgIC1cXG4gICAgICAgICBuYW1lOiBkaXNjYXJkXFxuICAgICAgICAgdmFsdWU6IDMxXFxuKyAgLVxcbisgICAgbmFtZTogaW50Zi1jb21wb25lbnRcXG4rICAgIHR5cGU6IGVudW1cXG4rICAgIGRvYzogVHlwZSBvZiBoYXJkd2FyZSBjb21wb25lbnQgaW4gdGhlIGludGVyZmFjZS5cXG4rICAgIGVudHJpZXM6XFxuKyAgICAgIC0gbWFjXFxuKyAgICAgIC0gcGh5XFxuKyAgICAgIC0gbW9kdWxlXFxuKyAgLVxcbisgICAgbmFtZTogaW50Zi1zdWJsYXllclxcbisgICAgdHlwZTogZW51bVxcbisgICAgZG9jOiA4MDIuMyBzdWJsYXllciB3aXRoaW4gYSBjb21wb25lbnQuXFxuKyAgICBlbnRyaWVzOlxcbisgICAgICAtIG5vbmVcXG4rICAgICAgLSByc1xcbisgICAgICAtIHBjc1xcbisgICAgICAtIGZlY1xcbisgICAgICAtIHBtYVxcbisgICAgICAtIHBtZFxcbisgIC1cXG4rICAgIG5hbWU6IHBoeS10ZXN0LXBhdHRlcm5cXG4rICAgIHR5cGU6IGVudW1cXG4rICAgIGRvYzogUEhZIHRlc3QgcGF0dGVybiB0eXBlcyBmb3IgUFJCUyBnZW5lcmF0aW9uL2NoZWNraW5nLlxcbisgICAgZW50cmllczpcXG4rICAgICAgLSBvZmZcXG4rICAgICAgLSBwcmJzN1xcbisgICAgICAtIHByYnM5XFxuKyAgICAgIC0gcHJiczExXFxuKyAgICAgIC0gcHJiczEzXFxuKyAgICAgIC0gcHJiczE1XFxuKyAgICAgIC0gcHJiczIzXFxuKyAgICAgIC0gcHJiczMxXFxuKyAgICAgIC0gc3NwcnFcXG4rICAgICAgLSBwcmJzMTNxXFxuKyAgICAgIC0gcHJiczMxcVxcbisgICAgICAtIHNxdWFyZS1ucnpcXG4rICAgICAgLSBzcXVhcmUtcGFtNFxcbisgICAgICAtIHR4LWxpbmVhcml0eVxcbisgICAgICAtIHNjcmFtYmxlZC1pZGxlXFxuKyAgICAgIC0gazI4LTVcXG4rICAgICAgLSBrMjgtN1xcbisgIC1cXG4rICAgIG5hbWU6IHBoeS10ZXN0LWFjdGlvblxcbisgICAgdHlwZTogZW51bVxcbisgICAgZG9jOiBCRVJUIGNvbnRyb2wgYWN0aW9ucy5cXG4rICAgIGVudHJpZXM6XFxuKyAgICAgIC0gbm9uZVxcbisgICAgICAtIHN0YXJ0XFxuKyAgICAgIC0gc3RvcFxcbiBcXG4gYXR0cmlidXRlLXNldHM6XFxuICAgLVxcbkBAIC0xOTA1LDYgKzE5NTQsMTE1IEBAIGF0dHJpYnV0ZS1zZXRzOlxcbiAgICAgICAgIG5hbWU6IGxpbmtcXG4gICAgICAgICB0eXBlOiBuZXN0XFxuICAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IG1zZS1zbmFwc2hvdFxcbisgIC1cXG4rICAgIG5hbWU6IGludGYtYmxvY2tcXG4rICAgIGRvYzogQSBzaW5nbGUgZnVuY3Rpb25hbCBibG9jayBpbiB0aGUgaW50ZXJmYWNlLlxcbisgICAgYXR0cmlidXRlczpcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGlkXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBjb21wb25lbnRcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBlbnVtOiBpbnRmLWNvbXBvbmVudFxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogc3VibGF5ZXJcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBlbnVtOiBpbnRmLXN1YmxheWVyXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBpbnN0YW5jZVxcbisgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAgIGRvYzogfFxcbisgICAgICAgICAgSWRlbnRpZmllcyB0aGUgaGFyZHdhcmUgZW50aXR5IHdoZW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mXFxuKyAgICAgICAgICB0aGUgc2FtZSBjb21wb25lbnQgZXhpc3QgaW4gdGhlIGludGVyZmFjZS4gVGhlIGRyaXZlclxcbisgICAgICAgICAgYXNzaWducyBpbnN0YW5jZSBudW1iZXJzIHNlcXVlbnRpYWxseSBiYXNlZCBvbiBwb3NpdGlvbiBpblxcbisgICAgICAgICAgdGhlIHBoeXNpY2FsIHBhdGguIERlZmF1bHRzIHRvIDAgd2hlbiBvbmx5IG9uZSBpbnN0YW5jZSBvZlxcbisgICAgICAgICAgYSBnaXZlbiBjb21wb25lbnQgZXhpc3RzLlxcbisgICAgICAgICAgRm9yIFBIWTogaW5zdGFuY2UgMCBpcyB0aGUgaW50ZXJuYWwvaG9zdC1zaWRlIFBIWSxcXG4rICAgICAgICAgIGluc3RhbmNlIDEgaXMgYW4gZXh0ZXJuYWwgUEhZIGZ1cnRoZXIgYWxvbmcgdGhlIHBhdGhcXG4rICAgICAgICAgIHRvd2FyZCB0aGUgbGluZSBzaWRlLlxcbisgICAgICAgICAgRm9yIE1BQzogaW5zdGFuY2UgMCBpcyB0aGUgaG9zdC1mYWNpbmcgTUFDLCBpbnN0YW5jZSAxIGlzXFxuKyAgICAgICAgICBhIHNlY29uZGFyeSBNQUMgZnVydGhlciBhbG9uZyB0aGUgZGF0YSBwYXRoIChlLmcuLCBiZWhpbmRcXG4rICAgICAgICAgIGFuIGVtYmVkZGVkIHN3aXRjaCkuXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBuYW1lXFxuKyAgICAgICAgdHlwZTogc3RyaW5nXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBkZXB0aFxcbisgICAgICAgIHR5cGU6IHU4XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBsYW5lc1xcbisgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogbG9vcGJhY2stc3VwcG9ydGVkXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBzdXBwb3J0ZWQtdHgtcGF0dGVybnNcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IHN1cHBvcnRlZC1yeC1wYXR0ZXJuc1xcbisgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogZXJyb3ItaW5qZWN0LXN1cHBvcnRlZFxcbisgICAgICAgIHR5cGU6IGZsYWdcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGJlcnQtc3VwcG9ydGVkXFxuKyAgICAgICAgdHlwZTogZmxhZ1xcbisgIC1cXG4rICAgIG5hbWU6IGludGYtY2Fwc1xcbisgICAgZG9jOiBJbnRlcmZhY2UgY2FwYWJpbGl0aWVzIG1lc3NhZ2UuXFxuKyAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogaGVhZGVyXFxuKyAgICAgICAgdHlwZTogbmVzdFxcbisgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBoZWFkZXJcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGJsb2Nrc1xcbisgICAgICAgIHR5cGU6IG5lc3RcXG4rICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogaW50Zi1ibG9ja1xcbisgICAgICAgIG11bHRpLWF0dHI6IHRydWVcXG4rICAtXFxuKyAgICBuYW1lOiBwaHktdGVzdFxcbisgICAgZG9jOiBQSFkgdGVzdCBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMuXFxuKyAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogaGVhZGVyXFxuKyAgICAgICAgdHlwZTogbmVzdFxcbisgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBoZWFkZXJcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGJsb2NrLWlkXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBsYW5lXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiB0eC1wYXR0ZXJuXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgZW51bTogcGh5LXRlc3QtcGF0dGVyblxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogcngtcGF0dGVyblxcbisgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAgIGVudW06IHBoeS10ZXN0LXBhdHRlcm5cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGJlcnQtYWN0aW9uXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgZW51bTogcGh5LXRlc3QtYWN0aW9uXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBpbmplY3QtZXJyb3ItY291bnRcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGFjdGl2ZS10ZXN0c1xcbisgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAgIGRvYzogQml0bWFzayBvZiBjdXJyZW50bHkgcnVubmluZyB0ZXN0cyAoYml0IDAgPSBCRVJUKS5cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGNoZWNrZXItbG9ja1xcbisgICAgICAgIHR5cGU6IHU4XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBlcnJvci1jb3VudFxcbisgICAgICAgIHR5cGU6IHU2NFxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogdG90YWwtYml0cy1zZW50XFxuKyAgICAgICAgdHlwZTogdTY0XFxuIFxcbiBvcGVyYXRpb25zOlxcbiAgIGVudW0tbW9kZWw6IGRpcmVjdGlvbmFsXFxuQEAgLTI4NTksNiArMzAxNyw1NCBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgICAgICAtIHdvcnN0LWNoYW5uZWxcXG4gICAgICAgICAgICAgLSBsaW5rXFxuICAgICAgIGR1bXA6ICptc2UtZ2V0LW9wXFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IGludGYtY2Fwcy1nZXRcXG4rICAgICAgZG9jOiBHZXQgaW50ZXJmYWNlIGNhcGFiaWxpdGllcyAoZnVuY3Rpb25hbCBibG9jayBsYXlvdXQpLlxcbisgICAgICBhdHRyaWJ1dGUtc2V0OiBpbnRmLWNhcHNcXG4rICAgICAgZG86IFxcdTAwMjZpbnRmLWNhcHMtZ2V0LW9wXFxuKyAgICAgICAgcmVxdWVzdDpcXG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XFxuKyAgICAgICAgICAgIC0gaGVhZGVyXFxuKyAgICAgICAgcmVwbHk6XFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAgICAgICAtIGhlYWRlclxcbisgICAgICAgICAgICAtIGJsb2Nrc1xcbisgICAgICBkdW1wOiAqaW50Zi1jYXBzLWdldC1vcFxcbisgICAgLVxcbisgICAgICBuYW1lOiBwaHktdGVzdC1nZXRcXG4rICAgICAgZG9jOiBHZXQgUEhZIHRlc3Qgc3RhdHVzIChwYXR0ZXJucywgQkVSVCBjb3VudGVycykuXFxuKyAgICAgIGF0dHJpYnV0ZS1zZXQ6IHBoeS10ZXN0XFxuKyAgICAgIGRvOlxcbisgICAgICAgIHJlcXVlc3Q6XFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAgICAgICAtIGhlYWRlclxcbisgICAgICAgICAgICAtIGJsb2NrLWlkXFxuKyAgICAgICAgICAgIC0gbGFuZVxcbisgICAgICAgIHJlcGx5OlxcbisgICAgICAgICAgYXR0cmlidXRlczpcXG4rICAgICAgICAgICAgLSBoZWFkZXJcXG4rICAgICAgICAgICAgLSBibG9jay1pZFxcbisgICAgICAgICAgICAtIGxhbmVcXG4rICAgICAgICAgICAgLSB0eC1wYXR0ZXJuXFxuKyAgICAgICAgICAgIC0gcngtcGF0dGVyblxcbisgICAgICAgICAgICAtIGFjdGl2ZS10ZXN0c1xcbisgICAgICAgICAgICAtIGNoZWNrZXItbG9ja1xcbisgICAgICAgICAgICAtIGVycm9yLWNvdW50XFxuKyAgICAgICAgICAgIC0gdG90YWwtYml0cy1zZW50XFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IHBoeS10ZXN0LWFjdFxcbisgICAgICBkb2M6IENvbmZpZ3VyZSBQSFkgdGVzdCAoc2V0IHBhdHRlcm5zLCBzdGFydC9zdG9wIEJFUlQsIGluamVjdCBlcnJvcnMpLlxcbisgICAgICBhdHRyaWJ1dGUtc2V0OiBwaHktdGVzdFxcbisgICAgICBkbzpcXG4rICAgICAgICByZXF1ZXN0OlxcbisgICAgICAgICAgYXR0cmlidXRlczpcXG4rICAgICAgICAgICAgLSBoZWFkZXJcXG4rICAgICAgICAgICAgLSBibG9jay1pZFxcbisgICAgICAgICAgICAtIGxhbmVcXG4rICAgICAgICAgICAgLSB0eC1wYXR0ZXJuXFxuKyAgICAgICAgICAgIC0gcngtcGF0dGVyblxcbisgICAgICAgICAgICAtIGJlcnQtYWN0aW9uXFxuKyAgICAgICAgICAgIC0gaW5qZWN0LWVycm9yLWNvdW50XFxuIFxcbiBtY2FzdC1ncm91cHM6XFxuICAgbGlzdDpcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxcbmluZGV4IDEyNjgzYjVkMTI1ZTQuLmY5NzQ4ZTczOWYwM2UgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxcbkBAIC0xMTk3LDYgKzExOTcsOTIgQEAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8ge1xcbiAgKiBTZWUgXFx1MDAyNnN0cnVjdCBuZXRfZGV2aWNlIGFuZCBcXHUwMDI2c3RydWN0IG5ldF9kZXZpY2Vfb3BzIGZvciBkb2N1bWVudGF0aW9uXFxuICAqIG9mIHRoZSBnZW5lcmljIG5ldGRldiBmZWF0dXJlcyBpbnRlcmZhY2UuXFxuICAqL1xcbitcXG4rI2RlZmluZSBJTlRGX0NBUFNfTUFYX0JMT0NLU1xcdDE2XFxuKyNkZWZpbmUgSU5URl9CTE9DS19OQU1FX0xFTlxcdDMyXFxuK1xcbisjZGVmaW5lIExPT1BCQUNLX1NVUFBPUlRfTE9DQUxcXHRCSVQoMClcXG4rI2RlZmluZSBMT09QQkFDS19TVVBQT1JUX1JFTU9URVxcdEJJVCgxKVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBldGh0b29sX2ludGZfYmxvY2sgLSBTaW5nbGUgZnVuY3Rpb25hbCBibG9jayBpbiB0aGUgaW50ZXJmYWNlXFxuKyAqIEBpZDogVW5pcXVlIGJsb2NrIGlkZW50aWZpZXJcXG4rICogQGNvbXBvbmVudDogSGFyZHdhcmUgY29tcG9uZW50IChNQUMsIFBIWSwgTU9EVUxFKVxcbisgKiBAc3VibGF5ZXI6IDgwMi4zIHN1YmxheWVyIChSUywgUENTLCBGRUMsIFBNQSwgUE1ELCBvciBOT05FKVxcbisgKiBAaW5zdGFuY2U6IEluZGV4IHdoZW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHNhbWUgY29tcG9uZW50IGV4aXN0XFxuKyAqIEBuYW1lOiBEcml2ZXItY2hvc2VuIGxhYmVsXFxuKyAqIEBkZXB0aDogT3JkZXJpbmcgd2l0aGluIHNhbWUgKGNvbXBvbmVudCwgc3VibGF5ZXIpIHR1cGxlXFxuKyAqIEBsYW5lczogTnVtYmVyIG9mIGxhbmVzXFxuKyAqIEBsb29wYmFja19zdXBwb3J0ZWQ6IEJpdG1hc2sgb2Ygc3VwcG9ydGVkIGxvb3BiYWNrIGRpcmVjdGlvbnNcXG4rICogQHN1cHBvcnRlZF90eF9wYXR0ZXJuczogQml0bWFzayBvZiBwYXR0ZXJucyB0aGlzIGJsb2NrIGNhbiBnZW5lcmF0ZVxcbisgKiBAc3VwcG9ydGVkX3J4X3BhdHRlcm5zOiBCaXRtYXNrIG9mIHBhdHRlcm5zIHRoaXMgYmxvY2sgY2FuIGNoZWNrXFxuKyAqIEBlcnJvcl9pbmplY3Rfc3VwcG9ydGVkOiBCbG9jayBzdXBwb3J0cyBiaXQgZXJyb3IgaW5qZWN0aW9uXFxuKyAqIEBiZXJ0X3N1cHBvcnRlZDogQmxvY2sgc3VwcG9ydHMgQkVSVCBjb3VudGVyc1xcbisgKi9cXG4rc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayB7XFxuK1xcdHUzMiBpZDtcXG4rXFx0ZW51bSBpbnRmX2NvbXBvbmVudCBjb21wb25lbnQ7XFxuK1xcdGVudW0gaW50Zl9zdWJsYXllciBzdWJsYXllcjtcXG4rXFx0dTMyIGluc3RhbmNlO1xcbitcXHRjaGFyIG5hbWVbSU5URl9CTE9DS19OQU1FX0xFTl07XFxuK1xcdHU4IGRlcHRoO1xcbitcXHR1MzIgbGFuZXM7XFxuK1xcdHUzMiBsb29wYmFja19zdXBwb3J0ZWQ7XFxuK1xcdHUzMiBzdXBwb3J0ZWRfdHhfcGF0dGVybnM7XFxuK1xcdHUzMiBzdXBwb3J0ZWRfcnhfcGF0dGVybnM7XFxuK1xcdGJvb2wgZXJyb3JfaW5qZWN0X3N1cHBvcnRlZDtcXG4rXFx0Ym9vbCBiZXJ0X3N1cHBvcnRlZDtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHMgLSBJbnRlcmZhY2UgY2FwYWJpbGl0aWVzIChhbGwgYmxvY2tzKVxcbisgKiBAbnVtX2Jsb2NrczogTnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4gYmxvY2tzW11cXG4rICogQGJsb2NrczogQXJyYXkgb2YgZnVuY3Rpb25hbCBibG9ja3NcXG4rICovXFxuK3N0cnVjdCBldGh0b29sX2ludGZfY2FwcyB7XFxuK1xcdHUzMiBudW1fYmxvY2tzO1xcbitcXHRzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrIGJsb2Nrc1tJTlRGX0NBUFNfTUFYX0JMT0NLU107XFxuK307XFxuK1xcbisvKiBCaXRtYXNrIG9mIHdoaWNoIGV0aHRvb2xfcGh5X3Rlc3QgZmllbGRzIHdlcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgKi9cXG4rI2RlZmluZSBQSFlfVEVTVF9DTURfVFhfUEFUVEVSTlxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFBIWV9URVNUX0NNRF9SWF9QQVRURVJOXFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgUEhZX1RFU1RfQ01EX0JFUlRfQUNUSU9OXFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgUEhZX1RFU1RfQ01EX0lOSkVDVF9DT1VOVFxcdFxcdEJJVCgzKVxcbisjZGVmaW5lIFBIWV9URVNUX0NNRF9MQU5FXFx0XFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgUEhZX1RFU1RfQ01EX0JMT0NLX0lEXFx0XFx0XFx0QklUKDUpXFxuK1xcbisvKiBCaXRtYXNrIG9mIGN1cnJlbnRseSBhY3RpdmUgdGVzdHMgKHJlYWQtb25seSkgKi9cXG4rI2RlZmluZSBQSFlfVEVTVF9BQ1RJVkVfQkVSVFxcdFxcdEJJVCgwKVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBldGh0b29sX3BoeV90ZXN0IC0gUEhZIHRlc3QgY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzXFxuKyAqIEBjbWQ6IEJpdG1hc2sgb2Ygd2hpY2ggZmllbGRzIGFyZSB2YWxpZCAoUEhZX1RFU1RfQ01EXyopXFxuKyAqIEBibG9ja19pZDogQmxvY2sgdG8gb3BlcmF0ZSBvbiAoZnJvbSBpbnRmLWNhcHMtZ2V0KVxcbisgKiBAbGFuZTogTGFuZSBudW1iZXIgKDAtYmFzZWQpXFxuKyAqIEB0eF9wYXR0ZXJuOiBUWCBwYXR0ZXJuIGdlbmVyYXRvciBzZXR0aW5nXFxuKyAqIEByeF9wYXR0ZXJuOiBSWCBwYXR0ZXJuIGNoZWNrZXIgc2V0dGluZ1xcbisgKiBAYmVydF9hY3Rpb246IEJFUlQgc3RhcnQvc3RvcCBjb250cm9sXFxuKyAqIEBpbmplY3RfZXJyb3JfY291bnQ6IE51bWJlciBvZiBlcnJvcnMgdG8gaW5qZWN0XFxuKyAqIEBhY3RpdmVfdGVzdHM6IEJpdG1hc2sgb2YgcnVubmluZyB0ZXN0cyAoUEhZX1RFU1RfQUNUSVZFXyopXFxuKyAqIEBjaGVja2VyX2xvY2s6IFJYIGNoZWNrZXIgbG9jayBzdGF0dXMgKHJlYWQtb25seSlcXG4rICogQGVycm9yX2NvdW50OiBCRVJUIGVycm9yIGNvdW50ZXIgKHJlYWQtb25seSlcXG4rICogQHRvdGFsX2JpdHNfc2VudDogQkVSVCB0b3RhbCBiaXRzIGNvdW50ZXIgKHJlYWQtb25seSlcXG4rICovXFxuK3N0cnVjdCBldGh0b29sX3BoeV90ZXN0IHtcXG4rXFx0dTMyIGNtZDtcXG4rXFx0dTMyIGJsb2NrX2lkO1xcbitcXHR1MzIgbGFuZTtcXG4rXFx0ZW51bSBwaHlfdGVzdF9wYXR0ZXJuIHR4X3BhdHRlcm47XFxuK1xcdGVudW0gcGh5X3Rlc3RfcGF0dGVybiByeF9wYXR0ZXJuO1xcbitcXHRlbnVtIHBoeV90ZXN0X2FjdGlvbiBiZXJ0X2FjdGlvbjtcXG4rXFx0dTMyIGluamVjdF9lcnJvcl9jb3VudDtcXG4rXFx0dTMyIGFjdGl2ZV90ZXN0cztcXG4rXFx0dTggY2hlY2tlcl9sb2NrO1xcbitcXHR1NjQgZXJyb3JfY291bnQ7XFxuK1xcdHU2NCB0b3RhbF9iaXRzX3NlbnQ7XFxuK307XFxuK1xcbiBzdHJ1Y3QgZXRodG9vbF9vcHMge1xcbiBcXHR1MzIgICAgIHN1cHBvcnRlZF9pbnB1dF94ZnJtOjg7XFxuIFxcdHUzMiAgICAgY2FwX2xpbmtfbGFuZXNfc3VwcG9ydGVkOjE7XFxuQEAgLTEzNTQsNiArMTQ0MCwxMiBAQCBzdHJ1Y3QgZXRodG9vbF9vcHMge1xcbiBcXHRpbnRcXHQoKnNldF9tbSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfbW1fY2ZnICpjZmcsXFxuIFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gXFx0dm9pZFxcdCgqZ2V0X21tX3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqc3RhdHMpO1xcbitcXHRpbnRcXHQoKmdldF9pbnRmX2NhcHMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHMgKmNhcHMpO1xcbitcXHRpbnRcXHQoKmdldF9waHlfdGVzdCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnRlc3QpO1xcbitcXHRpbnRcXHQoKnNldF9waHlfdGVzdCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnRlc3QpO1xcbiB9O1xcbiBcXG4gaW50IGV0aHRvb2xfY2hlY2tfb3BzKGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcXG5pbmRleCA4MTM0YmFmNzg2MGYzLi4zMTAyYmI3YmEzMzdmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXFxuQEAgLTg5Myw2ICs4OTMsOSBAQCBlbnVtIHtcXG4gXFx0RVRIVE9PTF9NU0dfUlNTX0NSRUFURV9BQ1QsXFxuIFxcdEVUSFRPT0xfTVNHX1JTU19ERUxFVEVfQUNULFxcbiBcXHRFVEhUT09MX01TR19NU0VfR0VULFxcbitcXHRFVEhUT09MX01TR19JTlRGX0NBUFNfR0VULFxcbitcXHRFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsXFxuK1xcdEVUSFRPT0xfTVNHX1BIWV9URVNUX0FDVCxcXG4gXFxuIFxcdF9fRVRIVE9PTF9NU0dfVVNFUl9DTlQsXFxuIFxcdEVUSFRPT0xfTVNHX1VTRVJfTUFYID0gKF9fRVRIVE9PTF9NU0dfVVNFUl9DTlQgLSAxKVxcbkBAIC05NTQsNiArOTU3LDggQEAgZW51bSB7XFxuIFxcdEVUSFRPT0xfTVNHX1JTU19DUkVBVEVfTlRGLFxcbiBcXHRFVEhUT09MX01TR19SU1NfREVMRVRFX05URixcXG4gXFx0RVRIVE9PTF9NU0dfTVNFX0dFVF9SRVBMWSxcXG4rXFx0RVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVF9SRVBMWSxcXG4rXFx0RVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VUX1JFUExZLFxcbiBcXG4gXFx0X19FVEhUT09MX01TR19LRVJORUxfQ05ULFxcbiBcXHRFVEhUT09MX01TR19LRVJORUxfTUFYID0gKF9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCAtIDEpXFxuQEAgLTk2MSw0ICs5NjYsMTAzIEBAIGVudW0ge1xcbiBcXG4gI2RlZmluZSBFVEhUT09MX01DR1JQX01PTklUT1JfTkFNRVxcdFxcXCJtb25pdG9yXFxcIlxcbiBcXG4rLyogSW50ZXJmYWNlIGNvbXBvbmVudCB0eXBlcyAqL1xcbitlbnVtIGludGZfY29tcG9uZW50IHtcXG4rXFx0SU5URl9DT01QT05FTlRfTUFDLFxcbitcXHRJTlRGX0NPTVBPTkVOVF9QSFksXFxuK1xcdElOVEZfQ09NUE9ORU5UX01PRFVMRSxcXG4rfTtcXG4rXFxuKy8qIEludGVyZmFjZSBzdWJsYXllciB0eXBlcyAqL1xcbitlbnVtIGludGZfc3VibGF5ZXIge1xcbitcXHRJTlRGX1NVQkxBWUVSX05PTkUsXFxuK1xcdElOVEZfU1VCTEFZRVJfUlMsXFxuK1xcdElOVEZfU1VCTEFZRVJfUENTLFxcbitcXHRJTlRGX1NVQkxBWUVSX0ZFQyxcXG4rXFx0SU5URl9TVUJMQVlFUl9QTUEsXFxuK1xcdElOVEZfU1VCTEFZRVJfUE1ELFxcbit9O1xcbitcXG4rLyogQXR0cmlidXRlcyBvZiBhIHNpbmdsZSBpbnRlcmZhY2UgYmxvY2sgKi9cXG4rZW51bSB7XFxuK1xcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX0lELFxcbitcXHRFVEhUT09MX0FfSU5URl9CTE9DS19DT01QT05FTlQsXFxuK1xcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX1NVQkxBWUVSLFxcbitcXHRFVEhUT09MX0FfSU5URl9CTE9DS19JTlNUQU5DRSxcXG4rXFx0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfTkFNRSxcXG4rXFx0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfREVQVEgsXFxuK1xcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX0xBTkVTLFxcbitcXHRFVEhUT09MX0FfSU5URl9CTE9DS19MT09QQkFDS19TVVBQT1JURUQsXFxuK1xcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX1RYX1BBVFRFUk5TLFxcbitcXHRFVEhUT09MX0FfSU5URl9CTE9DS19SWF9QQVRURVJOUyxcXG4rXFx0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfRVJST1JfSU5KRUNULFxcbitcXHRFVEhUT09MX0FfSU5URl9CTE9DS19CRVJULFxcbitcXG4rXFx0X19FVEhUT09MX0FfSU5URl9CTE9DS19DTlQsXFxuK1xcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX01BWCA9IChfX0VUSFRPT0xfQV9JTlRGX0JMT0NLX0NOVCAtIDEpXFxuK307XFxuK1xcbisvKiBBdHRyaWJ1dGVzIG9mIGludGYtY2Fwcy1nZXQgbWVzc2FnZSAqL1xcbitlbnVtIHtcXG4rXFx0RVRIVE9PTF9BX0lOVEZfQ0FQU19VTlNQRUMsXFxuK1xcdEVUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSLFxcbitcXHRFVEhUT09MX0FfSU5URl9DQVBTX0JMT0NLUyxcXG4rXFxuK1xcdF9fRVRIVE9PTF9BX0lOVEZfQ0FQU19DTlQsXFxuK1xcdEVUSFRPT0xfQV9JTlRGX0NBUFNfTUFYID0gKF9fRVRIVE9PTF9BX0lOVEZfQ0FQU19DTlQgLSAxKVxcbit9O1xcbitcXG4rLyogUEhZIHRlc3QgcGF0dGVybiB0eXBlcyAqL1xcbitlbnVtIHBoeV90ZXN0X3BhdHRlcm4ge1xcbitcXHRQSFlfVEVTVF9QQVRURVJOX09GRixcXG4rXFx0UEhZX1RFU1RfUEFUVEVSTl9QUkJTNyxcXG4rXFx0UEhZX1RFU1RfUEFUVEVSTl9QUkJTOSxcXG4rXFx0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMTEsXFxuK1xcdFBIWV9URVNUX1BBVFRFUk5fUFJCUzEzLFxcbitcXHRQSFlfVEVTVF9QQVRURVJOX1BSQlMxNSxcXG4rXFx0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMjMsXFxuK1xcdFBIWV9URVNUX1BBVFRFUk5fUFJCUzMxLFxcbitcXHRQSFlfVEVTVF9QQVRURVJOX1NTUFJRLFxcbitcXHRQSFlfVEVTVF9QQVRURVJOX1BSQlMxM1EsXFxuK1xcdFBIWV9URVNUX1BBVFRFUk5fUFJCUzMxUSxcXG4rXFx0UEhZX1RFU1RfUEFUVEVSTl9TUVVBUkVfTlJaLFxcbitcXHRQSFlfVEVTVF9QQVRURVJOX1NRVUFSRV9QQU00LFxcbitcXHRQSFlfVEVTVF9QQVRURVJOX1RYX0xJTkVBUklUWSxcXG4rXFx0UEhZX1RFU1RfUEFUVEVSTl9TQ1JBTUJMRURfSURMRSxcXG4rXFx0UEhZX1RFU1RfUEFUVEVSTl9LMjhfNSxcXG4rXFx0UEhZX1RFU1RfUEFUVEVSTl9LMjhfNyxcXG4rXFxuK1xcdF9fUEhZX1RFU1RfUEFUVEVSTl9DT1VOVCxcXG4rXFx0UEhZX1RFU1RfUEFUVEVSTl9NQVggPSAoX19QSFlfVEVTVF9QQVRURVJOX0NPVU5UIC0gMSlcXG4rfTtcXG4rXFxuKy8qIFBIWSB0ZXN0IEJFUlQgYWN0aW9ucyAqL1xcbitlbnVtIHBoeV90ZXN0X2FjdGlvbiB7XFxuK1xcdFBIWV9URVNUX0FDVElPTl9OT05FLFxcbitcXHRQSFlfVEVTVF9BQ1RJT05fU1RBUlQsXFxuK1xcdFBIWV9URVNUX0FDVElPTl9TVE9QLFxcbitcXG4rXFx0X19QSFlfVEVTVF9BQ1RJT05fQ09VTlQsXFxuK1xcdFBIWV9URVNUX0FDVElPTl9NQVggPSAoX19QSFlfVEVTVF9BQ1RJT05fQ09VTlQgLSAxKVxcbit9O1xcbitcXG4rLyogQXR0cmlidXRlcyBvZiBwaHktdGVzdC1nZXQgLyBwaHktdGVzdC1hY3QgbWVzc2FnZXMgKi9cXG4rZW51bSB7XFxuK1xcdEVUSFRPT0xfQV9QSFlfVEVTVF9VTlNQRUMsXFxuK1xcdEVUSFRPT0xfQV9QSFlfVEVTVF9IRUFERVIsXFxuK1xcdEVUSFRPT0xfQV9QSFlfVEVTVF9CTE9DS19JRCxcXG4rXFx0RVRIVE9PTF9BX1BIWV9URVNUX0xBTkUsXFxuK1xcdEVUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOLFxcbitcXHRFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTixcXG4rXFx0RVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OLFxcbitcXHRFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5ULFxcbitcXHRFVEhUT09MX0FfUEhZX1RFU1RfQUNUSVZFX1RFU1RTLFxcbitcXHRFVEhUT09MX0FfUEhZX1RFU1RfQ0hFQ0tFUl9MT0NLLFxcbitcXHRFVEhUT09MX0FfUEhZX1RFU1RfRVJST1JfQ09VTlQsXFxuK1xcdEVUSFRPT0xfQV9QSFlfVEVTVF9UT1RBTF9CSVRTX1NFTlQsXFxuK1xcbitcXHRfX0VUSFRPT0xfQV9QSFlfVEVTVF9DTlQsXFxuK1xcdEVUSFRPT0xfQV9QSFlfVEVTVF9NQVggPSAoX19FVEhUT09MX0FfUEhZX1RFU1RfQ05UIC0gMSlcXG4rfTtcXG4rXFxuICNlbmRpZiAvKiBfVUFQSV9MSU5VWF9FVEhUT09MX05FVExJTktfR0VORVJBVEVEX0ggKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvTWFrZWZpbGUgYi9uZXQvZXRodG9vbC9NYWtlZmlsZVxcbmluZGV4IDYyOWMxMDkxNjY3MGUuLjdkZDJjNTYyNGNlZGYgMTAwNjQ0XFxuLS0tIGEvbmV0L2V0aHRvb2wvTWFrZWZpbGVcXG4rKysgYi9uZXQvZXRodG9vbC9NYWtlZmlsZVxcbkBAIC05LDQgKzksNCBAQCBldGh0b29sX25sLXlcXHQ6PSBuZXRsaW5rLm8gYml0c2V0Lm8gc3Ryc2V0Lm8gbGlua2luZm8ubyBsaW5rbW9kZXMubyByc3MubyBcXFxcXFxuIFxcdFxcdCAgIGNoYW5uZWxzLm8gY29hbGVzY2UubyBwYXVzZS5vIGVlZS5vIHRzaW5mby5vIGNhYmxldGVzdC5vIFxcXFxcXG4gXFx0XFx0ICAgdHVubmVscy5vIGZlYy5vIGVlcHJvbS5vIHN0YXRzLm8gcGhjX3ZjbG9ja3MubyBtbS5vIFxcXFxcXG4gXFx0XFx0ICAgbW9kdWxlLm8gY21pc19md191cGRhdGUubyBjbWlzX2NkYi5vIHBzZS1wZC5vIHBsY2EubyBcXFxcXFxuLVxcdFxcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm9cXG4rXFx0XFx0ICAgcGh5Lm8gdHNjb25maWcubyBtc2UubyBpbnRmX2NhcHMubyBwaHl0ZXN0Lm9cXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMgYi9uZXQvZXRodG9vbC9pbnRmX2NhcHMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTQ1Y2NjNGI4OGM5Zlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9uZXQvZXRodG9vbC9pbnRmX2NhcHMuY1xcbkBAIC0wLDAgKzEsMTMwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rXFxuKyNpbmNsdWRlIFxcXCJuZXRsaW5rLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJjb21tb24uaFxcXCJcXG4rXFxuK3N0cnVjdCBpbnRmX2NhcHNfcmVxX2luZm8ge1xcbitcXHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTtcXG4rfTtcXG4rXFxuK3N0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSB7XFxuK1xcdHN0cnVjdCBldGhubF9yZXBseV9kYXRhIGJhc2U7XFxuK1xcdHN0cnVjdCBldGh0b29sX2ludGZfY2FwcyBjYXBzO1xcbit9O1xcbitcXG4rI2RlZmluZSBJTlRGX0NBUFNfUkVQREFUQShfX3JlcGx5X2Jhc2UpIFxcXFxcXG4rXFx0Y29udGFpbmVyX29mKF9fcmVwbHlfYmFzZSwgc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhLCBiYXNlKVxcbitcXG4rY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3lbRVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIgKyAxXSA9IHtcXG4rXFx0W0VUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSXSA9XFxuK1xcdFxcdE5MQV9QT0xJQ1lfTkVTVEVEKGV0aG5sX2hlYWRlcl9wb2xpY3kpLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBpbnRmX2NhcHNfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxcbitcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGEgKmRhdGEgPSBJTlRGX0NBUFNfUkVQREFUQShyZXBseV9iYXNlKTtcXG4rXFx0aW50IGxlbiA9IDA7XFxuK1xcdHUzMiBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRhdGEtXFx1MDAzZWNhcHMubnVtX2Jsb2NrczsgaSsrKSB7XFxuK1xcdFxcdGxlbiArPSBubGFfdG90YWxfc2l6ZSgwKTtcXHRcXHQvKiBuZXN0ZWQgYmxvY2sgKi9cXG4rXFx0XFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcXHQvKiBpZCAqL1xcbitcXHRcXHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xcdC8qIGNvbXBvbmVudCAqL1xcbitcXHRcXHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xcdC8qIHN1YmxheWVyICovXFxuK1xcdFxcdGxlbiArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XFx0LyogaW5zdGFuY2UgKi9cXG4rXFx0XFx0bGVuICs9IG5sYV90b3RhbF9zaXplKElOVEZfQkxPQ0tfTkFNRV9MRU4pOyAvKiBuYW1lICovXFxuK1xcdFxcdGxlbiArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKTtcXHQvKiBkZXB0aCAqL1xcbitcXHRcXHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xcdC8qIGxhbmVzICovXFxuK1xcdFxcdGxlbiArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XFx0LyogbG9vcGJhY2tfc3VwcG9ydGVkICovXFxuK1xcdFxcdGxlbiArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XFx0LyogdHhfcGF0dGVybnMgKi9cXG4rXFx0XFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcXHQvKiByeF9wYXR0ZXJucyAqL1xcbitcXHRcXHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoMCk7XFx0XFx0LyogZXJyb3JfaW5qZWN0IChmbGFnKSAqL1xcbitcXHRcXHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoMCk7XFx0XFx0LyogYmVydCAoZmxhZykgKi9cXG4rXFx0fVxcbitcXG4rXFx0Lyogb3V0ZXIgQkxPQ0tTIG5lc3QgKi9cXG4rXFx0bGVuICs9IG5sYV90b3RhbF9zaXplKDApO1xcbitcXG4rXFx0cmV0dXJuIGxlbjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UsXFxuK1xcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGEgKmRhdGEgPSBJTlRGX0NBUFNfUkVQREFUQShyZXBseV9iYXNlKTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJlcGx5X2Jhc2UtXFx1MDAzZWRldjtcXG4rXFxuK1xcdGlmICghZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X2ludGZfY2FwcylcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0dXJuIGRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZWdldF9pbnRmX2NhcHMoZGV2LCBcXHUwMDI2ZGF0YS1cXHUwMDNlY2Fwcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaW50Zl9jYXBzX2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhICpkYXRhID0gSU5URl9DQVBTX1JFUERBVEEocmVwbHlfYmFzZSk7XFxuK1xcdHN0cnVjdCBubGF0dHIgKmJsb2Nrc19hdHRyO1xcbitcXHR1MzIgaTtcXG4rXFxuK1xcdGJsb2Nrc19hdHRyID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBFVEhUT09MX0FfSU5URl9DQVBTX0JMT0NLUyk7XFxuK1xcdGlmICghYmxvY2tzX2F0dHIpXFxuK1xcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGF0YS1cXHUwMDNlY2Fwcy5udW1fYmxvY2tzOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayAqYiA9IFxcdTAwMjZkYXRhLVxcdTAwM2VjYXBzLmJsb2Nrc1tpXTtcXG4rXFx0XFx0c3RydWN0IG5sYXR0ciAqYmxvY2tfYXR0cjtcXG4rXFxuK1xcdFxcdGJsb2NrX2F0dHIgPSBubGFfbmVzdF9zdGFydChza2IsIDApO1xcbitcXHRcXHRpZiAoIWJsb2NrX2F0dHIpXFxuK1xcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbitcXG4rXFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfSUQsIGItXFx1MDAzZWlkKSB8fFxcbitcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19DT01QT05FTlQsXFxuK1xcdFxcdFxcdFxcdGItXFx1MDAzZWNvbXBvbmVudCkgfHxcXG4rXFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfU1VCTEFZRVIsXFxuK1xcdFxcdFxcdFxcdGItXFx1MDAzZXN1YmxheWVyKSB8fFxcbitcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19JTlNUQU5DRSxcXG4rXFx0XFx0XFx0XFx0Yi1cXHUwMDNlaW5zdGFuY2UpIHx8XFxuK1xcdFxcdCAgICBubGFfcHV0X3N0cmluZyhza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX05BTUUsIGItXFx1MDAzZW5hbWUpIHx8XFxuK1xcdFxcdCAgICBubGFfcHV0X3U4KHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfREVQVEgsIGItXFx1MDAzZWRlcHRoKSB8fFxcbitcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19MQU5FUywgYi1cXHUwMDNlbGFuZXMpIHx8XFxuK1xcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0xPT1BCQUNLX1NVUFBPUlRFRCxcXG4rXFx0XFx0XFx0XFx0Yi1cXHUwMDNlbG9vcGJhY2tfc3VwcG9ydGVkKSB8fFxcbitcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19UWF9QQVRURVJOUyxcXG4rXFx0XFx0XFx0XFx0Yi1cXHUwMDNlc3VwcG9ydGVkX3R4X3BhdHRlcm5zKSB8fFxcbitcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19SWF9QQVRURVJOUyxcXG4rXFx0XFx0XFx0XFx0Yi1cXHUwMDNlc3VwcG9ydGVkX3J4X3BhdHRlcm5zKSlcXG4rXFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuK1xcdFxcdGlmIChiLVxcdTAwM2VlcnJvcl9pbmplY3Rfc3VwcG9ydGVkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBubGFfcHV0X2ZsYWcoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19FUlJPUl9JTkpFQ1QpKVxcbitcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4rXFx0XFx0aWYgKGItXFx1MDAzZWJlcnRfc3VwcG9ydGVkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBubGFfcHV0X2ZsYWcoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19CRVJUKSlcXG4rXFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuK1xcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbitcXG4rXFx0XFx0bmxhX25lc3RfZW5kKHNrYiwgYmxvY2tfYXR0cik7XFxuK1xcdH1cXG4rXFxuK1xcdG5sYV9uZXN0X2VuZChza2IsIGJsb2Nrc19hdHRyKTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitubGFfcHV0X2ZhaWx1cmU6XFxuK1xcdG5sYV9uZXN0X2NhbmNlbChza2IsIGJsb2Nrc19hdHRyKTtcXG4rXFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcyA9IHtcXG4rXFx0LnJlcXVlc3RfY21kXFx0PSBFVEhUT09MX01TR19JTlRGX0NBUFNfR0VULFxcbitcXHQucmVwbHlfY21kXFx0PSBFVEhUT09MX01TR19JTlRGX0NBUFNfR0VUX1JFUExZLFxcbitcXHQuaGRyX2F0dHJcXHQ9IEVUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSLFxcbitcXHQucmVxX2luZm9fc2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCBpbnRmX2NhcHNfcmVxX2luZm8pLFxcbitcXHQucmVwbHlfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSksXFxuK1xcdC5wcmVwYXJlX2RhdGFcXHQ9IGludGZfY2Fwc19wcmVwYXJlX2RhdGEsXFxuK1xcdC5yZXBseV9zaXplXFx0PSBpbnRmX2NhcHNfcmVwbHlfc2l6ZSxcXG4rXFx0LmZpbGxfcmVwbHlcXHQ9IGludGZfY2Fwc19maWxsX3JlcGx5LFxcbit9O1xcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmMgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmNcXG5pbmRleCAxYWYzOTViNTQzMzBlLi41NmU1YzgxMTQ1NGJiIDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuY1xcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuY1xcbkBAIC00MzEsNiArNDMxLDggQEAgZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tfX0VUSFRPT0xfTVNHX1VTRVJfQ05UXSA9IHtcXG4gXFx0W0VUSFRPT0xfTVNHX1RTQ09ORklHX1NFVF1cXHQ9IFxcdTAwMjZldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wcyxcXG4gXFx0W0VUSFRPT0xfTVNHX1BIWV9HRVRdXFx0XFx0PSBcXHUwMDI2ZXRobmxfcGh5X3JlcXVlc3Rfb3BzLFxcbiBcXHRbRVRIVE9PTF9NU0dfTVNFX0dFVF1cXHRcXHQ9IFxcdTAwMjZldGhubF9tc2VfcmVxdWVzdF9vcHMsXFxuK1xcdFtFVEhUT09MX01TR19JTlRGX0NBUFNfR0VUXVxcdD0gXFx1MDAyNmV0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcyxcXG4rXFx0W0VUSFRPT0xfTVNHX1BIWV9URVNUX0dFVF1cXHQ9IFxcdTAwMjZldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcyxcXG4gfTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmV0aG5sX2R1bXBfY29udGV4dChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuQEAgLTE1NzIsNiArMTU3NCwyOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfb3BzIGV0aHRvb2xfZ2VubF9vcHNbXSA9IHtcXG4gXFx0XFx0LnBvbGljeSA9IGV0aG5sX21zZV9nZXRfcG9saWN5LFxcbiBcXHRcXHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfbXNlX2dldF9wb2xpY3kpIC0gMSxcXG4gXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQuY21kXFx0PSBFVEhUT09MX01TR19JTlRGX0NBUFNfR0VULFxcbitcXHRcXHQuZG9pdFxcdD0gZXRobmxfZGVmYXVsdF9kb2l0LFxcbitcXHRcXHQuc3RhcnRcXHQ9IGV0aG5sX2RlZmF1bHRfc3RhcnQsXFxuK1xcdFxcdC5kdW1waXRcXHQ9IGV0aG5sX2RlZmF1bHRfZHVtcGl0LFxcbitcXHRcXHQuZG9uZVxcdD0gZXRobmxfZGVmYXVsdF9kb25lLFxcbitcXHRcXHQucG9saWN5ID0gZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3ksXFxuK1xcdFxcdC5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeSkgLSAxLFxcbitcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5jbWRcXHQ9IEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVCxcXG4rXFx0XFx0LmRvaXRcXHQ9IGV0aG5sX2RlZmF1bHRfZG9pdCxcXG4rXFx0XFx0LnBvbGljeSA9IGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3ksXFxuK1xcdFxcdC5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9waHlfdGVzdF9nZXRfcG9saWN5KSAtIDEsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LmNtZFxcdD0gRVRIVE9PTF9NU0dfUEhZX1RFU1RfQUNULFxcbitcXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfVU5TX0FETUlOX1BFUk0sXFxuK1xcdFxcdC5kb2l0XFx0PSBldGhubF9hY3RfcGh5X3Rlc3QsXFxuK1xcdFxcdC5wb2xpY3kgPSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5LFxcbitcXHRcXHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeSkgLSAxLFxcbitcXHR9LFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBldGh0b29sX25sX21jZ3Jwc1tdID0ge1xcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmggYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcXG5pbmRleCAzZTk2OWEwNzBmOWZlLi4xY2FiYTYwZDgzYzQzIDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaFxcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxcbkBAIC00NzQsNiArNDc0LDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tbV9yZXF1ZXN0X29wcztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfcmVxdWVzdF9vcHM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfbXNlX3JlcXVlc3Rfb3BzO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcztcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcztcXG4gXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5W0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgKyAxXTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lfc3RhdHNbRVRIVE9PTF9BX0hFQURFUl9GTEFHUyArIDFdO1xcbkBAIC01MzAsNiArNTMyLDExIEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfZ2V0X3BvbGljeVtFVEhUT09MX0FfUEhZX0hFQURFUiArIDFdO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfdHNjb25maWdfZ2V0X3BvbGljeVtFVEhUT09MX0FfVFNDT05GSUdfSEVBREVSICsgMV07XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19zZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19NQVggKyAxXTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX21zZV9nZXRfcG9saWN5W0VUSFRPT0xfQV9NU0VfSEVBREVSICsgMV07XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeVtFVEhUT09MX0FfSU5URl9DQVBTX0hFQURFUiArIDFdO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X3Rlc3RfZ2V0X3BvbGljeVtFVEhUT09MX0FfUEhZX1RFU1RfTEFORSArIDFdO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeVtFVEhUT09MX0FfUEhZX1RFU1RfTUFYICsgMV07XFxuK1xcbitpbnQgZXRobmxfYWN0X3BoeV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbiBcXG4gaW50IGV0aG5sX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4gaW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9waHl0ZXN0LmMgYi9uZXQvZXRodG9vbC9waHl0ZXN0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmRlZGNkMDM2YjdjMmVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvbmV0L2V0aHRvb2wvcGh5dGVzdC5jXFxuQEAgLTAsMCArMSwxNzEgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbitcXG4rI2luY2x1ZGUgXFxcIm5ldGxpbmsuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImNvbW1vbi5oXFxcIlxcbitcXG4rc3RydWN0IHBoeV90ZXN0X3JlcV9pbmZvIHtcXG4rXFx0c3RydWN0IGV0aG5sX3JlcV9pbmZvIGJhc2U7XFxuK307XFxuK1xcbitzdHJ1Y3QgcGh5X3Rlc3RfcmVwbHlfZGF0YSB7XFxuK1xcdHN0cnVjdCBldGhubF9yZXBseV9kYXRhIGJhc2U7XFxuK1xcdHN0cnVjdCBldGh0b29sX3BoeV90ZXN0IHRlc3Q7XFxuK307XFxuK1xcbisjZGVmaW5lIFBIWV9URVNUX1JFUERBVEEoX19yZXBseV9iYXNlKSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhLCBiYXNlKVxcbitcXG4rLyogUEhZX1RFU1RfR0VUICovXFxuK1xcbitjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FICsgMV0gPSB7XFxuK1xcdFtFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXVxcdD0gTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksXFxuK1xcdFtFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbitcXHRbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBwaHlfdGVzdF9yZXBseV9zaXplKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSlcXG4re1xcbitcXHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcXHQvKiBibG9ja19pZCAqL1xcbitcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcXHQvKiBsYW5lICovXFxuK1xcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xcdC8qIHR4X3BhdHRlcm4gKi9cXG4rXFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXFx0LyogcnhfcGF0dGVybiAqL1xcbitcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcXHQvKiBhY3RpdmVfdGVzdHMgKi9cXG4rXFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpICArXFx0LyogY2hlY2tlcl9sb2NrICovXFxuK1xcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTY0KSkgK1xcdC8qIGVycm9yX2NvdW50ICovXFxuK1xcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTY0KSk7XFx0LyogdG90YWxfYml0c19zZW50ICovXFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSxcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuK3tcXG4rXFx0c3RydWN0IHBoeV90ZXN0X3JlcGx5X2RhdGEgKmRhdGEgPSBQSFlfVEVTVF9SRVBEQVRBKHJlcGx5X2Jhc2UpO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmVwbHlfYmFzZS1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVxcdTAwM2VhdHRycztcXG4rXFxuK1xcdGlmICghZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X3BoeV90ZXN0KVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRtZW1zZXQoXFx1MDAyNmRhdGEtXFx1MDAzZXRlc3QsIDAsIHNpemVvZihkYXRhLVxcdTAwM2V0ZXN0KSk7XFxuK1xcbitcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSkge1xcbitcXHRcXHRkYXRhLVxcdTAwM2V0ZXN0LmJsb2NrX2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSk7XFxuK1xcdFxcdGRhdGEtXFx1MDAzZXRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CTE9DS19JRDtcXG4rXFx0fVxcbitcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKSB7XFxuK1xcdFxcdGRhdGEtXFx1MDAzZXRlc3QubGFuZSA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXSk7XFxuK1xcdFxcdGRhdGEtXFx1MDAzZXRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9MQU5FO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X3BoeV90ZXN0KGRldiwgXFx1MDAyNmRhdGEtXFx1MDAzZXRlc3QpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBoeV90ZXN0X2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcGh5X3Rlc3RfcmVwbHlfZGF0YSAqZGF0YSA9IFBIWV9URVNUX1JFUERBVEEocmVwbHlfYmFzZSk7XFxuK1xcdGNvbnN0IHN0cnVjdCBldGh0b29sX3BoeV90ZXN0ICp0ID0gXFx1MDAyNmRhdGEtXFx1MDAzZXRlc3Q7XFxuK1xcbitcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSUQsIHQtXFx1MDAzZWJsb2NrX2lkKSB8fFxcbitcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfTEFORSwgdC1cXHUwMDNlbGFuZSkgfHxcXG4rXFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk4sIHQtXFx1MDAzZXR4X3BhdHRlcm4pIHx8XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOLCB0LVxcdTAwM2VyeF9wYXR0ZXJuKSB8fFxcbitcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfQUNUSVZFX1RFU1RTLFxcbitcXHRcXHRcXHR0LVxcdTAwM2VhY3RpdmVfdGVzdHMpIHx8XFxuK1xcdCAgICBubGFfcHV0X3U4KHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0NIRUNLRVJfTE9DSywgdC1cXHUwMDNlY2hlY2tlcl9sb2NrKSB8fFxcbitcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfRVJST1JfQ09VTlQsXFxuK1xcdFxcdFxcdCAgICAgIHQtXFx1MDAzZWVycm9yX2NvdW50LCBFVEhUT09MX0FfUEhZX1RFU1RfVU5TUEVDKSB8fFxcbitcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfVE9UQUxfQklUU19TRU5ULFxcbitcXHRcXHRcXHQgICAgICB0LVxcdTAwM2V0b3RhbF9iaXRzX3NlbnQsIEVUSFRPT0xfQV9QSFlfVEVTVF9VTlNQRUMpKVxcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcyA9IHtcXG4rXFx0LnJlcXVlc3RfY21kXFx0PSBFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsXFxuK1xcdC5yZXBseV9jbWRcXHQ9IEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVF9SRVBMWSxcXG4rXFx0Lmhkcl9hdHRyXFx0PSBFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSLFxcbitcXHQucmVxX2luZm9fc2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCBwaHlfdGVzdF9yZXFfaW5mbyksXFxuK1xcdC5yZXBseV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHBoeV90ZXN0X3JlcGx5X2RhdGEpLFxcbitcXHQucHJlcGFyZV9kYXRhXFx0PSBwaHlfdGVzdF9wcmVwYXJlX2RhdGEsXFxuK1xcdC5yZXBseV9zaXplXFx0PSBwaHlfdGVzdF9yZXBseV9zaXplLFxcbitcXHQuZmlsbF9yZXBseVxcdD0gcGh5X3Rlc3RfZmlsbF9yZXBseSxcXG4rfTtcXG4rXFxuKy8qIFBIWV9URVNUX0FDVCAqL1xcbitcXG4rY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeVtFVEhUT09MX0FfUEhZX1RFU1RfTUFYICsgMV0gPSB7XFxuK1xcdFtFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXVxcdFxcdD0gTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksXFxuK1xcdFtFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdXFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbitcXHRbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdXFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbitcXHRbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dXFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbitcXHRbRVRIVE9PTF9BX1BIWV9URVNUX1JYX1BBVFRFUk5dXFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbitcXHRbRVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4rXFx0W0VUSFRPT0xfQV9QSFlfVEVTVF9JTkpFQ1RfRVJST1JfQ09VTlRdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbit9O1xcbitcXG4raW50IGV0aG5sX2FjdF9waHlfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBldGhubF9yZXFfaW5mbyByZXFfaW5mbyA9IHt9O1xcbitcXHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVxcdTAwM2VhdHRycztcXG4rXFx0c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgdGVzdCA9IHt9O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoXFx1MDAyNnJlcV9pbmZvLFxcbitcXHRcXHRcXHRcXHRcXHQgdGJbRVRIVE9PTF9BX1BIWV9URVNUX0hFQURFUl0sXFxuK1xcdFxcdFxcdFxcdFxcdCBnZW5sX2luZm9fbmV0KGluZm8pLCBpbmZvLVxcdTAwM2VleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCB0cnVlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRkZXYgPSByZXFfaW5mby5kZXY7XFxuK1xcbitcXHRpZiAoIWRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZXNldF9waHlfdGVzdCkge1xcbitcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0Z290byBvdXRfZGV2O1xcbitcXHR9XFxuK1xcbitcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSkge1xcbitcXHRcXHR0ZXN0LmJsb2NrX2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSk7XFxuK1xcdFxcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CTE9DS19JRDtcXG4rXFx0fVxcbitcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKSB7XFxuK1xcdFxcdHRlc3QubGFuZSA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXSk7XFxuK1xcdFxcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9MQU5FO1xcbitcXHR9XFxuK1xcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfVFhfUEFUVEVSTl0pIHtcXG4rXFx0XFx0dGVzdC50eF9wYXR0ZXJuID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dKTtcXG4rXFx0XFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX1RYX1BBVFRFUk47XFxuK1xcdH1cXG4rXFx0aWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOXSkge1xcbitcXHRcXHR0ZXN0LnJ4X3BhdHRlcm4gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl0pO1xcbitcXHRcXHR0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfUlhfUEFUVEVSTjtcXG4rXFx0fVxcbitcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OXSkge1xcbitcXHRcXHR0ZXN0LmJlcnRfYWN0aW9uID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OXSk7XFxuK1xcdFxcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CRVJUX0FDVElPTjtcXG4rXFx0fVxcbitcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0lOSkVDVF9FUlJPUl9DT1VOVF0pIHtcXG4rXFx0XFx0dGVzdC5pbmplY3RfZXJyb3JfY291bnQgPVxcbitcXHRcXHRcXHRubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXSk7XFxuK1xcdFxcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9JTkpFQ1RfQ09VTlQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRyZXQgPSBldGhubF9vcHNfYmVnaW4oZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0X3J0bmw7XFxuK1xcbitcXHRyZXQgPSBkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VzZXRfcGh5X3Rlc3QoZGV2LCBcXHUwMDI2dGVzdCk7XFxuK1xcdGV0aG5sX29wc19jb21wbGV0ZShkZXYpO1xcbitcXG4rb3V0X3J0bmw6XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK291dF9kZXY6XFxuK1xcdGV0aG5sX3BhcnNlX2hlYWRlcl9kZXZfcHV0KFxcdTAwMjZyZXFfaW5mbyk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MTUuNzMwOTEzNTA3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQ1NDE4NjgzMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVRIVE9PTF9ORVRMSU5LXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXRobmxfYWN0X3BoeV90ZXN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXcgZXRodG9vbCBuZXRsaW5rIG1lc3NhZ2VzIChFVEhUT09MX01TR19JTlRGX0NBUFNfR0VULCBFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsIEVUSFRPT0xfTVNHX1BIWV9URVNUX0FDVCkgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgbmV0bGluayBhdHRyaWJ1dGUgcG9saWNpZXMuIEV2ZW4gdGhvdWdoIG5vIGRyaXZlcnMgY3VycmVudGx5IGltcGxlbWVudCB0aGUgdW5kZXJseWluZyBldGh0b29sIG9wZXJhdGlvbnMsIHRoZSBuZXRsaW5rIG1lc3NhZ2UgcGFyc2luZywgcG9saWN5IHZhbGlkYXRpb24sIGFuZCBpbml0aWFsIGhhbmRsZXIgZnVuY3Rpb25zIChsaWtlIGV0aG5sX2FjdF9waHlfdGVzdCkgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXItc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ1MDZkZDEwODYzOGU1ZDc3ZDIzZjMwZWZkZjJjZjdmYTg2ZGVlOWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwNTowNjoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5pbmRleCA1ZGQ0ZDFiNWQ5NGJiLi4zNjFlYjNjNjY1NzcwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuQEAgLTIxMCw2ICsyMTAsNTUgQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogZGlzY2FyZFxuICAgICAgICAgdmFsdWU6IDMxXG4rICAtXG4rICAgIG5hbWU6IGludGYtY29tcG9uZW50XG4rICAgIHR5cGU6IGVudW1cbisgICAgZG9jOiBUeXBlIG9mIGhhcmR3YXJlIGNvbXBvbmVudCBpbiB0aGUgaW50ZXJmYWNlLlxuKyAgICBlbnRyaWVzOlxuKyAgICAgIC0gbWFjXG4rICAgICAgLSBwaHlcbisgICAgICAtIG1vZHVsZVxuKyAgLVxuKyAgICBuYW1lOiBpbnRmLXN1YmxheWVyXG4rICAgIHR5cGU6IGVudW1cbisgICAgZG9jOiA4MDIuMyBzdWJsYXllciB3aXRoaW4gYSBjb21wb25lbnQuXG4rICAgIGVudHJpZXM6XG4rICAgICAgLSBub25lXG4rICAgICAgLSByc1xuKyAgICAgIC0gcGNzXG4rICAgICAgLSBmZWNcbisgICAgICAtIHBtYVxuKyAgICAgIC0gcG1kXG4rICAtXG4rICAgIG5hbWU6IHBoeS10ZXN0LXBhdHRlcm5cbisgICAgdHlwZTogZW51bVxuKyAgICBkb2M6IFBIWSB0ZXN0IHBhdHRlcm4gdHlwZXMgZm9yIFBSQlMgZ2VuZXJhdGlvbi9jaGVja2luZy5cbisgICAgZW50cmllczpcbisgICAgICAtIG9mZlxuKyAgICAgIC0gcHJiczdcbisgICAgICAtIHByYnM5XG4rICAgICAgLSBwcmJzMTFcbisgICAgICAtIHByYnMxM1xuKyAgICAgIC0gcHJiczE1XG4rICAgICAgLSBwcmJzMjNcbisgICAgICAtIHByYnMzMVxuKyAgICAgIC0gc3NwcnFcbisgICAgICAtIHByYnMxM3FcbisgICAgICAtIHByYnMzMXFcbisgICAgICAtIHNxdWFyZS1ucnpcbisgICAgICAtIHNxdWFyZS1wYW00XG4rICAgICAgLSB0eC1saW5lYXJpdHlcbisgICAgICAtIHNjcmFtYmxlZC1pZGxlXG4rICAgICAgLSBrMjgtNVxuKyAgICAgIC0gazI4LTdcbisgIC1cbisgICAgbmFtZTogcGh5LXRlc3QtYWN0aW9uXG4rICAgIHR5cGU6IGVudW1cbisgICAgZG9jOiBCRVJUIGNvbnRyb2wgYWN0aW9ucy5cbisgICAgZW50cmllczpcbisgICAgICAtIG5vbmVcbisgICAgICAtIHN0YXJ0XG4rICAgICAgLSBzdG9wXG4gXG4gYXR0cmlidXRlLXNldHM6XG4gICAtXG5AQCAtMTkwNSw2ICsxOTU0LDExNSBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIG5hbWU6IGxpbmtcbiAgICAgICAgIHR5cGU6IG5lc3RcbiAgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBtc2Utc25hcHNob3RcbisgIC1cbisgICAgbmFtZTogaW50Zi1ibG9ja1xuKyAgICBkb2M6IEEgc2luZ2xlIGZ1bmN0aW9uYWwgYmxvY2sgaW4gdGhlIGludGVyZmFjZS5cbisgICAgYXR0cmlidXRlczpcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBpZFxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogY29tcG9uZW50XG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGVudW06IGludGYtY29tcG9uZW50XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogc3VibGF5ZXJcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZW51bTogaW50Zi1zdWJsYXllclxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGluc3RhbmNlXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGRvYzogfFxuKyAgICAgICAgICBJZGVudGlmaWVzIHRoZSBoYXJkd2FyZSBlbnRpdHkgd2hlbiBtdWx0aXBsZSBpbnN0YW5jZXMgb2ZcbisgICAgICAgICAgdGhlIHNhbWUgY29tcG9uZW50IGV4aXN0IGluIHRoZSBpbnRlcmZhY2UuIFRoZSBkcml2ZXJcbisgICAgICAgICAgYXNzaWducyBpbnN0YW5jZSBudW1iZXJzIHNlcXVlbnRpYWxseSBiYXNlZCBvbiBwb3NpdGlvbiBpblxuKyAgICAgICAgICB0aGUgcGh5c2ljYWwgcGF0aC4gRGVmYXVsdHMgdG8gMCB3aGVuIG9ubHkgb25lIGluc3RhbmNlIG9mXG4rICAgICAgICAgIGEgZ2l2ZW4gY29tcG9uZW50IGV4aXN0cy5cbisgICAgICAgICAgRm9yIFBIWTogaW5zdGFuY2UgMCBpcyB0aGUgaW50ZXJuYWwvaG9zdC1zaWRlIFBIWSxcbisgICAgICAgICAgaW5zdGFuY2UgMSBpcyBhbiBleHRlcm5hbCBQSFkgZnVydGhlciBhbG9uZyB0aGUgcGF0aFxuKyAgICAgICAgICB0b3dhcmQgdGhlIGxpbmUgc2lkZS5cbisgICAgICAgICAgRm9yIE1BQzogaW5zdGFuY2UgMCBpcyB0aGUgaG9zdC1mYWNpbmcgTUFDLCBpbnN0YW5jZSAxIGlzXG4rICAgICAgICAgIGEgc2Vjb25kYXJ5IE1BQyBmdXJ0aGVyIGFsb25nIHRoZSBkYXRhIHBhdGggKGUuZy4sIGJlaGluZFxuKyAgICAgICAgICBhbiBlbWJlZGRlZCBzd2l0Y2gpLlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IG5hbWVcbisgICAgICAgIHR5cGU6IHN0cmluZ1xuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGRlcHRoXG4rICAgICAgICB0eXBlOiB1OFxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGxhbmVzXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBsb29wYmFjay1zdXBwb3J0ZWRcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHN1cHBvcnRlZC10eC1wYXR0ZXJuc1xuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogc3VwcG9ydGVkLXJ4LXBhdHRlcm5zXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBlcnJvci1pbmplY3Qtc3VwcG9ydGVkXG4rICAgICAgICB0eXBlOiBmbGFnXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogYmVydC1zdXBwb3J0ZWRcbisgICAgICAgIHR5cGU6IGZsYWdcbisgIC1cbisgICAgbmFtZTogaW50Zi1jYXBzXG4rICAgIGRvYzogSW50ZXJmYWNlIGNhcGFiaWxpdGllcyBtZXNzYWdlLlxuKyAgICBhdHRyaWJ1dGVzOlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGhlYWRlclxuKyAgICAgICAgdHlwZTogbmVzdFxuKyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGhlYWRlclxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGJsb2Nrc1xuKyAgICAgICAgdHlwZTogbmVzdFxuKyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGludGYtYmxvY2tcbisgICAgICAgIG11bHRpLWF0dHI6IHRydWVcbisgIC1cbisgICAgbmFtZTogcGh5LXRlc3RcbisgICAgZG9jOiBQSFkgdGVzdCBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMuXG4rICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogaGVhZGVyXG4rICAgICAgICB0eXBlOiBuZXN0XG4rICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogaGVhZGVyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogYmxvY2staWRcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGxhbmVcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHR4LXBhdHRlcm5cbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZW51bTogcGh5LXRlc3QtcGF0dGVyblxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHJ4LXBhdHRlcm5cbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZW51bTogcGh5LXRlc3QtcGF0dGVyblxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGJlcnQtYWN0aW9uXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGVudW06IHBoeS10ZXN0LWFjdGlvblxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGluamVjdC1lcnJvci1jb3VudFxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogYWN0aXZlLXRlc3RzXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGRvYzogQml0bWFzayBvZiBjdXJyZW50bHkgcnVubmluZyB0ZXN0cyAoYml0IDAgPSBCRVJUKS5cbisgICAgICAtXG4rICAgICAgICBuYW1lOiBjaGVja2VyLWxvY2tcbisgICAgICAgIHR5cGU6IHU4XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogZXJyb3ItY291bnRcbisgICAgICAgIHR5cGU6IHU2NFxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHRvdGFsLWJpdHMtc2VudFxuKyAgICAgICAgdHlwZTogdTY0XG4gXG4gb3BlcmF0aW9uczpcbiAgIGVudW0tbW9kZWw6IGRpcmVjdGlvbmFsXG5AQCAtMjg1OSw2ICszMDE3LDU0IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSB3b3JzdC1jaGFubmVsXG4gICAgICAgICAgICAgLSBsaW5rXG4gICAgICAgZHVtcDogKm1zZS1nZXQtb3BcbisgICAgLVxuKyAgICAgIG5hbWU6IGludGYtY2Fwcy1nZXRcbisgICAgICBkb2M6IEdldCBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzIChmdW5jdGlvbmFsIGJsb2NrIGxheW91dCkuXG4rICAgICAgYXR0cmlidXRlLXNldDogaW50Zi1jYXBzXG4rICAgICAgZG86IFx1MDAyNmludGYtY2Fwcy1nZXQtb3BcbisgICAgICAgIHJlcXVlc3Q6XG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgICAgLSBoZWFkZXJcbisgICAgICAgIHJlcGx5OlxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxuKyAgICAgICAgICAgIC0gaGVhZGVyXG4rICAgICAgICAgICAgLSBibG9ja3NcbisgICAgICBkdW1wOiAqaW50Zi1jYXBzLWdldC1vcFxuKyAgICAtXG4rICAgICAgbmFtZTogcGh5LXRlc3QtZ2V0XG4rICAgICAgZG9jOiBHZXQgUEhZIHRlc3Qgc3RhdHVzIChwYXR0ZXJucywgQkVSVCBjb3VudGVycykuXG4rICAgICAgYXR0cmlidXRlLXNldDogcGh5LXRlc3RcbisgICAgICBkbzpcbisgICAgICAgIHJlcXVlc3Q6XG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgICAgLSBoZWFkZXJcbisgICAgICAgICAgICAtIGJsb2NrLWlkXG4rICAgICAgICAgICAgLSBsYW5lXG4rICAgICAgICByZXBseTpcbisgICAgICAgICAgYXR0cmlidXRlczpcbisgICAgICAgICAgICAtIGhlYWRlclxuKyAgICAgICAgICAgIC0gYmxvY2staWRcbisgICAgICAgICAgICAtIGxhbmVcbisgICAgICAgICAgICAtIHR4LXBhdHRlcm5cbisgICAgICAgICAgICAtIHJ4LXBhdHRlcm5cbisgICAgICAgICAgICAtIGFjdGl2ZS10ZXN0c1xuKyAgICAgICAgICAgIC0gY2hlY2tlci1sb2NrXG4rICAgICAgICAgICAgLSBlcnJvci1jb3VudFxuKyAgICAgICAgICAgIC0gdG90YWwtYml0cy1zZW50XG4rICAgIC1cbisgICAgICBuYW1lOiBwaHktdGVzdC1hY3RcbisgICAgICBkb2M6IENvbmZpZ3VyZSBQSFkgdGVzdCAoc2V0IHBhdHRlcm5zLCBzdGFydC9zdG9wIEJFUlQsIGluamVjdCBlcnJvcnMpLlxuKyAgICAgIGF0dHJpYnV0ZS1zZXQ6IHBoeS10ZXN0XG4rICAgICAgZG86XG4rICAgICAgICByZXF1ZXN0OlxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxuKyAgICAgICAgICAgIC0gaGVhZGVyXG4rICAgICAgICAgICAgLSBibG9jay1pZFxuKyAgICAgICAgICAgIC0gbGFuZVxuKyAgICAgICAgICAgIC0gdHgtcGF0dGVyblxuKyAgICAgICAgICAgIC0gcngtcGF0dGVyblxuKyAgICAgICAgICAgIC0gYmVydC1hY3Rpb25cbisgICAgICAgICAgICAtIGluamVjdC1lcnJvci1jb3VudFxuIFxuIG1jYXN0LWdyb3VwczpcbiAgIGxpc3Q6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuaW5kZXggMTI2ODNiNWQxMjVlNC4uZjk3NDhlNzM5ZjAzZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuQEAgLTExOTcsNiArMTE5Nyw5MiBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XG4gICogU2VlIFx1MDAyNnN0cnVjdCBuZXRfZGV2aWNlIGFuZCBcdTAwMjZzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZm9yIGRvY3VtZW50YXRpb25cbiAgKiBvZiB0aGUgZ2VuZXJpYyBuZXRkZXYgZmVhdHVyZXMgaW50ZXJmYWNlLlxuICAqL1xuK1xuKyNkZWZpbmUgSU5URl9DQVBTX01BWF9CTE9DS1NcdDE2XG4rI2RlZmluZSBJTlRGX0JMT0NLX05BTUVfTEVOXHQzMlxuK1xuKyNkZWZpbmUgTE9PUEJBQ0tfU1VQUE9SVF9MT0NBTFx0QklUKDApXG4rI2RlZmluZSBMT09QQkFDS19TVVBQT1JUX1JFTU9URVx0QklUKDEpXG4rXG4rLyoqXG4rICogc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayAtIFNpbmdsZSBmdW5jdGlvbmFsIGJsb2NrIGluIHRoZSBpbnRlcmZhY2VcbisgKiBAaWQ6IFVuaXF1ZSBibG9jayBpZGVudGlmaWVyXG4rICogQGNvbXBvbmVudDogSGFyZHdhcmUgY29tcG9uZW50IChNQUMsIFBIWSwgTU9EVUxFKVxuKyAqIEBzdWJsYXllcjogODAyLjMgc3VibGF5ZXIgKFJTLCBQQ1MsIEZFQywgUE1BLCBQTUQsIG9yIE5PTkUpXG4rICogQGluc3RhbmNlOiBJbmRleCB3aGVuIG11bHRpcGxlIGluc3RhbmNlcyBvZiBzYW1lIGNvbXBvbmVudCBleGlzdFxuKyAqIEBuYW1lOiBEcml2ZXItY2hvc2VuIGxhYmVsXG4rICogQGRlcHRoOiBPcmRlcmluZyB3aXRoaW4gc2FtZSAoY29tcG9uZW50LCBzdWJsYXllcikgdHVwbGVcbisgKiBAbGFuZXM6IE51bWJlciBvZiBsYW5lc1xuKyAqIEBsb29wYmFja19zdXBwb3J0ZWQ6IEJpdG1hc2sgb2Ygc3VwcG9ydGVkIGxvb3BiYWNrIGRpcmVjdGlvbnNcbisgKiBAc3VwcG9ydGVkX3R4X3BhdHRlcm5zOiBCaXRtYXNrIG9mIHBhdHRlcm5zIHRoaXMgYmxvY2sgY2FuIGdlbmVyYXRlXG4rICogQHN1cHBvcnRlZF9yeF9wYXR0ZXJuczogQml0bWFzayBvZiBwYXR0ZXJucyB0aGlzIGJsb2NrIGNhbiBjaGVja1xuKyAqIEBlcnJvcl9pbmplY3Rfc3VwcG9ydGVkOiBCbG9jayBzdXBwb3J0cyBiaXQgZXJyb3IgaW5qZWN0aW9uXG4rICogQGJlcnRfc3VwcG9ydGVkOiBCbG9jayBzdXBwb3J0cyBCRVJUIGNvdW50ZXJzXG4rICovXG4rc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayB7XG4rXHR1MzIgaWQ7XG4rXHRlbnVtIGludGZfY29tcG9uZW50IGNvbXBvbmVudDtcbitcdGVudW0gaW50Zl9zdWJsYXllciBzdWJsYXllcjtcbitcdHUzMiBpbnN0YW5jZTtcbitcdGNoYXIgbmFtZVtJTlRGX0JMT0NLX05BTUVfTEVOXTtcbitcdHU4IGRlcHRoO1xuK1x0dTMyIGxhbmVzO1xuK1x0dTMyIGxvb3BiYWNrX3N1cHBvcnRlZDtcbitcdHUzMiBzdXBwb3J0ZWRfdHhfcGF0dGVybnM7XG4rXHR1MzIgc3VwcG9ydGVkX3J4X3BhdHRlcm5zO1xuK1x0Ym9vbCBlcnJvcl9pbmplY3Rfc3VwcG9ydGVkO1xuK1x0Ym9vbCBiZXJ0X3N1cHBvcnRlZDtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBldGh0b29sX2ludGZfY2FwcyAtIEludGVyZmFjZSBjYXBhYmlsaXRpZXMgKGFsbCBibG9ja3MpXG4rICogQG51bV9ibG9ja3M6IE51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIGJsb2Nrc1tdXG4rICogQGJsb2NrczogQXJyYXkgb2YgZnVuY3Rpb25hbCBibG9ja3NcbisgKi9cbitzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHMge1xuK1x0dTMyIG51bV9ibG9ja3M7XG4rXHRzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrIGJsb2Nrc1tJTlRGX0NBUFNfTUFYX0JMT0NLU107XG4rfTtcbitcbisvKiBCaXRtYXNrIG9mIHdoaWNoIGV0aHRvb2xfcGh5X3Rlc3QgZmllbGRzIHdlcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgKi9cbisjZGVmaW5lIFBIWV9URVNUX0NNRF9UWF9QQVRURVJOXHRcdEJJVCgwKVxuKyNkZWZpbmUgUEhZX1RFU1RfQ01EX1JYX1BBVFRFUk5cdFx0QklUKDEpXG4rI2RlZmluZSBQSFlfVEVTVF9DTURfQkVSVF9BQ1RJT05cdFx0QklUKDIpXG4rI2RlZmluZSBQSFlfVEVTVF9DTURfSU5KRUNUX0NPVU5UXHRcdEJJVCgzKVxuKyNkZWZpbmUgUEhZX1RFU1RfQ01EX0xBTkVcdFx0XHRCSVQoNClcbisjZGVmaW5lIFBIWV9URVNUX0NNRF9CTE9DS19JRFx0XHRcdEJJVCg1KVxuK1xuKy8qIEJpdG1hc2sgb2YgY3VycmVudGx5IGFjdGl2ZSB0ZXN0cyAocmVhZC1vbmx5KSAqL1xuKyNkZWZpbmUgUEhZX1RFU1RfQUNUSVZFX0JFUlRcdFx0QklUKDApXG4rXG4rLyoqXG4rICogc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgLSBQSFkgdGVzdCBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXNcbisgKiBAY21kOiBCaXRtYXNrIG9mIHdoaWNoIGZpZWxkcyBhcmUgdmFsaWQgKFBIWV9URVNUX0NNRF8qKVxuKyAqIEBibG9ja19pZDogQmxvY2sgdG8gb3BlcmF0ZSBvbiAoZnJvbSBpbnRmLWNhcHMtZ2V0KVxuKyAqIEBsYW5lOiBMYW5lIG51bWJlciAoMC1iYXNlZClcbisgKiBAdHhfcGF0dGVybjogVFggcGF0dGVybiBnZW5lcmF0b3Igc2V0dGluZ1xuKyAqIEByeF9wYXR0ZXJuOiBSWCBwYXR0ZXJuIGNoZWNrZXIgc2V0dGluZ1xuKyAqIEBiZXJ0X2FjdGlvbjogQkVSVCBzdGFydC9zdG9wIGNvbnRyb2xcbisgKiBAaW5qZWN0X2Vycm9yX2NvdW50OiBOdW1iZXIgb2YgZXJyb3JzIHRvIGluamVjdFxuKyAqIEBhY3RpdmVfdGVzdHM6IEJpdG1hc2sgb2YgcnVubmluZyB0ZXN0cyAoUEhZX1RFU1RfQUNUSVZFXyopXG4rICogQGNoZWNrZXJfbG9jazogUlggY2hlY2tlciBsb2NrIHN0YXR1cyAocmVhZC1vbmx5KVxuKyAqIEBlcnJvcl9jb3VudDogQkVSVCBlcnJvciBjb3VudGVyIChyZWFkLW9ubHkpXG4rICogQHRvdGFsX2JpdHNfc2VudDogQkVSVCB0b3RhbCBiaXRzIGNvdW50ZXIgKHJlYWQtb25seSlcbisgKi9cbitzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCB7XG4rXHR1MzIgY21kO1xuK1x0dTMyIGJsb2NrX2lkO1xuK1x0dTMyIGxhbmU7XG4rXHRlbnVtIHBoeV90ZXN0X3BhdHRlcm4gdHhfcGF0dGVybjtcbitcdGVudW0gcGh5X3Rlc3RfcGF0dGVybiByeF9wYXR0ZXJuO1xuK1x0ZW51bSBwaHlfdGVzdF9hY3Rpb24gYmVydF9hY3Rpb247XG4rXHR1MzIgaW5qZWN0X2Vycm9yX2NvdW50O1xuK1x0dTMyIGFjdGl2ZV90ZXN0cztcbitcdHU4IGNoZWNrZXJfbG9jaztcbitcdHU2NCBlcnJvcl9jb3VudDtcbitcdHU2NCB0b3RhbF9iaXRzX3NlbnQ7XG4rfTtcbitcbiBzdHJ1Y3QgZXRodG9vbF9vcHMge1xuIFx0dTMyICAgICBzdXBwb3J0ZWRfaW5wdXRfeGZybTo4O1xuIFx0dTMyICAgICBjYXBfbGlua19sYW5lc19zdXBwb3J0ZWQ6MTtcbkBAIC0xMzU0LDYgKzE0NDAsMTIgQEAgc3RydWN0IGV0aHRvb2xfb3BzIHtcbiBcdGludFx0KCpzZXRfbW0pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX21tX2NmZyAqY2ZnLFxuIFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBcdHZvaWRcdCgqZ2V0X21tX3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqc3RhdHMpO1xuK1x0aW50XHQoKmdldF9pbnRmX2NhcHMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgc3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzICpjYXBzKTtcbitcdGludFx0KCpnZXRfcGh5X3Rlc3QpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCAqdGVzdCk7XG4rXHRpbnRcdCgqc2V0X3BoeV90ZXN0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnRlc3QpO1xuIH07XG4gXG4gaW50IGV0aHRvb2xfY2hlY2tfb3BzKGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuaW5kZXggODEzNGJhZjc4NjBmMy4uMzEwMmJiN2JhMzM3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbkBAIC04OTMsNiArODkzLDkgQEAgZW51bSB7XG4gXHRFVEhUT09MX01TR19SU1NfQ1JFQVRFX0FDVCxcbiBcdEVUSFRPT0xfTVNHX1JTU19ERUxFVEVfQUNULFxuIFx0RVRIVE9PTF9NU0dfTVNFX0dFVCxcbitcdEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVQsXG4rXHRFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsXG4rXHRFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QsXG4gXG4gXHRfX0VUSFRPT0xfTVNHX1VTRVJfQ05ULFxuIFx0RVRIVE9PTF9NU0dfVVNFUl9NQVggPSAoX19FVEhUT09MX01TR19VU0VSX0NOVCAtIDEpXG5AQCAtOTU0LDYgKzk1Nyw4IEBAIGVudW0ge1xuIFx0RVRIVE9PTF9NU0dfUlNTX0NSRUFURV9OVEYsXG4gXHRFVEhUT09MX01TR19SU1NfREVMRVRFX05URixcbiBcdEVUSFRPT0xfTVNHX01TRV9HRVRfUkVQTFksXG4rXHRFVEhUT09MX01TR19JTlRGX0NBUFNfR0VUX1JFUExZLFxuK1x0RVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VUX1JFUExZLFxuIFxuIFx0X19FVEhUT09MX01TR19LRVJORUxfQ05ULFxuIFx0RVRIVE9PTF9NU0dfS0VSTkVMX01BWCA9IChfX0VUSFRPT0xfTVNHX0tFUk5FTF9DTlQgLSAxKVxuQEAgLTk2MSw0ICs5NjYsMTAzIEBAIGVudW0ge1xuIFxuICNkZWZpbmUgRVRIVE9PTF9NQ0dSUF9NT05JVE9SX05BTUVcdFwibW9uaXRvclwiXG4gXG4rLyogSW50ZXJmYWNlIGNvbXBvbmVudCB0eXBlcyAqL1xuK2VudW0gaW50Zl9jb21wb25lbnQge1xuK1x0SU5URl9DT01QT05FTlRfTUFDLFxuK1x0SU5URl9DT01QT05FTlRfUEhZLFxuK1x0SU5URl9DT01QT05FTlRfTU9EVUxFLFxuK307XG4rXG4rLyogSW50ZXJmYWNlIHN1YmxheWVyIHR5cGVzICovXG4rZW51bSBpbnRmX3N1YmxheWVyIHtcbitcdElOVEZfU1VCTEFZRVJfTk9ORSxcbitcdElOVEZfU1VCTEFZRVJfUlMsXG4rXHRJTlRGX1NVQkxBWUVSX1BDUyxcbitcdElOVEZfU1VCTEFZRVJfRkVDLFxuK1x0SU5URl9TVUJMQVlFUl9QTUEsXG4rXHRJTlRGX1NVQkxBWUVSX1BNRCxcbit9O1xuK1xuKy8qIEF0dHJpYnV0ZXMgb2YgYSBzaW5nbGUgaW50ZXJmYWNlIGJsb2NrICovXG4rZW51bSB7XG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19JRCxcbitcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX0NPTVBPTkVOVCxcbitcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX1NVQkxBWUVSLFxuK1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfSU5TVEFOQ0UsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19OQU1FLFxuK1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfREVQVEgsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19MQU5FUyxcbitcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX0xPT1BCQUNLX1NVUFBPUlRFRCxcbitcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX1RYX1BBVFRFUk5TLFxuK1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfUlhfUEFUVEVSTlMsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19FUlJPUl9JTkpFQ1QsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19CRVJULFxuK1xuK1x0X19FVEhUT09MX0FfSU5URl9CTE9DS19DTlQsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19NQVggPSAoX19FVEhUT09MX0FfSU5URl9CTE9DS19DTlQgLSAxKVxuK307XG4rXG4rLyogQXR0cmlidXRlcyBvZiBpbnRmLWNhcHMtZ2V0IG1lc3NhZ2UgKi9cbitlbnVtIHtcbitcdEVUSFRPT0xfQV9JTlRGX0NBUFNfVU5TUEVDLFxuK1x0RVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIsXG4rXHRFVEhUT09MX0FfSU5URl9DQVBTX0JMT0NLUyxcbitcbitcdF9fRVRIVE9PTF9BX0lOVEZfQ0FQU19DTlQsXG4rXHRFVEhUT09MX0FfSU5URl9DQVBTX01BWCA9IChfX0VUSFRPT0xfQV9JTlRGX0NBUFNfQ05UIC0gMSlcbit9O1xuK1xuKy8qIFBIWSB0ZXN0IHBhdHRlcm4gdHlwZXMgKi9cbitlbnVtIHBoeV90ZXN0X3BhdHRlcm4ge1xuK1x0UEhZX1RFU1RfUEFUVEVSTl9PRkYsXG4rXHRQSFlfVEVTVF9QQVRURVJOX1BSQlM3LFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTOSxcbitcdFBIWV9URVNUX1BBVFRFUk5fUFJCUzExLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMTMsXG4rXHRQSFlfVEVTVF9QQVRURVJOX1BSQlMxNSxcbitcdFBIWV9URVNUX1BBVFRFUk5fUFJCUzIzLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMzEsXG4rXHRQSFlfVEVTVF9QQVRURVJOX1NTUFJRLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMTNRLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMzFRLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9TUVVBUkVfTlJaLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9TUVVBUkVfUEFNNCxcbitcdFBIWV9URVNUX1BBVFRFUk5fVFhfTElORUFSSVRZLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9TQ1JBTUJMRURfSURMRSxcbitcdFBIWV9URVNUX1BBVFRFUk5fSzI4XzUsXG4rXHRQSFlfVEVTVF9QQVRURVJOX0syOF83LFxuK1xuK1x0X19QSFlfVEVTVF9QQVRURVJOX0NPVU5ULFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9NQVggPSAoX19QSFlfVEVTVF9QQVRURVJOX0NPVU5UIC0gMSlcbit9O1xuK1xuKy8qIFBIWSB0ZXN0IEJFUlQgYWN0aW9ucyAqL1xuK2VudW0gcGh5X3Rlc3RfYWN0aW9uIHtcbitcdFBIWV9URVNUX0FDVElPTl9OT05FLFxuK1x0UEhZX1RFU1RfQUNUSU9OX1NUQVJULFxuK1x0UEhZX1RFU1RfQUNUSU9OX1NUT1AsXG4rXG4rXHRfX1BIWV9URVNUX0FDVElPTl9DT1VOVCxcbitcdFBIWV9URVNUX0FDVElPTl9NQVggPSAoX19QSFlfVEVTVF9BQ1RJT05fQ09VTlQgLSAxKVxuK307XG4rXG4rLyogQXR0cmlidXRlcyBvZiBwaHktdGVzdC1nZXQgLyBwaHktdGVzdC1hY3QgbWVzc2FnZXMgKi9cbitlbnVtIHtcbitcdEVUSFRPT0xfQV9QSFlfVEVTVF9VTlNQRUMsXG4rXHRFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSLFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lELFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0xBTkUsXG4rXHRFVEhUT09MX0FfUEhZX1RFU1RfVFhfUEFUVEVSTixcbitcdEVUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOLFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OLFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0lOSkVDVF9FUlJPUl9DT1VOVCxcbitcdEVUSFRPT0xfQV9QSFlfVEVTVF9BQ1RJVkVfVEVTVFMsXG4rXHRFVEhUT09MX0FfUEhZX1RFU1RfQ0hFQ0tFUl9MT0NLLFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0VSUk9SX0NPVU5ULFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX1RPVEFMX0JJVFNfU0VOVCxcbitcbitcdF9fRVRIVE9PTF9BX1BIWV9URVNUX0NOVCxcbitcdEVUSFRPT0xfQV9QSFlfVEVTVF9NQVggPSAoX19FVEhUT09MX0FfUEhZX1RFU1RfQ05UIC0gMSlcbit9O1xuK1xuICNlbmRpZiAvKiBfVUFQSV9MSU5VWF9FVEhUT09MX05FVExJTktfR0VORVJBVEVEX0ggKi9cbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9NYWtlZmlsZSBiL25ldC9ldGh0b29sL01ha2VmaWxlXG5pbmRleCA2MjljMTA5MTY2NzBlLi43ZGQyYzU2MjRjZWRmIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvTWFrZWZpbGVcbisrKyBiL25ldC9ldGh0b29sL01ha2VmaWxlXG5AQCAtOSw0ICs5LDQgQEAgZXRodG9vbF9ubC15XHQ6PSBuZXRsaW5rLm8gYml0c2V0Lm8gc3Ryc2V0Lm8gbGlua2luZm8ubyBsaW5rbW9kZXMubyByc3MubyBcXFxuIFx0XHQgICBjaGFubmVscy5vIGNvYWxlc2NlLm8gcGF1c2UubyBlZWUubyB0c2luZm8ubyBjYWJsZXRlc3QubyBcXFxuIFx0XHQgICB0dW5uZWxzLm8gZmVjLm8gZWVwcm9tLm8gc3RhdHMubyBwaGNfdmNsb2Nrcy5vIG1tLm8gXFxcbiBcdFx0ICAgbW9kdWxlLm8gY21pc19md191cGRhdGUubyBjbWlzX2NkYi5vIHBzZS1wZC5vIHBsY2EubyBcXFxuLVx0XHQgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vXG4rXHRcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm8gaW50Zl9jYXBzLm8gcGh5dGVzdC5vXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMgYi9uZXQvZXRodG9vbC9pbnRmX2NhcHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmU0NWNjYzRiODhjOWZcbi0tLSAvZGV2L251bGxcbisrKyBiL25ldC9ldGh0b29sL2ludGZfY2Fwcy5jXG5AQCAtMCwwICsxLDEzMCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbitcbisjaW5jbHVkZSBcIm5ldGxpbmsuaFwiXG4rI2luY2x1ZGUgXCJjb21tb24uaFwiXG4rXG4rc3RydWN0IGludGZfY2Fwc19yZXFfaW5mbyB7XG4rXHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTtcbit9O1xuK1xuK3N0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSB7XG4rXHRzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSBiYXNlO1xuK1x0c3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzIGNhcHM7XG4rfTtcbitcbisjZGVmaW5lIElOVEZfQ0FQU19SRVBEQVRBKF9fcmVwbHlfYmFzZSkgXFxcbitcdGNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSwgYmFzZSlcbitcbitjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeVtFVEhUT09MX0FfSU5URl9DQVBTX0hFQURFUiArIDFdID0ge1xuK1x0W0VUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSXSA9XG4rXHRcdE5MQV9QT0xJQ1lfTkVTVEVEKGV0aG5sX2hlYWRlcl9wb2xpY3kpLFxuK307XG4rXG4rc3RhdGljIGludCBpbnRmX2NhcHNfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhICpkYXRhID0gSU5URl9DQVBTX1JFUERBVEEocmVwbHlfYmFzZSk7XG4rXHRpbnQgbGVuID0gMDtcbitcdHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGF0YS1cdTAwM2VjYXBzLm51bV9ibG9ja3M7IGkrKykge1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoMCk7XHRcdC8qIG5lc3RlZCBibG9jayAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogaWQgKi9cbitcdFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIGNvbXBvbmVudCAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0Lyogc3VibGF5ZXIgKi9cbitcdFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIGluc3RhbmNlICovXG4rXHRcdGxlbiArPSBubGFfdG90YWxfc2l6ZShJTlRGX0JMT0NLX05BTUVfTEVOKTsgLyogbmFtZSAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSk7XHQvKiBkZXB0aCAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogbGFuZXMgKi9cbitcdFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIGxvb3BiYWNrX3N1cHBvcnRlZCAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogdHhfcGF0dGVybnMgKi9cbitcdFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIHJ4X3BhdHRlcm5zICovXG4rXHRcdGxlbiArPSBubGFfdG90YWxfc2l6ZSgwKTtcdFx0LyogZXJyb3JfaW5qZWN0IChmbGFnKSAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoMCk7XHRcdC8qIGJlcnQgKGZsYWcpICovXG4rXHR9XG4rXG4rXHQvKiBvdXRlciBCTE9DS1MgbmVzdCAqL1xuK1x0bGVuICs9IG5sYV90b3RhbF9zaXplKDApO1xuK1xuK1x0cmV0dXJuIGxlbjtcbit9XG4rXG4rc3RhdGljIGludCBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4rXHRcdFx0XHQgIHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlLFxuK1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuK3tcbitcdHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSAqZGF0YSA9IElOVEZfQ0FQU19SRVBEQVRBKHJlcGx5X2Jhc2UpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJlcGx5X2Jhc2UtXHUwMDNlZGV2O1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2ludGZfY2FwcylcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0dXJuIGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfaW50Zl9jYXBzKGRldiwgXHUwMDI2ZGF0YS1cdTAwM2VjYXBzKTtcbit9XG4rXG4rc3RhdGljIGludCBpbnRmX2NhcHNfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcbitcdFx0XHRcdGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSAqZGF0YSA9IElOVEZfQ0FQU19SRVBEQVRBKHJlcGx5X2Jhc2UpO1xuK1x0c3RydWN0IG5sYXR0ciAqYmxvY2tzX2F0dHI7XG4rXHR1MzIgaTtcbitcbitcdGJsb2Nrc19hdHRyID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBFVEhUT09MX0FfSU5URl9DQVBTX0JMT0NLUyk7XG4rXHRpZiAoIWJsb2Nrc19hdHRyKVxuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGF0YS1cdTAwM2VjYXBzLm51bV9ibG9ja3M7IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrICpiID0gXHUwMDI2ZGF0YS1cdTAwM2VjYXBzLmJsb2Nrc1tpXTtcbitcdFx0c3RydWN0IG5sYXR0ciAqYmxvY2tfYXR0cjtcbitcbitcdFx0YmxvY2tfYXR0ciA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgMCk7XG4rXHRcdGlmICghYmxvY2tfYXR0cilcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcbitcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfSUQsIGItXHUwMDNlaWQpIHx8XG4rXHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0NPTVBPTkVOVCxcbitcdFx0XHRcdGItXHUwMDNlY29tcG9uZW50KSB8fFxuK1x0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19TVUJMQVlFUixcbitcdFx0XHRcdGItXHUwMDNlc3VibGF5ZXIpIHx8XG4rXHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0lOU1RBTkNFLFxuK1x0XHRcdFx0Yi1cdTAwM2VpbnN0YW5jZSkgfHxcbitcdFx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTkFNRSwgYi1cdTAwM2VuYW1lKSB8fFxuK1x0XHQgICAgbmxhX3B1dF91OChza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0RFUFRILCBiLVx1MDAzZWRlcHRoKSB8fFxuK1x0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19MQU5FUywgYi1cdTAwM2VsYW5lcykgfHxcbitcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTE9PUEJBQ0tfU1VQUE9SVEVELFxuK1x0XHRcdFx0Yi1cdTAwM2Vsb29wYmFja19zdXBwb3J0ZWQpIHx8XG4rXHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX1RYX1BBVFRFUk5TLFxuK1x0XHRcdFx0Yi1cdTAwM2VzdXBwb3J0ZWRfdHhfcGF0dGVybnMpIHx8XG4rXHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX1JYX1BBVFRFUk5TLFxuK1x0XHRcdFx0Yi1cdTAwM2VzdXBwb3J0ZWRfcnhfcGF0dGVybnMpKVxuK1x0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuK1x0XHRpZiAoYi1cdTAwM2VlcnJvcl9pbmplY3Rfc3VwcG9ydGVkIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbmxhX3B1dF9mbGFnKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfRVJST1JfSU5KRUNUKSlcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcdFx0aWYgKGItXHUwMDNlYmVydF9zdXBwb3J0ZWQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBubGFfcHV0X2ZsYWcoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19CRVJUKSlcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcbitcdFx0bmxhX25lc3RfZW5kKHNrYiwgYmxvY2tfYXR0cik7XG4rXHR9XG4rXG4rXHRubGFfbmVzdF9lbmQoc2tiLCBibG9ja3NfYXR0cik7XG4rXHRyZXR1cm4gMDtcbitcbitubGFfcHV0X2ZhaWx1cmU6XG4rXHRubGFfbmVzdF9jYW5jZWwoc2tiLCBibG9ja3NfYXR0cik7XG4rXHRyZXR1cm4gLUVNU0dTSVpFO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfaW50Zl9jYXBzX3JlcXVlc3Rfb3BzID0ge1xuK1x0LnJlcXVlc3RfY21kXHQ9IEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVQsXG4rXHQucmVwbHlfY21kXHQ9IEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRfUkVQTFksXG4rXHQuaGRyX2F0dHJcdD0gRVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIsXG4rXHQucmVxX2luZm9fc2l6ZVx0PSBzaXplb2Yoc3RydWN0IGludGZfY2Fwc19yZXFfaW5mbyksXG4rXHQucmVwbHlfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSksXG4rXHQucHJlcGFyZV9kYXRhXHQ9IGludGZfY2Fwc19wcmVwYXJlX2RhdGEsXG4rXHQucmVwbHlfc2l6ZVx0PSBpbnRmX2NhcHNfcmVwbHlfc2l6ZSxcbitcdC5maWxsX3JlcGx5XHQ9IGludGZfY2Fwc19maWxsX3JlcGx5LFxuK307XG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5jIGIvbmV0L2V0aHRvb2wvbmV0bGluay5jXG5pbmRleCAxYWYzOTViNTQzMzBlLi41NmU1YzgxMTQ1NGJiIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvbmV0bGluay5jXG4rKysgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmNcbkBAIC00MzEsNiArNDMxLDggQEAgZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tfX0VUSFRPT0xfTVNHX1VTRVJfQ05UXSA9IHtcbiBcdFtFVEhUT09MX01TR19UU0NPTkZJR19TRVRdXHQ9IFx1MDAyNmV0aG5sX3RzY29uZmlnX3JlcXVlc3Rfb3BzLFxuIFx0W0VUSFRPT0xfTVNHX1BIWV9HRVRdXHRcdD0gXHUwMDI2ZXRobmxfcGh5X3JlcXVlc3Rfb3BzLFxuIFx0W0VUSFRPT0xfTVNHX01TRV9HRVRdXHRcdD0gXHUwMDI2ZXRobmxfbXNlX3JlcXVlc3Rfb3BzLFxuK1x0W0VUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRdXHQ9IFx1MDAyNmV0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcyxcbitcdFtFVEhUT09MX01TR19QSFlfVEVTVF9HRVRdXHQ9IFx1MDAyNmV0aG5sX3BoeV90ZXN0X3JlcXVlc3Rfb3BzLFxuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBldGhubF9kdW1wX2N0eCAqZXRobmxfZHVtcF9jb250ZXh0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbkBAIC0xNTcyLDYgKzE1NzQsMjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBldGh0b29sX2dlbmxfb3BzW10gPSB7XG4gXHRcdC5wb2xpY3kgPSBldGhubF9tc2VfZ2V0X3BvbGljeSxcbiBcdFx0Lm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX21zZV9nZXRfcG9saWN5KSAtIDEsXG4gXHR9LFxuK1x0e1xuK1x0XHQuY21kXHQ9IEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVQsXG4rXHRcdC5kb2l0XHQ9IGV0aG5sX2RlZmF1bHRfZG9pdCxcbitcdFx0LnN0YXJ0XHQ9IGV0aG5sX2RlZmF1bHRfc3RhcnQsXG4rXHRcdC5kdW1waXRcdD0gZXRobmxfZGVmYXVsdF9kdW1waXQsXG4rXHRcdC5kb25lXHQ9IGV0aG5sX2RlZmF1bHRfZG9uZSxcbitcdFx0LnBvbGljeSA9IGV0aG5sX2ludGZfY2Fwc19nZXRfcG9saWN5LFxuK1x0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3kpIC0gMSxcbitcdH0sXG4rXHR7XG4rXHRcdC5jbWRcdD0gRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULFxuK1x0XHQuZG9pdFx0PSBldGhubF9kZWZhdWx0X2RvaXQsXG4rXHRcdC5wb2xpY3kgPSBldGhubF9waHlfdGVzdF9nZXRfcG9saWN5LFxuK1x0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcGh5X3Rlc3RfZ2V0X3BvbGljeSkgLSAxLFxuK1x0fSxcbitcdHtcbitcdFx0LmNtZFx0PSBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QsXG4rXHRcdC5mbGFnc1x0PSBHRU5MX1VOU19BRE1JTl9QRVJNLFxuK1x0XHQuZG9pdFx0PSBldGhubF9hY3RfcGh5X3Rlc3QsXG4rXHRcdC5wb2xpY3kgPSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5LFxuK1x0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeSkgLSAxLFxuK1x0fSxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgZXRodG9vbF9ubF9tY2dycHNbXSA9IHtcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmggYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbmluZGV4IDNlOTY5YTA3MGY5ZmUuLjFjYWJhNjBkODNjNDMgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxuQEAgLTQ3NCw2ICs0NzQsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX21tX3JlcXVlc3Rfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcGh5X3JlcXVlc3Rfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tc2VfcmVxdWVzdF9vcHM7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9pbnRmX2NhcHNfcmVxdWVzdF9vcHM7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcztcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtFVEhUT09MX0FfSEVBREVSX0ZMQUdTICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lfc3RhdHNbRVRIVE9PTF9BX0hFQURFUl9GTEFHUyArIDFdO1xuQEAgLTUzMCw2ICs1MzIsMTEgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfSEVBREVSICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX2dldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX0hFQURFUiArIDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19zZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19NQVggKyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfbXNlX2dldF9wb2xpY3lbRVRIVE9PTF9BX01TRV9IRUFERVIgKyAxXTtcbitleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3lbRVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIgKyAxXTtcbitleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X3Rlc3RfZ2V0X3BvbGljeVtFVEhUT09MX0FfUEhZX1RFU1RfTEFORSArIDFdO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9NQVggKyAxXTtcbitcbitpbnQgZXRobmxfYWN0X3BoeV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIFxuIGludCBldGhubF9zZXRfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gaW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BoeXRlc3QuYyBiL25ldC9ldGh0b29sL3BoeXRlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmRlZGNkMDM2YjdjMmVcbi0tLSAvZGV2L251bGxcbisrKyBiL25ldC9ldGh0b29sL3BoeXRlc3QuY1xuQEAgLTAsMCArMSwxNzEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rXG4rI2luY2x1ZGUgXCJuZXRsaW5rLmhcIlxuKyNpbmNsdWRlIFwiY29tbW9uLmhcIlxuK1xuK3N0cnVjdCBwaHlfdGVzdF9yZXFfaW5mbyB7XG4rXHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTtcbit9O1xuK1xuK3N0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhIHtcbitcdHN0cnVjdCBldGhubF9yZXBseV9kYXRhIGJhc2U7XG4rXHRzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCB0ZXN0O1xuK307XG4rXG4rI2RlZmluZSBQSFlfVEVTVF9SRVBEQVRBKF9fcmVwbHlfYmFzZSkgXFxcbitcdGNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhLCBiYXNlKVxuK1xuKy8qIFBIWV9URVNUX0dFVCAqL1xuK1xuK2NvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkUgKyAxXSA9IHtcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXVx0PSBOTEFfUE9MSUNZX05FU1RFRChldGhubF9oZWFkZXJfcG9saWN5KSxcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4rXHRbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4rfTtcbitcbitzdGF0aWMgaW50IHBoeV90ZXN0X3JlcGx5X3NpemUoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcbitcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpXG4re1xuK1x0cmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXHQvKiBibG9ja19pZCAqL1xuK1x0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXHQvKiBsYW5lICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcdC8qIHR4X3BhdHRlcm4gKi9cbitcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1x0LyogcnhfcGF0dGVybiAqL1xuK1x0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXHQvKiBhY3RpdmVfdGVzdHMgKi9cbitcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSAgK1x0LyogY2hlY2tlcl9sb2NrICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU2NCkpICtcdC8qIGVycm9yX2NvdW50ICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU2NCkpO1x0LyogdG90YWxfYml0c19zZW50ICovXG4rfVxuK1xuK3N0YXRpYyBpbnQgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4rXHRcdFx0XHQgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UsXG4rXHRcdFx0XHQgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbit7XG4rXHRzdHJ1Y3QgcGh5X3Rlc3RfcmVwbHlfZGF0YSAqZGF0YSA9IFBIWV9URVNUX1JFUERBVEEocmVwbHlfYmFzZSk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmVwbHlfYmFzZS1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVx1MDAzZWF0dHJzO1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X3BoeV90ZXN0KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRtZW1zZXQoXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0LCAwLCBzaXplb2YoZGF0YS1cdTAwM2V0ZXN0KSk7XG4rXG4rXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSkge1xuK1x0XHRkYXRhLVx1MDAzZXRlc3QuYmxvY2tfaWQgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKTtcbitcdFx0ZGF0YS1cdTAwM2V0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfQkxPQ0tfSUQ7XG4rXHR9XG4rXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKSB7XG4rXHRcdGRhdGEtXHUwMDNldGVzdC5sYW5lID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKTtcbitcdFx0ZGF0YS1cdTAwM2V0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfTEFORTtcbitcdH1cbitcbitcdHJldHVybiBkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X3BoeV90ZXN0KGRldiwgXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0KTtcbit9XG4rXG4rc3RhdGljIGludCBwaHlfdGVzdF9maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhICpkYXRhID0gUEhZX1RFU1RfUkVQREFUQShyZXBseV9iYXNlKTtcbitcdGNvbnN0IHN0cnVjdCBldGh0b29sX3BoeV90ZXN0ICp0ID0gXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0O1xuK1xuK1x0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lELCB0LVx1MDAzZWJsb2NrX2lkKSB8fFxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0xBTkUsIHQtXHUwMDNlbGFuZSkgfHxcbitcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOLCB0LVx1MDAzZXR4X3BhdHRlcm4pIHx8XG4rXHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTiwgdC1cdTAwM2VyeF9wYXR0ZXJuKSB8fFxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0FDVElWRV9URVNUUyxcbitcdFx0XHR0LVx1MDAzZWFjdGl2ZV90ZXN0cykgfHxcbitcdCAgICBubGFfcHV0X3U4KHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0NIRUNLRVJfTE9DSywgdC1cdTAwM2VjaGVja2VyX2xvY2spIHx8XG4rXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfRVJST1JfQ09VTlQsXG4rXHRcdFx0ICAgICAgdC1cdTAwM2VlcnJvcl9jb3VudCwgRVRIVE9PTF9BX1BIWV9URVNUX1VOU1BFQykgfHxcbitcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9UT1RBTF9CSVRTX1NFTlQsXG4rXHRcdFx0ICAgICAgdC1cdTAwM2V0b3RhbF9iaXRzX3NlbnQsIEVUSFRPT0xfQV9QSFlfVEVTVF9VTlNQRUMpKVxuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcyA9IHtcbitcdC5yZXF1ZXN0X2NtZFx0PSBFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsXG4rXHQucmVwbHlfY21kXHQ9IEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVF9SRVBMWSxcbitcdC5oZHJfYXR0clx0PSBFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSLFxuK1x0LnJlcV9pbmZvX3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBwaHlfdGVzdF9yZXFfaW5mbyksXG4rXHQucmVwbHlfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhKSxcbitcdC5wcmVwYXJlX2RhdGFcdD0gcGh5X3Rlc3RfcHJlcGFyZV9kYXRhLFxuK1x0LnJlcGx5X3NpemVcdD0gcGh5X3Rlc3RfcmVwbHlfc2l6ZSxcbitcdC5maWxsX3JlcGx5XHQ9IHBoeV90ZXN0X2ZpbGxfcmVwbHksXG4rfTtcbitcbisvKiBQSFlfVEVTVF9BQ1QgKi9cbitcbitjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9NQVggKyAxXSA9IHtcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXVx0XHQ9IE5MQV9QT0xJQ1lfTkVTVEVEKGV0aG5sX2hlYWRlcl9wb2xpY3kpLFxuK1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9CTE9DS19JRF1cdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuK1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4rXHRbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl1cdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuK1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9CRVJUX0FDVElPTl1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuK307XG4rXG4raW50IGV0aG5sX2FjdF9waHlfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuK3tcbitcdHN0cnVjdCBldGhubF9yZXFfaW5mbyByZXFfaW5mbyA9IHt9O1xuK1x0c3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby1cdTAwM2VhdHRycztcbitcdHN0cnVjdCBldGh0b29sX3BoeV90ZXN0IHRlc3QgPSB7fTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoXHUwMDI2cmVxX2luZm8sXG4rXHRcdFx0XHRcdCB0YltFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXSxcbitcdFx0XHRcdFx0IGdlbmxfaW5mb19uZXQoaW5mbyksIGluZm8tXHUwMDNlZXh0YWNrLFxuK1x0XHRcdFx0XHQgdHJ1ZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0ZGV2ID0gcmVxX2luZm8uZGV2O1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlc2V0X3BoeV90ZXN0KSB7XG4rXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuK1x0XHRnb3RvIG91dF9kZXY7XG4rXHR9XG4rXG4rXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSkge1xuK1x0XHR0ZXN0LmJsb2NrX2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSk7XG4rXHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CTE9DS19JRDtcbitcdH1cbitcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfTEFORV0pIHtcbitcdFx0dGVzdC5sYW5lID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKTtcbitcdFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0xBTkU7XG4rXHR9XG4rXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dKSB7XG4rXHRcdHRlc3QudHhfcGF0dGVybiA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOXSk7XG4rXHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9UWF9QQVRURVJOO1xuK1x0fVxuK1x0aWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOXSkge1xuK1x0XHR0ZXN0LnJ4X3BhdHRlcm4gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl0pO1xuK1x0XHR0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfUlhfUEFUVEVSTjtcbitcdH1cbitcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkVSVF9BQ1RJT05dKSB7XG4rXHRcdHRlc3QuYmVydF9hY3Rpb24gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfQkVSVF9BQ1RJT05dKTtcbitcdFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0JFUlRfQUNUSU9OO1xuK1x0fVxuK1x0aWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9JTkpFQ1RfRVJST1JfQ09VTlRdKSB7XG4rXHRcdHRlc3QuaW5qZWN0X2Vycm9yX2NvdW50ID1cbitcdFx0XHRubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXSk7XG4rXHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9JTkpFQ1RfQ09VTlQ7XG4rXHR9XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdHJldCA9IGV0aG5sX29wc19iZWdpbihkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBvdXRfcnRubDtcbitcbitcdHJldCA9IGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VzZXRfcGh5X3Rlc3QoZGV2LCBcdTAwMjZ0ZXN0KTtcbitcdGV0aG5sX29wc19jb21wbGV0ZShkZXYpO1xuK1xuK291dF9ydG5sOlxuK1x0cnRubF91bmxvY2soKTtcbitvdXRfZGV2OlxuK1x0ZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9wdXQoXHUwMDI2cmVxX2luZm8pO1xuK1x0cmV0dXJuIHJldDtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjoxNS43MzA5MTQ2MzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTc2MjE1MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEV0aHRvb2wgTmV0bGluayBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGZldyBuZXcgZXRodG9vbCBuZXRsaW5rIG1lc3NhZ2VzOiBgRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVGAsIGBFVEhUT09MX01TR19QSFlfVEVTVF9HRVRgLCBhbmQgYEVUSFRPT0xfTVNHX1BIWV9URVNUX0FDVGAuIFRoZXNlIGFyZSBzcGVjaWZpY2FsbHkgYWltZWQgYXQgcmV0cmlldmluZyBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzIOKAkyBzb3VuZHMgbGlrZSBhIGZ1bmN0aW9uYWwgYmxvY2sgZGlhZ3JhbSDigJMgYW5kIGdldHRpbmcvc2V0dGluZyBQSFkgdGVzdCBzdGF0dXMsIHdoaWNoIGluY2x1ZGVzIHRoaW5ncyBsaWtlIHBhdHRlcm4gY29uZmlndXJhdGlvbnMgYW5kIEJFUlQgY291bnRlcnMuIFNlZW1zIHJlYXNvbmFibGUsIGdpdmVuIHRoZSBkaXJlY3Rpb24gd2UndmUgYmVlbiBnb2luZyB3aXRoIGV0aHRvb2wuXG5cblRoZSBjaGFuZ2VzIGFyZSBmYWlybHkgY29uY2VudHJhdGVkOiB0aGUgY29yZSBgbmV0L2V0aHRvb2wvbmV0bGluay5jYCwgdGhlIGhlYWRlciBpbiBgbmV0L2V0aHRvb2wvbmV0bGluay5oYCwgdGhlIGBNYWtlZmlsZWAsIGFuZCB0aGVuIG5ldyBzb3VyY2UgZmlsZXMgYG5ldC9ldGh0b29sL2ludGZfY2Fwcy5jYCBhbmQgYG5ldC9ldGh0b29sL3BoeXRlc3QuY2AuIE9mIGNvdXJzZSwgd2UgaGF2ZSB0aGUgY29ycmVzcG9uZGluZyB1cGRhdGVzIHRvIHRoZSBldGh0b29sIGtlcm5lbCBoZWFkZXJzIGluIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgYW5kIHRoZSB1c2VyLXNwYWNlIEFQSSBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaGAuIFN0YW5kYXJkIHN0dWZmLlxuXG5MZXQncyBtYWtlIHN1cmUgdGhlc2UgbmV3IG1lc3NhZ2VzIGFyZSBhY3R1YWxseSBiZWluZyBoYW5kbGVkLiBPa2F5LCB0aGV5J3JlIGFkZGVkIHRvIGBldGh0b29sX2dlbmxfb3BzYCB3aXRoaW4gYG5ldC9ldGh0b29sL25ldGxpbmsuY2AsIHRoYXQgc2VlbXMgcmlnaHQuIExvb2tpbmcgYXQgdGhlIGltcGxlbWVudGF0aW9uLCBgRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVGAgYW5kIGBFVEhUT09MX01TR19QSFlfVEVTVF9HRVRgIGFyZSB1c2luZyBgZXRobmxfZGVmYXVsdF9kb2l0YCDigJMgd2hpY2ggbGlrZWx5IGltcGxpZXMgc29tZSBnZW5lcmljIG5ldGxpbmsgaGFuZGxpbmcg4oCTIHdoaWxlIGBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1RgIHNwZWNpZmljYWxseSB1c2VzIGBldGhubF9hY3RfcGh5X3Rlc3RgLlxuXG5BbHJpZ2h0LCBsZXQncyB0cmFjayBkb3duIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24uIEknbGwgbmVlZCB0byBsb29rIGZvciBgZXRobmxfYWN0X3BoeV90ZXN0YCBhbmQgYWxzbyBgZXRobmxfaW50Zl9jYXBzX3JlcXVlc3Rfb3BzYCBhbmQgYGV0aG5sX3BoeV90ZXN0X3JlcXVlc3Rfb3BzYC4gQWhhISBUaGV5J3JlIGRlZmluZWQgd2l0aGluIGBuZXQvZXRodG9vbC9waHl0ZXN0LmNgIGFuZCBgbmV0L2V0aHRvb2wvaW50Zl9jYXBzLmNgLCBhcyBleHBlY3RlZC5cblxuT25lIGNyaXRpY2FsIGNoZWNrOiB3aGF0IGFib3V0IHRoZSBjb25maWc/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBldGh0b29sIG5ldGxpbmsgaXMgYWN0dWFsbHkgZW5hYmxlZC4gYENPTkZJR19FVEhUT09MX05FVExJTktgIHNob3VsZCBkbyBpdC4gV2FpdCwgaG9sZCBvbi4gYENPTkZJR19FVEhUT09MX05FVExJTktgIGlzIHVzdWFsbHkgYXV0by1lbmFibGVkIG9yIGRlcGVuZHMgb24gYENPTkZJR19ORVRgLiBJIHNob3VsZCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgZGVwZW5kZW5jeSBpcyBhcyBJIGV4cGVjdC4gTGV0J3MgbG9vayBhdCBgbmV0L2V0aHRvb2wvS2NvbmZpZ2Agb3IgYG5ldC9LY29uZmlnYCB0byBiZSBzdXJlLiBOb3RoaW5nIHRvbyB0cmlja3ksIGhvcGVmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjoyMy4zMDcxMzMzMTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0ODE0NDExNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVRIVE9PTF9ORVRMSU5LXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTUwNz1jb25maWcgRkFJTE9WRVJcXG4tLVxcbm5ldC9LY29uZmlnLTUxOS1cXG5uZXQvS2NvbmZpZzo1MjA6Y29uZmlnIEVUSFRPT0xfTkVUTElOS1xcbm5ldC9LY29uZmlnLTUyMS1cXHRib29sIFxcXCJOZXRsaW5rIGludGVyZmFjZSBmb3IgZXRodG9vbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MjUuMDU1Mjg0NDMzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxODY5Njg4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBuYXZpZ2F0ZSBkaXJlY3RseSB0byBgbmV0L0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlc2lkZSwgc28gaXTigJlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGFuZCBtb2RpZnlpbmcgbmV0d29yay1yZWxhdGVkIHNldHRpbmdzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBUaGlzIGlzIHdoZXJlIHRoZSBpbml0aWFsIHdvcmsgaGFwcGVucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNDYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjoyOC42NzM5ODQxNzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTU6XFx0XFx0ICBmYWlsb3ZlciBuZXRkZXYuIFRoaXMgZW5hYmxlcyBwYXJhdmlydHVhbCBkcml2ZXJzIHRvIHVzZSBhXFxuIDUxNjpcXHRcXHQgIFZGIGFzIGFuIGFjY2VsZXJhdGVkIGxvdyBsYXRlbmN5IGRhdGFwYXRoLiBJdCBhbHNvIGFsbG93cyBsaXZlXFxuIDUxNzpcXHRcXHQgIG1pZ3JhdGlvbiBvZiBWTXMgd2l0aCBkaXJlY3QgYXR0YWNoZWQgVkZzIGJ5IGZhaWxpbmcgb3ZlciB0byB0aGVcXG4gNTE4OlxcdFxcdCAgcGFyYXZpcnR1YWwgZGF0YXBhdGggd2hlbiB0aGUgVkYgaXMgdW5wbHVnZ2VkLlxcbiA1MTk6XFx0XFxuIDUyMDpcXHRjb25maWcgRVRIVE9PTF9ORVRMSU5LXFxuIDUyMTpcXHRcXHRib29sIFxcXCJOZXRsaW5rIGludGVyZmFjZSBmb3IgZXRodG9vbFxcXCJcXG4gNTIyOlxcdFxcdHNlbGVjdCBESU1MSUJcXG4gNTIzOlxcdFxcdGRlZmF1bHQgeVxcbiA1MjQ6XFx0XFx0aGVscFxcbiA1MjU6XFx0XFx0ICBBbiBhbHRlcm5hdGl2ZSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGZvciBldGh0b29sIGJhc2VkIG9uIGdlbmVyaWNcXG4gNTI2OlxcdFxcdCAgbmV0bGluay4gSXQgcHJvdmlkZXMgYmV0dGVyIGV4dGVuc2liaWxpdHkgYW5kIHNvbWUgbmV3IGZlYXR1cmVzLFxcbiA1Mjc6XFx0XFx0ICBlLmcuIG5vdGlmaWNhdGlvbiBtZXNzYWdlcy5cXG4gNTI4OlxcdFxcbiA1Mjk6XFx0Y29uZmlnIE5FVERFVl9BRERSX0xJU1RfVEVTVFxcbiA1MzA6XFx0XFx0dHJpc3RhdGUgXFxcIlVuaXQgdGVzdHMgZm9yIGRldmljZSBhZGRyZXNzIGxpc3RcXFwiXFxuIDUzMTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiA1MzI6XFx0XFx0ZGVwZW5kcyBvbiBLVU5JVFxcbiA1MzM6XFx0XFxuIDUzNDpcXHRjb25maWcgTkVUX1RFU1RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MjguNjc0MDUwNDMyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI5Njk2MzAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB0aGlzIGZlYXR1cmUgaXMgb24gYnkgZGVmYXVsdCDigJMgZ29vZCB0byBrbm93LiBOb3csIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBmdW5jdGlvbiBjYWxscy4gSSBzZWUgdGhlc2UgYXMga2V5OiBgZXRobmxfYWN0X3BoeV90ZXN0YCwgYGludGZfY2Fwc19wcmVwYXJlX2RhdGFgLCBgaW50Zl9jYXBzX2ZpbGxfcmVwbHlgLCBgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhYCwgYW5kIGBwaHlfdGVzdF9maWxsX3JlcGx5YC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBidWlsZGluZyBibG9ja3MgcmVsYXRlZCB0byBlaXRoZXIgaW50ZXJmYWNlIGNhcGFiaWxpdGllcyBvciB0aGUgUEhZIHRlc3RpbmcgaXRzZWxmLiBNeSBuZXh0IHN0ZXAsIGFuZCBpdCdzIGEgY3JpdGljYWwgb25lLCBpcyB0byBkZXRlcm1pbmUgd2hpY2ggZHJpdmVycyBhcmUgYWN0dWFsbHkgKnVzaW5nKiB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBsb2NhdGUgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgZ2V0X2ludGZfY2Fwc2AsIGBnZXRfcGh5X3Rlc3RgLCBhbmQgYHNldF9waHlfdGVzdGAuIFRoYXQgd2lsbCByZXZlYWwgdGhlIHNwZWNpZmljIGhhcmR3YXJlIHRoZXNlIGZlYXR1cmVzIGFyZSBpbXBhY3RpbmcgYW5kIGhvdyB0aGV5J3JlIGJlaW5nIHVzZWQgd2l0aGluIHRoYXQgY29udGV4dC4gRnJvbSB0aGVyZSwgSSBjYW4gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIGV4aXN0aW5nIGRyaXZlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTgwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MzUuOTcxMDE1NDI3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Nzg5NzIzNTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuZ2V0X2ludGZfY2Fwc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MzcuODQ5OTk0NTI1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUyODUyODk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGdldF9waHlfdGVzdGAgYW5kIGBzZXRfcGh5X3Rlc3RgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlc2UgdHdvIGZ1bmN0aW9ucywgYGdldF9waHlfdGVzdGAgYW5kIGBzZXRfcGh5X3Rlc3RgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkb3VibGUtY2hlY2sgdGhlaXIgaW1wbGVtZW50YXRpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJmYWNlIHdpdGggdGhlIFBIWSBsYXllciBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCBob3cgdGhleSBoYW5kbGUgdGVzdCBtb2RlIGNvbmZpZ3VyYXRpb24uIEFyZSB0aGV5IHJlYWRpbmcvd3JpdGluZyBkaXJlY3RseSB0byByZWdpc3RlcnMsIG9yIGFyZSB0aGV5IHVzaW5nIHNvbWUgYWJzdHJhY3Rpb24gbGF5ZXIgbGlrZSBhIGRyaXZlcj8gSWYgaXQncyB0aGUgbGF0dGVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZHJpdmVyJ3MgdW5kZXJseWluZyBtZWNoYW5pc21zLlxuXG5XaGF0J3MgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlPyBBcmUgdGhlc2UgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmluZyBzcGVjaWZpYyBQSFkgdGVzdCBtb2Rlcywgb3IgYXJlIHRoZXkgbW9yZSBnZW5lcmFsLCBwcm92aWRpbmcgYSB3cmFwcGVyIGZvciBkaWZmZXJlbnQgdGVzdCBzY2VuYXJpb3M/IEkgbmVlZCB0byBsb29rIGF0IGFueSBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGVtIHRvIGdldCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgaW50ZW5kZWQgcHVycG9zZSBhbmQgc2NvcGUuXG5cbkZ1cnRoZXJtb3JlLCBJIG5lZWQgdG8gY29uc2lkZXIgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3VlcywgZXNwZWNpYWxseSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGFjY2Vzc2VkIGNvbmN1cnJlbnRseSwgb3IgZnJvbSBkaWZmZXJlbnQgY29udGV4dHMuIEkgd2FudCB0byBsb29rIGNsb3NlbHkgYXQgd2hhdCB0aGVzZSBmdW5jdGlvbnMgZG8sIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgdGhyZWFkIHNhZmV0eSwgYW5kIGNvbmN1cnJlbmN5LiBJIHdhbnQgdG8gc2VlIGlmIGFueSBtdXRleGVzLCBzZW1hcGhvcmVzLCBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBhcmUgYmVpbmcgdXNlZCB0byBwcm90ZWN0IHNoYXJlZCByZXNvdXJjZXMuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgZXJyb3IgaGFuZGxpbmcuIEhvdyByb2J1c3QgYXJlIHRoZXNlIGZ1bmN0aW9ucz8gRG8gdGhleSBoYW5kbGUgZGlmZmVyZW50IHR5cGVzIG9mIFBIWSBpbml0aWFsaXphdGlvbiBmYWlsdXJlcywgb3IgaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLCBvciBjb21tdW5pY2F0aW9uIGVycm9ycyBncmFjZWZ1bGx5PyBBcmUgdGhlcmUgcHJvcGVyIGVycm9yIGNvZGVzIG9yIGV4Y2VwdGlvbiBoYW5kbGluZz8gQW55IHVuaXQgdGVzdHMgZm9yIHRoZXNlIGZ1bmN0aW9ucz8gV2hhdCBhcmUgdGhleSB0ZXN0aW5nP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkyNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA2OjQyLjM3ODUyNjM4NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNjk0NTc1OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXC5nZXRfcGh5X3Rlc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA2OjQ0LjExNTQ3OTkxNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODc5OTQ3NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFVEhUT09MIE5ldGxpbmsgUEhZIFRlc3QgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgRVRIVE9PTCBuZXRsaW5rIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIFBIWSB0ZXN0IGZ1bmN0aW9uYWxpdHkuIFRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBubyBjdXJyZW50IGRyaXZlcnMgaW1wbGVtZW50IHRoZXNlIGZlYXR1cmVzIHlldCwgdGhpcyBhcmVhIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgbmV0bGluayBjb3JlIGl0c2VsZiBpcyByZWFjaGFibGUsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuXG5cblRoZSBjb3JlIHBhcnNlcyB0aGUgbmV0bGluayBtZXNzYWdlcyBhbmQgdGhlbiBjYWxscyBkcml2ZXIgb3BlcmF0aW9ucyBpZiB0aGV5IGV4aXN0LiBJZiB0aGUgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uLCBpdCByZXR1cm5zIGAtRU9QTk9UU1VQUGAsIHdoaWNoIGlzIGFzIGV4cGVjdGVkLiBIb3dldmVyLCBldmVuIGlmIHRoZSBkcml2ZXIgb3BzIGFyZSBtaXNzaW5nLCBzb21lIHBhcnNpbmcgbG9naWMgaW4gYGV0aG5sX2FjdF9waHlfdGVzdGAgYW5kIGBwaHlfdGVzdF9wcmVwYXJlX2RhdGFgIG1pZ2h0IGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgY2hlY2suXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQuIExvb2tpbmcgZGVlcGVyLCBJIHNlZSB0aGF0IGBldGhubF9kZWZhdWx0X2RvaXRgIGNhbGxzIGBwcmVwYXJlX2RhdGFgIHdoaWNoIGNhbGxzIGBkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2ludGZfY2Fwc2AuIEFuZCBpZiB0aGlzIGlzIE5VTEwsIGAtRU9QTk9UU1VQUGAgaXMgcmV0dXJuZWQuIFNvIGl0IG1ha2VzIHNlbnNlIHRoYXQgYGludGZfY2Fwc19maWxsX3JlcGx5YCB3b24ndCBiZSByZWFjaGVkLlxuXG5CdXQgd2FpdCwgYGV0aG5sX2FjdF9waHlfdGVzdGAgZG9lcyBzb21lIGF0dHJpYnV0ZSBwYXJzaW5nICpiZWZvcmUqIHRoZSBjaGVjayBmb3IgYGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VzZXRfcGh5X3Rlc3RgLiBPa2F5LCBsZXQncyBleGFtaW5lIGBldGhubF9hY3RfcGh5X3Rlc3RgLlxuXG5gYGBjXG5cdHJldCA9IGV0aG5sX3BhcnNlX2hlYWRlcl9kZXZfZ2V0KFx1MDAyNnJlcV9pbmZvLFxuXHRcdFx0XHRcdCB0YltFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXSxcblx0XHRcdFx0XHQgZ2VubF9pbmZvX25ldChpbmZvKSwgaW5mby1cdTAwM2VleHRhY2ssXG5cdFx0XHRcdFx0IHRydWUpO1xuXHRpZiAocmV0IFx1MDAzYyAwKVxuXHRcdHJldHVybiByZXQ7XG5cblx0ZGV2ID0gcmVxX2luZm8uZGV2O1xuXG5cdGlmICghZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZXNldF9waHlfdGVzdCkge1xuXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuXHRcdGdvdG8gb3V0X2Rldjtcblx0fVxuYGBgXG5cbk9rYXksIEkgc2VlLiBgZXRobmxfYWN0X3BoeV90ZXN0YCBjaGVja3MgZm9yIGBzZXRfcGh5X3Rlc3RgICppbW1lZGlhdGVseSogYWZ0ZXIgcmV0cmlldmluZyB0aGUgZGV2aWNlLlxuXG5gYGBjXG5cdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKSB7XG5cdFx0dGVzdC5ibG9ja19pZCA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9CTE9DS19JRF0pO1xuXHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CTE9DS19JRDtcblx0fVxuYGBgXG5cbkFuZCB0aGlzIGF0dHJpYnV0ZSBwYXJzaW5nIGlzIGRvbmUgKiphZnRlcioqIHRoZSBjaGVjazpcblxuYGBgY1xuXHRpZiAoIWRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VzZXRfcGh5X3Rlc3QpIHtcblx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcblx0XHRnb3RvIG91dF9kZXY7XG5cdH1cbmBgYFxuXG5TbyBpdCBsb29rcyBsaWtlIGlmIG5vIGRyaXZlciBpbXBsZW1lbnRzIGBzZXRfcGh5X3Rlc3RgLCB0aGF0IHBhcnNpbmcgbG9naWMgaXNuJ3QgZXZlbiByZWFjaGVkLiBIbW0uIEkgYmV0dGVyIGRvdWJsZS1jaGVjayBgZXRobmxfYWN0X3BoeV90ZXN0YCB0byBiZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgc29tZXRoaW5nIGNydWNpYWwuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGdldCByaWdodCBiZWZvcmUgSSBzdGFydCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMxMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjo1Mi45OTU0Mjk3NjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2V0aHRvb2wvcGh5dGVzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwOSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwOTpcXHRcXG4gMTEwOlxcdGludCBldGhubF9hY3RfcGh5X3Rlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gMTExOlxcdHtcXG4gMTEyOlxcdFxcdHN0cnVjdCBldGhubF9yZXFfaW5mbyByZXFfaW5mbyA9IHt9O1xcbiAxMTM6XFx0XFx0c3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby1cXHUwMDNlYXR0cnM7XFxuIDExNDpcXHRcXHRzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCB0ZXN0ID0ge307XFxuIDExNTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiAxMTY6XFx0XFx0aW50IHJldDtcXG4gMTE3OlxcdFxcbiAxMTg6XFx0XFx0cmV0ID0gZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoXFx1MDAyNnJlcV9pbmZvLFxcbiAxMTk6XFx0XFx0XFx0XFx0XFx0XFx0IHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9IRUFERVJdLFxcbiAxMjA6XFx0XFx0XFx0XFx0XFx0XFx0IGdlbmxfaW5mb19uZXQoaW5mbyksIGluZm8tXFx1MDAzZWV4dGFjayxcXG4gMTIxOlxcdFxcdFxcdFxcdFxcdFxcdCB0cnVlKTtcXG4gMTIyOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAxMjM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTI0OlxcdFxcbiAxMjU6XFx0XFx0ZGV2ID0gcmVxX2luZm8uZGV2O1xcbiAxMjY6XFx0XFxuIDEyNzpcXHRcXHRpZiAoIWRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZXNldF9waHlfdGVzdCkge1xcbiAxMjg6XFx0XFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuIDEyOTpcXHRcXHRcXHRnb3RvIG91dF9kZXY7XFxuIDEzMDpcXHRcXHR9XFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKSB7XFxuIDEzMzpcXHRcXHRcXHR0ZXN0LmJsb2NrX2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSk7XFxuIDEzNDpcXHRcXHRcXHR0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfQkxPQ0tfSUQ7XFxuIDEzNTpcXHRcXHR9XFxuIDEzNjpcXHRcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKSB7XFxuIDEzNzpcXHRcXHRcXHR0ZXN0LmxhbmUgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfTEFORV0pO1xcbiAxMzg6XFx0XFx0XFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0xBTkU7XFxuIDEzOTpcXHRcXHR9XFxuIDE0MDpcXHRcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dKSB7XFxuIDE0MTpcXHRcXHRcXHR0ZXN0LnR4X3BhdHRlcm4gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfVFhfUEFUVEVSTl0pO1xcbiAxNDI6XFx0XFx0XFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX1RYX1BBVFRFUk47XFxuIDE0MzpcXHRcXHR9XFxuIDE0NDpcXHRcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX1JYX1BBVFRFUk5dKSB7XFxuIDE0NTpcXHRcXHRcXHR0ZXN0LnJ4X3BhdHRlcm4gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl0pO1xcbiAxNDY6XFx0XFx0XFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX1JYX1BBVFRFUk47XFxuIDE0NzpcXHRcXHR9XFxuIDE0ODpcXHRcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OXSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjo1Mi45OTU0OTU3NjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3NzQwNTE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBvdGVudGlhbDogRXRodG9vbCBOZXRsaW5rIEludGVyZmFjZSoqXG5cbk9rYXksIHNvIHRoZSBwYXJzaW5nIGl0c2VsZiBoYXBwZW5zICphZnRlciogdGhlIGluaXRpYWwgY2hlY2tzLCB3aGljaCBpcyBnb29kLiBCdXQgd2FpdCwgdGhlIE5ldGxpbmsgcG9saWN5IHBhcnNpbmcsIGhhbmRsZWQgYnkgdGhlIGdlbmVyaWMgTmV0bGluayBjb3JlLCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gSSBrbm93IHRoZSBwb2xpY2llcyBhcmUgZGVmaW5lZCBpbiBgZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeWAsIGBldGhubF9waHlfdGVzdF9nZXRfcG9saWN5YCwgYW5kIGBldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeWAsIGFuZCBgZXRobmxfYWN0X3BoeV90ZXN0YCBnZXRzIHVzIHRoYXQgZmFyLlxuXG5TbywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LCB5ZXMhIFRoZXNlIGFyZSBuZXcgTmV0bGluayBtZXNzYWdlcyBhbmQgcG9saWNpZXMsIHBlcmZlY3QgZm9yIFN5emthbGxlci4gSXQgY2FuIHBva2UgYXQgdGhlIG1lc3NhZ2UgZm9ybWF0cy4gRXZlbiBpZiB0aGVyZSdzIG5vIGRyaXZlciBhY3R1YWxseSAqdXNpbmcqIHRoaXMgZnVuY3Rpb25hbGl0eSB5ZXQsIHRoZSBwYXJzaW5nIGFuZCBpbml0aWFsIGhhbmRsZXJzIGFyZSBkZWZpbml0ZWx5IHRoZXJlIGFuZCByZWFjaGFibGUuXG5cbkhtbSwgb24gc2Vjb25kIHRob3VnaHQsIGlmIG5vIGRyaXZlciBpbXBsZW1lbnRzIHRoZXNlIGZ1bmN0aW9ucywgdGhlIGNvdmVyYWdlIGZyb20gZnV6emluZyB3aWxsIGJlIHZlcnkgbGltaXRlZC4gSXQgd291bGQgZXNzZW50aWFsbHkganVzdCBiZSB0ZXN0aW5nIHRoZSBwYXJzaW5nIGxvZ2ljIGl0c2VsZi4gQnV0LCBpdCBpcyBzdGlsbCBuZXcga2VybmVsIGNvZGUsIGFuZCBhbnkgY292ZXJhZ2UgaXMgdmFsdWFibGUuIExldCdzIG5vdCB3cml0ZSB0aGlzIG9mZiBjb21wbGV0ZWx5LiBJIHNob3VsZCBxdWlja2x5IGNoZWNrIHRoZSBjdXJyZW50IGtlcm5lbCB0cmVlIHRvIHNlZSBpZiBhbnkgZHJpdmVyIHdhcyBhZGRlZCB0byBpbXBsZW1lbnQgdGhpcyBmZWF0dXJlLiBQZXJoYXBzIGEgcmVsYXRlZCBjb21taXQgaW4gdGhlIHNhbWUgc2VyaWVzIHNudWNrIGEgZHJpdmVyIGluLiBHb3R0YSBjaGVjayBpdCBvdXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjY4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6NTguMzcyOTAzNTI2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQwNTg3MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9waHlfdGVzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfaGVscGVyLmM9MzI5OT1FWFBPUlRfU1lNQk9MKGRybV9kcF9nZXRfcGh5X3Rlc3RfcGF0dGVybik7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfaGVscGVyLmMtMzMwMS0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfaGVscGVyLmM6MzMwMjogKiBkcm1fZHBfc2V0X3BoeV90ZXN0X3BhdHRlcm4oKSAtIHNldCB0aGUgcGF0dGVybiB0byB0aGUgc2luay5cXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfaGVscGVyLmMtMzMwMy0gKiBAYXV4OiBEaXNwbGF5UG9ydCBBVVggY2hhbm5lbFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5jLTMzMDgtICovXFxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5jOjMzMDk6aW50IGRybV9kcF9zZXRfcGh5X3Rlc3RfcGF0dGVybihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LFxcbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9oZWxwZXIuYy0zMzEwLVxcdFxcdFxcdFxcdHN0cnVjdCBkcm1fZHBfcGh5X3Rlc3RfcGFyYW1zICpkYXRhLCB1OCBkcF9yZXYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfaGVscGVyLmMtMzMzNC19XFxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5jOjMzMzU6RVhQT1JUX1NZTUJPTChkcm1fZHBfc2V0X3BoeV90ZXN0X3BhdHRlcm4pO1xcbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9oZWxwZXIuYy0zMzM2LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF90ZXN0LmM9MzA2PXN0YXRpYyB2b2lkIGludGVsX2RwX3Byb2Nlc3NfcGh5X3JlcXVlc3Qoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfdGVzdC5jLTMzMC1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX3Rlc3QuYzozMzE6XFx0ZHJtX2RwX3NldF9waHlfdGVzdF9wYXR0ZXJuKFxcdTAwMjZpbnRlbF9kcC1cXHUwMDNlYXV4LCBkYXRhLFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfdGVzdC5jLTMzMi1cXHRcXHRcXHRcXHQgICAgaW50ZWxfZHAtXFx1MDAzZWRwY2RbRFBfRFBDRF9SRVZdKTtcXG4tLVxcbmluY2x1ZGUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5oPTk4OT1pbnQgZHJtX2RwX2dldF9waHlfdGVzdF9wYXR0ZXJuKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsXFxuaW5jbHVkZS9kcm0vZGlzcGxheS9kcm1fZHBfaGVscGVyLmgtOTkwLVxcdFxcdFxcdFxcdHN0cnVjdCBkcm1fZHBfcGh5X3Rlc3RfcGFyYW1zICpkYXRhKTtcXG5pbmNsdWRlL2RybS9kaXNwbGF5L2RybV9kcF9oZWxwZXIuaDo5OTE6aW50IGRybV9kcF9zZXRfcGh5X3Rlc3RfcGF0dGVybihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LFxcbmluY2x1ZGUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5oLTk5Mi1cXHRcXHRcXHRcXHRzdHJ1Y3QgZHJtX2RwX3BoeV90ZXN0X3BhcmFtcyAqZGF0YSwgdTggZHBfcmV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oPTEyODY9c3RydWN0IGV0aHRvb2xfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTE0NDYtXFx0XFx0XFx0XFx0c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnRlc3QpO1xcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjE0NDc6XFx0aW50XFx0KCpzZXRfcGh5X3Rlc3QpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTQ0OC1cXHRcXHRcXHRcXHRzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCAqdGVzdCk7XFxuLS1cXG5uZXQvZXRodG9vbC9waHl0ZXN0LmM9MTEwPWludCBldGhubF9hY3RfcGh5X3Rlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL3BoeXRlc3QuYy0xMjYtXFxubmV0L2V0aHRvb2wvcGh5dGVzdC5jOjEyNzpcXHRpZiAoIWRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZXNldF9waHlfdGVzdCkge1xcbm5ldC9ldGh0b29sL3BoeXRlc3QuYy0xMjgtXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvZXRodG9vbC9waHl0ZXN0LmMtMTYyLVxcbm5ldC9ldGh0b29sL3BoeXRlc3QuYzoxNjM6XFx0cmV0ID0gZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlc2V0X3BoeV90ZXN0KGRldiwgXFx1MDAyNnRlc3QpO1xcbm5ldC9ldGh0b29sL3BoeXRlc3QuYy0xNjQtXFx0ZXRobmxfb3BzX2NvbXBsZXRlKGRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA2OjU5LjgxMzQ5NDQ4N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk5NDQxNDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IE1pc3NpbmcgSW1wbGVtZW50YXRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBjb2RlIGFuZCwgYXMgSSBzdXNwZWN0ZWQsIG5vbmUgb2YgdGhlIGRyaXZlcnMgYXJlIGFjdHVhbGx5IGltcGxlbWVudGluZyBgc2V0X3BoeV90ZXN0YCwgYGdldF9waHlfdGVzdGAsIG9yIGBnZXRfaW50Zl9jYXBzYCBhdCB0aGlzIHBvaW50LiBUaGF0J3MgYSBiaXQgb2YgYSByZWQgZmxhZywgYnV0IG5vdCBuZWNlc3NhcmlseSB1bmV4cGVjdGVkIGdpdmVuIHRoZSBzdGFnZSBvZiBkZXZlbG9wbWVudC4gV2UgbWlnaHQgYmUgcmVseWluZyBvbiBkZWZhdWx0IG9yIHBsYWNlaG9sZGVyIGJlaGF2aW9yIGZvciBub3cuIEknZCBiZXR0ZXIgY29uZmlybSB0aGF0IHRoZSBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzIGFyZSBjb3JyZWN0bHkgZXN0YWJsaXNoZWQuIExldCBtZSBqdW1wIGluIGFuZCBoYXZlIGEgcXVpY2sgbG9vayBhdCBgZ2V0X2ludGZfY2Fwc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzQyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDc6MDMuMTEyOTM5MjI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI1NDM1MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9pbnRmX2NhcHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9ldGh0b29sLmg9MTI4Nj1zdHJ1Y3QgZXRodG9vbF9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTQ0Mi1cXHR2b2lkXFx0KCpnZXRfbW1fc3RhdHMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX21tX3N0YXRzICpzdGF0cyk7XFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6MTQ0MzpcXHRpbnRcXHQoKmdldF9pbnRmX2NhcHMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTQ0NC1cXHRcXHRcXHRcXHQgc3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzICpjYXBzKTtcXG4tLVxcbm5ldC9ldGh0b29sL2ludGZfY2Fwcy5jPTUyPXN0YXRpYyBpbnQgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxcbi0tXFxubmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMtNTgtXFxubmV0L2V0aHRvb2wvaW50Zl9jYXBzLmM6NTk6XFx0aWYgKCFkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VnZXRfaW50Zl9jYXBzKVxcbm5ldC9ldGh0b29sL2ludGZfY2Fwcy5jLTYwLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5uZXQvZXRodG9vbC9pbnRmX2NhcHMuYy02MS1cXG5uZXQvZXRodG9vbC9pbnRmX2NhcHMuYzo2MjpcXHRyZXR1cm4gZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X2ludGZfY2FwcyhkZXYsIFxcdTAwMjZkYXRhLVxcdTAwM2VjYXBzKTtcXG5uZXQvZXRodG9vbC9pbnRmX2NhcHMuYy02My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA3OjA0LjUzODM4MTQ4MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTY2MDkzOTMyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUHJvcG9zZWQgRXRodG9vbCBOZXRsaW5rIEFkZGl0aW9ucyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgdGhlIG5ldyBldGh0b29sIG5ldGxpbmsgYWRkaXRpb25zLiBUaGUgY29yZSBvZiBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gQnV0IHdhaXQsIHRoaXMgaW50cm9kdWNlcyBuZXcgbmV0bGluayBtZXNzYWdlIHR5cGVzIGFuZCBwb2xpY2llcywgd2hpY2ggKnN5emthbGxlciogd2lsbCBkZWZpbml0ZWx5IGdvIGFmdGVyLiBUaGF0J3MgYSBnb29kIHNpZ24uIFRoZSBwYXJzaW5nIG9mIHRoZXNlIG5ldGxpbmsgbWVzc2FnZXMgaXMgcmVhY2hhYmxlLiBJIG1lYW4sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYGV0aG5sX2FjdF9waHlfdGVzdGAgc3BlY2lmaWNhbGx5IOKAkyB0aGUgZnVuY3Rpb24gY2FsbCB0aGF0IHBhcnNlcyB0aGUgaGVhZGVyLCByZXRyaWV2ZXMgdGhlIGRldmljZSwgYW5kIHRoZW4gZG9lcyBhIGNoZWNrIG9mIGBzZXRfcGh5X3Rlc3RgIGFuZCByZWxhdGVkIG5ldGxpbmsgcG9saWNpZXMuIEkgYW0gdGhpbmtpbmcgdGhhdCBgZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXRgIGlzIHJlYWNoYWJsZSB3aGljaCBnaXZlcyBtZSBjb25maWRlbmNlLlxuXG5UaGUgcmVhY2hhYmxlIG5ldGxpbmsgcG9saWNpZXMgYXJlIGBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5YCwgYGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3lgLCBhbmQgYGV0aG5sX2ludGZfY2Fwc19nZXRfcG9saWN5YC4gVGhlc2Ugd2lsbCBiZSB1c2VkIGJ5IHRoZSBuZXRsaW5rIGNvcmUgdG8gdmFsaWRhdGUgYXR0cmlidXRlcy4gVGhpcyAqaXMqIG5ldyBuZXRsaW5rIEFQSSwgYW5kIHRoYXQncyB1c3VhbGx5IGdvb2QgZm9yIGZ1enppbmcuIFNvIHllYWgsIEknbSB0aGlua2luZywgXCJXb3J0aEZ1enppbmcgPSB0cnVlXCIuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzLiBUaGUgb2J2aW91cyBvbmVzIGFyZSBgZXRobmxfYWN0X3BoeV90ZXN0YCwgYGludGZfY2Fwc19wcmVwYXJlX2RhdGFgLCBhbmQgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YWAuIEJ1dCBob2xkIG9uLCBgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YWAgYW5kIGBwaHlfdGVzdF9wcmVwYXJlX2RhdGFgIGFyZSBhY3R1YWxseSBjYWxsZWQgYnkgYGV0aG5sX2RlZmF1bHRfZG9pdGAuIExldCBtZSBkb3VibGUtY2hlY2sgZm9yIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucy4uLiBBaCwgbm8sIHRoZSBvdGhlcnMsIGxpa2UgYGludGZfY2Fwc19yZXBseV9zaXplYCwgYGludGZfY2Fwc19maWxsX3JlcGx5YCwgYHBoeV90ZXN0X3JlcGx5X3NpemVgLCBhbmQgYHBoeV90ZXN0X2ZpbGxfcmVwbHlgLCB3b24ndCBiZSByZWFjaGVkIGJlY2F1c2UgYHByZXBhcmVfZGF0YWAgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBTbywgYmFjayB0byBmb2N1c2luZyBvbiBgZXRobmxfYWN0X3BoeV90ZXN0YCwgYGludGZfY2Fwc19wcmVwYXJlX2RhdGFgLCBhbmQgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YWAuXG5cbkhhbmcgb24sIGBldGhubF9hY3RfcGh5X3Rlc3RgIGl0c2VsZiBtaWdodCBqdXN0IGJlIHJldHVybmluZyBgLUVPUE5PVFNVUFBgIGJ1dCB0aGlzIG5lZWRzIGZ1enppbmchIFRoZSBuZXRsaW5rIHBvbGljeSBwYXJzaW5nIGlzIGhhcHBlbmluZyAqYmVmb3JlKiB0aGUgYGRvaXRgIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhlIGtlcm5lbCBpcyBnb2luZyB0byBwYXJzZSB0aG9zZSBhdHRyaWJ1dGVzIGFjY29yZGluZyB0byB0aGUgbmV3IHBvbGljaWVzLCBhbmQgKnN5emthbGxlciogY2FuIGRlZmluaXRlbHkgZnV6eiB0aG9zZSBuZXRsaW5rIG1lc3NhZ2VzLiBPa2F5LCBkZWZpbml0ZWx5IFwiV29ydGhGdXp6aW5nID0gdHJ1ZVwiLlxuXG5MZXQncyBsaXN0IHRoZSBmb2N1cyBzeW1ib2xzOlxuYGV0aG5sX2FjdF9waHlfdGVzdGBcbmBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhYFxuYHBoeV90ZXN0X3ByZXBhcmVfZGF0YWBcblxuQnV0IHdhaXQsIGBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhYCBhbmQgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YWAgYXJlICpzdGF0aWMqIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBPa2F5LCBgZXRobmxfYWN0X3BoeV90ZXN0YCBpcyB0aGUgb25lIHRvIGZvY3VzIG9uLiBJdCdzIG5vbi1zdGF0aWMsIHNvLCB0aGF0J3MgcGVyZmVjdC4gVGhlIG90aGVycyBhcmUgc3RhdGljLCBidXQgdGhleSdyZSBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gdGhlIGBldGhubF9pbnRmX2NhcHNfcmVxdWVzdF9vcHNgIGFuZCBgZXRobmxfcGh5X3Rlc3RfcmVxdWVzdF9vcHNgIHN0cnVjdHVyZXMuIFNvLCBJIGNhbiBqdXN0IHVzZSBgZXRobmxfYWN0X3BoeV90ZXN0YCBhcyB0aGUgZm9jdXMgc3ltYm9sLlxuXG5MZXQgbWUgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMuLi4gbm9wZSwganVzdCBgZXRobmxfYWN0X3BoeV90ZXN0YC5cblxuUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGBFVEhUT09MX05FVExJTktgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IEknbGwgYWRkIGl0IHRvIGJlIHNhZmUuIEl0J3MgYSBib29sLCBzbyBubyBoYXJtIGluIGJlaW5nIGV4cGxpY2l0LlxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgZXRobmxfYWN0X3BoeV90ZXN0YCBpcyBpbmRlZWQgbm9uLXN0YXRpYywganVzdCB0byBiZSBzdXJlLi4uIFllcywgaXQncyBkZWZpbmVkIGluIGBuZXQvZXRodG9vbC9waHl0ZXN0LmNgIGFuZCBkZWNsYXJlZCBpbiBgbmV0L2V0aHRvb2wvbmV0bGluay5oYC5cblxuQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnM/IE5vLlxuXG5BbHJpZ2h0LCBsZXQncyByZXZpZXcgdGhlIGluc3RydWN0aW9ucyB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QganVzdCBhIGRvY3VtZW50YXRpb24gb3IgY29tbWVudCBjaGFuZ2Ugb3Igc29tZXRoaW5nIHRoYXQncyB1bnJlYWNoYWJsZS4gTm8sIHRoaXMgYWRkcyBuZXcgbmV0bGluayBtZXNzYWdlcyB0byB0aGUgKmNvcmUqIGV0aHRvb2wgbmV0bGluayBpbnRlcmZhY2UuIEl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuIFNvOiBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbioqRm9jdXMgc3ltYm9sOioqXG5gZXRobmxfYWN0X3BoeV90ZXN0YFxuXG4qKkNvbmZpZ3M6KipcbmBFVEhUT09MX05FVExJTktgXG5cbioqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBldGh0b29sIG5ldGxpbmsgbWVzc2FnZXMgKGBFVEhUT09MX01TR19JTlRGX0NBUFNfR0VUYCwgYEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVGAsIGBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1RgKSBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgcG9saWNpZXNcblxuIiwiSW5wdXRUb2tlbnMiOjE5Mjg5LCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDc6MjAuMTk5MzIzNTY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM0NTUwODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVUSFRPT0xfTkVUTElOS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV0aG5sX2FjdF9waHlfdGVzdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbmV3IGV0aHRvb2wgbmV0bGluayBtZXNzYWdlcyAoRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVCwgRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULCBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QpIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljaWVzLiBFdmVuIHRob3VnaCBubyBkcml2ZXJzIGN1cnJlbnRseSBpbXBsZW1lbnQgdGhlIHVuZGVybHlpbmcgZXRodG9vbCBvcGVyYXRpb25zLCB0aGUgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcsIHBvbGljeSB2YWxpZGF0aW9uLCBhbmQgaW5pdGlhbCBoYW5kbGVyIGZ1bmN0aW9ucyAobGlrZSBldGhubF9hY3RfcGh5X3Rlc3QpIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyLXNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVUSFRPT0xfTkVUTElOS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV0aG5sX2FjdF9waHlfdGVzdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbmV3IGV0aHRvb2wgbmV0bGluayBtZXNzYWdlcyAoRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVCwgRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULCBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QpIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljaWVzLiBFdmVuIHRob3VnaCBubyBkcml2ZXJzIGN1cnJlbnRseSBpbXBsZW1lbnQgdGhlIHVuZGVybHlpbmcgZXRodG9vbCBvcGVyYXRpb25zLCB0aGUgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcsIHBvbGljeSB2YWxpZGF0aW9uLCBhbmQgaW5pdGlhbCBoYW5kbGVyIGZ1bmN0aW9ucyAobGlrZSBldGhubF9hY3RfcGh5X3Rlc3QpIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyLXNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzoyMC4yNzI3ODUwMzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTIwNzI3NTg4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA3OjIwLjI3MzI4ODc2MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjUyMDY3NjgzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kcyAoYElOVEZfQ0FQU19HRVRgLCBgUEhZX1RFU1RfR0VUYCwgYFBIWV9URVNUX0FDVGApIHRvIHF1ZXJ5IGludGVyZmFjZSBjYXBhYmlsaXRpZXMgYW5kIGNvbmZpZ3VyZSBQSFkgdGVzdHMuIFRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGJldHdlZW4gdGhlIGV0aHRvb2wgY29yZSBhbmQgdGhlIGRyaXZlcnMgKGBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHNgIGFuZCBgc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3RgKSBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5Llxcblxcbkhvd2V2ZXIsIHRoZSBldGh0b29sIG5ldGxpbmsgZnJhbWV3b3JrIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplcyB0aGUgcmVwbHkgZGF0YSBzdHJ1Y3R1cmVzIHZpYSBgZXRobmxfaW5pdF9yZXBseV9kYXRhKClgICh3aGljaCBjYWxscyBgbWVtc2V0KHJlcGx5X2RhdGEsIDAsIG9wcy1cXHUwMDNlcmVwbHlfZGF0YV9zaXplKWApIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlIGRyaXZlciBjYWxsYmFja3MgKGUuZy4sIGBnZXRfaW50Zl9jYXBzYCkuIFNpbWlsYXJseSwgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YSgpYCBleHBsaWNpdGx5IGNhbGxzIGBtZW1zZXQoXFx1MDAyNmRhdGEtXFx1MDAzZXRlc3QsIDAsIHNpemVvZihkYXRhLVxcdTAwM2V0ZXN0KSlgLCBhbmQgYGV0aG5sX2FjdF9waHlfdGVzdCgpYCBpbml0aWFsaXplcyBpdHMgbG9jYWwgc3RydWN0IHdpdGggYD0ge31gLlxcblxcbkJlY2F1c2UgYWxsIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0YWNrIG9yIGhlYXAgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGV2ZW4gaWYgYSBkcml2ZXIgZmFpbHMgdG8gcG9wdWxhdGUgYWxsIGZpZWxkcy4gRnVydGhlcm1vcmUsIHRoZSBuZXRsaW5rIHJlc3BvbnNlIGlzIGNvbnN0cnVjdGVkIGJ5IHNlcmlhbGl6aW5nIGluZGl2aWR1YWwgZmllbGRzIHVzaW5nIGBubGFfcHV0X3UzMmAsIGBubGFfcHV0X3N0cmluZ2AsIGV0Yy4sIHJhdGhlciB0aGFuIGNvcHlpbmcgcmF3IHN0cnVjdHMsIHdoaWNoIGluaGVyZW50bHkgYXZvaWRzIGxlYWtpbmcgc3RydWN0IHBhZGRpbmcuXFxuXFxuQW55IHBvdGVudGlhbCBpc3N1ZXMsIHN1Y2ggYXMgYSBkcml2ZXIgd3JpdGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGBibG9ja3NgIGFycmF5IG9yIHJldHVybmluZyBhbiBpbnZhbGlkIGBudW1fYmxvY2tzYCBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMsIHdvdWxkIGJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ1MDZkZDEwODYzOGU1ZDc3ZDIzZjMwZWZkZjJjZjdmYTg2ZGVlOWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwNTowNjoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5pbmRleCA1ZGQ0ZDFiNWQ5NGJiLi4zNjFlYjNjNjY1NzcwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuQEAgLTIxMCw2ICsyMTAsNTUgQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogZGlzY2FyZFxuICAgICAgICAgdmFsdWU6IDMxXG4rICAtXG4rICAgIG5hbWU6IGludGYtY29tcG9uZW50XG4rICAgIHR5cGU6IGVudW1cbisgICAgZG9jOiBUeXBlIG9mIGhhcmR3YXJlIGNvbXBvbmVudCBpbiB0aGUgaW50ZXJmYWNlLlxuKyAgICBlbnRyaWVzOlxuKyAgICAgIC0gbWFjXG4rICAgICAgLSBwaHlcbisgICAgICAtIG1vZHVsZVxuKyAgLVxuKyAgICBuYW1lOiBpbnRmLXN1YmxheWVyXG4rICAgIHR5cGU6IGVudW1cbisgICAgZG9jOiA4MDIuMyBzdWJsYXllciB3aXRoaW4gYSBjb21wb25lbnQuXG4rICAgIGVudHJpZXM6XG4rICAgICAgLSBub25lXG4rICAgICAgLSByc1xuKyAgICAgIC0gcGNzXG4rICAgICAgLSBmZWNcbisgICAgICAtIHBtYVxuKyAgICAgIC0gcG1kXG4rICAtXG4rICAgIG5hbWU6IHBoeS10ZXN0LXBhdHRlcm5cbisgICAgdHlwZTogZW51bVxuKyAgICBkb2M6IFBIWSB0ZXN0IHBhdHRlcm4gdHlwZXMgZm9yIFBSQlMgZ2VuZXJhdGlvbi9jaGVja2luZy5cbisgICAgZW50cmllczpcbisgICAgICAtIG9mZlxuKyAgICAgIC0gcHJiczdcbisgICAgICAtIHByYnM5XG4rICAgICAgLSBwcmJzMTFcbisgICAgICAtIHByYnMxM1xuKyAgICAgIC0gcHJiczE1XG4rICAgICAgLSBwcmJzMjNcbisgICAgICAtIHByYnMzMVxuKyAgICAgIC0gc3NwcnFcbisgICAgICAtIHByYnMxM3FcbisgICAgICAtIHByYnMzMXFcbisgICAgICAtIHNxdWFyZS1ucnpcbisgICAgICAtIHNxdWFyZS1wYW00XG4rICAgICAgLSB0eC1saW5lYXJpdHlcbisgICAgICAtIHNjcmFtYmxlZC1pZGxlXG4rICAgICAgLSBrMjgtNVxuKyAgICAgIC0gazI4LTdcbisgIC1cbisgICAgbmFtZTogcGh5LXRlc3QtYWN0aW9uXG4rICAgIHR5cGU6IGVudW1cbisgICAgZG9jOiBCRVJUIGNvbnRyb2wgYWN0aW9ucy5cbisgICAgZW50cmllczpcbisgICAgICAtIG5vbmVcbisgICAgICAtIHN0YXJ0XG4rICAgICAgLSBzdG9wXG4gXG4gYXR0cmlidXRlLXNldHM6XG4gICAtXG5AQCAtMTkwNSw2ICsxOTU0LDExNSBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIG5hbWU6IGxpbmtcbiAgICAgICAgIHR5cGU6IG5lc3RcbiAgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBtc2Utc25hcHNob3RcbisgIC1cbisgICAgbmFtZTogaW50Zi1ibG9ja1xuKyAgICBkb2M6IEEgc2luZ2xlIGZ1bmN0aW9uYWwgYmxvY2sgaW4gdGhlIGludGVyZmFjZS5cbisgICAgYXR0cmlidXRlczpcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBpZFxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogY29tcG9uZW50XG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGVudW06IGludGYtY29tcG9uZW50XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogc3VibGF5ZXJcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZW51bTogaW50Zi1zdWJsYXllclxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGluc3RhbmNlXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGRvYzogfFxuKyAgICAgICAgICBJZGVudGlmaWVzIHRoZSBoYXJkd2FyZSBlbnRpdHkgd2hlbiBtdWx0aXBsZSBpbnN0YW5jZXMgb2ZcbisgICAgICAgICAgdGhlIHNhbWUgY29tcG9uZW50IGV4aXN0IGluIHRoZSBpbnRlcmZhY2UuIFRoZSBkcml2ZXJcbisgICAgICAgICAgYXNzaWducyBpbnN0YW5jZSBudW1iZXJzIHNlcXVlbnRpYWxseSBiYXNlZCBvbiBwb3NpdGlvbiBpblxuKyAgICAgICAgICB0aGUgcGh5c2ljYWwgcGF0aC4gRGVmYXVsdHMgdG8gMCB3aGVuIG9ubHkgb25lIGluc3RhbmNlIG9mXG4rICAgICAgICAgIGEgZ2l2ZW4gY29tcG9uZW50IGV4aXN0cy5cbisgICAgICAgICAgRm9yIFBIWTogaW5zdGFuY2UgMCBpcyB0aGUgaW50ZXJuYWwvaG9zdC1zaWRlIFBIWSxcbisgICAgICAgICAgaW5zdGFuY2UgMSBpcyBhbiBleHRlcm5hbCBQSFkgZnVydGhlciBhbG9uZyB0aGUgcGF0aFxuKyAgICAgICAgICB0b3dhcmQgdGhlIGxpbmUgc2lkZS5cbisgICAgICAgICAgRm9yIE1BQzogaW5zdGFuY2UgMCBpcyB0aGUgaG9zdC1mYWNpbmcgTUFDLCBpbnN0YW5jZSAxIGlzXG4rICAgICAgICAgIGEgc2Vjb25kYXJ5IE1BQyBmdXJ0aGVyIGFsb25nIHRoZSBkYXRhIHBhdGggKGUuZy4sIGJlaGluZFxuKyAgICAgICAgICBhbiBlbWJlZGRlZCBzd2l0Y2gpLlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IG5hbWVcbisgICAgICAgIHR5cGU6IHN0cmluZ1xuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGRlcHRoXG4rICAgICAgICB0eXBlOiB1OFxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGxhbmVzXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBsb29wYmFjay1zdXBwb3J0ZWRcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHN1cHBvcnRlZC10eC1wYXR0ZXJuc1xuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogc3VwcG9ydGVkLXJ4LXBhdHRlcm5zXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBlcnJvci1pbmplY3Qtc3VwcG9ydGVkXG4rICAgICAgICB0eXBlOiBmbGFnXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogYmVydC1zdXBwb3J0ZWRcbisgICAgICAgIHR5cGU6IGZsYWdcbisgIC1cbisgICAgbmFtZTogaW50Zi1jYXBzXG4rICAgIGRvYzogSW50ZXJmYWNlIGNhcGFiaWxpdGllcyBtZXNzYWdlLlxuKyAgICBhdHRyaWJ1dGVzOlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGhlYWRlclxuKyAgICAgICAgdHlwZTogbmVzdFxuKyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGhlYWRlclxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGJsb2Nrc1xuKyAgICAgICAgdHlwZTogbmVzdFxuKyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGludGYtYmxvY2tcbisgICAgICAgIG11bHRpLWF0dHI6IHRydWVcbisgIC1cbisgICAgbmFtZTogcGh5LXRlc3RcbisgICAgZG9jOiBQSFkgdGVzdCBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMuXG4rICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogaGVhZGVyXG4rICAgICAgICB0eXBlOiBuZXN0XG4rICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogaGVhZGVyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogYmxvY2staWRcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGxhbmVcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHR4LXBhdHRlcm5cbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZW51bTogcGh5LXRlc3QtcGF0dGVyblxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHJ4LXBhdHRlcm5cbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZW51bTogcGh5LXRlc3QtcGF0dGVyblxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGJlcnQtYWN0aW9uXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGVudW06IHBoeS10ZXN0LWFjdGlvblxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGluamVjdC1lcnJvci1jb3VudFxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogYWN0aXZlLXRlc3RzXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGRvYzogQml0bWFzayBvZiBjdXJyZW50bHkgcnVubmluZyB0ZXN0cyAoYml0IDAgPSBCRVJUKS5cbisgICAgICAtXG4rICAgICAgICBuYW1lOiBjaGVja2VyLWxvY2tcbisgICAgICAgIHR5cGU6IHU4XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogZXJyb3ItY291bnRcbisgICAgICAgIHR5cGU6IHU2NFxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHRvdGFsLWJpdHMtc2VudFxuKyAgICAgICAgdHlwZTogdTY0XG4gXG4gb3BlcmF0aW9uczpcbiAgIGVudW0tbW9kZWw6IGRpcmVjdGlvbmFsXG5AQCAtMjg1OSw2ICszMDE3LDU0IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSB3b3JzdC1jaGFubmVsXG4gICAgICAgICAgICAgLSBsaW5rXG4gICAgICAgZHVtcDogKm1zZS1nZXQtb3BcbisgICAgLVxuKyAgICAgIG5hbWU6IGludGYtY2Fwcy1nZXRcbisgICAgICBkb2M6IEdldCBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzIChmdW5jdGlvbmFsIGJsb2NrIGxheW91dCkuXG4rICAgICAgYXR0cmlidXRlLXNldDogaW50Zi1jYXBzXG4rICAgICAgZG86IFx1MDAyNmludGYtY2Fwcy1nZXQtb3BcbisgICAgICAgIHJlcXVlc3Q6XG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgICAgLSBoZWFkZXJcbisgICAgICAgIHJlcGx5OlxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxuKyAgICAgICAgICAgIC0gaGVhZGVyXG4rICAgICAgICAgICAgLSBibG9ja3NcbisgICAgICBkdW1wOiAqaW50Zi1jYXBzLWdldC1vcFxuKyAgICAtXG4rICAgICAgbmFtZTogcGh5LXRlc3QtZ2V0XG4rICAgICAgZG9jOiBHZXQgUEhZIHRlc3Qgc3RhdHVzIChwYXR0ZXJucywgQkVSVCBjb3VudGVycykuXG4rICAgICAgYXR0cmlidXRlLXNldDogcGh5LXRlc3RcbisgICAgICBkbzpcbisgICAgICAgIHJlcXVlc3Q6XG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgICAgLSBoZWFkZXJcbisgICAgICAgICAgICAtIGJsb2NrLWlkXG4rICAgICAgICAgICAgLSBsYW5lXG4rICAgICAgICByZXBseTpcbisgICAgICAgICAgYXR0cmlidXRlczpcbisgICAgICAgICAgICAtIGhlYWRlclxuKyAgICAgICAgICAgIC0gYmxvY2staWRcbisgICAgICAgICAgICAtIGxhbmVcbisgICAgICAgICAgICAtIHR4LXBhdHRlcm5cbisgICAgICAgICAgICAtIHJ4LXBhdHRlcm5cbisgICAgICAgICAgICAtIGFjdGl2ZS10ZXN0c1xuKyAgICAgICAgICAgIC0gY2hlY2tlci1sb2NrXG4rICAgICAgICAgICAgLSBlcnJvci1jb3VudFxuKyAgICAgICAgICAgIC0gdG90YWwtYml0cy1zZW50XG4rICAgIC1cbisgICAgICBuYW1lOiBwaHktdGVzdC1hY3RcbisgICAgICBkb2M6IENvbmZpZ3VyZSBQSFkgdGVzdCAoc2V0IHBhdHRlcm5zLCBzdGFydC9zdG9wIEJFUlQsIGluamVjdCBlcnJvcnMpLlxuKyAgICAgIGF0dHJpYnV0ZS1zZXQ6IHBoeS10ZXN0XG4rICAgICAgZG86XG4rICAgICAgICByZXF1ZXN0OlxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxuKyAgICAgICAgICAgIC0gaGVhZGVyXG4rICAgICAgICAgICAgLSBibG9jay1pZFxuKyAgICAgICAgICAgIC0gbGFuZVxuKyAgICAgICAgICAgIC0gdHgtcGF0dGVyblxuKyAgICAgICAgICAgIC0gcngtcGF0dGVyblxuKyAgICAgICAgICAgIC0gYmVydC1hY3Rpb25cbisgICAgICAgICAgICAtIGluamVjdC1lcnJvci1jb3VudFxuIFxuIG1jYXN0LWdyb3VwczpcbiAgIGxpc3Q6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuaW5kZXggMTI2ODNiNWQxMjVlNC4uZjk3NDhlNzM5ZjAzZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuQEAgLTExOTcsNiArMTE5Nyw5MiBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XG4gICogU2VlIFx1MDAyNnN0cnVjdCBuZXRfZGV2aWNlIGFuZCBcdTAwMjZzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZm9yIGRvY3VtZW50YXRpb25cbiAgKiBvZiB0aGUgZ2VuZXJpYyBuZXRkZXYgZmVhdHVyZXMgaW50ZXJmYWNlLlxuICAqL1xuK1xuKyNkZWZpbmUgSU5URl9DQVBTX01BWF9CTE9DS1NcdDE2XG4rI2RlZmluZSBJTlRGX0JMT0NLX05BTUVfTEVOXHQzMlxuK1xuKyNkZWZpbmUgTE9PUEJBQ0tfU1VQUE9SVF9MT0NBTFx0QklUKDApXG4rI2RlZmluZSBMT09QQkFDS19TVVBQT1JUX1JFTU9URVx0QklUKDEpXG4rXG4rLyoqXG4rICogc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayAtIFNpbmdsZSBmdW5jdGlvbmFsIGJsb2NrIGluIHRoZSBpbnRlcmZhY2VcbisgKiBAaWQ6IFVuaXF1ZSBibG9jayBpZGVudGlmaWVyXG4rICogQGNvbXBvbmVudDogSGFyZHdhcmUgY29tcG9uZW50IChNQUMsIFBIWSwgTU9EVUxFKVxuKyAqIEBzdWJsYXllcjogODAyLjMgc3VibGF5ZXIgKFJTLCBQQ1MsIEZFQywgUE1BLCBQTUQsIG9yIE5PTkUpXG4rICogQGluc3RhbmNlOiBJbmRleCB3aGVuIG11bHRpcGxlIGluc3RhbmNlcyBvZiBzYW1lIGNvbXBvbmVudCBleGlzdFxuKyAqIEBuYW1lOiBEcml2ZXItY2hvc2VuIGxhYmVsXG4rICogQGRlcHRoOiBPcmRlcmluZyB3aXRoaW4gc2FtZSAoY29tcG9uZW50LCBzdWJsYXllcikgdHVwbGVcbisgKiBAbGFuZXM6IE51bWJlciBvZiBsYW5lc1xuKyAqIEBsb29wYmFja19zdXBwb3J0ZWQ6IEJpdG1hc2sgb2Ygc3VwcG9ydGVkIGxvb3BiYWNrIGRpcmVjdGlvbnNcbisgKiBAc3VwcG9ydGVkX3R4X3BhdHRlcm5zOiBCaXRtYXNrIG9mIHBhdHRlcm5zIHRoaXMgYmxvY2sgY2FuIGdlbmVyYXRlXG4rICogQHN1cHBvcnRlZF9yeF9wYXR0ZXJuczogQml0bWFzayBvZiBwYXR0ZXJucyB0aGlzIGJsb2NrIGNhbiBjaGVja1xuKyAqIEBlcnJvcl9pbmplY3Rfc3VwcG9ydGVkOiBCbG9jayBzdXBwb3J0cyBiaXQgZXJyb3IgaW5qZWN0aW9uXG4rICogQGJlcnRfc3VwcG9ydGVkOiBCbG9jayBzdXBwb3J0cyBCRVJUIGNvdW50ZXJzXG4rICovXG4rc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayB7XG4rXHR1MzIgaWQ7XG4rXHRlbnVtIGludGZfY29tcG9uZW50IGNvbXBvbmVudDtcbitcdGVudW0gaW50Zl9zdWJsYXllciBzdWJsYXllcjtcbitcdHUzMiBpbnN0YW5jZTtcbitcdGNoYXIgbmFtZVtJTlRGX0JMT0NLX05BTUVfTEVOXTtcbitcdHU4IGRlcHRoO1xuK1x0dTMyIGxhbmVzO1xuK1x0dTMyIGxvb3BiYWNrX3N1cHBvcnRlZDtcbitcdHUzMiBzdXBwb3J0ZWRfdHhfcGF0dGVybnM7XG4rXHR1MzIgc3VwcG9ydGVkX3J4X3BhdHRlcm5zO1xuK1x0Ym9vbCBlcnJvcl9pbmplY3Rfc3VwcG9ydGVkO1xuK1x0Ym9vbCBiZXJ0X3N1cHBvcnRlZDtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBldGh0b29sX2ludGZfY2FwcyAtIEludGVyZmFjZSBjYXBhYmlsaXRpZXMgKGFsbCBibG9ja3MpXG4rICogQG51bV9ibG9ja3M6IE51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIGJsb2Nrc1tdXG4rICogQGJsb2NrczogQXJyYXkgb2YgZnVuY3Rpb25hbCBibG9ja3NcbisgKi9cbitzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHMge1xuK1x0dTMyIG51bV9ibG9ja3M7XG4rXHRzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrIGJsb2Nrc1tJTlRGX0NBUFNfTUFYX0JMT0NLU107XG4rfTtcbitcbisvKiBCaXRtYXNrIG9mIHdoaWNoIGV0aHRvb2xfcGh5X3Rlc3QgZmllbGRzIHdlcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgKi9cbisjZGVmaW5lIFBIWV9URVNUX0NNRF9UWF9QQVRURVJOXHRcdEJJVCgwKVxuKyNkZWZpbmUgUEhZX1RFU1RfQ01EX1JYX1BBVFRFUk5cdFx0QklUKDEpXG4rI2RlZmluZSBQSFlfVEVTVF9DTURfQkVSVF9BQ1RJT05cdFx0QklUKDIpXG4rI2RlZmluZSBQSFlfVEVTVF9DTURfSU5KRUNUX0NPVU5UXHRcdEJJVCgzKVxuKyNkZWZpbmUgUEhZX1RFU1RfQ01EX0xBTkVcdFx0XHRCSVQoNClcbisjZGVmaW5lIFBIWV9URVNUX0NNRF9CTE9DS19JRFx0XHRcdEJJVCg1KVxuK1xuKy8qIEJpdG1hc2sgb2YgY3VycmVudGx5IGFjdGl2ZSB0ZXN0cyAocmVhZC1vbmx5KSAqL1xuKyNkZWZpbmUgUEhZX1RFU1RfQUNUSVZFX0JFUlRcdFx0QklUKDApXG4rXG4rLyoqXG4rICogc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgLSBQSFkgdGVzdCBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXNcbisgKiBAY21kOiBCaXRtYXNrIG9mIHdoaWNoIGZpZWxkcyBhcmUgdmFsaWQgKFBIWV9URVNUX0NNRF8qKVxuKyAqIEBibG9ja19pZDogQmxvY2sgdG8gb3BlcmF0ZSBvbiAoZnJvbSBpbnRmLWNhcHMtZ2V0KVxuKyAqIEBsYW5lOiBMYW5lIG51bWJlciAoMC1iYXNlZClcbisgKiBAdHhfcGF0dGVybjogVFggcGF0dGVybiBnZW5lcmF0b3Igc2V0dGluZ1xuKyAqIEByeF9wYXR0ZXJuOiBSWCBwYXR0ZXJuIGNoZWNrZXIgc2V0dGluZ1xuKyAqIEBiZXJ0X2FjdGlvbjogQkVSVCBzdGFydC9zdG9wIGNvbnRyb2xcbisgKiBAaW5qZWN0X2Vycm9yX2NvdW50OiBOdW1iZXIgb2YgZXJyb3JzIHRvIGluamVjdFxuKyAqIEBhY3RpdmVfdGVzdHM6IEJpdG1hc2sgb2YgcnVubmluZyB0ZXN0cyAoUEhZX1RFU1RfQUNUSVZFXyopXG4rICogQGNoZWNrZXJfbG9jazogUlggY2hlY2tlciBsb2NrIHN0YXR1cyAocmVhZC1vbmx5KVxuKyAqIEBlcnJvcl9jb3VudDogQkVSVCBlcnJvciBjb3VudGVyIChyZWFkLW9ubHkpXG4rICogQHRvdGFsX2JpdHNfc2VudDogQkVSVCB0b3RhbCBiaXRzIGNvdW50ZXIgKHJlYWQtb25seSlcbisgKi9cbitzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCB7XG4rXHR1MzIgY21kO1xuK1x0dTMyIGJsb2NrX2lkO1xuK1x0dTMyIGxhbmU7XG4rXHRlbnVtIHBoeV90ZXN0X3BhdHRlcm4gdHhfcGF0dGVybjtcbitcdGVudW0gcGh5X3Rlc3RfcGF0dGVybiByeF9wYXR0ZXJuO1xuK1x0ZW51bSBwaHlfdGVzdF9hY3Rpb24gYmVydF9hY3Rpb247XG4rXHR1MzIgaW5qZWN0X2Vycm9yX2NvdW50O1xuK1x0dTMyIGFjdGl2ZV90ZXN0cztcbitcdHU4IGNoZWNrZXJfbG9jaztcbitcdHU2NCBlcnJvcl9jb3VudDtcbitcdHU2NCB0b3RhbF9iaXRzX3NlbnQ7XG4rfTtcbitcbiBzdHJ1Y3QgZXRodG9vbF9vcHMge1xuIFx0dTMyICAgICBzdXBwb3J0ZWRfaW5wdXRfeGZybTo4O1xuIFx0dTMyICAgICBjYXBfbGlua19sYW5lc19zdXBwb3J0ZWQ6MTtcbkBAIC0xMzU0LDYgKzE0NDAsMTIgQEAgc3RydWN0IGV0aHRvb2xfb3BzIHtcbiBcdGludFx0KCpzZXRfbW0pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX21tX2NmZyAqY2ZnLFxuIFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBcdHZvaWRcdCgqZ2V0X21tX3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqc3RhdHMpO1xuK1x0aW50XHQoKmdldF9pbnRmX2NhcHMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgc3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzICpjYXBzKTtcbitcdGludFx0KCpnZXRfcGh5X3Rlc3QpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCAqdGVzdCk7XG4rXHRpbnRcdCgqc2V0X3BoeV90ZXN0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnRlc3QpO1xuIH07XG4gXG4gaW50IGV0aHRvb2xfY2hlY2tfb3BzKGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuaW5kZXggODEzNGJhZjc4NjBmMy4uMzEwMmJiN2JhMzM3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbkBAIC04OTMsNiArODkzLDkgQEAgZW51bSB7XG4gXHRFVEhUT09MX01TR19SU1NfQ1JFQVRFX0FDVCxcbiBcdEVUSFRPT0xfTVNHX1JTU19ERUxFVEVfQUNULFxuIFx0RVRIVE9PTF9NU0dfTVNFX0dFVCxcbitcdEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVQsXG4rXHRFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsXG4rXHRFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QsXG4gXG4gXHRfX0VUSFRPT0xfTVNHX1VTRVJfQ05ULFxuIFx0RVRIVE9PTF9NU0dfVVNFUl9NQVggPSAoX19FVEhUT09MX01TR19VU0VSX0NOVCAtIDEpXG5AQCAtOTU0LDYgKzk1Nyw4IEBAIGVudW0ge1xuIFx0RVRIVE9PTF9NU0dfUlNTX0NSRUFURV9OVEYsXG4gXHRFVEhUT09MX01TR19SU1NfREVMRVRFX05URixcbiBcdEVUSFRPT0xfTVNHX01TRV9HRVRfUkVQTFksXG4rXHRFVEhUT09MX01TR19JTlRGX0NBUFNfR0VUX1JFUExZLFxuK1x0RVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VUX1JFUExZLFxuIFxuIFx0X19FVEhUT09MX01TR19LRVJORUxfQ05ULFxuIFx0RVRIVE9PTF9NU0dfS0VSTkVMX01BWCA9IChfX0VUSFRPT0xfTVNHX0tFUk5FTF9DTlQgLSAxKVxuQEAgLTk2MSw0ICs5NjYsMTAzIEBAIGVudW0ge1xuIFxuICNkZWZpbmUgRVRIVE9PTF9NQ0dSUF9NT05JVE9SX05BTUVcdFwibW9uaXRvclwiXG4gXG4rLyogSW50ZXJmYWNlIGNvbXBvbmVudCB0eXBlcyAqL1xuK2VudW0gaW50Zl9jb21wb25lbnQge1xuK1x0SU5URl9DT01QT05FTlRfTUFDLFxuK1x0SU5URl9DT01QT05FTlRfUEhZLFxuK1x0SU5URl9DT01QT05FTlRfTU9EVUxFLFxuK307XG4rXG4rLyogSW50ZXJmYWNlIHN1YmxheWVyIHR5cGVzICovXG4rZW51bSBpbnRmX3N1YmxheWVyIHtcbitcdElOVEZfU1VCTEFZRVJfTk9ORSxcbitcdElOVEZfU1VCTEFZRVJfUlMsXG4rXHRJTlRGX1NVQkxBWUVSX1BDUyxcbitcdElOVEZfU1VCTEFZRVJfRkVDLFxuK1x0SU5URl9TVUJMQVlFUl9QTUEsXG4rXHRJTlRGX1NVQkxBWUVSX1BNRCxcbit9O1xuK1xuKy8qIEF0dHJpYnV0ZXMgb2YgYSBzaW5nbGUgaW50ZXJmYWNlIGJsb2NrICovXG4rZW51bSB7XG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19JRCxcbitcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX0NPTVBPTkVOVCxcbitcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX1NVQkxBWUVSLFxuK1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfSU5TVEFOQ0UsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19OQU1FLFxuK1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfREVQVEgsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19MQU5FUyxcbitcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX0xPT1BCQUNLX1NVUFBPUlRFRCxcbitcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX1RYX1BBVFRFUk5TLFxuK1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfUlhfUEFUVEVSTlMsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19FUlJPUl9JTkpFQ1QsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19CRVJULFxuK1xuK1x0X19FVEhUT09MX0FfSU5URl9CTE9DS19DTlQsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19NQVggPSAoX19FVEhUT09MX0FfSU5URl9CTE9DS19DTlQgLSAxKVxuK307XG4rXG4rLyogQXR0cmlidXRlcyBvZiBpbnRmLWNhcHMtZ2V0IG1lc3NhZ2UgKi9cbitlbnVtIHtcbitcdEVUSFRPT0xfQV9JTlRGX0NBUFNfVU5TUEVDLFxuK1x0RVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIsXG4rXHRFVEhUT09MX0FfSU5URl9DQVBTX0JMT0NLUyxcbitcbitcdF9fRVRIVE9PTF9BX0lOVEZfQ0FQU19DTlQsXG4rXHRFVEhUT09MX0FfSU5URl9DQVBTX01BWCA9IChfX0VUSFRPT0xfQV9JTlRGX0NBUFNfQ05UIC0gMSlcbit9O1xuK1xuKy8qIFBIWSB0ZXN0IHBhdHRlcm4gdHlwZXMgKi9cbitlbnVtIHBoeV90ZXN0X3BhdHRlcm4ge1xuK1x0UEhZX1RFU1RfUEFUVEVSTl9PRkYsXG4rXHRQSFlfVEVTVF9QQVRURVJOX1BSQlM3LFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTOSxcbitcdFBIWV9URVNUX1BBVFRFUk5fUFJCUzExLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMTMsXG4rXHRQSFlfVEVTVF9QQVRURVJOX1BSQlMxNSxcbitcdFBIWV9URVNUX1BBVFRFUk5fUFJCUzIzLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMzEsXG4rXHRQSFlfVEVTVF9QQVRURVJOX1NTUFJRLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMTNRLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMzFRLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9TUVVBUkVfTlJaLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9TUVVBUkVfUEFNNCxcbitcdFBIWV9URVNUX1BBVFRFUk5fVFhfTElORUFSSVRZLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9TQ1JBTUJMRURfSURMRSxcbitcdFBIWV9URVNUX1BBVFRFUk5fSzI4XzUsXG4rXHRQSFlfVEVTVF9QQVRURVJOX0syOF83LFxuK1xuK1x0X19QSFlfVEVTVF9QQVRURVJOX0NPVU5ULFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9NQVggPSAoX19QSFlfVEVTVF9QQVRURVJOX0NPVU5UIC0gMSlcbit9O1xuK1xuKy8qIFBIWSB0ZXN0IEJFUlQgYWN0aW9ucyAqL1xuK2VudW0gcGh5X3Rlc3RfYWN0aW9uIHtcbitcdFBIWV9URVNUX0FDVElPTl9OT05FLFxuK1x0UEhZX1RFU1RfQUNUSU9OX1NUQVJULFxuK1x0UEhZX1RFU1RfQUNUSU9OX1NUT1AsXG4rXG4rXHRfX1BIWV9URVNUX0FDVElPTl9DT1VOVCxcbitcdFBIWV9URVNUX0FDVElPTl9NQVggPSAoX19QSFlfVEVTVF9BQ1RJT05fQ09VTlQgLSAxKVxuK307XG4rXG4rLyogQXR0cmlidXRlcyBvZiBwaHktdGVzdC1nZXQgLyBwaHktdGVzdC1hY3QgbWVzc2FnZXMgKi9cbitlbnVtIHtcbitcdEVUSFRPT0xfQV9QSFlfVEVTVF9VTlNQRUMsXG4rXHRFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSLFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lELFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0xBTkUsXG4rXHRFVEhUT09MX0FfUEhZX1RFU1RfVFhfUEFUVEVSTixcbitcdEVUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOLFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OLFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0lOSkVDVF9FUlJPUl9DT1VOVCxcbitcdEVUSFRPT0xfQV9QSFlfVEVTVF9BQ1RJVkVfVEVTVFMsXG4rXHRFVEhUT09MX0FfUEhZX1RFU1RfQ0hFQ0tFUl9MT0NLLFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0VSUk9SX0NPVU5ULFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX1RPVEFMX0JJVFNfU0VOVCxcbitcbitcdF9fRVRIVE9PTF9BX1BIWV9URVNUX0NOVCxcbitcdEVUSFRPT0xfQV9QSFlfVEVTVF9NQVggPSAoX19FVEhUT09MX0FfUEhZX1RFU1RfQ05UIC0gMSlcbit9O1xuK1xuICNlbmRpZiAvKiBfVUFQSV9MSU5VWF9FVEhUT09MX05FVExJTktfR0VORVJBVEVEX0ggKi9cbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9NYWtlZmlsZSBiL25ldC9ldGh0b29sL01ha2VmaWxlXG5pbmRleCA2MjljMTA5MTY2NzBlLi43ZGQyYzU2MjRjZWRmIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvTWFrZWZpbGVcbisrKyBiL25ldC9ldGh0b29sL01ha2VmaWxlXG5AQCAtOSw0ICs5LDQgQEAgZXRodG9vbF9ubC15XHQ6PSBuZXRsaW5rLm8gYml0c2V0Lm8gc3Ryc2V0Lm8gbGlua2luZm8ubyBsaW5rbW9kZXMubyByc3MubyBcXFxuIFx0XHQgICBjaGFubmVscy5vIGNvYWxlc2NlLm8gcGF1c2UubyBlZWUubyB0c2luZm8ubyBjYWJsZXRlc3QubyBcXFxuIFx0XHQgICB0dW5uZWxzLm8gZmVjLm8gZWVwcm9tLm8gc3RhdHMubyBwaGNfdmNsb2Nrcy5vIG1tLm8gXFxcbiBcdFx0ICAgbW9kdWxlLm8gY21pc19md191cGRhdGUubyBjbWlzX2NkYi5vIHBzZS1wZC5vIHBsY2EubyBcXFxuLVx0XHQgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vXG4rXHRcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm8gaW50Zl9jYXBzLm8gcGh5dGVzdC5vXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMgYi9uZXQvZXRodG9vbC9pbnRmX2NhcHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmU0NWNjYzRiODhjOWZcbi0tLSAvZGV2L251bGxcbisrKyBiL25ldC9ldGh0b29sL2ludGZfY2Fwcy5jXG5AQCAtMCwwICsxLDEzMCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbitcbisjaW5jbHVkZSBcIm5ldGxpbmsuaFwiXG4rI2luY2x1ZGUgXCJjb21tb24uaFwiXG4rXG4rc3RydWN0IGludGZfY2Fwc19yZXFfaW5mbyB7XG4rXHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTtcbit9O1xuK1xuK3N0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSB7XG4rXHRzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSBiYXNlO1xuK1x0c3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzIGNhcHM7XG4rfTtcbitcbisjZGVmaW5lIElOVEZfQ0FQU19SRVBEQVRBKF9fcmVwbHlfYmFzZSkgXFxcbitcdGNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSwgYmFzZSlcbitcbitjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeVtFVEhUT09MX0FfSU5URl9DQVBTX0hFQURFUiArIDFdID0ge1xuK1x0W0VUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSXSA9XG4rXHRcdE5MQV9QT0xJQ1lfTkVTVEVEKGV0aG5sX2hlYWRlcl9wb2xpY3kpLFxuK307XG4rXG4rc3RhdGljIGludCBpbnRmX2NhcHNfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhICpkYXRhID0gSU5URl9DQVBTX1JFUERBVEEocmVwbHlfYmFzZSk7XG4rXHRpbnQgbGVuID0gMDtcbitcdHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGF0YS1cdTAwM2VjYXBzLm51bV9ibG9ja3M7IGkrKykge1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoMCk7XHRcdC8qIG5lc3RlZCBibG9jayAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogaWQgKi9cbitcdFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIGNvbXBvbmVudCAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0Lyogc3VibGF5ZXIgKi9cbitcdFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIGluc3RhbmNlICovXG4rXHRcdGxlbiArPSBubGFfdG90YWxfc2l6ZShJTlRGX0JMT0NLX05BTUVfTEVOKTsgLyogbmFtZSAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSk7XHQvKiBkZXB0aCAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogbGFuZXMgKi9cbitcdFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIGxvb3BiYWNrX3N1cHBvcnRlZCAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogdHhfcGF0dGVybnMgKi9cbitcdFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIHJ4X3BhdHRlcm5zICovXG4rXHRcdGxlbiArPSBubGFfdG90YWxfc2l6ZSgwKTtcdFx0LyogZXJyb3JfaW5qZWN0IChmbGFnKSAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoMCk7XHRcdC8qIGJlcnQgKGZsYWcpICovXG4rXHR9XG4rXG4rXHQvKiBvdXRlciBCTE9DS1MgbmVzdCAqL1xuK1x0bGVuICs9IG5sYV90b3RhbF9zaXplKDApO1xuK1xuK1x0cmV0dXJuIGxlbjtcbit9XG4rXG4rc3RhdGljIGludCBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4rXHRcdFx0XHQgIHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlLFxuK1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuK3tcbitcdHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSAqZGF0YSA9IElOVEZfQ0FQU19SRVBEQVRBKHJlcGx5X2Jhc2UpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJlcGx5X2Jhc2UtXHUwMDNlZGV2O1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2ludGZfY2FwcylcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0dXJuIGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfaW50Zl9jYXBzKGRldiwgXHUwMDI2ZGF0YS1cdTAwM2VjYXBzKTtcbit9XG4rXG4rc3RhdGljIGludCBpbnRmX2NhcHNfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcbitcdFx0XHRcdGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSAqZGF0YSA9IElOVEZfQ0FQU19SRVBEQVRBKHJlcGx5X2Jhc2UpO1xuK1x0c3RydWN0IG5sYXR0ciAqYmxvY2tzX2F0dHI7XG4rXHR1MzIgaTtcbitcbitcdGJsb2Nrc19hdHRyID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBFVEhUT09MX0FfSU5URl9DQVBTX0JMT0NLUyk7XG4rXHRpZiAoIWJsb2Nrc19hdHRyKVxuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGF0YS1cdTAwM2VjYXBzLm51bV9ibG9ja3M7IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrICpiID0gXHUwMDI2ZGF0YS1cdTAwM2VjYXBzLmJsb2Nrc1tpXTtcbitcdFx0c3RydWN0IG5sYXR0ciAqYmxvY2tfYXR0cjtcbitcbitcdFx0YmxvY2tfYXR0ciA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgMCk7XG4rXHRcdGlmICghYmxvY2tfYXR0cilcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcbitcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfSUQsIGItXHUwMDNlaWQpIHx8XG4rXHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0NPTVBPTkVOVCxcbitcdFx0XHRcdGItXHUwMDNlY29tcG9uZW50KSB8fFxuK1x0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19TVUJMQVlFUixcbitcdFx0XHRcdGItXHUwMDNlc3VibGF5ZXIpIHx8XG4rXHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0lOU1RBTkNFLFxuK1x0XHRcdFx0Yi1cdTAwM2VpbnN0YW5jZSkgfHxcbitcdFx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTkFNRSwgYi1cdTAwM2VuYW1lKSB8fFxuK1x0XHQgICAgbmxhX3B1dF91OChza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0RFUFRILCBiLVx1MDAzZWRlcHRoKSB8fFxuK1x0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19MQU5FUywgYi1cdTAwM2VsYW5lcykgfHxcbitcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTE9PUEJBQ0tfU1VQUE9SVEVELFxuK1x0XHRcdFx0Yi1cdTAwM2Vsb29wYmFja19zdXBwb3J0ZWQpIHx8XG4rXHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX1RYX1BBVFRFUk5TLFxuK1x0XHRcdFx0Yi1cdTAwM2VzdXBwb3J0ZWRfdHhfcGF0dGVybnMpIHx8XG4rXHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX1JYX1BBVFRFUk5TLFxuK1x0XHRcdFx0Yi1cdTAwM2VzdXBwb3J0ZWRfcnhfcGF0dGVybnMpKVxuK1x0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuK1x0XHRpZiAoYi1cdTAwM2VlcnJvcl9pbmplY3Rfc3VwcG9ydGVkIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbmxhX3B1dF9mbGFnKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfRVJST1JfSU5KRUNUKSlcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcdFx0aWYgKGItXHUwMDNlYmVydF9zdXBwb3J0ZWQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBubGFfcHV0X2ZsYWcoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19CRVJUKSlcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcbitcdFx0bmxhX25lc3RfZW5kKHNrYiwgYmxvY2tfYXR0cik7XG4rXHR9XG4rXG4rXHRubGFfbmVzdF9lbmQoc2tiLCBibG9ja3NfYXR0cik7XG4rXHRyZXR1cm4gMDtcbitcbitubGFfcHV0X2ZhaWx1cmU6XG4rXHRubGFfbmVzdF9jYW5jZWwoc2tiLCBibG9ja3NfYXR0cik7XG4rXHRyZXR1cm4gLUVNU0dTSVpFO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfaW50Zl9jYXBzX3JlcXVlc3Rfb3BzID0ge1xuK1x0LnJlcXVlc3RfY21kXHQ9IEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVQsXG4rXHQucmVwbHlfY21kXHQ9IEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRfUkVQTFksXG4rXHQuaGRyX2F0dHJcdD0gRVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIsXG4rXHQucmVxX2luZm9fc2l6ZVx0PSBzaXplb2Yoc3RydWN0IGludGZfY2Fwc19yZXFfaW5mbyksXG4rXHQucmVwbHlfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSksXG4rXHQucHJlcGFyZV9kYXRhXHQ9IGludGZfY2Fwc19wcmVwYXJlX2RhdGEsXG4rXHQucmVwbHlfc2l6ZVx0PSBpbnRmX2NhcHNfcmVwbHlfc2l6ZSxcbitcdC5maWxsX3JlcGx5XHQ9IGludGZfY2Fwc19maWxsX3JlcGx5LFxuK307XG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5jIGIvbmV0L2V0aHRvb2wvbmV0bGluay5jXG5pbmRleCAxYWYzOTViNTQzMzBlLi41NmU1YzgxMTQ1NGJiIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvbmV0bGluay5jXG4rKysgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmNcbkBAIC00MzEsNiArNDMxLDggQEAgZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tfX0VUSFRPT0xfTVNHX1VTRVJfQ05UXSA9IHtcbiBcdFtFVEhUT09MX01TR19UU0NPTkZJR19TRVRdXHQ9IFx1MDAyNmV0aG5sX3RzY29uZmlnX3JlcXVlc3Rfb3BzLFxuIFx0W0VUSFRPT0xfTVNHX1BIWV9HRVRdXHRcdD0gXHUwMDI2ZXRobmxfcGh5X3JlcXVlc3Rfb3BzLFxuIFx0W0VUSFRPT0xfTVNHX01TRV9HRVRdXHRcdD0gXHUwMDI2ZXRobmxfbXNlX3JlcXVlc3Rfb3BzLFxuK1x0W0VUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRdXHQ9IFx1MDAyNmV0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcyxcbitcdFtFVEhUT09MX01TR19QSFlfVEVTVF9HRVRdXHQ9IFx1MDAyNmV0aG5sX3BoeV90ZXN0X3JlcXVlc3Rfb3BzLFxuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBldGhubF9kdW1wX2N0eCAqZXRobmxfZHVtcF9jb250ZXh0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbkBAIC0xNTcyLDYgKzE1NzQsMjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBldGh0b29sX2dlbmxfb3BzW10gPSB7XG4gXHRcdC5wb2xpY3kgPSBldGhubF9tc2VfZ2V0X3BvbGljeSxcbiBcdFx0Lm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX21zZV9nZXRfcG9saWN5KSAtIDEsXG4gXHR9LFxuK1x0e1xuK1x0XHQuY21kXHQ9IEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVQsXG4rXHRcdC5kb2l0XHQ9IGV0aG5sX2RlZmF1bHRfZG9pdCxcbitcdFx0LnN0YXJ0XHQ9IGV0aG5sX2RlZmF1bHRfc3RhcnQsXG4rXHRcdC5kdW1waXRcdD0gZXRobmxfZGVmYXVsdF9kdW1waXQsXG4rXHRcdC5kb25lXHQ9IGV0aG5sX2RlZmF1bHRfZG9uZSxcbitcdFx0LnBvbGljeSA9IGV0aG5sX2ludGZfY2Fwc19nZXRfcG9saWN5LFxuK1x0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3kpIC0gMSxcbitcdH0sXG4rXHR7XG4rXHRcdC5jbWRcdD0gRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULFxuK1x0XHQuZG9pdFx0PSBldGhubF9kZWZhdWx0X2RvaXQsXG4rXHRcdC5wb2xpY3kgPSBldGhubF9waHlfdGVzdF9nZXRfcG9saWN5LFxuK1x0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcGh5X3Rlc3RfZ2V0X3BvbGljeSkgLSAxLFxuK1x0fSxcbitcdHtcbitcdFx0LmNtZFx0PSBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QsXG4rXHRcdC5mbGFnc1x0PSBHRU5MX1VOU19BRE1JTl9QRVJNLFxuK1x0XHQuZG9pdFx0PSBldGhubF9hY3RfcGh5X3Rlc3QsXG4rXHRcdC5wb2xpY3kgPSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5LFxuK1x0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeSkgLSAxLFxuK1x0fSxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgZXRodG9vbF9ubF9tY2dycHNbXSA9IHtcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmggYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbmluZGV4IDNlOTY5YTA3MGY5ZmUuLjFjYWJhNjBkODNjNDMgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxuQEAgLTQ3NCw2ICs0NzQsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX21tX3JlcXVlc3Rfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcGh5X3JlcXVlc3Rfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tc2VfcmVxdWVzdF9vcHM7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9pbnRmX2NhcHNfcmVxdWVzdF9vcHM7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcztcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtFVEhUT09MX0FfSEVBREVSX0ZMQUdTICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lfc3RhdHNbRVRIVE9PTF9BX0hFQURFUl9GTEFHUyArIDFdO1xuQEAgLTUzMCw2ICs1MzIsMTEgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfSEVBREVSICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX2dldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX0hFQURFUiArIDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19zZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19NQVggKyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfbXNlX2dldF9wb2xpY3lbRVRIVE9PTF9BX01TRV9IRUFERVIgKyAxXTtcbitleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3lbRVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIgKyAxXTtcbitleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X3Rlc3RfZ2V0X3BvbGljeVtFVEhUT09MX0FfUEhZX1RFU1RfTEFORSArIDFdO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9NQVggKyAxXTtcbitcbitpbnQgZXRobmxfYWN0X3BoeV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIFxuIGludCBldGhubF9zZXRfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gaW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BoeXRlc3QuYyBiL25ldC9ldGh0b29sL3BoeXRlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmRlZGNkMDM2YjdjMmVcbi0tLSAvZGV2L251bGxcbisrKyBiL25ldC9ldGh0b29sL3BoeXRlc3QuY1xuQEAgLTAsMCArMSwxNzEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rXG4rI2luY2x1ZGUgXCJuZXRsaW5rLmhcIlxuKyNpbmNsdWRlIFwiY29tbW9uLmhcIlxuK1xuK3N0cnVjdCBwaHlfdGVzdF9yZXFfaW5mbyB7XG4rXHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTtcbit9O1xuK1xuK3N0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhIHtcbitcdHN0cnVjdCBldGhubF9yZXBseV9kYXRhIGJhc2U7XG4rXHRzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCB0ZXN0O1xuK307XG4rXG4rI2RlZmluZSBQSFlfVEVTVF9SRVBEQVRBKF9fcmVwbHlfYmFzZSkgXFxcbitcdGNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhLCBiYXNlKVxuK1xuKy8qIFBIWV9URVNUX0dFVCAqL1xuK1xuK2NvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkUgKyAxXSA9IHtcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXVx0PSBOTEFfUE9MSUNZX05FU1RFRChldGhubF9oZWFkZXJfcG9saWN5KSxcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4rXHRbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4rfTtcbitcbitzdGF0aWMgaW50IHBoeV90ZXN0X3JlcGx5X3NpemUoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcbitcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpXG4re1xuK1x0cmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXHQvKiBibG9ja19pZCAqL1xuK1x0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXHQvKiBsYW5lICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcdC8qIHR4X3BhdHRlcm4gKi9cbitcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1x0LyogcnhfcGF0dGVybiAqL1xuK1x0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXHQvKiBhY3RpdmVfdGVzdHMgKi9cbitcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSAgK1x0LyogY2hlY2tlcl9sb2NrICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU2NCkpICtcdC8qIGVycm9yX2NvdW50ICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU2NCkpO1x0LyogdG90YWxfYml0c19zZW50ICovXG4rfVxuK1xuK3N0YXRpYyBpbnQgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4rXHRcdFx0XHQgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UsXG4rXHRcdFx0XHQgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbit7XG4rXHRzdHJ1Y3QgcGh5X3Rlc3RfcmVwbHlfZGF0YSAqZGF0YSA9IFBIWV9URVNUX1JFUERBVEEocmVwbHlfYmFzZSk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmVwbHlfYmFzZS1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVx1MDAzZWF0dHJzO1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X3BoeV90ZXN0KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRtZW1zZXQoXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0LCAwLCBzaXplb2YoZGF0YS1cdTAwM2V0ZXN0KSk7XG4rXG4rXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSkge1xuK1x0XHRkYXRhLVx1MDAzZXRlc3QuYmxvY2tfaWQgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKTtcbitcdFx0ZGF0YS1cdTAwM2V0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfQkxPQ0tfSUQ7XG4rXHR9XG4rXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKSB7XG4rXHRcdGRhdGEtXHUwMDNldGVzdC5sYW5lID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKTtcbitcdFx0ZGF0YS1cdTAwM2V0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfTEFORTtcbitcdH1cbitcbitcdHJldHVybiBkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X3BoeV90ZXN0KGRldiwgXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0KTtcbit9XG4rXG4rc3RhdGljIGludCBwaHlfdGVzdF9maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhICpkYXRhID0gUEhZX1RFU1RfUkVQREFUQShyZXBseV9iYXNlKTtcbitcdGNvbnN0IHN0cnVjdCBldGh0b29sX3BoeV90ZXN0ICp0ID0gXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0O1xuK1xuK1x0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lELCB0LVx1MDAzZWJsb2NrX2lkKSB8fFxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0xBTkUsIHQtXHUwMDNlbGFuZSkgfHxcbitcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOLCB0LVx1MDAzZXR4X3BhdHRlcm4pIHx8XG4rXHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTiwgdC1cdTAwM2VyeF9wYXR0ZXJuKSB8fFxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0FDVElWRV9URVNUUyxcbitcdFx0XHR0LVx1MDAzZWFjdGl2ZV90ZXN0cykgfHxcbitcdCAgICBubGFfcHV0X3U4KHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0NIRUNLRVJfTE9DSywgdC1cdTAwM2VjaGVja2VyX2xvY2spIHx8XG4rXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfRVJST1JfQ09VTlQsXG4rXHRcdFx0ICAgICAgdC1cdTAwM2VlcnJvcl9jb3VudCwgRVRIVE9PTF9BX1BIWV9URVNUX1VOU1BFQykgfHxcbitcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9UT1RBTF9CSVRTX1NFTlQsXG4rXHRcdFx0ICAgICAgdC1cdTAwM2V0b3RhbF9iaXRzX3NlbnQsIEVUSFRPT0xfQV9QSFlfVEVTVF9VTlNQRUMpKVxuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcyA9IHtcbitcdC5yZXF1ZXN0X2NtZFx0PSBFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsXG4rXHQucmVwbHlfY21kXHQ9IEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVF9SRVBMWSxcbitcdC5oZHJfYXR0clx0PSBFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSLFxuK1x0LnJlcV9pbmZvX3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBwaHlfdGVzdF9yZXFfaW5mbyksXG4rXHQucmVwbHlfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhKSxcbitcdC5wcmVwYXJlX2RhdGFcdD0gcGh5X3Rlc3RfcHJlcGFyZV9kYXRhLFxuK1x0LnJlcGx5X3NpemVcdD0gcGh5X3Rlc3RfcmVwbHlfc2l6ZSxcbitcdC5maWxsX3JlcGx5XHQ9IHBoeV90ZXN0X2ZpbGxfcmVwbHksXG4rfTtcbitcbisvKiBQSFlfVEVTVF9BQ1QgKi9cbitcbitjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9NQVggKyAxXSA9IHtcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXVx0XHQ9IE5MQV9QT0xJQ1lfTkVTVEVEKGV0aG5sX2hlYWRlcl9wb2xpY3kpLFxuK1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9CTE9DS19JRF1cdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuK1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4rXHRbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl1cdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuK1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9CRVJUX0FDVElPTl1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuK307XG4rXG4raW50IGV0aG5sX2FjdF9waHlfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuK3tcbitcdHN0cnVjdCBldGhubF9yZXFfaW5mbyByZXFfaW5mbyA9IHt9O1xuK1x0c3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby1cdTAwM2VhdHRycztcbitcdHN0cnVjdCBldGh0b29sX3BoeV90ZXN0IHRlc3QgPSB7fTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoXHUwMDI2cmVxX2luZm8sXG4rXHRcdFx0XHRcdCB0YltFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXSxcbitcdFx0XHRcdFx0IGdlbmxfaW5mb19uZXQoaW5mbyksIGluZm8tXHUwMDNlZXh0YWNrLFxuK1x0XHRcdFx0XHQgdHJ1ZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0ZGV2ID0gcmVxX2luZm8uZGV2O1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlc2V0X3BoeV90ZXN0KSB7XG4rXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuK1x0XHRnb3RvIG91dF9kZXY7XG4rXHR9XG4rXG4rXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSkge1xuK1x0XHR0ZXN0LmJsb2NrX2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSk7XG4rXHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CTE9DS19JRDtcbitcdH1cbitcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfTEFORV0pIHtcbitcdFx0dGVzdC5sYW5lID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKTtcbitcdFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0xBTkU7XG4rXHR9XG4rXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dKSB7XG4rXHRcdHRlc3QudHhfcGF0dGVybiA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOXSk7XG4rXHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9UWF9QQVRURVJOO1xuK1x0fVxuK1x0aWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOXSkge1xuK1x0XHR0ZXN0LnJ4X3BhdHRlcm4gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl0pO1xuK1x0XHR0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfUlhfUEFUVEVSTjtcbitcdH1cbitcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkVSVF9BQ1RJT05dKSB7XG4rXHRcdHRlc3QuYmVydF9hY3Rpb24gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfQkVSVF9BQ1RJT05dKTtcbitcdFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0JFUlRfQUNUSU9OO1xuK1x0fVxuK1x0aWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9JTkpFQ1RfRVJST1JfQ09VTlRdKSB7XG4rXHRcdHRlc3QuaW5qZWN0X2Vycm9yX2NvdW50ID1cbitcdFx0XHRubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXSk7XG4rXHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9JTkpFQ1RfQ09VTlQ7XG4rXHR9XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdHJldCA9IGV0aG5sX29wc19iZWdpbihkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBvdXRfcnRubDtcbitcbitcdHJldCA9IGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VzZXRfcGh5X3Rlc3QoZGV2LCBcdTAwMjZ0ZXN0KTtcbitcdGV0aG5sX29wc19jb21wbGV0ZShkZXYpO1xuK1xuK291dF9ydG5sOlxuK1x0cnRubF91bmxvY2soKTtcbitvdXRfZGV2OlxuK1x0ZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9wdXQoXHUwMDI2cmVxX2luZm8pO1xuK1x0cmV0dXJuIHJldDtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzoyMC4yNzMyODk4NTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUwNzE3MjU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldyBldGh0b29sIE5ldGxpbmsgQ29tbWFuZHMqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgdGhpcyBuZXcgcGF0Y2ggc2VyaWVzIGFkZGluZyBhIGZldyBldGh0b29sIG5ldGxpbmsgY29tbWFuZHM6IGBFVEhUT09MX01TR19JTlRGX0NBUFNfR0VUYCwgYEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVGAsIGFuZCBgRVRIVE9PTF9NU0dfUEhZX1RFU1RfQUNUYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgdXNpbmcgYHN0cnVjdCBldGh0b29sX2ludGZfY2Fwc2AgYW5kIGBzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdGAgdG8gaGFuZGxlIGNvbW11bmljYXRpb24gd2l0aCB0aGUga2VybmVsIGRyaXZlcnMuIEknbSB0YWtpbmcgYSBsb29rIGF0IGBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhYCBpbiBgbmV0L2V0aHRvb2wvaW50Zl9jYXBzLmNgIHRvIHNlZSBob3cgaXQgd29ya3MuXG5cblNwZWNpZmljYWxseSwgdGhpcyBzbmlwcGV0OlxuXG5gYGBjXG5zdGF0aWMgaW50IGludGZfY2Fwc19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcblx0XHRcdFx0ICBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSxcblx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxue1xuXHRzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGEgKmRhdGEgPSBJTlRGX0NBUFNfUkVQREFUQShyZXBseV9iYXNlKTtcblx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJlcGx5X2Jhc2UtXHUwMDNlZGV2O1xuXG5cdGlmICghZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9pbnRmX2NhcHMpXG5cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuXG5cdHJldHVybiBkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2ludGZfY2FwcyhkZXYsIFx1MDAyNmRhdGEtXHUwMDNlY2Fwcyk7XG59XG5gYGBcblxuV2FpdCBhIHNlY29uZOKApiBgZGF0YS1cdTAwM2VjYXBzYCBpcyAqZGlyZWN0bHkqIHBhc3NlZCB0byBgZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9pbnRmX2NhcHMoZGV2LCBcdTAwMjZkYXRhLVx1MDAzZWNhcHMpYC4gVGhlIGRyaXZlcidzIGBnZXRfaW50Zl9jYXBzYCBmdW5jdGlvbiBpcyBnb2luZyB0byB3cml0ZSBpbnRvIHRoYXQgYGRhdGEtXHUwMDNlY2Fwc2Agc3RydWN0LiBCdXQgaXMgdGhhdCBgZGF0YS1cdTAwM2VjYXBzYCAqaW5pdGlhbGl6ZWQqIGJlZm9yZSB0aGUgY2FsbD8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGtub3cuIFdoZXJlIGlzIGl0IGdldHRpbmcgYWxsb2NhdGVkP1xuXG5Pa2F5LCBzbyBgZGF0YWAgaXMgcGFydCBvZiBgc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhYCwgd2hpY2ggaXMgYWxsb2NhdGVkIGJ5IHRoZSBldGh0b29sIG5ldGxpbmsgZnJhbWV3b3JrLiBSaWdodCwgbGV0IG1lIGNoZWNrIGhvdyB0aGUgYHJlcGx5X2RhdGFgIGl0c2VsZiBpcyBhbGxvY2F0ZWQgd2l0aGluIHRoZSBmcmFtZXdvcmsgaW4gYG5ldC9ldGh0b29sL25ldGxpbmsuY2AuIEkgc2hvdWxkIHByb2JhYmx5IHVzZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gZmluZCBvdXQgd2hlcmUgYHJlcGx5X2RhdGFgIGlzIGFsbG9jYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMTAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzoyNy43ODA0NjU0NzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMTM2MDU5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvYy4qcmVwbHlfZGF0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZXRodG9vbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2V0aHRvb2wvbmV0bGluay5jPTUwOT1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTUyOS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NTMwOlxcdHJlcGx5X2RhdGEgPSBrbWFsbG9jKG9wcy1cXHUwMDNlcmVwbHlfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNTMxLVxcdGlmICghcmVwbHlfZGF0YSkge1xcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jPTY3Mj1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTY5MC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NjkxOlxcdHJlcGx5X2RhdGEgPSBrbWFsbG9jKG9wcy1cXHUwMDNlcmVwbHlfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNjkyLVxcdGlmICghcmVwbHlfZGF0YSkge1xcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jPTcyNT1zdGF0aWMgaW50IGV0aG5sX3BlcnBoeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNzQ0LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo3NDU6XFx0cmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVxcdTAwM2VyZXBseV9kYXRhX3NpemUsIEdGUF9LRVJORUwpO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYy03NDYtXFx0aWYgKCFyZXBseV9kYXRhKSB7XFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM9OTk4PXN0YXRpYyB2b2lkIGV0aG5sX2RlZmF1bHRfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMTAxOS1cXHRcXHRyZXR1cm47XFxubmV0L2V0aHRvb2wvbmV0bGluay5jOjEwMjA6XFx0cmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVxcdTAwM2VyZXBseV9kYXRhX3NpemUsIEdGUF9LRVJORUwpO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYy0xMDIxLVxcdGlmICghcmVwbHlfZGF0YSkge1xcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmM9MTE4PXN0YXRpYyBpbnRcXG5uZXQvZXRodG9vbC9yc3MuYzoxMTk6cnNzX2dldF9kYXRhX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCByc3NfcmVwbHlfZGF0YSAqZGF0YSlcXG5uZXQvZXRodG9vbC9yc3MuYy0xMjAte1xcbi0tXFxubmV0L2V0aHRvb2wvdHNjb25maWcuYz0xOTk9c3RhdGljIGludCB0c2NvbmZpZ19zZW5kX3JlcGx5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jLTIxMC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jOjIxMTpcXHRyZXBseV9kYXRhID0ga21hbGxvY19vYmooKnJlcGx5X2RhdGEpO1xcbm5ldC9ldGh0b29sL3RzY29uZmlnLmMtMjEyLVxcdGlmICghcmVwbHlfZGF0YSkge1xcbi0tXFxubmV0L2V0aHRvb2wvdHNpbmZvLmM9NTAwPWludCBldGhubF90c2luZm9fc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2V0aHRvb2wvdHNpbmZvLmMtNTEzLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC9ldGh0b29sL3RzaW5mby5jOjUxNDpcXHRyZXBseV9kYXRhID0ga3phbGxvY19vYmooKnJlcGx5X2RhdGEpO1xcbm5ldC9ldGh0b29sL3RzaW5mby5jLTUxNS1cXHRpZiAoIXJlcGx5X2RhdGEpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDc6MjguMTExODM3NzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkzODY4MjMxNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5pbml0aWFsaXplZCBNZW1vcnkgVnVsbmVyYWJpbGl0eSBpbiBldGh0b29sJ3MgSW50ZXJmYWNlIENhcGFiaWxpdGllcyBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgZXRodG9vbGAgaGFuZGxlcyBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZXRobmxfZGVmYXVsdF9kb2l0YCBhbmQgYGV0aG5sX2RlZmF1bHRfc3RhcnRgIGZ1bmN0aW9ucy4gSSBzZWUgdGhhdCBgcmVwbHlfZGF0YWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jYCB3aXRob3V0IHRoZSBgX19HRlBfWkVST2AgZmxhZy4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZTogdGhlIGFsbG9jYXRlZCBtZW1vcnkgaXNuJ3QgemVyb2VkLCBtZWFuaW5nIGl0IGNvbnRhaW5zIHdoYXRldmVyIGdhcmJhZ2UgaGFwcGVuZWQgdG8gYmUgdGhlcmUgcHJldmlvdXNseSBvbiB0aGUgaGVhcC5cblxuVGhlbiwgSSBmb2N1c2VkIG9uIHRoZSBgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YWAgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlIGRyaXZlcidzIGBnZXRfaW50Zl9jYXBzYCBmdW5jdGlvbiwgcGFzc2luZyBpdCBhIHBvaW50ZXIgdG8gYSBgc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhYC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGludGZfY2Fwc19wcmVwYXJlX2RhdGFgICpkb2Vzbid0KiB6ZXJvLWluaXRpYWxpemUgdGhlIGBkYXRhLVx1MDAzZWNhcHNgIHN0cnVjdHVyZSBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhpcyBzdHJ1Y3R1cmUuXG5cblRoZSB2dWxuZXJhYmlsaXR5IHN0ZW1zIGZyb20gd2hhdCBoYXBwZW5zIGlmIHRoZSBkcml2ZXIncyBgZ2V0X2ludGZfY2Fwc2AgZnVuY3Rpb24gZG9lc24ndCBjb21wbGV0ZWx5IGluaXRpYWxpemUgdGhlIGBkYXRhLVx1MDAzZWNhcHNgIHN0cnVjdHVyZSwgcGVyaGFwcyBkdWUgdG8gYW4gZXJyb3IgY29uZGl0aW9uIG9yIGEgbGFjayBvZiBjb21wbGV0ZSBpbml0aWFsaXphdGlvbi4gSWYgaXQgZG9lc24ndCBpbml0aWFsaXplIGFsbCB0aGUgZmllbGRzLCBpbmNsdWRpbmcsIGltcG9ydGFudGx5LCBgbnVtX2Jsb2Nrc2AsIHRoZSB2YWx1ZXMgd2l0aGluIGBkYXRhLVx1MDAzZWNhcHNgIGFyZSBlc3NlbnRpYWxseSBnYXJiYWdlIGZyb20gdGhlIGhlYXAuIFRoZXNlIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGNhbiB0aGVuIGdldCBwYXNzZWQgdG8gdXNlciBzcGFjZS5cblxuU3BlY2lmaWNhbGx5LCB0aGUgYGludGZfY2Fwc19maWxsX3JlcGx5YCBmdW5jdGlvbiBpdGVyYXRlcyB0aHJvdWdoIGEgYGJsb2Nrc2AgYXJyYXkgYmFzZWQgb24gYGRhdGEtXHUwMDNlY2Fwcy5udW1fYmxvY2tzYC4gSWYgYG51bV9ibG9ja3NgIGlzIHVuaW5pdGlhbGl6ZWQsIGl0IGNvdWxkIGJlIGEgbGFyZ2UsIHJhbmRvbSB2YWx1ZSwgbGVhZGluZyB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBhY2Nlc3NpbmcgdGhlIGBibG9ja3NgIGFycmF5IGFuZCBzZW5kaW5nIHRoYXQgdG8gdGhlIHVzZXIuXG5cbkhvd2V2ZXIsIGV2ZW4gaWYgdGhlIGRyaXZlciBjb3JyZWN0bHkgc2V0cyBgbnVtX2Jsb2Nrc2AsIGl0IG1pZ2h0IG5vdCBmdWxseSBpbml0aWFsaXplIGFsbCB0aGUgZmllbGRzIHdpdGhpbiB0aGUgYGJsb2Nrc2AgYXJyYXkuIFRoaXMgbWVhbnMgdGhhdCBpZiBgZ2V0X2ludGZfY2Fwc2AgZG9lc24ndCBmdWxseSBpbml0aWFsaXplIHRoZSBkYXRhLCB0aGUgY29udGVudHMgb2YgdGhlIGBibG9ja3NgIGFycmF5IChpbmNsdWRpbmcgdGhlIGBuYW1lYCBmaWVsZCwgd2hpY2ggaXMgdXNlZCB3aXRoIGBubGFfcHV0X3N0cmluZ2ApIGNvdWxkIGNvbnRhaW4gdW5pbml0aWFsaXplZCBkYXRhLiBUaGlzIG1pZ2h0IGNhdXNlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpZiB0aGUgbmFtZSBpcyBub3QgbnVsbCB0ZXJtaW5hdGVkIGFuZCB0aGVuIHVzZXIgc3BhY2UgbWF5IGFsc28gbGVhayBzdGFjayBvciBoZWFwIG1lbW9yeS5cblxuSSBjb25maXJtZWQgdGhhdCBgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YWAgZG9lcyAqbm90KiB6ZXJvIHRoZSBgZGF0YS1cdTAwM2VjYXBzYCBzdHJ1Y3R1cmUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdGhlIGRyaXZlciwgaW4gY29udHJhc3QgdG8gd2hhdCBoYXBwZW5zIGluIGBwaHlfdGVzdF9wcmVwYXJlX2RhdGFgLCB3aGljaCAqZG9lcyogaW5pdGlhbGl6ZSBpdHMgZGF0YS5cblxuVGhpcyBpcyBhIGNsYXNzaWMgdW5pbml0aWFsaXplZCBtZW1vcnkgaW5mby1sZWFrIHNpdHVhdGlvbiwgd2hlcmUga2VybmVsIG1lbW9yeSBlbmRzIHVwIGJlaW5nIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBwb3RlbnRpYWxseSBjb250YWluaW5nIHNlbnNpdGl2ZSBkYXRhLCBvciBjYXVzaW5nIGNyYXNoZXMuIEkgc2hvdWxkIGZpbGUgYSBLTVNBTiByZXBvcnQgZm9yIHRoaXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzQ5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzo0Ny40OTg2NjM1MjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0Mzk4Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlcGx5X2RhdGEgPSBrbWFsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ldGh0b29sL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9uZXRsaW5rLmM9NTA5PXN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNTI5LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo1MzA6XFx0cmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVxcdTAwM2VyZXBseV9kYXRhX3NpemUsIEdGUF9LRVJORUwpO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYy01MzEtXFx0aWYgKCFyZXBseV9kYXRhKSB7XFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM9NjcyPXN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNjkwLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo2OTE6XFx0cmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVxcdTAwM2VyZXBseV9kYXRhX3NpemUsIEdGUF9LRVJORUwpO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYy02OTItXFx0aWYgKCFyZXBseV9kYXRhKSB7XFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM9NzI1PXN0YXRpYyBpbnQgZXRobmxfcGVycGh5X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy03NDQtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubmV0L2V0aHRvb2wvbmV0bGluay5jOjc0NTpcXHRyZXBseV9kYXRhID0ga21hbGxvYyhvcHMtXFx1MDAzZXJlcGx5X2RhdGFfc2l6ZSwgR0ZQX0tFUk5FTCk7XFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTc0Ni1cXHRpZiAoIXJlcGx5X2RhdGEpIHtcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYz05OTg9c3RhdGljIHZvaWQgZXRobmxfZGVmYXVsdF9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy0xMDE5LVxcdFxcdHJldHVybjtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6MTAyMDpcXHRyZXBseV9kYXRhID0ga21hbGxvYyhvcHMtXFx1MDAzZXJlcGx5X2RhdGFfc2l6ZSwgR0ZQX0tFUk5FTCk7XFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTEwMjEtXFx0aWYgKCFyZXBseV9kYXRhKSB7XFxuLS1cXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jPTE5OT1zdGF0aWMgaW50IHRzY29uZmlnX3NlbmRfcmVwbHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL3RzY29uZmlnLmMtMjEwLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC9ldGh0b29sL3RzY29uZmlnLmM6MjExOlxcdHJlcGx5X2RhdGEgPSBrbWFsbG9jX29iaigqcmVwbHlfZGF0YSk7XFxubmV0L2V0aHRvb2wvdHNjb25maWcuYy0yMTItXFx0aWYgKCFyZXBseV9kYXRhKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA3OjQ3LjU1MzA2OTgwN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDMxNDI5NDYwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbmluaXRpYWxpemVkIE1lbW9yeSBWdWxuZXJhYmlsaXR5IGluIG5ldGxpbmsgQXR0cmlidXRlcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIGFzIGV4cGVjdGVkLCBgcmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSwgR0ZQX0tFUk5FTCk7YCBpcyB1c2VkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGByZXBseV9kYXRhYCBpcyBqdXN0IHVuaW5pdGlhbGl6ZWQgaGVhcCBtZW1vcnksIGEgY2xhc3NpYyBzb3VyY2Ugb2YgcHJvYmxlbXMuXG5cblRoZSBgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YWAgZnVuY3Rpb24gaXMgd2hlcmUgbXkgYXR0ZW50aW9uIGlzIGRyYXduLiBTcGVjaWZpY2FsbHksIGl0IHBhc3NlcyBgZGF0YS1cdTAwM2VjYXBzYCB0byB0aGUgZHJpdmVyJ3MgYGdldF9pbnRmX2NhcHNgIGNhbGxiYWNrLiBNeSBjb25jZXJuIGlzIHRoYXQgaWYgdGhlIGRyaXZlciBkb2Vzbid0IGluaXRpYWxpemUgKmFsbCogdGhlIGZpZWxkcyBvZiBgZGF0YS1cdTAwM2VjYXBzYCwgc2F5IGBudW1fYmxvY2tzYCBvciBldmVuIGp1c3QgdGhlIGluZGl2aWR1YWwgZmllbGRzIHdpdGhpbiBgYmxvY2tzW11gLCB0aGVuIGBpbnRmX2NhcHNfZmlsbF9yZXBseWAgd2lsbCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdoZW4gaXQgZ29lcyB0byBjb25zdHJ1Y3QgdGhlIG5ldGxpbmsgYXR0cmlidXRlcy4gRnVuY3Rpb25zIGxpa2UgYG5sYV9wdXRfdTMyYCwgYG5sYV9wdXRfc3RyaW5nYCwgZXRjLiwgd2lsbCBlZmZlY3RpdmVseSBsZWFrIHRoaXMgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UgdmlhIHRoZSBza2IuIEtNU0FOIGlzIGRldGVjdGluZyB0aGlzLCBhcyBpdCBzaG91bGQsIGJlY2F1c2UgS0FTQU4gd291bGRuJ3QgY2F0Y2ggaXQgc2luY2UgdGhlIG1lbW9yeSBpcyBib3RoIGFsbG9jYXRlZCBhbmQgd2l0aGluIGJvdW5kcy5cblxuSSBuZWVkZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gU28gSSB0aGVuIGV4YW1pbmVkIGBldGhubF9hY3RfcGh5X3Rlc3RgLlxuXG5gYGBjXG5pbnQgZXRobmxfYWN0X3BoeV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG57XG5cdHN0cnVjdCBldGhubF9yZXFfaW5mbyByZXFfaW5mbyA9IHt9O1xuXHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVx1MDAzZWF0dHJzO1xuXHRzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCB0ZXN0ID0ge307XG5gYGBcblxuRm9ydHVuYXRlbHksIGB0ZXN0YCBpcyBpbml0aWFsaXplZCB0byB6ZXJvIChgPSB7fWApLCBzbyB0aGF0IG9uZSBpcyBzYWZlLlxuXG5UaGVuIG9uIHRvIGBwaHlfdGVzdF9wcmVwYXJlX2RhdGFgP1xuYGBgY1xuc3RhdGljIGludCBwaHlfdGVzdF9wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcblx0XHRcdFx0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlLFxuXHRcdFx0XHQgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbntcblx0c3RydWN0IHBoeV90ZXN0X3JlcGx5X2RhdGEgKmRhdGEgPSBQSFlfVEVTVF9SRVBEQVRBKHJlcGx5X2Jhc2UpO1xuXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmVwbHlfYmFzZS1cdTAwM2VkZXY7XG5cdHN0cnVjdCBubGF0dHIgKip0YiA9IGluZm8tXHUwMDNlYXR0cnM7XG5cblx0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X3BoeV90ZXN0KVxuXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcblxuXHRtZW1zZXQoXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0LCAwLCBzaXplb2YoZGF0YS1cdTAwM2V0ZXN0KSk7XG5gYGBcbkl0IGV4cGxpY2l0bHkgZG9lcyBgbWVtc2V0KFx1MDAyNmRhdGEtXHUwMDNldGVzdCwgMCwgc2l6ZW9mKGRhdGEtXHUwMDNldGVzdCkpO2AsIHNvIHRoYXQgbG9va3Mgc2FmZSB0b28uIEdvb2QuXG5cbkJ1dCB3YWl0LCBgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YWAgaXMgdGhlIG9uZSB0byBmb2N1cyBvbiFcblxuYGBgY1xuc3RhdGljIGludCBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG5cdFx0XHRcdCAgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UsXG5cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbntcblx0c3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhICpkYXRhID0gSU5URl9DQVBTX1JFUERBVEEocmVwbHlfYmFzZSk7XG5cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSByZXBseV9iYXNlLVx1MDAzZWRldjtcblxuXHRpZiAoIWRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfaW50Zl9jYXBzKVxuXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcblxuXHRyZXR1cm4gZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9pbnRmX2NhcHMoZGV2LCBcdTAwMjZkYXRhLVx1MDAzZWNhcHMpO1xufVxuYGBgXG5cblRoZXJlJ3Mgbm8gYG1lbXNldGAgaGVyZSEgVGhhdCBtZWFucyB0aGUgYGRhdGFgIHN0cnVjdCwgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jYCBpbiBgZXRobmxfZGVmYXVsdF9kb2l0YCwgaXMgcGFzc2VkIHRvIGBnZXRfaW50Zl9jYXBzYC4gSWYgdGhlIGRyaXZlciAqZG9lc24ndCogZnVsbHkgaW5pdGlhbGl6ZSBgZGF0YS1cdTAwM2VjYXBzYCwgd2UgKndpbGwqIGxlYWsgdW5pbml0aWFsaXplZCBoZWFwIG1lbW9yeSB0byB1c2VyIHNwYWNlIHZpYSBgaW50Zl9jYXBzX2ZpbGxfcmVwbHlgLiBUaGlzIGlzIGEgZGVmaW5pdGUgdnVsbmVyYWJpbGl0eS5cblxuVGltZSB0byBkb3VibGUtY2hlY2sgYGV0aG5sX2RlZmF1bHRfZG9pdGAgdG8gbWFrZSBzdXJlIGl0J3Mgbm90IHNvbWVob3cgemVyb2luZyB0aGUgbWVtb3J5IHRoYXQncyBnZXR0aW5nIGFsbG9jYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MjUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6MDEuODY3MzY3NjU5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdHN0YXRpYyB2b2lkIGV0aG5sX2luaXRfcmVwbHlfZGF0YShzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSxcXG4gNTAxOlxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzICpvcHMsXFxuIDUwMjpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDUwMzpcXHR7XFxuIDUwNDpcXHRcXHRtZW1zZXQocmVwbHlfZGF0YSwgMCwgb3BzLVxcdTAwM2VyZXBseV9kYXRhX3NpemUpO1xcbiA1MDU6XFx0XFx0cmVwbHlfZGF0YS1cXHUwMDNlZGV2ID0gZGV2O1xcbiA1MDY6XFx0fVxcbiA1MDc6XFx0XFxuIDUwODpcXHQvKiBkZWZhdWx0IC1cXHUwMDNlZG9pdCgpIGhhbmRsZXIgZm9yIEdFVCB0eXBlIHJlcXVlc3RzICovXFxuIDUwOTpcXHRzdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiA1MTA6XFx0e1xcbiA1MTE6XFx0XFx0c3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGEgPSBOVUxMO1xcbiA1MTI6XFx0XFx0c3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyA9IE5VTEw7XFxuIDUxMzpcXHRcXHRjb25zdCB1OCBjbWQgPSBpbmZvLVxcdTAwM2VnZW5saGRyLVxcdTAwM2VjbWQ7XFxuIDUxNDpcXHRcXHRjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgKm9wcztcXG4gNTE1OlxcdFxcdGJvb2wgbmVlZF9ydG5sID0gZmFsc2U7XFxuIDUxNjpcXHRcXHRpbnQgaGRyX2xlbiwgcmVwbHlfbGVuO1xcbiA1MTc6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnJza2I7XFxuIDUxODpcXHRcXHR2b2lkICpyZXBseV9wYXlsb2FkO1xcbiA1MTk6XFx0XFx0aW50IHJldDtcXG4gNTIwOlxcdFxcbiA1MjE6XFx0XFx0b3BzID0gZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tjbWRdO1xcbiA1MjI6XFx0XFx0aWYgKFdBUk5fT05DRSghb3BzLCBcXFwiY21kICV1IGhhcyBubyBldGhubF9yZXF1ZXN0X29wc1xcXFxuXFxcIiwgY21kKSlcXG4gNTIzOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gNTI0OlxcdFxcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIG9wcy1cXHUwMDNlaGRyX2F0dHIpKVxcbiA1MjU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUyNjpcXHRcXG4gNTI3OlxcdFxcdHJlcV9pbmZvID0ga3phbGxvYyhvcHMtXFx1MDAzZXJlcV9pbmZvX3NpemUsIEdGUF9LRVJORUwpO1xcbiA1Mjg6XFx0XFx0aWYgKCFyZXFfaW5mbylcXG4gNTI5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA1MzA6XFx0XFx0cmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVxcdTAwM2VyZXBseV9kYXRhX3NpemUsIEdGUF9LRVJORUwpO1xcbiA1MzE6XFx0XFx0aWYgKCFyZXBseV9kYXRhKSB7XFxuIDUzMjpcXHRcXHRcXHRrZnJlZShyZXFfaW5mbyk7XFxuIDUzMzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNTM0OlxcdFxcdH1cXG4gNTM1OlxcdFxcbiA1MzY6XFx0XFx0cmV0ID0gZXRobmxfZGVmYXVsdF9wYXJzZShyZXFfaW5mbywgaW5mbywgb3BzLCAhb3BzLVxcdTAwM2VhbGxvd19ub2Rldl9kbyk7XFxuIDUzNzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNTM4OlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIDUzOTpcXHRcXHRldGhubF9pbml0X3JlcGx5X2RhdGEocmVwbHlfZGF0YSwgb3BzLCByZXFfaW5mby1cXHUwMDNlZGV2KTtcXG4gNTQwOlxcdFxcbiA1NDE6XFx0XFx0aWYgKHJlcV9pbmZvLVxcdTAwM2VkZXYpIHtcXG4gNTQyOlxcdFxcdFxcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhyZXFfaW5mby1cXHUwMDNlZGV2KSB8fFxcbiA1NDM6XFx0XFx0XFx0XFx0ICAgIGV0aHRvb2xfbmxfbXNnX25lZWRzX3J0bmwocmVxX2luZm8tXFx1MDAzZWRldiwgY21kKTtcXG4gNTQ0OlxcdFxcdFxcdGlmIChuZWVkX3J0bmwpXFxuIDU0NTpcXHRcXHRcXHRcXHRydG5sX2xvY2soKTtcXG4gNTQ2OlxcdFxcdFxcdG5ldGRldl9sb2NrX29wcyhyZXFfaW5mby1cXHUwMDNlZGV2KTtcXG4gNTQ3OlxcdFxcdH1cXG4gNTQ4OlxcdFxcdHJldCA9IG9wcy1cXHUwMDNlcHJlcGFyZV9kYXRhKHJlcV9pbmZvLCByZXBseV9kYXRhLCBpbmZvKTtcXG4gNTQ5OlxcdFxcdGlmIChyZXFfaW5mby1cXHUwMDNlZGV2KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA4OjAxLjg2NzQ3MDg1OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzE4MzA5MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gRGF0YSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIGBldGhubF9pbml0X3JlcGx5X2RhdGFgIGlzIGNhbGxpbmcgYG1lbXNldGAgdG8gemVybyBvdXQgdGhlIGByZXBseV9kYXRhYCBidWZmZXIuIExldCdzIGNvbmZpcm0gdGhhdCB3aXRoIGEgcXVpY2sgY2hlY2sgb2YgbGluZSA1MDQ6IFl1cCwgdGhlcmUgaXQgaXM6IGBtZW1zZXQocmVwbHlfZGF0YSwgMCwgb3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSk7YC4gQW5kIGl0J3MgY2FsbGVkIGF0IGxpbmUgNTM5LCBzbyBgZXRobmxfaW5pdF9yZXBseV9kYXRhKHJlcGx5X2RhdGEsIG9wcywgcmVxX2luZm8tXHUwMDNlZGV2KTtgIGlzIGRlZmluaXRlbHkgaW5pdGlhbGl6aW5nIHRoYXQgYHJlcGx5X2RhdGFgIGJ1ZmZlci5cblxuQWhhISBJZiBgcmVwbHlfZGF0YWAgaXMgYmVpbmcgemVyb2VkIG91dCByaWdodCB0aGVyZSwgdGhlbiB0aGUgYGRhdGEtXHUwMDNlY2Fwc2AgZmllbGQgaW4gYGludGZfY2Fwc19wcmVwYXJlX2RhdGFgIHNob3VsZCAqYWxyZWFkeSogYmUgemVyb2VkIGFzIHdlbGwuIFRoaXMgY2hhbmdlcyB0aGluZ3M7IHRoZSBleHBsaWNpdCB6ZXJvaW5nIEkgd2FzIGV4cGVjdGluZyBtaWdodCBiZSByZWR1bmRhbnQuIExldCdzIG1ha2Ugc3VyZSB0aGF0IG5vdGhpbmcgZWxzZSBvdmVyd3JpdGVzIHRoaXMgYXMgd2VsbCwgYW5kIGRvdWJsZS1jaGVjayBgZXRobmxfZGVmYXVsdF9zdGFydGAgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTk3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6MDcuNTg1NzgzOTY4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjcyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjcyOlxcdHN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIDY3MzpcXHR7XFxuIDY3NDpcXHRcXHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xcbiA2NzU6XFx0XFx0c3RydWN0IGV0aG5sX2R1bXBfY3R4ICpjdHggPSBldGhubF9kdW1wX2NvbnRleHQoY2IpO1xcbiA2NzY6XFx0XFx0c3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGE7XFxuIDY3NzpcXHRcXHRjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgKm9wcztcXG4gNjc4OlxcdFxcdHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm87XFxuIDY3OTpcXHRcXHRzdHJ1Y3QgZ2VubG1zZ2hkciAqZ2hkcjtcXG4gNjgwOlxcdFxcdGludCByZXQ7XFxuIDY4MTpcXHRcXG4gNjgyOlxcdFxcdEJVSUxEX0JVR19PTihzaXplb2YoKmN0eCkgXFx1MDAzZSBzaXplb2YoY2ItXFx1MDAzZWN0eCkpO1xcbiA2ODM6XFx0XFxuIDY4NDpcXHRcXHRnaGRyID0gbmxtc2dfZGF0YShjYi1cXHUwMDNlbmxoKTtcXG4gNjg1OlxcdFxcdG9wcyA9IGV0aG5sX2RlZmF1bHRfcmVxdWVzdHNbZ2hkci1cXHUwMDNlY21kXTtcXG4gNjg2OlxcdFxcdGlmIChXQVJOX09OQ0UoIW9wcywgXFxcImNtZCAldSBoYXMgbm8gZXRobmxfcmVxdWVzdF9vcHNcXFxcblxcXCIsIGdoZHItXFx1MDAzZWNtZCkpXFxuIDY4NzpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDY4ODpcXHRcXHRyZXFfaW5mbyA9IGt6YWxsb2Mob3BzLVxcdTAwM2VyZXFfaW5mb19zaXplLCBHRlBfS0VSTkVMKTtcXG4gNjg5OlxcdFxcdGlmICghcmVxX2luZm8pXFxuIDY5MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNjkxOlxcdFxcdHJlcGx5X2RhdGEgPSBrbWFsbG9jKG9wcy1cXHUwMDNlcmVwbHlfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTtcXG4gNjkyOlxcdFxcdGlmICghcmVwbHlfZGF0YSkge1xcbiA2OTM6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gNjk0OlxcdFxcdFxcdGdvdG8gZnJlZV9yZXFfaW5mbztcXG4gNjk1OlxcdFxcdH1cXG4gNjk2OlxcdFxcbiA2OTc6XFx0XFx0cmV0ID0gZXRobmxfZGVmYXVsdF9wYXJzZShyZXFfaW5mbywgXFx1MDAyNmluZm8tXFx1MDAzZWluZm8sIG9wcywgZmFsc2UpO1xcbiA2OTg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDY5OTpcXHRcXHRcXHRnb3RvIGZyZWVfcmVwbHlfZGF0YTtcXG4gNzAwOlxcdFxcdGlmIChyZXFfaW5mby1cXHUwMDNlZGV2KSB7XFxuIDcwMTpcXHRcXHRcXHQvKiBXZSBpZ25vcmUgZGV2aWNlIHNwZWNpZmljYXRpb24gaW4gZHVtcCByZXF1ZXN0cyBidXQgYXMgdGhlXFxuIDcwMjpcXHRcXHRcXHQgKiBzYW1lIHBhcnNlciBhcyBmb3Igbm9uLWR1bXAgKGRvaXQpIHJlcXVlc3RzIGlzIHVzZWQsIGl0XFxuIDcwMzpcXHRcXHRcXHQgKiB3b3VsZCB0YWtlIHJlZmVyZW5jZSB0byB0aGUgZGV2aWNlIGlmIGl0IGZpbmRzIG9uZVxcbiA3MDQ6XFx0XFx0XFx0ICovXFxuIDcwNTpcXHRcXHRcXHRuZXRkZXZfcHV0KHJlcV9pbmZvLVxcdTAwM2VkZXYsIFxcdTAwMjZyZXFfaW5mby1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbiA3MDY6XFx0XFx0XFx0cmVxX2luZm8tXFx1MDAzZWRldiA9IE5VTEw7XFxuIDcwNzpcXHRcXHR9XFxuIDcwODpcXHRcXG4gNzA5OlxcdFxcdGN0eC1cXHUwMDNlb3BzID0gb3BzO1xcbiA3MTA6XFx0XFx0Y3R4LVxcdTAwM2VyZXFfaW5mbyA9IHJlcV9pbmZvO1xcbiA3MTE6XFx0XFx0Y3R4LVxcdTAwM2VyZXBseV9kYXRhID0gcmVwbHlfZGF0YTtcXG4gNzEyOlxcdFxcdGN0eC1cXHUwMDNlcG9zX2lmaW5kZXggPSAwO1xcbiA3MTM6XFx0XFxuIDcxNDpcXHRcXHRyZXR1cm4gMDtcXG4gNzE1OlxcdFxcbiA3MTY6XFx0ZnJlZV9yZXBseV9kYXRhOlxcbiA3MTc6XFx0XFx0a2ZyZWUocmVwbHlfZGF0YSk7XFxuIDcxODpcXHRmcmVlX3JlcV9pbmZvOlxcbiA3MTk6XFx0XFx0a2ZyZWUocmVxX2luZm8pO1xcbiA3MjA6XFx0XFxuIDcyMTpcXHRcXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowODowNy41ODU5MTgyMjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4MzY2MDM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBldGhubF9kZWZhdWx0X3N0YXJ0YCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGV0aG5sX2RlZmF1bHRfc3RhcnRgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYHJlcGx5X2RhdGFgIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY2AgYnV0IGl0ICppc24ndCogemVyb2VkIG91dC4gVGhhdCdzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgb3IgYXQgbGVhc3QgYW4gYXJlYSBmb3IgZGVidWdnaW5nIGxhdGVyLCBhcyB0aGF0IG1lbW9yeSBtaWdodCBjb250YWluIGdhcmJhZ2UuIFdhaXQgYSBtaW51dGUuLi4gdGhpcyBpcyB0aGUgZHVtcGl0IG1vZHVsZSwgaXNuJ3QgaXQ/IE9rYXksIHNvIGBldGhubF9kZWZhdWx0X3N0YXJ0YCBpcyBzcGVjaWZpYyB0byB0aGUgZHVtcGl0IGZ1bmN0aW9uYWxpdHkuIEFscmlnaHQsIGxldCdzIHRyYWNlIHRoaXMgYHJlcGx5X2RhdGFgIHZhcmlhYmxlIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIGR1bXBpdCBjb2RlIGFuZCBzZWUgZXhhY3RseSBob3cgaXQncyBiZWluZyB1dGlsaXplZCwgYW5kIHdoZXJlIGFuZCB3aGV0aGVyIGl0IGdldHMgY2xlYW5lZCB1cC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgaW5mb3JtYXRpb24gaW4gdGhlcmUgZG9lcyBub3QgZ28gd2hlcmUgaXQgaXNuJ3Qgc3VwcG9zZWQgdG8sIGFuZCB0aGF0IHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBzdWZmZXIgZnJvbSBhbnkgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQyMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6MTEuODY5NTgwOTEzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzIyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzIyOlxcdH1cXG4gNzIzOlxcdFxcbiA3MjQ6XFx0LyogcGVyLVBIWSAtXFx1MDAzZXN0YXJ0KCkgaGFuZGxlciBmb3IgR0VUIHJlcXVlc3RzICovXFxuIDcyNTpcXHRzdGF0aWMgaW50IGV0aG5sX3BlcnBoeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIDcyNjpcXHR7XFxuIDcyNzpcXHRcXHRzdHJ1Y3QgZXRobmxfcGVycGh5X2R1bXBfY3R4ICpwaHlfY3R4ID0gZXRobmxfcGVycGh5X2R1bXBfY29udGV4dChjYik7XFxuIDcyODpcXHRcXHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xcbiA3Mjk6XFx0XFx0c3RydWN0IGV0aG5sX2R1bXBfY3R4ICpjdHggPSBcXHUwMDI2cGh5X2N0eC1cXHUwMDNlZXRobmxfY3R4O1xcbiA3MzA6XFx0XFx0c3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGE7XFxuIDczMTpcXHRcXHRjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgKm9wcztcXG4gNzMyOlxcdFxcdHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm87XFxuIDczMzpcXHRcXHRzdHJ1Y3QgZ2VubG1zZ2hkciAqZ2hkcjtcXG4gNzM0OlxcdFxcdGludCByZXQ7XFxuIDczNTpcXHRcXG4gNzM2OlxcdFxcdEJVSUxEX0JVR19PTihzaXplb2YoKmN0eCkgXFx1MDAzZSBzaXplb2YoY2ItXFx1MDAzZWN0eCkpO1xcbiA3Mzc6XFx0XFxuIDczODpcXHRcXHRnaGRyID0gbmxtc2dfZGF0YShjYi1cXHUwMDNlbmxoKTtcXG4gNzM5OlxcdFxcdG9wcyA9IGV0aG5sX2RlZmF1bHRfcmVxdWVzdHNbZ2hkci1cXHUwMDNlY21kXTtcXG4gNzQwOlxcdFxcdGlmIChXQVJOX09OQ0UoIW9wcywgXFxcImNtZCAldSBoYXMgbm8gZXRobmxfcmVxdWVzdF9vcHNcXFxcblxcXCIsIGdoZHItXFx1MDAzZWNtZCkpXFxuIDc0MTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDc0MjpcXHRcXHRyZXFfaW5mbyA9IGt6YWxsb2Mob3BzLVxcdTAwM2VyZXFfaW5mb19zaXplLCBHRlBfS0VSTkVMKTtcXG4gNzQzOlxcdFxcdGlmICghcmVxX2luZm8pXFxuIDc0NDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNzQ1OlxcdFxcdHJlcGx5X2RhdGEgPSBrbWFsbG9jKG9wcy1cXHUwMDNlcmVwbHlfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTtcXG4gNzQ2OlxcdFxcdGlmICghcmVwbHlfZGF0YSkge1xcbiA3NDc6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gNzQ4OlxcdFxcdFxcdGdvdG8gZnJlZV9yZXFfaW5mbztcXG4gNzQ5OlxcdFxcdH1cXG4gNzUwOlxcdFxcbiA3NTE6XFx0XFx0LyogVW5saWtlIHBlci1kZXYgZHVtcCwgZG9uJ3QgaWdub3JlIGRldi4gVGhlIGR1bXAgaGFuZGxlclxcbiA3NTI6XFx0XFx0ICogd2lsbCBub3RpY2UgaXQgYW5kIGR1bXAgUEhZcyBmcm9tIGdpdmVuIGRldi4gV2Ugb25seSBrZWVwIHRyYWNrIG9mXFxuIDc1MzpcXHRcXHQgKiB0aGUgZGV2J3MgaWZpbmRleCwgLmR1bXBpdCgpIHdpbGwgZ3JhYiBhbmQgcmVsZWFzZSB0aGUgbmV0ZGV2IGl0c2VsZi5cXG4gNzU0OlxcdFxcdCAqL1xcbiA3NTU6XFx0XFx0cmV0ID0gZXRobmxfZGVmYXVsdF9wYXJzZShyZXFfaW5mbywgXFx1MDAyNmluZm8tXFx1MDAzZWluZm8sIG9wcywgZmFsc2UpO1xcbiA3NTY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDc1NzpcXHRcXHRcXHRnb3RvIGZyZWVfcmVwbHlfZGF0YTtcXG4gNzU4OlxcdFxcdGlmIChyZXFfaW5mby1cXHUwMDNlZGV2KSB7XFxuIDc1OTpcXHRcXHRcXHRwaHlfY3R4LVxcdTAwM2VpZmluZGV4ID0gcmVxX2luZm8tXFx1MDAzZWRldi1cXHUwMDNlaWZpbmRleDtcXG4gNzYwOlxcdFxcdFxcdG5ldGRldl9wdXQocmVxX2luZm8tXFx1MDAzZWRldiwgXFx1MDAyNnJlcV9pbmZvLVxcdTAwM2VkZXZfdHJhY2tlcik7XFxuIDc2MTpcXHRcXHRcXHRyZXFfaW5mby1cXHUwMDNlZGV2ID0gTlVMTDtcXG4gNzYyOlxcdFxcdH1cXG4gNzYzOlxcdFxcbiA3NjQ6XFx0XFx0Y3R4LVxcdTAwM2VvcHMgPSBvcHM7XFxuIDc2NTpcXHRcXHRjdHgtXFx1MDAzZXJlcV9pbmZvID0gcmVxX2luZm87XFxuIDc2NjpcXHRcXHRjdHgtXFx1MDAzZXJlcGx5X2RhdGEgPSByZXBseV9kYXRhO1xcbiA3Njc6XFx0XFx0Y3R4LVxcdTAwM2Vwb3NfaWZpbmRleCA9IDA7XFxuIDc2ODpcXHRcXG4gNzY5OlxcdFxcdHJldHVybiAwO1xcbiA3NzA6XFx0XFxuIDc3MTpcXHRmcmVlX3JlcGx5X2RhdGE6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA4OjExLjg2OTY4NTEwNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE0NzUwODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgZXRobmxfZGVmYXVsdF9kdW1waXRgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBtZW50YWwgY2hlY2tsaXN0IHN0YXJ0cyB3aXRoIGBldGhubF9kZWZhdWx0X2R1bXBpdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhpcyBzcGVjaWZpYyBlbnRpdHkgaXMsIHByb2JhYmx5IGEgZnVuY3Rpb24sIHBlcmhhcHMgYSB2YXJpYWJsZSwgb3IgcG90ZW50aWFsbHkgZXZlbiBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gSSBjYW4gaW5mZXIgZnJvbSB0aGUgbmFtZSB0aGF0IHRoaXMgaGFzIHRvIGRvIHdpdGggc29tZSBkZWZhdWx0IHNldHRpbmdzIHRoYXQgbGlrZWx5IGdldCBcImR1bXBlZFwiIHNvbWV3aGVyZS4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIGl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gZWl0aGVyIG5ldHdvcmsgY29uZmlndXJhdGlvbiBvciBsb3ctbGV2ZWwgRXRoZXJuZXQgZHJpdmVyIHNldHRpbmdzLiBMZXQgbWUgc3RhcnQgYnkgc2VlaW5nIHdoZXJlIGl0J3MgY2FsbGVkIGFuZCBkZWZpbmVkLCBwZXJoYXBzIGEgcXVpY2sgYGdyZXBgIG9yIGBmaW5kYCB3aWxsIGdldCBtZSBzdGFydGVkLiBGcm9tIHRoZXJlIEknbGwgaW52ZXN0aWdhdGUgaG93IGl0J3MgdXNlZCBhbmQgd2hhdCBjb250ZXh0IGl0J3MgYXBwbGllZCBpbiwgaW4gdGhpcyBzeXN0ZW0uIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgcHJvY2VzcyBiZWZvcmUgSSBpbnZlc3RpZ2F0ZSB0aGUgaW50cmljYWNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTcxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowODoxNS4yODQ0Mzg1MjZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2V0aHRvb2wvbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3MixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3MjpcXHRcXHRrZnJlZShyZXBseV9kYXRhKTtcXG4gNzczOlxcdGZyZWVfcmVxX2luZm86XFxuIDc3NDpcXHRcXHRrZnJlZShyZXFfaW5mbyk7XFxuIDc3NTpcXHRcXG4gNzc2OlxcdFxcdHJldHVybiByZXQ7XFxuIDc3NzpcXHR9XFxuIDc3ODpcXHRcXG4gNzc5OlxcdHN0YXRpYyBpbnQgZXRobmxfcGVycGh5X2R1bXBfb25lX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA3ODA6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRobmxfcGVycGh5X2R1bXBfY3R4ICpjdHgsXFxuIDc4MTpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIDc4MjpcXHR7XFxuIDc4MzpcXHRcXHRzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmV0aG5sX2N0eCA9IFxcdTAwMjZjdHgtXFx1MDAzZWV0aG5sX2N0eDtcXG4gNzg0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBldGhubF9jdHgtXFx1MDAzZXJlcV9pbmZvLVxcdTAwM2VkZXY7XFxuIDc4NTpcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZV9ub2RlICpwZG47XFxuIDc4NjpcXHRcXHRpbnQgcmV0O1xcbiA3ODc6XFx0XFxuIDc4ODpcXHRcXHRpZiAoIWRldi1cXHUwMDNlbGlua190b3BvKVxcbiA3ODk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDc5MDpcXHRcXG4gNzkxOlxcdFxcdHhhX2Zvcl9lYWNoX3N0YXJ0KFxcdTAwMjZkZXYtXFx1MDAzZWxpbmtfdG9wby1cXHUwMDNlcGh5cywgY3R4LVxcdTAwM2Vwb3NfcGh5aW5kZXgsIHBkbixcXG4gNzkyOlxcdFxcdFxcdFxcdCAgY3R4LVxcdTAwM2Vwb3NfcGh5aW5kZXgpIHtcXG4gNzkzOlxcdFxcdFxcdGV0aG5sX2N0eC1cXHUwMDNlcmVxX2luZm8tXFx1MDAzZXBoeV9pbmRleCA9IGN0eC1cXHUwMDNlcG9zX3BoeWluZGV4O1xcbiA3OTQ6XFx0XFxuIDc5NTpcXHRcXHRcXHQvKiBXZSBjYW4gcmUtdXNlIHRoZSBvcmlnaW5hbCBkdW1wX29uZSBhcyAtXFx1MDAzZXByZXBhcmVfZGF0YSBpblxcbiA3OTY6XFx0XFx0XFx0ICogY29tbWFuZHMgdXNlIGV0aG5sX3JlcV9nZXRfcGh5ZGV2KCksIHdoaWNoIGdldHMgdGhlIFBIWSBmcm9tXFxuIDc5NzpcXHRcXHRcXHQgKiB0aGUgcmVxX2luZm8tXFx1MDAzZXBoeV9pbmRleFxcbiA3OTg6XFx0XFx0XFx0ICovXFxuIDc5OTpcXHRcXHRcXHRyZXQgPSBldGhubF9kZWZhdWx0X2R1bXBfb25lKHNrYiwgZGV2LCBldGhubF9jdHgsIGluZm8pO1xcbiA4MDA6XFx0XFx0XFx0aWYgKHJldClcXG4gODAxOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDgwMjpcXHRcXHR9XFxuIDgwMzpcXHRcXG4gODA0OlxcdFxcdGN0eC1cXHUwMDNlcG9zX3BoeWluZGV4ID0gMDtcXG4gODA1OlxcdFxcbiA4MDY6XFx0XFx0cmV0dXJuIDA7XFxuIDgwNzpcXHR9XFxuIDgwODpcXHRcXG4gODA5OlxcdHN0YXRpYyBpbnQgZXRobmxfcGVycGh5X2R1bXBfYWxsX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA4MTA6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRobmxfcGVycGh5X2R1bXBfY3R4ICpjdHgsXFxuIDgxMTpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIDgxMjpcXHR7XFxuIDgxMzpcXHRcXHRzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmV0aG5sX2N0eCA9IFxcdTAwMjZjdHgtXFx1MDAzZWV0aG5sX2N0eDtcXG4gODE0OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbiA4MTU6XFx0XFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XFxuIDgxNjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiA4MTc6XFx0XFx0aW50IHJldCA9IDA7XFxuIDgxODpcXHRcXG4gODE5OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gODIwOlxcdFxcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBldGhubF9jdHgtXFx1MDAzZXBvc19pZmluZGV4KSB7XFxuIDgyMTpcXHRcXHRcXHRuZXRkZXZfaG9sZChkZXYsIFxcdTAwMjZkZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA4OjE1LjI4NDUzNzg3NloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjMzNDM4MTExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENhbGwgU3RhY2sqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBldGhubF9kZWZhdWx0X2R1bXBfb25lYCBpcyBiZWluZyBpbnZva2VkLiBSaWdodCBhd2F5LCBteSBicmFpbiBqdW1wcyB0byB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoYXQgZnVuY3Rpb24gZGVmaW5lZCwgYW5kIHdoYXQgaXRzIGxpa2VseSBwdXJwb3NlIG1pZ2h0IGJlIGluIHRoaXMgY29udGV4dC4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZXRobmxfZGVmYXVsdF9kdW1wX29uZWAgaXRzZWxmIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgY2FsbCBzdGFjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGZ1bGx5IHRvIGV2YWx1YXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGludm9jYXRpb24sIGFuZCB3aGVyZSB0aGUgdmFsdWVzIGJlaW5nIHByb2Nlc3NlZCBjb21lIGZyb20uIEkgbmVlZCB0byBleGFtaW5lIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzYyMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6MjcuNjE4OTIyMTIyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODIyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODIyOlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA4MjM6XFx0XFxuIDgyNDpcXHRcXHRcXHQvKiBwZXItUEhZIGNvbW1hbmRzIHVzZSBldGhubF9yZXFfZ2V0X3BoeWRldigpLCB3aGljaCBuZWVkcyB0aGVcXG4gODI1OlxcdFxcdFxcdCAqIG5ldF9kZXZpY2UgaW4gdGhlIHJlcV9pbmZvXFxuIDgyNjpcXHRcXHRcXHQgKi9cXG4gODI3OlxcdFxcdFxcdGV0aG5sX2N0eC1cXHUwMDNlcmVxX2luZm8tXFx1MDAzZWRldiA9IGRldjtcXG4gODI4OlxcdFxcdFxcdHJldCA9IGV0aG5sX3BlcnBoeV9kdW1wX29uZV9kZXYoc2tiLCBjdHgsIGluZm8pO1xcbiA4Mjk6XFx0XFxuIDgzMDpcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDgzMTpcXHRcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmRldl90cmFja2VyKTtcXG4gODMyOlxcdFxcdFxcdGV0aG5sX2N0eC1cXHUwMDNlcmVxX2luZm8tXFx1MDAzZWRldiA9IE5VTEw7XFxuIDgzMzpcXHRcXG4gODM0OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUCkge1xcbiA4MzU6XFx0XFx0XFx0XFx0aWYgKGxpa2VseShza2ItXFx1MDAzZWxlbikpXFxuIDgzNjpcXHRcXHRcXHRcXHRcXHRyZXQgPSBza2ItXFx1MDAzZWxlbjtcXG4gODM3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4Mzg6XFx0XFx0XFx0fVxcbiA4Mzk6XFx0XFx0XFx0cmV0ID0gMDtcXG4gODQwOlxcdFxcdH1cXG4gODQxOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA4NDI6XFx0XFxuIDg0MzpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4NDQ6XFx0fVxcbiA4NDU6XFx0XFxuIDg0NjpcXHQvKiBwZXItUEhZIC1cXHUwMDNlZHVtcGl0KCkgaGFuZGxlciBmb3IgR0VUIHJlcXVlc3RzLiAqL1xcbiA4NDc6XFx0c3RhdGljIGludCBldGhubF9wZXJwaHlfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIDg0ODpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiA4NDk6XFx0e1xcbiA4NTA6XFx0XFx0c3RydWN0IGV0aG5sX3BlcnBoeV9kdW1wX2N0eCAqY3R4ID0gZXRobmxfcGVycGh5X2R1bXBfY29udGV4dChjYik7XFxuIDg1MTpcXHRcXHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xcbiA4NTI6XFx0XFx0c3RydWN0IGV0aG5sX2R1bXBfY3R4ICpldGhubF9jdHggPSBcXHUwMDI2Y3R4LVxcdTAwM2VldGhubF9jdHg7XFxuIDg1MzpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gODU0OlxcdFxcbiA4NTU6XFx0XFx0aWYgKGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbiA4NTY6XFx0XFx0XFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XFxuIDg1NzpcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiA4NTg6XFx0XFxuIDg1OTpcXHRcXHRcXHRkZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4KGdlbmxfaW5mb19uZXQoXFx1MDAyNmluZm8tXFx1MDAzZWluZm8pLFxcbiA4NjA6XFx0XFx0XFx0XFx0XFx0XFx0ICBjdHgtXFx1MDAzZWlmaW5kZXgsIFxcdTAwMjZkZXZfdHJhY2tlcixcXG4gODYxOlxcdFxcdFxcdFxcdFxcdFxcdCAgR0ZQX0tFUk5FTCk7XFxuIDg2MjpcXHRcXHRcXHRpZiAoIWRldilcXG4gODYzOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA4NjQ6XFx0XFxuIDg2NTpcXHRcXHRcXHRldGhubF9jdHgtXFx1MDAzZXJlcV9pbmZvLVxcdTAwM2VkZXYgPSBkZXY7XFxuIDg2NjpcXHRcXHRcXHRyZXQgPSBldGhubF9wZXJwaHlfZHVtcF9vbmVfZGV2KHNrYiwgY3R4LCBnZW5sX2luZm9fZHVtcChjYikpO1xcbiA4Njc6XFx0XFxuIDg2ODpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVPUE5PVFNVUFAgXFx1MDAyNlxcdTAwMjYgbGlrZWx5KHNrYi1cXHUwMDNlbGVuKSlcXG4gODY5OlxcdFxcdFxcdFxcdHJldCA9IHNrYi1cXHUwMDNlbGVuO1xcbiA4NzA6XFx0XFxuIDg3MTpcXHRcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmRldl90cmFja2VyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6MjcuNjE5MTU3NTUyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTMyMzg1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSHVudGluZyBmb3IgYGV0aG5sX2RlZmF1bHRfZHVtcF9vbmVgKipcblxuT2theSwgc28gdGhlIGh1bnQgYmVnaW5zLiBJJ20gbG9va2luZyBmb3IgYGV0aG5sX2RlZmF1bHRfZHVtcF9vbmVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gSXMgdGhpcyBhIGZ1bmN0aW9uLCBhIHZhcmlhYmxlLCBhIG1hY3JvPyBJdHMgbmFtaW5nIGNvbnZlbnRpb24gc3VnZ2VzdHMgYSBmdW5jdGlvbiBvciBwb3RlbnRpYWxseSBhIG1hY3JvLiBUaGUgYGV0aG5sYCBwcmVmaXggaXMgbGlrZWx5IHNvbWUgc29ydCBvZiBtb2R1bGUgb3IgbmFtZXNwYWNlOyBwZXJoYXBzIHJlbGF0ZWQgdG8gRXRoZXJuZXQgb3IgbmV0d29yayBjb25maWd1cmF0aW9uLCBnaXZlbiB0aGUgYG5sYCBmb3IgXCJuZXRsaW5rXCIuIFRoZSBcImRlZmF1bHRcIiBwcm9iYWJseSBoaW50cyBhdCBhIGRlZmF1bHQgb3IgZmFsbGJhY2sgbWVjaGFuaXNtLiBBbmQgXCJkdW1wXFxfb25lXCIuLi4gZGVmaW5pdGVseSBzb3VuZHMgbGlrZSBzb21lIGtpbmQgb2YgZGF0YSByZXRyaWV2YWwsIGxpa2VseSByZWxhdGVkIHRvIGR1bXBpbmcgb3Igb3V0cHV0dGluZyBhIHNpbmdsZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBvciBzdGF0ZS5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgZm9ybWluZyBhIGh5cG90aGVzaXMuIElzIHRoaXMgcmVsYXRlZCB0byBhIHNwZWNpZmljIEV0aGVybmV0IGludGVyZmFjZSdzIGRlZmF1bHQgY29uZmlndXJhdGlvbj8gT3IgcGVyaGFwcyByZWxhdGVkIHRvIGFuIG92ZXJhbGwgc3lzdGVtIGRlZmF1bHQgZm9yIG5ldHdvcmsgaW50ZXJmYWNlcz9cblxuSSdsbCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBjb2RlYmFzZTsgSSBjYW4gdXNlIGdyZXAsIGFjaywgcmlwZ3JlcCwgb3Igc2ltaWxhciB0b29scywgZGVwZW5kaW5nIG9uIHRoZSBzY2FsZSBhbmQgY29tcGxleGl0eSBvZiB0aGUgcHJvamVjdC4gSSdkIHN0YXJ0IHdpdGggYSBicm9hZCBzZWFyY2gsIGxvb2tpbmcgZm9yIHRoZSBleGFjdCBuYW1lLCBhbmQgdmFyaWF0aW9ucyBsaWtlIFwiZXRobmxcIiBhbmQgXCJkdW1wXCIuIEknbGwgYWxzbyBjb25zaWRlciBzZWFyY2hpbmcgZm9yIHJlbGF0ZWQgdGVybXMgbGlrZSBcIm5ldGxpbmtcIiwgXCJldGhlcm5ldFwiLCBcImRlZmF1bHQgY29uZmlndXJhdGlvblwiLCBcImludGVyZmFjZSBkdW1wXCIsIG9yIHNpbWlsYXIuXG5cbkknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBsYW5ndWFnZSBvciBmcmFtZXdvcmsgaGVyZS4gRm9yIGV4YW1wbGUsIGlmIGl0J3Mga2VybmVsIHNwYWNlLCBJIG1pZ2h0IGV4cGVjdCB0byBzZWUgYSBsb3Qgb2YgQyBjb2RlLiBJZiBpdCBpcyB1c2Vyc3BhY2UsIGl0IGNvdWxkIGJlIEMsIEMrKywgUHl0aG9uLCBvciB3aGF0ZXZlciB0aGUgcHJvamVjdCBpcyB1c2luZy4gU28gSSBoYXZlIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gZG9pbmcgdGhlIHNlYXJjaC4gQmFzZWQgb24gdGhlIGxhbmd1YWdlIGFuZCBmcmFtZXdvcmsgdGhlIHNlYXJjaCBtaWdodCBkaWZmZXIgYXMgd2VsbC5cblxuT25jZSBJIGhhdmUgYSBsaXN0IG9mIHBvc3NpYmxlIGxvY2F0aW9ucyBvciB1c2FnZXMsIEknbGwgdGhlbiBkcmlsbCBkb3duIGFuZCByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgd2hhdCBpdCBkb2VzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGNvbXBvbmVudHMsIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCBkb2VzIGluIGRldGFpbC4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHdoZXJlIHRoZSBcImR1bXBcIiBvY2N1cnMsIHdoZW4gaXQncyBjYWxsZWQsIGFuZCB3aG8gY2FsbHMgaXQuIFRoaXMgd2lsbCBoZWxwIG1lIGNvbm5lY3QgdGhlIGRvdHMgYWJvdXQgaXRzIGZ1bmN0aW9uYWxpdHkuIEknbSBleHBlY3RpbmcgdGhpcyB3aWxsIGludm9sdmUgbmV0d29yayBjb25maWd1cmF0aW9uIHN0cnVjdHVyZXMsIHNvY2tldCBjYWxscywgbmV0bGluayBtZXNzYWdlcywgYW5kIHBvdGVudGlhbGx5IHNvbWUgZm9ybSBvZiBzdGF0ZSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDYxNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6MzQuNzcyMzk5NDU5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDA0NzgwOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXRobmxfZGVmYXVsdF9kdW1wX29uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZXRodG9vbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2V0aHRvb2wvbmV0bGluay5jPTUwOT1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTU5NS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NTk2OnN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9kdW1wX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy01OTctXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmN0eCxcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYz02NDA9c3RhdGljIGludCBldGhubF9kZWZhdWx0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTY1My1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NjU0OlxcdFxcdHJldCA9IGV0aG5sX2RlZmF1bHRfZHVtcF9vbmUoc2tiLCBkZXYsIGN0eCwgZ2VubF9pbmZvX2R1bXAoY2IpKTtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNjU1LVxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jPTc3OT1zdGF0aWMgaW50IGV0aG5sX3BlcnBoeV9kdW1wX29uZV9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy03OTgtXFx0XFx0ICovXFxubmV0L2V0aHRvb2wvbmV0bGluay5jOjc5OTpcXHRcXHRyZXQgPSBldGhubF9kZWZhdWx0X2R1bXBfb25lKHNrYiwgZGV2LCBldGhubF9jdHgsIGluZm8pO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYy04MDAtXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6MzUuMDcyODgzMzI3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTA4MzI5NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGBldGhubF9kZWZhdWx0X2R1bXBfb25lYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJ1c2luZXNzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBgZXRobmxfZGVmYXVsdF9kdW1wX29uZWAuIEknbSBhc3N1bWluZyBmcm9tIHRoZSBuYW1pbmcgY29udmVudGlvbiB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgZGVmYXVsdCBkdW1wLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGV0aG5pYyBuZXR3b3JrIChldGhubCkgY29uZmlndXJhdGlvbnMgb3IgZGF0YS4gVGhlIFwib25lXCIgYXQgdGhlIGVuZCBzdWdnZXN0cyBhIHByaW1hcnkgb3IgYmFzZSBjb25maWd1cmF0aW9uLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHZhcmlvdXMgcG90ZW50aWFsIGNvbnRleHRzOiBpcyB0aGlzIGEgc3BlY2lmaWMgbmV0d29yayBwYXJhbWV0ZXIgZHVtcD8gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBhIHBhcnRpY3VsYXIgZGV2aWNlIG9yIHN5c3RlbSByZWxhdGVkIHRvIGV0aG5sPyBPciBwZXJoYXBzIGl0J3MgYSBzbmFwc2hvdCBvZiB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIGV0aG5sIGludGVyZmFjZSBpdHNlbGY/XG5cbkknbSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZmlsZSB0aGF0IGNvdWxkIGNvbnRhaW4gYW55dGhpbmcgZnJvbSBiYXNpYyBNQUMgYWRkcmVzcyBhc3NpZ25tZW50cyBhbmQgTVRVIHNpemVzIHRvIG1vcmUgY29tcGxleCByb3V0aW5nIGluZm9ybWF0aW9uLCBWTEFOIGNvbmZpZ3VyYXRpb25zLCBvciBldmVuIHNlY3VyaXR5IHNldHRpbmdzIHJlbGF0ZWQgdG8gdGhlIGV0aG5sIHByb3RvY29scy4gTXkgZm9jdXMgd2lsbCBiZSBvbiBxdWlja2x5IGlkZW50aWZ5aW5nIHRoZSBrZXkgZWxlbWVudHMgYW5kIGFzc2Vzc2luZyB0aGVpciBpbXBsaWNhdGlvbnMsIGFzIHdlbGwgYXMgbG9va2luZyBmb3IgYW55IG9idmlvdXMgZGV2aWF0aW9ucyBmcm9tIHN0YW5kYXJkIHByYWN0aWNlLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIHRoYXQgY291bGQgc3VnZ2VzdCB1bmRlcmx5aW5nIGFzc3VtcHRpb25zIG9yIGhhcmRjb2RlZCB2YWx1ZXMuIE15IGdvYWwgaXMgdG8gcmFwaWRseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgdGhlIGxpa2VseSBwdXJwb3NlIG9mIHRoaXMgZHVtcC4gTm93LCBsZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTI0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6MzkuMTYzNzE4OTc3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9ldGh0b29sL25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTYsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1OTY6XFx0c3RhdGljIGludCBldGhubF9kZWZhdWx0X2R1bXBfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDU5NzpcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBldGhubF9kdW1wX2N0eCAqY3R4LFxcbiA1OTg6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiA1OTk6XFx0e1xcbiA2MDA6XFx0XFx0Ym9vbCBuZWVkX3J0bmw7XFxuIDYwMTpcXHRcXHR2b2lkICplaGRyO1xcbiA2MDI6XFx0XFx0aW50IHJldDtcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0XFx0ZWhkciA9IGdlbmxtc2dfcHV0KHNrYiwgaW5mby1cXHUwMDNlc25kX3BvcnRpZCwgaW5mby1cXHUwMDNlc25kX3NlcSxcXG4gNjA1OlxcdFxcdFxcdFxcdCAgIFxcdTAwMjZldGh0b29sX2dlbmxfZmFtaWx5LCBOTE1fRl9NVUxUSSxcXG4gNjA2OlxcdFxcdFxcdFxcdCAgIGN0eC1cXHUwMDNlb3BzLVxcdTAwM2VyZXBseV9jbWQpO1xcbiA2MDc6XFx0XFx0aWYgKCFlaGRyKVxcbiA2MDg6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gNjA5OlxcdFxcbiA2MTA6XFx0XFx0ZXRobmxfaW5pdF9yZXBseV9kYXRhKGN0eC1cXHUwMDNlcmVwbHlfZGF0YSwgY3R4LVxcdTAwM2VvcHMsIGRldik7XFxuIDYxMTpcXHRcXHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSB8fFxcbiA2MTI6XFx0XFx0XFx0ICAgIGV0aHRvb2xfbmxfbXNnX25lZWRzX3J0bmwoZGV2LCBjdHgtXFx1MDAzZW9wcy1cXHUwMDNlcmVxdWVzdF9jbWQpO1xcbiA2MTM6XFx0XFx0aWYgKG5lZWRfcnRubClcXG4gNjE0OlxcdFxcdFxcdHJ0bmxfbG9jaygpO1xcbiA2MTU6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxuIDYxNjpcXHRcXHRyZXQgPSBjdHgtXFx1MDAzZW9wcy1cXHUwMDNlcHJlcGFyZV9kYXRhKGN0eC1cXHUwMDNlcmVxX2luZm8sIGN0eC1cXHUwMDNlcmVwbHlfZGF0YSwgaW5mbyk7XFxuIDYxNzpcXHRcXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbiA2MTg6XFx0XFx0aWYgKG5lZWRfcnRubClcXG4gNjE5OlxcdFxcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuIDYyMDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNjIxOlxcdFxcdFxcdGdvdG8gb3V0X2NhbmNlbDtcXG4gNjIyOlxcdFxcdHJldCA9IGV0aG5sX2ZpbGxfcmVwbHlfaGVhZGVyKHNrYiwgZGV2LCBjdHgtXFx1MDAzZW9wcy1cXHUwMDNlaGRyX2F0dHIpO1xcbiA2MjM6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDYyNDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNjI1OlxcdFxcdHJldCA9IGN0eC1cXHUwMDNlb3BzLVxcdTAwM2VmaWxsX3JlcGx5KHNrYiwgY3R4LVxcdTAwM2VyZXFfaW5mbywgY3R4LVxcdTAwM2VyZXBseV9kYXRhKTtcXG4gNjI2OlxcdFxcbiA2Mjc6XFx0b3V0OlxcbiA2Mjg6XFx0XFx0aWYgKGN0eC1cXHUwMDNlb3BzLVxcdTAwM2VjbGVhbnVwX2RhdGEpXFxuIDYyOTpcXHRcXHRcXHRjdHgtXFx1MDAzZW9wcy1cXHUwMDNlY2xlYW51cF9kYXRhKGN0eC1cXHUwMDNlcmVwbHlfZGF0YSk7XFxuIDYzMDpcXHRvdXRfY2FuY2VsOlxcbiA2MzE6XFx0XFx0Y3R4LVxcdTAwM2VyZXBseV9kYXRhLVxcdTAwM2VkZXYgPSBOVUxMO1xcbiA2MzI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDYzMzpcXHRcXHRcXHRnZW5sbXNnX2NhbmNlbChza2IsIGVoZHIpO1xcbiA2MzQ6XFx0XFx0ZWxzZVxcbiA2MzU6XFx0XFx0XFx0Z2VubG1zZ19lbmQoc2tiLCBlaGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6MzkuMTYzODE4NTM3WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjYyNzAyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRG91YmxlLUNoZWNraW5nIHRoZSBEYXRhIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIG5vdGljaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gVGhlIGNhbGwgdG8gYGV0aG5sX2luaXRfcmVwbHlfZGF0YShjdHgtXHUwMDNlcmVwbHlfZGF0YSwgY3R4LVx1MDAzZW9wcywgZGV2KTtgIHBvcHMgdXAgaW4gYGV0aG5sX2RlZmF1bHRfZHVtcF9vbmVgIHRvbywgbm90IGp1c3QgaW4gdGhlIGBkb2l0YCBwYXRoLiBSaWdodCwgYW5kIGVhcmxpZXIgd2UgdmVyaWZpZWQgdGhhdCBgZXRobmxfaW5pdF9yZXBseV9kYXRhYCBpbmNsdWRlcyBhIGBtZW1zZXQocmVwbHlfZGF0YSwgMCwgb3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSk7YC4gVGhhdCBgbWVtc2V0YCBpcyBjcml0aWNhbCFcblxuU28sIHRoZSBgcmVwbHlfZGF0YWAgYnVmZmVyIGlzIGRlZmluaXRlbHkgZ2V0dGluZyB6ZXJvZWQgb3V0ICpiZWZvcmUqIGBwcmVwYXJlX2RhdGFgIGdldHMgY2FsbGVkLiBUaGlzIGhvbGRzIHRydWUgZm9yIGJvdGggdGhlIGBkb2l0YCBhbmQgYGR1bXBpdGAgZXhlY3V0aW9uIHBhdGhzLiBJdCdzIGdvb2QgdGhhdCB3ZSdyZSBjb3ZlcmluZyBvdXIgYmFzZXMuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYmFjayBhdCB0aGUgYGV0aG5sX2luaXRfcmVwbHlfZGF0YWAgZnVuY3Rpb24gaXRzZWxmLiBBbHdheXMgd29ydGggYSBkb3VibGUtY2hlY2sgb24gaW5pdGlhbGl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTU0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6NDMuNTkwMDkyMzJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9ldGh0b29sL25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MDA6XFx0c3RhdGljIHZvaWQgZXRobmxfaW5pdF9yZXBseV9kYXRhKHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhLFxcbiA1MDE6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgKm9wcyxcXG4gNTAyOlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gNTAzOlxcdHtcXG4gNTA0OlxcdFxcdG1lbXNldChyZXBseV9kYXRhLCAwLCBvcHMtXFx1MDAzZXJlcGx5X2RhdGFfc2l6ZSk7XFxuIDUwNTpcXHRcXHRyZXBseV9kYXRhLVxcdTAwM2VkZXYgPSBkZXY7XFxuIDUwNjpcXHR9XFxuIDUwNzpcXHRcXG4gNTA4OlxcdC8qIGRlZmF1bHQgLVxcdTAwM2Vkb2l0KCkgaGFuZGxlciBmb3IgR0VUIHR5cGUgcmVxdWVzdHMgKi9cXG4gNTA5OlxcdHN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA4OjQzLjU5MDIwNDU3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxODg5ODM1Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlN1bW1hcnkgb2YgdGhlIENvZGUgUmV2aWV3KipcblxuT2theSwgc28gSSd2ZSBnb25lIHRocm91Z2ggdGhpcyBwYXRjaCB3aXRoIGEgZmluZS10b290aCBjb21iLCBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gdGhlIG5ldyBldGh0b29sIG5ldGxpbmsgZnVuY3Rpb25hbGl0eS4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBhYm91dCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLiBIb3dldmVyLCBhZnRlciBjYXJlZnVsbHkgdHJhY2luZyB0aGUgY29kZSBleGVjdXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHBhdGhzLCBJJ20gY29uZmlkZW50IHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzLlxuXG5IZXJlJ3MgbXkgcmVhc29uaW5nLiBGaXJzdCwgSSBjb25maXJtZWQgdGhhdCB0aGUgcHJpbWFyeSBgcmVwbHlfZGF0YWAgc3RydWN0dXJlIHVzZWQgZm9yIGJvdGggYElOVEZfQ0FQU19HRVRgIGFuZCBgUEhZX1RFU1RfR0VUYCBpcyBhbHdheXMgemVyb2VkIG91dCBiZWZvcmUgdGhlIGRyaXZlcidzIGBnZXRfaW50Zl9jYXBzYCBhbmQgYGdldF9waHlfdGVzdGAgY2FsbGJhY2tzIGFyZSBpbnZva2VkLiBUaGUgYGV0aG5sX2luaXRfcmVwbHlfZGF0YWAgZnVuY3Rpb24sIHdoaWNoIGlzIGNhbGxlZCBpbiBtdWx0aXBsZSBwbGFjZXMsIGV4cGxpY2l0bHkgdXNlcyBgbWVtc2V0YCB0byB6ZXJvIHRoZSBlbnRpcmUgYWxsb2NhdGVkIG1lbW9yeSByZWdpb24gKGBvcHMtXHUwMDNlcmVwbHlfZGF0YV9zaXplYCkuIFRoaXMgaW5jbHVkZXMgYWxsIGZpZWxkcyB3aXRoaW4gc3RydWN0dXJlcyBsaWtlIGBzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGFgIGFuZCBgc3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzYC4gVGhpcyBtZWFucyB0aGF0IGV2ZW4gaWYgdGhlIGRyaXZlciAqZmFpbHMqIHRvIGluaXRpYWxpemUgYSBzcGVjaWZpYyBmaWVsZCwgaXQgd2lsbCBkZWZhdWx0IHRvIHplcm8uXG5cbkkgdGhlbiByZXZpc2l0ZWQgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YWAgd2hpY2ggSSBmb3VuZCBoYXMgYW4gZXh0cmEgYG1lbXNldGAgY2FsbCwgYW5kIHdoaWNoIGNhbiBiZSByZWR1bmRhbnQsIGJ1dCBkb2Vzbid0IGNhdXNlIGFueSBpc3N1ZXMgYXMgaXQgZ3VhcmFudGVlcyB0aGUgc3RydWN0IGlzIGluZGVlZCB6ZXJvZWQuIEkgYWxzbyByZXZpZXdlZCBgZXRobmxfYWN0X3BoeV90ZXN0YCB3aGljaCBkZWZpbmVzIGB0ZXN0ID0ge31gLCB3aGljaCBhbHNvIGd1YXJhbnRlZXMgdGhlIHN0cnVjdCBpcyB6ZXJvZWQuIEFsc28gYW55IGxvY2FsIG9yIHN0YXRpY2FsbHkgZGVmaW5lZCBzdHJ1Y3RzIGFyZSBpbml0aWFsaXplZCB0byB6ZXJvLlxuXG5UaGUgY29kZSB1c2VzIGluZGl2aWR1YWwgYG5sYV9wdXRfKmAgZnVuY3Rpb25zIChlLmcuLCBgbmxhX3B1dF91MzJgLCBgbmxhX3B1dF9zdHJpbmdgLCBgbmxhX3B1dF9mbGFnYCwgYW5kIGBubGFfcHV0X3U2NF82NGJpdGApIHRvIHNlcmlhbGl6ZSB0aGUgZGF0YSBpbnRvIG5ldGxpbmsgbWVzc2FnZXMuIFRoZXNlIGZ1bmN0aW9ucyBkZWFsIHdpdGggY29weWluZyB0aGUgdmFsdWUgb2YgaW5kaXZpZHVhbCBmaWVsZHMsIG5vdCB0aGUgZW50aXJlIHN0cnVjdC4gVGhpcyBpcyBpbXBvcnRhbnQ6IGV2ZW4gaWYgdGhlcmUgYXJlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyB3aXRoaW4gYSBzdHJ1Y3QsIHRoZXNlIHBhZGRpbmcgYnl0ZXMgd291bGQgbm90IGJlIGNvcGllZCBpbnRvIHRoZSBuZXRsaW5rIG1lc3NhZ2UuIFRoZSBmdW5jdGlvbnMgY29weSB0aGUgYWN0dWFsIGRhdGEgZmllbGRzIG9ubHkuXG5cbkkgYWxzbyBsb29rZWQgYXQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzLiBUaGlzIGNhbiBvY2N1ciwgZm9yIGluc3RhbmNlLCBpZiB0aGUgZHJpdmVyIHNldHMgYW4gaW52YWxpZCBgbnVtX2Jsb2Nrc2AgdmFsdWUsIHNvIHRoYXQgYSBsb29wIGluIGEgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiBnb2VzIHBhc3QgdGhlIHZhbGlkIGJsb2NrIHJhbmdlLiBUaGF0IHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi5cblxuSSBkaWQgaWRlbnRpZnkgYSBsb2dpYyBidWcgd2l0aGluIGBpbnRmX2NhcHNfZmlsbF9yZXBseWAsIHdoZXJlIGFuIHVuY29uZGl0aW9uYWwgYGdvdG8gbmxhX3B1dF9mYWlsdXJlO2AgaXMgcHJlc2VudC4gSG93ZXZlciwgdGhpcyBpcyBhIGNvZGUgYnVnIHRoYXQgd2lsbCBjYXVzZSB0aGUgZnVuY3Rpb24gdG8gYWx3YXlzIGZhaWwuIEJ1dCwgY3J1Y2lhbGx5LCBpdCdzIG5vdCBhIG1lbW9yeSBzYWZldHkgaXNzdWUuIFRoZSBuZXRsaW5rIG1lc3NhZ2Ugd291bGQgYmUgY2FuY2VsZWQsIHNvIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdvdWxkIGJlIGV4cG9zZWQuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwbGljaXRseSB6ZXJvZWQgYmVmb3JlIHVzZSwgYW5kIGRhdGEgZmllbGRzIGFyZSBpbmRpdmlkdWFsbHkgc2VyaWFsaXplZCBpbnRvIG5ldGxpbmsgbWVzc2FnZXMsIGFuZCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlzIGNhdWdodCBieSBLQVNBTiwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEkgY29uY2x1ZGUgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYCBmb3IgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxMTgsIk91dHB1dFRva2VucyI6Mzc3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjEwOjA1LjQ4MDA0MjYwM1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmRzIChgSU5URl9DQVBTX0dFVGAsIGBQSFlfVEVTVF9HRVRgLCBgUEhZX1RFU1RfQUNUYCkgdG8gcXVlcnkgaW50ZXJmYWNlIGNhcGFiaWxpdGllcyBhbmQgY29uZmlndXJlIFBIWSB0ZXN0cy4gVGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgZXRodG9vbCBjb3JlIGFuZCB0aGUgZHJpdmVycyAoYHN0cnVjdCBldGh0b29sX2ludGZfY2Fwc2AgYW5kIGBzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdGApIGFyZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkuXFxuXFxuSG93ZXZlciwgdGhlIGV0aHRvb2wgbmV0bGluayBmcmFtZXdvcmsgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVzIHRoZSByZXBseSBkYXRhIHN0cnVjdHVyZXMgdmlhIGBldGhubF9pbml0X3JlcGx5X2RhdGEoKWAgKHdoaWNoIGNhbGxzIGBtZW1zZXQocmVwbHlfZGF0YSwgMCwgb3BzLVxcdTAwM2VyZXBseV9kYXRhX3NpemUpYCkgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUgZHJpdmVyIGNhbGxiYWNrcyAoZS5nLiwgYGdldF9pbnRmX2NhcHNgKS4gU2ltaWxhcmx5LCBgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhKClgIGV4cGxpY2l0bHkgY2FsbHMgYG1lbXNldChcXHUwMDI2ZGF0YS1cXHUwMDNldGVzdCwgMCwgc2l6ZW9mKGRhdGEtXFx1MDAzZXRlc3QpKWAsIGFuZCBgZXRobmxfYWN0X3BoeV90ZXN0KClgIGluaXRpYWxpemVzIGl0cyBsb2NhbCBzdHJ1Y3Qgd2l0aCBgPSB7fWAuXFxuXFxuQmVjYXVzZSBhbGwgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCBiZWZvcmUgdXNlLCB0aGVyZSBpcyBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgb3IgaGVhcCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgZXZlbiBpZiBhIGRyaXZlciBmYWlscyB0byBwb3B1bGF0ZSBhbGwgZmllbGRzLiBGdXJ0aGVybW9yZSwgdGhlIG5ldGxpbmsgcmVzcG9uc2UgaXMgY29uc3RydWN0ZWQgYnkgc2VyaWFsaXppbmcgaW5kaXZpZHVhbCBmaWVsZHMgdXNpbmcgYG5sYV9wdXRfdTMyYCwgYG5sYV9wdXRfc3RyaW5nYCwgZXRjLiwgcmF0aGVyIHRoYW4gY29weWluZyByYXcgc3RydWN0cywgd2hpY2ggaW5oZXJlbnRseSBhdm9pZHMgbGVha2luZyBzdHJ1Y3QgcGFkZGluZy5cXG5cXG5BbnkgcG90ZW50aWFsIGlzc3Vlcywgc3VjaCBhcyBhIGRyaXZlciB3cml0aW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGJsb2Nrc2AgYXJyYXkgb3IgcmV0dXJuaW5nIGFuIGludmFsaWQgYG51bV9ibG9ja3NgIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyByZWFkcywgd291bGQgYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmRzIChgSU5URl9DQVBTX0dFVGAsIGBQSFlfVEVTVF9HRVRgLCBgUEhZX1RFU1RfQUNUYCkgdG8gcXVlcnkgaW50ZXJmYWNlIGNhcGFiaWxpdGllcyBhbmQgY29uZmlndXJlIFBIWSB0ZXN0cy4gVGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgZXRodG9vbCBjb3JlIGFuZCB0aGUgZHJpdmVycyAoYHN0cnVjdCBldGh0b29sX2ludGZfY2Fwc2AgYW5kIGBzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdGApIGFyZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkuXFxuXFxuSG93ZXZlciwgdGhlIGV0aHRvb2wgbmV0bGluayBmcmFtZXdvcmsgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVzIHRoZSByZXBseSBkYXRhIHN0cnVjdHVyZXMgdmlhIGBldGhubF9pbml0X3JlcGx5X2RhdGEoKWAgKHdoaWNoIGNhbGxzIGBtZW1zZXQocmVwbHlfZGF0YSwgMCwgb3BzLVxcdTAwM2VyZXBseV9kYXRhX3NpemUpYCkgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUgZHJpdmVyIGNhbGxiYWNrcyAoZS5nLiwgYGdldF9pbnRmX2NhcHNgKS4gU2ltaWxhcmx5LCBgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhKClgIGV4cGxpY2l0bHkgY2FsbHMgYG1lbXNldChcXHUwMDI2ZGF0YS1cXHUwMDNldGVzdCwgMCwgc2l6ZW9mKGRhdGEtXFx1MDAzZXRlc3QpKWAsIGFuZCBgZXRobmxfYWN0X3BoeV90ZXN0KClgIGluaXRpYWxpemVzIGl0cyBsb2NhbCBzdHJ1Y3Qgd2l0aCBgPSB7fWAuXFxuXFxuQmVjYXVzZSBhbGwgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCBiZWZvcmUgdXNlLCB0aGVyZSBpcyBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgb3IgaGVhcCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgZXZlbiBpZiBhIGRyaXZlciBmYWlscyB0byBwb3B1bGF0ZSBhbGwgZmllbGRzLiBGdXJ0aGVybW9yZSwgdGhlIG5ldGxpbmsgcmVzcG9uc2UgaXMgY29uc3RydWN0ZWQgYnkgc2VyaWFsaXppbmcgaW5kaXZpZHVhbCBmaWVsZHMgdXNpbmcgYG5sYV9wdXRfdTMyYCwgYG5sYV9wdXRfc3RyaW5nYCwgZXRjLiwgcmF0aGVyIHRoYW4gY29weWluZyByYXcgc3RydWN0cywgd2hpY2ggaW5oZXJlbnRseSBhdm9pZHMgbGVha2luZyBzdHJ1Y3QgcGFkZGluZy5cXG5cXG5BbnkgcG90ZW50aWFsIGlzc3Vlcywgc3VjaCBhcyBhIGRyaXZlciB3cml0aW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGJsb2Nrc2AgYXJyYXkgb3IgcmV0dXJuaW5nIGFuIGludmFsaWQgYG51bV9ibG9ja3NgIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyByZWFkcywgd291bGQgYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowdhldv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 04:52:36 +0000 UTC FinishedAt: 2026-08-25 05:10:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ETHTOOL_NETLINK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ETHTOOL_NETLINK" ], "series_id": "9efbd7b1-620a-4f70-9c56-1f5773c6efd6" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ethnl_act_phy_test" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VUSFRPT0xfTkVUTElOSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V0aG5sX2FjdF9waHlfdGVzdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kcyAoYElOVEZfQ0FQU19HRVRgLCBgUEhZX1RFU1RfR0VUYCwgYFBIWV9URVNUX0FDVGApIHRvIHF1ZXJ5IGludGVyZmFjZSBjYXBhYmlsaXRpZXMgYW5kIGNvbmZpZ3VyZSBQSFkgdGVzdHMuIFRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGJldHdlZW4gdGhlIGV0aHRvb2wgY29yZSBhbmQgdGhlIGRyaXZlcnMgKGBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHNgIGFuZCBgc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3RgKSBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5LlxuXG5Ib3dldmVyLCB0aGUgZXRodG9vbCBuZXRsaW5rIGZyYW1ld29yayBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZXMgdGhlIHJlcGx5IGRhdGEgc3RydWN0dXJlcyB2aWEgYGV0aG5sX2luaXRfcmVwbHlfZGF0YSgpYCAod2hpY2ggY2FsbHMgYG1lbXNldChyZXBseV9kYXRhLCAwLCBvcHMtXHUwMDNlcmVwbHlfZGF0YV9zaXplKWApIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlIGRyaXZlciBjYWxsYmFja3MgKGUuZy4sIGBnZXRfaW50Zl9jYXBzYCkuIFNpbWlsYXJseSwgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YSgpYCBleHBsaWNpdGx5IGNhbGxzIGBtZW1zZXQoXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0LCAwLCBzaXplb2YoZGF0YS1cdTAwM2V0ZXN0KSlgLCBhbmQgYGV0aG5sX2FjdF9waHlfdGVzdCgpYCBpbml0aWFsaXplcyBpdHMgbG9jYWwgc3RydWN0IHdpdGggYD0ge31gLlxuXG5CZWNhdXNlIGFsbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSB1c2UsIHRoZXJlIGlzIG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBvciBoZWFwIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBldmVuIGlmIGEgZHJpdmVyIGZhaWxzIHRvIHBvcHVsYXRlIGFsbCBmaWVsZHMuIEZ1cnRoZXJtb3JlLCB0aGUgbmV0bGluayByZXNwb25zZSBpcyBjb25zdHJ1Y3RlZCBieSBzZXJpYWxpemluZyBpbmRpdmlkdWFsIGZpZWxkcyB1c2luZyBgbmxhX3B1dF91MzJgLCBgbmxhX3B1dF9zdHJpbmdgLCBldGMuLCByYXRoZXIgdGhhbiBjb3B5aW5nIHJhdyBzdHJ1Y3RzLCB3aGljaCBpbmhlcmVudGx5IGF2b2lkcyBsZWFraW5nIHN0cnVjdCBwYWRkaW5nLlxuXG5BbnkgcG90ZW50aWFsIGlzc3Vlcywgc3VjaCBhcyBhIGRyaXZlciB3cml0aW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGJsb2Nrc2AgYXJyYXkgb3IgcmV0dXJuaW5nIGFuIGludmFsaWQgYG51bV9ibG9ja3NgIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyByZWFkcywgd291bGQgYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbmV3IGV0aHRvb2wgbmV0bGluayBtZXNzYWdlcyAoRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVCwgRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULCBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QpIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljaWVzLiBFdmVuIHRob3VnaCBubyBkcml2ZXJzIGN1cnJlbnRseSBpbXBsZW1lbnQgdGhlIHVuZGVybHlpbmcgZXRodG9vbCBvcGVyYXRpb25zLCB0aGUgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcsIHBvbGljeSB2YWxpZGF0aW9uLCBhbmQgaW5pdGlhbCBoYW5kbGVyIGZ1bmN0aW9ucyAobGlrZSBldGhubF9hY3RfcGh5X3Rlc3QpIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyLXNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDUwNmRkMTA4NjM4ZTVkNzdkMjNmMzBlZmRmMmNmN2ZhODZkZWU5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDA1OjA2OjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5pbmRleCA1ZGQ0ZDFiNWQ5NGJiLi4zNjFlYjNjNjY1NzcwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuQEAgLTIxMCw2ICYjNDM7MjEwLDU1IEBAIGRlZmluaXRpb25zOlxuICAgICAgIC1cbiAgICAgICAgIG5hbWU6IGRpc2NhcmRcbiAgICAgICAgIHZhbHVlOiAzMVxuJiM0MzsgIC1cbiYjNDM7ICAgIG5hbWU6IGludGYtY29tcG9uZW50XG4mIzQzOyAgICB0eXBlOiBlbnVtXG4mIzQzOyAgICBkb2M6IFR5cGUgb2YgaGFyZHdhcmUgY29tcG9uZW50IGluIHRoZSBpbnRlcmZhY2UuXG4mIzQzOyAgICBlbnRyaWVzOlxuJiM0MzsgICAgICAtIG1hY1xuJiM0MzsgICAgICAtIHBoeVxuJiM0MzsgICAgICAtIG1vZHVsZVxuJiM0MzsgIC1cbiYjNDM7ICAgIG5hbWU6IGludGYtc3VibGF5ZXJcbiYjNDM7ICAgIHR5cGU6IGVudW1cbiYjNDM7ICAgIGRvYzogODAyLjMgc3VibGF5ZXIgd2l0aGluIGEgY29tcG9uZW50LlxuJiM0MzsgICAgZW50cmllczpcbiYjNDM7ICAgICAgLSBub25lXG4mIzQzOyAgICAgIC0gcnNcbiYjNDM7ICAgICAgLSBwY3NcbiYjNDM7ICAgICAgLSBmZWNcbiYjNDM7ICAgICAgLSBwbWFcbiYjNDM7ICAgICAgLSBwbWRcbiYjNDM7ICAtXG4mIzQzOyAgICBuYW1lOiBwaHktdGVzdC1wYXR0ZXJuXG4mIzQzOyAgICB0eXBlOiBlbnVtXG4mIzQzOyAgICBkb2M6IFBIWSB0ZXN0IHBhdHRlcm4gdHlwZXMgZm9yIFBSQlMgZ2VuZXJhdGlvbi9jaGVja2luZy5cbiYjNDM7ICAgIGVudHJpZXM6XG4mIzQzOyAgICAgIC0gb2ZmXG4mIzQzOyAgICAgIC0gcHJiczdcbiYjNDM7ICAgICAgLSBwcmJzOVxuJiM0MzsgICAgICAtIHByYnMxMVxuJiM0MzsgICAgICAtIHByYnMxM1xuJiM0MzsgICAgICAtIHByYnMxNVxuJiM0MzsgICAgICAtIHByYnMyM1xuJiM0MzsgICAgICAtIHByYnMzMVxuJiM0MzsgICAgICAtIHNzcHJxXG4mIzQzOyAgICAgIC0gcHJiczEzcVxuJiM0MzsgICAgICAtIHByYnMzMXFcbiYjNDM7ICAgICAgLSBzcXVhcmUtbnJ6XG4mIzQzOyAgICAgIC0gc3F1YXJlLXBhbTRcbiYjNDM7ICAgICAgLSB0eC1saW5lYXJpdHlcbiYjNDM7ICAgICAgLSBzY3JhbWJsZWQtaWRsZVxuJiM0MzsgICAgICAtIGsyOC01XG4mIzQzOyAgICAgIC0gazI4LTdcbiYjNDM7ICAtXG4mIzQzOyAgICBuYW1lOiBwaHktdGVzdC1hY3Rpb25cbiYjNDM7ICAgIHR5cGU6IGVudW1cbiYjNDM7ICAgIGRvYzogQkVSVCBjb250cm9sIGFjdGlvbnMuXG4mIzQzOyAgICBlbnRyaWVzOlxuJiM0MzsgICAgICAtIG5vbmVcbiYjNDM7ICAgICAgLSBzdGFydFxuJiM0MzsgICAgICAtIHN0b3BcbiBcbiBhdHRyaWJ1dGUtc2V0czpcbiAgIC1cbkBAIC0xOTA1LDYgJiM0MzsxOTU0LDExNSBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIG5hbWU6IGxpbmtcbiAgICAgICAgIHR5cGU6IG5lc3RcbiAgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBtc2Utc25hcHNob3RcbiYjNDM7ICAtXG4mIzQzOyAgICBuYW1lOiBpbnRmLWJsb2NrXG4mIzQzOyAgICBkb2M6IEEgc2luZ2xlIGZ1bmN0aW9uYWwgYmxvY2sgaW4gdGhlIGludGVyZmFjZS5cbiYjNDM7ICAgIGF0dHJpYnV0ZXM6XG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBpZFxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogY29tcG9uZW50XG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgICAgZW51bTogaW50Zi1jb21wb25lbnRcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHN1YmxheWVyXG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgICAgZW51bTogaW50Zi1zdWJsYXllclxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogaW5zdGFuY2VcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBkb2M6IHxcbiYjNDM7ICAgICAgICAgIElkZW50aWZpZXMgdGhlIGhhcmR3YXJlIGVudGl0eSB3aGVuIG11bHRpcGxlIGluc3RhbmNlcyBvZlxuJiM0MzsgICAgICAgICAgdGhlIHNhbWUgY29tcG9uZW50IGV4aXN0IGluIHRoZSBpbnRlcmZhY2UuIFRoZSBkcml2ZXJcbiYjNDM7ICAgICAgICAgIGFzc2lnbnMgaW5zdGFuY2UgbnVtYmVycyBzZXF1ZW50aWFsbHkgYmFzZWQgb24gcG9zaXRpb24gaW5cbiYjNDM7ICAgICAgICAgIHRoZSBwaHlzaWNhbCBwYXRoLiBEZWZhdWx0cyB0byAwIHdoZW4gb25seSBvbmUgaW5zdGFuY2Ugb2ZcbiYjNDM7ICAgICAgICAgIGEgZ2l2ZW4gY29tcG9uZW50IGV4aXN0cy5cbiYjNDM7ICAgICAgICAgIEZvciBQSFk6IGluc3RhbmNlIDAgaXMgdGhlIGludGVybmFsL2hvc3Qtc2lkZSBQSFksXG4mIzQzOyAgICAgICAgICBpbnN0YW5jZSAxIGlzIGFuIGV4dGVybmFsIFBIWSBmdXJ0aGVyIGFsb25nIHRoZSBwYXRoXG4mIzQzOyAgICAgICAgICB0b3dhcmQgdGhlIGxpbmUgc2lkZS5cbiYjNDM7ICAgICAgICAgIEZvciBNQUM6IGluc3RhbmNlIDAgaXMgdGhlIGhvc3QtZmFjaW5nIE1BQywgaW5zdGFuY2UgMSBpc1xuJiM0MzsgICAgICAgICAgYSBzZWNvbmRhcnkgTUFDIGZ1cnRoZXIgYWxvbmcgdGhlIGRhdGEgcGF0aCAoZS5nLiwgYmVoaW5kXG4mIzQzOyAgICAgICAgICBhbiBlbWJlZGRlZCBzd2l0Y2gpLlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogbmFtZVxuJiM0MzsgICAgICAgIHR5cGU6IHN0cmluZ1xuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogZGVwdGhcbiYjNDM7ICAgICAgICB0eXBlOiB1OFxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogbGFuZXNcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGxvb3BiYWNrLXN1cHBvcnRlZFxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogc3VwcG9ydGVkLXR4LXBhdHRlcm5zXG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBzdXBwb3J0ZWQtcngtcGF0dGVybnNcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGVycm9yLWluamVjdC1zdXBwb3J0ZWRcbiYjNDM7ICAgICAgICB0eXBlOiBmbGFnXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBiZXJ0LXN1cHBvcnRlZFxuJiM0MzsgICAgICAgIHR5cGU6IGZsYWdcbiYjNDM7ICAtXG4mIzQzOyAgICBuYW1lOiBpbnRmLWNhcHNcbiYjNDM7ICAgIGRvYzogSW50ZXJmYWNlIGNhcGFiaWxpdGllcyBtZXNzYWdlLlxuJiM0MzsgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGhlYWRlclxuJiM0MzsgICAgICAgIHR5cGU6IG5lc3RcbiYjNDM7ICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogaGVhZGVyXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBibG9ja3NcbiYjNDM7ICAgICAgICB0eXBlOiBuZXN0XG4mIzQzOyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGludGYtYmxvY2tcbiYjNDM7ICAgICAgICBtdWx0aS1hdHRyOiB0cnVlXG4mIzQzOyAgLVxuJiM0MzsgICAgbmFtZTogcGh5LXRlc3RcbiYjNDM7ICAgIGRvYzogUEhZIHRlc3QgY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzLlxuJiM0MzsgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGhlYWRlclxuJiM0MzsgICAgICAgIHR5cGU6IG5lc3RcbiYjNDM7ICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogaGVhZGVyXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBibG9jay1pZFxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogbGFuZVxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogdHgtcGF0dGVyblxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAgIGVudW06IHBoeS10ZXN0LXBhdHRlcm5cbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHJ4LXBhdHRlcm5cbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBlbnVtOiBwaHktdGVzdC1wYXR0ZXJuXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBiZXJ0LWFjdGlvblxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAgIGVudW06IHBoeS10ZXN0LWFjdGlvblxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogaW5qZWN0LWVycm9yLWNvdW50XG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBhY3RpdmUtdGVzdHNcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBkb2M6IEJpdG1hc2sgb2YgY3VycmVudGx5IHJ1bm5pbmcgdGVzdHMgKGJpdCAwID0gQkVSVCkuXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBjaGVja2VyLWxvY2tcbiYjNDM7ICAgICAgICB0eXBlOiB1OFxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogZXJyb3ItY291bnRcbiYjNDM7ICAgICAgICB0eXBlOiB1NjRcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHRvdGFsLWJpdHMtc2VudFxuJiM0MzsgICAgICAgIHR5cGU6IHU2NFxuIFxuIG9wZXJhdGlvbnM6XG4gICBlbnVtLW1vZGVsOiBkaXJlY3Rpb25hbFxuQEAgLTI4NTksNiAmIzQzOzMwMTcsNTQgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgICAtIHdvcnN0LWNoYW5uZWxcbiAgICAgICAgICAgICAtIGxpbmtcbiAgICAgICBkdW1wOiAqbXNlLWdldC1vcFxuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBpbnRmLWNhcHMtZ2V0XG4mIzQzOyAgICAgIGRvYzogR2V0IGludGVyZmFjZSBjYXBhYmlsaXRpZXMgKGZ1bmN0aW9uYWwgYmxvY2sgbGF5b3V0KS5cbiYjNDM7ICAgICAgYXR0cmlidXRlLXNldDogaW50Zi1jYXBzXG4mIzQzOyAgICAgIGRvOiBcdTAwMjZpbnRmLWNhcHMtZ2V0LW9wXG4mIzQzOyAgICAgICAgcmVxdWVzdDpcbiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6XG4mIzQzOyAgICAgICAgICAgIC0gaGVhZGVyXG4mIzQzOyAgICAgICAgcmVwbHk6XG4mIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOlxuJiM0MzsgICAgICAgICAgICAtIGhlYWRlclxuJiM0MzsgICAgICAgICAgICAtIGJsb2Nrc1xuJiM0MzsgICAgICBkdW1wOiAqaW50Zi1jYXBzLWdldC1vcFxuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBwaHktdGVzdC1nZXRcbiYjNDM7ICAgICAgZG9jOiBHZXQgUEhZIHRlc3Qgc3RhdHVzIChwYXR0ZXJucywgQkVSVCBjb3VudGVycykuXG4mIzQzOyAgICAgIGF0dHJpYnV0ZS1zZXQ6IHBoeS10ZXN0XG4mIzQzOyAgICAgIGRvOlxuJiM0MzsgICAgICAgIHJlcXVlc3Q6XG4mIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOlxuJiM0MzsgICAgICAgICAgICAtIGhlYWRlclxuJiM0MzsgICAgICAgICAgICAtIGJsb2NrLWlkXG4mIzQzOyAgICAgICAgICAgIC0gbGFuZVxuJiM0MzsgICAgICAgIHJlcGx5OlxuJiM0MzsgICAgICAgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgICAgICAgLSBoZWFkZXJcbiYjNDM7ICAgICAgICAgICAgLSBibG9jay1pZFxuJiM0MzsgICAgICAgICAgICAtIGxhbmVcbiYjNDM7ICAgICAgICAgICAgLSB0eC1wYXR0ZXJuXG4mIzQzOyAgICAgICAgICAgIC0gcngtcGF0dGVyblxuJiM0MzsgICAgICAgICAgICAtIGFjdGl2ZS10ZXN0c1xuJiM0MzsgICAgICAgICAgICAtIGNoZWNrZXItbG9ja1xuJiM0MzsgICAgICAgICAgICAtIGVycm9yLWNvdW50XG4mIzQzOyAgICAgICAgICAgIC0gdG90YWwtYml0cy1zZW50XG4mIzQzOyAgICAtXG4mIzQzOyAgICAgIG5hbWU6IHBoeS10ZXN0LWFjdFxuJiM0MzsgICAgICBkb2M6IENvbmZpZ3VyZSBQSFkgdGVzdCAoc2V0IHBhdHRlcm5zLCBzdGFydC9zdG9wIEJFUlQsIGluamVjdCBlcnJvcnMpLlxuJiM0MzsgICAgICBhdHRyaWJ1dGUtc2V0OiBwaHktdGVzdFxuJiM0MzsgICAgICBkbzpcbiYjNDM7ICAgICAgICByZXF1ZXN0OlxuJiM0MzsgICAgICAgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgICAgICAgLSBoZWFkZXJcbiYjNDM7ICAgICAgICAgICAgLSBibG9jay1pZFxuJiM0MzsgICAgICAgICAgICAtIGxhbmVcbiYjNDM7ICAgICAgICAgICAgLSB0eC1wYXR0ZXJuXG4mIzQzOyAgICAgICAgICAgIC0gcngtcGF0dGVyblxuJiM0MzsgICAgICAgICAgICAtIGJlcnQtYWN0aW9uXG4mIzQzOyAgICAgICAgICAgIC0gaW5qZWN0LWVycm9yLWNvdW50XG4gXG4gbWNhc3QtZ3JvdXBzOlxuICAgbGlzdDpcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG5pbmRleCAxMjY4M2I1ZDEyNWU0Li5mOTc0OGU3MzlmMDNlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG5AQCAtMTE5Nyw2ICYjNDM7MTE5Nyw5MiBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XG4gICogU2VlIFx1MDAyNnN0cnVjdCBuZXRfZGV2aWNlIGFuZCBcdTAwMjZzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZm9yIGRvY3VtZW50YXRpb25cbiAgKiBvZiB0aGUgZ2VuZXJpYyBuZXRkZXYgZmVhdHVyZXMgaW50ZXJmYWNlLlxuICAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBJTlRGX0NBUFNfTUFYX0JMT0NLU1x0MTZcbiYjNDM7I2RlZmluZSBJTlRGX0JMT0NLX05BTUVfTEVOXHQzMlxuJiM0MztcbiYjNDM7I2RlZmluZSBMT09QQkFDS19TVVBQT1JUX0xPQ0FMXHRCSVQoMClcbiYjNDM7I2RlZmluZSBMT09QQkFDS19TVVBQT1JUX1JFTU9URVx0QklUKDEpXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayAtIFNpbmdsZSBmdW5jdGlvbmFsIGJsb2NrIGluIHRoZSBpbnRlcmZhY2VcbiYjNDM7ICogQGlkOiBVbmlxdWUgYmxvY2sgaWRlbnRpZmllclxuJiM0MzsgKiBAY29tcG9uZW50OiBIYXJkd2FyZSBjb21wb25lbnQgKE1BQywgUEhZLCBNT0RVTEUpXG4mIzQzOyAqIEBzdWJsYXllcjogODAyLjMgc3VibGF5ZXIgKFJTLCBQQ1MsIEZFQywgUE1BLCBQTUQsIG9yIE5PTkUpXG4mIzQzOyAqIEBpbnN0YW5jZTogSW5kZXggd2hlbiBtdWx0aXBsZSBpbnN0YW5jZXMgb2Ygc2FtZSBjb21wb25lbnQgZXhpc3RcbiYjNDM7ICogQG5hbWU6IERyaXZlci1jaG9zZW4gbGFiZWxcbiYjNDM7ICogQGRlcHRoOiBPcmRlcmluZyB3aXRoaW4gc2FtZSAoY29tcG9uZW50LCBzdWJsYXllcikgdHVwbGVcbiYjNDM7ICogQGxhbmVzOiBOdW1iZXIgb2YgbGFuZXNcbiYjNDM7ICogQGxvb3BiYWNrX3N1cHBvcnRlZDogQml0bWFzayBvZiBzdXBwb3J0ZWQgbG9vcGJhY2sgZGlyZWN0aW9uc1xuJiM0MzsgKiBAc3VwcG9ydGVkX3R4X3BhdHRlcm5zOiBCaXRtYXNrIG9mIHBhdHRlcm5zIHRoaXMgYmxvY2sgY2FuIGdlbmVyYXRlXG4mIzQzOyAqIEBzdXBwb3J0ZWRfcnhfcGF0dGVybnM6IEJpdG1hc2sgb2YgcGF0dGVybnMgdGhpcyBibG9jayBjYW4gY2hlY2tcbiYjNDM7ICogQGVycm9yX2luamVjdF9zdXBwb3J0ZWQ6IEJsb2NrIHN1cHBvcnRzIGJpdCBlcnJvciBpbmplY3Rpb25cbiYjNDM7ICogQGJlcnRfc3VwcG9ydGVkOiBCbG9jayBzdXBwb3J0cyBCRVJUIGNvdW50ZXJzXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrIHtcbiYjNDM7XHR1MzIgaWQ7XG4mIzQzO1x0ZW51bSBpbnRmX2NvbXBvbmVudCBjb21wb25lbnQ7XG4mIzQzO1x0ZW51bSBpbnRmX3N1YmxheWVyIHN1YmxheWVyO1xuJiM0MztcdHUzMiBpbnN0YW5jZTtcbiYjNDM7XHRjaGFyIG5hbWVbSU5URl9CTE9DS19OQU1FX0xFTl07XG4mIzQzO1x0dTggZGVwdGg7XG4mIzQzO1x0dTMyIGxhbmVzO1xuJiM0MztcdHUzMiBsb29wYmFja19zdXBwb3J0ZWQ7XG4mIzQzO1x0dTMyIHN1cHBvcnRlZF90eF9wYXR0ZXJucztcbiYjNDM7XHR1MzIgc3VwcG9ydGVkX3J4X3BhdHRlcm5zO1xuJiM0MztcdGJvb2wgZXJyb3JfaW5qZWN0X3N1cHBvcnRlZDtcbiYjNDM7XHRib29sIGJlcnRfc3VwcG9ydGVkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBldGh0b29sX2ludGZfY2FwcyAtIEludGVyZmFjZSBjYXBhYmlsaXRpZXMgKGFsbCBibG9ja3MpXG4mIzQzOyAqIEBudW1fYmxvY2tzOiBOdW1iZXIgb2YgdmFsaWQgZW50cmllcyBpbiBibG9ja3NbXVxuJiM0MzsgKiBAYmxvY2tzOiBBcnJheSBvZiBmdW5jdGlvbmFsIGJsb2Nrc1xuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzIHtcbiYjNDM7XHR1MzIgbnVtX2Jsb2NrcztcbiYjNDM7XHRzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrIGJsb2Nrc1tJTlRGX0NBUFNfTUFYX0JMT0NLU107XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBCaXRtYXNrIG9mIHdoaWNoIGV0aHRvb2xfcGh5X3Rlc3QgZmllbGRzIHdlcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgKi9cbiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfVFhfUEFUVEVSTlx0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfUlhfUEFUVEVSTlx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfQkVSVF9BQ1RJT05cdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgUEhZX1RFU1RfQ01EX0lOSkVDVF9DT1VOVFx0XHRCSVQoMylcbiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfTEFORVx0XHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIFBIWV9URVNUX0NNRF9CTE9DS19JRFx0XHRcdEJJVCg1KVxuJiM0MztcbiYjNDM7LyogQml0bWFzayBvZiBjdXJyZW50bHkgYWN0aXZlIHRlc3RzIChyZWFkLW9ubHkpICovXG4mIzQzOyNkZWZpbmUgUEhZX1RFU1RfQUNUSVZFX0JFUlRcdFx0QklUKDApXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgLSBQSFkgdGVzdCBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXNcbiYjNDM7ICogQGNtZDogQml0bWFzayBvZiB3aGljaCBmaWVsZHMgYXJlIHZhbGlkIChQSFlfVEVTVF9DTURfKilcbiYjNDM7ICogQGJsb2NrX2lkOiBCbG9jayB0byBvcGVyYXRlIG9uIChmcm9tIGludGYtY2Fwcy1nZXQpXG4mIzQzOyAqIEBsYW5lOiBMYW5lIG51bWJlciAoMC1iYXNlZClcbiYjNDM7ICogQHR4X3BhdHRlcm46IFRYIHBhdHRlcm4gZ2VuZXJhdG9yIHNldHRpbmdcbiYjNDM7ICogQHJ4X3BhdHRlcm46IFJYIHBhdHRlcm4gY2hlY2tlciBzZXR0aW5nXG4mIzQzOyAqIEBiZXJ0X2FjdGlvbjogQkVSVCBzdGFydC9zdG9wIGNvbnRyb2xcbiYjNDM7ICogQGluamVjdF9lcnJvcl9jb3VudDogTnVtYmVyIG9mIGVycm9ycyB0byBpbmplY3RcbiYjNDM7ICogQGFjdGl2ZV90ZXN0czogQml0bWFzayBvZiBydW5uaW5nIHRlc3RzIChQSFlfVEVTVF9BQ1RJVkVfKilcbiYjNDM7ICogQGNoZWNrZXJfbG9jazogUlggY2hlY2tlciBsb2NrIHN0YXR1cyAocmVhZC1vbmx5KVxuJiM0MzsgKiBAZXJyb3JfY291bnQ6IEJFUlQgZXJyb3IgY291bnRlciAocmVhZC1vbmx5KVxuJiM0MzsgKiBAdG90YWxfYml0c19zZW50OiBCRVJUIHRvdGFsIGJpdHMgY291bnRlciAocmVhZC1vbmx5KVxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3Qge1xuJiM0MztcdHUzMiBjbWQ7XG4mIzQzO1x0dTMyIGJsb2NrX2lkO1xuJiM0MztcdHUzMiBsYW5lO1xuJiM0MztcdGVudW0gcGh5X3Rlc3RfcGF0dGVybiB0eF9wYXR0ZXJuO1xuJiM0MztcdGVudW0gcGh5X3Rlc3RfcGF0dGVybiByeF9wYXR0ZXJuO1xuJiM0MztcdGVudW0gcGh5X3Rlc3RfYWN0aW9uIGJlcnRfYWN0aW9uO1xuJiM0MztcdHUzMiBpbmplY3RfZXJyb3JfY291bnQ7XG4mIzQzO1x0dTMyIGFjdGl2ZV90ZXN0cztcbiYjNDM7XHR1OCBjaGVja2VyX2xvY2s7XG4mIzQzO1x0dTY0IGVycm9yX2NvdW50O1xuJiM0MztcdHU2NCB0b3RhbF9iaXRzX3NlbnQ7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBldGh0b29sX29wcyB7XG4gXHR1MzIgICAgIHN1cHBvcnRlZF9pbnB1dF94ZnJtOjg7XG4gXHR1MzIgICAgIGNhcF9saW5rX2xhbmVzX3N1cHBvcnRlZDoxO1xuQEAgLTEzNTQsNiAmIzQzOzE0NDAsMTIgQEAgc3RydWN0IGV0aHRvb2xfb3BzIHtcbiBcdGludFx0KCpzZXRfbW0pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX21tX2NmZyAqY2ZnLFxuIFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBcdHZvaWRcdCgqZ2V0X21tX3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqc3RhdHMpO1xuJiM0MztcdGludFx0KCpnZXRfaW50Zl9jYXBzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHMgKmNhcHMpO1xuJiM0MztcdGludFx0KCpnZXRfcGh5X3Rlc3QpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnRlc3QpO1xuJiM0MztcdGludFx0KCpzZXRfcGh5X3Rlc3QpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnRlc3QpO1xuIH07XG4gXG4gaW50IGV0aHRvb2xfY2hlY2tfb3BzKGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuaW5kZXggODEzNGJhZjc4NjBmMy4uMzEwMmJiN2JhMzM3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbkBAIC04OTMsNiAmIzQzOzg5Myw5IEBAIGVudW0ge1xuIFx0RVRIVE9PTF9NU0dfUlNTX0NSRUFURV9BQ1QsXG4gXHRFVEhUT09MX01TR19SU1NfREVMRVRFX0FDVCxcbiBcdEVUSFRPT0xfTVNHX01TRV9HRVQsXG4mIzQzO1x0RVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVCxcbiYjNDM7XHRFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsXG4mIzQzO1x0RVRIVE9PTF9NU0dfUEhZX1RFU1RfQUNULFxuIFxuIFx0X19FVEhUT09MX01TR19VU0VSX0NOVCxcbiBcdEVUSFRPT0xfTVNHX1VTRVJfTUFYID0gKF9fRVRIVE9PTF9NU0dfVVNFUl9DTlQgLSAxKVxuQEAgLTk1NCw2ICYjNDM7OTU3LDggQEAgZW51bSB7XG4gXHRFVEhUT09MX01TR19SU1NfQ1JFQVRFX05URixcbiBcdEVUSFRPT0xfTVNHX1JTU19ERUxFVEVfTlRGLFxuIFx0RVRIVE9PTF9NU0dfTVNFX0dFVF9SRVBMWSxcbiYjNDM7XHRFVEhUT09MX01TR19JTlRGX0NBUFNfR0VUX1JFUExZLFxuJiM0MztcdEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVF9SRVBMWSxcbiBcbiBcdF9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCxcbiBcdEVUSFRPT0xfTVNHX0tFUk5FTF9NQVggPSAoX19FVEhUT09MX01TR19LRVJORUxfQ05UIC0gMSlcbkBAIC05NjEsNCAmIzQzOzk2NiwxMDMgQEAgZW51bSB7XG4gXG4gI2RlZmluZSBFVEhUT09MX01DR1JQX01PTklUT1JfTkFNRVx0XCYjMzQ7bW9uaXRvclwmIzM0O1xuIFxuJiM0MzsvKiBJbnRlcmZhY2UgY29tcG9uZW50IHR5cGVzICovXG4mIzQzO2VudW0gaW50Zl9jb21wb25lbnQge1xuJiM0MztcdElOVEZfQ09NUE9ORU5UX01BQyxcbiYjNDM7XHRJTlRGX0NPTVBPTkVOVF9QSFksXG4mIzQzO1x0SU5URl9DT01QT05FTlRfTU9EVUxFLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogSW50ZXJmYWNlIHN1YmxheWVyIHR5cGVzICovXG4mIzQzO2VudW0gaW50Zl9zdWJsYXllciB7XG4mIzQzO1x0SU5URl9TVUJMQVlFUl9OT05FLFxuJiM0MztcdElOVEZfU1VCTEFZRVJfUlMsXG4mIzQzO1x0SU5URl9TVUJMQVlFUl9QQ1MsXG4mIzQzO1x0SU5URl9TVUJMQVlFUl9GRUMsXG4mIzQzO1x0SU5URl9TVUJMQVlFUl9QTUEsXG4mIzQzO1x0SU5URl9TVUJMQVlFUl9QTUQsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBBdHRyaWJ1dGVzIG9mIGEgc2luZ2xlIGludGVyZmFjZSBibG9jayAqL1xuJiM0MztlbnVtIHtcbiYjNDM7XHRFVEhUT09MX0FfSU5URl9CTE9DS19JRCxcbiYjNDM7XHRFVEhUT09MX0FfSU5URl9CTE9DS19DT01QT05FTlQsXG4mIzQzO1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfU1VCTEFZRVIsXG4mIzQzO1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfSU5TVEFOQ0UsXG4mIzQzO1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfTkFNRSxcbiYjNDM7XHRFVEhUT09MX0FfSU5URl9CTE9DS19ERVBUSCxcbiYjNDM7XHRFVEhUT09MX0FfSU5URl9CTE9DS19MQU5FUyxcbiYjNDM7XHRFVEhUT09MX0FfSU5URl9CTE9DS19MT09QQkFDS19TVVBQT1JURUQsXG4mIzQzO1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfVFhfUEFUVEVSTlMsXG4mIzQzO1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfUlhfUEFUVEVSTlMsXG4mIzQzO1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfRVJST1JfSU5KRUNULFxuJiM0MztcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX0JFUlQsXG4mIzQzO1xuJiM0MztcdF9fRVRIVE9PTF9BX0lOVEZfQkxPQ0tfQ05ULFxuJiM0MztcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX01BWCA9IChfX0VUSFRPT0xfQV9JTlRGX0JMT0NLX0NOVCAtIDEpXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBBdHRyaWJ1dGVzIG9mIGludGYtY2Fwcy1nZXQgbWVzc2FnZSAqL1xuJiM0MztlbnVtIHtcbiYjNDM7XHRFVEhUT09MX0FfSU5URl9DQVBTX1VOU1BFQyxcbiYjNDM7XHRFVEhUT09MX0FfSU5URl9DQVBTX0hFQURFUixcbiYjNDM7XHRFVEhUT09MX0FfSU5URl9DQVBTX0JMT0NLUyxcbiYjNDM7XG4mIzQzO1x0X19FVEhUT09MX0FfSU5URl9DQVBTX0NOVCxcbiYjNDM7XHRFVEhUT09MX0FfSU5URl9DQVBTX01BWCA9IChfX0VUSFRPT0xfQV9JTlRGX0NBUFNfQ05UIC0gMSlcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFBIWSB0ZXN0IHBhdHRlcm4gdHlwZXMgKi9cbiYjNDM7ZW51bSBwaHlfdGVzdF9wYXR0ZXJuIHtcbiYjNDM7XHRQSFlfVEVTVF9QQVRURVJOX09GRixcbiYjNDM7XHRQSFlfVEVTVF9QQVRURVJOX1BSQlM3LFxuJiM0MztcdFBIWV9URVNUX1BBVFRFUk5fUFJCUzksXG4mIzQzO1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMTEsXG4mIzQzO1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMTMsXG4mIzQzO1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMTUsXG4mIzQzO1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMjMsXG4mIzQzO1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMzEsXG4mIzQzO1x0UEhZX1RFU1RfUEFUVEVSTl9TU1BSUSxcbiYjNDM7XHRQSFlfVEVTVF9QQVRURVJOX1BSQlMxM1EsXG4mIzQzO1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMzFRLFxuJiM0MztcdFBIWV9URVNUX1BBVFRFUk5fU1FVQVJFX05SWixcbiYjNDM7XHRQSFlfVEVTVF9QQVRURVJOX1NRVUFSRV9QQU00LFxuJiM0MztcdFBIWV9URVNUX1BBVFRFUk5fVFhfTElORUFSSVRZLFxuJiM0MztcdFBIWV9URVNUX1BBVFRFUk5fU0NSQU1CTEVEX0lETEUsXG4mIzQzO1x0UEhZX1RFU1RfUEFUVEVSTl9LMjhfNSxcbiYjNDM7XHRQSFlfVEVTVF9QQVRURVJOX0syOF83LFxuJiM0MztcbiYjNDM7XHRfX1BIWV9URVNUX1BBVFRFUk5fQ09VTlQsXG4mIzQzO1x0UEhZX1RFU1RfUEFUVEVSTl9NQVggPSAoX19QSFlfVEVTVF9QQVRURVJOX0NPVU5UIC0gMSlcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFBIWSB0ZXN0IEJFUlQgYWN0aW9ucyAqL1xuJiM0MztlbnVtIHBoeV90ZXN0X2FjdGlvbiB7XG4mIzQzO1x0UEhZX1RFU1RfQUNUSU9OX05PTkUsXG4mIzQzO1x0UEhZX1RFU1RfQUNUSU9OX1NUQVJULFxuJiM0MztcdFBIWV9URVNUX0FDVElPTl9TVE9QLFxuJiM0MztcbiYjNDM7XHRfX1BIWV9URVNUX0FDVElPTl9DT1VOVCxcbiYjNDM7XHRQSFlfVEVTVF9BQ1RJT05fTUFYID0gKF9fUEhZX1RFU1RfQUNUSU9OX0NPVU5UIC0gMSlcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIEF0dHJpYnV0ZXMgb2YgcGh5LXRlc3QtZ2V0IC8gcGh5LXRlc3QtYWN0IG1lc3NhZ2VzICovXG4mIzQzO2VudW0ge1xuJiM0MztcdEVUSFRPT0xfQV9QSFlfVEVTVF9VTlNQRUMsXG4mIzQzO1x0RVRIVE9PTF9BX1BIWV9URVNUX0hFQURFUixcbiYjNDM7XHRFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSUQsXG4mIzQzO1x0RVRIVE9PTF9BX1BIWV9URVNUX0xBTkUsXG4mIzQzO1x0RVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk4sXG4mIzQzO1x0RVRIVE9PTF9BX1BIWV9URVNUX1JYX1BBVFRFUk4sXG4mIzQzO1x0RVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OLFxuJiM0MztcdEVUSFRPT0xfQV9QSFlfVEVTVF9JTkpFQ1RfRVJST1JfQ09VTlQsXG4mIzQzO1x0RVRIVE9PTF9BX1BIWV9URVNUX0FDVElWRV9URVNUUyxcbiYjNDM7XHRFVEhUT09MX0FfUEhZX1RFU1RfQ0hFQ0tFUl9MT0NLLFxuJiM0MztcdEVUSFRPT0xfQV9QSFlfVEVTVF9FUlJPUl9DT1VOVCxcbiYjNDM7XHRFVEhUT09MX0FfUEhZX1RFU1RfVE9UQUxfQklUU19TRU5ULFxuJiM0MztcbiYjNDM7XHRfX0VUSFRPT0xfQV9QSFlfVEVTVF9DTlQsXG4mIzQzO1x0RVRIVE9PTF9BX1BIWV9URVNUX01BWCA9IChfX0VUSFRPT0xfQV9QSFlfVEVTVF9DTlQgLSAxKVxuJiM0Mzt9O1xuJiM0MztcbiAjZW5kaWYgLyogX1VBUElfTElOVVhfRVRIVE9PTF9ORVRMSU5LX0dFTkVSQVRFRF9IICovXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvTWFrZWZpbGUgYi9uZXQvZXRodG9vbC9NYWtlZmlsZVxuaW5kZXggNjI5YzEwOTE2NjcwZS4uN2RkMmM1NjI0Y2VkZiAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9NYWtlZmlsZVxuQEAgLTksNCAmIzQzOzksNCBAQCBldGh0b29sX25sLXlcdDo9IG5ldGxpbmsubyBiaXRzZXQubyBzdHJzZXQubyBsaW5raW5mby5vIGxpbmttb2Rlcy5vIHJzcy5vIFxcXG4gXHRcdCAgIGNoYW5uZWxzLm8gY29hbGVzY2UubyBwYXVzZS5vIGVlZS5vIHRzaW5mby5vIGNhYmxldGVzdC5vIFxcXG4gXHRcdCAgIHR1bm5lbHMubyBmZWMubyBlZXByb20ubyBzdGF0cy5vIHBoY192Y2xvY2tzLm8gbW0ubyBcXFxuIFx0XHQgICBtb2R1bGUubyBjbWlzX2Z3X3VwZGF0ZS5vIGNtaXNfY2RiLm8gcHNlLXBkLm8gcGxjYS5vIFxcXG4tXHRcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm9cbiYjNDM7XHRcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm8gaW50Zl9jYXBzLm8gcGh5dGVzdC5vXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMgYi9uZXQvZXRodG9vbC9pbnRmX2NhcHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmU0NWNjYzRiODhjOWZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL2ludGZfY2Fwcy5jXG5AQCAtMCwwICYjNDM7MSwxMzAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bmV0bGluay5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NvbW1vbi5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgaW50Zl9jYXBzX3JlcV9pbmZvIHtcbiYjNDM7XHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSB7XG4mIzQzO1x0c3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgYmFzZTtcbiYjNDM7XHRzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHMgY2FwcztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSU5URl9DQVBTX1JFUERBVEEoX19yZXBseV9iYXNlKSBcXFxuJiM0MztcdGNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSwgYmFzZSlcbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2ludGZfY2Fwc19nZXRfcG9saWN5W0VUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSICYjNDM7IDFdID0ge1xuJiM0MztcdFtFVEhUT09MX0FfSU5URl9DQVBTX0hFQURFUl0gPVxuJiM0MztcdFx0TkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGludGZfY2Fwc19yZXBseV9zaXplKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4mIzQzO1x0XHRcdFx0Y29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGEgKmRhdGEgPSBJTlRGX0NBUFNfUkVQREFUQShyZXBseV9iYXNlKTtcbiYjNDM7XHRpbnQgbGVuID0gMDtcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGF0YS1cdTAwM2VjYXBzLm51bV9ibG9ja3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKDApO1x0XHQvKiBuZXN0ZWQgYmxvY2sgKi9cbiYjNDM7XHRcdGxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogaWQgKi9cbiYjNDM7XHRcdGxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogY29tcG9uZW50ICovXG4mIzQzO1x0XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIHN1YmxheWVyICovXG4mIzQzO1x0XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIGluc3RhbmNlICovXG4mIzQzO1x0XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKElOVEZfQkxPQ0tfTkFNRV9MRU4pOyAvKiBuYW1lICovXG4mIzQzO1x0XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpO1x0LyogZGVwdGggKi9cbiYjNDM7XHRcdGxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogbGFuZXMgKi9cbiYjNDM7XHRcdGxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogbG9vcGJhY2tfc3VwcG9ydGVkICovXG4mIzQzO1x0XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIHR4X3BhdHRlcm5zICovXG4mIzQzO1x0XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIHJ4X3BhdHRlcm5zICovXG4mIzQzO1x0XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKDApO1x0XHQvKiBlcnJvcl9pbmplY3QgKGZsYWcpICovXG4mIzQzO1x0XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKDApO1x0XHQvKiBiZXJ0IChmbGFnKSAqL1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Lyogb3V0ZXIgQkxPQ0tTIG5lc3QgKi9cbiYjNDM7XHRsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKDApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbGVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGludGZfY2Fwc19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlLFxuJiM0MztcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSAqZGF0YSA9IElOVEZfQ0FQU19SRVBEQVRBKHJlcGx5X2Jhc2UpO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSByZXBseV9iYXNlLVx1MDAzZWRldjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2ludGZfY2FwcylcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfaW50Zl9jYXBzKGRldiwgXHUwMDI2ZGF0YS1cdTAwM2VjYXBzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpbnRmX2NhcHNfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztcdFx0XHRcdGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4mIzQzO1x0XHRcdFx0Y29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGEgKmRhdGEgPSBJTlRGX0NBUFNfUkVQREFUQShyZXBseV9iYXNlKTtcbiYjNDM7XHRzdHJ1Y3QgbmxhdHRyICpibG9ja3NfYXR0cjtcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XG4mIzQzO1x0YmxvY2tzX2F0dHIgPSBubGFfbmVzdF9zdGFydChza2IsIEVUSFRPT0xfQV9JTlRGX0NBUFNfQkxPQ0tTKTtcbiYjNDM7XHRpZiAoIWJsb2Nrc19hdHRyKVxuJiM0MztcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGF0YS1cdTAwM2VjYXBzLm51bV9ibG9ja3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrICpiID0gXHUwMDI2ZGF0YS1cdTAwM2VjYXBzLmJsb2Nrc1tpXTtcbiYjNDM7XHRcdHN0cnVjdCBubGF0dHIgKmJsb2NrX2F0dHI7XG4mIzQzO1xuJiM0MztcdFx0YmxvY2tfYXR0ciA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgMCk7XG4mIzQzO1x0XHRpZiAoIWJsb2NrX2F0dHIpXG4mIzQzO1x0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0lELCBiLVx1MDAzZWlkKSB8fFxuJiM0MztcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfQ09NUE9ORU5ULFxuJiM0MztcdFx0XHRcdGItXHUwMDNlY29tcG9uZW50KSB8fFxuJiM0MztcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfU1VCTEFZRVIsXG4mIzQzO1x0XHRcdFx0Yi1cdTAwM2VzdWJsYXllcikgfHxcbiYjNDM7XHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0lOU1RBTkNFLFxuJiM0MztcdFx0XHRcdGItXHUwMDNlaW5zdGFuY2UpIHx8XG4mIzQzO1x0XHQgICAgbmxhX3B1dF9zdHJpbmcoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19OQU1FLCBiLVx1MDAzZW5hbWUpIHx8XG4mIzQzO1x0XHQgICAgbmxhX3B1dF91OChza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0RFUFRILCBiLVx1MDAzZWRlcHRoKSB8fFxuJiM0MztcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTEFORVMsIGItXHUwMDNlbGFuZXMpIHx8XG4mIzQzO1x0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19MT09QQkFDS19TVVBQT1JURUQsXG4mIzQzO1x0XHRcdFx0Yi1cdTAwM2Vsb29wYmFja19zdXBwb3J0ZWQpIHx8XG4mIzQzO1x0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19UWF9QQVRURVJOUyxcbiYjNDM7XHRcdFx0XHRiLVx1MDAzZXN1cHBvcnRlZF90eF9wYXR0ZXJucykgfHxcbiYjNDM7XHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX1JYX1BBVFRFUk5TLFxuJiM0MztcdFx0XHRcdGItXHUwMDNlc3VwcG9ydGVkX3J4X3BhdHRlcm5zKSlcbiYjNDM7XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4mIzQzO1x0XHRpZiAoYi1cdTAwM2VlcnJvcl9pbmplY3Rfc3VwcG9ydGVkIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIG5sYV9wdXRfZmxhZyhza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0VSUk9SX0lOSkVDVCkpXG4mIzQzO1x0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuJiM0MztcdFx0aWYgKGItXHUwMDNlYmVydF9zdXBwb3J0ZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgbmxhX3B1dF9mbGFnKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfQkVSVCkpXG4mIzQzO1x0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuJiM0MztcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjNDM7XG4mIzQzO1x0XHRubGFfbmVzdF9lbmQoc2tiLCBibG9ja19hdHRyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5sYV9uZXN0X2VuZChza2IsIGJsb2Nrc19hdHRyKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO25sYV9wdXRfZmFpbHVyZTpcbiYjNDM7XHRubGFfbmVzdF9jYW5jZWwoc2tiLCBibG9ja3NfYXR0cik7XG4mIzQzO1x0cmV0dXJuIC1FTVNHU0laRTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcyA9IHtcbiYjNDM7XHQucmVxdWVzdF9jbWRcdD0gRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVCxcbiYjNDM7XHQucmVwbHlfY21kXHQ9IEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRfUkVQTFksXG4mIzQzO1x0Lmhkcl9hdHRyXHQ9IEVUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSLFxuJiM0MztcdC5yZXFfaW5mb19zaXplXHQ9IHNpemVvZihzdHJ1Y3QgaW50Zl9jYXBzX3JlcV9pbmZvKSxcbiYjNDM7XHQucmVwbHlfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSksXG4mIzQzO1x0LnByZXBhcmVfZGF0YVx0PSBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhLFxuJiM0MztcdC5yZXBseV9zaXplXHQ9IGludGZfY2Fwc19yZXBseV9zaXplLFxuJiM0MztcdC5maWxsX3JlcGx5XHQ9IGludGZfY2Fwc19maWxsX3JlcGx5LFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuYyBiL25ldC9ldGh0b29sL25ldGxpbmsuY1xuaW5kZXggMWFmMzk1YjU0MzMwZS4uNTZlNWM4MTE0NTRiYiAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvbmV0bGluay5jXG5AQCAtNDMxLDYgJiM0Mzs0MzEsOCBAQCBldGhubF9kZWZhdWx0X3JlcXVlc3RzW19fRVRIVE9PTF9NU0dfVVNFUl9DTlRdID0ge1xuIFx0W0VUSFRPT0xfTVNHX1RTQ09ORklHX1NFVF1cdD0gXHUwMDI2ZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHMsXG4gXHRbRVRIVE9PTF9NU0dfUEhZX0dFVF1cdFx0PSBcdTAwMjZldGhubF9waHlfcmVxdWVzdF9vcHMsXG4gXHRbRVRIVE9PTF9NU0dfTVNFX0dFVF1cdFx0PSBcdTAwMjZldGhubF9tc2VfcmVxdWVzdF9vcHMsXG4mIzQzO1x0W0VUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRdXHQ9IFx1MDAyNmV0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcyxcbiYjNDM7XHRbRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VUXVx0PSBcdTAwMjZldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcyxcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmV0aG5sX2R1bXBfY29udGV4dChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5AQCAtMTU3Miw2ICYjNDM7MTU3NCwyOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfb3BzIGV0aHRvb2xfZ2VubF9vcHNbXSA9IHtcbiBcdFx0LnBvbGljeSA9IGV0aG5sX21zZV9nZXRfcG9saWN5LFxuIFx0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfbXNlX2dldF9wb2xpY3kpIC0gMSxcbiBcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LmNtZFx0PSBFVEhUT09MX01TR19JTlRGX0NBUFNfR0VULFxuJiM0MztcdFx0LmRvaXRcdD0gZXRobmxfZGVmYXVsdF9kb2l0LFxuJiM0MztcdFx0LnN0YXJ0XHQ9IGV0aG5sX2RlZmF1bHRfc3RhcnQsXG4mIzQzO1x0XHQuZHVtcGl0XHQ9IGV0aG5sX2RlZmF1bHRfZHVtcGl0LFxuJiM0MztcdFx0LmRvbmVcdD0gZXRobmxfZGVmYXVsdF9kb25lLFxuJiM0MztcdFx0LnBvbGljeSA9IGV0aG5sX2ludGZfY2Fwc19nZXRfcG9saWN5LFxuJiM0MztcdFx0Lm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX2ludGZfY2Fwc19nZXRfcG9saWN5KSAtIDEsXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuY21kXHQ9IEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVCxcbiYjNDM7XHRcdC5kb2l0XHQ9IGV0aG5sX2RlZmF1bHRfZG9pdCxcbiYjNDM7XHRcdC5wb2xpY3kgPSBldGhubF9waHlfdGVzdF9nZXRfcG9saWN5LFxuJiM0MztcdFx0Lm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3kpIC0gMSxcbiYjNDM7XHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5jbWRcdD0gRVRIVE9PTF9NU0dfUEhZX1RFU1RfQUNULFxuJiM0MztcdFx0LmZsYWdzXHQ9IEdFTkxfVU5TX0FETUlOX1BFUk0sXG4mIzQzO1x0XHQuZG9pdFx0PSBldGhubF9hY3RfcGh5X3Rlc3QsXG4mIzQzO1x0XHQucG9saWN5ID0gZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeSxcbiYjNDM7XHRcdC5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9waHlfdGVzdF9hY3RfcG9saWN5KSAtIDEsXG4mIzQzO1x0fSxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgZXRodG9vbF9ubF9tY2dycHNbXSA9IHtcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmggYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbmluZGV4IDNlOTY5YTA3MGY5ZmUuLjFjYWJhNjBkODNjNDMgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxuQEAgLTQ3NCw2ICYjNDM7NDc0LDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tbV9yZXF1ZXN0X29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BoeV9yZXF1ZXN0X29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3RzY29uZmlnX3JlcXVlc3Rfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfbXNlX3JlcXVlc3Rfb3BzO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcztcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcztcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtFVEhUT09MX0FfSEVBREVSX0ZMQUdTICYjNDM7IDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5X3N0YXRzW0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgJiM0MzsgMV07XG5AQCAtNTMwLDYgJiM0Mzs1MzIsMTEgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfSEVBREVSICYjNDM7IDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19nZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19IRUFERVIgJiM0MzsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX3NldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX01BWCAmIzQzOyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfbXNlX2dldF9wb2xpY3lbRVRIVE9PTF9BX01TRV9IRUFERVIgJiM0MzsgMV07XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeVtFVEhUT09MX0FfSU5URl9DQVBTX0hFQURFUiAmIzQzOyAxXTtcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkUgJiM0MzsgMV07XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9NQVggJiM0MzsgMV07XG4mIzQzO1xuJiM0MztpbnQgZXRobmxfYWN0X3BoeV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIFxuIGludCBldGhubF9zZXRfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gaW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BoeXRlc3QuYyBiL25ldC9ldGh0b29sL3BoeXRlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmRlZGNkMDM2YjdjMmVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL3BoeXRlc3QuY1xuQEAgLTAsMCAmIzQzOzEsMTcxIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O25ldGxpbmsuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjb21tb24uaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IHBoeV90ZXN0X3JlcV9pbmZvIHtcbiYjNDM7XHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhIHtcbiYjNDM7XHRzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSBiYXNlO1xuJiM0MztcdHN0cnVjdCBldGh0b29sX3BoeV90ZXN0IHRlc3Q7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBIWV9URVNUX1JFUERBVEEoX19yZXBseV9iYXNlKSBcXFxuJiM0MztcdGNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhLCBiYXNlKVxuJiM0MztcbiYjNDM7LyogUEhZX1RFU1RfR0VUICovXG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FICYjNDM7IDFdID0ge1xuJiM0MztcdFtFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXVx0PSBOTEFfUE9MSUNZX05FU1RFRChldGhubF9oZWFkZXJfcG9saWN5KSxcbiYjNDM7XHRbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuJiM0MztcdFtFVEhUT09MX0FfUEhZX1RFU1RfTEFORV1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGh5X3Rlc3RfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuJiM0MztcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7XHQvKiBibG9ja19pZCAqL1xuJiM0MztcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MztcdC8qIGxhbmUgKi9cbiYjNDM7XHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7XHQvKiB0eF9wYXR0ZXJuICovXG4mIzQzO1x0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzO1x0LyogcnhfcGF0dGVybiAqL1xuJiM0MztcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MztcdC8qIGFjdGl2ZV90ZXN0cyAqL1xuJiM0MztcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSAgJiM0MztcdC8qIGNoZWNrZXJfbG9jayAqL1xuJiM0MztcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTY0KSkgJiM0MztcdC8qIGVycm9yX2NvdW50ICovXG4mIzQzO1x0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1NjQpKTtcdC8qIHRvdGFsX2JpdHNfc2VudCAqL1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBoeV90ZXN0X3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSxcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhICpkYXRhID0gUEhZX1RFU1RfUkVQREFUQShyZXBseV9iYXNlKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmVwbHlfYmFzZS1cdTAwM2VkZXY7XG4mIzQzO1x0c3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby1cdTAwM2VhdHRycztcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X3BoeV90ZXN0KVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0LCAwLCBzaXplb2YoZGF0YS1cdTAwM2V0ZXN0KSk7XG4mIzQzO1xuJiM0MztcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKSB7XG4mIzQzO1x0XHRkYXRhLVx1MDAzZXRlc3QuYmxvY2tfaWQgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKTtcbiYjNDM7XHRcdGRhdGEtXHUwMDNldGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0JMT0NLX0lEO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKSB7XG4mIzQzO1x0XHRkYXRhLVx1MDAzZXRlc3QubGFuZSA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXSk7XG4mIzQzO1x0XHRkYXRhLVx1MDAzZXRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9MQU5FO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfcGh5X3Rlc3QoZGV2LCBcdTAwMjZkYXRhLVx1MDAzZXRlc3QpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBoeV90ZXN0X2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhICpkYXRhID0gUEhZX1RFU1RfUkVQREFUQShyZXBseV9iYXNlKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCAqdCA9IFx1MDAyNmRhdGEtXHUwMDNldGVzdDtcbiYjNDM7XG4mIzQzO1x0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lELCB0LVx1MDAzZWJsb2NrX2lkKSB8fFxuJiM0MztcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9MQU5FLCB0LVx1MDAzZWxhbmUpIHx8XG4mIzQzO1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk4sIHQtXHUwMDNldHhfcGF0dGVybikgfHxcbiYjNDM7XHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTiwgdC1cdTAwM2VyeF9wYXR0ZXJuKSB8fFxuJiM0MztcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9BQ1RJVkVfVEVTVFMsXG4mIzQzO1x0XHRcdHQtXHUwMDNlYWN0aXZlX3Rlc3RzKSB8fFxuJiM0MztcdCAgICBubGFfcHV0X3U4KHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0NIRUNLRVJfTE9DSywgdC1cdTAwM2VjaGVja2VyX2xvY2spIHx8XG4mIzQzO1x0ICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0VSUk9SX0NPVU5ULFxuJiM0MztcdFx0XHQgICAgICB0LVx1MDAzZWVycm9yX2NvdW50LCBFVEhUT09MX0FfUEhZX1RFU1RfVU5TUEVDKSB8fFxuJiM0MztcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9UT1RBTF9CSVRTX1NFTlQsXG4mIzQzO1x0XHRcdCAgICAgIHQtXHUwMDNldG90YWxfYml0c19zZW50LCBFVEhUT09MX0FfUEhZX1RFU1RfVU5TUEVDKSlcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcGh5X3Rlc3RfcmVxdWVzdF9vcHMgPSB7XG4mIzQzO1x0LnJlcXVlc3RfY21kXHQ9IEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVCxcbiYjNDM7XHQucmVwbHlfY21kXHQ9IEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVF9SRVBMWSxcbiYjNDM7XHQuaGRyX2F0dHJcdD0gRVRIVE9PTF9BX1BIWV9URVNUX0hFQURFUixcbiYjNDM7XHQucmVxX2luZm9fc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHBoeV90ZXN0X3JlcV9pbmZvKSxcbiYjNDM7XHQucmVwbHlfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhKSxcbiYjNDM7XHQucHJlcGFyZV9kYXRhXHQ9IHBoeV90ZXN0X3ByZXBhcmVfZGF0YSxcbiYjNDM7XHQucmVwbHlfc2l6ZVx0PSBwaHlfdGVzdF9yZXBseV9zaXplLFxuJiM0MztcdC5maWxsX3JlcGx5XHQ9IHBoeV90ZXN0X2ZpbGxfcmVwbHksXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBQSFlfVEVTVF9BQ1QgKi9cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV90ZXN0X2FjdF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9URVNUX01BWCAmIzQzOyAxXSA9IHtcbiYjNDM7XHRbRVRIVE9PTF9BX1BIWV9URVNUX0hFQURFUl1cdFx0PSBOTEFfUE9MSUNZX05FU1RFRChldGhubF9oZWFkZXJfcG9saWN5KSxcbiYjNDM7XHRbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4mIzQzO1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4mIzQzO1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4mIzQzO1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4mIzQzO1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9CRVJUX0FDVElPTl1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiYjNDM7XHRbRVRIVE9PTF9BX1BIWV9URVNUX0lOSkVDVF9FUlJPUl9DT1VOVF1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2ludCBldGhubF9hY3RfcGh5X3Rlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBldGhubF9yZXFfaW5mbyByZXFfaW5mbyA9IHt9O1xuJiM0MztcdHN0cnVjdCBubGF0dHIgKip0YiA9IGluZm8tXHUwMDNlYXR0cnM7XG4mIzQzO1x0c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgdGVzdCA9IHt9O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoXHUwMDI2cmVxX2luZm8sXG4mIzQzO1x0XHRcdFx0XHQgdGJbRVRIVE9PTF9BX1BIWV9URVNUX0hFQURFUl0sXG4mIzQzO1x0XHRcdFx0XHQgZ2VubF9pbmZvX25ldChpbmZvKSwgaW5mby1cdTAwM2VleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgdHJ1ZSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGRldiA9IHJlcV9pbmZvLmRldjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlc2V0X3BoeV90ZXN0KSB7XG4mIzQzO1x0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdGdvdG8gb3V0X2RldjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKSB7XG4mIzQzO1x0XHR0ZXN0LmJsb2NrX2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSk7XG4mIzQzO1x0XHR0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfQkxPQ0tfSUQ7XG4mIzQzO1x0fVxuJiM0MztcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfTEFORV0pIHtcbiYjNDM7XHRcdHRlc3QubGFuZSA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXSk7XG4mIzQzO1x0XHR0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfTEFORTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOXSkge1xuJiM0MztcdFx0dGVzdC50eF9wYXR0ZXJuID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dKTtcbiYjNDM7XHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9UWF9QQVRURVJOO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX1JYX1BBVFRFUk5dKSB7XG4mIzQzO1x0XHR0ZXN0LnJ4X3BhdHRlcm4gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl0pO1xuJiM0MztcdFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX1JYX1BBVFRFUk47XG4mIzQzO1x0fVxuJiM0MztcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkVSVF9BQ1RJT05dKSB7XG4mIzQzO1x0XHR0ZXN0LmJlcnRfYWN0aW9uID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OXSk7XG4mIzQzO1x0XHR0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfQkVSVF9BQ1RJT047XG4mIzQzO1x0fVxuJiM0MztcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXSkge1xuJiM0MztcdFx0dGVzdC5pbmplY3RfZXJyb3JfY291bnQgPVxuJiM0MztcdFx0XHRubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXSk7XG4mIzQzO1x0XHR0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfSU5KRUNUX0NPVU5UO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cnRubF9sb2NrKCk7XG4mIzQzO1x0cmV0ID0gZXRobmxfb3BzX2JlZ2luKGRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0X3J0bmw7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VzZXRfcGh5X3Rlc3QoZGV2LCBcdTAwMjZ0ZXN0KTtcbiYjNDM7XHRldGhubF9vcHNfY29tcGxldGUoZGV2KTtcbiYjNDM7XG4mIzQzO291dF9ydG5sOlxuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO291dF9kZXY6XG4mIzQzO1x0ZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9wdXQoXHUwMDI2cmVxX2luZm8pO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVRIVE9PTF9ORVRMSU5LJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXRobmxfYWN0X3BoeV90ZXN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgbmV3IGV0aHRvb2wgbmV0bGluayBtZXNzYWdlcyAoRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVCwgRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULCBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QpIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljaWVzLiBFdmVuIHRob3VnaCBubyBkcml2ZXJzIGN1cnJlbnRseSBpbXBsZW1lbnQgdGhlIHVuZGVybHlpbmcgZXRodG9vbCBvcGVyYXRpb25zLCB0aGUgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcsIHBvbGljeSB2YWxpZGF0aW9uLCBhbmQgaW5pdGlhbCBoYW5kbGVyIGZ1bmN0aW9ucyAobGlrZSBldGhubF9hY3RfcGh5X3Rlc3QpIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyLXNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDUwNmRkMTA4NjM4ZTVkNzdkMjNmMzBlZmRmMmNmN2ZhODZkZWU5YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDA1OjA2OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwKaW5kZXggNWRkNGQxYjVkOTRiYi4uMzYxZWIzYzY2NTc3MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sCkBAIC0yMTAsNiAmIzQzOzIxMCw1NSBAQCBkZWZpbml0aW9uczoKICAgICAgIC0KICAgICAgICAgbmFtZTogZGlzY2FyZAogICAgICAgICB2YWx1ZTogMzEKJiM0MzsgIC0KJiM0MzsgICAgbmFtZTogaW50Zi1jb21wb25lbnQKJiM0MzsgICAgdHlwZTogZW51bQomIzQzOyAgICBkb2M6IFR5cGUgb2YgaGFyZHdhcmUgY29tcG9uZW50IGluIHRoZSBpbnRlcmZhY2UuCiYjNDM7ICAgIGVudHJpZXM6CiYjNDM7ICAgICAgLSBtYWMKJiM0MzsgICAgICAtIHBoeQomIzQzOyAgICAgIC0gbW9kdWxlCiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IGludGYtc3VibGF5ZXIKJiM0MzsgICAgdHlwZTogZW51bQomIzQzOyAgICBkb2M6IDgwMi4zIHN1YmxheWVyIHdpdGhpbiBhIGNvbXBvbmVudC4KJiM0MzsgICAgZW50cmllczoKJiM0MzsgICAgICAtIG5vbmUKJiM0MzsgICAgICAtIHJzCiYjNDM7ICAgICAgLSBwY3MKJiM0MzsgICAgICAtIGZlYwomIzQzOyAgICAgIC0gcG1hCiYjNDM7ICAgICAgLSBwbWQKJiM0MzsgIC0KJiM0MzsgICAgbmFtZTogcGh5LXRlc3QtcGF0dGVybgomIzQzOyAgICB0eXBlOiBlbnVtCiYjNDM7ICAgIGRvYzogUEhZIHRlc3QgcGF0dGVybiB0eXBlcyBmb3IgUFJCUyBnZW5lcmF0aW9uL2NoZWNraW5nLgomIzQzOyAgICBlbnRyaWVzOgomIzQzOyAgICAgIC0gb2ZmCiYjNDM7ICAgICAgLSBwcmJzNwomIzQzOyAgICAgIC0gcHJiczkKJiM0MzsgICAgICAtIHByYnMxMQomIzQzOyAgICAgIC0gcHJiczEzCiYjNDM7ICAgICAgLSBwcmJzMTUKJiM0MzsgICAgICAtIHByYnMyMwomIzQzOyAgICAgIC0gcHJiczMxCiYjNDM7ICAgICAgLSBzc3BycQomIzQzOyAgICAgIC0gcHJiczEzcQomIzQzOyAgICAgIC0gcHJiczMxcQomIzQzOyAgICAgIC0gc3F1YXJlLW5yegomIzQzOyAgICAgIC0gc3F1YXJlLXBhbTQKJiM0MzsgICAgICAtIHR4LWxpbmVhcml0eQomIzQzOyAgICAgIC0gc2NyYW1ibGVkLWlkbGUKJiM0MzsgICAgICAtIGsyOC01CiYjNDM7ICAgICAgLSBrMjgtNwomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBwaHktdGVzdC1hY3Rpb24KJiM0MzsgICAgdHlwZTogZW51bQomIzQzOyAgICBkb2M6IEJFUlQgY29udHJvbCBhY3Rpb25zLgomIzQzOyAgICBlbnRyaWVzOgomIzQzOyAgICAgIC0gbm9uZQomIzQzOyAgICAgIC0gc3RhcnQKJiM0MzsgICAgICAtIHN0b3AKIAogYXR0cmlidXRlLXNldHM6CiAgIC0KQEAgLTE5MDUsNiAmIzQzOzE5NTQsMTE1IEBAIGF0dHJpYnV0ZS1zZXRzOgogICAgICAgICBuYW1lOiBsaW5rCiAgICAgICAgIHR5cGU6IG5lc3QKICAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IG1zZS1zbmFwc2hvdAomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBpbnRmLWJsb2NrCiYjNDM7ICAgIGRvYzogQSBzaW5nbGUgZnVuY3Rpb25hbCBibG9jayBpbiB0aGUgaW50ZXJmYWNlLgomIzQzOyAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGlkCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBjb21wb25lbnQKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZW51bTogaW50Zi1jb21wb25lbnQKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBzdWJsYXllcgomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBlbnVtOiBpbnRmLXN1YmxheWVyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogaW5zdGFuY2UKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZG9jOiB8CiYjNDM7ICAgICAgICAgIElkZW50aWZpZXMgdGhlIGhhcmR3YXJlIGVudGl0eSB3aGVuIG11bHRpcGxlIGluc3RhbmNlcyBvZgomIzQzOyAgICAgICAgICB0aGUgc2FtZSBjb21wb25lbnQgZXhpc3QgaW4gdGhlIGludGVyZmFjZS4gVGhlIGRyaXZlcgomIzQzOyAgICAgICAgICBhc3NpZ25zIGluc3RhbmNlIG51bWJlcnMgc2VxdWVudGlhbGx5IGJhc2VkIG9uIHBvc2l0aW9uIGluCiYjNDM7ICAgICAgICAgIHRoZSBwaHlzaWNhbCBwYXRoLiBEZWZhdWx0cyB0byAwIHdoZW4gb25seSBvbmUgaW5zdGFuY2Ugb2YKJiM0MzsgICAgICAgICAgYSBnaXZlbiBjb21wb25lbnQgZXhpc3RzLgomIzQzOyAgICAgICAgICBGb3IgUEhZOiBpbnN0YW5jZSAwIGlzIHRoZSBpbnRlcm5hbC9ob3N0LXNpZGUgUEhZLAomIzQzOyAgICAgICAgICBpbnN0YW5jZSAxIGlzIGFuIGV4dGVybmFsIFBIWSBmdXJ0aGVyIGFsb25nIHRoZSBwYXRoCiYjNDM7ICAgICAgICAgIHRvd2FyZCB0aGUgbGluZSBzaWRlLgomIzQzOyAgICAgICAgICBGb3IgTUFDOiBpbnN0YW5jZSAwIGlzIHRoZSBob3N0LWZhY2luZyBNQUMsIGluc3RhbmNlIDEgaXMKJiM0MzsgICAgICAgICAgYSBzZWNvbmRhcnkgTUFDIGZ1cnRoZXIgYWxvbmcgdGhlIGRhdGEgcGF0aCAoZS5nLiwgYmVoaW5kCiYjNDM7ICAgICAgICAgIGFuIGVtYmVkZGVkIHN3aXRjaCkuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogbmFtZQomIzQzOyAgICAgICAgdHlwZTogc3RyaW5nCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZGVwdGgKJiM0MzsgICAgICAgIHR5cGU6IHU4CiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogbGFuZXMKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGxvb3BiYWNrLXN1cHBvcnRlZAomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogc3VwcG9ydGVkLXR4LXBhdHRlcm5zCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBzdXBwb3J0ZWQtcngtcGF0dGVybnMKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGVycm9yLWluamVjdC1zdXBwb3J0ZWQKJiM0MzsgICAgICAgIHR5cGU6IGZsYWcKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBiZXJ0LXN1cHBvcnRlZAomIzQzOyAgICAgICAgdHlwZTogZmxhZwomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBpbnRmLWNhcHMKJiM0MzsgICAgZG9jOiBJbnRlcmZhY2UgY2FwYWJpbGl0aWVzIG1lc3NhZ2UuCiYjNDM7ICAgIGF0dHJpYnV0ZXM6CiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogaGVhZGVyCiYjNDM7ICAgICAgICB0eXBlOiBuZXN0CiYjNDM7ICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogaGVhZGVyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogYmxvY2tzCiYjNDM7ICAgICAgICB0eXBlOiBuZXN0CiYjNDM7ICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogaW50Zi1ibG9jawomIzQzOyAgICAgICAgbXVsdGktYXR0cjogdHJ1ZQomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBwaHktdGVzdAomIzQzOyAgICBkb2M6IFBIWSB0ZXN0IGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1cy4KJiM0MzsgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBoZWFkZXIKJiM0MzsgICAgICAgIHR5cGU6IG5lc3QKJiM0MzsgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBoZWFkZXIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBibG9jay1pZAomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogbGFuZQomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogdHgtcGF0dGVybgomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBlbnVtOiBwaHktdGVzdC1wYXR0ZXJuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogcngtcGF0dGVybgomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBlbnVtOiBwaHktdGVzdC1wYXR0ZXJuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogYmVydC1hY3Rpb24KJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZW51bTogcGh5LXRlc3QtYWN0aW9uCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogaW5qZWN0LWVycm9yLWNvdW50CiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBhY3RpdmUtdGVzdHMKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZG9jOiBCaXRtYXNrIG9mIGN1cnJlbnRseSBydW5uaW5nIHRlc3RzIChiaXQgMCA9IEJFUlQpLgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGNoZWNrZXItbG9jawomIzQzOyAgICAgICAgdHlwZTogdTgKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBlcnJvci1jb3VudAomIzQzOyAgICAgICAgdHlwZTogdTY0CiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogdG90YWwtYml0cy1zZW50CiYjNDM7ICAgICAgICB0eXBlOiB1NjQKIAogb3BlcmF0aW9uczoKICAgZW51bS1tb2RlbDogZGlyZWN0aW9uYWwKQEAgLTI4NTksNiAmIzQzOzMwMTcsNTQgQEAgb3BlcmF0aW9uczoKICAgICAgICAgICAgIC0gd29yc3QtY2hhbm5lbAogICAgICAgICAgICAgLSBsaW5rCiAgICAgICBkdW1wOiAqbXNlLWdldC1vcAomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogaW50Zi1jYXBzLWdldAomIzQzOyAgICAgIGRvYzogR2V0IGludGVyZmFjZSBjYXBhYmlsaXRpZXMgKGZ1bmN0aW9uYWwgYmxvY2sgbGF5b3V0KS4KJiM0MzsgICAgICBhdHRyaWJ1dGUtc2V0OiBpbnRmLWNhcHMKJiM0MzsgICAgICBkbzogJmFtcDtpbnRmLWNhcHMtZ2V0LW9wCiYjNDM7ICAgICAgICByZXF1ZXN0OgomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAgIC0gaGVhZGVyCiYjNDM7ICAgICAgICByZXBseToKJiM0MzsgICAgICAgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAgICAgICAtIGhlYWRlcgomIzQzOyAgICAgICAgICAgIC0gYmxvY2tzCiYjNDM7ICAgICAgZHVtcDogKmludGYtY2Fwcy1nZXQtb3AKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IHBoeS10ZXN0LWdldAomIzQzOyAgICAgIGRvYzogR2V0IFBIWSB0ZXN0IHN0YXR1cyAocGF0dGVybnMsIEJFUlQgY291bnRlcnMpLgomIzQzOyAgICAgIGF0dHJpYnV0ZS1zZXQ6IHBoeS10ZXN0CiYjNDM7ICAgICAgZG86CiYjNDM7ICAgICAgICByZXF1ZXN0OgomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAgIC0gaGVhZGVyCiYjNDM7ICAgICAgICAgICAgLSBibG9jay1pZAomIzQzOyAgICAgICAgICAgIC0gbGFuZQomIzQzOyAgICAgICAgcmVwbHk6CiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6CiYjNDM7ICAgICAgICAgICAgLSBoZWFkZXIKJiM0MzsgICAgICAgICAgICAtIGJsb2NrLWlkCiYjNDM7ICAgICAgICAgICAgLSBsYW5lCiYjNDM7ICAgICAgICAgICAgLSB0eC1wYXR0ZXJuCiYjNDM7ICAgICAgICAgICAgLSByeC1wYXR0ZXJuCiYjNDM7ICAgICAgICAgICAgLSBhY3RpdmUtdGVzdHMKJiM0MzsgICAgICAgICAgICAtIGNoZWNrZXItbG9jawomIzQzOyAgICAgICAgICAgIC0gZXJyb3ItY291bnQKJiM0MzsgICAgICAgICAgICAtIHRvdGFsLWJpdHMtc2VudAomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogcGh5LXRlc3QtYWN0CiYjNDM7ICAgICAgZG9jOiBDb25maWd1cmUgUEhZIHRlc3QgKHNldCBwYXR0ZXJucywgc3RhcnQvc3RvcCBCRVJULCBpbmplY3QgZXJyb3JzKS4KJiM0MzsgICAgICBhdHRyaWJ1dGUtc2V0OiBwaHktdGVzdAomIzQzOyAgICAgIGRvOgomIzQzOyAgICAgICAgcmVxdWVzdDoKJiM0MzsgICAgICAgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAgICAgICAtIGhlYWRlcgomIzQzOyAgICAgICAgICAgIC0gYmxvY2staWQKJiM0MzsgICAgICAgICAgICAtIGxhbmUKJiM0MzsgICAgICAgICAgICAtIHR4LXBhdHRlcm4KJiM0MzsgICAgICAgICAgICAtIHJ4LXBhdHRlcm4KJiM0MzsgICAgICAgICAgICAtIGJlcnQtYWN0aW9uCiYjNDM7ICAgICAgICAgICAgLSBpbmplY3QtZXJyb3ItY291bnQKIAogbWNhc3QtZ3JvdXBzOgogICBsaXN0OgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAppbmRleCAxMjY4M2I1ZDEyNWU0Li5mOTc0OGU3MzlmMDNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaApAQCAtMTE5Nyw2ICYjNDM7MTE5Nyw5MiBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7CiAgKiBTZWUgJmFtcDtzdHJ1Y3QgbmV0X2RldmljZSBhbmQgJmFtcDtzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZm9yIGRvY3VtZW50YXRpb24KICAqIG9mIHRoZSBnZW5lcmljIG5ldGRldiBmZWF0dXJlcyBpbnRlcmZhY2UuCiAgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIElOVEZfQ0FQU19NQVhfQkxPQ0tTCTE2CiYjNDM7I2RlZmluZSBJTlRGX0JMT0NLX05BTUVfTEVOCTMyCiYjNDM7CiYjNDM7I2RlZmluZSBMT09QQkFDS19TVVBQT1JUX0xPQ0FMCUJJVCgwKQomIzQzOyNkZWZpbmUgTE9PUEJBQ0tfU1VQUE9SVF9SRU1PVEUJQklUKDEpCiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayAtIFNpbmdsZSBmdW5jdGlvbmFsIGJsb2NrIGluIHRoZSBpbnRlcmZhY2UKJiM0MzsgKiBAaWQ6IFVuaXF1ZSBibG9jayBpZGVudGlmaWVyCiYjNDM7ICogQGNvbXBvbmVudDogSGFyZHdhcmUgY29tcG9uZW50IChNQUMsIFBIWSwgTU9EVUxFKQomIzQzOyAqIEBzdWJsYXllcjogODAyLjMgc3VibGF5ZXIgKFJTLCBQQ1MsIEZFQywgUE1BLCBQTUQsIG9yIE5PTkUpCiYjNDM7ICogQGluc3RhbmNlOiBJbmRleCB3aGVuIG11bHRpcGxlIGluc3RhbmNlcyBvZiBzYW1lIGNvbXBvbmVudCBleGlzdAomIzQzOyAqIEBuYW1lOiBEcml2ZXItY2hvc2VuIGxhYmVsCiYjNDM7ICogQGRlcHRoOiBPcmRlcmluZyB3aXRoaW4gc2FtZSAoY29tcG9uZW50LCBzdWJsYXllcikgdHVwbGUKJiM0MzsgKiBAbGFuZXM6IE51bWJlciBvZiBsYW5lcwomIzQzOyAqIEBsb29wYmFja19zdXBwb3J0ZWQ6IEJpdG1hc2sgb2Ygc3VwcG9ydGVkIGxvb3BiYWNrIGRpcmVjdGlvbnMKJiM0MzsgKiBAc3VwcG9ydGVkX3R4X3BhdHRlcm5zOiBCaXRtYXNrIG9mIHBhdHRlcm5zIHRoaXMgYmxvY2sgY2FuIGdlbmVyYXRlCiYjNDM7ICogQHN1cHBvcnRlZF9yeF9wYXR0ZXJuczogQml0bWFzayBvZiBwYXR0ZXJucyB0aGlzIGJsb2NrIGNhbiBjaGVjawomIzQzOyAqIEBlcnJvcl9pbmplY3Rfc3VwcG9ydGVkOiBCbG9jayBzdXBwb3J0cyBiaXQgZXJyb3IgaW5qZWN0aW9uCiYjNDM7ICogQGJlcnRfc3VwcG9ydGVkOiBCbG9jayBzdXBwb3J0cyBCRVJUIGNvdW50ZXJzCiYjNDM7ICovCiYjNDM7c3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayB7CiYjNDM7CXUzMiBpZDsKJiM0MzsJZW51bSBpbnRmX2NvbXBvbmVudCBjb21wb25lbnQ7CiYjNDM7CWVudW0gaW50Zl9zdWJsYXllciBzdWJsYXllcjsKJiM0MzsJdTMyIGluc3RhbmNlOwomIzQzOwljaGFyIG5hbWVbSU5URl9CTE9DS19OQU1FX0xFTl07CiYjNDM7CXU4IGRlcHRoOwomIzQzOwl1MzIgbGFuZXM7CiYjNDM7CXUzMiBsb29wYmFja19zdXBwb3J0ZWQ7CiYjNDM7CXUzMiBzdXBwb3J0ZWRfdHhfcGF0dGVybnM7CiYjNDM7CXUzMiBzdXBwb3J0ZWRfcnhfcGF0dGVybnM7CiYjNDM7CWJvb2wgZXJyb3JfaW5qZWN0X3N1cHBvcnRlZDsKJiM0MzsJYm9vbCBiZXJ0X3N1cHBvcnRlZDsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBldGh0b29sX2ludGZfY2FwcyAtIEludGVyZmFjZSBjYXBhYmlsaXRpZXMgKGFsbCBibG9ja3MpCiYjNDM7ICogQG51bV9ibG9ja3M6IE51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIGJsb2Nrc1tdCiYjNDM7ICogQGJsb2NrczogQXJyYXkgb2YgZnVuY3Rpb25hbCBibG9ja3MKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHMgewomIzQzOwl1MzIgbnVtX2Jsb2NrczsKJiM0MzsJc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayBibG9ja3NbSU5URl9DQVBTX01BWF9CTE9DS1NdOwomIzQzO307CiYjNDM7CiYjNDM7LyogQml0bWFzayBvZiB3aGljaCBldGh0b29sX3BoeV90ZXN0IGZpZWxkcyB3ZXJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkICovCiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfVFhfUEFUVEVSTgkJQklUKDApCiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfUlhfUEFUVEVSTgkJQklUKDEpCiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfQkVSVF9BQ1RJT04JCUJJVCgyKQomIzQzOyNkZWZpbmUgUEhZX1RFU1RfQ01EX0lOSkVDVF9DT1VOVAkJQklUKDMpCiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfTEFORQkJCUJJVCg0KQomIzQzOyNkZWZpbmUgUEhZX1RFU1RfQ01EX0JMT0NLX0lECQkJQklUKDUpCiYjNDM7CiYjNDM7LyogQml0bWFzayBvZiBjdXJyZW50bHkgYWN0aXZlIHRlc3RzIChyZWFkLW9ubHkpICovCiYjNDM7I2RlZmluZSBQSFlfVEVTVF9BQ1RJVkVfQkVSVAkJQklUKDApCiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgLSBQSFkgdGVzdCBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMKJiM0MzsgKiBAY21kOiBCaXRtYXNrIG9mIHdoaWNoIGZpZWxkcyBhcmUgdmFsaWQgKFBIWV9URVNUX0NNRF8qKQomIzQzOyAqIEBibG9ja19pZDogQmxvY2sgdG8gb3BlcmF0ZSBvbiAoZnJvbSBpbnRmLWNhcHMtZ2V0KQomIzQzOyAqIEBsYW5lOiBMYW5lIG51bWJlciAoMC1iYXNlZCkKJiM0MzsgKiBAdHhfcGF0dGVybjogVFggcGF0dGVybiBnZW5lcmF0b3Igc2V0dGluZwomIzQzOyAqIEByeF9wYXR0ZXJuOiBSWCBwYXR0ZXJuIGNoZWNrZXIgc2V0dGluZwomIzQzOyAqIEBiZXJ0X2FjdGlvbjogQkVSVCBzdGFydC9zdG9wIGNvbnRyb2wKJiM0MzsgKiBAaW5qZWN0X2Vycm9yX2NvdW50OiBOdW1iZXIgb2YgZXJyb3JzIHRvIGluamVjdAomIzQzOyAqIEBhY3RpdmVfdGVzdHM6IEJpdG1hc2sgb2YgcnVubmluZyB0ZXN0cyAoUEhZX1RFU1RfQUNUSVZFXyopCiYjNDM7ICogQGNoZWNrZXJfbG9jazogUlggY2hlY2tlciBsb2NrIHN0YXR1cyAocmVhZC1vbmx5KQomIzQzOyAqIEBlcnJvcl9jb3VudDogQkVSVCBlcnJvciBjb3VudGVyIChyZWFkLW9ubHkpCiYjNDM7ICogQHRvdGFsX2JpdHNfc2VudDogQkVSVCB0b3RhbCBiaXRzIGNvdW50ZXIgKHJlYWQtb25seSkKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCB7CiYjNDM7CXUzMiBjbWQ7CiYjNDM7CXUzMiBibG9ja19pZDsKJiM0MzsJdTMyIGxhbmU7CiYjNDM7CWVudW0gcGh5X3Rlc3RfcGF0dGVybiB0eF9wYXR0ZXJuOwomIzQzOwllbnVtIHBoeV90ZXN0X3BhdHRlcm4gcnhfcGF0dGVybjsKJiM0MzsJZW51bSBwaHlfdGVzdF9hY3Rpb24gYmVydF9hY3Rpb247CiYjNDM7CXUzMiBpbmplY3RfZXJyb3JfY291bnQ7CiYjNDM7CXUzMiBhY3RpdmVfdGVzdHM7CiYjNDM7CXU4IGNoZWNrZXJfbG9jazsKJiM0MzsJdTY0IGVycm9yX2NvdW50OwomIzQzOwl1NjQgdG90YWxfYml0c19zZW50OwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgZXRodG9vbF9vcHMgewogCXUzMiAgICAgc3VwcG9ydGVkX2lucHV0X3hmcm06ODsKIAl1MzIgICAgIGNhcF9saW5rX2xhbmVzX3N1cHBvcnRlZDoxOwpAQCAtMTM1NCw2ICYjNDM7MTQ0MCwxMiBAQCBzdHJ1Y3QgZXRodG9vbF9vcHMgewogCWludAkoKnNldF9tbSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfbW1fY2ZnICpjZmcsCiAJCQkgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiAJdm9pZAkoKmdldF9tbV9zdGF0cykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfbW1fc3RhdHMgKnN0YXRzKTsKJiM0MzsJaW50CSgqZ2V0X2ludGZfY2Fwcykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJIHN0cnVjdCBldGh0b29sX2ludGZfY2FwcyAqY2Fwcyk7CiYjNDM7CWludAkoKmdldF9waHlfdGVzdCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnRlc3QpOwomIzQzOwlpbnQJKCpzZXRfcGh5X3Rlc3QpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7CQkJCXN0cnVjdCBldGh0b29sX3BoeV90ZXN0ICp0ZXN0KTsKIH07CiAKIGludCBldGh0b29sX2NoZWNrX29wcyhjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaAppbmRleCA4MTM0YmFmNzg2MGYzLi4zMTAyYmI3YmEzMzdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmgKQEAgLTg5Myw2ICYjNDM7ODkzLDkgQEAgZW51bSB7CiAJRVRIVE9PTF9NU0dfUlNTX0NSRUFURV9BQ1QsCiAJRVRIVE9PTF9NU0dfUlNTX0RFTEVURV9BQ1QsCiAJRVRIVE9PTF9NU0dfTVNFX0dFVCwKJiM0MzsJRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVCwKJiM0MzsJRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULAomIzQzOwlFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QsCiAKIAlfX0VUSFRPT0xfTVNHX1VTRVJfQ05ULAogCUVUSFRPT0xfTVNHX1VTRVJfTUFYID0gKF9fRVRIVE9PTF9NU0dfVVNFUl9DTlQgLSAxKQpAQCAtOTU0LDYgJiM0Mzs5NTcsOCBAQCBlbnVtIHsKIAlFVEhUT09MX01TR19SU1NfQ1JFQVRFX05URiwKIAlFVEhUT09MX01TR19SU1NfREVMRVRFX05URiwKIAlFVEhUT09MX01TR19NU0VfR0VUX1JFUExZLAomIzQzOwlFVEhUT09MX01TR19JTlRGX0NBUFNfR0VUX1JFUExZLAomIzQzOwlFVEhUT09MX01TR19QSFlfVEVTVF9HRVRfUkVQTFksCiAKIAlfX0VUSFRPT0xfTVNHX0tFUk5FTF9DTlQsCiAJRVRIVE9PTF9NU0dfS0VSTkVMX01BWCA9IChfX0VUSFRPT0xfTVNHX0tFUk5FTF9DTlQgLSAxKQpAQCAtOTYxLDQgJiM0Mzs5NjYsMTAzIEBAIGVudW0gewogCiAjZGVmaW5lIEVUSFRPT0xfTUNHUlBfTU9OSVRPUl9OQU1FCSYjMzQ7bW9uaXRvciYjMzQ7CiAKJiM0MzsvKiBJbnRlcmZhY2UgY29tcG9uZW50IHR5cGVzICovCiYjNDM7ZW51bSBpbnRmX2NvbXBvbmVudCB7CiYjNDM7CUlOVEZfQ09NUE9ORU5UX01BQywKJiM0MzsJSU5URl9DT01QT05FTlRfUEhZLAomIzQzOwlJTlRGX0NPTVBPTkVOVF9NT0RVTEUsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBJbnRlcmZhY2Ugc3VibGF5ZXIgdHlwZXMgKi8KJiM0MztlbnVtIGludGZfc3VibGF5ZXIgewomIzQzOwlJTlRGX1NVQkxBWUVSX05PTkUsCiYjNDM7CUlOVEZfU1VCTEFZRVJfUlMsCiYjNDM7CUlOVEZfU1VCTEFZRVJfUENTLAomIzQzOwlJTlRGX1NVQkxBWUVSX0ZFQywKJiM0MzsJSU5URl9TVUJMQVlFUl9QTUEsCiYjNDM7CUlOVEZfU1VCTEFZRVJfUE1ELAomIzQzO307CiYjNDM7CiYjNDM7LyogQXR0cmlidXRlcyBvZiBhIHNpbmdsZSBpbnRlcmZhY2UgYmxvY2sgKi8KJiM0MztlbnVtIHsKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQkxPQ0tfSUQsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0JMT0NLX0NPTVBPTkVOVCwKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQkxPQ0tfU1VCTEFZRVIsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0JMT0NLX0lOU1RBTkNFLAomIzQzOwlFVEhUT09MX0FfSU5URl9CTE9DS19OQU1FLAomIzQzOwlFVEhUT09MX0FfSU5URl9CTE9DS19ERVBUSCwKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTEFORVMsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0JMT0NLX0xPT1BCQUNLX1NVUFBPUlRFRCwKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQkxPQ0tfVFhfUEFUVEVSTlMsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0JMT0NLX1JYX1BBVFRFUk5TLAomIzQzOwlFVEhUT09MX0FfSU5URl9CTE9DS19FUlJPUl9JTkpFQ1QsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0JMT0NLX0JFUlQsCiYjNDM7CiYjNDM7CV9fRVRIVE9PTF9BX0lOVEZfQkxPQ0tfQ05ULAomIzQzOwlFVEhUT09MX0FfSU5URl9CTE9DS19NQVggPSAoX19FVEhUT09MX0FfSU5URl9CTE9DS19DTlQgLSAxKQomIzQzO307CiYjNDM7CiYjNDM7LyogQXR0cmlidXRlcyBvZiBpbnRmLWNhcHMtZ2V0IG1lc3NhZ2UgKi8KJiM0MztlbnVtIHsKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQ0FQU19VTlNQRUMsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSLAomIzQzOwlFVEhUT09MX0FfSU5URl9DQVBTX0JMT0NLUywKJiM0MzsKJiM0MzsJX19FVEhUT09MX0FfSU5URl9DQVBTX0NOVCwKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQ0FQU19NQVggPSAoX19FVEhUT09MX0FfSU5URl9DQVBTX0NOVCAtIDEpCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBQSFkgdGVzdCBwYXR0ZXJuIHR5cGVzICovCiYjNDM7ZW51bSBwaHlfdGVzdF9wYXR0ZXJuIHsKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9PRkYsCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fUFJCUzcsCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fUFJCUzksCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fUFJCUzExLAomIzQzOwlQSFlfVEVTVF9QQVRURVJOX1BSQlMxMywKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9QUkJTMTUsCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fUFJCUzIzLAomIzQzOwlQSFlfVEVTVF9QQVRURVJOX1BSQlMzMSwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9TU1BSUSwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9QUkJTMTNRLAomIzQzOwlQSFlfVEVTVF9QQVRURVJOX1BSQlMzMVEsCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fU1FVQVJFX05SWiwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9TUVVBUkVfUEFNNCwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9UWF9MSU5FQVJJVFksCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fU0NSQU1CTEVEX0lETEUsCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fSzI4XzUsCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fSzI4XzcsCiYjNDM7CiYjNDM7CV9fUEhZX1RFU1RfUEFUVEVSTl9DT1VOVCwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9NQVggPSAoX19QSFlfVEVTVF9QQVRURVJOX0NPVU5UIC0gMSkKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFBIWSB0ZXN0IEJFUlQgYWN0aW9ucyAqLwomIzQzO2VudW0gcGh5X3Rlc3RfYWN0aW9uIHsKJiM0MzsJUEhZX1RFU1RfQUNUSU9OX05PTkUsCiYjNDM7CVBIWV9URVNUX0FDVElPTl9TVEFSVCwKJiM0MzsJUEhZX1RFU1RfQUNUSU9OX1NUT1AsCiYjNDM7CiYjNDM7CV9fUEhZX1RFU1RfQUNUSU9OX0NPVU5ULAomIzQzOwlQSFlfVEVTVF9BQ1RJT05fTUFYID0gKF9fUEhZX1RFU1RfQUNUSU9OX0NPVU5UIC0gMSkKJiM0Mzt9OwomIzQzOwomIzQzOy8qIEF0dHJpYnV0ZXMgb2YgcGh5LXRlc3QtZ2V0IC8gcGh5LXRlc3QtYWN0IG1lc3NhZ2VzICovCiYjNDM7ZW51bSB7CiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9VTlNQRUMsCiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9IRUFERVIsCiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9CTE9DS19JRCwKJiM0MzsJRVRIVE9PTF9BX1BIWV9URVNUX0xBTkUsCiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOLAomIzQzOwlFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTiwKJiM0MzsJRVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OLAomIzQzOwlFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5ULAomIzQzOwlFVEhUT09MX0FfUEhZX1RFU1RfQUNUSVZFX1RFU1RTLAomIzQzOwlFVEhUT09MX0FfUEhZX1RFU1RfQ0hFQ0tFUl9MT0NLLAomIzQzOwlFVEhUT09MX0FfUEhZX1RFU1RfRVJST1JfQ09VTlQsCiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9UT1RBTF9CSVRTX1NFTlQsCiYjNDM7CiYjNDM7CV9fRVRIVE9PTF9BX1BIWV9URVNUX0NOVCwKJiM0MzsJRVRIVE9PTF9BX1BIWV9URVNUX01BWCA9IChfX0VUSFRPT0xfQV9QSFlfVEVTVF9DTlQgLSAxKQomIzQzO307CiYjNDM7CiAjZW5kaWYgLyogX1VBUElfTElOVVhfRVRIVE9PTF9ORVRMSU5LX0dFTkVSQVRFRF9IICovCmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9NYWtlZmlsZSBiL25ldC9ldGh0b29sL01ha2VmaWxlCmluZGV4IDYyOWMxMDkxNjY3MGUuLjdkZDJjNTYyNGNlZGYgMTAwNjQ0Ci0tLSBhL25ldC9ldGh0b29sL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL01ha2VmaWxlCkBAIC05LDQgJiM0Mzs5LDQgQEAgZXRodG9vbF9ubC15CTo9IG5ldGxpbmsubyBiaXRzZXQubyBzdHJzZXQubyBsaW5raW5mby5vIGxpbmttb2Rlcy5vIHJzcy5vIFwKIAkJICAgY2hhbm5lbHMubyBjb2FsZXNjZS5vIHBhdXNlLm8gZWVlLm8gdHNpbmZvLm8gY2FibGV0ZXN0Lm8gXAogCQkgICB0dW5uZWxzLm8gZmVjLm8gZWVwcm9tLm8gc3RhdHMubyBwaGNfdmNsb2Nrcy5vIG1tLm8gXAogCQkgICBtb2R1bGUubyBjbWlzX2Z3X3VwZGF0ZS5vIGNtaXNfY2RiLm8gcHNlLXBkLm8gcGxjYS5vIFwKLQkJICAgcGh5Lm8gdHNjb25maWcubyBtc2UubwomIzQzOwkJICAgcGh5Lm8gdHNjb25maWcubyBtc2UubyBpbnRmX2NhcHMubyBwaHl0ZXN0Lm8KZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL2ludGZfY2Fwcy5jIGIvbmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZTQ1Y2NjNGI4OGM5ZgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL2ludGZfY2Fwcy5jCkBAIC0wLDAgJiM0MzsxLDEzMCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O25ldGxpbmsuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtjb21tb24uaCYjMzQ7CiYjNDM7CiYjNDM7c3RydWN0IGludGZfY2Fwc19yZXFfaW5mbyB7CiYjNDM7CXN0cnVjdCBldGhubF9yZXFfaW5mbyBiYXNlOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhIHsKJiM0MzsJc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgYmFzZTsKJiM0MzsJc3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzIGNhcHM7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIElOVEZfQ0FQU19SRVBEQVRBKF9fcmVwbHlfYmFzZSkgXAomIzQzOwljb250YWluZXJfb2YoX19yZXBseV9iYXNlLCBzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGEsIGJhc2UpCiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3lbRVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIgJiM0MzsgMV0gPSB7CiYjNDM7CVtFVEhUT09MX0FfSU5URl9DQVBTX0hFQURFUl0gPQomIzQzOwkJTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGludGZfY2Fwc19yZXBseV9zaXplKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhICpkYXRhID0gSU5URl9DQVBTX1JFUERBVEEocmVwbHlfYmFzZSk7CiYjNDM7CWludCBsZW4gPSAwOwomIzQzOwl1MzIgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGRhdGEtJmd0O2NhcHMubnVtX2Jsb2NrczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoMCk7CQkvKiBuZXN0ZWQgYmxvY2sgKi8KJiM0MzsJCWxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwkvKiBpZCAqLwomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CS8qIGNvbXBvbmVudCAqLwomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CS8qIHN1YmxheWVyICovCiYjNDM7CQlsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsJLyogaW5zdGFuY2UgKi8KJiM0MzsJCWxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoSU5URl9CTE9DS19OQU1FX0xFTik7IC8qIG5hbWUgKi8KJiM0MzsJCWxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSk7CS8qIGRlcHRoICovCiYjNDM7CQlsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsJLyogbGFuZXMgKi8KJiM0MzsJCWxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwkvKiBsb29wYmFja19zdXBwb3J0ZWQgKi8KJiM0MzsJCWxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwkvKiB0eF9wYXR0ZXJucyAqLwomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CS8qIHJ4X3BhdHRlcm5zICovCiYjNDM7CQlsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKDApOwkJLyogZXJyb3JfaW5qZWN0IChmbGFnKSAqLwomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZSgwKTsJCS8qIGJlcnQgKGZsYWcpICovCiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogb3V0ZXIgQkxPQ0tTIG5lc3QgKi8KJiM0MzsJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZSgwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGxlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsCiYjNDM7CQkJCSAgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UsCiYjNDM7CQkJCSAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSAqZGF0YSA9IElOVEZfQ0FQU19SRVBEQVRBKHJlcGx5X2Jhc2UpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmVwbHlfYmFzZS0mZ3Q7ZGV2OwomIzQzOwomIzQzOwlpZiAoIWRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9pbnRmX2NhcHMpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldHVybiBkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtnZXRfaW50Zl9jYXBzKGRldiwgJmFtcDtkYXRhLSZndDtjYXBzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBpbnRmX2NhcHNfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQljb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLAomIzQzOwkJCQljb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSAqZGF0YSA9IElOVEZfQ0FQU19SRVBEQVRBKHJlcGx5X2Jhc2UpOwomIzQzOwlzdHJ1Y3QgbmxhdHRyICpibG9ja3NfYXR0cjsKJiM0MzsJdTMyIGk7CiYjNDM7CiYjNDM7CWJsb2Nrc19hdHRyID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBFVEhUT09MX0FfSU5URl9DQVBTX0JMT0NLUyk7CiYjNDM7CWlmICghYmxvY2tzX2F0dHIpCiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGF0YS0mZ3Q7Y2Fwcy5udW1fYmxvY2tzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJY29uc3Qgc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayAqYiA9ICZhbXA7ZGF0YS0mZ3Q7Y2Fwcy5ibG9ja3NbaV07CiYjNDM7CQlzdHJ1Y3QgbmxhdHRyICpibG9ja19hdHRyOwomIzQzOwomIzQzOwkJYmxvY2tfYXR0ciA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgMCk7CiYjNDM7CQlpZiAoIWJsb2NrX2F0dHIpCiYjNDM7CQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CiYjNDM7CQlpZiAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19JRCwgYi0mZ3Q7aWQpIHx8CiYjNDM7CQkgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19DT01QT05FTlQsCiYjNDM7CQkJCWItJmd0O2NvbXBvbmVudCkgfHwKJiM0MzsJCSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX1NVQkxBWUVSLAomIzQzOwkJCQliLSZndDtzdWJsYXllcikgfHwKJiM0MzsJCSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0lOU1RBTkNFLAomIzQzOwkJCQliLSZndDtpbnN0YW5jZSkgfHwKJiM0MzsJCSAgICBubGFfcHV0X3N0cmluZyhza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX05BTUUsIGItJmd0O25hbWUpIHx8CiYjNDM7CQkgICAgbmxhX3B1dF91OChza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0RFUFRILCBiLSZndDtkZXB0aCkgfHwKJiM0MzsJCSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0xBTkVTLCBiLSZndDtsYW5lcykgfHwKJiM0MzsJCSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0xPT1BCQUNLX1NVUFBPUlRFRCwKJiM0MzsJCQkJYi0mZ3Q7bG9vcGJhY2tfc3VwcG9ydGVkKSB8fAomIzQzOwkJICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfVFhfUEFUVEVSTlMsCiYjNDM7CQkJCWItJmd0O3N1cHBvcnRlZF90eF9wYXR0ZXJucykgfHwKJiM0MzsJCSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX1JYX1BBVFRFUk5TLAomIzQzOwkJCQliLSZndDtzdXBwb3J0ZWRfcnhfcGF0dGVybnMpKQomIzQzOwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwomIzQzOwkJaWYgKGItJmd0O2Vycm9yX2luamVjdF9zdXBwb3J0ZWQgJmFtcDsmYW1wOwomIzQzOwkJICAgIG5sYV9wdXRfZmxhZyhza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0VSUk9SX0lOSkVDVCkpCiYjNDM7CQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CQlpZiAoYi0mZ3Q7YmVydF9zdXBwb3J0ZWQgJmFtcDsmYW1wOwomIzQzOwkJICAgIG5sYV9wdXRfZmxhZyhza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0JFUlQpKQomIzQzOwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwomIzQzOwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwomIzQzOwomIzQzOwkJbmxhX25lc3RfZW5kKHNrYiwgYmxvY2tfYXR0cik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmxhX25lc3RfZW5kKHNrYiwgYmxvY2tzX2F0dHIpOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztubGFfcHV0X2ZhaWx1cmU6CiYjNDM7CW5sYV9uZXN0X2NhbmNlbChza2IsIGJsb2Nrc19hdHRyKTsKJiM0MzsJcmV0dXJuIC1FTVNHU0laRTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcyA9IHsKJiM0MzsJLnJlcXVlc3RfY21kCT0gRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVCwKJiM0MzsJLnJlcGx5X2NtZAk9IEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRfUkVQTFksCiYjNDM7CS5oZHJfYXR0cgk9IEVUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSLAomIzQzOwkucmVxX2luZm9fc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaW50Zl9jYXBzX3JlcV9pbmZvKSwKJiM0MzsJLnJlcGx5X2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGEpLAomIzQzOwkucHJlcGFyZV9kYXRhCT0gaW50Zl9jYXBzX3ByZXBhcmVfZGF0YSwKJiM0MzsJLnJlcGx5X3NpemUJPSBpbnRmX2NhcHNfcmVwbHlfc2l6ZSwKJiM0MzsJLmZpbGxfcmVwbHkJPSBpbnRmX2NhcHNfZmlsbF9yZXBseSwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5jIGIvbmV0L2V0aHRvb2wvbmV0bGluay5jCmluZGV4IDFhZjM5NWI1NDMzMGUuLjU2ZTVjODExNDU0YmIgMTAwNjQ0Ci0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmMKQEAgLTQzMSw2ICYjNDM7NDMxLDggQEAgZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tfX0VUSFRPT0xfTVNHX1VTRVJfQ05UXSA9IHsKIAlbRVRIVE9PTF9NU0dfVFNDT05GSUdfU0VUXQk9ICZhbXA7ZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHMsCiAJW0VUSFRPT0xfTVNHX1BIWV9HRVRdCQk9ICZhbXA7ZXRobmxfcGh5X3JlcXVlc3Rfb3BzLAogCVtFVEhUT09MX01TR19NU0VfR0VUXQkJPSAmYW1wO2V0aG5sX21zZV9yZXF1ZXN0X29wcywKJiM0MzsJW0VUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRdCT0gJmFtcDtldGhubF9pbnRmX2NhcHNfcmVxdWVzdF9vcHMsCiYjNDM7CVtFVEhUT09MX01TR19QSFlfVEVTVF9HRVRdCT0gJmFtcDtldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmV0aG5sX2R1bXBfY29udGV4dChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCkBAIC0xNTcyLDYgJiM0MzsxNTc0LDI4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9vcHMgZXRodG9vbF9nZW5sX29wc1tdID0gewogCQkucG9saWN5ID0gZXRobmxfbXNlX2dldF9wb2xpY3ksCiAJCS5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9tc2VfZ2V0X3BvbGljeSkgLSAxLAogCX0sCiYjNDM7CXsKJiM0MzsJCS5jbWQJPSBFVEhUT09MX01TR19JTlRGX0NBUFNfR0VULAomIzQzOwkJLmRvaXQJPSBldGhubF9kZWZhdWx0X2RvaXQsCiYjNDM7CQkuc3RhcnQJPSBldGhubF9kZWZhdWx0X3N0YXJ0LAomIzQzOwkJLmR1bXBpdAk9IGV0aG5sX2RlZmF1bHRfZHVtcGl0LAomIzQzOwkJLmRvbmUJPSBldGhubF9kZWZhdWx0X2RvbmUsCiYjNDM7CQkucG9saWN5ID0gZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3ksCiYjNDM7CQkubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3kpIC0gMSwKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLmNtZAk9IEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVCwKJiM0MzsJCS5kb2l0CT0gZXRobmxfZGVmYXVsdF9kb2l0LAomIzQzOwkJLnBvbGljeSA9IGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3ksCiYjNDM7CQkubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcGh5X3Rlc3RfZ2V0X3BvbGljeSkgLSAxLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkuY21kCT0gRVRIVE9PTF9NU0dfUEhZX1RFU1RfQUNULAomIzQzOwkJLmZsYWdzCT0gR0VOTF9VTlNfQURNSU5fUEVSTSwKJiM0MzsJCS5kb2l0CT0gZXRobmxfYWN0X3BoeV90ZXN0LAomIzQzOwkJLnBvbGljeSA9IGV0aG5sX3BoeV90ZXN0X2FjdF9wb2xpY3ksCiYjNDM7CQkubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeSkgLSAxLAomIzQzOwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBldGh0b29sX25sX21jZ3Jwc1tdID0gewpkaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5oIGIvbmV0L2V0aHRvb2wvbmV0bGluay5oCmluZGV4IDNlOTY5YTA3MGY5ZmUuLjFjYWJhNjBkODNjNDMgMTAwNjQ0Ci0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmgKQEAgLTQ3NCw2ICYjNDM7NDc0LDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tbV9yZXF1ZXN0X29wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcGh5X3JlcXVlc3Rfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfbXNlX3JlcXVlc3Rfb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfaW50Zl9jYXBzX3JlcXVlc3Rfb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcGh5X3Rlc3RfcmVxdWVzdF9vcHM7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5W0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgJiM0MzsgMV07CiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeV9zdGF0c1tFVEhUT09MX0FfSEVBREVSX0ZMQUdTICYjNDM7IDFdOwpAQCAtNTMwLDYgJiM0Mzs1MzIsMTEgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfSEVBREVSICYjNDM7IDFdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX2dldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX0hFQURFUiAmIzQzOyAxXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19zZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19NQVggJiM0MzsgMV07CiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfbXNlX2dldF9wb2xpY3lbRVRIVE9PTF9BX01TRV9IRUFERVIgJiM0MzsgMV07CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2ludGZfY2Fwc19nZXRfcG9saWN5W0VUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSICYjNDM7IDFdOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FICYjNDM7IDFdOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9NQVggJiM0MzsgMV07CiYjNDM7CiYjNDM7aW50IGV0aG5sX2FjdF9waHlfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKIAogaW50IGV0aG5sX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKIGludCBldGhubF9hY3RfY2FibGVfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BoeXRlc3QuYyBiL25ldC9ldGh0b29sL3BoeXRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5kZWRjZDAzNmI3YzJlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvcGh5dGVzdC5jCkBAIC0wLDAgJiM0MzsxLDE3MSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O25ldGxpbmsuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtjb21tb24uaCYjMzQ7CiYjNDM7CiYjNDM7c3RydWN0IHBoeV90ZXN0X3JlcV9pbmZvIHsKJiM0MzsJc3RydWN0IGV0aG5sX3JlcV9pbmZvIGJhc2U7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcGh5X3Rlc3RfcmVwbHlfZGF0YSB7CiYjNDM7CXN0cnVjdCBldGhubF9yZXBseV9kYXRhIGJhc2U7CiYjNDM7CXN0cnVjdCBldGh0b29sX3BoeV90ZXN0IHRlc3Q7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIFBIWV9URVNUX1JFUERBVEEoX19yZXBseV9iYXNlKSBcCiYjNDM7CWNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhLCBiYXNlKQomIzQzOwomIzQzOy8qIFBIWV9URVNUX0dFVCAqLwomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkUgJiM0MzsgMV0gPSB7CiYjNDM7CVtFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXQk9IE5MQV9QT0xJQ1lfTkVTVEVEKGV0aG5sX2hlYWRlcl9wb2xpY3kpLAomIzQzOwlbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiYjNDM7CVtFVEhUT09MX0FfUEhZX1RFU1RfTEFORV0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBwaHlfdGVzdF9yZXBseV9zaXplKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlKQomIzQzO3sKJiM0MzsJcmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOwkvKiBibG9ja19pZCAqLwomIzQzOwkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7CS8qIGxhbmUgKi8KJiM0MzsJICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOwkvKiB0eF9wYXR0ZXJuICovCiYjNDM7CSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MzsJLyogcnhfcGF0dGVybiAqLwomIzQzOwkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7CS8qIGFjdGl2ZV90ZXN0cyAqLwomIzQzOwkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSkgICYjNDM7CS8qIGNoZWNrZXJfbG9jayAqLwomIzQzOwkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU2NCkpICYjNDM7CS8qIGVycm9yX2NvdW50ICovCiYjNDM7CSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTY0KSk7CS8qIHRvdGFsX2JpdHNfc2VudCAqLwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBoeV90ZXN0X3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLAomIzQzOwkJCQkgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UsCiYjNDM7CQkJCSBjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeV90ZXN0X3JlcGx5X2RhdGEgKmRhdGEgPSBQSFlfVEVTVF9SRVBEQVRBKHJlcGx5X2Jhc2UpOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmVwbHlfYmFzZS0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLSZndDthdHRyczsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtnZXRfcGh5X3Rlc3QpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CW1lbXNldCgmYW1wO2RhdGEtJmd0O3Rlc3QsIDAsIHNpemVvZihkYXRhLSZndDt0ZXN0KSk7CiYjNDM7CiYjNDM7CWlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKSB7CiYjNDM7CQlkYXRhLSZndDt0ZXN0LmJsb2NrX2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSk7CiYjNDM7CQlkYXRhLSZndDt0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfQkxPQ0tfSUQ7CiYjNDM7CX0KJiM0MzsJaWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXSkgewomIzQzOwkJZGF0YS0mZ3Q7dGVzdC5sYW5lID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKTsKJiM0MzsJCWRhdGEtJmd0O3Rlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9MQU5FOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtnZXRfcGh5X3Rlc3QoZGV2LCAmYW1wO2RhdGEtJmd0O3Rlc3QpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBoeV90ZXN0X2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgICAgICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSwKJiM0MzsJCQkgICAgICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcGh5X3Rlc3RfcmVwbHlfZGF0YSAqZGF0YSA9IFBIWV9URVNUX1JFUERBVEEocmVwbHlfYmFzZSk7CiYjNDM7CWNvbnN0IHN0cnVjdCBldGh0b29sX3BoeV90ZXN0ICp0ID0gJmFtcDtkYXRhLSZndDt0ZXN0OwomIzQzOwomIzQzOwlpZiAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSUQsIHQtJmd0O2Jsb2NrX2lkKSB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfTEFORSwgdC0mZ3Q7bGFuZSkgfHwKJiM0MzsJICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk4sIHQtJmd0O3R4X3BhdHRlcm4pIHx8CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOLCB0LSZndDtyeF9wYXR0ZXJuKSB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfQUNUSVZFX1RFU1RTLAomIzQzOwkJCXQtJmd0O2FjdGl2ZV90ZXN0cykgfHwKJiM0MzsJICAgIG5sYV9wdXRfdTgoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfQ0hFQ0tFUl9MT0NLLCB0LSZndDtjaGVja2VyX2xvY2spIHx8CiYjNDM7CSAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9FUlJPUl9DT1VOVCwKJiM0MzsJCQkgICAgICB0LSZndDtlcnJvcl9jb3VudCwgRVRIVE9PTF9BX1BIWV9URVNUX1VOU1BFQykgfHwKJiM0MzsJICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX1RPVEFMX0JJVFNfU0VOVCwKJiM0MzsJCQkgICAgICB0LSZndDt0b3RhbF9iaXRzX3NlbnQsIEVUSFRPT0xfQV9QSFlfVEVTVF9VTlNQRUMpKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcyA9IHsKJiM0MzsJLnJlcXVlc3RfY21kCT0gRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULAomIzQzOwkucmVwbHlfY21kCT0gRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VUX1JFUExZLAomIzQzOwkuaGRyX2F0dHIJPSBFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSLAomIzQzOwkucmVxX2luZm9fc2l6ZQk9IHNpemVvZihzdHJ1Y3QgcGh5X3Rlc3RfcmVxX2luZm8pLAomIzQzOwkucmVwbHlfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhKSwKJiM0MzsJLnByZXBhcmVfZGF0YQk9IHBoeV90ZXN0X3ByZXBhcmVfZGF0YSwKJiM0MzsJLnJlcGx5X3NpemUJPSBwaHlfdGVzdF9yZXBseV9zaXplLAomIzQzOwkuZmlsbF9yZXBseQk9IHBoeV90ZXN0X2ZpbGxfcmVwbHksCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBQSFlfVEVTVF9BQ1QgKi8KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9NQVggJiM0MzsgMV0gPSB7CiYjNDM7CVtFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXQkJPSBOTEFfUE9MSUNZX05FU1RFRChldGhubF9oZWFkZXJfcG9saWN5KSwKJiM0MzsJW0VUSFRPT0xfQV9QSFlfVEVTVF9CTE9DS19JRF0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKJiM0MzsJW0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAomIzQzOwlbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiYjNDM7CVtFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKJiM0MzsJW0VUSFRPT0xfQV9QSFlfVEVTVF9CRVJUX0FDVElPTl0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAomIzQzOwlbRVRIVE9PTF9BX1BIWV9URVNUX0lOSkVDVF9FUlJPUl9DT1VOVF0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAomIzQzO307CiYjNDM7CiYjNDM7aW50IGV0aG5sX2FjdF9waHlfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IGV0aG5sX3JlcV9pbmZvIHJlcV9pbmZvID0ge307CiYjNDM7CXN0cnVjdCBubGF0dHIgKip0YiA9IGluZm8tJmd0O2F0dHJzOwomIzQzOwlzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCB0ZXN0ID0ge307CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGV0aG5sX3BhcnNlX2hlYWRlcl9kZXZfZ2V0KCZhbXA7cmVxX2luZm8sCiYjNDM7CQkJCQkgdGJbRVRIVE9PTF9BX1BIWV9URVNUX0hFQURFUl0sCiYjNDM7CQkJCQkgZ2VubF9pbmZvX25ldChpbmZvKSwgaW5mby0mZ3Q7ZXh0YWNrLAomIzQzOwkJCQkJIHRydWUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWRldiA9IHJlcV9pbmZvLmRldjsKJiM0MzsKJiM0MzsJaWYgKCFkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtzZXRfcGh5X3Rlc3QpIHsKJiM0MzsJCXJldCA9IC1FT1BOT1RTVVBQOwomIzQzOwkJZ290byBvdXRfZGV2OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKSB7CiYjNDM7CQl0ZXN0LmJsb2NrX2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSk7CiYjNDM7CQl0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfQkxPQ0tfSUQ7CiYjNDM7CX0KJiM0MzsJaWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXSkgewomIzQzOwkJdGVzdC5sYW5lID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKTsKJiM0MzsJCXRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9MQU5FOwomIzQzOwl9CiYjNDM7CWlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfVFhfUEFUVEVSTl0pIHsKJiM0MzsJCXRlc3QudHhfcGF0dGVybiA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOXSk7CiYjNDM7CQl0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfVFhfUEFUVEVSTjsKJiM0MzsJfQomIzQzOwlpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX1JYX1BBVFRFUk5dKSB7CiYjNDM7CQl0ZXN0LnJ4X3BhdHRlcm4gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl0pOwomIzQzOwkJdGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX1JYX1BBVFRFUk47CiYjNDM7CX0KJiM0MzsJaWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9CRVJUX0FDVElPTl0pIHsKJiM0MzsJCXRlc3QuYmVydF9hY3Rpb24gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfQkVSVF9BQ1RJT05dKTsKJiM0MzsJCXRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CRVJUX0FDVElPTjsKJiM0MzsJfQomIzQzOwlpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0lOSkVDVF9FUlJPUl9DT1VOVF0pIHsKJiM0MzsJCXRlc3QuaW5qZWN0X2Vycm9yX2NvdW50ID0KJiM0MzsJCQlubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXSk7CiYjNDM7CQl0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfSU5KRUNUX0NPVU5UOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJ0bmxfbG9jaygpOwomIzQzOwlyZXQgPSBldGhubF9vcHNfYmVnaW4oZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dF9ydG5sOwomIzQzOwomIzQzOwlyZXQgPSBkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtzZXRfcGh5X3Rlc3QoZGV2LCAmYW1wO3Rlc3QpOwomIzQzOwlldGhubF9vcHNfY29tcGxldGUoZGV2KTsKJiM0MzsKJiM0MztvdXRfcnRubDoKJiM0MzsJcnRubF91bmxvY2soKTsKJiM0MztvdXRfZGV2OgomIzQzOwlldGhubF9wYXJzZV9oZWFkZXJfZGV2X3B1dCgmYW1wO3JlcV9pbmZvKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDEzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEV0aHRvb2wgTmV0bGluayBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBmZXcgbmV3IGV0aHRvb2wgbmV0bGluayBtZXNzYWdlczogYEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRgLCBgRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VUYCwgYW5kIGBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1RgLiBUaGVzZSBhcmUgc3BlY2lmaWNhbGx5IGFpbWVkIGF0IHJldHJpZXZpbmcgaW50ZXJmYWNlIGNhcGFiaWxpdGllcyDigJMgc291bmRzIGxpa2UgYSBmdW5jdGlvbmFsIGJsb2NrIGRpYWdyYW0g4oCTIGFuZCBnZXR0aW5nL3NldHRpbmcgUEhZIHRlc3Qgc3RhdHVzLCB3aGljaCBpbmNsdWRlcyB0aGluZ3MgbGlrZSBwYXR0ZXJuIGNvbmZpZ3VyYXRpb25zIGFuZCBCRVJUIGNvdW50ZXJzLiBTZWVtcyByZWFzb25hYmxlLCBnaXZlbiB0aGUgZGlyZWN0aW9uIHdlJiMzOTt2ZSBiZWVuIGdvaW5nIHdpdGggZXRodG9vbC4KClRoZSBjaGFuZ2VzIGFyZSBmYWlybHkgY29uY2VudHJhdGVkOiB0aGUgY29yZSBgbmV0L2V0aHRvb2wvbmV0bGluay5jYCwgdGhlIGhlYWRlciBpbiBgbmV0L2V0aHRvb2wvbmV0bGluay5oYCwgdGhlIGBNYWtlZmlsZWAsIGFuZCB0aGVuIG5ldyBzb3VyY2UgZmlsZXMgYG5ldC9ldGh0b29sL2ludGZfY2Fwcy5jYCBhbmQgYG5ldC9ldGh0b29sL3BoeXRlc3QuY2AuIE9mIGNvdXJzZSwgd2UgaGF2ZSB0aGUgY29ycmVzcG9uZGluZyB1cGRhdGVzIHRvIHRoZSBldGh0b29sIGtlcm5lbCBoZWFkZXJzIGluIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgYW5kIHRoZSB1c2VyLXNwYWNlIEFQSSBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaGAuIFN0YW5kYXJkIHN0dWZmLgoKTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVzZSBuZXcgbWVzc2FnZXMgYXJlIGFjdHVhbGx5IGJlaW5nIGhhbmRsZWQuIE9rYXksIHRoZXkmIzM5O3JlIGFkZGVkIHRvIGBldGh0b29sX2dlbmxfb3BzYCB3aXRoaW4gYG5ldC9ldGh0b29sL25ldGxpbmsuY2AsIHRoYXQgc2VlbXMgcmlnaHQuIExvb2tpbmcgYXQgdGhlIGltcGxlbWVudGF0aW9uLCBgRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVGAgYW5kIGBFVEhUT09MX01TR19QSFlfVEVTVF9HRVRgIGFyZSB1c2luZyBgZXRobmxfZGVmYXVsdF9kb2l0YCDigJMgd2hpY2ggbGlrZWx5IGltcGxpZXMgc29tZSBnZW5lcmljIG5ldGxpbmsgaGFuZGxpbmcg4oCTIHdoaWxlIGBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1RgIHNwZWNpZmljYWxseSB1c2VzIGBldGhubF9hY3RfcGh5X3Rlc3RgLgoKQWxyaWdodCwgbGV0JiMzOTtzIHRyYWNrIGRvd24gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciBgZXRobmxfYWN0X3BoeV90ZXN0YCBhbmQgYWxzbyBgZXRobmxfaW50Zl9jYXBzX3JlcXVlc3Rfb3BzYCBhbmQgYGV0aG5sX3BoeV90ZXN0X3JlcXVlc3Rfb3BzYC4gQWhhISBUaGV5JiMzOTtyZSBkZWZpbmVkIHdpdGhpbiBgbmV0L2V0aHRvb2wvcGh5dGVzdC5jYCBhbmQgYG5ldC9ldGh0b29sL2ludGZfY2Fwcy5jYCwgYXMgZXhwZWN0ZWQuCgpPbmUgY3JpdGljYWwgY2hlY2s6IHdoYXQgYWJvdXQgdGhlIGNvbmZpZz8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGV0aHRvb2wgbmV0bGluayBpcyBhY3R1YWxseSBlbmFibGVkLiBgQ09ORklHX0VUSFRPT0xfTkVUTElOS2Agc2hvdWxkIGRvIGl0LiBXYWl0LCBob2xkIG9uLiBgQ09ORklHX0VUSFRPT0xfTkVUTElOS2AgaXMgdXN1YWxseSBhdXRvLWVuYWJsZWQgb3IgZGVwZW5kcyBvbiBgQ09ORklHX05FVGAuIEkgc2hvdWxkIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhpcyBkZXBlbmRlbmN5IGlzIGFzIEkgZXhwZWN0LiBMZXQmIzM5O3MgbG9vayBhdCBgbmV0L2V0aHRvb2wvS2NvbmZpZ2Agb3IgYG5ldC9LY29uZmlnYCB0byBiZSBzdXJlLiBOb3RoaW5nIHRvbyB0cmlja3ksIGhvcGVmdWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVRIVE9PTF9ORVRMSU5LJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTUwNz1jb25maWcgRkFJTE9WRVJcbi0tXG5uZXQvS2NvbmZpZy01MTktXG5uZXQvS2NvbmZpZzo1MjA6Y29uZmlnIEVUSFRPT0xfTkVUTElOS1xubmV0L0tjb25maWctNTIxLVx0Ym9vbCBcJiMzNDtOZXRsaW5rIGludGVyZmFjZSBmb3IgZXRodG9vbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTQ2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgZGlyZWN0bHkgdG8gYG5ldC9LY29uZmlnYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZXNpZGUsIHNvIGl04oCZcyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBhbmQgbW9kaWZ5aW5nIG5ldHdvcmstcmVsYXRlZCBzZXR0aW5ncy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gVGhpcyBpcyB3aGVyZSB0aGUgaW5pdGlhbCB3b3JrIGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTE1Olx0XHQgIGZhaWxvdmVyIG5ldGRldi4gVGhpcyBlbmFibGVzIHBhcmF2aXJ0dWFsIGRyaXZlcnMgdG8gdXNlIGFcbiA1MTY6XHRcdCAgVkYgYXMgYW4gYWNjZWxlcmF0ZWQgbG93IGxhdGVuY3kgZGF0YXBhdGguIEl0IGFsc28gYWxsb3dzIGxpdmVcbiA1MTc6XHRcdCAgbWlncmF0aW9uIG9mIFZNcyB3aXRoIGRpcmVjdCBhdHRhY2hlZCBWRnMgYnkgZmFpbGluZyBvdmVyIHRvIHRoZVxuIDUxODpcdFx0ICBwYXJhdmlydHVhbCBkYXRhcGF0aCB3aGVuIHRoZSBWRiBpcyB1bnBsdWdnZWQuXG4gNTE5Olx0XG4gNTIwOlx0Y29uZmlnIEVUSFRPT0xfTkVUTElOS1xuIDUyMTpcdFx0Ym9vbCBcJiMzNDtOZXRsaW5rIGludGVyZmFjZSBmb3IgZXRodG9vbFwmIzM0O1xuIDUyMjpcdFx0c2VsZWN0IERJTUxJQlxuIDUyMzpcdFx0ZGVmYXVsdCB5XG4gNTI0Olx0XHRoZWxwXG4gNTI1Olx0XHQgIEFuIGFsdGVybmF0aXZlIHVzZXJzcGFjZSBpbnRlcmZhY2UgZm9yIGV0aHRvb2wgYmFzZWQgb24gZ2VuZXJpY1xuIDUyNjpcdFx0ICBuZXRsaW5rLiBJdCBwcm92aWRlcyBiZXR0ZXIgZXh0ZW5zaWJpbGl0eSBhbmQgc29tZSBuZXcgZmVhdHVyZXMsXG4gNTI3Olx0XHQgIGUuZy4gbm90aWZpY2F0aW9uIG1lc3NhZ2VzLlxuIDUyODpcdFxuIDUyOTpcdGNvbmZpZyBORVRERVZfQUREUl9MSVNUX1RFU1RcbiA1MzA6XHRcdHRyaXN0YXRlIFwmIzM0O1VuaXQgdGVzdHMgZm9yIGRldmljZSBhZGRyZXNzIGxpc3RcJiMzNDtcbiA1MzE6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gNTMyOlx0XHRkZXBlbmRzIG9uIEtVTklUXG4gNTMzOlx0XG4gNTM0Olx0Y29uZmlnIE5FVF9URVNUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1ODAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoaXMgZmVhdHVyZSBpcyBvbiBieSBkZWZhdWx0IOKAkyBnb29kIHRvIGtub3cuIE5vdywgbXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9uIGNhbGxzLiBJIHNlZSB0aGVzZSBhcyBrZXk6IGBldGhubF9hY3RfcGh5X3Rlc3RgLCBgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YWAsIGBpbnRmX2NhcHNfZmlsbF9yZXBseWAsIGBwaHlfdGVzdF9wcmVwYXJlX2RhdGFgLCBhbmQgYHBoeV90ZXN0X2ZpbGxfcmVwbHlgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBwcmltYXJ5IGJ1aWxkaW5nIGJsb2NrcyByZWxhdGVkIHRvIGVpdGhlciBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzIG9yIHRoZSBQSFkgdGVzdGluZyBpdHNlbGYuIE15IG5leHQgc3RlcCwgYW5kIGl0JiMzOTtzIGEgY3JpdGljYWwgb25lLCBpcyB0byBkZXRlcm1pbmUgd2hpY2ggZHJpdmVycyBhcmUgYWN0dWFsbHkgKnVzaW5nKiB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBsb2NhdGUgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgZ2V0X2ludGZfY2Fwc2AsIGBnZXRfcGh5X3Rlc3RgLCBhbmQgYHNldF9waHlfdGVzdGAuIFRoYXQgd2lsbCByZXZlYWwgdGhlIHNwZWNpZmljIGhhcmR3YXJlIHRoZXNlIGZlYXR1cmVzIGFyZSBpbXBhY3RpbmcgYW5kIGhvdyB0aGV5JiMzOTtyZSBiZWluZyB1c2VkIHdpdGhpbiB0aGF0IGNvbnRleHQuIEZyb20gdGhlcmUsIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBleGlzdGluZyBkcml2ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwuZ2V0X2ludGZfY2FwcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5MjUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgZ2V0X3BoeV90ZXN0YCBhbmQgYHNldF9waHlfdGVzdGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlc2UgdHdvIGZ1bmN0aW9ucywgYGdldF9waHlfdGVzdGAgYW5kIGBzZXRfcGh5X3Rlc3RgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkb3VibGUtY2hlY2sgdGhlaXIgaW1wbGVtZW50YXRpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJmYWNlIHdpdGggdGhlIFBIWSBsYXllciBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCBob3cgdGhleSBoYW5kbGUgdGVzdCBtb2RlIGNvbmZpZ3VyYXRpb24uIEFyZSB0aGV5IHJlYWRpbmcvd3JpdGluZyBkaXJlY3RseSB0byByZWdpc3RlcnMsIG9yIGFyZSB0aGV5IHVzaW5nIHNvbWUgYWJzdHJhY3Rpb24gbGF5ZXIgbGlrZSBhIGRyaXZlcj8gSWYgaXQmIzM5O3MgdGhlIGxhdHRlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRyaXZlciYjMzk7cyB1bmRlcmx5aW5nIG1lY2hhbmlzbXMuCgpXaGF0JiMzOTtzIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZT8gQXJlIHRoZXNlIGZ1bmN0aW9ucyByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgc3BlY2lmaWMgUEhZIHRlc3QgbW9kZXMsIG9yIGFyZSB0aGV5IG1vcmUgZ2VuZXJhbCwgcHJvdmlkaW5nIGEgd3JhcHBlciBmb3IgZGlmZmVyZW50IHRlc3Qgc2NlbmFyaW9zPyBJIG5lZWQgdG8gbG9vayBhdCBhbnkgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cyBhc3NvY2lhdGVkIHdpdGggdGhlbSB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIGludGVuZGVkIHB1cnBvc2UgYW5kIHNjb3BlLgoKRnVydGhlcm1vcmUsIEkgbmVlZCB0byBjb25zaWRlciBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCBlc3BlY2lhbGx5IGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgYWNjZXNzZWQgY29uY3VycmVudGx5LCBvciBmcm9tIGRpZmZlcmVudCBjb250ZXh0cy4gSSB3YW50IHRvIGxvb2sgY2xvc2VseSBhdCB3aGF0IHRoZXNlIGZ1bmN0aW9ucyBkbywgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aHJlYWQgc2FmZXR5LCBhbmQgY29uY3VycmVuY3kuIEkgd2FudCB0byBzZWUgaWYgYW55IG11dGV4ZXMsIHNlbWFwaG9yZXMsIG9yIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFyZSBiZWluZyB1c2VkIHRvIHByb3RlY3Qgc2hhcmVkIHJlc291cmNlcy4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgZXJyb3IgaGFuZGxpbmcuIEhvdyByb2J1c3QgYXJlIHRoZXNlIGZ1bmN0aW9ucz8gRG8gdGhleSBoYW5kbGUgZGlmZmVyZW50IHR5cGVzIG9mIFBIWSBpbml0aWFsaXphdGlvbiBmYWlsdXJlcywgb3IgaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLCBvciBjb21tdW5pY2F0aW9uIGVycm9ycyBncmFjZWZ1bGx5PyBBcmUgdGhlcmUgcHJvcGVyIGVycm9yIGNvZGVzIG9yIGV4Y2VwdGlvbiBoYW5kbGluZz8gQW55IHVuaXQgdGVzdHMgZm9yIHRoZXNlIGZ1bmN0aW9ucz8gV2hhdCBhcmUgdGhleSB0ZXN0aW5nPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcLmdldF9waHlfdGVzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzExCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBFVEhUT09MIE5ldGxpbmsgUEhZIFRlc3QgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBFVEhUT09MIG5ldGxpbmsgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgUEhZIHRlc3QgZnVuY3Rpb25hbGl0eS4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHNpbmNlIG5vIGN1cnJlbnQgZHJpdmVycyBpbXBsZW1lbnQgdGhlc2UgZmVhdHVyZXMgeWV0LCB0aGlzIGFyZWEgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBuZXRsaW5rIGNvcmUgaXRzZWxmIGlzIHJlYWNoYWJsZSwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuCgpUaGUgY29yZSBwYXJzZXMgdGhlIG5ldGxpbmsgbWVzc2FnZXMgYW5kIHRoZW4gY2FsbHMgZHJpdmVyIG9wZXJhdGlvbnMgaWYgdGhleSBleGlzdC4gSWYgdGhlIGRyaXZlciBkb2VzbiYjMzk7dCBzdXBwb3J0IHRoZSBvcGVyYXRpb24sIGl0IHJldHVybnMgYC1FT1BOT1RTVVBQYCwgd2hpY2ggaXMgYXMgZXhwZWN0ZWQuIEhvd2V2ZXIsIGV2ZW4gaWYgdGhlIGRyaXZlciBvcHMgYXJlIG1pc3NpbmcsIHNvbWUgcGFyc2luZyBsb2dpYyBpbiBgZXRobmxfYWN0X3BoeV90ZXN0YCBhbmQgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YWAgbWlnaHQgYmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBjaGVjay4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQuIExvb2tpbmcgZGVlcGVyLCBJIHNlZSB0aGF0IGBldGhubF9kZWZhdWx0X2RvaXRgIGNhbGxzIGBwcmVwYXJlX2RhdGFgIHdoaWNoIGNhbGxzIGBkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtnZXRfaW50Zl9jYXBzYC4gQW5kIGlmIHRoaXMgaXMgTlVMTCwgYC1FT1BOT1RTVVBQYCBpcyByZXR1cm5lZC4gU28gaXQgbWFrZXMgc2Vuc2UgdGhhdCBgaW50Zl9jYXBzX2ZpbGxfcmVwbHlgIHdvbiYjMzk7dCBiZSByZWFjaGVkLgoKQnV0IHdhaXQsIGBldGhubF9hY3RfcGh5X3Rlc3RgIGRvZXMgc29tZSBhdHRyaWJ1dGUgcGFyc2luZyAqYmVmb3JlKiB0aGUgY2hlY2sgZm9yIGBkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtzZXRfcGh5X3Rlc3RgLiBPa2F5LCBsZXQmIzM5O3MgZXhhbWluZSBgZXRobmxfYWN0X3BoeV90ZXN0YC4KCmBgYGMKCXJldCA9IGV0aG5sX3BhcnNlX2hlYWRlcl9kZXZfZ2V0KCZhbXA7cmVxX2luZm8sCgkJCQkJIHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9IRUFERVJdLAoJCQkJCSBnZW5sX2luZm9fbmV0KGluZm8pLCBpbmZvLSZndDtleHRhY2ssCgkJCQkJIHRydWUpOwoJaWYgKHJldCAmbHQ7IDApCgkJcmV0dXJuIHJldDsKCglkZXYgPSByZXFfaW5mby5kZXY7CgoJaWYgKCFkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtzZXRfcGh5X3Rlc3QpIHsKCQlyZXQgPSAtRU9QTk9UU1VQUDsKCQlnb3RvIG91dF9kZXY7Cgl9CmBgYAoKT2theSwgSSBzZWUuIGBldGhubF9hY3RfcGh5X3Rlc3RgIGNoZWNrcyBmb3IgYHNldF9waHlfdGVzdGAgKmltbWVkaWF0ZWx5KiBhZnRlciByZXRyaWV2aW5nIHRoZSBkZXZpY2UuCgpgYGBjCglpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSkgewoJCXRlc3QuYmxvY2tfaWQgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKTsKCQl0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfQkxPQ0tfSUQ7Cgl9CmBgYAoKQW5kIHRoaXMgYXR0cmlidXRlIHBhcnNpbmcgaXMgZG9uZSAqKmFmdGVyKiogdGhlIGNoZWNrOgoKYGBgYwoJaWYgKCFkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtzZXRfcGh5X3Rlc3QpIHsKCQlyZXQgPSAtRU9QTk9UU1VQUDsKCQlnb3RvIG91dF9kZXY7Cgl9CmBgYAoKU28gaXQgbG9va3MgbGlrZSBpZiBubyBkcml2ZXIgaW1wbGVtZW50cyBgc2V0X3BoeV90ZXN0YCwgdGhhdCBwYXJzaW5nIGxvZ2ljIGlzbiYjMzk7dCBldmVuIHJlYWNoZWQuIEhtbS4gSSBiZXR0ZXIgZG91YmxlLWNoZWNrIGBldGhubF9hY3RfcGh5X3Rlc3RgIHRvIGJlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgc29tZXRoaW5nIGNydWNpYWwuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGdldCByaWdodCBiZWZvcmUgSSBzdGFydCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL3BoeXRlc3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTA5Olx0XG4gMTEwOlx0aW50IGV0aG5sX2FjdF9waHlfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIDExMTpcdHtcbiAxMTI6XHRcdHN0cnVjdCBldGhubF9yZXFfaW5mbyByZXFfaW5mbyA9IHt9O1xuIDExMzpcdFx0c3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby1cdTAwM2VhdHRycztcbiAxMTQ6XHRcdHN0cnVjdCBldGh0b29sX3BoeV90ZXN0IHRlc3QgPSB7fTtcbiAxMTU6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gMTE2Olx0XHRpbnQgcmV0O1xuIDExNzpcdFxuIDExODpcdFx0cmV0ID0gZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoXHUwMDI2cmVxX2luZm8sXG4gMTE5Olx0XHRcdFx0XHRcdCB0YltFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXSxcbiAxMjA6XHRcdFx0XHRcdFx0IGdlbmxfaW5mb19uZXQoaW5mbyksIGluZm8tXHUwMDNlZXh0YWNrLFxuIDEyMTpcdFx0XHRcdFx0XHQgdHJ1ZSk7XG4gMTIyOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDEyMzpcdFx0XHRyZXR1cm4gcmV0O1xuIDEyNDpcdFxuIDEyNTpcdFx0ZGV2ID0gcmVxX2luZm8uZGV2O1xuIDEyNjpcdFxuIDEyNzpcdFx0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlc2V0X3BoeV90ZXN0KSB7XG4gMTI4Olx0XHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuIDEyOTpcdFx0XHRnb3RvIG91dF9kZXY7XG4gMTMwOlx0XHR9XG4gMTMxOlx0XG4gMTMyOlx0XHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSkge1xuIDEzMzpcdFx0XHR0ZXN0LmJsb2NrX2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSk7XG4gMTM0Olx0XHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CTE9DS19JRDtcbiAxMzU6XHRcdH1cbiAxMzY6XHRcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfTEFORV0pIHtcbiAxMzc6XHRcdFx0dGVzdC5sYW5lID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKTtcbiAxMzg6XHRcdFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0xBTkU7XG4gMTM5Olx0XHR9XG4gMTQwOlx0XHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dKSB7XG4gMTQxOlx0XHRcdHRlc3QudHhfcGF0dGVybiA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOXSk7XG4gMTQyOlx0XHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9UWF9QQVRURVJOO1xuIDE0MzpcdFx0fVxuIDE0NDpcdFx0aWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOXSkge1xuIDE0NTpcdFx0XHR0ZXN0LnJ4X3BhdHRlcm4gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl0pO1xuIDE0NjpcdFx0XHR0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfUlhfUEFUVEVSTjtcbiAxNDc6XHRcdH1cbiAxNDg6XHRcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkVSVF9BQ1RJT05dKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MjY4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUG90ZW50aWFsOiBFdGh0b29sIE5ldGxpbmsgSW50ZXJmYWNlKioKCk9rYXksIHNvIHRoZSBwYXJzaW5nIGl0c2VsZiBoYXBwZW5zICphZnRlciogdGhlIGluaXRpYWwgY2hlY2tzLCB3aGljaCBpcyBnb29kLiBCdXQgd2FpdCwgdGhlIE5ldGxpbmsgcG9saWN5IHBhcnNpbmcsIGhhbmRsZWQgYnkgdGhlIGdlbmVyaWMgTmV0bGluayBjb3JlLCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gSSBrbm93IHRoZSBwb2xpY2llcyBhcmUgZGVmaW5lZCBpbiBgZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeWAsIGBldGhubF9waHlfdGVzdF9nZXRfcG9saWN5YCwgYW5kIGBldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeWAsIGFuZCBgZXRobmxfYWN0X3BoeV90ZXN0YCBnZXRzIHVzIHRoYXQgZmFyLgoKU28sIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgeWVzISBUaGVzZSBhcmUgbmV3IE5ldGxpbmsgbWVzc2FnZXMgYW5kIHBvbGljaWVzLCBwZXJmZWN0IGZvciBTeXprYWxsZXIuIEl0IGNhbiBwb2tlIGF0IHRoZSBtZXNzYWdlIGZvcm1hdHMuIEV2ZW4gaWYgdGhlcmUmIzM5O3Mgbm8gZHJpdmVyIGFjdHVhbGx5ICp1c2luZyogdGhpcyBmdW5jdGlvbmFsaXR5IHlldCwgdGhlIHBhcnNpbmcgYW5kIGluaXRpYWwgaGFuZGxlcnMgYXJlIGRlZmluaXRlbHkgdGhlcmUgYW5kIHJlYWNoYWJsZS4KCkhtbSwgb24gc2Vjb25kIHRob3VnaHQsIGlmIG5vIGRyaXZlciBpbXBsZW1lbnRzIHRoZXNlIGZ1bmN0aW9ucywgdGhlIGNvdmVyYWdlIGZyb20gZnV6emluZyB3aWxsIGJlIHZlcnkgbGltaXRlZC4gSXQgd291bGQgZXNzZW50aWFsbHkganVzdCBiZSB0ZXN0aW5nIHRoZSBwYXJzaW5nIGxvZ2ljIGl0c2VsZi4gQnV0LCBpdCBpcyBzdGlsbCBuZXcga2VybmVsIGNvZGUsIGFuZCBhbnkgY292ZXJhZ2UgaXMgdmFsdWFibGUuIExldCYjMzk7cyBub3Qgd3JpdGUgdGhpcyBvZmYgY29tcGxldGVseS4gSSBzaG91bGQgcXVpY2tseSBjaGVjayB0aGUgY3VycmVudCBrZXJuZWwgdHJlZSB0byBzZWUgaWYgYW55IGRyaXZlciB3YXMgYWRkZWQgdG8gaW1wbGVtZW50IHRoaXMgZmVhdHVyZS4gUGVyaGFwcyBhIHJlbGF0ZWQgY29tbWl0IGluIHRoZSBzYW1lIHNlcmllcyBzbnVjayBhIGRyaXZlciBpbi4gR290dGEgY2hlY2sgaXQgb3V0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfcGh5X3Rlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5jPTMyOTk9RVhQT1JUX1NZTUJPTChkcm1fZHBfZ2V0X3BoeV90ZXN0X3BhdHRlcm4pO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9oZWxwZXIuYy0zMzAxLS8qKlxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5jOjMzMDI6ICogZHJtX2RwX3NldF9waHlfdGVzdF9wYXR0ZXJuKCkgLSBzZXQgdGhlIHBhdHRlcm4gdG8gdGhlIHNpbmsuXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfaGVscGVyLmMtMzMwMy0gKiBAYXV4OiBEaXNwbGF5UG9ydCBBVVggY2hhbm5lbFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9oZWxwZXIuYy0zMzA4LSAqL1xuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5jOjMzMDk6aW50IGRybV9kcF9zZXRfcGh5X3Rlc3RfcGF0dGVybihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LFxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5jLTMzMTAtXHRcdFx0XHRzdHJ1Y3QgZHJtX2RwX3BoeV90ZXN0X3BhcmFtcyAqZGF0YSwgdTggZHBfcmV2KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9oZWxwZXIuYy0zMzM0LX1cbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9oZWxwZXIuYzozMzM1OkVYUE9SVF9TWU1CT0woZHJtX2RwX3NldF9waHlfdGVzdF9wYXR0ZXJuKTtcbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9oZWxwZXIuYy0zMzM2LVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfdGVzdC5jPTMwNj1zdGF0aWMgdm9pZCBpbnRlbF9kcF9wcm9jZXNzX3BoeV9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF90ZXN0LmMtMzMwLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF90ZXN0LmM6MzMxOlx0ZHJtX2RwX3NldF9waHlfdGVzdF9wYXR0ZXJuKFx1MDAyNmludGVsX2RwLVx1MDAzZWF1eCwgZGF0YSxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfdGVzdC5jLTMzMi1cdFx0XHRcdCAgICBpbnRlbF9kcC1cdTAwM2VkcGNkW0RQX0RQQ0RfUkVWXSk7XG4tLVxuaW5jbHVkZS9kcm0vZGlzcGxheS9kcm1fZHBfaGVscGVyLmg9OTg5PWludCBkcm1fZHBfZ2V0X3BoeV90ZXN0X3BhdHRlcm4oc3RydWN0IGRybV9kcF9hdXggKmF1eCxcbmluY2x1ZGUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5oLTk5MC1cdFx0XHRcdHN0cnVjdCBkcm1fZHBfcGh5X3Rlc3RfcGFyYW1zICpkYXRhKTtcbmluY2x1ZGUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5oOjk5MTppbnQgZHJtX2RwX3NldF9waHlfdGVzdF9wYXR0ZXJuKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsXG5pbmNsdWRlL2RybS9kaXNwbGF5L2RybV9kcF9oZWxwZXIuaC05OTItXHRcdFx0XHRzdHJ1Y3QgZHJtX2RwX3BoeV90ZXN0X3BhcmFtcyAqZGF0YSwgdTggZHBfcmV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD0xMjg2PXN0cnVjdCBldGh0b29sX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTQ0Ni1cdFx0XHRcdHN0cnVjdCBldGh0b29sX3BoeV90ZXN0ICp0ZXN0KTtcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjE0NDc6XHRpbnRcdCgqc2V0X3BoeV90ZXN0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTQ0OC1cdFx0XHRcdHN0cnVjdCBldGh0b29sX3BoeV90ZXN0ICp0ZXN0KTtcbi0tXG5uZXQvZXRodG9vbC9waHl0ZXN0LmM9MTEwPWludCBldGhubF9hY3RfcGh5X3Rlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvZXRodG9vbC9waHl0ZXN0LmMtMTI2LVxubmV0L2V0aHRvb2wvcGh5dGVzdC5jOjEyNzpcdGlmICghZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZXNldF9waHlfdGVzdCkge1xubmV0L2V0aHRvb2wvcGh5dGVzdC5jLTEyOC1cdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4tLVxubmV0L2V0aHRvb2wvcGh5dGVzdC5jLTE2Mi1cbm5ldC9ldGh0b29sL3BoeXRlc3QuYzoxNjM6XHRyZXQgPSBkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlc2V0X3BoeV90ZXN0KGRldiwgXHUwMDI2dGVzdCk7XG5uZXQvZXRodG9vbC9waHl0ZXN0LmMtMTY0LVx0ZXRobmxfb3BzX2NvbXBsZXRlKGRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzQyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBNaXNzaW5nIEltcGxlbWVudGF0aW9ucyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBjb2RlIGFuZCwgYXMgSSBzdXNwZWN0ZWQsIG5vbmUgb2YgdGhlIGRyaXZlcnMgYXJlIGFjdHVhbGx5IGltcGxlbWVudGluZyBgc2V0X3BoeV90ZXN0YCwgYGdldF9waHlfdGVzdGAsIG9yIGBnZXRfaW50Zl9jYXBzYCBhdCB0aGlzIHBvaW50LiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgcmVkIGZsYWcsIGJ1dCBub3QgbmVjZXNzYXJpbHkgdW5leHBlY3RlZCBnaXZlbiB0aGUgc3RhZ2Ugb2YgZGV2ZWxvcG1lbnQuIFdlIG1pZ2h0IGJlIHJlbHlpbmcgb24gZGVmYXVsdCBvciBwbGFjZWhvbGRlciBiZWhhdmlvciBmb3Igbm93LiBJJiMzOTtkIGJldHRlciBjb25maXJtIHRoYXQgdGhlIGludGVyZmFjZSBjYXBhYmlsaXRpZXMgYXJlIGNvcnJlY3RseSBlc3RhYmxpc2hlZC4gTGV0IG1lIGp1bXAgaW4gYW5kIGhhdmUgYSBxdWljayBsb29rIGF0IGBnZXRfaW50Zl9jYXBzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X2ludGZfY2FwcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaD0xMjg2PXN0cnVjdCBldGh0b29sX29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTQ0Mi1cdHZvaWRcdCgqZ2V0X21tX3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqc3RhdHMpO1xuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6MTQ0MzpcdGludFx0KCpnZXRfaW50Zl9jYXBzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTQ0NC1cdFx0XHRcdCBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHMgKmNhcHMpO1xuLS1cbm5ldC9ldGh0b29sL2ludGZfY2Fwcy5jPTUyPXN0YXRpYyBpbnQgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuLS1cbm5ldC9ldGh0b29sL2ludGZfY2Fwcy5jLTU4LVxubmV0L2V0aHRvb2wvaW50Zl9jYXBzLmM6NTk6XHRpZiAoIWRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfaW50Zl9jYXBzKVxubmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMtNjAtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbm5ldC9ldGh0b29sL2ludGZfY2Fwcy5jLTYxLVxubmV0L2V0aHRvb2wvaW50Zl9jYXBzLmM6NjI6XHRyZXR1cm4gZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9pbnRmX2NhcHMoZGV2LCBcdTAwMjZkYXRhLVx1MDAzZWNhcHMpO1xubmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMtNjMtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI4OQoJCQkJCQkJb3V0cHV0OiAxNTYKCQkJCQkJCXRob3VnaHRzOiAxMDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBQcm9wb3NlZCBFdGh0b29sIE5ldGxpbmsgQWRkaXRpb25zIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgdGhlIG5ldyBldGh0b29sIG5ldGxpbmsgYWRkaXRpb25zLiBUaGUgY29yZSBvZiBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gQnV0IHdhaXQsIHRoaXMgaW50cm9kdWNlcyBuZXcgbmV0bGluayBtZXNzYWdlIHR5cGVzIGFuZCBwb2xpY2llcywgd2hpY2ggKnN5emthbGxlciogd2lsbCBkZWZpbml0ZWx5IGdvIGFmdGVyLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLiBUaGUgcGFyc2luZyBvZiB0aGVzZSBuZXRsaW5rIG1lc3NhZ2VzIGlzIHJlYWNoYWJsZS4gSSBtZWFuLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgZXRobmxfYWN0X3BoeV90ZXN0YCBzcGVjaWZpY2FsbHkg4oCTIHRoZSBmdW5jdGlvbiBjYWxsIHRoYXQgcGFyc2VzIHRoZSBoZWFkZXIsIHJldHJpZXZlcyB0aGUgZGV2aWNlLCBhbmQgdGhlbiBkb2VzIGEgY2hlY2sgb2YgYHNldF9waHlfdGVzdGAgYW5kIHJlbGF0ZWQgbmV0bGluayBwb2xpY2llcy4gSSBhbSB0aGlua2luZyB0aGF0IGBldGhubF9wYXJzZV9oZWFkZXJfZGV2X2dldGAgaXMgcmVhY2hhYmxlIHdoaWNoIGdpdmVzIG1lIGNvbmZpZGVuY2UuCgpUaGUgcmVhY2hhYmxlIG5ldGxpbmsgcG9saWNpZXMgYXJlIGBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5YCwgYGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3lgLCBhbmQgYGV0aG5sX2ludGZfY2Fwc19nZXRfcG9saWN5YC4gVGhlc2Ugd2lsbCBiZSB1c2VkIGJ5IHRoZSBuZXRsaW5rIGNvcmUgdG8gdmFsaWRhdGUgYXR0cmlidXRlcy4gVGhpcyAqaXMqIG5ldyBuZXRsaW5rIEFQSSwgYW5kIHRoYXQmIzM5O3MgdXN1YWxseSBnb29kIGZvciBmdXp6aW5nLiBTbyB5ZWFoLCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O1dvcnRoRnV6emluZyA9IHRydWUmIzM0Oy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9scy4gVGhlIG9idmlvdXMgb25lcyBhcmUgYGV0aG5sX2FjdF9waHlfdGVzdGAsIGBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhYCwgYW5kIGBwaHlfdGVzdF9wcmVwYXJlX2RhdGFgLiBCdXQgaG9sZCBvbiwgYGludGZfY2Fwc19wcmVwYXJlX2RhdGFgIGFuZCBgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhYCBhcmUgYWN0dWFsbHkgY2FsbGVkIGJ5IGBldGhubF9kZWZhdWx0X2RvaXRgLiBMZXQgbWUgZG91YmxlLWNoZWNrIGZvciBvdGhlciByZWxldmFudCBmdW5jdGlvbnMuLi4gQWgsIG5vLCB0aGUgb3RoZXJzLCBsaWtlIGBpbnRmX2NhcHNfcmVwbHlfc2l6ZWAsIGBpbnRmX2NhcHNfZmlsbF9yZXBseWAsIGBwaHlfdGVzdF9yZXBseV9zaXplYCwgYW5kIGBwaHlfdGVzdF9maWxsX3JlcGx5YCwgd29uJiMzOTt0IGJlIHJlYWNoZWQgYmVjYXVzZSBgcHJlcGFyZV9kYXRhYCByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIFNvLCBiYWNrIHRvIGZvY3VzaW5nIG9uIGBldGhubF9hY3RfcGh5X3Rlc3RgLCBgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YWAsIGFuZCBgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhYC4KCkhhbmcgb24sIGBldGhubF9hY3RfcGh5X3Rlc3RgIGl0c2VsZiBtaWdodCBqdXN0IGJlIHJldHVybmluZyBgLUVPUE5PVFNVUFBgIGJ1dCB0aGlzIG5lZWRzIGZ1enppbmchIFRoZSBuZXRsaW5rIHBvbGljeSBwYXJzaW5nIGlzIGhhcHBlbmluZyAqYmVmb3JlKiB0aGUgYGRvaXRgIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhlIGtlcm5lbCBpcyBnb2luZyB0byBwYXJzZSB0aG9zZSBhdHRyaWJ1dGVzIGFjY29yZGluZyB0byB0aGUgbmV3IHBvbGljaWVzLCBhbmQgKnN5emthbGxlciogY2FuIGRlZmluaXRlbHkgZnV6eiB0aG9zZSBuZXRsaW5rIG1lc3NhZ2VzLiBPa2F5LCBkZWZpbml0ZWx5ICYjMzQ7V29ydGhGdXp6aW5nID0gdHJ1ZSYjMzQ7LgoKTGV0JiMzOTtzIGxpc3QgdGhlIGZvY3VzIHN5bWJvbHM6CmBldGhubF9hY3RfcGh5X3Rlc3RgCmBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhYApgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhYAoKQnV0IHdhaXQsIGBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhYCBhbmQgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YWAgYXJlICpzdGF0aWMqIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBPa2F5LCBgZXRobmxfYWN0X3BoeV90ZXN0YCBpcyB0aGUgb25lIHRvIGZvY3VzIG9uLiBJdCYjMzk7cyBub24tc3RhdGljLCBzbywgdGhhdCYjMzk7cyBwZXJmZWN0LiBUaGUgb3RoZXJzIGFyZSBzdGF0aWMsIGJ1dCB0aGV5JiMzOTtyZSBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gdGhlIGBldGhubF9pbnRmX2NhcHNfcmVxdWVzdF9vcHNgIGFuZCBgZXRobmxfcGh5X3Rlc3RfcmVxdWVzdF9vcHNgIHN0cnVjdHVyZXMuIFNvLCBJIGNhbiBqdXN0IHVzZSBgZXRobmxfYWN0X3BoeV90ZXN0YCBhcyB0aGUgZm9jdXMgc3ltYm9sLgoKTGV0IG1lIHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zLi4uIG5vcGUsIGp1c3QgYGV0aG5sX2FjdF9waHlfdGVzdGAuCgpSZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgYEVUSFRPT0xfTkVUTElOS2AgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgSSYjMzk7bGwgYWRkIGl0IHRvIGJlIHNhZmUuIEl0JiMzOTtzIGEgYm9vbCwgc28gbm8gaGFybSBpbiBiZWluZyBleHBsaWNpdC4KCkkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGBldGhubF9hY3RfcGh5X3Rlc3RgIGlzIGluZGVlZCBub24tc3RhdGljLCBqdXN0IHRvIGJlIHN1cmUuLi4gWWVzLCBpdCYjMzk7cyBkZWZpbmVkIGluIGBuZXQvZXRodG9vbC9waHl0ZXN0LmNgIGFuZCBkZWNsYXJlZCBpbiBgbmV0L2V0aHRvb2wvbmV0bGluay5oYC4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgZnVuY3Rpb25zPyBOby4KCkFscmlnaHQsIGxldCYjMzk7cyByZXZpZXcgdGhlIGluc3RydWN0aW9ucyB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbiYjMzk7dCBqdXN0IGEgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50IGNoYW5nZSBvciBzb21ldGhpbmcgdGhhdCYjMzk7cyB1bnJlYWNoYWJsZS4gTm8sIHRoaXMgYWRkcyBuZXcgbmV0bGluayBtZXNzYWdlcyB0byB0aGUgKmNvcmUqIGV0aHRvb2wgbmV0bGluayBpbnRlcmZhY2UuIEl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBTbzogYFdvcnRoRnV6emluZyA9IHRydWVgLgoKKipGb2N1cyBzeW1ib2w6KioKYGV0aG5sX2FjdF9waHlfdGVzdGAKCioqQ29uZmlnczoqKgpgRVRIVE9PTF9ORVRMSU5LYAoKKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGV0aHRvb2wgbmV0bGluayBtZXNzYWdlcyAoYEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRgLCBgRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VUYCwgYEVUSFRPT0xfTVNHX1BIWV9URVNUX0FDVGApIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZSBwb2xpY2llcwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFVEhUT09MX05FVExJTksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtldGhubF9hY3RfcGh5X3Rlc3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBuZXcgZXRodG9vbCBuZXRsaW5rIG1lc3NhZ2VzIChFVEhUT09MX01TR19JTlRGX0NBUFNfR0VULCBFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsIEVUSFRPT0xfTVNHX1BIWV9URVNUX0FDVCkgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgbmV0bGluayBhdHRyaWJ1dGUgcG9saWNpZXMuIEV2ZW4gdGhvdWdoIG5vIGRyaXZlcnMgY3VycmVudGx5IGltcGxlbWVudCB0aGUgdW5kZXJseWluZyBldGh0b29sIG9wZXJhdGlvbnMsIHRoZSBuZXRsaW5rIG1lc3NhZ2UgcGFyc2luZywgcG9saWN5IHZhbGlkYXRpb24sIGFuZCBpbml0aWFsIGhhbmRsZXIgZnVuY3Rpb25zIChsaWtlIGV0aG5sX2FjdF9waHlfdGVzdCkgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXItc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VUSFRPT0xfTkVUTElOSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V0aG5sX2FjdF9waHlfdGVzdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIG5ldyBldGh0b29sIG5ldGxpbmsgbWVzc2FnZXMgKEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVQsIEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVCwgRVRIVE9PTF9NU0dfUEhZX1RFU1RfQUNUKSBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBuZXRsaW5rIGF0dHJpYnV0ZSBwb2xpY2llcy4gRXZlbiB0aG91Z2ggbm8gZHJpdmVycyBjdXJyZW50bHkgaW1wbGVtZW50IHRoZSB1bmRlcmx5aW5nIGV0aHRvb2wgb3BlcmF0aW9ucywgdGhlIG5ldGxpbmsgbWVzc2FnZSBwYXJzaW5nLCBwb2xpY3kgdmFsaWRhdGlvbiwgYW5kIGluaXRpYWwgaGFuZGxlciBmdW5jdGlvbnMgKGxpa2UgZXRobmxfYWN0X3BoeV90ZXN0KSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlci1zcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBldGh0b29sIG5ldGxpbmsgY29tbWFuZHMgKGBJTlRGX0NBUFNfR0VUYCwgYFBIWV9URVNUX0dFVGAsIGBQSFlfVEVTVF9BQ1RgKSB0byBxdWVyeSBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzIGFuZCBjb25maWd1cmUgUEhZIHRlc3RzLiBUaGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZSBldGh0b29sIGNvcmUgYW5kIHRoZSBkcml2ZXJzIChgc3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzYCBhbmQgYHN0cnVjdCBldGh0b29sX3BoeV90ZXN0YCkgYXJlIGFsbG9jYXRlZCBkeW5hbWljYWxseS5cblxuSG93ZXZlciwgdGhlIGV0aHRvb2wgbmV0bGluayBmcmFtZXdvcmsgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVzIHRoZSByZXBseSBkYXRhIHN0cnVjdHVyZXMgdmlhIGBldGhubF9pbml0X3JlcGx5X2RhdGEoKWAgKHdoaWNoIGNhbGxzIGBtZW1zZXQocmVwbHlfZGF0YSwgMCwgb3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSlgKSBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZSBkcml2ZXIgY2FsbGJhY2tzIChlLmcuLCBgZ2V0X2ludGZfY2Fwc2ApLiBTaW1pbGFybHksIGBwaHlfdGVzdF9wcmVwYXJlX2RhdGEoKWAgZXhwbGljaXRseSBjYWxscyBgbWVtc2V0KFx1MDAyNmRhdGEtXHUwMDNldGVzdCwgMCwgc2l6ZW9mKGRhdGEtXHUwMDNldGVzdCkpYCwgYW5kIGBldGhubF9hY3RfcGh5X3Rlc3QoKWAgaW5pdGlhbGl6ZXMgaXRzIGxvY2FsIHN0cnVjdCB3aXRoIGA9IHt9YC5cblxuQmVjYXVzZSBhbGwgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCBiZWZvcmUgdXNlLCB0aGVyZSBpcyBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgb3IgaGVhcCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgZXZlbiBpZiBhIGRyaXZlciBmYWlscyB0byBwb3B1bGF0ZSBhbGwgZmllbGRzLiBGdXJ0aGVybW9yZSwgdGhlIG5ldGxpbmsgcmVzcG9uc2UgaXMgY29uc3RydWN0ZWQgYnkgc2VyaWFsaXppbmcgaW5kaXZpZHVhbCBmaWVsZHMgdXNpbmcgYG5sYV9wdXRfdTMyYCwgYG5sYV9wdXRfc3RyaW5nYCwgZXRjLiwgcmF0aGVyIHRoYW4gY29weWluZyByYXcgc3RydWN0cywgd2hpY2ggaW5oZXJlbnRseSBhdm9pZHMgbGVha2luZyBzdHJ1Y3QgcGFkZGluZy5cblxuQW55IHBvdGVudGlhbCBpc3N1ZXMsIHN1Y2ggYXMgYSBkcml2ZXIgd3JpdGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGBibG9ja3NgIGFycmF5IG9yIHJldHVybmluZyBhbiBpbnZhbGlkIGBudW1fYmxvY2tzYCBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMsIHdvdWxkIGJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkNTA2ZGQxMDg2MzhlNWQ3N2QyM2YzMGVmZGYyY2Y3ZmE4NmRlZTljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDU6MDY6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbAppbmRleCA1ZGQ0ZDFiNWQ5NGJiLi4zNjFlYjNjNjY1NzcwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwKQEAgLTIxMCw2ICYjNDM7MjEwLDU1IEBAIGRlZmluaXRpb25zOgogICAgICAgLQogICAgICAgICBuYW1lOiBkaXNjYXJkCiAgICAgICAgIHZhbHVlOiAzMQomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBpbnRmLWNvbXBvbmVudAomIzQzOyAgICB0eXBlOiBlbnVtCiYjNDM7ICAgIGRvYzogVHlwZSBvZiBoYXJkd2FyZSBjb21wb25lbnQgaW4gdGhlIGludGVyZmFjZS4KJiM0MzsgICAgZW50cmllczoKJiM0MzsgICAgICAtIG1hYwomIzQzOyAgICAgIC0gcGh5CiYjNDM7ICAgICAgLSBtb2R1bGUKJiM0MzsgIC0KJiM0MzsgICAgbmFtZTogaW50Zi1zdWJsYXllcgomIzQzOyAgICB0eXBlOiBlbnVtCiYjNDM7ICAgIGRvYzogODAyLjMgc3VibGF5ZXIgd2l0aGluIGEgY29tcG9uZW50LgomIzQzOyAgICBlbnRyaWVzOgomIzQzOyAgICAgIC0gbm9uZQomIzQzOyAgICAgIC0gcnMKJiM0MzsgICAgICAtIHBjcwomIzQzOyAgICAgIC0gZmVjCiYjNDM7ICAgICAgLSBwbWEKJiM0MzsgICAgICAtIHBtZAomIzQzOyAgLQomIzQzOyAgICBuYW1lOiBwaHktdGVzdC1wYXR0ZXJuCiYjNDM7ICAgIHR5cGU6IGVudW0KJiM0MzsgICAgZG9jOiBQSFkgdGVzdCBwYXR0ZXJuIHR5cGVzIGZvciBQUkJTIGdlbmVyYXRpb24vY2hlY2tpbmcuCiYjNDM7ICAgIGVudHJpZXM6CiYjNDM7ICAgICAgLSBvZmYKJiM0MzsgICAgICAtIHByYnM3CiYjNDM7ICAgICAgLSBwcmJzOQomIzQzOyAgICAgIC0gcHJiczExCiYjNDM7ICAgICAgLSBwcmJzMTMKJiM0MzsgICAgICAtIHByYnMxNQomIzQzOyAgICAgIC0gcHJiczIzCiYjNDM7ICAgICAgLSBwcmJzMzEKJiM0MzsgICAgICAtIHNzcHJxCiYjNDM7ICAgICAgLSBwcmJzMTNxCiYjNDM7ICAgICAgLSBwcmJzMzFxCiYjNDM7ICAgICAgLSBzcXVhcmUtbnJ6CiYjNDM7ICAgICAgLSBzcXVhcmUtcGFtNAomIzQzOyAgICAgIC0gdHgtbGluZWFyaXR5CiYjNDM7ICAgICAgLSBzY3JhbWJsZWQtaWRsZQomIzQzOyAgICAgIC0gazI4LTUKJiM0MzsgICAgICAtIGsyOC03CiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IHBoeS10ZXN0LWFjdGlvbgomIzQzOyAgICB0eXBlOiBlbnVtCiYjNDM7ICAgIGRvYzogQkVSVCBjb250cm9sIGFjdGlvbnMuCiYjNDM7ICAgIGVudHJpZXM6CiYjNDM7ICAgICAgLSBub25lCiYjNDM7ICAgICAgLSBzdGFydAomIzQzOyAgICAgIC0gc3RvcAogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTkwNSw2ICYjNDM7MTk1NCwxMTUgQEAgYXR0cmlidXRlLXNldHM6CiAgICAgICAgIG5hbWU6IGxpbmsKICAgICAgICAgdHlwZTogbmVzdAogICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogbXNlLXNuYXBzaG90CiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IGludGYtYmxvY2sKJiM0MzsgICAgZG9jOiBBIHNpbmdsZSBmdW5jdGlvbmFsIGJsb2NrIGluIHRoZSBpbnRlcmZhY2UuCiYjNDM7ICAgIGF0dHJpYnV0ZXM6CiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogaWQKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGNvbXBvbmVudAomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBlbnVtOiBpbnRmLWNvbXBvbmVudAomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHN1YmxheWVyCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIGVudW06IGludGYtc3VibGF5ZXIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBpbnN0YW5jZQomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBkb2M6IHwKJiM0MzsgICAgICAgICAgSWRlbnRpZmllcyB0aGUgaGFyZHdhcmUgZW50aXR5IHdoZW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mCiYjNDM7ICAgICAgICAgIHRoZSBzYW1lIGNvbXBvbmVudCBleGlzdCBpbiB0aGUgaW50ZXJmYWNlLiBUaGUgZHJpdmVyCiYjNDM7ICAgICAgICAgIGFzc2lnbnMgaW5zdGFuY2UgbnVtYmVycyBzZXF1ZW50aWFsbHkgYmFzZWQgb24gcG9zaXRpb24gaW4KJiM0MzsgICAgICAgICAgdGhlIHBoeXNpY2FsIHBhdGguIERlZmF1bHRzIHRvIDAgd2hlbiBvbmx5IG9uZSBpbnN0YW5jZSBvZgomIzQzOyAgICAgICAgICBhIGdpdmVuIGNvbXBvbmVudCBleGlzdHMuCiYjNDM7ICAgICAgICAgIEZvciBQSFk6IGluc3RhbmNlIDAgaXMgdGhlIGludGVybmFsL2hvc3Qtc2lkZSBQSFksCiYjNDM7ICAgICAgICAgIGluc3RhbmNlIDEgaXMgYW4gZXh0ZXJuYWwgUEhZIGZ1cnRoZXIgYWxvbmcgdGhlIHBhdGgKJiM0MzsgICAgICAgICAgdG93YXJkIHRoZSBsaW5lIHNpZGUuCiYjNDM7ICAgICAgICAgIEZvciBNQUM6IGluc3RhbmNlIDAgaXMgdGhlIGhvc3QtZmFjaW5nIE1BQywgaW5zdGFuY2UgMSBpcwomIzQzOyAgICAgICAgICBhIHNlY29uZGFyeSBNQUMgZnVydGhlciBhbG9uZyB0aGUgZGF0YSBwYXRoIChlLmcuLCBiZWhpbmQKJiM0MzsgICAgICAgICAgYW4gZW1iZWRkZWQgc3dpdGNoKS4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBuYW1lCiYjNDM7ICAgICAgICB0eXBlOiBzdHJpbmcKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBkZXB0aAomIzQzOyAgICAgICAgdHlwZTogdTgKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBsYW5lcwomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogbG9vcGJhY2stc3VwcG9ydGVkCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBzdXBwb3J0ZWQtdHgtcGF0dGVybnMKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHN1cHBvcnRlZC1yeC1wYXR0ZXJucwomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogZXJyb3ItaW5qZWN0LXN1cHBvcnRlZAomIzQzOyAgICAgICAgdHlwZTogZmxhZwomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGJlcnQtc3VwcG9ydGVkCiYjNDM7ICAgICAgICB0eXBlOiBmbGFnCiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IGludGYtY2FwcwomIzQzOyAgICBkb2M6IEludGVyZmFjZSBjYXBhYmlsaXRpZXMgbWVzc2FnZS4KJiM0MzsgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBoZWFkZXIKJiM0MzsgICAgICAgIHR5cGU6IG5lc3QKJiM0MzsgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBoZWFkZXIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBibG9ja3MKJiM0MzsgICAgICAgIHR5cGU6IG5lc3QKJiM0MzsgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBpbnRmLWJsb2NrCiYjNDM7ICAgICAgICBtdWx0aS1hdHRyOiB0cnVlCiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IHBoeS10ZXN0CiYjNDM7ICAgIGRvYzogUEhZIHRlc3QgY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzLgomIzQzOyAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGhlYWRlcgomIzQzOyAgICAgICAgdHlwZTogbmVzdAomIzQzOyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGhlYWRlcgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGJsb2NrLWlkCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBsYW5lCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiB0eC1wYXR0ZXJuCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIGVudW06IHBoeS10ZXN0LXBhdHRlcm4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiByeC1wYXR0ZXJuCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIGVudW06IHBoeS10ZXN0LXBhdHRlcm4KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBiZXJ0LWFjdGlvbgomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBlbnVtOiBwaHktdGVzdC1hY3Rpb24KJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBpbmplY3QtZXJyb3ItY291bnQKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGFjdGl2ZS10ZXN0cwomIzQzOyAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAgICAgICBkb2M6IEJpdG1hc2sgb2YgY3VycmVudGx5IHJ1bm5pbmcgdGVzdHMgKGJpdCAwID0gQkVSVCkuCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogY2hlY2tlci1sb2NrCiYjNDM7ICAgICAgICB0eXBlOiB1OAomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGVycm9yLWNvdW50CiYjNDM7ICAgICAgICB0eXBlOiB1NjQKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiB0b3RhbC1iaXRzLXNlbnQKJiM0MzsgICAgICAgIHR5cGU6IHU2NAogCiBvcGVyYXRpb25zOgogICBlbnVtLW1vZGVsOiBkaXJlY3Rpb25hbApAQCAtMjg1OSw2ICYjNDM7MzAxNyw1NCBAQCBvcGVyYXRpb25zOgogICAgICAgICAgICAgLSB3b3JzdC1jaGFubmVsCiAgICAgICAgICAgICAtIGxpbmsKICAgICAgIGR1bXA6ICptc2UtZ2V0LW9wCiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBpbnRmLWNhcHMtZ2V0CiYjNDM7ICAgICAgZG9jOiBHZXQgaW50ZXJmYWNlIGNhcGFiaWxpdGllcyAoZnVuY3Rpb25hbCBibG9jayBsYXlvdXQpLgomIzQzOyAgICAgIGF0dHJpYnV0ZS1zZXQ6IGludGYtY2FwcwomIzQzOyAgICAgIGRvOiAmYW1wO2ludGYtY2Fwcy1nZXQtb3AKJiM0MzsgICAgICAgIHJlcXVlc3Q6CiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6CiYjNDM7ICAgICAgICAgICAgLSBoZWFkZXIKJiM0MzsgICAgICAgIHJlcGx5OgomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAgIC0gaGVhZGVyCiYjNDM7ICAgICAgICAgICAgLSBibG9ja3MKJiM0MzsgICAgICBkdW1wOiAqaW50Zi1jYXBzLWdldC1vcAomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogcGh5LXRlc3QtZ2V0CiYjNDM7ICAgICAgZG9jOiBHZXQgUEhZIHRlc3Qgc3RhdHVzIChwYXR0ZXJucywgQkVSVCBjb3VudGVycykuCiYjNDM7ICAgICAgYXR0cmlidXRlLXNldDogcGh5LXRlc3QKJiM0MzsgICAgICBkbzoKJiM0MzsgICAgICAgIHJlcXVlc3Q6CiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6CiYjNDM7ICAgICAgICAgICAgLSBoZWFkZXIKJiM0MzsgICAgICAgICAgICAtIGJsb2NrLWlkCiYjNDM7ICAgICAgICAgICAgLSBsYW5lCiYjNDM7ICAgICAgICByZXBseToKJiM0MzsgICAgICAgICAgYXR0cmlidXRlczoKJiM0MzsgICAgICAgICAgICAtIGhlYWRlcgomIzQzOyAgICAgICAgICAgIC0gYmxvY2staWQKJiM0MzsgICAgICAgICAgICAtIGxhbmUKJiM0MzsgICAgICAgICAgICAtIHR4LXBhdHRlcm4KJiM0MzsgICAgICAgICAgICAtIHJ4LXBhdHRlcm4KJiM0MzsgICAgICAgICAgICAtIGFjdGl2ZS10ZXN0cwomIzQzOyAgICAgICAgICAgIC0gY2hlY2tlci1sb2NrCiYjNDM7ICAgICAgICAgICAgLSBlcnJvci1jb3VudAomIzQzOyAgICAgICAgICAgIC0gdG90YWwtYml0cy1zZW50CiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBwaHktdGVzdC1hY3QKJiM0MzsgICAgICBkb2M6IENvbmZpZ3VyZSBQSFkgdGVzdCAoc2V0IHBhdHRlcm5zLCBzdGFydC9zdG9wIEJFUlQsIGluamVjdCBlcnJvcnMpLgomIzQzOyAgICAgIGF0dHJpYnV0ZS1zZXQ6IHBoeS10ZXN0CiYjNDM7ICAgICAgZG86CiYjNDM7ICAgICAgICByZXF1ZXN0OgomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAgIC0gaGVhZGVyCiYjNDM7ICAgICAgICAgICAgLSBibG9jay1pZAomIzQzOyAgICAgICAgICAgIC0gbGFuZQomIzQzOyAgICAgICAgICAgIC0gdHgtcGF0dGVybgomIzQzOyAgICAgICAgICAgIC0gcngtcGF0dGVybgomIzQzOyAgICAgICAgICAgIC0gYmVydC1hY3Rpb24KJiM0MzsgICAgICAgICAgICAtIGluamVjdC1lcnJvci1jb3VudAogCiBtY2FzdC1ncm91cHM6CiAgIGxpc3Q6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCmluZGV4IDEyNjgzYjVkMTI1ZTQuLmY5NzQ4ZTczOWYwM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCkBAIC0xMTk3LDYgJiM0MzsxMTk3LDkyIEBAIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvIHsKICAqIFNlZSAmYW1wO3N0cnVjdCBuZXRfZGV2aWNlIGFuZCAmYW1wO3N0cnVjdCBuZXRfZGV2aWNlX29wcyBmb3IgZG9jdW1lbnRhdGlvbgogICogb2YgdGhlIGdlbmVyaWMgbmV0ZGV2IGZlYXR1cmVzIGludGVyZmFjZS4KICAqLwomIzQzOwomIzQzOyNkZWZpbmUgSU5URl9DQVBTX01BWF9CTE9DS1MJMTYKJiM0MzsjZGVmaW5lIElOVEZfQkxPQ0tfTkFNRV9MRU4JMzIKJiM0MzsKJiM0MzsjZGVmaW5lIExPT1BCQUNLX1NVUFBPUlRfTE9DQUwJQklUKDApCiYjNDM7I2RlZmluZSBMT09QQkFDS19TVVBQT1JUX1JFTU9URQlCSVQoMSkKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrIC0gU2luZ2xlIGZ1bmN0aW9uYWwgYmxvY2sgaW4gdGhlIGludGVyZmFjZQomIzQzOyAqIEBpZDogVW5pcXVlIGJsb2NrIGlkZW50aWZpZXIKJiM0MzsgKiBAY29tcG9uZW50OiBIYXJkd2FyZSBjb21wb25lbnQgKE1BQywgUEhZLCBNT0RVTEUpCiYjNDM7ICogQHN1YmxheWVyOiA4MDIuMyBzdWJsYXllciAoUlMsIFBDUywgRkVDLCBQTUEsIFBNRCwgb3IgTk9ORSkKJiM0MzsgKiBAaW5zdGFuY2U6IEluZGV4IHdoZW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHNhbWUgY29tcG9uZW50IGV4aXN0CiYjNDM7ICogQG5hbWU6IERyaXZlci1jaG9zZW4gbGFiZWwKJiM0MzsgKiBAZGVwdGg6IE9yZGVyaW5nIHdpdGhpbiBzYW1lIChjb21wb25lbnQsIHN1YmxheWVyKSB0dXBsZQomIzQzOyAqIEBsYW5lczogTnVtYmVyIG9mIGxhbmVzCiYjNDM7ICogQGxvb3BiYWNrX3N1cHBvcnRlZDogQml0bWFzayBvZiBzdXBwb3J0ZWQgbG9vcGJhY2sgZGlyZWN0aW9ucwomIzQzOyAqIEBzdXBwb3J0ZWRfdHhfcGF0dGVybnM6IEJpdG1hc2sgb2YgcGF0dGVybnMgdGhpcyBibG9jayBjYW4gZ2VuZXJhdGUKJiM0MzsgKiBAc3VwcG9ydGVkX3J4X3BhdHRlcm5zOiBCaXRtYXNrIG9mIHBhdHRlcm5zIHRoaXMgYmxvY2sgY2FuIGNoZWNrCiYjNDM7ICogQGVycm9yX2luamVjdF9zdXBwb3J0ZWQ6IEJsb2NrIHN1cHBvcnRzIGJpdCBlcnJvciBpbmplY3Rpb24KJiM0MzsgKiBAYmVydF9zdXBwb3J0ZWQ6IEJsb2NrIHN1cHBvcnRzIEJFUlQgY291bnRlcnMKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrIHsKJiM0MzsJdTMyIGlkOwomIzQzOwllbnVtIGludGZfY29tcG9uZW50IGNvbXBvbmVudDsKJiM0MzsJZW51bSBpbnRmX3N1YmxheWVyIHN1YmxheWVyOwomIzQzOwl1MzIgaW5zdGFuY2U7CiYjNDM7CWNoYXIgbmFtZVtJTlRGX0JMT0NLX05BTUVfTEVOXTsKJiM0MzsJdTggZGVwdGg7CiYjNDM7CXUzMiBsYW5lczsKJiM0MzsJdTMyIGxvb3BiYWNrX3N1cHBvcnRlZDsKJiM0MzsJdTMyIHN1cHBvcnRlZF90eF9wYXR0ZXJuczsKJiM0MzsJdTMyIHN1cHBvcnRlZF9yeF9wYXR0ZXJuczsKJiM0MzsJYm9vbCBlcnJvcl9pbmplY3Rfc3VwcG9ydGVkOwomIzQzOwlib29sIGJlcnRfc3VwcG9ydGVkOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzIC0gSW50ZXJmYWNlIGNhcGFiaWxpdGllcyAoYWxsIGJsb2NrcykKJiM0MzsgKiBAbnVtX2Jsb2NrczogTnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4gYmxvY2tzW10KJiM0MzsgKiBAYmxvY2tzOiBBcnJheSBvZiBmdW5jdGlvbmFsIGJsb2NrcwomIzQzOyAqLwomIzQzO3N0cnVjdCBldGh0b29sX2ludGZfY2FwcyB7CiYjNDM7CXUzMiBudW1fYmxvY2tzOwomIzQzOwlzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrIGJsb2Nrc1tJTlRGX0NBUFNfTUFYX0JMT0NLU107CiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBCaXRtYXNrIG9mIHdoaWNoIGV0aHRvb2xfcGh5X3Rlc3QgZmllbGRzIHdlcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgKi8KJiM0MzsjZGVmaW5lIFBIWV9URVNUX0NNRF9UWF9QQVRURVJOCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFBIWV9URVNUX0NNRF9SWF9QQVRURVJOCQlCSVQoMSkKJiM0MzsjZGVmaW5lIFBIWV9URVNUX0NNRF9CRVJUX0FDVElPTgkJQklUKDIpCiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfSU5KRUNUX0NPVU5UCQlCSVQoMykKJiM0MzsjZGVmaW5lIFBIWV9URVNUX0NNRF9MQU5FCQkJQklUKDQpCiYjNDM7I2RlZmluZSBQSFlfVEVTVF9DTURfQkxPQ0tfSUQJCQlCSVQoNSkKJiM0MzsKJiM0MzsvKiBCaXRtYXNrIG9mIGN1cnJlbnRseSBhY3RpdmUgdGVzdHMgKHJlYWQtb25seSkgKi8KJiM0MzsjZGVmaW5lIFBIWV9URVNUX0FDVElWRV9CRVJUCQlCSVQoMCkKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCAtIFBIWSB0ZXN0IGNvbmZpZ3VyYXRpb24gYW5kIHN0YXR1cwomIzQzOyAqIEBjbWQ6IEJpdG1hc2sgb2Ygd2hpY2ggZmllbGRzIGFyZSB2YWxpZCAoUEhZX1RFU1RfQ01EXyopCiYjNDM7ICogQGJsb2NrX2lkOiBCbG9jayB0byBvcGVyYXRlIG9uIChmcm9tIGludGYtY2Fwcy1nZXQpCiYjNDM7ICogQGxhbmU6IExhbmUgbnVtYmVyICgwLWJhc2VkKQomIzQzOyAqIEB0eF9wYXR0ZXJuOiBUWCBwYXR0ZXJuIGdlbmVyYXRvciBzZXR0aW5nCiYjNDM7ICogQHJ4X3BhdHRlcm46IFJYIHBhdHRlcm4gY2hlY2tlciBzZXR0aW5nCiYjNDM7ICogQGJlcnRfYWN0aW9uOiBCRVJUIHN0YXJ0L3N0b3AgY29udHJvbAomIzQzOyAqIEBpbmplY3RfZXJyb3JfY291bnQ6IE51bWJlciBvZiBlcnJvcnMgdG8gaW5qZWN0CiYjNDM7ICogQGFjdGl2ZV90ZXN0czogQml0bWFzayBvZiBydW5uaW5nIHRlc3RzIChQSFlfVEVTVF9BQ1RJVkVfKikKJiM0MzsgKiBAY2hlY2tlcl9sb2NrOiBSWCBjaGVja2VyIGxvY2sgc3RhdHVzIChyZWFkLW9ubHkpCiYjNDM7ICogQGVycm9yX2NvdW50OiBCRVJUIGVycm9yIGNvdW50ZXIgKHJlYWQtb25seSkKJiM0MzsgKiBAdG90YWxfYml0c19zZW50OiBCRVJUIHRvdGFsIGJpdHMgY291bnRlciAocmVhZC1vbmx5KQomIzQzOyAqLwomIzQzO3N0cnVjdCBldGh0b29sX3BoeV90ZXN0IHsKJiM0MzsJdTMyIGNtZDsKJiM0MzsJdTMyIGJsb2NrX2lkOwomIzQzOwl1MzIgbGFuZTsKJiM0MzsJZW51bSBwaHlfdGVzdF9wYXR0ZXJuIHR4X3BhdHRlcm47CiYjNDM7CWVudW0gcGh5X3Rlc3RfcGF0dGVybiByeF9wYXR0ZXJuOwomIzQzOwllbnVtIHBoeV90ZXN0X2FjdGlvbiBiZXJ0X2FjdGlvbjsKJiM0MzsJdTMyIGluamVjdF9lcnJvcl9jb3VudDsKJiM0MzsJdTMyIGFjdGl2ZV90ZXN0czsKJiM0MzsJdTggY2hlY2tlcl9sb2NrOwomIzQzOwl1NjQgZXJyb3JfY291bnQ7CiYjNDM7CXU2NCB0b3RhbF9iaXRzX3NlbnQ7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBldGh0b29sX29wcyB7CiAJdTMyICAgICBzdXBwb3J0ZWRfaW5wdXRfeGZybTo4OwogCXUzMiAgICAgY2FwX2xpbmtfbGFuZXNfc3VwcG9ydGVkOjE7CkBAIC0xMzU0LDYgJiM0MzsxNDQwLDEyIEBAIHN0cnVjdCBldGh0b29sX29wcyB7CiAJaW50CSgqc2V0X21tKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9jZmcgKmNmZywKIAkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIAl2b2lkCSgqZ2V0X21tX3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqc3RhdHMpOwomIzQzOwlpbnQJKCpnZXRfaW50Zl9jYXBzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgc3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzICpjYXBzKTsKJiM0MzsJaW50CSgqZ2V0X3BoeV90ZXN0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQlzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCAqdGVzdCk7CiYjNDM7CWludAkoKnNldF9waHlfdGVzdCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnRlc3QpOwogfTsKIAogaW50IGV0aHRvb2xfY2hlY2tfb3BzKGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oCmluZGV4IDgxMzRiYWY3ODYwZjMuLjMxMDJiYjdiYTMzN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaApAQCAtODkzLDYgJiM0Mzs4OTMsOSBAQCBlbnVtIHsKIAlFVEhUT09MX01TR19SU1NfQ1JFQVRFX0FDVCwKIAlFVEhUT09MX01TR19SU1NfREVMRVRFX0FDVCwKIAlFVEhUT09MX01TR19NU0VfR0VULAomIzQzOwlFVEhUT09MX01TR19JTlRGX0NBUFNfR0VULAomIzQzOwlFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsCiYjNDM7CUVUSFRPT0xfTVNHX1BIWV9URVNUX0FDVCwKIAogCV9fRVRIVE9PTF9NU0dfVVNFUl9DTlQsCiAJRVRIVE9PTF9NU0dfVVNFUl9NQVggPSAoX19FVEhUT09MX01TR19VU0VSX0NOVCAtIDEpCkBAIC05NTQsNiAmIzQzOzk1Nyw4IEBAIGVudW0gewogCUVUSFRPT0xfTVNHX1JTU19DUkVBVEVfTlRGLAogCUVUSFRPT0xfTVNHX1JTU19ERUxFVEVfTlRGLAogCUVUSFRPT0xfTVNHX01TRV9HRVRfUkVQTFksCiYjNDM7CUVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRfUkVQTFksCiYjNDM7CUVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVF9SRVBMWSwKIAogCV9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCwKIAlFVEhUT09MX01TR19LRVJORUxfTUFYID0gKF9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCAtIDEpCkBAIC05NjEsNCAmIzQzOzk2NiwxMDMgQEAgZW51bSB7CiAKICNkZWZpbmUgRVRIVE9PTF9NQ0dSUF9NT05JVE9SX05BTUUJJiMzNDttb25pdG9yJiMzNDsKIAomIzQzOy8qIEludGVyZmFjZSBjb21wb25lbnQgdHlwZXMgKi8KJiM0MztlbnVtIGludGZfY29tcG9uZW50IHsKJiM0MzsJSU5URl9DT01QT05FTlRfTUFDLAomIzQzOwlJTlRGX0NPTVBPTkVOVF9QSFksCiYjNDM7CUlOVEZfQ09NUE9ORU5UX01PRFVMRSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qIEludGVyZmFjZSBzdWJsYXllciB0eXBlcyAqLwomIzQzO2VudW0gaW50Zl9zdWJsYXllciB7CiYjNDM7CUlOVEZfU1VCTEFZRVJfTk9ORSwKJiM0MzsJSU5URl9TVUJMQVlFUl9SUywKJiM0MzsJSU5URl9TVUJMQVlFUl9QQ1MsCiYjNDM7CUlOVEZfU1VCTEFZRVJfRkVDLAomIzQzOwlJTlRGX1NVQkxBWUVSX1BNQSwKJiM0MzsJSU5URl9TVUJMQVlFUl9QTUQsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBBdHRyaWJ1dGVzIG9mIGEgc2luZ2xlIGludGVyZmFjZSBibG9jayAqLwomIzQzO2VudW0gewomIzQzOwlFVEhUT09MX0FfSU5URl9CTE9DS19JRCwKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQkxPQ0tfQ09NUE9ORU5ULAomIzQzOwlFVEhUT09MX0FfSU5URl9CTE9DS19TVUJMQVlFUiwKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQkxPQ0tfSU5TVEFOQ0UsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0JMT0NLX05BTUUsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0JMT0NLX0RFUFRILAomIzQzOwlFVEhUT09MX0FfSU5URl9CTE9DS19MQU5FUywKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTE9PUEJBQ0tfU1VQUE9SVEVELAomIzQzOwlFVEhUT09MX0FfSU5URl9CTE9DS19UWF9QQVRURVJOUywKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQkxPQ0tfUlhfUEFUVEVSTlMsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0JMT0NLX0VSUk9SX0lOSkVDVCwKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQkxPQ0tfQkVSVCwKJiM0MzsKJiM0MzsJX19FVEhUT09MX0FfSU5URl9CTE9DS19DTlQsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0JMT0NLX01BWCA9IChfX0VUSFRPT0xfQV9JTlRGX0JMT0NLX0NOVCAtIDEpCiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBBdHRyaWJ1dGVzIG9mIGludGYtY2Fwcy1nZXQgbWVzc2FnZSAqLwomIzQzO2VudW0gewomIzQzOwlFVEhUT09MX0FfSU5URl9DQVBTX1VOU1BFQywKJiM0MzsJRVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIsCiYjNDM7CUVUSFRPT0xfQV9JTlRGX0NBUFNfQkxPQ0tTLAomIzQzOwomIzQzOwlfX0VUSFRPT0xfQV9JTlRGX0NBUFNfQ05ULAomIzQzOwlFVEhUT09MX0FfSU5URl9DQVBTX01BWCA9IChfX0VUSFRPT0xfQV9JTlRGX0NBUFNfQ05UIC0gMSkKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFBIWSB0ZXN0IHBhdHRlcm4gdHlwZXMgKi8KJiM0MztlbnVtIHBoeV90ZXN0X3BhdHRlcm4gewomIzQzOwlQSFlfVEVTVF9QQVRURVJOX09GRiwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9QUkJTNywKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9QUkJTOSwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9QUkJTMTEsCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fUFJCUzEzLAomIzQzOwlQSFlfVEVTVF9QQVRURVJOX1BSQlMxNSwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9QUkJTMjMsCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fUFJCUzMxLAomIzQzOwlQSFlfVEVTVF9QQVRURVJOX1NTUFJRLAomIzQzOwlQSFlfVEVTVF9QQVRURVJOX1BSQlMxM1EsCiYjNDM7CVBIWV9URVNUX1BBVFRFUk5fUFJCUzMxUSwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9TUVVBUkVfTlJaLAomIzQzOwlQSFlfVEVTVF9QQVRURVJOX1NRVUFSRV9QQU00LAomIzQzOwlQSFlfVEVTVF9QQVRURVJOX1RYX0xJTkVBUklUWSwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9TQ1JBTUJMRURfSURMRSwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9LMjhfNSwKJiM0MzsJUEhZX1RFU1RfUEFUVEVSTl9LMjhfNywKJiM0MzsKJiM0MzsJX19QSFlfVEVTVF9QQVRURVJOX0NPVU5ULAomIzQzOwlQSFlfVEVTVF9QQVRURVJOX01BWCA9IChfX1BIWV9URVNUX1BBVFRFUk5fQ09VTlQgLSAxKQomIzQzO307CiYjNDM7CiYjNDM7LyogUEhZIHRlc3QgQkVSVCBhY3Rpb25zICovCiYjNDM7ZW51bSBwaHlfdGVzdF9hY3Rpb24gewomIzQzOwlQSFlfVEVTVF9BQ1RJT05fTk9ORSwKJiM0MzsJUEhZX1RFU1RfQUNUSU9OX1NUQVJULAomIzQzOwlQSFlfVEVTVF9BQ1RJT05fU1RPUCwKJiM0MzsKJiM0MzsJX19QSFlfVEVTVF9BQ1RJT05fQ09VTlQsCiYjNDM7CVBIWV9URVNUX0FDVElPTl9NQVggPSAoX19QSFlfVEVTVF9BQ1RJT05fQ09VTlQgLSAxKQomIzQzO307CiYjNDM7CiYjNDM7LyogQXR0cmlidXRlcyBvZiBwaHktdGVzdC1nZXQgLyBwaHktdGVzdC1hY3QgbWVzc2FnZXMgKi8KJiM0MztlbnVtIHsKJiM0MzsJRVRIVE9PTF9BX1BIWV9URVNUX1VOU1BFQywKJiM0MzsJRVRIVE9PTF9BX1BIWV9URVNUX0hFQURFUiwKJiM0MzsJRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lELAomIzQzOwlFVEhUT09MX0FfUEhZX1RFU1RfTEFORSwKJiM0MzsJRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk4sCiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOLAomIzQzOwlFVEhUT09MX0FfUEhZX1RFU1RfQkVSVF9BQ1RJT04sCiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9JTkpFQ1RfRVJST1JfQ09VTlQsCiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9BQ1RJVkVfVEVTVFMsCiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9DSEVDS0VSX0xPQ0ssCiYjNDM7CUVUSFRPT0xfQV9QSFlfVEVTVF9FUlJPUl9DT1VOVCwKJiM0MzsJRVRIVE9PTF9BX1BIWV9URVNUX1RPVEFMX0JJVFNfU0VOVCwKJiM0MzsKJiM0MzsJX19FVEhUT09MX0FfUEhZX1RFU1RfQ05ULAomIzQzOwlFVEhUT09MX0FfUEhZX1RFU1RfTUFYID0gKF9fRVRIVE9PTF9BX1BIWV9URVNUX0NOVCAtIDEpCiYjNDM7fTsKJiM0MzsKICNlbmRpZiAvKiBfVUFQSV9MSU5VWF9FVEhUT09MX05FVExJTktfR0VORVJBVEVEX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL01ha2VmaWxlIGIvbmV0L2V0aHRvb2wvTWFrZWZpbGUKaW5kZXggNjI5YzEwOTE2NjcwZS4uN2RkMmM1NjI0Y2VkZiAxMDA2NDQKLS0tIGEvbmV0L2V0aHRvb2wvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvTWFrZWZpbGUKQEAgLTksNCAmIzQzOzksNCBAQCBldGh0b29sX25sLXkJOj0gbmV0bGluay5vIGJpdHNldC5vIHN0cnNldC5vIGxpbmtpbmZvLm8gbGlua21vZGVzLm8gcnNzLm8gXAogCQkgICBjaGFubmVscy5vIGNvYWxlc2NlLm8gcGF1c2UubyBlZWUubyB0c2luZm8ubyBjYWJsZXRlc3QubyBcCiAJCSAgIHR1bm5lbHMubyBmZWMubyBlZXByb20ubyBzdGF0cy5vIHBoY192Y2xvY2tzLm8gbW0ubyBcCiAJCSAgIG1vZHVsZS5vIGNtaXNfZndfdXBkYXRlLm8gY21pc19jZGIubyBwc2UtcGQubyBwbGNhLm8gXAotCQkgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vCiYjNDM7CQkgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vIGludGZfY2Fwcy5vIHBoeXRlc3QubwpkaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMgYi9uZXQvZXRodG9vbC9pbnRmX2NhcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5lNDVjY2M0Yjg4YzlmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMKQEAgLTAsMCAmIzQzOzEsMTMwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7bmV0bGluay5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgaW50Zl9jYXBzX3JlcV9pbmZvIHsKJiM0MzsJc3RydWN0IGV0aG5sX3JlcV9pbmZvIGJhc2U7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGEgewomIzQzOwlzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSBiYXNlOwomIzQzOwlzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHMgY2FwczsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgSU5URl9DQVBTX1JFUERBVEEoX19yZXBseV9iYXNlKSBcCiYjNDM7CWNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSwgYmFzZSkKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeVtFVEhUT09MX0FfSU5URl9DQVBTX0hFQURFUiAmIzQzOyAxXSA9IHsKJiM0MzsJW0VUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSXSA9CiYjNDM7CQlOTEFfUE9MSUNZX05FU1RFRChldGhubF9oZWFkZXJfcG9saWN5KSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgaW50Zl9jYXBzX3JlcGx5X3NpemUoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSwKJiM0MzsJCQkJY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGEgKmRhdGEgPSBJTlRGX0NBUFNfUkVQREFUQShyZXBseV9iYXNlKTsKJiM0MzsJaW50IGxlbiA9IDA7CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgZGF0YS0mZ3Q7Y2Fwcy5udW1fYmxvY2tzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZSgwKTsJCS8qIG5lc3RlZCBibG9jayAqLwomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CS8qIGlkICovCiYjNDM7CQlsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsJLyogY29tcG9uZW50ICovCiYjNDM7CQlsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsJLyogc3VibGF5ZXIgKi8KJiM0MzsJCWxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwkvKiBpbnN0YW5jZSAqLwomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZShJTlRGX0JMT0NLX05BTUVfTEVOKTsgLyogbmFtZSAqLwomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKTsJLyogZGVwdGggKi8KJiM0MzsJCWxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwkvKiBsYW5lcyAqLwomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CS8qIGxvb3BiYWNrX3N1cHBvcnRlZCAqLwomIzQzOwkJbGVuICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CS8qIHR4X3BhdHRlcm5zICovCiYjNDM7CQlsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsJLyogcnhfcGF0dGVybnMgKi8KJiM0MzsJCWxlbiAmIzQzOz0gbmxhX3RvdGFsX3NpemUoMCk7CQkvKiBlcnJvcl9pbmplY3QgKGZsYWcpICovCiYjNDM7CQlsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKDApOwkJLyogYmVydCAoZmxhZykgKi8KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBvdXRlciBCTE9DS1MgbmVzdCAqLwomIzQzOwlsZW4gJiM0Mzs9IG5sYV90b3RhbF9zaXplKDApOwomIzQzOwomIzQzOwlyZXR1cm4gbGVuOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGludGZfY2Fwc19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSwKJiM0MzsJCQkJICBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSwKJiM0MzsJCQkJICBjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhICpkYXRhID0gSU5URl9DQVBTX1JFUERBVEEocmVwbHlfYmFzZSk7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSByZXBseV9iYXNlLSZndDtkZXY7CiYjNDM7CiYjNDM7CWlmICghZGV2LSZndDtldGh0b29sX29wcy0mZ3Q7Z2V0X2ludGZfY2FwcykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0dXJuIGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9pbnRmX2NhcHMoZGV2LCAmYW1wO2RhdGEtJmd0O2NhcHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGludGZfY2Fwc19maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhICpkYXRhID0gSU5URl9DQVBTX1JFUERBVEEocmVwbHlfYmFzZSk7CiYjNDM7CXN0cnVjdCBubGF0dHIgKmJsb2Nrc19hdHRyOwomIzQzOwl1MzIgaTsKJiM0MzsKJiM0MzsJYmxvY2tzX2F0dHIgPSBubGFfbmVzdF9zdGFydChza2IsIEVUSFRPT0xfQV9JTlRGX0NBUFNfQkxPQ0tTKTsKJiM0MzsJaWYgKCFibG9ja3NfYXR0cikKJiM0MzsJCXJldHVybiAtRU1TR1NJWkU7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkYXRhLSZndDtjYXBzLm51bV9ibG9ja3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrICpiID0gJmFtcDtkYXRhLSZndDtjYXBzLmJsb2Nrc1tpXTsKJiM0MzsJCXN0cnVjdCBubGF0dHIgKmJsb2NrX2F0dHI7CiYjNDM7CiYjNDM7CQlibG9ja19hdHRyID0gbmxhX25lc3Rfc3RhcnQoc2tiLCAwKTsKJiM0MzsJCWlmICghYmxvY2tfYXR0cikKJiM0MzsJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKJiM0MzsKJiM0MzsJCWlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0lELCBiLSZndDtpZCkgfHwKJiM0MzsJCSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0NPTVBPTkVOVCwKJiM0MzsJCQkJYi0mZ3Q7Y29tcG9uZW50KSB8fAomIzQzOwkJICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfU1VCTEFZRVIsCiYjNDM7CQkJCWItJmd0O3N1YmxheWVyKSB8fAomIzQzOwkJICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfSU5TVEFOQ0UsCiYjNDM7CQkJCWItJmd0O2luc3RhbmNlKSB8fAomIzQzOwkJICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTkFNRSwgYi0mZ3Q7bmFtZSkgfHwKJiM0MzsJCSAgICBubGFfcHV0X3U4KHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfREVQVEgsIGItJmd0O2RlcHRoKSB8fAomIzQzOwkJICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTEFORVMsIGItJmd0O2xhbmVzKSB8fAomIzQzOwkJICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTE9PUEJBQ0tfU1VQUE9SVEVELAomIzQzOwkJCQliLSZndDtsb29wYmFja19zdXBwb3J0ZWQpIHx8CiYjNDM7CQkgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19UWF9QQVRURVJOUywKJiM0MzsJCQkJYi0mZ3Q7c3VwcG9ydGVkX3R4X3BhdHRlcm5zKSB8fAomIzQzOwkJICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfUlhfUEFUVEVSTlMsCiYjNDM7CQkJCWItJmd0O3N1cHBvcnRlZF9yeF9wYXR0ZXJucykpCiYjNDM7CQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CQlpZiAoYi0mZ3Q7ZXJyb3JfaW5qZWN0X3N1cHBvcnRlZCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbmxhX3B1dF9mbGFnKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfRVJST1JfSU5KRUNUKSkKJiM0MzsJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKJiM0MzsJCWlmIChiLSZndDtiZXJ0X3N1cHBvcnRlZCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbmxhX3B1dF9mbGFnKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfQkVSVCkpCiYjNDM7CQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CiYjNDM7CQlubGFfbmVzdF9lbmQoc2tiLCBibG9ja19hdHRyKTsKJiM0MzsJfQomIzQzOwomIzQzOwlubGFfbmVzdF9lbmQoc2tiLCBibG9ja3NfYXR0cik7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO25sYV9wdXRfZmFpbHVyZToKJiM0MzsJbmxhX25lc3RfY2FuY2VsKHNrYiwgYmxvY2tzX2F0dHIpOwomIzQzOwlyZXR1cm4gLUVNU0dTSVpFOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfaW50Zl9jYXBzX3JlcXVlc3Rfb3BzID0gewomIzQzOwkucmVxdWVzdF9jbWQJPSBFVEhUT09MX01TR19JTlRGX0NBUFNfR0VULAomIzQzOwkucmVwbHlfY21kCT0gRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVF9SRVBMWSwKJiM0MzsJLmhkcl9hdHRyCT0gRVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIsCiYjNDM7CS5yZXFfaW5mb19zaXplCT0gc2l6ZW9mKHN0cnVjdCBpbnRmX2NhcHNfcmVxX2luZm8pLAomIzQzOwkucmVwbHlfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSksCiYjNDM7CS5wcmVwYXJlX2RhdGEJPSBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhLAomIzQzOwkucmVwbHlfc2l6ZQk9IGludGZfY2Fwc19yZXBseV9zaXplLAomIzQzOwkuZmlsbF9yZXBseQk9IGludGZfY2Fwc19maWxsX3JlcGx5LAomIzQzO307CmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmMgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmMKaW5kZXggMWFmMzk1YjU0MzMwZS4uNTZlNWM4MTE0NTRiYiAxMDA2NDQKLS0tIGEvbmV0L2V0aHRvb2wvbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL25ldGxpbmsuYwpAQCAtNDMxLDYgJiM0Mzs0MzEsOCBAQCBldGhubF9kZWZhdWx0X3JlcXVlc3RzW19fRVRIVE9PTF9NU0dfVVNFUl9DTlRdID0gewogCVtFVEhUT09MX01TR19UU0NPTkZJR19TRVRdCT0gJmFtcDtldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wcywKIAlbRVRIVE9PTF9NU0dfUEhZX0dFVF0JCT0gJmFtcDtldGhubF9waHlfcmVxdWVzdF9vcHMsCiAJW0VUSFRPT0xfTVNHX01TRV9HRVRdCQk9ICZhbXA7ZXRobmxfbXNlX3JlcXVlc3Rfb3BzLAomIzQzOwlbRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVF0JPSAmYW1wO2V0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcywKJiM0MzsJW0VUSFRPT0xfTVNHX1BIWV9URVNUX0dFVF0JPSAmYW1wO2V0aG5sX3BoeV90ZXN0X3JlcXVlc3Rfb3BzLAogfTsKIAogc3RhdGljIHN0cnVjdCBldGhubF9kdW1wX2N0eCAqZXRobmxfZHVtcF9jb250ZXh0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKQEAgLTE1NzIsNiAmIzQzOzE1NzQsMjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBldGh0b29sX2dlbmxfb3BzW10gPSB7CiAJCS5wb2xpY3kgPSBldGhubF9tc2VfZ2V0X3BvbGljeSwKIAkJLm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX21zZV9nZXRfcG9saWN5KSAtIDEsCiAJfSwKJiM0MzsJewomIzQzOwkJLmNtZAk9IEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVQsCiYjNDM7CQkuZG9pdAk9IGV0aG5sX2RlZmF1bHRfZG9pdCwKJiM0MzsJCS5zdGFydAk9IGV0aG5sX2RlZmF1bHRfc3RhcnQsCiYjNDM7CQkuZHVtcGl0CT0gZXRobmxfZGVmYXVsdF9kdW1waXQsCiYjNDM7CQkuZG9uZQk9IGV0aG5sX2RlZmF1bHRfZG9uZSwKJiM0MzsJCS5wb2xpY3kgPSBldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeSwKJiM0MzsJCS5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeSkgLSAxLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkuY21kCT0gRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULAomIzQzOwkJLmRvaXQJPSBldGhubF9kZWZhdWx0X2RvaXQsCiYjNDM7CQkucG9saWN5ID0gZXRobmxfcGh5X3Rlc3RfZ2V0X3BvbGljeSwKJiM0MzsJCS5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9waHlfdGVzdF9nZXRfcG9saWN5KSAtIDEsCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS5jbWQJPSBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QsCiYjNDM7CQkuZmxhZ3MJPSBHRU5MX1VOU19BRE1JTl9QRVJNLAomIzQzOwkJLmRvaXQJPSBldGhubF9hY3RfcGh5X3Rlc3QsCiYjNDM7CQkucG9saWN5ID0gZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeSwKJiM0MzsJCS5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9waHlfdGVzdF9hY3RfcG9saWN5KSAtIDEsCiYjNDM7CX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIGV0aHRvb2xfbmxfbWNncnBzW10gPSB7CmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmggYi9uZXQvZXRodG9vbC9uZXRsaW5rLmgKaW5kZXggM2U5NjlhMDcwZjlmZS4uMWNhYmE2MGQ4M2M0MyAxMDA2NDQKLS0tIGEvbmV0L2V0aHRvb2wvbmV0bGluay5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL25ldGxpbmsuaApAQCAtNDc0LDYgJiM0Mzs0NzQsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX21tX3JlcXVlc3Rfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfcmVxdWVzdF9vcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3RzY29uZmlnX3JlcXVlc3Rfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tc2VfcmVxdWVzdF9vcHM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9pbnRmX2NhcHNfcmVxdWVzdF9vcHM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wczsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lbRVRIVE9PTF9BX0hFQURFUl9GTEFHUyAmIzQzOyAxXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5X3N0YXRzW0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgJiM0MzsgMV07CkBAIC01MzAsNiAmIzQzOzUzMiwxMSBAQCBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9IRUFERVIgJiM0MzsgMV07CiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfdHNjb25maWdfZ2V0X3BvbGljeVtFVEhUT09MX0FfVFNDT05GSUdfSEVBREVSICYjNDM7IDFdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX3NldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX01BWCAmIzQzOyAxXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9tc2VfZ2V0X3BvbGljeVtFVEhUT09MX0FfTVNFX0hFQURFUiAmIzQzOyAxXTsKJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3lbRVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIgJiM0MzsgMV07CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkUgJiM0MzsgMV07CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV90ZXN0X2FjdF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9URVNUX01BWCAmIzQzOyAxXTsKJiM0MzsKJiM0MztpbnQgZXRobmxfYWN0X3BoeV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogCiBpbnQgZXRobmxfc2V0X2ZlYXR1cmVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogaW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwpkaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvcGh5dGVzdC5jIGIvbmV0L2V0aHRvb2wvcGh5dGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmRlZGNkMDM2YjdjMmUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9waHl0ZXN0LmMKQEAgLTAsMCAmIzQzOzEsMTcxIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7bmV0bGluay5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgcGh5X3Rlc3RfcmVxX2luZm8gewomIzQzOwlzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhIHsKJiM0MzsJc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgYmFzZTsKJiM0MzsJc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgdGVzdDsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgUEhZX1RFU1RfUkVQREFUQShfX3JlcGx5X2Jhc2UpIFwKJiM0MzsJY29udGFpbmVyX29mKF9fcmVwbHlfYmFzZSwgc3RydWN0IHBoeV90ZXN0X3JlcGx5X2RhdGEsIGJhc2UpCiYjNDM7CiYjNDM7LyogUEhZX1RFU1RfR0VUICovCiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X3Rlc3RfZ2V0X3BvbGljeVtFVEhUT09MX0FfUEhZX1RFU1RfTEFORSAmIzQzOyAxXSA9IHsKJiM0MzsJW0VUSFRPT0xfQV9QSFlfVEVTVF9IRUFERVJdCT0gTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksCiYjNDM7CVtFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKJiM0MzsJW0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHBoeV90ZXN0X3JlcGx5X3NpemUoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSwKJiM0MzsJCQkgICAgICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpCiYjNDM7ewomIzQzOwlyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7CS8qIGJsb2NrX2lkICovCiYjNDM7CSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MzsJLyogbGFuZSAqLwomIzQzOwkgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7CS8qIHR4X3BhdHRlcm4gKi8KJiM0MzsJICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOwkvKiByeF9wYXR0ZXJuICovCiYjNDM7CSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MzsJLyogYWN0aXZlX3Rlc3RzICovCiYjNDM7CSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSAgJiM0MzsJLyogY2hlY2tlcl9sb2NrICovCiYjNDM7CSAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTY0KSkgJiM0MzsJLyogZXJyb3JfY291bnQgKi8KJiM0MzsJICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1NjQpKTsJLyogdG90YWxfYml0c19zZW50ICovCiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsCiYjNDM7CQkJCSBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSwKJiM0MzsJCQkJIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGh5X3Rlc3RfcmVwbHlfZGF0YSAqZGF0YSA9IFBIWV9URVNUX1JFUERBVEEocmVwbHlfYmFzZSk7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSByZXBseV9iYXNlLSZndDtkZXY7CiYjNDM7CXN0cnVjdCBubGF0dHIgKip0YiA9IGluZm8tJmd0O2F0dHJzOwomIzQzOwomIzQzOwlpZiAoIWRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9waHlfdGVzdCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJbWVtc2V0KCZhbXA7ZGF0YS0mZ3Q7dGVzdCwgMCwgc2l6ZW9mKGRhdGEtJmd0O3Rlc3QpKTsKJiM0MzsKJiM0MzsJaWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9CTE9DS19JRF0pIHsKJiM0MzsJCWRhdGEtJmd0O3Rlc3QuYmxvY2tfaWQgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKTsKJiM0MzsJCWRhdGEtJmd0O3Rlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CTE9DS19JRDsKJiM0MzsJfQomIzQzOwlpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKSB7CiYjNDM7CQlkYXRhLSZndDt0ZXN0LmxhbmUgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfTEFORV0pOwomIzQzOwkJZGF0YS0mZ3Q7dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0xBTkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9waHlfdGVzdChkZXYsICZhbXA7ZGF0YS0mZ3Q7dGVzdCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGh5X3Rlc3RfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhICpkYXRhID0gUEhZX1RFU1RfUkVQREFUQShyZXBseV9iYXNlKTsKJiM0MzsJY29uc3Qgc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnQgPSAmYW1wO2RhdGEtJmd0O3Rlc3Q7CiYjNDM7CiYjNDM7CWlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9CTE9DS19JRCwgdC0mZ3Q7YmxvY2tfaWQpIHx8CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9MQU5FLCB0LSZndDtsYW5lKSB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfVFhfUEFUVEVSTiwgdC0mZ3Q7dHhfcGF0dGVybikgfHwKJiM0MzsJICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX1JYX1BBVFRFUk4sIHQtJmd0O3J4X3BhdHRlcm4pIHx8CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9BQ1RJVkVfVEVTVFMsCiYjNDM7CQkJdC0mZ3Q7YWN0aXZlX3Rlc3RzKSB8fAomIzQzOwkgICAgbmxhX3B1dF91OChza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9DSEVDS0VSX0xPQ0ssIHQtJmd0O2NoZWNrZXJfbG9jaykgfHwKJiM0MzsJICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0VSUk9SX0NPVU5ULAomIzQzOwkJCSAgICAgIHQtJmd0O2Vycm9yX2NvdW50LCBFVEhUT09MX0FfUEhZX1RFU1RfVU5TUEVDKSB8fAomIzQzOwkgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfVE9UQUxfQklUU19TRU5ULAomIzQzOwkJCSAgICAgIHQtJmd0O3RvdGFsX2JpdHNfc2VudCwgRVRIVE9PTF9BX1BIWV9URVNUX1VOU1BFQykpCiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BoeV90ZXN0X3JlcXVlc3Rfb3BzID0gewomIzQzOwkucmVxdWVzdF9jbWQJPSBFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsCiYjNDM7CS5yZXBseV9jbWQJPSBFVEhUT09MX01TR19QSFlfVEVTVF9HRVRfUkVQTFksCiYjNDM7CS5oZHJfYXR0cgk9IEVUSFRPT0xfQV9QSFlfVEVTVF9IRUFERVIsCiYjNDM7CS5yZXFfaW5mb19zaXplCT0gc2l6ZW9mKHN0cnVjdCBwaHlfdGVzdF9yZXFfaW5mbyksCiYjNDM7CS5yZXBseV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHBoeV90ZXN0X3JlcGx5X2RhdGEpLAomIzQzOwkucHJlcGFyZV9kYXRhCT0gcGh5X3Rlc3RfcHJlcGFyZV9kYXRhLAomIzQzOwkucmVwbHlfc2l6ZQk9IHBoeV90ZXN0X3JlcGx5X3NpemUsCiYjNDM7CS5maWxsX3JlcGx5CT0gcGh5X3Rlc3RfZmlsbF9yZXBseSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFBIWV9URVNUX0FDVCAqLwomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV90ZXN0X2FjdF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9URVNUX01BWCAmIzQzOyAxXSA9IHsKJiM0MzsJW0VUSFRPT0xfQV9QSFlfVEVTVF9IRUFERVJdCQk9IE5MQV9QT0xJQ1lfTkVTVEVEKGV0aG5sX2hlYWRlcl9wb2xpY3kpLAomIzQzOwlbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAomIzQzOwlbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiYjNDM7CVtFVEhUT09MX0FfUEhZX1RFU1RfVFhfUEFUVEVSTl0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKJiM0MzsJW0VUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAomIzQzOwlbRVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiYjNDM7CVtFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiYjNDM7fTsKJiM0MzsKJiM0MztpbnQgZXRobmxfYWN0X3BoeV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZXRobmxfcmVxX2luZm8gcmVxX2luZm8gPSB7fTsKJiM0MzsJc3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby0mZ3Q7YXR0cnM7CiYjNDM7CXN0cnVjdCBldGh0b29sX3BoeV90ZXN0IHRlc3QgPSB7fTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoJmFtcDtyZXFfaW5mbywKJiM0MzsJCQkJCSB0YltFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXSwKJiM0MzsJCQkJCSBnZW5sX2luZm9fbmV0KGluZm8pLCBpbmZvLSZndDtleHRhY2ssCiYjNDM7CQkJCQkgdHJ1ZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJZGV2ID0gcmVxX2luZm8uZGV2OwomIzQzOwomIzQzOwlpZiAoIWRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O3NldF9waHlfdGVzdCkgewomIzQzOwkJcmV0ID0gLUVPUE5PVFNVUFA7CiYjNDM7CQlnb3RvIG91dF9kZXY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9CTE9DS19JRF0pIHsKJiM0MzsJCXRlc3QuYmxvY2tfaWQgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKTsKJiM0MzsJCXRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CTE9DS19JRDsKJiM0MzsJfQomIzQzOwlpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKSB7CiYjNDM7CQl0ZXN0LmxhbmUgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfTEFORV0pOwomIzQzOwkJdGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0xBTkU7CiYjNDM7CX0KJiM0MzsJaWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOXSkgewomIzQzOwkJdGVzdC50eF9wYXR0ZXJuID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dKTsKJiM0MzsJCXRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9UWF9QQVRURVJOOwomIzQzOwl9CiYjNDM7CWlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl0pIHsKJiM0MzsJCXRlc3QucnhfcGF0dGVybiA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOXSk7CiYjNDM7CQl0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfUlhfUEFUVEVSTjsKJiM0MzsJfQomIzQzOwlpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OXSkgewomIzQzOwkJdGVzdC5iZXJ0X2FjdGlvbiA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9CRVJUX0FDVElPTl0pOwomIzQzOwkJdGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0JFUlRfQUNUSU9OOwomIzQzOwl9CiYjNDM7CWlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXSkgewomIzQzOwkJdGVzdC5pbmplY3RfZXJyb3JfY291bnQgPQomIzQzOwkJCW5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9JTkpFQ1RfRVJST1JfQ09VTlRdKTsKJiM0MzsJCXRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9JTkpFQ1RfQ09VTlQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CXJldCA9IGV0aG5sX29wc19iZWdpbihkZXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0X3J0bmw7CiYjNDM7CiYjNDM7CXJldCA9IGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O3NldF9waHlfdGVzdChkZXYsICZhbXA7dGVzdCk7CiYjNDM7CWV0aG5sX29wc19jb21wbGV0ZShkZXYpOwomIzQzOwomIzQzO291dF9ydG5sOgomIzQzOwlydG5sX3VubG9jaygpOwomIzQzO291dF9kZXY6CiYjNDM7CWV0aG5sX3BhcnNlX2hlYWRlcl9kZXZfcHV0KCZhbXA7cmVxX2luZm8pOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDEwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV3IGV0aHRvb2wgTmV0bGluayBDb21tYW5kcyoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IHRoaXMgbmV3IHBhdGNoIHNlcmllcyBhZGRpbmcgYSBmZXcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmRzOiBgRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVGAsIGBFVEhUT09MX01TR19QSFlfVEVTVF9HRVRgLCBhbmQgYEVUSFRPT0xfTVNHX1BIWV9URVNUX0FDVGAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIHVzaW5nIGBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHNgIGFuZCBgc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3RgIHRvIGhhbmRsZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGtlcm5lbCBkcml2ZXJzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgYGludGZfY2Fwc19wcmVwYXJlX2RhdGFgIGluIGBuZXQvZXRodG9vbC9pbnRmX2NhcHMuY2AgdG8gc2VlIGhvdyBpdCB3b3Jrcy4KClNwZWNpZmljYWxseSwgdGhpcyBzbmlwcGV0OgoKYGBgYwpzdGF0aWMgaW50IGludGZfY2Fwc19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSwKCQkJCSAgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UsCgkJCQkgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCnsKCXN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSAqZGF0YSA9IElOVEZfQ0FQU19SRVBEQVRBKHJlcGx5X2Jhc2UpOwoJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJlcGx5X2Jhc2UtJmd0O2RldjsKCglpZiAoIWRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9pbnRmX2NhcHMpCgkJcmV0dXJuIC1FT1BOT1RTVVBQOwoKCXJldHVybiBkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtnZXRfaW50Zl9jYXBzKGRldiwgJmFtcDtkYXRhLSZndDtjYXBzKTsKfQpgYGAKCldhaXQgYSBzZWNvbmTigKYgYGRhdGEtJmd0O2NhcHNgIGlzICpkaXJlY3RseSogcGFzc2VkIHRvIGBkZXYtJmd0O2V0aHRvb2xfb3BzLSZndDtnZXRfaW50Zl9jYXBzKGRldiwgJmFtcDtkYXRhLSZndDtjYXBzKWAuIFRoZSBkcml2ZXImIzM5O3MgYGdldF9pbnRmX2NhcHNgIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIHdyaXRlIGludG8gdGhhdCBgZGF0YS0mZ3Q7Y2Fwc2Agc3RydWN0LiBCdXQgaXMgdGhhdCBgZGF0YS0mZ3Q7Y2Fwc2AgKmluaXRpYWxpemVkKiBiZWZvcmUgdGhlIGNhbGw/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8ga25vdy4gV2hlcmUgaXMgaXQgZ2V0dGluZyBhbGxvY2F0ZWQ/CgpPa2F5LCBzbyBgZGF0YWAgaXMgcGFydCBvZiBgc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhYCwgd2hpY2ggaXMgYWxsb2NhdGVkIGJ5IHRoZSBldGh0b29sIG5ldGxpbmsgZnJhbWV3b3JrLiBSaWdodCwgbGV0IG1lIGNoZWNrIGhvdyB0aGUgYHJlcGx5X2RhdGFgIGl0c2VsZiBpcyBhbGxvY2F0ZWQgd2l0aGluIHRoZSBmcmFtZXdvcmsgaW4gYG5ldC9ldGh0b29sL25ldGxpbmsuY2AuIEkgc2hvdWxkIHByb2JhYmx5IHVzZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gZmluZCBvdXQgd2hlcmUgYHJlcGx5X2RhdGFgIGlzIGFsbG9jYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2MuKnJlcGx5X2RhdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZXRodG9vbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvbmV0bGluay5jPTUwOT1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYy01MjktXHRcdHJldHVybiAtRU5PTUVNO1xubmV0L2V0aHRvb2wvbmV0bGluay5jOjUzMDpcdHJlcGx5X2RhdGEgPSBrbWFsbG9jKG9wcy1cdTAwM2VyZXBseV9kYXRhX3NpemUsIEdGUF9LRVJORUwpO1xubmV0L2V0aHRvb2wvbmV0bGluay5jLTUzMS1cdGlmICghcmVwbHlfZGF0YSkge1xuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYz02NzI9c3RhdGljIGludCBldGhubF9kZWZhdWx0X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNjkwLVx0XHRyZXR1cm4gLUVOT01FTTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo2OTE6XHRyZXBseV9kYXRhID0ga21hbGxvYyhvcHMtXHUwMDNlcmVwbHlfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYy02OTItXHRpZiAoIXJlcGx5X2RhdGEpIHtcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM9NzI1PXN0YXRpYyBpbnQgZXRobmxfcGVycGh5X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNzQ0LVx0XHRyZXR1cm4gLUVOT01FTTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo3NDU6XHRyZXBseV9kYXRhID0ga21hbGxvYyhvcHMtXHUwMDNlcmVwbHlfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYy03NDYtXHRpZiAoIXJlcGx5X2RhdGEpIHtcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM9OTk4PXN0YXRpYyB2b2lkIGV0aG5sX2RlZmF1bHRfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsXG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jLTEwMTktXHRcdHJldHVybjtcbm5ldC9ldGh0b29sL25ldGxpbmsuYzoxMDIwOlx0cmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSwgR0ZQX0tFUk5FTCk7XG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMTAyMS1cdGlmICghcmVwbHlfZGF0YSkge1xuLS1cbm5ldC9ldGh0b29sL3Jzcy5jPTExOD1zdGF0aWMgaW50XG5uZXQvZXRodG9vbC9yc3MuYzoxMTk6cnNzX2dldF9kYXRhX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCByc3NfcmVwbHlfZGF0YSAqZGF0YSlcbm5ldC9ldGh0b29sL3Jzcy5jLTEyMC17XG4tLVxubmV0L2V0aHRvb2wvdHNjb25maWcuYz0xOTk9c3RhdGljIGludCB0c2NvbmZpZ19zZW5kX3JlcGx5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvdHNjb25maWcuYy0yMTAtXHRcdHJldHVybiAtRU5PTUVNO1xubmV0L2V0aHRvb2wvdHNjb25maWcuYzoyMTE6XHRyZXBseV9kYXRhID0ga21hbGxvY19vYmooKnJlcGx5X2RhdGEpO1xubmV0L2V0aHRvb2wvdHNjb25maWcuYy0yMTItXHRpZiAoIXJlcGx5X2RhdGEpIHtcbi0tXG5uZXQvZXRodG9vbC90c2luZm8uYz01MDA9aW50IGV0aG5sX3RzaW5mb19zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2V0aHRvb2wvdHNpbmZvLmMtNTEzLVx0XHRyZXR1cm4gLUVOT01FTTtcbm5ldC9ldGh0b29sL3RzaW5mby5jOjUxNDpcdHJlcGx5X2RhdGEgPSBremFsbG9jX29iaigqcmVwbHlfZGF0YSk7XG5uZXQvZXRodG9vbC90c2luZm8uYy01MTUtXHRpZiAoIXJlcGx5X2RhdGEpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IFZ1bG5lcmFiaWxpdHkgaW4gZXRodG9vbCYjMzk7cyBJbnRlcmZhY2UgQ2FwYWJpbGl0aWVzIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYGV0aHRvb2xgIGhhbmRsZXMgaW50ZXJmYWNlIGNhcGFiaWxpdGllcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGV0aG5sX2RlZmF1bHRfZG9pdGAgYW5kIGBldGhubF9kZWZhdWx0X3N0YXJ0YCBmdW5jdGlvbnMuIEkgc2VlIHRoYXQgYHJlcGx5X2RhdGFgIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY2Agd2l0aG91dCB0aGUgYF9fR0ZQX1pFUk9gIGZsYWcuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgaXNzdWU6IHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGlzbiYjMzk7dCB6ZXJvZWQsIG1lYW5pbmcgaXQgY29udGFpbnMgd2hhdGV2ZXIgZ2FyYmFnZSBoYXBwZW5lZCB0byBiZSB0aGVyZSBwcmV2aW91c2x5IG9uIHRoZSBoZWFwLgoKVGhlbiwgSSBmb2N1c2VkIG9uIHRoZSBgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YWAgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlIGRyaXZlciYjMzk7cyBgZ2V0X2ludGZfY2Fwc2AgZnVuY3Rpb24sIHBhc3NpbmcgaXQgYSBwb2ludGVyIHRvIGEgYHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YWAuIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IGBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhYCAqZG9lc24mIzM5O3QqIHplcm8taW5pdGlhbGl6ZSB0aGUgYGRhdGEtJmd0O2NhcHNgIHN0cnVjdHVyZSBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhpcyBzdHJ1Y3R1cmUuCgpUaGUgdnVsbmVyYWJpbGl0eSBzdGVtcyBmcm9tIHdoYXQgaGFwcGVucyBpZiB0aGUgZHJpdmVyJiMzOTtzIGBnZXRfaW50Zl9jYXBzYCBmdW5jdGlvbiBkb2VzbiYjMzk7dCBjb21wbGV0ZWx5IGluaXRpYWxpemUgdGhlIGBkYXRhLSZndDtjYXBzYCBzdHJ1Y3R1cmUsIHBlcmhhcHMgZHVlIHRvIGFuIGVycm9yIGNvbmRpdGlvbiBvciBhIGxhY2sgb2YgY29tcGxldGUgaW5pdGlhbGl6YXRpb24uIElmIGl0IGRvZXNuJiMzOTt0IGluaXRpYWxpemUgYWxsIHRoZSBmaWVsZHMsIGluY2x1ZGluZywgaW1wb3J0YW50bHksIGBudW1fYmxvY2tzYCwgdGhlIHZhbHVlcyB3aXRoaW4gYGRhdGEtJmd0O2NhcHNgIGFyZSBlc3NlbnRpYWxseSBnYXJiYWdlIGZyb20gdGhlIGhlYXAuIFRoZXNlIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGNhbiB0aGVuIGdldCBwYXNzZWQgdG8gdXNlciBzcGFjZS4KClNwZWNpZmljYWxseSwgdGhlIGBpbnRmX2NhcHNfZmlsbF9yZXBseWAgZnVuY3Rpb24gaXRlcmF0ZXMgdGhyb3VnaCBhIGBibG9ja3NgIGFycmF5IGJhc2VkIG9uIGBkYXRhLSZndDtjYXBzLm51bV9ibG9ja3NgLiBJZiBgbnVtX2Jsb2Nrc2AgaXMgdW5pbml0aWFsaXplZCwgaXQgY291bGQgYmUgYSBsYXJnZSwgcmFuZG9tIHZhbHVlLCBsZWFkaW5nIHRvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB3aGVuIGFjY2Vzc2luZyB0aGUgYGJsb2Nrc2AgYXJyYXkgYW5kIHNlbmRpbmcgdGhhdCB0byB0aGUgdXNlci4KCkhvd2V2ZXIsIGV2ZW4gaWYgdGhlIGRyaXZlciBjb3JyZWN0bHkgc2V0cyBgbnVtX2Jsb2Nrc2AsIGl0IG1pZ2h0IG5vdCBmdWxseSBpbml0aWFsaXplIGFsbCB0aGUgZmllbGRzIHdpdGhpbiB0aGUgYGJsb2Nrc2AgYXJyYXkuIFRoaXMgbWVhbnMgdGhhdCBpZiBgZ2V0X2ludGZfY2Fwc2AgZG9lc24mIzM5O3QgZnVsbHkgaW5pdGlhbGl6ZSB0aGUgZGF0YSwgdGhlIGNvbnRlbnRzIG9mIHRoZSBgYmxvY2tzYCBhcnJheSAoaW5jbHVkaW5nIHRoZSBgbmFtZWAgZmllbGQsIHdoaWNoIGlzIHVzZWQgd2l0aCBgbmxhX3B1dF9zdHJpbmdgKSBjb3VsZCBjb250YWluIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhpcyBtaWdodCBjYXVzZSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgaWYgdGhlIG5hbWUgaXMgbm90IG51bGwgdGVybWluYXRlZCBhbmQgdGhlbiB1c2VyIHNwYWNlIG1heSBhbHNvIGxlYWsgc3RhY2sgb3IgaGVhcCBtZW1vcnkuCgpJIGNvbmZpcm1lZCB0aGF0IGBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhYCBkb2VzICpub3QqIHplcm8gdGhlIGBkYXRhLSZndDtjYXBzYCBzdHJ1Y3R1cmUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdGhlIGRyaXZlciwgaW4gY29udHJhc3QgdG8gd2hhdCBoYXBwZW5zIGluIGBwaHlfdGVzdF9wcmVwYXJlX2RhdGFgLCB3aGljaCAqZG9lcyogaW5pdGlhbGl6ZSBpdHMgZGF0YS4KClRoaXMgaXMgYSBjbGFzc2ljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluZm8tbGVhayBzaXR1YXRpb24sIHdoZXJlIGtlcm5lbCBtZW1vcnkgZW5kcyB1cCBiZWluZyBsZWFrZWQgdG8gdXNlciBzcGFjZSwgcG90ZW50aWFsbHkgY29udGFpbmluZyBzZW5zaXRpdmUgZGF0YSwgb3IgY2F1c2luZyBjcmFzaGVzLiBJIHNob3VsZCBmaWxlIGEgS01TQU4gcmVwb3J0IGZvciB0aGlzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXBseV9kYXRhID0ga21hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9ldGh0b29sLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9uZXRsaW5rLmM9NTA5PXN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jLTUyOS1cdFx0cmV0dXJuIC1FTk9NRU07XG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NTMwOlx0cmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSwgR0ZQX0tFUk5FTCk7XG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNTMxLVx0aWYgKCFyZXBseV9kYXRhKSB7XG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jPTY3Mj1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYy02OTAtXHRcdHJldHVybiAtRU5PTUVNO1xubmV0L2V0aHRvb2wvbmV0bGluay5jOjY5MTpcdHJlcGx5X2RhdGEgPSBrbWFsbG9jKG9wcy1cdTAwM2VyZXBseV9kYXRhX3NpemUsIEdGUF9LRVJORUwpO1xubmV0L2V0aHRvb2wvbmV0bGluay5jLTY5Mi1cdGlmICghcmVwbHlfZGF0YSkge1xuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYz03MjU9c3RhdGljIGludCBldGhubF9wZXJwaHlfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYy03NDQtXHRcdHJldHVybiAtRU5PTUVNO1xubmV0L2V0aHRvb2wvbmV0bGluay5jOjc0NTpcdHJlcGx5X2RhdGEgPSBrbWFsbG9jKG9wcy1cdTAwM2VyZXBseV9kYXRhX3NpemUsIEdGUF9LRVJORUwpO1xubmV0L2V0aHRvb2wvbmV0bGluay5jLTc0Ni1cdGlmICghcmVwbHlfZGF0YSkge1xuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYz05OTg9c3RhdGljIHZvaWQgZXRobmxfZGVmYXVsdF9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMTAxOS1cdFx0cmV0dXJuO1xubmV0L2V0aHRvb2wvbmV0bGluay5jOjEwMjA6XHRyZXBseV9kYXRhID0ga21hbGxvYyhvcHMtXHUwMDNlcmVwbHlfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYy0xMDIxLVx0aWYgKCFyZXBseV9kYXRhKSB7XG4tLVxubmV0L2V0aHRvb2wvdHNjb25maWcuYz0xOTk9c3RhdGljIGludCB0c2NvbmZpZ19zZW5kX3JlcGx5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2V0aHRvb2wvdHNjb25maWcuYy0yMTAtXHRcdHJldHVybiAtRU5PTUVNO1xubmV0L2V0aHRvb2wvdHNjb25maWcuYzoyMTE6XHRyZXBseV9kYXRhID0ga21hbGxvY19vYmooKnJlcGx5X2RhdGEpO1xubmV0L2V0aHRvb2wvdHNjb25maWcuYy0yMTItXHRpZiAoIXJlcGx5X2RhdGEpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5pbml0aWFsaXplZCBNZW1vcnkgVnVsbmVyYWJpbGl0eSBpbiBuZXRsaW5rIEF0dHJpYnV0ZXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIGFzIGV4cGVjdGVkLCBgcmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLSZndDtyZXBseV9kYXRhX3NpemUsIEdGUF9LRVJORUwpO2AgaXMgdXNlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBgcmVwbHlfZGF0YWAgaXMganVzdCB1bmluaXRpYWxpemVkIGhlYXAgbWVtb3J5LCBhIGNsYXNzaWMgc291cmNlIG9mIHByb2JsZW1zLgoKVGhlIGBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhYCBmdW5jdGlvbiBpcyB3aGVyZSBteSBhdHRlbnRpb24gaXMgZHJhd24uIFNwZWNpZmljYWxseSwgaXQgcGFzc2VzIGBkYXRhLSZndDtjYXBzYCB0byB0aGUgZHJpdmVyJiMzOTtzIGBnZXRfaW50Zl9jYXBzYCBjYWxsYmFjay4gTXkgY29uY2VybiBpcyB0aGF0IGlmIHRoZSBkcml2ZXIgZG9lc24mIzM5O3QgaW5pdGlhbGl6ZSAqYWxsKiB0aGUgZmllbGRzIG9mIGBkYXRhLSZndDtjYXBzYCwgc2F5IGBudW1fYmxvY2tzYCBvciBldmVuIGp1c3QgdGhlIGluZGl2aWR1YWwgZmllbGRzIHdpdGhpbiBgYmxvY2tzW11gLCB0aGVuIGBpbnRmX2NhcHNfZmlsbF9yZXBseWAgd2lsbCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdoZW4gaXQgZ29lcyB0byBjb25zdHJ1Y3QgdGhlIG5ldGxpbmsgYXR0cmlidXRlcy4gRnVuY3Rpb25zIGxpa2UgYG5sYV9wdXRfdTMyYCwgYG5sYV9wdXRfc3RyaW5nYCwgZXRjLiwgd2lsbCBlZmZlY3RpdmVseSBsZWFrIHRoaXMgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UgdmlhIHRoZSBza2IuIEtNU0FOIGlzIGRldGVjdGluZyB0aGlzLCBhcyBpdCBzaG91bGQsIGJlY2F1c2UgS0FTQU4gd291bGRuJiMzOTt0IGNhdGNoIGl0IHNpbmNlIHRoZSBtZW1vcnkgaXMgYm90aCBhbGxvY2F0ZWQgYW5kIHdpdGhpbiBib3VuZHMuCgpJIG5lZWRlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBTbyBJIHRoZW4gZXhhbWluZWQgYGV0aG5sX2FjdF9waHlfdGVzdGAuCgpgYGBjCmludCBldGhubF9hY3RfcGh5X3Rlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKewoJc3RydWN0IGV0aG5sX3JlcV9pbmZvIHJlcV9pbmZvID0ge307CglzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLSZndDthdHRyczsKCXN0cnVjdCBldGh0b29sX3BoeV90ZXN0IHRlc3QgPSB7fTsKYGBgCgpGb3J0dW5hdGVseSwgYHRlc3RgIGlzIGluaXRpYWxpemVkIHRvIHplcm8gKGA9IHt9YCksIHNvIHRoYXQgb25lIGlzIHNhZmUuCgpUaGVuIG9uIHRvIGBwaHlfdGVzdF9wcmVwYXJlX2RhdGFgPwpgYGBjCnN0YXRpYyBpbnQgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsCgkJCQkgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UsCgkJCQkgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKewoJc3RydWN0IHBoeV90ZXN0X3JlcGx5X2RhdGEgKmRhdGEgPSBQSFlfVEVTVF9SRVBEQVRBKHJlcGx5X2Jhc2UpOwoJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJlcGx5X2Jhc2UtJmd0O2RldjsKCXN0cnVjdCBubGF0dHIgKip0YiA9IGluZm8tJmd0O2F0dHJzOwoKCWlmICghZGV2LSZndDtldGh0b29sX29wcy0mZ3Q7Z2V0X3BoeV90ZXN0KQoJCXJldHVybiAtRU9QTk9UU1VQUDsKCgltZW1zZXQoJmFtcDtkYXRhLSZndDt0ZXN0LCAwLCBzaXplb2YoZGF0YS0mZ3Q7dGVzdCkpOwpgYGAKSXQgZXhwbGljaXRseSBkb2VzIGBtZW1zZXQoJmFtcDtkYXRhLSZndDt0ZXN0LCAwLCBzaXplb2YoZGF0YS0mZ3Q7dGVzdCkpO2AsIHNvIHRoYXQgbG9va3Mgc2FmZSB0b28uIEdvb2QuCgpCdXQgd2FpdCwgYGludGZfY2Fwc19wcmVwYXJlX2RhdGFgIGlzIHRoZSBvbmUgdG8gZm9jdXMgb24hCgpgYGBjCnN0YXRpYyBpbnQgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLAoJCQkJICBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSwKCQkJCSAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKewoJc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhICpkYXRhID0gSU5URl9DQVBTX1JFUERBVEEocmVwbHlfYmFzZSk7CglzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmVwbHlfYmFzZS0mZ3Q7ZGV2OwoKCWlmICghZGV2LSZndDtldGh0b29sX29wcy0mZ3Q7Z2V0X2ludGZfY2FwcykKCQlyZXR1cm4gLUVPUE5PVFNVUFA7CgoJcmV0dXJuIGRldi0mZ3Q7ZXRodG9vbF9vcHMtJmd0O2dldF9pbnRmX2NhcHMoZGV2LCAmYW1wO2RhdGEtJmd0O2NhcHMpOwp9CmBgYAoKVGhlcmUmIzM5O3Mgbm8gYG1lbXNldGAgaGVyZSEgVGhhdCBtZWFucyB0aGUgYGRhdGFgIHN0cnVjdCwgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jYCBpbiBgZXRobmxfZGVmYXVsdF9kb2l0YCwgaXMgcGFzc2VkIHRvIGBnZXRfaW50Zl9jYXBzYC4gSWYgdGhlIGRyaXZlciAqZG9lc24mIzM5O3QqIGZ1bGx5IGluaXRpYWxpemUgYGRhdGEtJmd0O2NhcHNgLCB3ZSAqd2lsbCogbGVhayB1bmluaXRpYWxpemVkIGhlYXAgbWVtb3J5IHRvIHVzZXIgc3BhY2UgdmlhIGBpbnRmX2NhcHNfZmlsbF9yZXBseWAuIFRoaXMgaXMgYSBkZWZpbml0ZSB2dWxuZXJhYmlsaXR5LgoKVGltZSB0byBkb3VibGUtY2hlY2sgYGV0aG5sX2RlZmF1bHRfZG9pdGAgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIG5vdCBzb21laG93IHplcm9pbmcgdGhlIG1lbW9yeSB0aGF0JiMzOTtzIGdldHRpbmcgYWxsb2NhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTAwOlx0c3RhdGljIHZvaWQgZXRobmxfaW5pdF9yZXBseV9kYXRhKHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhLFxuIDUwMTpcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgKm9wcyxcbiA1MDI6XHRcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiA1MDM6XHR7XG4gNTA0Olx0XHRtZW1zZXQocmVwbHlfZGF0YSwgMCwgb3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSk7XG4gNTA1Olx0XHRyZXBseV9kYXRhLVx1MDAzZWRldiA9IGRldjtcbiA1MDY6XHR9XG4gNTA3Olx0XG4gNTA4Olx0LyogZGVmYXVsdCAtXHUwMDNlZG9pdCgpIGhhbmRsZXIgZm9yIEdFVCB0eXBlIHJlcXVlc3RzICovXG4gNTA5Olx0c3RhdGljIGludCBldGhubF9kZWZhdWx0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiA1MTA6XHR7XG4gNTExOlx0XHRzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSA9IE5VTEw7XG4gNTEyOlx0XHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvID0gTlVMTDtcbiA1MTM6XHRcdGNvbnN0IHU4IGNtZCA9IGluZm8tXHUwMDNlZ2VubGhkci1cdTAwM2VjbWQ7XG4gNTE0Olx0XHRjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgKm9wcztcbiA1MTU6XHRcdGJvb2wgbmVlZF9ydG5sID0gZmFsc2U7XG4gNTE2Olx0XHRpbnQgaGRyX2xlbiwgcmVwbHlfbGVuO1xuIDUxNzpcdFx0c3RydWN0IHNrX2J1ZmYgKnJza2I7XG4gNTE4Olx0XHR2b2lkICpyZXBseV9wYXlsb2FkO1xuIDUxOTpcdFx0aW50IHJldDtcbiA1MjA6XHRcbiA1MjE6XHRcdG9wcyA9IGV0aG5sX2RlZmF1bHRfcmVxdWVzdHNbY21kXTtcbiA1MjI6XHRcdGlmIChXQVJOX09OQ0UoIW9wcywgXCYjMzQ7Y21kICV1IGhhcyBubyBldGhubF9yZXF1ZXN0X29wc1xcblwmIzM0OywgY21kKSlcbiA1MjM6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDUyNDpcdFx0aWYgKEdFTkxfUkVRX0FUVFJfQ0hFQ0soaW5mbywgb3BzLVx1MDAzZWhkcl9hdHRyKSlcbiA1MjU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTI2Olx0XG4gNTI3Olx0XHRyZXFfaW5mbyA9IGt6YWxsb2Mob3BzLVx1MDAzZXJlcV9pbmZvX3NpemUsIEdGUF9LRVJORUwpO1xuIDUyODpcdFx0aWYgKCFyZXFfaW5mbylcbiA1Mjk6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gNTMwOlx0XHRyZXBseV9kYXRhID0ga21hbGxvYyhvcHMtXHUwMDNlcmVwbHlfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTtcbiA1MzE6XHRcdGlmICghcmVwbHlfZGF0YSkge1xuIDUzMjpcdFx0XHRrZnJlZShyZXFfaW5mbyk7XG4gNTMzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDUzNDpcdFx0fVxuIDUzNTpcdFxuIDUzNjpcdFx0cmV0ID0gZXRobmxfZGVmYXVsdF9wYXJzZShyZXFfaW5mbywgaW5mbywgb3BzLCAhb3BzLVx1MDAzZWFsbG93X25vZGV2X2RvKTtcbiA1Mzc6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNTM4Olx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gNTM5Olx0XHRldGhubF9pbml0X3JlcGx5X2RhdGEocmVwbHlfZGF0YSwgb3BzLCByZXFfaW5mby1cdTAwM2VkZXYpO1xuIDU0MDpcdFxuIDU0MTpcdFx0aWYgKHJlcV9pbmZvLVx1MDAzZWRldikge1xuIDU0MjpcdFx0XHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2socmVxX2luZm8tXHUwMDNlZGV2KSB8fFxuIDU0MzpcdFx0XHRcdCAgICBldGh0b29sX25sX21zZ19uZWVkc19ydG5sKHJlcV9pbmZvLVx1MDAzZWRldiwgY21kKTtcbiA1NDQ6XHRcdFx0aWYgKG5lZWRfcnRubClcbiA1NDU6XHRcdFx0XHRydG5sX2xvY2soKTtcbiA1NDY6XHRcdFx0bmV0ZGV2X2xvY2tfb3BzKHJlcV9pbmZvLVx1MDAzZWRldik7XG4gNTQ3Olx0XHR9XG4gNTQ4Olx0XHRyZXQgPSBvcHMtXHUwMDNlcHJlcGFyZV9kYXRhKHJlcV9pbmZvLCByZXBseV9kYXRhLCBpbmZvKTtcbiA1NDk6XHRcdGlmIChyZXFfaW5mby1cdTAwM2VkZXYpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxOTcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBEYXRhIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIGBldGhubF9pbml0X3JlcGx5X2RhdGFgIGlzIGNhbGxpbmcgYG1lbXNldGAgdG8gemVybyBvdXQgdGhlIGByZXBseV9kYXRhYCBidWZmZXIuIExldCYjMzk7cyBjb25maXJtIHRoYXQgd2l0aCBhIHF1aWNrIGNoZWNrIG9mIGxpbmUgNTA0OiBZdXAsIHRoZXJlIGl0IGlzOiBgbWVtc2V0KHJlcGx5X2RhdGEsIDAsIG9wcy0mZ3Q7cmVwbHlfZGF0YV9zaXplKTtgLiBBbmQgaXQmIzM5O3MgY2FsbGVkIGF0IGxpbmUgNTM5LCBzbyBgZXRobmxfaW5pdF9yZXBseV9kYXRhKHJlcGx5X2RhdGEsIG9wcywgcmVxX2luZm8tJmd0O2Rldik7YCBpcyBkZWZpbml0ZWx5IGluaXRpYWxpemluZyB0aGF0IGByZXBseV9kYXRhYCBidWZmZXIuCgpBaGEhIElmIGByZXBseV9kYXRhYCBpcyBiZWluZyB6ZXJvZWQgb3V0IHJpZ2h0IHRoZXJlLCB0aGVuIHRoZSBgZGF0YS0mZ3Q7Y2Fwc2AgZmllbGQgaW4gYGludGZfY2Fwc19wcmVwYXJlX2RhdGFgIHNob3VsZCAqYWxyZWFkeSogYmUgemVyb2VkIGFzIHdlbGwuIFRoaXMgY2hhbmdlcyB0aGluZ3M7IHRoZSBleHBsaWNpdCB6ZXJvaW5nIEkgd2FzIGV4cGVjdGluZyBtaWdodCBiZSByZWR1bmRhbnQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBub3RoaW5nIGVsc2Ugb3ZlcndyaXRlcyB0aGlzIGFzIHdlbGwsIGFuZCBkb3VibGUtY2hlY2sgYGV0aG5sX2RlZmF1bHRfc3RhcnRgIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY3MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjcyOlx0c3RhdGljIGludCBldGhubF9kZWZhdWx0X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiA2NzM6XHR7XG4gNjc0Olx0XHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xuIDY3NTpcdFx0c3RydWN0IGV0aG5sX2R1bXBfY3R4ICpjdHggPSBldGhubF9kdW1wX2NvbnRleHQoY2IpO1xuIDY3NjpcdFx0c3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGE7XG4gNjc3Olx0XHRjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgKm9wcztcbiA2Nzg6XHRcdHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm87XG4gNjc5Olx0XHRzdHJ1Y3QgZ2VubG1zZ2hkciAqZ2hkcjtcbiA2ODA6XHRcdGludCByZXQ7XG4gNjgxOlx0XG4gNjgyOlx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mKCpjdHgpIFx1MDAzZSBzaXplb2YoY2ItXHUwMDNlY3R4KSk7XG4gNjgzOlx0XG4gNjg0Olx0XHRnaGRyID0gbmxtc2dfZGF0YShjYi1cdTAwM2VubGgpO1xuIDY4NTpcdFx0b3BzID0gZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tnaGRyLVx1MDAzZWNtZF07XG4gNjg2Olx0XHRpZiAoV0FSTl9PTkNFKCFvcHMsIFwmIzM0O2NtZCAldSBoYXMgbm8gZXRobmxfcmVxdWVzdF9vcHNcXG5cJiMzNDssIGdoZHItXHUwMDNlY21kKSlcbiA2ODc6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDY4ODpcdFx0cmVxX2luZm8gPSBremFsbG9jKG9wcy1cdTAwM2VyZXFfaW5mb19zaXplLCBHRlBfS0VSTkVMKTtcbiA2ODk6XHRcdGlmICghcmVxX2luZm8pXG4gNjkwOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDY5MTpcdFx0cmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gNjkyOlx0XHRpZiAoIXJlcGx5X2RhdGEpIHtcbiA2OTM6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiA2OTQ6XHRcdFx0Z290byBmcmVlX3JlcV9pbmZvO1xuIDY5NTpcdFx0fVxuIDY5NjpcdFxuIDY5NzpcdFx0cmV0ID0gZXRobmxfZGVmYXVsdF9wYXJzZShyZXFfaW5mbywgXHUwMDI2aW5mby1cdTAwM2VpbmZvLCBvcHMsIGZhbHNlKTtcbiA2OTg6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNjk5Olx0XHRcdGdvdG8gZnJlZV9yZXBseV9kYXRhO1xuIDcwMDpcdFx0aWYgKHJlcV9pbmZvLVx1MDAzZWRldikge1xuIDcwMTpcdFx0XHQvKiBXZSBpZ25vcmUgZGV2aWNlIHNwZWNpZmljYXRpb24gaW4gZHVtcCByZXF1ZXN0cyBidXQgYXMgdGhlXG4gNzAyOlx0XHRcdCAqIHNhbWUgcGFyc2VyIGFzIGZvciBub24tZHVtcCAoZG9pdCkgcmVxdWVzdHMgaXMgdXNlZCwgaXRcbiA3MDM6XHRcdFx0ICogd291bGQgdGFrZSByZWZlcmVuY2UgdG8gdGhlIGRldmljZSBpZiBpdCBmaW5kcyBvbmVcbiA3MDQ6XHRcdFx0ICovXG4gNzA1Olx0XHRcdG5ldGRldl9wdXQocmVxX2luZm8tXHUwMDNlZGV2LCBcdTAwMjZyZXFfaW5mby1cdTAwM2VkZXZfdHJhY2tlcik7XG4gNzA2Olx0XHRcdHJlcV9pbmZvLVx1MDAzZWRldiA9IE5VTEw7XG4gNzA3Olx0XHR9XG4gNzA4Olx0XG4gNzA5Olx0XHRjdHgtXHUwMDNlb3BzID0gb3BzO1xuIDcxMDpcdFx0Y3R4LVx1MDAzZXJlcV9pbmZvID0gcmVxX2luZm87XG4gNzExOlx0XHRjdHgtXHUwMDNlcmVwbHlfZGF0YSA9IHJlcGx5X2RhdGE7XG4gNzEyOlx0XHRjdHgtXHUwMDNlcG9zX2lmaW5kZXggPSAwO1xuIDcxMzpcdFxuIDcxNDpcdFx0cmV0dXJuIDA7XG4gNzE1Olx0XG4gNzE2Olx0ZnJlZV9yZXBseV9kYXRhOlxuIDcxNzpcdFx0a2ZyZWUocmVwbHlfZGF0YSk7XG4gNzE4Olx0ZnJlZV9yZXFfaW5mbzpcbiA3MTk6XHRcdGtmcmVlKHJlcV9pbmZvKTtcbiA3MjA6XHRcbiA3MjE6XHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDIxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgZXRobmxfZGVmYXVsdF9zdGFydGAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGV0aG5sX2RlZmF1bHRfc3RhcnRgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYHJlcGx5X2RhdGFgIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY2AgYnV0IGl0ICppc24mIzM5O3QqIHplcm9lZCBvdXQuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBvciBhdCBsZWFzdCBhbiBhcmVhIGZvciBkZWJ1Z2dpbmcgbGF0ZXIsIGFzIHRoYXQgbWVtb3J5IG1pZ2h0IGNvbnRhaW4gZ2FyYmFnZS4gV2FpdCBhIG1pbnV0ZS4uLiB0aGlzIGlzIHRoZSBkdW1waXQgbW9kdWxlLCBpc24mIzM5O3QgaXQ/IE9rYXksIHNvIGBldGhubF9kZWZhdWx0X3N0YXJ0YCBpcyBzcGVjaWZpYyB0byB0aGUgZHVtcGl0IGZ1bmN0aW9uYWxpdHkuIEFscmlnaHQsIGxldCYjMzk7cyB0cmFjZSB0aGlzIGByZXBseV9kYXRhYCB2YXJpYWJsZSB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBkdW1waXQgY29kZSBhbmQgc2VlIGV4YWN0bHkgaG93IGl0JiMzOTtzIGJlaW5nIHV0aWxpemVkLCBhbmQgd2hlcmUgYW5kIHdoZXRoZXIgaXQgZ2V0cyBjbGVhbmVkIHVwLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBpbmZvcm1hdGlvbiBpbiB0aGVyZSBkb2VzIG5vdCBnbyB3aGVyZSBpdCBpc24mIzM5O3Qgc3VwcG9zZWQgdG8sIGFuZCB0aGF0IHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBzdWZmZXIgZnJvbSBhbnkgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDcyMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzIyOlx0fVxuIDcyMzpcdFxuIDcyNDpcdC8qIHBlci1QSFkgLVx1MDAzZXN0YXJ0KCkgaGFuZGxlciBmb3IgR0VUIHJlcXVlc3RzICovXG4gNzI1Olx0c3RhdGljIGludCBldGhubF9wZXJwaHlfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIDcyNjpcdHtcbiA3Mjc6XHRcdHN0cnVjdCBldGhubF9wZXJwaHlfZHVtcF9jdHggKnBoeV9jdHggPSBldGhubF9wZXJwaHlfZHVtcF9jb250ZXh0KGNiKTtcbiA3Mjg6XHRcdGNvbnN0IHN0cnVjdCBnZW5sX2R1bXBpdF9pbmZvICppbmZvID0gZ2VubF9kdW1waXRfaW5mbyhjYik7XG4gNzI5Olx0XHRzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmN0eCA9IFx1MDAyNnBoeV9jdHgtXHUwMDNlZXRobmxfY3R4O1xuIDczMDpcdFx0c3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGE7XG4gNzMxOlx0XHRjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgKm9wcztcbiA3MzI6XHRcdHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm87XG4gNzMzOlx0XHRzdHJ1Y3QgZ2VubG1zZ2hkciAqZ2hkcjtcbiA3MzQ6XHRcdGludCByZXQ7XG4gNzM1Olx0XG4gNzM2Olx0XHRCVUlMRF9CVUdfT04oc2l6ZW9mKCpjdHgpIFx1MDAzZSBzaXplb2YoY2ItXHUwMDNlY3R4KSk7XG4gNzM3Olx0XG4gNzM4Olx0XHRnaGRyID0gbmxtc2dfZGF0YShjYi1cdTAwM2VubGgpO1xuIDczOTpcdFx0b3BzID0gZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tnaGRyLVx1MDAzZWNtZF07XG4gNzQwOlx0XHRpZiAoV0FSTl9PTkNFKCFvcHMsIFwmIzM0O2NtZCAldSBoYXMgbm8gZXRobmxfcmVxdWVzdF9vcHNcXG5cJiMzNDssIGdoZHItXHUwMDNlY21kKSlcbiA3NDE6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDc0MjpcdFx0cmVxX2luZm8gPSBremFsbG9jKG9wcy1cdTAwM2VyZXFfaW5mb19zaXplLCBHRlBfS0VSTkVMKTtcbiA3NDM6XHRcdGlmICghcmVxX2luZm8pXG4gNzQ0Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDc0NTpcdFx0cmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSwgR0ZQX0tFUk5FTCk7XG4gNzQ2Olx0XHRpZiAoIXJlcGx5X2RhdGEpIHtcbiA3NDc6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiA3NDg6XHRcdFx0Z290byBmcmVlX3JlcV9pbmZvO1xuIDc0OTpcdFx0fVxuIDc1MDpcdFxuIDc1MTpcdFx0LyogVW5saWtlIHBlci1kZXYgZHVtcCwgZG9uJiMzOTt0IGlnbm9yZSBkZXYuIFRoZSBkdW1wIGhhbmRsZXJcbiA3NTI6XHRcdCAqIHdpbGwgbm90aWNlIGl0IGFuZCBkdW1wIFBIWXMgZnJvbSBnaXZlbiBkZXYuIFdlIG9ubHkga2VlcCB0cmFjayBvZlxuIDc1MzpcdFx0ICogdGhlIGRldiYjMzk7cyBpZmluZGV4LCAuZHVtcGl0KCkgd2lsbCBncmFiIGFuZCByZWxlYXNlIHRoZSBuZXRkZXYgaXRzZWxmLlxuIDc1NDpcdFx0ICovXG4gNzU1Olx0XHRyZXQgPSBldGhubF9kZWZhdWx0X3BhcnNlKHJlcV9pbmZvLCBcdTAwMjZpbmZvLVx1MDAzZWluZm8sIG9wcywgZmFsc2UpO1xuIDc1NjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA3NTc6XHRcdFx0Z290byBmcmVlX3JlcGx5X2RhdGE7XG4gNzU4Olx0XHRpZiAocmVxX2luZm8tXHUwMDNlZGV2KSB7XG4gNzU5Olx0XHRcdHBoeV9jdHgtXHUwMDNlaWZpbmRleCA9IHJlcV9pbmZvLVx1MDAzZWRldi1cdTAwM2VpZmluZGV4O1xuIDc2MDpcdFx0XHRuZXRkZXZfcHV0KHJlcV9pbmZvLVx1MDAzZWRldiwgXHUwMDI2cmVxX2luZm8tXHUwMDNlZGV2X3RyYWNrZXIpO1xuIDc2MTpcdFx0XHRyZXFfaW5mby1cdTAwM2VkZXYgPSBOVUxMO1xuIDc2MjpcdFx0fVxuIDc2MzpcdFxuIDc2NDpcdFx0Y3R4LVx1MDAzZW9wcyA9IG9wcztcbiA3NjU6XHRcdGN0eC1cdTAwM2VyZXFfaW5mbyA9IHJlcV9pbmZvO1xuIDc2NjpcdFx0Y3R4LVx1MDAzZXJlcGx5X2RhdGEgPSByZXBseV9kYXRhO1xuIDc2NzpcdFx0Y3R4LVx1MDAzZXBvc19pZmluZGV4ID0gMDtcbiA3Njg6XHRcbiA3Njk6XHRcdHJldHVybiAwO1xuIDc3MDpcdFxuIDc3MTpcdGZyZWVfcmVwbHlfZGF0YTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1NzEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgYGV0aG5sX2RlZmF1bHRfZHVtcGl0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBtZW50YWwgY2hlY2tsaXN0IHN0YXJ0cyB3aXRoIGBldGhubF9kZWZhdWx0X2R1bXBpdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhpcyBzcGVjaWZpYyBlbnRpdHkgaXMsIHByb2JhYmx5IGEgZnVuY3Rpb24sIHBlcmhhcHMgYSB2YXJpYWJsZSwgb3IgcG90ZW50aWFsbHkgZXZlbiBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gSSBjYW4gaW5mZXIgZnJvbSB0aGUgbmFtZSB0aGF0IHRoaXMgaGFzIHRvIGRvIHdpdGggc29tZSBkZWZhdWx0IHNldHRpbmdzIHRoYXQgbGlrZWx5IGdldCAmIzM0O2R1bXBlZCYjMzQ7IHNvbWV3aGVyZS4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIGl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIGVpdGhlciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3IgbG93LWxldmVsIEV0aGVybmV0IGRyaXZlciBzZXR0aW5ncy4gTGV0IG1lIHN0YXJ0IGJ5IHNlZWluZyB3aGVyZSBpdCYjMzk7cyBjYWxsZWQgYW5kIGRlZmluZWQsIHBlcmhhcHMgYSBxdWljayBgZ3JlcGAgb3IgYGZpbmRgIHdpbGwgZ2V0IG1lIHN0YXJ0ZWQuIEZyb20gdGhlcmUgSSYjMzk7bGwgaW52ZXN0aWdhdGUgaG93IGl0JiMzOTtzIHVzZWQgYW5kIHdoYXQgY29udGV4dCBpdCYjMzk7cyBhcHBsaWVkIGluLCBpbiB0aGlzIHN5c3RlbS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBwcm9jZXNzIGJlZm9yZSBJIGludmVzdGlnYXRlIHRoZSBpbnRyaWNhY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZXRodG9vbC9uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NzIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc3MjpcdFx0a2ZyZWUocmVwbHlfZGF0YSk7XG4gNzczOlx0ZnJlZV9yZXFfaW5mbzpcbiA3NzQ6XHRcdGtmcmVlKHJlcV9pbmZvKTtcbiA3NzU6XHRcbiA3NzY6XHRcdHJldHVybiByZXQ7XG4gNzc3Olx0fVxuIDc3ODpcdFxuIDc3OTpcdHN0YXRpYyBpbnQgZXRobmxfcGVycGh5X2R1bXBfb25lX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDc4MDpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgZXRobmxfcGVycGh5X2R1bXBfY3R4ICpjdHgsXG4gNzgxOlx0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gNzgyOlx0e1xuIDc4MzpcdFx0c3RydWN0IGV0aG5sX2R1bXBfY3R4ICpldGhubF9jdHggPSBcdTAwMjZjdHgtXHUwMDNlZXRobmxfY3R4O1xuIDc4NDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGV0aG5sX2N0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2VkZXY7XG4gNzg1Olx0XHRzdHJ1Y3QgcGh5X2RldmljZV9ub2RlICpwZG47XG4gNzg2Olx0XHRpbnQgcmV0O1xuIDc4NzpcdFxuIDc4ODpcdFx0aWYgKCFkZXYtXHUwMDNlbGlua190b3BvKVxuIDc4OTpcdFx0XHRyZXR1cm4gMDtcbiA3OTA6XHRcbiA3OTE6XHRcdHhhX2Zvcl9lYWNoX3N0YXJ0KFx1MDAyNmRldi1cdTAwM2VsaW5rX3RvcG8tXHUwMDNlcGh5cywgY3R4LVx1MDAzZXBvc19waHlpbmRleCwgcGRuLFxuIDc5MjpcdFx0XHRcdCAgY3R4LVx1MDAzZXBvc19waHlpbmRleCkge1xuIDc5MzpcdFx0XHRldGhubF9jdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlcGh5X2luZGV4ID0gY3R4LVx1MDAzZXBvc19waHlpbmRleDtcbiA3OTQ6XHRcbiA3OTU6XHRcdFx0LyogV2UgY2FuIHJlLXVzZSB0aGUgb3JpZ2luYWwgZHVtcF9vbmUgYXMgLVx1MDAzZXByZXBhcmVfZGF0YSBpblxuIDc5NjpcdFx0XHQgKiBjb21tYW5kcyB1c2UgZXRobmxfcmVxX2dldF9waHlkZXYoKSwgd2hpY2ggZ2V0cyB0aGUgUEhZIGZyb21cbiA3OTc6XHRcdFx0ICogdGhlIHJlcV9pbmZvLVx1MDAzZXBoeV9pbmRleFxuIDc5ODpcdFx0XHQgKi9cbiA3OTk6XHRcdFx0cmV0ID0gZXRobmxfZGVmYXVsdF9kdW1wX29uZShza2IsIGRldiwgZXRobmxfY3R4LCBpbmZvKTtcbiA4MDA6XHRcdFx0aWYgKHJldClcbiA4MDE6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDgwMjpcdFx0fVxuIDgwMzpcdFxuIDgwNDpcdFx0Y3R4LVx1MDAzZXBvc19waHlpbmRleCA9IDA7XG4gODA1Olx0XG4gODA2Olx0XHRyZXR1cm4gMDtcbiA4MDc6XHR9XG4gODA4Olx0XG4gODA5Olx0c3RhdGljIGludCBldGhubF9wZXJwaHlfZHVtcF9hbGxfZGV2KHN0cnVjdCBza19idWZmICpza2IsXG4gODEwOlx0XHRcdFx0XHQgICAgIHN0cnVjdCBldGhubF9wZXJwaHlfZHVtcF9jdHggKmN0eCxcbiA4MTE6XHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiA4MTI6XHR7XG4gODEzOlx0XHRzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmV0aG5sX2N0eCA9IFx1MDAyNmN0eC1cdTAwM2VldGhubF9jdHg7XG4gODE0Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuIDgxNTpcdFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG4gODE2Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIDgxNzpcdFx0aW50IHJldCA9IDA7XG4gODE4Olx0XG4gODE5Olx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gODIwOlx0XHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgZXRobmxfY3R4LVx1MDAzZXBvc19pZmluZGV4KSB7XG4gODIxOlx0XHRcdG5ldGRldl9ob2xkKGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzYyMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDYWxsIFN0YWNrKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYGV0aG5sX2RlZmF1bHRfZHVtcF9vbmVgIGlzIGJlaW5nIGludm9rZWQuIFJpZ2h0IGF3YXksIG15IGJyYWluIGp1bXBzIHRvIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhhdCBmdW5jdGlvbiBkZWZpbmVkLCBhbmQgd2hhdCBpdHMgbGlrZWx5IHB1cnBvc2UgbWlnaHQgYmUgaW4gdGhpcyBjb250ZXh0LiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBldGhubF9kZWZhdWx0X2R1bXBfb25lYCBpdHNlbGYgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcgd2l0aGluIHRoaXMgcGFydGljdWxhciBjYWxsIHN0YWNrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgZnVsbHkgdG8gZXZhbHVhdGUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgaW52b2NhdGlvbiwgYW5kIHdoZXJlIHRoZSB2YWx1ZXMgYmVpbmcgcHJvY2Vzc2VkIGNvbWUgZnJvbS4gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvbmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODIyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MjI6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gODIzOlx0XG4gODI0Olx0XHRcdC8qIHBlci1QSFkgY29tbWFuZHMgdXNlIGV0aG5sX3JlcV9nZXRfcGh5ZGV2KCksIHdoaWNoIG5lZWRzIHRoZVxuIDgyNTpcdFx0XHQgKiBuZXRfZGV2aWNlIGluIHRoZSByZXFfaW5mb1xuIDgyNjpcdFx0XHQgKi9cbiA4Mjc6XHRcdFx0ZXRobmxfY3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZWRldiA9IGRldjtcbiA4Mjg6XHRcdFx0cmV0ID0gZXRobmxfcGVycGh5X2R1bXBfb25lX2Rldihza2IsIGN0eCwgaW5mbyk7XG4gODI5Olx0XG4gODMwOlx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiA4MzE6XHRcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldl90cmFja2VyKTtcbiA4MzI6XHRcdFx0ZXRobmxfY3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZWRldiA9IE5VTEw7XG4gODMzOlx0XG4gODM0Olx0XHRcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUCkge1xuIDgzNTpcdFx0XHRcdGlmIChsaWtlbHkoc2tiLVx1MDAzZWxlbikpXG4gODM2Olx0XHRcdFx0XHRyZXQgPSBza2ItXHUwMDNlbGVuO1xuIDgzNzpcdFx0XHRcdGJyZWFrO1xuIDgzODpcdFx0XHR9XG4gODM5Olx0XHRcdHJldCA9IDA7XG4gODQwOlx0XHR9XG4gODQxOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiA4NDI6XHRcbiA4NDM6XHRcdHJldHVybiByZXQ7XG4gODQ0Olx0fVxuIDg0NTpcdFxuIDg0NjpcdC8qIHBlci1QSFkgLVx1MDAzZWR1bXBpdCgpIGhhbmRsZXIgZm9yIEdFVCByZXF1ZXN0cy4gKi9cbiA4NDc6XHRzdGF0aWMgaW50IGV0aG5sX3BlcnBoeV9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiA4NDg6XHRcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIDg0OTpcdHtcbiA4NTA6XHRcdHN0cnVjdCBldGhubF9wZXJwaHlfZHVtcF9jdHggKmN0eCA9IGV0aG5sX3BlcnBoeV9kdW1wX2NvbnRleHQoY2IpO1xuIDg1MTpcdFx0Y29uc3Qgc3RydWN0IGdlbmxfZHVtcGl0X2luZm8gKmluZm8gPSBnZW5sX2R1bXBpdF9pbmZvKGNiKTtcbiA4NTI6XHRcdHN0cnVjdCBldGhubF9kdW1wX2N0eCAqZXRobmxfY3R4ID0gXHUwMDI2Y3R4LVx1MDAzZWV0aG5sX2N0eDtcbiA4NTM6XHRcdGludCByZXQgPSAwO1xuIDg1NDpcdFxuIDg1NTpcdFx0aWYgKGN0eC1cdTAwM2VpZmluZGV4KSB7XG4gODU2Olx0XHRcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuIDg1NzpcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIDg1ODpcdFxuIDg1OTpcdFx0XHRkZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4KGdlbmxfaW5mb19uZXQoXHUwMDI2aW5mby1cdTAwM2VpbmZvKSxcbiA4NjA6XHRcdFx0XHRcdFx0ICBjdHgtXHUwMDNlaWZpbmRleCwgXHUwMDI2ZGV2X3RyYWNrZXIsXG4gODYxOlx0XHRcdFx0XHRcdCAgR0ZQX0tFUk5FTCk7XG4gODYyOlx0XHRcdGlmICghZGV2KVxuIDg2MzpcdFx0XHRcdHJldHVybiAtRU5PREVWO1xuIDg2NDpcdFxuIDg2NTpcdFx0XHRldGhubF9jdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlZGV2ID0gZGV2O1xuIDg2NjpcdFx0XHRyZXQgPSBldGhubF9wZXJwaHlfZHVtcF9vbmVfZGV2KHNrYiwgY3R4LCBnZW5sX2luZm9fZHVtcChjYikpO1xuIDg2NzpcdFxuIDg2ODpcdFx0XHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVPUE5PVFNVUFAgXHUwMDI2XHUwMDI2IGxpa2VseShza2ItXHUwMDNlbGVuKSlcbiA4Njk6XHRcdFx0XHRyZXQgPSBza2ItXHUwMDNlbGVuO1xuIDg3MDpcdFxuIDg3MTpcdFx0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDYxNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSHVudGluZyBmb3IgYGV0aG5sX2RlZmF1bHRfZHVtcF9vbmVgKioKCk9rYXksIHNvIHRoZSBodW50IGJlZ2lucy4gSSYjMzk7bSBsb29raW5nIGZvciBgZXRobmxfZGVmYXVsdF9kdW1wX29uZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0LiBJcyB0aGlzIGEgZnVuY3Rpb24sIGEgdmFyaWFibGUsIGEgbWFjcm8/IEl0cyBuYW1pbmcgY29udmVudGlvbiBzdWdnZXN0cyBhIGZ1bmN0aW9uIG9yIHBvdGVudGlhbGx5IGEgbWFjcm8uIFRoZSBgZXRobmxgIHByZWZpeCBpcyBsaWtlbHkgc29tZSBzb3J0IG9mIG1vZHVsZSBvciBuYW1lc3BhY2U7IHBlcmhhcHMgcmVsYXRlZCB0byBFdGhlcm5ldCBvciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIGdpdmVuIHRoZSBgbmxgIGZvciAmIzM0O25ldGxpbmsmIzM0Oy4gVGhlICYjMzQ7ZGVmYXVsdCYjMzQ7IHByb2JhYmx5IGhpbnRzIGF0IGEgZGVmYXVsdCBvciBmYWxsYmFjayBtZWNoYW5pc20uIEFuZCAmIzM0O2R1bXBcX29uZSYjMzQ7Li4uIGRlZmluaXRlbHkgc291bmRzIGxpa2Ugc29tZSBraW5kIG9mIGRhdGEgcmV0cmlldmFsLCBsaWtlbHkgcmVsYXRlZCB0byBkdW1waW5nIG9yIG91dHB1dHRpbmcgYSBzaW5nbGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgb3Igc3RhdGUuCgpNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBmb3JtaW5nIGEgaHlwb3RoZXNpcy4gSXMgdGhpcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgRXRoZXJuZXQgaW50ZXJmYWNlJiMzOTtzIGRlZmF1bHQgY29uZmlndXJhdGlvbj8gT3IgcGVyaGFwcyByZWxhdGVkIHRvIGFuIG92ZXJhbGwgc3lzdGVtIGRlZmF1bHQgZm9yIG5ldHdvcmsgaW50ZXJmYWNlcz8KCkkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGNvZGViYXNlOyBJIGNhbiB1c2UgZ3JlcCwgYWNrLCByaXBncmVwLCBvciBzaW1pbGFyIHRvb2xzLCBkZXBlbmRpbmcgb24gdGhlIHNjYWxlIGFuZCBjb21wbGV4aXR5IG9mIHRoZSBwcm9qZWN0LiBJJiMzOTtkIHN0YXJ0IHdpdGggYSBicm9hZCBzZWFyY2gsIGxvb2tpbmcgZm9yIHRoZSBleGFjdCBuYW1lLCBhbmQgdmFyaWF0aW9ucyBsaWtlICYjMzQ7ZXRobmwmIzM0OyBhbmQgJiMzNDtkdW1wJiMzNDsuIEkmIzM5O2xsIGFsc28gY29uc2lkZXIgc2VhcmNoaW5nIGZvciByZWxhdGVkIHRlcm1zIGxpa2UgJiMzNDtuZXRsaW5rJiMzNDssICYjMzQ7ZXRoZXJuZXQmIzM0OywgJiMzNDtkZWZhdWx0IGNvbmZpZ3VyYXRpb24mIzM0OywgJiMzNDtpbnRlcmZhY2UgZHVtcCYjMzQ7LCBvciBzaW1pbGFyLgoKSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBsYW5ndWFnZSBvciBmcmFtZXdvcmsgaGVyZS4gRm9yIGV4YW1wbGUsIGlmIGl0JiMzOTtzIGtlcm5lbCBzcGFjZSwgSSBtaWdodCBleHBlY3QgdG8gc2VlIGEgbG90IG9mIEMgY29kZS4gSWYgaXQgaXMgdXNlcnNwYWNlLCBpdCBjb3VsZCBiZSBDLCBDJiM0MzsmIzQzOywgUHl0aG9uLCBvciB3aGF0ZXZlciB0aGUgcHJvamVjdCBpcyB1c2luZy4gU28gSSBoYXZlIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gZG9pbmcgdGhlIHNlYXJjaC4gQmFzZWQgb24gdGhlIGxhbmd1YWdlIGFuZCBmcmFtZXdvcmsgdGhlIHNlYXJjaCBtaWdodCBkaWZmZXIgYXMgd2VsbC4KCk9uY2UgSSBoYXZlIGEgbGlzdCBvZiBwb3NzaWJsZSBsb2NhdGlvbnMgb3IgdXNhZ2VzLCBJJiMzOTtsbCB0aGVuIGRyaWxsIGRvd24gYW5kIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlLCB3aGF0IGl0IGRvZXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgY29tcG9uZW50cywgaW4gb3JkZXIgdG8gZmlndXJlIG91dCB3aGF0IGl0IGRvZXMgaW4gZGV0YWlsLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHdoZXJlIHRoZSAmIzM0O2R1bXAmIzM0OyBvY2N1cnMsIHdoZW4gaXQmIzM5O3MgY2FsbGVkLCBhbmQgd2hvIGNhbGxzIGl0LiBUaGlzIHdpbGwgaGVscCBtZSBjb25uZWN0IHRoZSBkb3RzIGFib3V0IGl0cyBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgaW52b2x2ZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlcywgc29ja2V0IGNhbGxzLCBuZXRsaW5rIG1lc3NhZ2VzLCBhbmQgcG90ZW50aWFsbHkgc29tZSBmb3JtIG9mIHN0YXRlIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V0aG5sX2RlZmF1bHRfZHVtcF9vbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZXRodG9vbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvbmV0bGluay5jPTUwOT1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9ldGh0b29sL25ldGxpbmsuYy01OTUtXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NTk2OnN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9kdW1wX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTU5Ny1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGV0aG5sX2R1bXBfY3R4ICpjdHgsXG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jPTY0MD1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jLTY1My1cbm5ldC9ldGh0b29sL25ldGxpbmsuYzo2NTQ6XHRcdHJldCA9IGV0aG5sX2RlZmF1bHRfZHVtcF9vbmUoc2tiLCBkZXYsIGN0eCwgZ2VubF9pbmZvX2R1bXAoY2IpKTtcbm5ldC9ldGh0b29sL25ldGxpbmsuYy02NTUtXG4tLVxubmV0L2V0aHRvb2wvbmV0bGluay5jPTc3OT1zdGF0aWMgaW50IGV0aG5sX3BlcnBoeV9kdW1wX29uZV9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNzk4LVx0XHQgKi9cbm5ldC9ldGh0b29sL25ldGxpbmsuYzo3OTk6XHRcdHJldCA9IGV0aG5sX2RlZmF1bHRfZHVtcF9vbmUoc2tiLCBkZXYsIGV0aG5sX2N0eCwgaW5mbyk7XG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtODAwLVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUyNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGBldGhubF9kZWZhdWx0X2R1bXBfb25lYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnVzaW5lc3MuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIGBldGhubF9kZWZhdWx0X2R1bXBfb25lYC4gSSYjMzk7bSBhc3N1bWluZyBmcm9tIHRoZSBuYW1pbmcgY29udmVudGlvbiB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgZGVmYXVsdCBkdW1wLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGV0aG5pYyBuZXR3b3JrIChldGhubCkgY29uZmlndXJhdGlvbnMgb3IgZGF0YS4gVGhlICYjMzQ7b25lJiMzNDsgYXQgdGhlIGVuZCBzdWdnZXN0cyBhIHByaW1hcnkgb3IgYmFzZSBjb25maWd1cmF0aW9uLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB2YXJpb3VzIHBvdGVudGlhbCBjb250ZXh0czogaXMgdGhpcyBhIHNwZWNpZmljIG5ldHdvcmsgcGFyYW1ldGVyIGR1bXA/IEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGluaXRpYWwgc3RhdGUgb2YgYSBwYXJ0aWN1bGFyIGRldmljZSBvciBzeXN0ZW0gcmVsYXRlZCB0byBldGhubD8gT3IgcGVyaGFwcyBpdCYjMzk7cyBhIHNuYXBzaG90IG9mIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgZXRobmwgaW50ZXJmYWNlIGl0c2VsZj8KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIGZvciBhIGZpbGUgdGhhdCBjb3VsZCBjb250YWluIGFueXRoaW5nIGZyb20gYmFzaWMgTUFDIGFkZHJlc3MgYXNzaWdubWVudHMgYW5kIE1UVSBzaXplcyB0byBtb3JlIGNvbXBsZXggcm91dGluZyBpbmZvcm1hdGlvbiwgVkxBTiBjb25maWd1cmF0aW9ucywgb3IgZXZlbiBzZWN1cml0eSBzZXR0aW5ncyByZWxhdGVkIHRvIHRoZSBldGhubCBwcm90b2NvbHMuIE15IGZvY3VzIHdpbGwgYmUgb24gcXVpY2tseSBpZGVudGlmeWluZyB0aGUga2V5IGVsZW1lbnRzIGFuZCBhc3Nlc3NpbmcgdGhlaXIgaW1wbGljYXRpb25zLCBhcyB3ZWxsIGFzIGxvb2tpbmcgZm9yIGFueSBvYnZpb3VzIGRldmlhdGlvbnMgZnJvbSBzdGFuZGFyZCBwcmFjdGljZS4gSSYjMzk7bGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYW55dGhpbmcgdGhhdCBjb3VsZCBzdWdnZXN0IHVuZGVybHlpbmcgYXNzdW1wdGlvbnMgb3IgaGFyZGNvZGVkIHZhbHVlcy4gTXkgZ29hbCBpcyB0byByYXBpZGx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCB0aGUgbGlrZWx5IHB1cnBvc2Ugb2YgdGhpcyBkdW1wLiBOb3csIGxldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2V0aHRvb2wvbmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTk2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1OTY6XHRzdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZHVtcF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiA1OTc6XHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGV0aG5sX2R1bXBfY3R4ICpjdHgsXG4gNTk4Olx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4gNTk5Olx0e1xuIDYwMDpcdFx0Ym9vbCBuZWVkX3J0bmw7XG4gNjAxOlx0XHR2b2lkICplaGRyO1xuIDYwMjpcdFx0aW50IHJldDtcbiA2MDM6XHRcbiA2MDQ6XHRcdGVoZHIgPSBnZW5sbXNnX3B1dChza2IsIGluZm8tXHUwMDNlc25kX3BvcnRpZCwgaW5mby1cdTAwM2VzbmRfc2VxLFxuIDYwNTpcdFx0XHRcdCAgIFx1MDAyNmV0aHRvb2xfZ2VubF9mYW1pbHksIE5MTV9GX01VTFRJLFxuIDYwNjpcdFx0XHRcdCAgIGN0eC1cdTAwM2VvcHMtXHUwMDNlcmVwbHlfY21kKTtcbiA2MDc6XHRcdGlmICghZWhkcilcbiA2MDg6XHRcdFx0cmV0dXJuIC1FTVNHU0laRTtcbiA2MDk6XHRcbiA2MTA6XHRcdGV0aG5sX2luaXRfcmVwbHlfZGF0YShjdHgtXHUwMDNlcmVwbHlfZGF0YSwgY3R4LVx1MDAzZW9wcywgZGV2KTtcbiA2MTE6XHRcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpIHx8XG4gNjEyOlx0XHRcdCAgICBldGh0b29sX25sX21zZ19uZWVkc19ydG5sKGRldiwgY3R4LVx1MDAzZW9wcy1cdTAwM2VyZXF1ZXN0X2NtZCk7XG4gNjEzOlx0XHRpZiAobmVlZF9ydG5sKVxuIDYxNDpcdFx0XHRydG5sX2xvY2soKTtcbiA2MTU6XHRcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuIDYxNjpcdFx0cmV0ID0gY3R4LVx1MDAzZW9wcy1cdTAwM2VwcmVwYXJlX2RhdGEoY3R4LVx1MDAzZXJlcV9pbmZvLCBjdHgtXHUwMDNlcmVwbHlfZGF0YSwgaW5mbyk7XG4gNjE3Olx0XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuIDYxODpcdFx0aWYgKG5lZWRfcnRubClcbiA2MTk6XHRcdFx0cnRubF91bmxvY2soKTtcbiA2MjA6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNjIxOlx0XHRcdGdvdG8gb3V0X2NhbmNlbDtcbiA2MjI6XHRcdHJldCA9IGV0aG5sX2ZpbGxfcmVwbHlfaGVhZGVyKHNrYiwgZGV2LCBjdHgtXHUwMDNlb3BzLVx1MDAzZWhkcl9hdHRyKTtcbiA2MjM6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNjI0Olx0XHRcdGdvdG8gb3V0O1xuIDYyNTpcdFx0cmV0ID0gY3R4LVx1MDAzZW9wcy1cdTAwM2VmaWxsX3JlcGx5KHNrYiwgY3R4LVx1MDAzZXJlcV9pbmZvLCBjdHgtXHUwMDNlcmVwbHlfZGF0YSk7XG4gNjI2Olx0XG4gNjI3Olx0b3V0OlxuIDYyODpcdFx0aWYgKGN0eC1cdTAwM2VvcHMtXHUwMDNlY2xlYW51cF9kYXRhKVxuIDYyOTpcdFx0XHRjdHgtXHUwMDNlb3BzLVx1MDAzZWNsZWFudXBfZGF0YShjdHgtXHUwMDNlcmVwbHlfZGF0YSk7XG4gNjMwOlx0b3V0X2NhbmNlbDpcbiA2MzE6XHRcdGN0eC1cdTAwM2VyZXBseV9kYXRhLVx1MDAzZWRldiA9IE5VTEw7XG4gNjMyOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDYzMzpcdFx0XHRnZW5sbXNnX2NhbmNlbChza2IsIGVoZHIpO1xuIDYzNDpcdFx0ZWxzZVxuIDYzNTpcdFx0XHRnZW5sbXNnX2VuZChza2IsIGVoZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjU1NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEb3VibGUtQ2hlY2tpbmcgdGhlIERhdGEgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBub3RpY2luZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIFRoZSBjYWxsIHRvIGBldGhubF9pbml0X3JlcGx5X2RhdGEoY3R4LSZndDtyZXBseV9kYXRhLCBjdHgtJmd0O29wcywgZGV2KTtgIHBvcHMgdXAgaW4gYGV0aG5sX2RlZmF1bHRfZHVtcF9vbmVgIHRvbywgbm90IGp1c3QgaW4gdGhlIGBkb2l0YCBwYXRoLiBSaWdodCwgYW5kIGVhcmxpZXIgd2UgdmVyaWZpZWQgdGhhdCBgZXRobmxfaW5pdF9yZXBseV9kYXRhYCBpbmNsdWRlcyBhIGBtZW1zZXQocmVwbHlfZGF0YSwgMCwgb3BzLSZndDtyZXBseV9kYXRhX3NpemUpO2AuIFRoYXQgYG1lbXNldGAgaXMgY3JpdGljYWwhCgpTbywgdGhlIGByZXBseV9kYXRhYCBidWZmZXIgaXMgZGVmaW5pdGVseSBnZXR0aW5nIHplcm9lZCBvdXQgKmJlZm9yZSogYHByZXBhcmVfZGF0YWAgZ2V0cyBjYWxsZWQuIFRoaXMgaG9sZHMgdHJ1ZSBmb3IgYm90aCB0aGUgYGRvaXRgIGFuZCBgZHVtcGl0YCBleGVjdXRpb24gcGF0aHMuIEl0JiMzOTtzIGdvb2QgdGhhdCB3ZSYjMzk7cmUgY292ZXJpbmcgb3VyIGJhc2VzLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIHRha2UgYSBxdWljayBsb29rIGJhY2sgYXQgdGhlIGBldGhubF9pbml0X3JlcGx5X2RhdGFgIGZ1bmN0aW9uIGl0c2VsZi4gQWx3YXlzIHdvcnRoIGEgZG91YmxlLWNoZWNrIG9uIGluaXRpYWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9ldGh0b29sL25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTAwOlx0c3RhdGljIHZvaWQgZXRobmxfaW5pdF9yZXBseV9kYXRhKHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhLFxuIDUwMTpcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgKm9wcyxcbiA1MDI6XHRcdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiA1MDM6XHR7XG4gNTA0Olx0XHRtZW1zZXQocmVwbHlfZGF0YSwgMCwgb3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSk7XG4gNTA1Olx0XHRyZXBseV9kYXRhLVx1MDAzZWRldiA9IGRldjtcbiA1MDY6XHR9XG4gNTA3Olx0XG4gNTA4Olx0LyogZGVmYXVsdCAtXHUwMDNlZG9pdCgpIGhhbmRsZXIgZm9yIEdFVCB0eXBlIHJlcXVlc3RzICovXG4gNTA5Olx0c3RhdGljIGludCBldGhubF9kZWZhdWx0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxMTgKCQkJCQkJCW91dHB1dDogMzc3CgkJCQkJCQl0aG91Z2h0czogNzg2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipTdW1tYXJ5IG9mIHRoZSBDb2RlIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb25lIHRocm91Z2ggdGhpcyBwYXRjaCB3aXRoIGEgZmluZS10b290aCBjb21iLCBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gdGhlIG5ldyBldGh0b29sIG5ldGxpbmsgZnVuY3Rpb25hbGl0eS4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBhYm91dCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLiBIb3dldmVyLCBhZnRlciBjYXJlZnVsbHkgdHJhY2luZyB0aGUgY29kZSBleGVjdXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHBhdGhzLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy4KCkhlcmUmIzM5O3MgbXkgcmVhc29uaW5nLiBGaXJzdCwgSSBjb25maXJtZWQgdGhhdCB0aGUgcHJpbWFyeSBgcmVwbHlfZGF0YWAgc3RydWN0dXJlIHVzZWQgZm9yIGJvdGggYElOVEZfQ0FQU19HRVRgIGFuZCBgUEhZX1RFU1RfR0VUYCBpcyBhbHdheXMgemVyb2VkIG91dCBiZWZvcmUgdGhlIGRyaXZlciYjMzk7cyBgZ2V0X2ludGZfY2Fwc2AgYW5kIGBnZXRfcGh5X3Rlc3RgIGNhbGxiYWNrcyBhcmUgaW52b2tlZC4gVGhlIGBldGhubF9pbml0X3JlcGx5X2RhdGFgIGZ1bmN0aW9uLCB3aGljaCBpcyBjYWxsZWQgaW4gbXVsdGlwbGUgcGxhY2VzLCBleHBsaWNpdGx5IHVzZXMgYG1lbXNldGAgdG8gemVybyB0aGUgZW50aXJlIGFsbG9jYXRlZCBtZW1vcnkgcmVnaW9uIChgb3BzLSZndDtyZXBseV9kYXRhX3NpemVgKS4gVGhpcyBpbmNsdWRlcyBhbGwgZmllbGRzIHdpdGhpbiBzdHJ1Y3R1cmVzIGxpa2UgYHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YWAgYW5kIGBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHNgLiBUaGlzIG1lYW5zIHRoYXQgZXZlbiBpZiB0aGUgZHJpdmVyICpmYWlscyogdG8gaW5pdGlhbGl6ZSBhIHNwZWNpZmljIGZpZWxkLCBpdCB3aWxsIGRlZmF1bHQgdG8gemVyby4KCkkgdGhlbiByZXZpc2l0ZWQgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YWAgd2hpY2ggSSBmb3VuZCBoYXMgYW4gZXh0cmEgYG1lbXNldGAgY2FsbCwgYW5kIHdoaWNoIGNhbiBiZSByZWR1bmRhbnQsIGJ1dCBkb2VzbiYjMzk7dCBjYXVzZSBhbnkgaXNzdWVzIGFzIGl0IGd1YXJhbnRlZXMgdGhlIHN0cnVjdCBpcyBpbmRlZWQgemVyb2VkLiBJIGFsc28gcmV2aWV3ZWQgYGV0aG5sX2FjdF9waHlfdGVzdGAgd2hpY2ggZGVmaW5lcyBgdGVzdCA9IHt9YCwgd2hpY2ggYWxzbyBndWFyYW50ZWVzIHRoZSBzdHJ1Y3QgaXMgemVyb2VkLiBBbHNvIGFueSBsb2NhbCBvciBzdGF0aWNhbGx5IGRlZmluZWQgc3RydWN0cyBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4KClRoZSBjb2RlIHVzZXMgaW5kaXZpZHVhbCBgbmxhX3B1dF8qYCBmdW5jdGlvbnMgKGUuZy4sIGBubGFfcHV0X3UzMmAsIGBubGFfcHV0X3N0cmluZ2AsIGBubGFfcHV0X2ZsYWdgLCBhbmQgYG5sYV9wdXRfdTY0XzY0Yml0YCkgdG8gc2VyaWFsaXplIHRoZSBkYXRhIGludG8gbmV0bGluayBtZXNzYWdlcy4gVGhlc2UgZnVuY3Rpb25zIGRlYWwgd2l0aCBjb3B5aW5nIHRoZSB2YWx1ZSBvZiBpbmRpdmlkdWFsIGZpZWxkcywgbm90IHRoZSBlbnRpcmUgc3RydWN0LiBUaGlzIGlzIGltcG9ydGFudDogZXZlbiBpZiB0aGVyZSBhcmUgdW5pbml0aWFsaXplZCBwYWRkaW5nIGJ5dGVzIHdpdGhpbiBhIHN0cnVjdCwgdGhlc2UgcGFkZGluZyBieXRlcyB3b3VsZCBub3QgYmUgY29waWVkIGludG8gdGhlIG5ldGxpbmsgbWVzc2FnZS4gVGhlIGZ1bmN0aW9ucyBjb3B5IHRoZSBhY3R1YWwgZGF0YSBmaWVsZHMgb25seS4KCkkgYWxzbyBsb29rZWQgYXQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzLiBUaGlzIGNhbiBvY2N1ciwgZm9yIGluc3RhbmNlLCBpZiB0aGUgZHJpdmVyIHNldHMgYW4gaW52YWxpZCBgbnVtX2Jsb2Nrc2AgdmFsdWUsIHNvIHRoYXQgYSBsb29wIGluIGEgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiBnb2VzIHBhc3QgdGhlIHZhbGlkIGJsb2NrIHJhbmdlLiBUaGF0IHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4KCkkgZGlkIGlkZW50aWZ5IGEgbG9naWMgYnVnIHdpdGhpbiBgaW50Zl9jYXBzX2ZpbGxfcmVwbHlgLCB3aGVyZSBhbiB1bmNvbmRpdGlvbmFsIGBnb3RvIG5sYV9wdXRfZmFpbHVyZTtgIGlzIHByZXNlbnQuIEhvd2V2ZXIsIHRoaXMgaXMgYSBjb2RlIGJ1ZyB0aGF0IHdpbGwgY2F1c2UgdGhlIGZ1bmN0aW9uIHRvIGFsd2F5cyBmYWlsLiBCdXQsIGNydWNpYWxseSwgaXQmIzM5O3Mgbm90IGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gVGhlIG5ldGxpbmsgbWVzc2FnZSB3b3VsZCBiZSBjYW5jZWxlZCwgc28gbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgd291bGQgYmUgZXhwb3NlZC4KClRoZXJlZm9yZSwgc2luY2UgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwbGljaXRseSB6ZXJvZWQgYmVmb3JlIHVzZSwgYW5kIGRhdGEgZmllbGRzIGFyZSBpbmRpdmlkdWFsbHkgc2VyaWFsaXplZCBpbnRvIG5ldGxpbmsgbWVzc2FnZXMsIGFuZCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlzIGNhdWdodCBieSBLQVNBTiwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEkgY29uY2x1ZGUgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYCBmb3IgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmRzIChgSU5URl9DQVBTX0dFVGAsIGBQSFlfVEVTVF9HRVRgLCBgUEhZX1RFU1RfQUNUYCkgdG8gcXVlcnkgaW50ZXJmYWNlIGNhcGFiaWxpdGllcyBhbmQgY29uZmlndXJlIFBIWSB0ZXN0cy4gVGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgZXRodG9vbCBjb3JlIGFuZCB0aGUgZHJpdmVycyAoYHN0cnVjdCBldGh0b29sX2ludGZfY2Fwc2AgYW5kIGBzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdGApIGFyZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkuXG5cbkhvd2V2ZXIsIHRoZSBldGh0b29sIG5ldGxpbmsgZnJhbWV3b3JrIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplcyB0aGUgcmVwbHkgZGF0YSBzdHJ1Y3R1cmVzIHZpYSBgZXRobmxfaW5pdF9yZXBseV9kYXRhKClgICh3aGljaCBjYWxscyBgbWVtc2V0KHJlcGx5X2RhdGEsIDAsIG9wcy1cdTAwM2VyZXBseV9kYXRhX3NpemUpYCkgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUgZHJpdmVyIGNhbGxiYWNrcyAoZS5nLiwgYGdldF9pbnRmX2NhcHNgKS4gU2ltaWxhcmx5LCBgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhKClgIGV4cGxpY2l0bHkgY2FsbHMgYG1lbXNldChcdTAwMjZkYXRhLVx1MDAzZXRlc3QsIDAsIHNpemVvZihkYXRhLVx1MDAzZXRlc3QpKWAsIGFuZCBgZXRobmxfYWN0X3BoeV90ZXN0KClgIGluaXRpYWxpemVzIGl0cyBsb2NhbCBzdHJ1Y3Qgd2l0aCBgPSB7fWAuXG5cbkJlY2F1c2UgYWxsIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0YWNrIG9yIGhlYXAgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGV2ZW4gaWYgYSBkcml2ZXIgZmFpbHMgdG8gcG9wdWxhdGUgYWxsIGZpZWxkcy4gRnVydGhlcm1vcmUsIHRoZSBuZXRsaW5rIHJlc3BvbnNlIGlzIGNvbnN0cnVjdGVkIGJ5IHNlcmlhbGl6aW5nIGluZGl2aWR1YWwgZmllbGRzIHVzaW5nIGBubGFfcHV0X3UzMmAsIGBubGFfcHV0X3N0cmluZ2AsIGV0Yy4sIHJhdGhlciB0aGFuIGNvcHlpbmcgcmF3IHN0cnVjdHMsIHdoaWNoIGluaGVyZW50bHkgYXZvaWRzIGxlYWtpbmcgc3RydWN0IHBhZGRpbmcuXG5cbkFueSBwb3RlbnRpYWwgaXNzdWVzLCBzdWNoIGFzIGEgZHJpdmVyIHdyaXRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBgYmxvY2tzYCBhcnJheSBvciByZXR1cm5pbmcgYW4gaW52YWxpZCBgbnVtX2Jsb2Nrc2AgbGVhZGluZyB0byBvdXQtb2YtYm91bmRzIHJlYWRzLCB3b3VsZCBiZSByZWxpYWJseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kcyAoYElOVEZfQ0FQU19HRVRgLCBgUEhZX1RFU1RfR0VUYCwgYFBIWV9URVNUX0FDVGApIHRvIHF1ZXJ5IGludGVyZmFjZSBjYXBhYmlsaXRpZXMgYW5kIGNvbmZpZ3VyZSBQSFkgdGVzdHMuIFRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGJldHdlZW4gdGhlIGV0aHRvb2wgY29yZSBhbmQgdGhlIGRyaXZlcnMgKGBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHNgIGFuZCBgc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3RgKSBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5LlxuXG5Ib3dldmVyLCB0aGUgZXRodG9vbCBuZXRsaW5rIGZyYW1ld29yayBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZXMgdGhlIHJlcGx5IGRhdGEgc3RydWN0dXJlcyB2aWEgYGV0aG5sX2luaXRfcmVwbHlfZGF0YSgpYCAod2hpY2ggY2FsbHMgYG1lbXNldChyZXBseV9kYXRhLCAwLCBvcHMtXHUwMDNlcmVwbHlfZGF0YV9zaXplKWApIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlIGRyaXZlciBjYWxsYmFja3MgKGUuZy4sIGBnZXRfaW50Zl9jYXBzYCkuIFNpbWlsYXJseSwgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YSgpYCBleHBsaWNpdGx5IGNhbGxzIGBtZW1zZXQoXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0LCAwLCBzaXplb2YoZGF0YS1cdTAwM2V0ZXN0KSlgLCBhbmQgYGV0aG5sX2FjdF9waHlfdGVzdCgpYCBpbml0aWFsaXplcyBpdHMgbG9jYWwgc3RydWN0IHdpdGggYD0ge31gLlxuXG5CZWNhdXNlIGFsbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSB1c2UsIHRoZXJlIGlzIG5vIHJpc2sgb2YgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBvciBoZWFwIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBldmVuIGlmIGEgZHJpdmVyIGZhaWxzIHRvIHBvcHVsYXRlIGFsbCBmaWVsZHMuIEZ1cnRoZXJtb3JlLCB0aGUgbmV0bGluayByZXNwb25zZSBpcyBjb25zdHJ1Y3RlZCBieSBzZXJpYWxpemluZyBpbmRpdmlkdWFsIGZpZWxkcyB1c2luZyBgbmxhX3B1dF91MzJgLCBgbmxhX3B1dF9zdHJpbmdgLCBldGMuLCByYXRoZXIgdGhhbiBjb3B5aW5nIHJhdyBzdHJ1Y3RzLCB3aGljaCBpbmhlcmVudGx5IGF2b2lkcyBsZWFraW5nIHN0cnVjdCBwYWRkaW5nLlxuXG5BbnkgcG90ZW50aWFsIGlzc3Vlcywgc3VjaCBhcyBhIGRyaXZlciB3cml0aW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGJsb2Nrc2AgYXJyYXkgb3IgcmV0dXJuaW5nIGFuIGludmFsaWQgYG51bV9ibG9ja3NgIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyByZWFkcywgd291bGQgYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA2OjE1LjMxODM4MTg2OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDE2MTY4NzQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFVEhUT09MX05FVExJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJldGhubF9hY3RfcGh5X3Rlc3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kcyAoYElOVEZfQ0FQU19HRVRgLCBgUEhZX1RFU1RfR0VUYCwgYFBIWV9URVNUX0FDVGApIHRvIHF1ZXJ5IGludGVyZmFjZSBjYXBhYmlsaXRpZXMgYW5kIGNvbmZpZ3VyZSBQSFkgdGVzdHMuIFRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGJldHdlZW4gdGhlIGV0aHRvb2wgY29yZSBhbmQgdGhlIGRyaXZlcnMgKGBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHNgIGFuZCBgc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3RgKSBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5Llxcblxcbkhvd2V2ZXIsIHRoZSBldGh0b29sIG5ldGxpbmsgZnJhbWV3b3JrIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplcyB0aGUgcmVwbHkgZGF0YSBzdHJ1Y3R1cmVzIHZpYSBgZXRobmxfaW5pdF9yZXBseV9kYXRhKClgICh3aGljaCBjYWxscyBgbWVtc2V0KHJlcGx5X2RhdGEsIDAsIG9wcy1cXHUwMDNlcmVwbHlfZGF0YV9zaXplKWApIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlIGRyaXZlciBjYWxsYmFja3MgKGUuZy4sIGBnZXRfaW50Zl9jYXBzYCkuIFNpbWlsYXJseSwgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YSgpYCBleHBsaWNpdGx5IGNhbGxzIGBtZW1zZXQoXFx1MDAyNmRhdGEtXFx1MDAzZXRlc3QsIDAsIHNpemVvZihkYXRhLVxcdTAwM2V0ZXN0KSlgLCBhbmQgYGV0aG5sX2FjdF9waHlfdGVzdCgpYCBpbml0aWFsaXplcyBpdHMgbG9jYWwgc3RydWN0IHdpdGggYD0ge31gLlxcblxcbkJlY2F1c2UgYWxsIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0YWNrIG9yIGhlYXAgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGV2ZW4gaWYgYSBkcml2ZXIgZmFpbHMgdG8gcG9wdWxhdGUgYWxsIGZpZWxkcy4gRnVydGhlcm1vcmUsIHRoZSBuZXRsaW5rIHJlc3BvbnNlIGlzIGNvbnN0cnVjdGVkIGJ5IHNlcmlhbGl6aW5nIGluZGl2aWR1YWwgZmllbGRzIHVzaW5nIGBubGFfcHV0X3UzMmAsIGBubGFfcHV0X3N0cmluZ2AsIGV0Yy4sIHJhdGhlciB0aGFuIGNvcHlpbmcgcmF3IHN0cnVjdHMsIHdoaWNoIGluaGVyZW50bHkgYXZvaWRzIGxlYWtpbmcgc3RydWN0IHBhZGRpbmcuXFxuXFxuQW55IHBvdGVudGlhbCBpc3N1ZXMsIHN1Y2ggYXMgYSBkcml2ZXIgd3JpdGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGBibG9ja3NgIGFycmF5IG9yIHJldHVybmluZyBhbiBpbnZhbGlkIGBudW1fYmxvY2tzYCBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMsIHdvdWxkIGJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbmV3IGV0aHRvb2wgbmV0bGluayBtZXNzYWdlcyAoRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVCwgRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULCBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QpIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljaWVzLiBFdmVuIHRob3VnaCBubyBkcml2ZXJzIGN1cnJlbnRseSBpbXBsZW1lbnQgdGhlIHVuZGVybHlpbmcgZXRodG9vbCBvcGVyYXRpb25zLCB0aGUgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcsIHBvbGljeSB2YWxpZGF0aW9uLCBhbmQgaW5pdGlhbCBoYW5kbGVyIGZ1bmN0aW9ucyAobGlrZSBldGhubF9hY3RfcGh5X3Rlc3QpIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyLXNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjoxNS4zMTgzODYzOThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMTg3OTY2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ1MDZkZDEwODYzOGU1ZDc3ZDIzZjMwZWZkZjJjZjdmYTg2ZGVlOWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDU6MDY6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWxcXG5pbmRleCA1ZGQ0ZDFiNWQ5NGJiLi4zNjFlYjNjNjY1NzcwIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXFxuQEAgLTIxMCw2ICsyMTAsNTUgQEAgZGVmaW5pdGlvbnM6XFxuICAgICAgIC1cXG4gICAgICAgICBuYW1lOiBkaXNjYXJkXFxuICAgICAgICAgdmFsdWU6IDMxXFxuKyAgLVxcbisgICAgbmFtZTogaW50Zi1jb21wb25lbnRcXG4rICAgIHR5cGU6IGVudW1cXG4rICAgIGRvYzogVHlwZSBvZiBoYXJkd2FyZSBjb21wb25lbnQgaW4gdGhlIGludGVyZmFjZS5cXG4rICAgIGVudHJpZXM6XFxuKyAgICAgIC0gbWFjXFxuKyAgICAgIC0gcGh5XFxuKyAgICAgIC0gbW9kdWxlXFxuKyAgLVxcbisgICAgbmFtZTogaW50Zi1zdWJsYXllclxcbisgICAgdHlwZTogZW51bVxcbisgICAgZG9jOiA4MDIuMyBzdWJsYXllciB3aXRoaW4gYSBjb21wb25lbnQuXFxuKyAgICBlbnRyaWVzOlxcbisgICAgICAtIG5vbmVcXG4rICAgICAgLSByc1xcbisgICAgICAtIHBjc1xcbisgICAgICAtIGZlY1xcbisgICAgICAtIHBtYVxcbisgICAgICAtIHBtZFxcbisgIC1cXG4rICAgIG5hbWU6IHBoeS10ZXN0LXBhdHRlcm5cXG4rICAgIHR5cGU6IGVudW1cXG4rICAgIGRvYzogUEhZIHRlc3QgcGF0dGVybiB0eXBlcyBmb3IgUFJCUyBnZW5lcmF0aW9uL2NoZWNraW5nLlxcbisgICAgZW50cmllczpcXG4rICAgICAgLSBvZmZcXG4rICAgICAgLSBwcmJzN1xcbisgICAgICAtIHByYnM5XFxuKyAgICAgIC0gcHJiczExXFxuKyAgICAgIC0gcHJiczEzXFxuKyAgICAgIC0gcHJiczE1XFxuKyAgICAgIC0gcHJiczIzXFxuKyAgICAgIC0gcHJiczMxXFxuKyAgICAgIC0gc3NwcnFcXG4rICAgICAgLSBwcmJzMTNxXFxuKyAgICAgIC0gcHJiczMxcVxcbisgICAgICAtIHNxdWFyZS1ucnpcXG4rICAgICAgLSBzcXVhcmUtcGFtNFxcbisgICAgICAtIHR4LWxpbmVhcml0eVxcbisgICAgICAtIHNjcmFtYmxlZC1pZGxlXFxuKyAgICAgIC0gazI4LTVcXG4rICAgICAgLSBrMjgtN1xcbisgIC1cXG4rICAgIG5hbWU6IHBoeS10ZXN0LWFjdGlvblxcbisgICAgdHlwZTogZW51bVxcbisgICAgZG9jOiBCRVJUIGNvbnRyb2wgYWN0aW9ucy5cXG4rICAgIGVudHJpZXM6XFxuKyAgICAgIC0gbm9uZVxcbisgICAgICAtIHN0YXJ0XFxuKyAgICAgIC0gc3RvcFxcbiBcXG4gYXR0cmlidXRlLXNldHM6XFxuICAgLVxcbkBAIC0xOTA1LDYgKzE5NTQsMTE1IEBAIGF0dHJpYnV0ZS1zZXRzOlxcbiAgICAgICAgIG5hbWU6IGxpbmtcXG4gICAgICAgICB0eXBlOiBuZXN0XFxuICAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IG1zZS1zbmFwc2hvdFxcbisgIC1cXG4rICAgIG5hbWU6IGludGYtYmxvY2tcXG4rICAgIGRvYzogQSBzaW5nbGUgZnVuY3Rpb25hbCBibG9jayBpbiB0aGUgaW50ZXJmYWNlLlxcbisgICAgYXR0cmlidXRlczpcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGlkXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBjb21wb25lbnRcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBlbnVtOiBpbnRmLWNvbXBvbmVudFxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogc3VibGF5ZXJcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBlbnVtOiBpbnRmLXN1YmxheWVyXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBpbnN0YW5jZVxcbisgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAgIGRvYzogfFxcbisgICAgICAgICAgSWRlbnRpZmllcyB0aGUgaGFyZHdhcmUgZW50aXR5IHdoZW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mXFxuKyAgICAgICAgICB0aGUgc2FtZSBjb21wb25lbnQgZXhpc3QgaW4gdGhlIGludGVyZmFjZS4gVGhlIGRyaXZlclxcbisgICAgICAgICAgYXNzaWducyBpbnN0YW5jZSBudW1iZXJzIHNlcXVlbnRpYWxseSBiYXNlZCBvbiBwb3NpdGlvbiBpblxcbisgICAgICAgICAgdGhlIHBoeXNpY2FsIHBhdGguIERlZmF1bHRzIHRvIDAgd2hlbiBvbmx5IG9uZSBpbnN0YW5jZSBvZlxcbisgICAgICAgICAgYSBnaXZlbiBjb21wb25lbnQgZXhpc3RzLlxcbisgICAgICAgICAgRm9yIFBIWTogaW5zdGFuY2UgMCBpcyB0aGUgaW50ZXJuYWwvaG9zdC1zaWRlIFBIWSxcXG4rICAgICAgICAgIGluc3RhbmNlIDEgaXMgYW4gZXh0ZXJuYWwgUEhZIGZ1cnRoZXIgYWxvbmcgdGhlIHBhdGhcXG4rICAgICAgICAgIHRvd2FyZCB0aGUgbGluZSBzaWRlLlxcbisgICAgICAgICAgRm9yIE1BQzogaW5zdGFuY2UgMCBpcyB0aGUgaG9zdC1mYWNpbmcgTUFDLCBpbnN0YW5jZSAxIGlzXFxuKyAgICAgICAgICBhIHNlY29uZGFyeSBNQUMgZnVydGhlciBhbG9uZyB0aGUgZGF0YSBwYXRoIChlLmcuLCBiZWhpbmRcXG4rICAgICAgICAgIGFuIGVtYmVkZGVkIHN3aXRjaCkuXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBuYW1lXFxuKyAgICAgICAgdHlwZTogc3RyaW5nXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBkZXB0aFxcbisgICAgICAgIHR5cGU6IHU4XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBsYW5lc1xcbisgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogbG9vcGJhY2stc3VwcG9ydGVkXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBzdXBwb3J0ZWQtdHgtcGF0dGVybnNcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IHN1cHBvcnRlZC1yeC1wYXR0ZXJuc1xcbisgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogZXJyb3ItaW5qZWN0LXN1cHBvcnRlZFxcbisgICAgICAgIHR5cGU6IGZsYWdcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGJlcnQtc3VwcG9ydGVkXFxuKyAgICAgICAgdHlwZTogZmxhZ1xcbisgIC1cXG4rICAgIG5hbWU6IGludGYtY2Fwc1xcbisgICAgZG9jOiBJbnRlcmZhY2UgY2FwYWJpbGl0aWVzIG1lc3NhZ2UuXFxuKyAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogaGVhZGVyXFxuKyAgICAgICAgdHlwZTogbmVzdFxcbisgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBoZWFkZXJcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGJsb2Nrc1xcbisgICAgICAgIHR5cGU6IG5lc3RcXG4rICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogaW50Zi1ibG9ja1xcbisgICAgICAgIG11bHRpLWF0dHI6IHRydWVcXG4rICAtXFxuKyAgICBuYW1lOiBwaHktdGVzdFxcbisgICAgZG9jOiBQSFkgdGVzdCBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMuXFxuKyAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogaGVhZGVyXFxuKyAgICAgICAgdHlwZTogbmVzdFxcbisgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBoZWFkZXJcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGJsb2NrLWlkXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBsYW5lXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiB0eC1wYXR0ZXJuXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgZW51bTogcGh5LXRlc3QtcGF0dGVyblxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogcngtcGF0dGVyblxcbisgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAgIGVudW06IHBoeS10ZXN0LXBhdHRlcm5cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGJlcnQtYWN0aW9uXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgZW51bTogcGh5LXRlc3QtYWN0aW9uXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBpbmplY3QtZXJyb3ItY291bnRcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGFjdGl2ZS10ZXN0c1xcbisgICAgICAgIHR5cGU6IHUzMlxcbisgICAgICAgIGRvYzogQml0bWFzayBvZiBjdXJyZW50bHkgcnVubmluZyB0ZXN0cyAoYml0IDAgPSBCRVJUKS5cXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGNoZWNrZXItbG9ja1xcbisgICAgICAgIHR5cGU6IHU4XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBlcnJvci1jb3VudFxcbisgICAgICAgIHR5cGU6IHU2NFxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogdG90YWwtYml0cy1zZW50XFxuKyAgICAgICAgdHlwZTogdTY0XFxuIFxcbiBvcGVyYXRpb25zOlxcbiAgIGVudW0tbW9kZWw6IGRpcmVjdGlvbmFsXFxuQEAgLTI4NTksNiArMzAxNyw1NCBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgICAgICAtIHdvcnN0LWNoYW5uZWxcXG4gICAgICAgICAgICAgLSBsaW5rXFxuICAgICAgIGR1bXA6ICptc2UtZ2V0LW9wXFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IGludGYtY2Fwcy1nZXRcXG4rICAgICAgZG9jOiBHZXQgaW50ZXJmYWNlIGNhcGFiaWxpdGllcyAoZnVuY3Rpb25hbCBibG9jayBsYXlvdXQpLlxcbisgICAgICBhdHRyaWJ1dGUtc2V0OiBpbnRmLWNhcHNcXG4rICAgICAgZG86IFxcdTAwMjZpbnRmLWNhcHMtZ2V0LW9wXFxuKyAgICAgICAgcmVxdWVzdDpcXG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XFxuKyAgICAgICAgICAgIC0gaGVhZGVyXFxuKyAgICAgICAgcmVwbHk6XFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAgICAgICAtIGhlYWRlclxcbisgICAgICAgICAgICAtIGJsb2Nrc1xcbisgICAgICBkdW1wOiAqaW50Zi1jYXBzLWdldC1vcFxcbisgICAgLVxcbisgICAgICBuYW1lOiBwaHktdGVzdC1nZXRcXG4rICAgICAgZG9jOiBHZXQgUEhZIHRlc3Qgc3RhdHVzIChwYXR0ZXJucywgQkVSVCBjb3VudGVycykuXFxuKyAgICAgIGF0dHJpYnV0ZS1zZXQ6IHBoeS10ZXN0XFxuKyAgICAgIGRvOlxcbisgICAgICAgIHJlcXVlc3Q6XFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAgICAgICAtIGhlYWRlclxcbisgICAgICAgICAgICAtIGJsb2NrLWlkXFxuKyAgICAgICAgICAgIC0gbGFuZVxcbisgICAgICAgIHJlcGx5OlxcbisgICAgICAgICAgYXR0cmlidXRlczpcXG4rICAgICAgICAgICAgLSBoZWFkZXJcXG4rICAgICAgICAgICAgLSBibG9jay1pZFxcbisgICAgICAgICAgICAtIGxhbmVcXG4rICAgICAgICAgICAgLSB0eC1wYXR0ZXJuXFxuKyAgICAgICAgICAgIC0gcngtcGF0dGVyblxcbisgICAgICAgICAgICAtIGFjdGl2ZS10ZXN0c1xcbisgICAgICAgICAgICAtIGNoZWNrZXItbG9ja1xcbisgICAgICAgICAgICAtIGVycm9yLWNvdW50XFxuKyAgICAgICAgICAgIC0gdG90YWwtYml0cy1zZW50XFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IHBoeS10ZXN0LWFjdFxcbisgICAgICBkb2M6IENvbmZpZ3VyZSBQSFkgdGVzdCAoc2V0IHBhdHRlcm5zLCBzdGFydC9zdG9wIEJFUlQsIGluamVjdCBlcnJvcnMpLlxcbisgICAgICBhdHRyaWJ1dGUtc2V0OiBwaHktdGVzdFxcbisgICAgICBkbzpcXG4rICAgICAgICByZXF1ZXN0OlxcbisgICAgICAgICAgYXR0cmlidXRlczpcXG4rICAgICAgICAgICAgLSBoZWFkZXJcXG4rICAgICAgICAgICAgLSBibG9jay1pZFxcbisgICAgICAgICAgICAtIGxhbmVcXG4rICAgICAgICAgICAgLSB0eC1wYXR0ZXJuXFxuKyAgICAgICAgICAgIC0gcngtcGF0dGVyblxcbisgICAgICAgICAgICAtIGJlcnQtYWN0aW9uXFxuKyAgICAgICAgICAgIC0gaW5qZWN0LWVycm9yLWNvdW50XFxuIFxcbiBtY2FzdC1ncm91cHM6XFxuICAgbGlzdDpcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxcbmluZGV4IDEyNjgzYjVkMTI1ZTQuLmY5NzQ4ZTczOWYwM2UgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxcbkBAIC0xMTk3LDYgKzExOTcsOTIgQEAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8ge1xcbiAgKiBTZWUgXFx1MDAyNnN0cnVjdCBuZXRfZGV2aWNlIGFuZCBcXHUwMDI2c3RydWN0IG5ldF9kZXZpY2Vfb3BzIGZvciBkb2N1bWVudGF0aW9uXFxuICAqIG9mIHRoZSBnZW5lcmljIG5ldGRldiBmZWF0dXJlcyBpbnRlcmZhY2UuXFxuICAqL1xcbitcXG4rI2RlZmluZSBJTlRGX0NBUFNfTUFYX0JMT0NLU1xcdDE2XFxuKyNkZWZpbmUgSU5URl9CTE9DS19OQU1FX0xFTlxcdDMyXFxuK1xcbisjZGVmaW5lIExPT1BCQUNLX1NVUFBPUlRfTE9DQUxcXHRCSVQoMClcXG4rI2RlZmluZSBMT09QQkFDS19TVVBQT1JUX1JFTU9URVxcdEJJVCgxKVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBldGh0b29sX2ludGZfYmxvY2sgLSBTaW5nbGUgZnVuY3Rpb25hbCBibG9jayBpbiB0aGUgaW50ZXJmYWNlXFxuKyAqIEBpZDogVW5pcXVlIGJsb2NrIGlkZW50aWZpZXJcXG4rICogQGNvbXBvbmVudDogSGFyZHdhcmUgY29tcG9uZW50IChNQUMsIFBIWSwgTU9EVUxFKVxcbisgKiBAc3VibGF5ZXI6IDgwMi4zIHN1YmxheWVyIChSUywgUENTLCBGRUMsIFBNQSwgUE1ELCBvciBOT05FKVxcbisgKiBAaW5zdGFuY2U6IEluZGV4IHdoZW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHNhbWUgY29tcG9uZW50IGV4aXN0XFxuKyAqIEBuYW1lOiBEcml2ZXItY2hvc2VuIGxhYmVsXFxuKyAqIEBkZXB0aDogT3JkZXJpbmcgd2l0aGluIHNhbWUgKGNvbXBvbmVudCwgc3VibGF5ZXIpIHR1cGxlXFxuKyAqIEBsYW5lczogTnVtYmVyIG9mIGxhbmVzXFxuKyAqIEBsb29wYmFja19zdXBwb3J0ZWQ6IEJpdG1hc2sgb2Ygc3VwcG9ydGVkIGxvb3BiYWNrIGRpcmVjdGlvbnNcXG4rICogQHN1cHBvcnRlZF90eF9wYXR0ZXJuczogQml0bWFzayBvZiBwYXR0ZXJucyB0aGlzIGJsb2NrIGNhbiBnZW5lcmF0ZVxcbisgKiBAc3VwcG9ydGVkX3J4X3BhdHRlcm5zOiBCaXRtYXNrIG9mIHBhdHRlcm5zIHRoaXMgYmxvY2sgY2FuIGNoZWNrXFxuKyAqIEBlcnJvcl9pbmplY3Rfc3VwcG9ydGVkOiBCbG9jayBzdXBwb3J0cyBiaXQgZXJyb3IgaW5qZWN0aW9uXFxuKyAqIEBiZXJ0X3N1cHBvcnRlZDogQmxvY2sgc3VwcG9ydHMgQkVSVCBjb3VudGVyc1xcbisgKi9cXG4rc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayB7XFxuK1xcdHUzMiBpZDtcXG4rXFx0ZW51bSBpbnRmX2NvbXBvbmVudCBjb21wb25lbnQ7XFxuK1xcdGVudW0gaW50Zl9zdWJsYXllciBzdWJsYXllcjtcXG4rXFx0dTMyIGluc3RhbmNlO1xcbitcXHRjaGFyIG5hbWVbSU5URl9CTE9DS19OQU1FX0xFTl07XFxuK1xcdHU4IGRlcHRoO1xcbitcXHR1MzIgbGFuZXM7XFxuK1xcdHUzMiBsb29wYmFja19zdXBwb3J0ZWQ7XFxuK1xcdHUzMiBzdXBwb3J0ZWRfdHhfcGF0dGVybnM7XFxuK1xcdHUzMiBzdXBwb3J0ZWRfcnhfcGF0dGVybnM7XFxuK1xcdGJvb2wgZXJyb3JfaW5qZWN0X3N1cHBvcnRlZDtcXG4rXFx0Ym9vbCBiZXJ0X3N1cHBvcnRlZDtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHMgLSBJbnRlcmZhY2UgY2FwYWJpbGl0aWVzIChhbGwgYmxvY2tzKVxcbisgKiBAbnVtX2Jsb2NrczogTnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4gYmxvY2tzW11cXG4rICogQGJsb2NrczogQXJyYXkgb2YgZnVuY3Rpb25hbCBibG9ja3NcXG4rICovXFxuK3N0cnVjdCBldGh0b29sX2ludGZfY2FwcyB7XFxuK1xcdHUzMiBudW1fYmxvY2tzO1xcbitcXHRzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrIGJsb2Nrc1tJTlRGX0NBUFNfTUFYX0JMT0NLU107XFxuK307XFxuK1xcbisvKiBCaXRtYXNrIG9mIHdoaWNoIGV0aHRvb2xfcGh5X3Rlc3QgZmllbGRzIHdlcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgKi9cXG4rI2RlZmluZSBQSFlfVEVTVF9DTURfVFhfUEFUVEVSTlxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFBIWV9URVNUX0NNRF9SWF9QQVRURVJOXFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgUEhZX1RFU1RfQ01EX0JFUlRfQUNUSU9OXFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgUEhZX1RFU1RfQ01EX0lOSkVDVF9DT1VOVFxcdFxcdEJJVCgzKVxcbisjZGVmaW5lIFBIWV9URVNUX0NNRF9MQU5FXFx0XFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgUEhZX1RFU1RfQ01EX0JMT0NLX0lEXFx0XFx0XFx0QklUKDUpXFxuK1xcbisvKiBCaXRtYXNrIG9mIGN1cnJlbnRseSBhY3RpdmUgdGVzdHMgKHJlYWQtb25seSkgKi9cXG4rI2RlZmluZSBQSFlfVEVTVF9BQ1RJVkVfQkVSVFxcdFxcdEJJVCgwKVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBldGh0b29sX3BoeV90ZXN0IC0gUEhZIHRlc3QgY29uZmlndXJhdGlvbiBhbmQgc3RhdHVzXFxuKyAqIEBjbWQ6IEJpdG1hc2sgb2Ygd2hpY2ggZmllbGRzIGFyZSB2YWxpZCAoUEhZX1RFU1RfQ01EXyopXFxuKyAqIEBibG9ja19pZDogQmxvY2sgdG8gb3BlcmF0ZSBvbiAoZnJvbSBpbnRmLWNhcHMtZ2V0KVxcbisgKiBAbGFuZTogTGFuZSBudW1iZXIgKDAtYmFzZWQpXFxuKyAqIEB0eF9wYXR0ZXJuOiBUWCBwYXR0ZXJuIGdlbmVyYXRvciBzZXR0aW5nXFxuKyAqIEByeF9wYXR0ZXJuOiBSWCBwYXR0ZXJuIGNoZWNrZXIgc2V0dGluZ1xcbisgKiBAYmVydF9hY3Rpb246IEJFUlQgc3RhcnQvc3RvcCBjb250cm9sXFxuKyAqIEBpbmplY3RfZXJyb3JfY291bnQ6IE51bWJlciBvZiBlcnJvcnMgdG8gaW5qZWN0XFxuKyAqIEBhY3RpdmVfdGVzdHM6IEJpdG1hc2sgb2YgcnVubmluZyB0ZXN0cyAoUEhZX1RFU1RfQUNUSVZFXyopXFxuKyAqIEBjaGVja2VyX2xvY2s6IFJYIGNoZWNrZXIgbG9jayBzdGF0dXMgKHJlYWQtb25seSlcXG4rICogQGVycm9yX2NvdW50OiBCRVJUIGVycm9yIGNvdW50ZXIgKHJlYWQtb25seSlcXG4rICogQHRvdGFsX2JpdHNfc2VudDogQkVSVCB0b3RhbCBiaXRzIGNvdW50ZXIgKHJlYWQtb25seSlcXG4rICovXFxuK3N0cnVjdCBldGh0b29sX3BoeV90ZXN0IHtcXG4rXFx0dTMyIGNtZDtcXG4rXFx0dTMyIGJsb2NrX2lkO1xcbitcXHR1MzIgbGFuZTtcXG4rXFx0ZW51bSBwaHlfdGVzdF9wYXR0ZXJuIHR4X3BhdHRlcm47XFxuK1xcdGVudW0gcGh5X3Rlc3RfcGF0dGVybiByeF9wYXR0ZXJuO1xcbitcXHRlbnVtIHBoeV90ZXN0X2FjdGlvbiBiZXJ0X2FjdGlvbjtcXG4rXFx0dTMyIGluamVjdF9lcnJvcl9jb3VudDtcXG4rXFx0dTMyIGFjdGl2ZV90ZXN0cztcXG4rXFx0dTggY2hlY2tlcl9sb2NrO1xcbitcXHR1NjQgZXJyb3JfY291bnQ7XFxuK1xcdHU2NCB0b3RhbF9iaXRzX3NlbnQ7XFxuK307XFxuK1xcbiBzdHJ1Y3QgZXRodG9vbF9vcHMge1xcbiBcXHR1MzIgICAgIHN1cHBvcnRlZF9pbnB1dF94ZnJtOjg7XFxuIFxcdHUzMiAgICAgY2FwX2xpbmtfbGFuZXNfc3VwcG9ydGVkOjE7XFxuQEAgLTEzNTQsNiArMTQ0MCwxMiBAQCBzdHJ1Y3QgZXRodG9vbF9vcHMge1xcbiBcXHRpbnRcXHQoKnNldF9tbSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfbW1fY2ZnICpjZmcsXFxuIFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gXFx0dm9pZFxcdCgqZ2V0X21tX3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqc3RhdHMpO1xcbitcXHRpbnRcXHQoKmdldF9pbnRmX2NhcHMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHMgKmNhcHMpO1xcbitcXHRpbnRcXHQoKmdldF9waHlfdGVzdCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnRlc3QpO1xcbitcXHRpbnRcXHQoKnNldF9waHlfdGVzdCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnRlc3QpO1xcbiB9O1xcbiBcXG4gaW50IGV0aHRvb2xfY2hlY2tfb3BzKGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcXG5pbmRleCA4MTM0YmFmNzg2MGYzLi4zMTAyYmI3YmEzMzdmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXFxuQEAgLTg5Myw2ICs4OTMsOSBAQCBlbnVtIHtcXG4gXFx0RVRIVE9PTF9NU0dfUlNTX0NSRUFURV9BQ1QsXFxuIFxcdEVUSFRPT0xfTVNHX1JTU19ERUxFVEVfQUNULFxcbiBcXHRFVEhUT09MX01TR19NU0VfR0VULFxcbitcXHRFVEhUT09MX01TR19JTlRGX0NBUFNfR0VULFxcbitcXHRFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsXFxuK1xcdEVUSFRPT0xfTVNHX1BIWV9URVNUX0FDVCxcXG4gXFxuIFxcdF9fRVRIVE9PTF9NU0dfVVNFUl9DTlQsXFxuIFxcdEVUSFRPT0xfTVNHX1VTRVJfTUFYID0gKF9fRVRIVE9PTF9NU0dfVVNFUl9DTlQgLSAxKVxcbkBAIC05NTQsNiArOTU3LDggQEAgZW51bSB7XFxuIFxcdEVUSFRPT0xfTVNHX1JTU19DUkVBVEVfTlRGLFxcbiBcXHRFVEhUT09MX01TR19SU1NfREVMRVRFX05URixcXG4gXFx0RVRIVE9PTF9NU0dfTVNFX0dFVF9SRVBMWSxcXG4rXFx0RVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVF9SRVBMWSxcXG4rXFx0RVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VUX1JFUExZLFxcbiBcXG4gXFx0X19FVEhUT09MX01TR19LRVJORUxfQ05ULFxcbiBcXHRFVEhUT09MX01TR19LRVJORUxfTUFYID0gKF9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCAtIDEpXFxuQEAgLTk2MSw0ICs5NjYsMTAzIEBAIGVudW0ge1xcbiBcXG4gI2RlZmluZSBFVEhUT09MX01DR1JQX01PTklUT1JfTkFNRVxcdFxcXCJtb25pdG9yXFxcIlxcbiBcXG4rLyogSW50ZXJmYWNlIGNvbXBvbmVudCB0eXBlcyAqL1xcbitlbnVtIGludGZfY29tcG9uZW50IHtcXG4rXFx0SU5URl9DT01QT05FTlRfTUFDLFxcbitcXHRJTlRGX0NPTVBPTkVOVF9QSFksXFxuK1xcdElOVEZfQ09NUE9ORU5UX01PRFVMRSxcXG4rfTtcXG4rXFxuKy8qIEludGVyZmFjZSBzdWJsYXllciB0eXBlcyAqL1xcbitlbnVtIGludGZfc3VibGF5ZXIge1xcbitcXHRJTlRGX1NVQkxBWUVSX05PTkUsXFxuK1xcdElOVEZfU1VCTEFZRVJfUlMsXFxuK1xcdElOVEZfU1VCTEFZRVJfUENTLFxcbitcXHRJTlRGX1NVQkxBWUVSX0ZFQyxcXG4rXFx0SU5URl9TVUJMQVlFUl9QTUEsXFxuK1xcdElOVEZfU1VCTEFZRVJfUE1ELFxcbit9O1xcbitcXG4rLyogQXR0cmlidXRlcyBvZiBhIHNpbmdsZSBpbnRlcmZhY2UgYmxvY2sgKi9cXG4rZW51bSB7XFxuK1xcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX0lELFxcbitcXHRFVEhUT09MX0FfSU5URl9CTE9DS19DT01QT05FTlQsXFxuK1xcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX1NVQkxBWUVSLFxcbitcXHRFVEhUT09MX0FfSU5URl9CTE9DS19JTlNUQU5DRSxcXG4rXFx0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfTkFNRSxcXG4rXFx0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfREVQVEgsXFxuK1xcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX0xBTkVTLFxcbitcXHRFVEhUT09MX0FfSU5URl9CTE9DS19MT09QQkFDS19TVVBQT1JURUQsXFxuK1xcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX1RYX1BBVFRFUk5TLFxcbitcXHRFVEhUT09MX0FfSU5URl9CTE9DS19SWF9QQVRURVJOUyxcXG4rXFx0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfRVJST1JfSU5KRUNULFxcbitcXHRFVEhUT09MX0FfSU5URl9CTE9DS19CRVJULFxcbitcXG4rXFx0X19FVEhUT09MX0FfSU5URl9CTE9DS19DTlQsXFxuK1xcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX01BWCA9IChfX0VUSFRPT0xfQV9JTlRGX0JMT0NLX0NOVCAtIDEpXFxuK307XFxuK1xcbisvKiBBdHRyaWJ1dGVzIG9mIGludGYtY2Fwcy1nZXQgbWVzc2FnZSAqL1xcbitlbnVtIHtcXG4rXFx0RVRIVE9PTF9BX0lOVEZfQ0FQU19VTlNQRUMsXFxuK1xcdEVUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSLFxcbitcXHRFVEhUT09MX0FfSU5URl9DQVBTX0JMT0NLUyxcXG4rXFxuK1xcdF9fRVRIVE9PTF9BX0lOVEZfQ0FQU19DTlQsXFxuK1xcdEVUSFRPT0xfQV9JTlRGX0NBUFNfTUFYID0gKF9fRVRIVE9PTF9BX0lOVEZfQ0FQU19DTlQgLSAxKVxcbit9O1xcbitcXG4rLyogUEhZIHRlc3QgcGF0dGVybiB0eXBlcyAqL1xcbitlbnVtIHBoeV90ZXN0X3BhdHRlcm4ge1xcbitcXHRQSFlfVEVTVF9QQVRURVJOX09GRixcXG4rXFx0UEhZX1RFU1RfUEFUVEVSTl9QUkJTNyxcXG4rXFx0UEhZX1RFU1RfUEFUVEVSTl9QUkJTOSxcXG4rXFx0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMTEsXFxuK1xcdFBIWV9URVNUX1BBVFRFUk5fUFJCUzEzLFxcbitcXHRQSFlfVEVTVF9QQVRURVJOX1BSQlMxNSxcXG4rXFx0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMjMsXFxuK1xcdFBIWV9URVNUX1BBVFRFUk5fUFJCUzMxLFxcbitcXHRQSFlfVEVTVF9QQVRURVJOX1NTUFJRLFxcbitcXHRQSFlfVEVTVF9QQVRURVJOX1BSQlMxM1EsXFxuK1xcdFBIWV9URVNUX1BBVFRFUk5fUFJCUzMxUSxcXG4rXFx0UEhZX1RFU1RfUEFUVEVSTl9TUVVBUkVfTlJaLFxcbitcXHRQSFlfVEVTVF9QQVRURVJOX1NRVUFSRV9QQU00LFxcbitcXHRQSFlfVEVTVF9QQVRURVJOX1RYX0xJTkVBUklUWSxcXG4rXFx0UEhZX1RFU1RfUEFUVEVSTl9TQ1JBTUJMRURfSURMRSxcXG4rXFx0UEhZX1RFU1RfUEFUVEVSTl9LMjhfNSxcXG4rXFx0UEhZX1RFU1RfUEFUVEVSTl9LMjhfNyxcXG4rXFxuK1xcdF9fUEhZX1RFU1RfUEFUVEVSTl9DT1VOVCxcXG4rXFx0UEhZX1RFU1RfUEFUVEVSTl9NQVggPSAoX19QSFlfVEVTVF9QQVRURVJOX0NPVU5UIC0gMSlcXG4rfTtcXG4rXFxuKy8qIFBIWSB0ZXN0IEJFUlQgYWN0aW9ucyAqL1xcbitlbnVtIHBoeV90ZXN0X2FjdGlvbiB7XFxuK1xcdFBIWV9URVNUX0FDVElPTl9OT05FLFxcbitcXHRQSFlfVEVTVF9BQ1RJT05fU1RBUlQsXFxuK1xcdFBIWV9URVNUX0FDVElPTl9TVE9QLFxcbitcXG4rXFx0X19QSFlfVEVTVF9BQ1RJT05fQ09VTlQsXFxuK1xcdFBIWV9URVNUX0FDVElPTl9NQVggPSAoX19QSFlfVEVTVF9BQ1RJT05fQ09VTlQgLSAxKVxcbit9O1xcbitcXG4rLyogQXR0cmlidXRlcyBvZiBwaHktdGVzdC1nZXQgLyBwaHktdGVzdC1hY3QgbWVzc2FnZXMgKi9cXG4rZW51bSB7XFxuK1xcdEVUSFRPT0xfQV9QSFlfVEVTVF9VTlNQRUMsXFxuK1xcdEVUSFRPT0xfQV9QSFlfVEVTVF9IRUFERVIsXFxuK1xcdEVUSFRPT0xfQV9QSFlfVEVTVF9CTE9DS19JRCxcXG4rXFx0RVRIVE9PTF9BX1BIWV9URVNUX0xBTkUsXFxuK1xcdEVUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOLFxcbitcXHRFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTixcXG4rXFx0RVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OLFxcbitcXHRFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5ULFxcbitcXHRFVEhUT09MX0FfUEhZX1RFU1RfQUNUSVZFX1RFU1RTLFxcbitcXHRFVEhUT09MX0FfUEhZX1RFU1RfQ0hFQ0tFUl9MT0NLLFxcbitcXHRFVEhUT09MX0FfUEhZX1RFU1RfRVJST1JfQ09VTlQsXFxuK1xcdEVUSFRPT0xfQV9QSFlfVEVTVF9UT1RBTF9CSVRTX1NFTlQsXFxuK1xcbitcXHRfX0VUSFRPT0xfQV9QSFlfVEVTVF9DTlQsXFxuK1xcdEVUSFRPT0xfQV9QSFlfVEVTVF9NQVggPSAoX19FVEhUT09MX0FfUEhZX1RFU1RfQ05UIC0gMSlcXG4rfTtcXG4rXFxuICNlbmRpZiAvKiBfVUFQSV9MSU5VWF9FVEhUT09MX05FVExJTktfR0VORVJBVEVEX0ggKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvTWFrZWZpbGUgYi9uZXQvZXRodG9vbC9NYWtlZmlsZVxcbmluZGV4IDYyOWMxMDkxNjY3MGUuLjdkZDJjNTYyNGNlZGYgMTAwNjQ0XFxuLS0tIGEvbmV0L2V0aHRvb2wvTWFrZWZpbGVcXG4rKysgYi9uZXQvZXRodG9vbC9NYWtlZmlsZVxcbkBAIC05LDQgKzksNCBAQCBldGh0b29sX25sLXlcXHQ6PSBuZXRsaW5rLm8gYml0c2V0Lm8gc3Ryc2V0Lm8gbGlua2luZm8ubyBsaW5rbW9kZXMubyByc3MubyBcXFxcXFxuIFxcdFxcdCAgIGNoYW5uZWxzLm8gY29hbGVzY2UubyBwYXVzZS5vIGVlZS5vIHRzaW5mby5vIGNhYmxldGVzdC5vIFxcXFxcXG4gXFx0XFx0ICAgdHVubmVscy5vIGZlYy5vIGVlcHJvbS5vIHN0YXRzLm8gcGhjX3ZjbG9ja3MubyBtbS5vIFxcXFxcXG4gXFx0XFx0ICAgbW9kdWxlLm8gY21pc19md191cGRhdGUubyBjbWlzX2NkYi5vIHBzZS1wZC5vIHBsY2EubyBcXFxcXFxuLVxcdFxcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm9cXG4rXFx0XFx0ICAgcGh5Lm8gdHNjb25maWcubyBtc2UubyBpbnRmX2NhcHMubyBwaHl0ZXN0Lm9cXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMgYi9uZXQvZXRodG9vbC9pbnRmX2NhcHMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTQ1Y2NjNGI4OGM5Zlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9uZXQvZXRodG9vbC9pbnRmX2NhcHMuY1xcbkBAIC0wLDAgKzEsMTMwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rXFxuKyNpbmNsdWRlIFxcXCJuZXRsaW5rLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJjb21tb24uaFxcXCJcXG4rXFxuK3N0cnVjdCBpbnRmX2NhcHNfcmVxX2luZm8ge1xcbitcXHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTtcXG4rfTtcXG4rXFxuK3N0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSB7XFxuK1xcdHN0cnVjdCBldGhubF9yZXBseV9kYXRhIGJhc2U7XFxuK1xcdHN0cnVjdCBldGh0b29sX2ludGZfY2FwcyBjYXBzO1xcbit9O1xcbitcXG4rI2RlZmluZSBJTlRGX0NBUFNfUkVQREFUQShfX3JlcGx5X2Jhc2UpIFxcXFxcXG4rXFx0Y29udGFpbmVyX29mKF9fcmVwbHlfYmFzZSwgc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhLCBiYXNlKVxcbitcXG4rY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3lbRVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIgKyAxXSA9IHtcXG4rXFx0W0VUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSXSA9XFxuK1xcdFxcdE5MQV9QT0xJQ1lfTkVTVEVEKGV0aG5sX2hlYWRlcl9wb2xpY3kpLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBpbnRmX2NhcHNfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxcbitcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGEgKmRhdGEgPSBJTlRGX0NBUFNfUkVQREFUQShyZXBseV9iYXNlKTtcXG4rXFx0aW50IGxlbiA9IDA7XFxuK1xcdHUzMiBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRhdGEtXFx1MDAzZWNhcHMubnVtX2Jsb2NrczsgaSsrKSB7XFxuK1xcdFxcdGxlbiArPSBubGFfdG90YWxfc2l6ZSgwKTtcXHRcXHQvKiBuZXN0ZWQgYmxvY2sgKi9cXG4rXFx0XFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcXHQvKiBpZCAqL1xcbitcXHRcXHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xcdC8qIGNvbXBvbmVudCAqL1xcbitcXHRcXHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xcdC8qIHN1YmxheWVyICovXFxuK1xcdFxcdGxlbiArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XFx0LyogaW5zdGFuY2UgKi9cXG4rXFx0XFx0bGVuICs9IG5sYV90b3RhbF9zaXplKElOVEZfQkxPQ0tfTkFNRV9MRU4pOyAvKiBuYW1lICovXFxuK1xcdFxcdGxlbiArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKTtcXHQvKiBkZXB0aCAqL1xcbitcXHRcXHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xcdC8qIGxhbmVzICovXFxuK1xcdFxcdGxlbiArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XFx0LyogbG9vcGJhY2tfc3VwcG9ydGVkICovXFxuK1xcdFxcdGxlbiArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XFx0LyogdHhfcGF0dGVybnMgKi9cXG4rXFx0XFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcXHQvKiByeF9wYXR0ZXJucyAqL1xcbitcXHRcXHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoMCk7XFx0XFx0LyogZXJyb3JfaW5qZWN0IChmbGFnKSAqL1xcbitcXHRcXHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoMCk7XFx0XFx0LyogYmVydCAoZmxhZykgKi9cXG4rXFx0fVxcbitcXG4rXFx0Lyogb3V0ZXIgQkxPQ0tTIG5lc3QgKi9cXG4rXFx0bGVuICs9IG5sYV90b3RhbF9zaXplKDApO1xcbitcXG4rXFx0cmV0dXJuIGxlbjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UsXFxuK1xcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGEgKmRhdGEgPSBJTlRGX0NBUFNfUkVQREFUQShyZXBseV9iYXNlKTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJlcGx5X2Jhc2UtXFx1MDAzZWRldjtcXG4rXFxuK1xcdGlmICghZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X2ludGZfY2FwcylcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0dXJuIGRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZWdldF9pbnRmX2NhcHMoZGV2LCBcXHUwMDI2ZGF0YS1cXHUwMDNlY2Fwcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaW50Zl9jYXBzX2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhICpkYXRhID0gSU5URl9DQVBTX1JFUERBVEEocmVwbHlfYmFzZSk7XFxuK1xcdHN0cnVjdCBubGF0dHIgKmJsb2Nrc19hdHRyO1xcbitcXHR1MzIgaTtcXG4rXFxuK1xcdGJsb2Nrc19hdHRyID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBFVEhUT09MX0FfSU5URl9DQVBTX0JMT0NLUyk7XFxuK1xcdGlmICghYmxvY2tzX2F0dHIpXFxuK1xcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGF0YS1cXHUwMDNlY2Fwcy5udW1fYmxvY2tzOyBpKyspIHtcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayAqYiA9IFxcdTAwMjZkYXRhLVxcdTAwM2VjYXBzLmJsb2Nrc1tpXTtcXG4rXFx0XFx0c3RydWN0IG5sYXR0ciAqYmxvY2tfYXR0cjtcXG4rXFxuK1xcdFxcdGJsb2NrX2F0dHIgPSBubGFfbmVzdF9zdGFydChza2IsIDApO1xcbitcXHRcXHRpZiAoIWJsb2NrX2F0dHIpXFxuK1xcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbitcXG4rXFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfSUQsIGItXFx1MDAzZWlkKSB8fFxcbitcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19DT01QT05FTlQsXFxuK1xcdFxcdFxcdFxcdGItXFx1MDAzZWNvbXBvbmVudCkgfHxcXG4rXFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfU1VCTEFZRVIsXFxuK1xcdFxcdFxcdFxcdGItXFx1MDAzZXN1YmxheWVyKSB8fFxcbitcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19JTlNUQU5DRSxcXG4rXFx0XFx0XFx0XFx0Yi1cXHUwMDNlaW5zdGFuY2UpIHx8XFxuK1xcdFxcdCAgICBubGFfcHV0X3N0cmluZyhza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX05BTUUsIGItXFx1MDAzZW5hbWUpIHx8XFxuK1xcdFxcdCAgICBubGFfcHV0X3U4KHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfREVQVEgsIGItXFx1MDAzZWRlcHRoKSB8fFxcbitcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19MQU5FUywgYi1cXHUwMDNlbGFuZXMpIHx8XFxuK1xcdFxcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0xPT1BCQUNLX1NVUFBPUlRFRCxcXG4rXFx0XFx0XFx0XFx0Yi1cXHUwMDNlbG9vcGJhY2tfc3VwcG9ydGVkKSB8fFxcbitcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19UWF9QQVRURVJOUyxcXG4rXFx0XFx0XFx0XFx0Yi1cXHUwMDNlc3VwcG9ydGVkX3R4X3BhdHRlcm5zKSB8fFxcbitcXHRcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19SWF9QQVRURVJOUyxcXG4rXFx0XFx0XFx0XFx0Yi1cXHUwMDNlc3VwcG9ydGVkX3J4X3BhdHRlcm5zKSlcXG4rXFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuK1xcdFxcdGlmIChiLVxcdTAwM2VlcnJvcl9pbmplY3Rfc3VwcG9ydGVkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBubGFfcHV0X2ZsYWcoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19FUlJPUl9JTkpFQ1QpKVxcbitcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4rXFx0XFx0aWYgKGItXFx1MDAzZWJlcnRfc3VwcG9ydGVkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBubGFfcHV0X2ZsYWcoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19CRVJUKSlcXG4rXFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuK1xcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbitcXG4rXFx0XFx0bmxhX25lc3RfZW5kKHNrYiwgYmxvY2tfYXR0cik7XFxuK1xcdH1cXG4rXFxuK1xcdG5sYV9uZXN0X2VuZChza2IsIGJsb2Nrc19hdHRyKTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitubGFfcHV0X2ZhaWx1cmU6XFxuK1xcdG5sYV9uZXN0X2NhbmNlbChza2IsIGJsb2Nrc19hdHRyKTtcXG4rXFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcyA9IHtcXG4rXFx0LnJlcXVlc3RfY21kXFx0PSBFVEhUT09MX01TR19JTlRGX0NBUFNfR0VULFxcbitcXHQucmVwbHlfY21kXFx0PSBFVEhUT09MX01TR19JTlRGX0NBUFNfR0VUX1JFUExZLFxcbitcXHQuaGRyX2F0dHJcXHQ9IEVUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSLFxcbitcXHQucmVxX2luZm9fc2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCBpbnRmX2NhcHNfcmVxX2luZm8pLFxcbitcXHQucmVwbHlfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSksXFxuK1xcdC5wcmVwYXJlX2RhdGFcXHQ9IGludGZfY2Fwc19wcmVwYXJlX2RhdGEsXFxuK1xcdC5yZXBseV9zaXplXFx0PSBpbnRmX2NhcHNfcmVwbHlfc2l6ZSxcXG4rXFx0LmZpbGxfcmVwbHlcXHQ9IGludGZfY2Fwc19maWxsX3JlcGx5LFxcbit9O1xcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmMgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmNcXG5pbmRleCAxYWYzOTViNTQzMzBlLi41NmU1YzgxMTQ1NGJiIDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuY1xcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuY1xcbkBAIC00MzEsNiArNDMxLDggQEAgZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tfX0VUSFRPT0xfTVNHX1VTRVJfQ05UXSA9IHtcXG4gXFx0W0VUSFRPT0xfTVNHX1RTQ09ORklHX1NFVF1cXHQ9IFxcdTAwMjZldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wcyxcXG4gXFx0W0VUSFRPT0xfTVNHX1BIWV9HRVRdXFx0XFx0PSBcXHUwMDI2ZXRobmxfcGh5X3JlcXVlc3Rfb3BzLFxcbiBcXHRbRVRIVE9PTF9NU0dfTVNFX0dFVF1cXHRcXHQ9IFxcdTAwMjZldGhubF9tc2VfcmVxdWVzdF9vcHMsXFxuK1xcdFtFVEhUT09MX01TR19JTlRGX0NBUFNfR0VUXVxcdD0gXFx1MDAyNmV0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcyxcXG4rXFx0W0VUSFRPT0xfTVNHX1BIWV9URVNUX0dFVF1cXHQ9IFxcdTAwMjZldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcyxcXG4gfTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmV0aG5sX2R1bXBfY29udGV4dChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuQEAgLTE1NzIsNiArMTU3NCwyOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfb3BzIGV0aHRvb2xfZ2VubF9vcHNbXSA9IHtcXG4gXFx0XFx0LnBvbGljeSA9IGV0aG5sX21zZV9nZXRfcG9saWN5LFxcbiBcXHRcXHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfbXNlX2dldF9wb2xpY3kpIC0gMSxcXG4gXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQuY21kXFx0PSBFVEhUT09MX01TR19JTlRGX0NBUFNfR0VULFxcbitcXHRcXHQuZG9pdFxcdD0gZXRobmxfZGVmYXVsdF9kb2l0LFxcbitcXHRcXHQuc3RhcnRcXHQ9IGV0aG5sX2RlZmF1bHRfc3RhcnQsXFxuK1xcdFxcdC5kdW1waXRcXHQ9IGV0aG5sX2RlZmF1bHRfZHVtcGl0LFxcbitcXHRcXHQuZG9uZVxcdD0gZXRobmxfZGVmYXVsdF9kb25lLFxcbitcXHRcXHQucG9saWN5ID0gZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3ksXFxuK1xcdFxcdC5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeSkgLSAxLFxcbitcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5jbWRcXHQ9IEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVCxcXG4rXFx0XFx0LmRvaXRcXHQ9IGV0aG5sX2RlZmF1bHRfZG9pdCxcXG4rXFx0XFx0LnBvbGljeSA9IGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3ksXFxuK1xcdFxcdC5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9waHlfdGVzdF9nZXRfcG9saWN5KSAtIDEsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LmNtZFxcdD0gRVRIVE9PTF9NU0dfUEhZX1RFU1RfQUNULFxcbitcXHRcXHQuZmxhZ3NcXHQ9IEdFTkxfVU5TX0FETUlOX1BFUk0sXFxuK1xcdFxcdC5kb2l0XFx0PSBldGhubF9hY3RfcGh5X3Rlc3QsXFxuK1xcdFxcdC5wb2xpY3kgPSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5LFxcbitcXHRcXHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeSkgLSAxLFxcbitcXHR9LFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBldGh0b29sX25sX21jZ3Jwc1tdID0ge1xcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmggYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcXG5pbmRleCAzZTk2OWEwNzBmOWZlLi4xY2FiYTYwZDgzYzQzIDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaFxcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxcbkBAIC00NzQsNiArNDc0LDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tbV9yZXF1ZXN0X29wcztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfcmVxdWVzdF9vcHM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfbXNlX3JlcXVlc3Rfb3BzO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcztcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcztcXG4gXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5W0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgKyAxXTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lfc3RhdHNbRVRIVE9PTF9BX0hFQURFUl9GTEFHUyArIDFdO1xcbkBAIC01MzAsNiArNTMyLDExIEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfZ2V0X3BvbGljeVtFVEhUT09MX0FfUEhZX0hFQURFUiArIDFdO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfdHNjb25maWdfZ2V0X3BvbGljeVtFVEhUT09MX0FfVFNDT05GSUdfSEVBREVSICsgMV07XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19zZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19NQVggKyAxXTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX21zZV9nZXRfcG9saWN5W0VUSFRPT0xfQV9NU0VfSEVBREVSICsgMV07XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeVtFVEhUT09MX0FfSU5URl9DQVBTX0hFQURFUiArIDFdO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X3Rlc3RfZ2V0X3BvbGljeVtFVEhUT09MX0FfUEhZX1RFU1RfTEFORSArIDFdO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeVtFVEhUT09MX0FfUEhZX1RFU1RfTUFYICsgMV07XFxuK1xcbitpbnQgZXRobmxfYWN0X3BoeV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbiBcXG4gaW50IGV0aG5sX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4gaW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9waHl0ZXN0LmMgYi9uZXQvZXRodG9vbC9waHl0ZXN0LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmRlZGNkMDM2YjdjMmVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvbmV0L2V0aHRvb2wvcGh5dGVzdC5jXFxuQEAgLTAsMCArMSwxNzEgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbitcXG4rI2luY2x1ZGUgXFxcIm5ldGxpbmsuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImNvbW1vbi5oXFxcIlxcbitcXG4rc3RydWN0IHBoeV90ZXN0X3JlcV9pbmZvIHtcXG4rXFx0c3RydWN0IGV0aG5sX3JlcV9pbmZvIGJhc2U7XFxuK307XFxuK1xcbitzdHJ1Y3QgcGh5X3Rlc3RfcmVwbHlfZGF0YSB7XFxuK1xcdHN0cnVjdCBldGhubF9yZXBseV9kYXRhIGJhc2U7XFxuK1xcdHN0cnVjdCBldGh0b29sX3BoeV90ZXN0IHRlc3Q7XFxuK307XFxuK1xcbisjZGVmaW5lIFBIWV9URVNUX1JFUERBVEEoX19yZXBseV9iYXNlKSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhLCBiYXNlKVxcbitcXG4rLyogUEhZX1RFU1RfR0VUICovXFxuK1xcbitjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FICsgMV0gPSB7XFxuK1xcdFtFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXVxcdD0gTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksXFxuK1xcdFtFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbitcXHRbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBwaHlfdGVzdF9yZXBseV9zaXplKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSlcXG4re1xcbitcXHRyZXR1cm4gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcXHQvKiBibG9ja19pZCAqL1xcbitcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcXHQvKiBsYW5lICovXFxuK1xcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xcdC8qIHR4X3BhdHRlcm4gKi9cXG4rXFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXFx0LyogcnhfcGF0dGVybiAqL1xcbitcXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcXHQvKiBhY3RpdmVfdGVzdHMgKi9cXG4rXFx0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1OCkpICArXFx0LyogY2hlY2tlcl9sb2NrICovXFxuK1xcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTY0KSkgK1xcdC8qIGVycm9yX2NvdW50ICovXFxuK1xcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTY0KSk7XFx0LyogdG90YWxfYml0c19zZW50ICovXFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSxcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuK3tcXG4rXFx0c3RydWN0IHBoeV90ZXN0X3JlcGx5X2RhdGEgKmRhdGEgPSBQSFlfVEVTVF9SRVBEQVRBKHJlcGx5X2Jhc2UpO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmVwbHlfYmFzZS1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVxcdTAwM2VhdHRycztcXG4rXFxuK1xcdGlmICghZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X3BoeV90ZXN0KVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRtZW1zZXQoXFx1MDAyNmRhdGEtXFx1MDAzZXRlc3QsIDAsIHNpemVvZihkYXRhLVxcdTAwM2V0ZXN0KSk7XFxuK1xcbitcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSkge1xcbitcXHRcXHRkYXRhLVxcdTAwM2V0ZXN0LmJsb2NrX2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSk7XFxuK1xcdFxcdGRhdGEtXFx1MDAzZXRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CTE9DS19JRDtcXG4rXFx0fVxcbitcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKSB7XFxuK1xcdFxcdGRhdGEtXFx1MDAzZXRlc3QubGFuZSA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXSk7XFxuK1xcdFxcdGRhdGEtXFx1MDAzZXRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9MQU5FO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X3BoeV90ZXN0KGRldiwgXFx1MDAyNmRhdGEtXFx1MDAzZXRlc3QpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBoeV90ZXN0X2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXFxuK1xcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcGh5X3Rlc3RfcmVwbHlfZGF0YSAqZGF0YSA9IFBIWV9URVNUX1JFUERBVEEocmVwbHlfYmFzZSk7XFxuK1xcdGNvbnN0IHN0cnVjdCBldGh0b29sX3BoeV90ZXN0ICp0ID0gXFx1MDAyNmRhdGEtXFx1MDAzZXRlc3Q7XFxuK1xcbitcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSUQsIHQtXFx1MDAzZWJsb2NrX2lkKSB8fFxcbitcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfTEFORSwgdC1cXHUwMDNlbGFuZSkgfHxcXG4rXFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk4sIHQtXFx1MDAzZXR4X3BhdHRlcm4pIHx8XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOLCB0LVxcdTAwM2VyeF9wYXR0ZXJuKSB8fFxcbitcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfQUNUSVZFX1RFU1RTLFxcbitcXHRcXHRcXHR0LVxcdTAwM2VhY3RpdmVfdGVzdHMpIHx8XFxuK1xcdCAgICBubGFfcHV0X3U4KHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0NIRUNLRVJfTE9DSywgdC1cXHUwMDNlY2hlY2tlcl9sb2NrKSB8fFxcbitcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfRVJST1JfQ09VTlQsXFxuK1xcdFxcdFxcdCAgICAgIHQtXFx1MDAzZWVycm9yX2NvdW50LCBFVEhUT09MX0FfUEhZX1RFU1RfVU5TUEVDKSB8fFxcbitcXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfVE9UQUxfQklUU19TRU5ULFxcbitcXHRcXHRcXHQgICAgICB0LVxcdTAwM2V0b3RhbF9iaXRzX3NlbnQsIEVUSFRPT0xfQV9QSFlfVEVTVF9VTlNQRUMpKVxcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcyA9IHtcXG4rXFx0LnJlcXVlc3RfY21kXFx0PSBFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsXFxuK1xcdC5yZXBseV9jbWRcXHQ9IEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVF9SRVBMWSxcXG4rXFx0Lmhkcl9hdHRyXFx0PSBFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSLFxcbitcXHQucmVxX2luZm9fc2l6ZVxcdD0gc2l6ZW9mKHN0cnVjdCBwaHlfdGVzdF9yZXFfaW5mbyksXFxuK1xcdC5yZXBseV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHBoeV90ZXN0X3JlcGx5X2RhdGEpLFxcbitcXHQucHJlcGFyZV9kYXRhXFx0PSBwaHlfdGVzdF9wcmVwYXJlX2RhdGEsXFxuK1xcdC5yZXBseV9zaXplXFx0PSBwaHlfdGVzdF9yZXBseV9zaXplLFxcbitcXHQuZmlsbF9yZXBseVxcdD0gcGh5X3Rlc3RfZmlsbF9yZXBseSxcXG4rfTtcXG4rXFxuKy8qIFBIWV9URVNUX0FDVCAqL1xcbitcXG4rY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeVtFVEhUT09MX0FfUEhZX1RFU1RfTUFYICsgMV0gPSB7XFxuK1xcdFtFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXVxcdFxcdD0gTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksXFxuK1xcdFtFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdXFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbitcXHRbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdXFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbitcXHRbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dXFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbitcXHRbRVRIVE9PTF9BX1BIWV9URVNUX1JYX1BBVFRFUk5dXFx0XFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbitcXHRbRVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OXVxcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcXG4rXFx0W0VUSFRPT0xfQV9QSFlfVEVTVF9JTkpFQ1RfRVJST1JfQ09VTlRdXFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxcbit9O1xcbitcXG4raW50IGV0aG5sX2FjdF9waHlfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBldGhubF9yZXFfaW5mbyByZXFfaW5mbyA9IHt9O1xcbitcXHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVxcdTAwM2VhdHRycztcXG4rXFx0c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgdGVzdCA9IHt9O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoXFx1MDAyNnJlcV9pbmZvLFxcbitcXHRcXHRcXHRcXHRcXHQgdGJbRVRIVE9PTF9BX1BIWV9URVNUX0hFQURFUl0sXFxuK1xcdFxcdFxcdFxcdFxcdCBnZW5sX2luZm9fbmV0KGluZm8pLCBpbmZvLVxcdTAwM2VleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCB0cnVlKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRkZXYgPSByZXFfaW5mby5kZXY7XFxuK1xcbitcXHRpZiAoIWRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZXNldF9waHlfdGVzdCkge1xcbitcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0Z290byBvdXRfZGV2O1xcbitcXHR9XFxuK1xcbitcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSkge1xcbitcXHRcXHR0ZXN0LmJsb2NrX2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSk7XFxuK1xcdFxcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CTE9DS19JRDtcXG4rXFx0fVxcbitcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKSB7XFxuK1xcdFxcdHRlc3QubGFuZSA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXSk7XFxuK1xcdFxcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9MQU5FO1xcbitcXHR9XFxuK1xcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfVFhfUEFUVEVSTl0pIHtcXG4rXFx0XFx0dGVzdC50eF9wYXR0ZXJuID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dKTtcXG4rXFx0XFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX1RYX1BBVFRFUk47XFxuK1xcdH1cXG4rXFx0aWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOXSkge1xcbitcXHRcXHR0ZXN0LnJ4X3BhdHRlcm4gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl0pO1xcbitcXHRcXHR0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfUlhfUEFUVEVSTjtcXG4rXFx0fVxcbitcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OXSkge1xcbitcXHRcXHR0ZXN0LmJlcnRfYWN0aW9uID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OXSk7XFxuK1xcdFxcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CRVJUX0FDVElPTjtcXG4rXFx0fVxcbitcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0lOSkVDVF9FUlJPUl9DT1VOVF0pIHtcXG4rXFx0XFx0dGVzdC5pbmplY3RfZXJyb3JfY291bnQgPVxcbitcXHRcXHRcXHRubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXSk7XFxuK1xcdFxcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9JTkpFQ1RfQ09VTlQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRyZXQgPSBldGhubF9vcHNfYmVnaW4oZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gb3V0X3J0bmw7XFxuK1xcbitcXHRyZXQgPSBkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VzZXRfcGh5X3Rlc3QoZGV2LCBcXHUwMDI2dGVzdCk7XFxuK1xcdGV0aG5sX29wc19jb21wbGV0ZShkZXYpO1xcbitcXG4rb3V0X3J0bmw6XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK291dF9kZXY6XFxuK1xcdGV0aG5sX3BhcnNlX2hlYWRlcl9kZXZfcHV0KFxcdTAwMjZyZXFfaW5mbyk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MTUuNzMwOTEzNTA3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQ1NDE4NjgzMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVRIVE9PTF9ORVRMSU5LXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXRobmxfYWN0X3BoeV90ZXN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBuZXcgZXRodG9vbCBuZXRsaW5rIG1lc3NhZ2VzIChFVEhUT09MX01TR19JTlRGX0NBUFNfR0VULCBFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsIEVUSFRPT0xfTVNHX1BIWV9URVNUX0FDVCkgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgbmV0bGluayBhdHRyaWJ1dGUgcG9saWNpZXMuIEV2ZW4gdGhvdWdoIG5vIGRyaXZlcnMgY3VycmVudGx5IGltcGxlbWVudCB0aGUgdW5kZXJseWluZyBldGh0b29sIG9wZXJhdGlvbnMsIHRoZSBuZXRsaW5rIG1lc3NhZ2UgcGFyc2luZywgcG9saWN5IHZhbGlkYXRpb24sIGFuZCBpbml0aWFsIGhhbmRsZXIgZnVuY3Rpb25zIChsaWtlIGV0aG5sX2FjdF9waHlfdGVzdCkgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXItc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ1MDZkZDEwODYzOGU1ZDc3ZDIzZjMwZWZkZjJjZjdmYTg2ZGVlOWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwNTowNjoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5pbmRleCA1ZGQ0ZDFiNWQ5NGJiLi4zNjFlYjNjNjY1NzcwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuQEAgLTIxMCw2ICsyMTAsNTUgQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogZGlzY2FyZFxuICAgICAgICAgdmFsdWU6IDMxXG4rICAtXG4rICAgIG5hbWU6IGludGYtY29tcG9uZW50XG4rICAgIHR5cGU6IGVudW1cbisgICAgZG9jOiBUeXBlIG9mIGhhcmR3YXJlIGNvbXBvbmVudCBpbiB0aGUgaW50ZXJmYWNlLlxuKyAgICBlbnRyaWVzOlxuKyAgICAgIC0gbWFjXG4rICAgICAgLSBwaHlcbisgICAgICAtIG1vZHVsZVxuKyAgLVxuKyAgICBuYW1lOiBpbnRmLXN1YmxheWVyXG4rICAgIHR5cGU6IGVudW1cbisgICAgZG9jOiA4MDIuMyBzdWJsYXllciB3aXRoaW4gYSBjb21wb25lbnQuXG4rICAgIGVudHJpZXM6XG4rICAgICAgLSBub25lXG4rICAgICAgLSByc1xuKyAgICAgIC0gcGNzXG4rICAgICAgLSBmZWNcbisgICAgICAtIHBtYVxuKyAgICAgIC0gcG1kXG4rICAtXG4rICAgIG5hbWU6IHBoeS10ZXN0LXBhdHRlcm5cbisgICAgdHlwZTogZW51bVxuKyAgICBkb2M6IFBIWSB0ZXN0IHBhdHRlcm4gdHlwZXMgZm9yIFBSQlMgZ2VuZXJhdGlvbi9jaGVja2luZy5cbisgICAgZW50cmllczpcbisgICAgICAtIG9mZlxuKyAgICAgIC0gcHJiczdcbisgICAgICAtIHByYnM5XG4rICAgICAgLSBwcmJzMTFcbisgICAgICAtIHByYnMxM1xuKyAgICAgIC0gcHJiczE1XG4rICAgICAgLSBwcmJzMjNcbisgICAgICAtIHByYnMzMVxuKyAgICAgIC0gc3NwcnFcbisgICAgICAtIHByYnMxM3FcbisgICAgICAtIHByYnMzMXFcbisgICAgICAtIHNxdWFyZS1ucnpcbisgICAgICAtIHNxdWFyZS1wYW00XG4rICAgICAgLSB0eC1saW5lYXJpdHlcbisgICAgICAtIHNjcmFtYmxlZC1pZGxlXG4rICAgICAgLSBrMjgtNVxuKyAgICAgIC0gazI4LTdcbisgIC1cbisgICAgbmFtZTogcGh5LXRlc3QtYWN0aW9uXG4rICAgIHR5cGU6IGVudW1cbisgICAgZG9jOiBCRVJUIGNvbnRyb2wgYWN0aW9ucy5cbisgICAgZW50cmllczpcbisgICAgICAtIG5vbmVcbisgICAgICAtIHN0YXJ0XG4rICAgICAgLSBzdG9wXG4gXG4gYXR0cmlidXRlLXNldHM6XG4gICAtXG5AQCAtMTkwNSw2ICsxOTU0LDExNSBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIG5hbWU6IGxpbmtcbiAgICAgICAgIHR5cGU6IG5lc3RcbiAgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBtc2Utc25hcHNob3RcbisgIC1cbisgICAgbmFtZTogaW50Zi1ibG9ja1xuKyAgICBkb2M6IEEgc2luZ2xlIGZ1bmN0aW9uYWwgYmxvY2sgaW4gdGhlIGludGVyZmFjZS5cbisgICAgYXR0cmlidXRlczpcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBpZFxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogY29tcG9uZW50XG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGVudW06IGludGYtY29tcG9uZW50XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogc3VibGF5ZXJcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZW51bTogaW50Zi1zdWJsYXllclxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGluc3RhbmNlXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGRvYzogfFxuKyAgICAgICAgICBJZGVudGlmaWVzIHRoZSBoYXJkd2FyZSBlbnRpdHkgd2hlbiBtdWx0aXBsZSBpbnN0YW5jZXMgb2ZcbisgICAgICAgICAgdGhlIHNhbWUgY29tcG9uZW50IGV4aXN0IGluIHRoZSBpbnRlcmZhY2UuIFRoZSBkcml2ZXJcbisgICAgICAgICAgYXNzaWducyBpbnN0YW5jZSBudW1iZXJzIHNlcXVlbnRpYWxseSBiYXNlZCBvbiBwb3NpdGlvbiBpblxuKyAgICAgICAgICB0aGUgcGh5c2ljYWwgcGF0aC4gRGVmYXVsdHMgdG8gMCB3aGVuIG9ubHkgb25lIGluc3RhbmNlIG9mXG4rICAgICAgICAgIGEgZ2l2ZW4gY29tcG9uZW50IGV4aXN0cy5cbisgICAgICAgICAgRm9yIFBIWTogaW5zdGFuY2UgMCBpcyB0aGUgaW50ZXJuYWwvaG9zdC1zaWRlIFBIWSxcbisgICAgICAgICAgaW5zdGFuY2UgMSBpcyBhbiBleHRlcm5hbCBQSFkgZnVydGhlciBhbG9uZyB0aGUgcGF0aFxuKyAgICAgICAgICB0b3dhcmQgdGhlIGxpbmUgc2lkZS5cbisgICAgICAgICAgRm9yIE1BQzogaW5zdGFuY2UgMCBpcyB0aGUgaG9zdC1mYWNpbmcgTUFDLCBpbnN0YW5jZSAxIGlzXG4rICAgICAgICAgIGEgc2Vjb25kYXJ5IE1BQyBmdXJ0aGVyIGFsb25nIHRoZSBkYXRhIHBhdGggKGUuZy4sIGJlaGluZFxuKyAgICAgICAgICBhbiBlbWJlZGRlZCBzd2l0Y2gpLlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IG5hbWVcbisgICAgICAgIHR5cGU6IHN0cmluZ1xuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGRlcHRoXG4rICAgICAgICB0eXBlOiB1OFxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGxhbmVzXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBsb29wYmFjay1zdXBwb3J0ZWRcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHN1cHBvcnRlZC10eC1wYXR0ZXJuc1xuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogc3VwcG9ydGVkLXJ4LXBhdHRlcm5zXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBlcnJvci1pbmplY3Qtc3VwcG9ydGVkXG4rICAgICAgICB0eXBlOiBmbGFnXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogYmVydC1zdXBwb3J0ZWRcbisgICAgICAgIHR5cGU6IGZsYWdcbisgIC1cbisgICAgbmFtZTogaW50Zi1jYXBzXG4rICAgIGRvYzogSW50ZXJmYWNlIGNhcGFiaWxpdGllcyBtZXNzYWdlLlxuKyAgICBhdHRyaWJ1dGVzOlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGhlYWRlclxuKyAgICAgICAgdHlwZTogbmVzdFxuKyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGhlYWRlclxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGJsb2Nrc1xuKyAgICAgICAgdHlwZTogbmVzdFxuKyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGludGYtYmxvY2tcbisgICAgICAgIG11bHRpLWF0dHI6IHRydWVcbisgIC1cbisgICAgbmFtZTogcGh5LXRlc3RcbisgICAgZG9jOiBQSFkgdGVzdCBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMuXG4rICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogaGVhZGVyXG4rICAgICAgICB0eXBlOiBuZXN0XG4rICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogaGVhZGVyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogYmxvY2staWRcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGxhbmVcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHR4LXBhdHRlcm5cbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZW51bTogcGh5LXRlc3QtcGF0dGVyblxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHJ4LXBhdHRlcm5cbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZW51bTogcGh5LXRlc3QtcGF0dGVyblxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGJlcnQtYWN0aW9uXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGVudW06IHBoeS10ZXN0LWFjdGlvblxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGluamVjdC1lcnJvci1jb3VudFxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogYWN0aXZlLXRlc3RzXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGRvYzogQml0bWFzayBvZiBjdXJyZW50bHkgcnVubmluZyB0ZXN0cyAoYml0IDAgPSBCRVJUKS5cbisgICAgICAtXG4rICAgICAgICBuYW1lOiBjaGVja2VyLWxvY2tcbisgICAgICAgIHR5cGU6IHU4XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogZXJyb3ItY291bnRcbisgICAgICAgIHR5cGU6IHU2NFxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHRvdGFsLWJpdHMtc2VudFxuKyAgICAgICAgdHlwZTogdTY0XG4gXG4gb3BlcmF0aW9uczpcbiAgIGVudW0tbW9kZWw6IGRpcmVjdGlvbmFsXG5AQCAtMjg1OSw2ICszMDE3LDU0IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSB3b3JzdC1jaGFubmVsXG4gICAgICAgICAgICAgLSBsaW5rXG4gICAgICAgZHVtcDogKm1zZS1nZXQtb3BcbisgICAgLVxuKyAgICAgIG5hbWU6IGludGYtY2Fwcy1nZXRcbisgICAgICBkb2M6IEdldCBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzIChmdW5jdGlvbmFsIGJsb2NrIGxheW91dCkuXG4rICAgICAgYXR0cmlidXRlLXNldDogaW50Zi1jYXBzXG4rICAgICAgZG86IFx1MDAyNmludGYtY2Fwcy1nZXQtb3BcbisgICAgICAgIHJlcXVlc3Q6XG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgICAgLSBoZWFkZXJcbisgICAgICAgIHJlcGx5OlxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxuKyAgICAgICAgICAgIC0gaGVhZGVyXG4rICAgICAgICAgICAgLSBibG9ja3NcbisgICAgICBkdW1wOiAqaW50Zi1jYXBzLWdldC1vcFxuKyAgICAtXG4rICAgICAgbmFtZTogcGh5LXRlc3QtZ2V0XG4rICAgICAgZG9jOiBHZXQgUEhZIHRlc3Qgc3RhdHVzIChwYXR0ZXJucywgQkVSVCBjb3VudGVycykuXG4rICAgICAgYXR0cmlidXRlLXNldDogcGh5LXRlc3RcbisgICAgICBkbzpcbisgICAgICAgIHJlcXVlc3Q6XG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgICAgLSBoZWFkZXJcbisgICAgICAgICAgICAtIGJsb2NrLWlkXG4rICAgICAgICAgICAgLSBsYW5lXG4rICAgICAgICByZXBseTpcbisgICAgICAgICAgYXR0cmlidXRlczpcbisgICAgICAgICAgICAtIGhlYWRlclxuKyAgICAgICAgICAgIC0gYmxvY2staWRcbisgICAgICAgICAgICAtIGxhbmVcbisgICAgICAgICAgICAtIHR4LXBhdHRlcm5cbisgICAgICAgICAgICAtIHJ4LXBhdHRlcm5cbisgICAgICAgICAgICAtIGFjdGl2ZS10ZXN0c1xuKyAgICAgICAgICAgIC0gY2hlY2tlci1sb2NrXG4rICAgICAgICAgICAgLSBlcnJvci1jb3VudFxuKyAgICAgICAgICAgIC0gdG90YWwtYml0cy1zZW50XG4rICAgIC1cbisgICAgICBuYW1lOiBwaHktdGVzdC1hY3RcbisgICAgICBkb2M6IENvbmZpZ3VyZSBQSFkgdGVzdCAoc2V0IHBhdHRlcm5zLCBzdGFydC9zdG9wIEJFUlQsIGluamVjdCBlcnJvcnMpLlxuKyAgICAgIGF0dHJpYnV0ZS1zZXQ6IHBoeS10ZXN0XG4rICAgICAgZG86XG4rICAgICAgICByZXF1ZXN0OlxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxuKyAgICAgICAgICAgIC0gaGVhZGVyXG4rICAgICAgICAgICAgLSBibG9jay1pZFxuKyAgICAgICAgICAgIC0gbGFuZVxuKyAgICAgICAgICAgIC0gdHgtcGF0dGVyblxuKyAgICAgICAgICAgIC0gcngtcGF0dGVyblxuKyAgICAgICAgICAgIC0gYmVydC1hY3Rpb25cbisgICAgICAgICAgICAtIGluamVjdC1lcnJvci1jb3VudFxuIFxuIG1jYXN0LWdyb3VwczpcbiAgIGxpc3Q6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuaW5kZXggMTI2ODNiNWQxMjVlNC4uZjk3NDhlNzM5ZjAzZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuQEAgLTExOTcsNiArMTE5Nyw5MiBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XG4gICogU2VlIFx1MDAyNnN0cnVjdCBuZXRfZGV2aWNlIGFuZCBcdTAwMjZzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZm9yIGRvY3VtZW50YXRpb25cbiAgKiBvZiB0aGUgZ2VuZXJpYyBuZXRkZXYgZmVhdHVyZXMgaW50ZXJmYWNlLlxuICAqL1xuK1xuKyNkZWZpbmUgSU5URl9DQVBTX01BWF9CTE9DS1NcdDE2XG4rI2RlZmluZSBJTlRGX0JMT0NLX05BTUVfTEVOXHQzMlxuK1xuKyNkZWZpbmUgTE9PUEJBQ0tfU1VQUE9SVF9MT0NBTFx0QklUKDApXG4rI2RlZmluZSBMT09QQkFDS19TVVBQT1JUX1JFTU9URVx0QklUKDEpXG4rXG4rLyoqXG4rICogc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayAtIFNpbmdsZSBmdW5jdGlvbmFsIGJsb2NrIGluIHRoZSBpbnRlcmZhY2VcbisgKiBAaWQ6IFVuaXF1ZSBibG9jayBpZGVudGlmaWVyXG4rICogQGNvbXBvbmVudDogSGFyZHdhcmUgY29tcG9uZW50IChNQUMsIFBIWSwgTU9EVUxFKVxuKyAqIEBzdWJsYXllcjogODAyLjMgc3VibGF5ZXIgKFJTLCBQQ1MsIEZFQywgUE1BLCBQTUQsIG9yIE5PTkUpXG4rICogQGluc3RhbmNlOiBJbmRleCB3aGVuIG11bHRpcGxlIGluc3RhbmNlcyBvZiBzYW1lIGNvbXBvbmVudCBleGlzdFxuKyAqIEBuYW1lOiBEcml2ZXItY2hvc2VuIGxhYmVsXG4rICogQGRlcHRoOiBPcmRlcmluZyB3aXRoaW4gc2FtZSAoY29tcG9uZW50LCBzdWJsYXllcikgdHVwbGVcbisgKiBAbGFuZXM6IE51bWJlciBvZiBsYW5lc1xuKyAqIEBsb29wYmFja19zdXBwb3J0ZWQ6IEJpdG1hc2sgb2Ygc3VwcG9ydGVkIGxvb3BiYWNrIGRpcmVjdGlvbnNcbisgKiBAc3VwcG9ydGVkX3R4X3BhdHRlcm5zOiBCaXRtYXNrIG9mIHBhdHRlcm5zIHRoaXMgYmxvY2sgY2FuIGdlbmVyYXRlXG4rICogQHN1cHBvcnRlZF9yeF9wYXR0ZXJuczogQml0bWFzayBvZiBwYXR0ZXJucyB0aGlzIGJsb2NrIGNhbiBjaGVja1xuKyAqIEBlcnJvcl9pbmplY3Rfc3VwcG9ydGVkOiBCbG9jayBzdXBwb3J0cyBiaXQgZXJyb3IgaW5qZWN0aW9uXG4rICogQGJlcnRfc3VwcG9ydGVkOiBCbG9jayBzdXBwb3J0cyBCRVJUIGNvdW50ZXJzXG4rICovXG4rc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayB7XG4rXHR1MzIgaWQ7XG4rXHRlbnVtIGludGZfY29tcG9uZW50IGNvbXBvbmVudDtcbitcdGVudW0gaW50Zl9zdWJsYXllciBzdWJsYXllcjtcbitcdHUzMiBpbnN0YW5jZTtcbitcdGNoYXIgbmFtZVtJTlRGX0JMT0NLX05BTUVfTEVOXTtcbitcdHU4IGRlcHRoO1xuK1x0dTMyIGxhbmVzO1xuK1x0dTMyIGxvb3BiYWNrX3N1cHBvcnRlZDtcbitcdHUzMiBzdXBwb3J0ZWRfdHhfcGF0dGVybnM7XG4rXHR1MzIgc3VwcG9ydGVkX3J4X3BhdHRlcm5zO1xuK1x0Ym9vbCBlcnJvcl9pbmplY3Rfc3VwcG9ydGVkO1xuK1x0Ym9vbCBiZXJ0X3N1cHBvcnRlZDtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBldGh0b29sX2ludGZfY2FwcyAtIEludGVyZmFjZSBjYXBhYmlsaXRpZXMgKGFsbCBibG9ja3MpXG4rICogQG51bV9ibG9ja3M6IE51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIGJsb2Nrc1tdXG4rICogQGJsb2NrczogQXJyYXkgb2YgZnVuY3Rpb25hbCBibG9ja3NcbisgKi9cbitzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHMge1xuK1x0dTMyIG51bV9ibG9ja3M7XG4rXHRzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrIGJsb2Nrc1tJTlRGX0NBUFNfTUFYX0JMT0NLU107XG4rfTtcbitcbisvKiBCaXRtYXNrIG9mIHdoaWNoIGV0aHRvb2xfcGh5X3Rlc3QgZmllbGRzIHdlcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgKi9cbisjZGVmaW5lIFBIWV9URVNUX0NNRF9UWF9QQVRURVJOXHRcdEJJVCgwKVxuKyNkZWZpbmUgUEhZX1RFU1RfQ01EX1JYX1BBVFRFUk5cdFx0QklUKDEpXG4rI2RlZmluZSBQSFlfVEVTVF9DTURfQkVSVF9BQ1RJT05cdFx0QklUKDIpXG4rI2RlZmluZSBQSFlfVEVTVF9DTURfSU5KRUNUX0NPVU5UXHRcdEJJVCgzKVxuKyNkZWZpbmUgUEhZX1RFU1RfQ01EX0xBTkVcdFx0XHRCSVQoNClcbisjZGVmaW5lIFBIWV9URVNUX0NNRF9CTE9DS19JRFx0XHRcdEJJVCg1KVxuK1xuKy8qIEJpdG1hc2sgb2YgY3VycmVudGx5IGFjdGl2ZSB0ZXN0cyAocmVhZC1vbmx5KSAqL1xuKyNkZWZpbmUgUEhZX1RFU1RfQUNUSVZFX0JFUlRcdFx0QklUKDApXG4rXG4rLyoqXG4rICogc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgLSBQSFkgdGVzdCBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXNcbisgKiBAY21kOiBCaXRtYXNrIG9mIHdoaWNoIGZpZWxkcyBhcmUgdmFsaWQgKFBIWV9URVNUX0NNRF8qKVxuKyAqIEBibG9ja19pZDogQmxvY2sgdG8gb3BlcmF0ZSBvbiAoZnJvbSBpbnRmLWNhcHMtZ2V0KVxuKyAqIEBsYW5lOiBMYW5lIG51bWJlciAoMC1iYXNlZClcbisgKiBAdHhfcGF0dGVybjogVFggcGF0dGVybiBnZW5lcmF0b3Igc2V0dGluZ1xuKyAqIEByeF9wYXR0ZXJuOiBSWCBwYXR0ZXJuIGNoZWNrZXIgc2V0dGluZ1xuKyAqIEBiZXJ0X2FjdGlvbjogQkVSVCBzdGFydC9zdG9wIGNvbnRyb2xcbisgKiBAaW5qZWN0X2Vycm9yX2NvdW50OiBOdW1iZXIgb2YgZXJyb3JzIHRvIGluamVjdFxuKyAqIEBhY3RpdmVfdGVzdHM6IEJpdG1hc2sgb2YgcnVubmluZyB0ZXN0cyAoUEhZX1RFU1RfQUNUSVZFXyopXG4rICogQGNoZWNrZXJfbG9jazogUlggY2hlY2tlciBsb2NrIHN0YXR1cyAocmVhZC1vbmx5KVxuKyAqIEBlcnJvcl9jb3VudDogQkVSVCBlcnJvciBjb3VudGVyIChyZWFkLW9ubHkpXG4rICogQHRvdGFsX2JpdHNfc2VudDogQkVSVCB0b3RhbCBiaXRzIGNvdW50ZXIgKHJlYWQtb25seSlcbisgKi9cbitzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCB7XG4rXHR1MzIgY21kO1xuK1x0dTMyIGJsb2NrX2lkO1xuK1x0dTMyIGxhbmU7XG4rXHRlbnVtIHBoeV90ZXN0X3BhdHRlcm4gdHhfcGF0dGVybjtcbitcdGVudW0gcGh5X3Rlc3RfcGF0dGVybiByeF9wYXR0ZXJuO1xuK1x0ZW51bSBwaHlfdGVzdF9hY3Rpb24gYmVydF9hY3Rpb247XG4rXHR1MzIgaW5qZWN0X2Vycm9yX2NvdW50O1xuK1x0dTMyIGFjdGl2ZV90ZXN0cztcbitcdHU4IGNoZWNrZXJfbG9jaztcbitcdHU2NCBlcnJvcl9jb3VudDtcbitcdHU2NCB0b3RhbF9iaXRzX3NlbnQ7XG4rfTtcbitcbiBzdHJ1Y3QgZXRodG9vbF9vcHMge1xuIFx0dTMyICAgICBzdXBwb3J0ZWRfaW5wdXRfeGZybTo4O1xuIFx0dTMyICAgICBjYXBfbGlua19sYW5lc19zdXBwb3J0ZWQ6MTtcbkBAIC0xMzU0LDYgKzE0NDAsMTIgQEAgc3RydWN0IGV0aHRvb2xfb3BzIHtcbiBcdGludFx0KCpzZXRfbW0pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX21tX2NmZyAqY2ZnLFxuIFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBcdHZvaWRcdCgqZ2V0X21tX3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqc3RhdHMpO1xuK1x0aW50XHQoKmdldF9pbnRmX2NhcHMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgc3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzICpjYXBzKTtcbitcdGludFx0KCpnZXRfcGh5X3Rlc3QpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCAqdGVzdCk7XG4rXHRpbnRcdCgqc2V0X3BoeV90ZXN0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnRlc3QpO1xuIH07XG4gXG4gaW50IGV0aHRvb2xfY2hlY2tfb3BzKGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuaW5kZXggODEzNGJhZjc4NjBmMy4uMzEwMmJiN2JhMzM3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbkBAIC04OTMsNiArODkzLDkgQEAgZW51bSB7XG4gXHRFVEhUT09MX01TR19SU1NfQ1JFQVRFX0FDVCxcbiBcdEVUSFRPT0xfTVNHX1JTU19ERUxFVEVfQUNULFxuIFx0RVRIVE9PTF9NU0dfTVNFX0dFVCxcbitcdEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVQsXG4rXHRFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsXG4rXHRFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QsXG4gXG4gXHRfX0VUSFRPT0xfTVNHX1VTRVJfQ05ULFxuIFx0RVRIVE9PTF9NU0dfVVNFUl9NQVggPSAoX19FVEhUT09MX01TR19VU0VSX0NOVCAtIDEpXG5AQCAtOTU0LDYgKzk1Nyw4IEBAIGVudW0ge1xuIFx0RVRIVE9PTF9NU0dfUlNTX0NSRUFURV9OVEYsXG4gXHRFVEhUT09MX01TR19SU1NfREVMRVRFX05URixcbiBcdEVUSFRPT0xfTVNHX01TRV9HRVRfUkVQTFksXG4rXHRFVEhUT09MX01TR19JTlRGX0NBUFNfR0VUX1JFUExZLFxuK1x0RVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VUX1JFUExZLFxuIFxuIFx0X19FVEhUT09MX01TR19LRVJORUxfQ05ULFxuIFx0RVRIVE9PTF9NU0dfS0VSTkVMX01BWCA9IChfX0VUSFRPT0xfTVNHX0tFUk5FTF9DTlQgLSAxKVxuQEAgLTk2MSw0ICs5NjYsMTAzIEBAIGVudW0ge1xuIFxuICNkZWZpbmUgRVRIVE9PTF9NQ0dSUF9NT05JVE9SX05BTUVcdFwibW9uaXRvclwiXG4gXG4rLyogSW50ZXJmYWNlIGNvbXBvbmVudCB0eXBlcyAqL1xuK2VudW0gaW50Zl9jb21wb25lbnQge1xuK1x0SU5URl9DT01QT05FTlRfTUFDLFxuK1x0SU5URl9DT01QT05FTlRfUEhZLFxuK1x0SU5URl9DT01QT05FTlRfTU9EVUxFLFxuK307XG4rXG4rLyogSW50ZXJmYWNlIHN1YmxheWVyIHR5cGVzICovXG4rZW51bSBpbnRmX3N1YmxheWVyIHtcbitcdElOVEZfU1VCTEFZRVJfTk9ORSxcbitcdElOVEZfU1VCTEFZRVJfUlMsXG4rXHRJTlRGX1NVQkxBWUVSX1BDUyxcbitcdElOVEZfU1VCTEFZRVJfRkVDLFxuK1x0SU5URl9TVUJMQVlFUl9QTUEsXG4rXHRJTlRGX1NVQkxBWUVSX1BNRCxcbit9O1xuK1xuKy8qIEF0dHJpYnV0ZXMgb2YgYSBzaW5nbGUgaW50ZXJmYWNlIGJsb2NrICovXG4rZW51bSB7XG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19JRCxcbitcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX0NPTVBPTkVOVCxcbitcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX1NVQkxBWUVSLFxuK1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfSU5TVEFOQ0UsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19OQU1FLFxuK1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfREVQVEgsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19MQU5FUyxcbitcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX0xPT1BCQUNLX1NVUFBPUlRFRCxcbitcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX1RYX1BBVFRFUk5TLFxuK1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfUlhfUEFUVEVSTlMsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19FUlJPUl9JTkpFQ1QsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19CRVJULFxuK1xuK1x0X19FVEhUT09MX0FfSU5URl9CTE9DS19DTlQsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19NQVggPSAoX19FVEhUT09MX0FfSU5URl9CTE9DS19DTlQgLSAxKVxuK307XG4rXG4rLyogQXR0cmlidXRlcyBvZiBpbnRmLWNhcHMtZ2V0IG1lc3NhZ2UgKi9cbitlbnVtIHtcbitcdEVUSFRPT0xfQV9JTlRGX0NBUFNfVU5TUEVDLFxuK1x0RVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIsXG4rXHRFVEhUT09MX0FfSU5URl9DQVBTX0JMT0NLUyxcbitcbitcdF9fRVRIVE9PTF9BX0lOVEZfQ0FQU19DTlQsXG4rXHRFVEhUT09MX0FfSU5URl9DQVBTX01BWCA9IChfX0VUSFRPT0xfQV9JTlRGX0NBUFNfQ05UIC0gMSlcbit9O1xuK1xuKy8qIFBIWSB0ZXN0IHBhdHRlcm4gdHlwZXMgKi9cbitlbnVtIHBoeV90ZXN0X3BhdHRlcm4ge1xuK1x0UEhZX1RFU1RfUEFUVEVSTl9PRkYsXG4rXHRQSFlfVEVTVF9QQVRURVJOX1BSQlM3LFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTOSxcbitcdFBIWV9URVNUX1BBVFRFUk5fUFJCUzExLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMTMsXG4rXHRQSFlfVEVTVF9QQVRURVJOX1BSQlMxNSxcbitcdFBIWV9URVNUX1BBVFRFUk5fUFJCUzIzLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMzEsXG4rXHRQSFlfVEVTVF9QQVRURVJOX1NTUFJRLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMTNRLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMzFRLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9TUVVBUkVfTlJaLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9TUVVBUkVfUEFNNCxcbitcdFBIWV9URVNUX1BBVFRFUk5fVFhfTElORUFSSVRZLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9TQ1JBTUJMRURfSURMRSxcbitcdFBIWV9URVNUX1BBVFRFUk5fSzI4XzUsXG4rXHRQSFlfVEVTVF9QQVRURVJOX0syOF83LFxuK1xuK1x0X19QSFlfVEVTVF9QQVRURVJOX0NPVU5ULFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9NQVggPSAoX19QSFlfVEVTVF9QQVRURVJOX0NPVU5UIC0gMSlcbit9O1xuK1xuKy8qIFBIWSB0ZXN0IEJFUlQgYWN0aW9ucyAqL1xuK2VudW0gcGh5X3Rlc3RfYWN0aW9uIHtcbitcdFBIWV9URVNUX0FDVElPTl9OT05FLFxuK1x0UEhZX1RFU1RfQUNUSU9OX1NUQVJULFxuK1x0UEhZX1RFU1RfQUNUSU9OX1NUT1AsXG4rXG4rXHRfX1BIWV9URVNUX0FDVElPTl9DT1VOVCxcbitcdFBIWV9URVNUX0FDVElPTl9NQVggPSAoX19QSFlfVEVTVF9BQ1RJT05fQ09VTlQgLSAxKVxuK307XG4rXG4rLyogQXR0cmlidXRlcyBvZiBwaHktdGVzdC1nZXQgLyBwaHktdGVzdC1hY3QgbWVzc2FnZXMgKi9cbitlbnVtIHtcbitcdEVUSFRPT0xfQV9QSFlfVEVTVF9VTlNQRUMsXG4rXHRFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSLFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lELFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0xBTkUsXG4rXHRFVEhUT09MX0FfUEhZX1RFU1RfVFhfUEFUVEVSTixcbitcdEVUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOLFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OLFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0lOSkVDVF9FUlJPUl9DT1VOVCxcbitcdEVUSFRPT0xfQV9QSFlfVEVTVF9BQ1RJVkVfVEVTVFMsXG4rXHRFVEhUT09MX0FfUEhZX1RFU1RfQ0hFQ0tFUl9MT0NLLFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0VSUk9SX0NPVU5ULFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX1RPVEFMX0JJVFNfU0VOVCxcbitcbitcdF9fRVRIVE9PTF9BX1BIWV9URVNUX0NOVCxcbitcdEVUSFRPT0xfQV9QSFlfVEVTVF9NQVggPSAoX19FVEhUT09MX0FfUEhZX1RFU1RfQ05UIC0gMSlcbit9O1xuK1xuICNlbmRpZiAvKiBfVUFQSV9MSU5VWF9FVEhUT09MX05FVExJTktfR0VORVJBVEVEX0ggKi9cbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9NYWtlZmlsZSBiL25ldC9ldGh0b29sL01ha2VmaWxlXG5pbmRleCA2MjljMTA5MTY2NzBlLi43ZGQyYzU2MjRjZWRmIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvTWFrZWZpbGVcbisrKyBiL25ldC9ldGh0b29sL01ha2VmaWxlXG5AQCAtOSw0ICs5LDQgQEAgZXRodG9vbF9ubC15XHQ6PSBuZXRsaW5rLm8gYml0c2V0Lm8gc3Ryc2V0Lm8gbGlua2luZm8ubyBsaW5rbW9kZXMubyByc3MubyBcXFxuIFx0XHQgICBjaGFubmVscy5vIGNvYWxlc2NlLm8gcGF1c2UubyBlZWUubyB0c2luZm8ubyBjYWJsZXRlc3QubyBcXFxuIFx0XHQgICB0dW5uZWxzLm8gZmVjLm8gZWVwcm9tLm8gc3RhdHMubyBwaGNfdmNsb2Nrcy5vIG1tLm8gXFxcbiBcdFx0ICAgbW9kdWxlLm8gY21pc19md191cGRhdGUubyBjbWlzX2NkYi5vIHBzZS1wZC5vIHBsY2EubyBcXFxuLVx0XHQgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vXG4rXHRcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm8gaW50Zl9jYXBzLm8gcGh5dGVzdC5vXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMgYi9uZXQvZXRodG9vbC9pbnRmX2NhcHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmU0NWNjYzRiODhjOWZcbi0tLSAvZGV2L251bGxcbisrKyBiL25ldC9ldGh0b29sL2ludGZfY2Fwcy5jXG5AQCAtMCwwICsxLDEzMCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbitcbisjaW5jbHVkZSBcIm5ldGxpbmsuaFwiXG4rI2luY2x1ZGUgXCJjb21tb24uaFwiXG4rXG4rc3RydWN0IGludGZfY2Fwc19yZXFfaW5mbyB7XG4rXHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTtcbit9O1xuK1xuK3N0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSB7XG4rXHRzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSBiYXNlO1xuK1x0c3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzIGNhcHM7XG4rfTtcbitcbisjZGVmaW5lIElOVEZfQ0FQU19SRVBEQVRBKF9fcmVwbHlfYmFzZSkgXFxcbitcdGNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSwgYmFzZSlcbitcbitjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeVtFVEhUT09MX0FfSU5URl9DQVBTX0hFQURFUiArIDFdID0ge1xuK1x0W0VUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSXSA9XG4rXHRcdE5MQV9QT0xJQ1lfTkVTVEVEKGV0aG5sX2hlYWRlcl9wb2xpY3kpLFxuK307XG4rXG4rc3RhdGljIGludCBpbnRmX2NhcHNfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhICpkYXRhID0gSU5URl9DQVBTX1JFUERBVEEocmVwbHlfYmFzZSk7XG4rXHRpbnQgbGVuID0gMDtcbitcdHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGF0YS1cdTAwM2VjYXBzLm51bV9ibG9ja3M7IGkrKykge1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoMCk7XHRcdC8qIG5lc3RlZCBibG9jayAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogaWQgKi9cbitcdFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIGNvbXBvbmVudCAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0Lyogc3VibGF5ZXIgKi9cbitcdFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIGluc3RhbmNlICovXG4rXHRcdGxlbiArPSBubGFfdG90YWxfc2l6ZShJTlRGX0JMT0NLX05BTUVfTEVOKTsgLyogbmFtZSAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSk7XHQvKiBkZXB0aCAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogbGFuZXMgKi9cbitcdFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIGxvb3BiYWNrX3N1cHBvcnRlZCAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogdHhfcGF0dGVybnMgKi9cbitcdFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIHJ4X3BhdHRlcm5zICovXG4rXHRcdGxlbiArPSBubGFfdG90YWxfc2l6ZSgwKTtcdFx0LyogZXJyb3JfaW5qZWN0IChmbGFnKSAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoMCk7XHRcdC8qIGJlcnQgKGZsYWcpICovXG4rXHR9XG4rXG4rXHQvKiBvdXRlciBCTE9DS1MgbmVzdCAqL1xuK1x0bGVuICs9IG5sYV90b3RhbF9zaXplKDApO1xuK1xuK1x0cmV0dXJuIGxlbjtcbit9XG4rXG4rc3RhdGljIGludCBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4rXHRcdFx0XHQgIHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlLFxuK1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuK3tcbitcdHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSAqZGF0YSA9IElOVEZfQ0FQU19SRVBEQVRBKHJlcGx5X2Jhc2UpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJlcGx5X2Jhc2UtXHUwMDNlZGV2O1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2ludGZfY2FwcylcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0dXJuIGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfaW50Zl9jYXBzKGRldiwgXHUwMDI2ZGF0YS1cdTAwM2VjYXBzKTtcbit9XG4rXG4rc3RhdGljIGludCBpbnRmX2NhcHNfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcbitcdFx0XHRcdGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSAqZGF0YSA9IElOVEZfQ0FQU19SRVBEQVRBKHJlcGx5X2Jhc2UpO1xuK1x0c3RydWN0IG5sYXR0ciAqYmxvY2tzX2F0dHI7XG4rXHR1MzIgaTtcbitcbitcdGJsb2Nrc19hdHRyID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBFVEhUT09MX0FfSU5URl9DQVBTX0JMT0NLUyk7XG4rXHRpZiAoIWJsb2Nrc19hdHRyKVxuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGF0YS1cdTAwM2VjYXBzLm51bV9ibG9ja3M7IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrICpiID0gXHUwMDI2ZGF0YS1cdTAwM2VjYXBzLmJsb2Nrc1tpXTtcbitcdFx0c3RydWN0IG5sYXR0ciAqYmxvY2tfYXR0cjtcbitcbitcdFx0YmxvY2tfYXR0ciA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgMCk7XG4rXHRcdGlmICghYmxvY2tfYXR0cilcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcbitcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfSUQsIGItXHUwMDNlaWQpIHx8XG4rXHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0NPTVBPTkVOVCxcbitcdFx0XHRcdGItXHUwMDNlY29tcG9uZW50KSB8fFxuK1x0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19TVUJMQVlFUixcbitcdFx0XHRcdGItXHUwMDNlc3VibGF5ZXIpIHx8XG4rXHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0lOU1RBTkNFLFxuK1x0XHRcdFx0Yi1cdTAwM2VpbnN0YW5jZSkgfHxcbitcdFx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTkFNRSwgYi1cdTAwM2VuYW1lKSB8fFxuK1x0XHQgICAgbmxhX3B1dF91OChza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0RFUFRILCBiLVx1MDAzZWRlcHRoKSB8fFxuK1x0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19MQU5FUywgYi1cdTAwM2VsYW5lcykgfHxcbitcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTE9PUEJBQ0tfU1VQUE9SVEVELFxuK1x0XHRcdFx0Yi1cdTAwM2Vsb29wYmFja19zdXBwb3J0ZWQpIHx8XG4rXHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX1RYX1BBVFRFUk5TLFxuK1x0XHRcdFx0Yi1cdTAwM2VzdXBwb3J0ZWRfdHhfcGF0dGVybnMpIHx8XG4rXHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX1JYX1BBVFRFUk5TLFxuK1x0XHRcdFx0Yi1cdTAwM2VzdXBwb3J0ZWRfcnhfcGF0dGVybnMpKVxuK1x0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuK1x0XHRpZiAoYi1cdTAwM2VlcnJvcl9pbmplY3Rfc3VwcG9ydGVkIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbmxhX3B1dF9mbGFnKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfRVJST1JfSU5KRUNUKSlcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcdFx0aWYgKGItXHUwMDNlYmVydF9zdXBwb3J0ZWQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBubGFfcHV0X2ZsYWcoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19CRVJUKSlcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcbitcdFx0bmxhX25lc3RfZW5kKHNrYiwgYmxvY2tfYXR0cik7XG4rXHR9XG4rXG4rXHRubGFfbmVzdF9lbmQoc2tiLCBibG9ja3NfYXR0cik7XG4rXHRyZXR1cm4gMDtcbitcbitubGFfcHV0X2ZhaWx1cmU6XG4rXHRubGFfbmVzdF9jYW5jZWwoc2tiLCBibG9ja3NfYXR0cik7XG4rXHRyZXR1cm4gLUVNU0dTSVpFO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfaW50Zl9jYXBzX3JlcXVlc3Rfb3BzID0ge1xuK1x0LnJlcXVlc3RfY21kXHQ9IEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVQsXG4rXHQucmVwbHlfY21kXHQ9IEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRfUkVQTFksXG4rXHQuaGRyX2F0dHJcdD0gRVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIsXG4rXHQucmVxX2luZm9fc2l6ZVx0PSBzaXplb2Yoc3RydWN0IGludGZfY2Fwc19yZXFfaW5mbyksXG4rXHQucmVwbHlfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSksXG4rXHQucHJlcGFyZV9kYXRhXHQ9IGludGZfY2Fwc19wcmVwYXJlX2RhdGEsXG4rXHQucmVwbHlfc2l6ZVx0PSBpbnRmX2NhcHNfcmVwbHlfc2l6ZSxcbitcdC5maWxsX3JlcGx5XHQ9IGludGZfY2Fwc19maWxsX3JlcGx5LFxuK307XG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5jIGIvbmV0L2V0aHRvb2wvbmV0bGluay5jXG5pbmRleCAxYWYzOTViNTQzMzBlLi41NmU1YzgxMTQ1NGJiIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvbmV0bGluay5jXG4rKysgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmNcbkBAIC00MzEsNiArNDMxLDggQEAgZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tfX0VUSFRPT0xfTVNHX1VTRVJfQ05UXSA9IHtcbiBcdFtFVEhUT09MX01TR19UU0NPTkZJR19TRVRdXHQ9IFx1MDAyNmV0aG5sX3RzY29uZmlnX3JlcXVlc3Rfb3BzLFxuIFx0W0VUSFRPT0xfTVNHX1BIWV9HRVRdXHRcdD0gXHUwMDI2ZXRobmxfcGh5X3JlcXVlc3Rfb3BzLFxuIFx0W0VUSFRPT0xfTVNHX01TRV9HRVRdXHRcdD0gXHUwMDI2ZXRobmxfbXNlX3JlcXVlc3Rfb3BzLFxuK1x0W0VUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRdXHQ9IFx1MDAyNmV0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcyxcbitcdFtFVEhUT09MX01TR19QSFlfVEVTVF9HRVRdXHQ9IFx1MDAyNmV0aG5sX3BoeV90ZXN0X3JlcXVlc3Rfb3BzLFxuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBldGhubF9kdW1wX2N0eCAqZXRobmxfZHVtcF9jb250ZXh0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbkBAIC0xNTcyLDYgKzE1NzQsMjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBldGh0b29sX2dlbmxfb3BzW10gPSB7XG4gXHRcdC5wb2xpY3kgPSBldGhubF9tc2VfZ2V0X3BvbGljeSxcbiBcdFx0Lm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX21zZV9nZXRfcG9saWN5KSAtIDEsXG4gXHR9LFxuK1x0e1xuK1x0XHQuY21kXHQ9IEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVQsXG4rXHRcdC5kb2l0XHQ9IGV0aG5sX2RlZmF1bHRfZG9pdCxcbitcdFx0LnN0YXJ0XHQ9IGV0aG5sX2RlZmF1bHRfc3RhcnQsXG4rXHRcdC5kdW1waXRcdD0gZXRobmxfZGVmYXVsdF9kdW1waXQsXG4rXHRcdC5kb25lXHQ9IGV0aG5sX2RlZmF1bHRfZG9uZSxcbitcdFx0LnBvbGljeSA9IGV0aG5sX2ludGZfY2Fwc19nZXRfcG9saWN5LFxuK1x0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3kpIC0gMSxcbitcdH0sXG4rXHR7XG4rXHRcdC5jbWRcdD0gRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULFxuK1x0XHQuZG9pdFx0PSBldGhubF9kZWZhdWx0X2RvaXQsXG4rXHRcdC5wb2xpY3kgPSBldGhubF9waHlfdGVzdF9nZXRfcG9saWN5LFxuK1x0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcGh5X3Rlc3RfZ2V0X3BvbGljeSkgLSAxLFxuK1x0fSxcbitcdHtcbitcdFx0LmNtZFx0PSBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QsXG4rXHRcdC5mbGFnc1x0PSBHRU5MX1VOU19BRE1JTl9QRVJNLFxuK1x0XHQuZG9pdFx0PSBldGhubF9hY3RfcGh5X3Rlc3QsXG4rXHRcdC5wb2xpY3kgPSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5LFxuK1x0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeSkgLSAxLFxuK1x0fSxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgZXRodG9vbF9ubF9tY2dycHNbXSA9IHtcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmggYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbmluZGV4IDNlOTY5YTA3MGY5ZmUuLjFjYWJhNjBkODNjNDMgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxuQEAgLTQ3NCw2ICs0NzQsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX21tX3JlcXVlc3Rfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcGh5X3JlcXVlc3Rfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tc2VfcmVxdWVzdF9vcHM7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9pbnRmX2NhcHNfcmVxdWVzdF9vcHM7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcztcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtFVEhUT09MX0FfSEVBREVSX0ZMQUdTICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lfc3RhdHNbRVRIVE9PTF9BX0hFQURFUl9GTEFHUyArIDFdO1xuQEAgLTUzMCw2ICs1MzIsMTEgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfSEVBREVSICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX2dldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX0hFQURFUiArIDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19zZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19NQVggKyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfbXNlX2dldF9wb2xpY3lbRVRIVE9PTF9BX01TRV9IRUFERVIgKyAxXTtcbitleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3lbRVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIgKyAxXTtcbitleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X3Rlc3RfZ2V0X3BvbGljeVtFVEhUT09MX0FfUEhZX1RFU1RfTEFORSArIDFdO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9NQVggKyAxXTtcbitcbitpbnQgZXRobmxfYWN0X3BoeV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIFxuIGludCBldGhubF9zZXRfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gaW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BoeXRlc3QuYyBiL25ldC9ldGh0b29sL3BoeXRlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmRlZGNkMDM2YjdjMmVcbi0tLSAvZGV2L251bGxcbisrKyBiL25ldC9ldGh0b29sL3BoeXRlc3QuY1xuQEAgLTAsMCArMSwxNzEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rXG4rI2luY2x1ZGUgXCJuZXRsaW5rLmhcIlxuKyNpbmNsdWRlIFwiY29tbW9uLmhcIlxuK1xuK3N0cnVjdCBwaHlfdGVzdF9yZXFfaW5mbyB7XG4rXHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTtcbit9O1xuK1xuK3N0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhIHtcbitcdHN0cnVjdCBldGhubF9yZXBseV9kYXRhIGJhc2U7XG4rXHRzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCB0ZXN0O1xuK307XG4rXG4rI2RlZmluZSBQSFlfVEVTVF9SRVBEQVRBKF9fcmVwbHlfYmFzZSkgXFxcbitcdGNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhLCBiYXNlKVxuK1xuKy8qIFBIWV9URVNUX0dFVCAqL1xuK1xuK2NvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkUgKyAxXSA9IHtcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXVx0PSBOTEFfUE9MSUNZX05FU1RFRChldGhubF9oZWFkZXJfcG9saWN5KSxcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4rXHRbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4rfTtcbitcbitzdGF0aWMgaW50IHBoeV90ZXN0X3JlcGx5X3NpemUoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcbitcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpXG4re1xuK1x0cmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXHQvKiBibG9ja19pZCAqL1xuK1x0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXHQvKiBsYW5lICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcdC8qIHR4X3BhdHRlcm4gKi9cbitcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1x0LyogcnhfcGF0dGVybiAqL1xuK1x0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXHQvKiBhY3RpdmVfdGVzdHMgKi9cbitcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSAgK1x0LyogY2hlY2tlcl9sb2NrICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU2NCkpICtcdC8qIGVycm9yX2NvdW50ICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU2NCkpO1x0LyogdG90YWxfYml0c19zZW50ICovXG4rfVxuK1xuK3N0YXRpYyBpbnQgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4rXHRcdFx0XHQgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UsXG4rXHRcdFx0XHQgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbit7XG4rXHRzdHJ1Y3QgcGh5X3Rlc3RfcmVwbHlfZGF0YSAqZGF0YSA9IFBIWV9URVNUX1JFUERBVEEocmVwbHlfYmFzZSk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmVwbHlfYmFzZS1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVx1MDAzZWF0dHJzO1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X3BoeV90ZXN0KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRtZW1zZXQoXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0LCAwLCBzaXplb2YoZGF0YS1cdTAwM2V0ZXN0KSk7XG4rXG4rXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSkge1xuK1x0XHRkYXRhLVx1MDAzZXRlc3QuYmxvY2tfaWQgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKTtcbitcdFx0ZGF0YS1cdTAwM2V0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfQkxPQ0tfSUQ7XG4rXHR9XG4rXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKSB7XG4rXHRcdGRhdGEtXHUwMDNldGVzdC5sYW5lID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKTtcbitcdFx0ZGF0YS1cdTAwM2V0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfTEFORTtcbitcdH1cbitcbitcdHJldHVybiBkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X3BoeV90ZXN0KGRldiwgXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0KTtcbit9XG4rXG4rc3RhdGljIGludCBwaHlfdGVzdF9maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhICpkYXRhID0gUEhZX1RFU1RfUkVQREFUQShyZXBseV9iYXNlKTtcbitcdGNvbnN0IHN0cnVjdCBldGh0b29sX3BoeV90ZXN0ICp0ID0gXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0O1xuK1xuK1x0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lELCB0LVx1MDAzZWJsb2NrX2lkKSB8fFxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0xBTkUsIHQtXHUwMDNlbGFuZSkgfHxcbitcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOLCB0LVx1MDAzZXR4X3BhdHRlcm4pIHx8XG4rXHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTiwgdC1cdTAwM2VyeF9wYXR0ZXJuKSB8fFxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0FDVElWRV9URVNUUyxcbitcdFx0XHR0LVx1MDAzZWFjdGl2ZV90ZXN0cykgfHxcbitcdCAgICBubGFfcHV0X3U4KHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0NIRUNLRVJfTE9DSywgdC1cdTAwM2VjaGVja2VyX2xvY2spIHx8XG4rXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfRVJST1JfQ09VTlQsXG4rXHRcdFx0ICAgICAgdC1cdTAwM2VlcnJvcl9jb3VudCwgRVRIVE9PTF9BX1BIWV9URVNUX1VOU1BFQykgfHxcbitcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9UT1RBTF9CSVRTX1NFTlQsXG4rXHRcdFx0ICAgICAgdC1cdTAwM2V0b3RhbF9iaXRzX3NlbnQsIEVUSFRPT0xfQV9QSFlfVEVTVF9VTlNQRUMpKVxuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcyA9IHtcbitcdC5yZXF1ZXN0X2NtZFx0PSBFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsXG4rXHQucmVwbHlfY21kXHQ9IEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVF9SRVBMWSxcbitcdC5oZHJfYXR0clx0PSBFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSLFxuK1x0LnJlcV9pbmZvX3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBwaHlfdGVzdF9yZXFfaW5mbyksXG4rXHQucmVwbHlfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhKSxcbitcdC5wcmVwYXJlX2RhdGFcdD0gcGh5X3Rlc3RfcHJlcGFyZV9kYXRhLFxuK1x0LnJlcGx5X3NpemVcdD0gcGh5X3Rlc3RfcmVwbHlfc2l6ZSxcbitcdC5maWxsX3JlcGx5XHQ9IHBoeV90ZXN0X2ZpbGxfcmVwbHksXG4rfTtcbitcbisvKiBQSFlfVEVTVF9BQ1QgKi9cbitcbitjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9NQVggKyAxXSA9IHtcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXVx0XHQ9IE5MQV9QT0xJQ1lfTkVTVEVEKGV0aG5sX2hlYWRlcl9wb2xpY3kpLFxuK1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9CTE9DS19JRF1cdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuK1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4rXHRbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl1cdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuK1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9CRVJUX0FDVElPTl1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuK307XG4rXG4raW50IGV0aG5sX2FjdF9waHlfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuK3tcbitcdHN0cnVjdCBldGhubF9yZXFfaW5mbyByZXFfaW5mbyA9IHt9O1xuK1x0c3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby1cdTAwM2VhdHRycztcbitcdHN0cnVjdCBldGh0b29sX3BoeV90ZXN0IHRlc3QgPSB7fTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoXHUwMDI2cmVxX2luZm8sXG4rXHRcdFx0XHRcdCB0YltFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXSxcbitcdFx0XHRcdFx0IGdlbmxfaW5mb19uZXQoaW5mbyksIGluZm8tXHUwMDNlZXh0YWNrLFxuK1x0XHRcdFx0XHQgdHJ1ZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0ZGV2ID0gcmVxX2luZm8uZGV2O1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlc2V0X3BoeV90ZXN0KSB7XG4rXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuK1x0XHRnb3RvIG91dF9kZXY7XG4rXHR9XG4rXG4rXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSkge1xuK1x0XHR0ZXN0LmJsb2NrX2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSk7XG4rXHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CTE9DS19JRDtcbitcdH1cbitcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfTEFORV0pIHtcbitcdFx0dGVzdC5sYW5lID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKTtcbitcdFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0xBTkU7XG4rXHR9XG4rXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dKSB7XG4rXHRcdHRlc3QudHhfcGF0dGVybiA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOXSk7XG4rXHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9UWF9QQVRURVJOO1xuK1x0fVxuK1x0aWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOXSkge1xuK1x0XHR0ZXN0LnJ4X3BhdHRlcm4gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl0pO1xuK1x0XHR0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfUlhfUEFUVEVSTjtcbitcdH1cbitcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkVSVF9BQ1RJT05dKSB7XG4rXHRcdHRlc3QuYmVydF9hY3Rpb24gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfQkVSVF9BQ1RJT05dKTtcbitcdFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0JFUlRfQUNUSU9OO1xuK1x0fVxuK1x0aWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9JTkpFQ1RfRVJST1JfQ09VTlRdKSB7XG4rXHRcdHRlc3QuaW5qZWN0X2Vycm9yX2NvdW50ID1cbitcdFx0XHRubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXSk7XG4rXHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9JTkpFQ1RfQ09VTlQ7XG4rXHR9XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdHJldCA9IGV0aG5sX29wc19iZWdpbihkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBvdXRfcnRubDtcbitcbitcdHJldCA9IGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VzZXRfcGh5X3Rlc3QoZGV2LCBcdTAwMjZ0ZXN0KTtcbitcdGV0aG5sX29wc19jb21wbGV0ZShkZXYpO1xuK1xuK291dF9ydG5sOlxuK1x0cnRubF91bmxvY2soKTtcbitvdXRfZGV2OlxuK1x0ZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9wdXQoXHUwMDI2cmVxX2luZm8pO1xuK1x0cmV0dXJuIHJldDtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjoxNS43MzA5MTQ2MzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTc2MjE1MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEV0aHRvb2wgTmV0bGluayBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGZldyBuZXcgZXRodG9vbCBuZXRsaW5rIG1lc3NhZ2VzOiBgRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVGAsIGBFVEhUT09MX01TR19QSFlfVEVTVF9HRVRgLCBhbmQgYEVUSFRPT0xfTVNHX1BIWV9URVNUX0FDVGAuIFRoZXNlIGFyZSBzcGVjaWZpY2FsbHkgYWltZWQgYXQgcmV0cmlldmluZyBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzIOKAkyBzb3VuZHMgbGlrZSBhIGZ1bmN0aW9uYWwgYmxvY2sgZGlhZ3JhbSDigJMgYW5kIGdldHRpbmcvc2V0dGluZyBQSFkgdGVzdCBzdGF0dXMsIHdoaWNoIGluY2x1ZGVzIHRoaW5ncyBsaWtlIHBhdHRlcm4gY29uZmlndXJhdGlvbnMgYW5kIEJFUlQgY291bnRlcnMuIFNlZW1zIHJlYXNvbmFibGUsIGdpdmVuIHRoZSBkaXJlY3Rpb24gd2UndmUgYmVlbiBnb2luZyB3aXRoIGV0aHRvb2wuXG5cblRoZSBjaGFuZ2VzIGFyZSBmYWlybHkgY29uY2VudHJhdGVkOiB0aGUgY29yZSBgbmV0L2V0aHRvb2wvbmV0bGluay5jYCwgdGhlIGhlYWRlciBpbiBgbmV0L2V0aHRvb2wvbmV0bGluay5oYCwgdGhlIGBNYWtlZmlsZWAsIGFuZCB0aGVuIG5ldyBzb3VyY2UgZmlsZXMgYG5ldC9ldGh0b29sL2ludGZfY2Fwcy5jYCBhbmQgYG5ldC9ldGh0b29sL3BoeXRlc3QuY2AuIE9mIGNvdXJzZSwgd2UgaGF2ZSB0aGUgY29ycmVzcG9uZGluZyB1cGRhdGVzIHRvIHRoZSBldGh0b29sIGtlcm5lbCBoZWFkZXJzIGluIGBpbmNsdWRlL2xpbnV4L2V0aHRvb2wuaGAgYW5kIHRoZSB1c2VyLXNwYWNlIEFQSSBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaGAuIFN0YW5kYXJkIHN0dWZmLlxuXG5MZXQncyBtYWtlIHN1cmUgdGhlc2UgbmV3IG1lc3NhZ2VzIGFyZSBhY3R1YWxseSBiZWluZyBoYW5kbGVkLiBPa2F5LCB0aGV5J3JlIGFkZGVkIHRvIGBldGh0b29sX2dlbmxfb3BzYCB3aXRoaW4gYG5ldC9ldGh0b29sL25ldGxpbmsuY2AsIHRoYXQgc2VlbXMgcmlnaHQuIExvb2tpbmcgYXQgdGhlIGltcGxlbWVudGF0aW9uLCBgRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVGAgYW5kIGBFVEhUT09MX01TR19QSFlfVEVTVF9HRVRgIGFyZSB1c2luZyBgZXRobmxfZGVmYXVsdF9kb2l0YCDigJMgd2hpY2ggbGlrZWx5IGltcGxpZXMgc29tZSBnZW5lcmljIG5ldGxpbmsgaGFuZGxpbmcg4oCTIHdoaWxlIGBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1RgIHNwZWNpZmljYWxseSB1c2VzIGBldGhubF9hY3RfcGh5X3Rlc3RgLlxuXG5BbHJpZ2h0LCBsZXQncyB0cmFjayBkb3duIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24uIEknbGwgbmVlZCB0byBsb29rIGZvciBgZXRobmxfYWN0X3BoeV90ZXN0YCBhbmQgYWxzbyBgZXRobmxfaW50Zl9jYXBzX3JlcXVlc3Rfb3BzYCBhbmQgYGV0aG5sX3BoeV90ZXN0X3JlcXVlc3Rfb3BzYC4gQWhhISBUaGV5J3JlIGRlZmluZWQgd2l0aGluIGBuZXQvZXRodG9vbC9waHl0ZXN0LmNgIGFuZCBgbmV0L2V0aHRvb2wvaW50Zl9jYXBzLmNgLCBhcyBleHBlY3RlZC5cblxuT25lIGNyaXRpY2FsIGNoZWNrOiB3aGF0IGFib3V0IHRoZSBjb25maWc/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBldGh0b29sIG5ldGxpbmsgaXMgYWN0dWFsbHkgZW5hYmxlZC4gYENPTkZJR19FVEhUT09MX05FVExJTktgIHNob3VsZCBkbyBpdC4gV2FpdCwgaG9sZCBvbi4gYENPTkZJR19FVEhUT09MX05FVExJTktgIGlzIHVzdWFsbHkgYXV0by1lbmFibGVkIG9yIGRlcGVuZHMgb24gYENPTkZJR19ORVRgLiBJIHNob3VsZCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgZGVwZW5kZW5jeSBpcyBhcyBJIGV4cGVjdC4gTGV0J3MgbG9vayBhdCBgbmV0L2V0aHRvb2wvS2NvbmZpZ2Agb3IgYG5ldC9LY29uZmlnYCB0byBiZSBzdXJlLiBOb3RoaW5nIHRvbyB0cmlja3ksIGhvcGVmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjoyMy4zMDcxMzMzMTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0ODE0NDExNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVRIVE9PTF9ORVRMSU5LXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTUwNz1jb25maWcgRkFJTE9WRVJcXG4tLVxcbm5ldC9LY29uZmlnLTUxOS1cXG5uZXQvS2NvbmZpZzo1MjA6Y29uZmlnIEVUSFRPT0xfTkVUTElOS1xcbm5ldC9LY29uZmlnLTUyMS1cXHRib29sIFxcXCJOZXRsaW5rIGludGVyZmFjZSBmb3IgZXRodG9vbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MjUuMDU1Mjg0NDMzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxODY5Njg4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipLY29uZmlnIERpdmUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBuYXZpZ2F0ZSBkaXJlY3RseSB0byBgbmV0L0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlc2lkZSwgc28gaXTigJlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGFuZCBtb2RpZnlpbmcgbmV0d29yay1yZWxhdGVkIHNldHRpbmdzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBUaGlzIGlzIHdoZXJlIHRoZSBpbml0aWFsIHdvcmsgaGFwcGVucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNDYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjoyOC42NzM5ODQxNzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTU6XFx0XFx0ICBmYWlsb3ZlciBuZXRkZXYuIFRoaXMgZW5hYmxlcyBwYXJhdmlydHVhbCBkcml2ZXJzIHRvIHVzZSBhXFxuIDUxNjpcXHRcXHQgIFZGIGFzIGFuIGFjY2VsZXJhdGVkIGxvdyBsYXRlbmN5IGRhdGFwYXRoLiBJdCBhbHNvIGFsbG93cyBsaXZlXFxuIDUxNzpcXHRcXHQgIG1pZ3JhdGlvbiBvZiBWTXMgd2l0aCBkaXJlY3QgYXR0YWNoZWQgVkZzIGJ5IGZhaWxpbmcgb3ZlciB0byB0aGVcXG4gNTE4OlxcdFxcdCAgcGFyYXZpcnR1YWwgZGF0YXBhdGggd2hlbiB0aGUgVkYgaXMgdW5wbHVnZ2VkLlxcbiA1MTk6XFx0XFxuIDUyMDpcXHRjb25maWcgRVRIVE9PTF9ORVRMSU5LXFxuIDUyMTpcXHRcXHRib29sIFxcXCJOZXRsaW5rIGludGVyZmFjZSBmb3IgZXRodG9vbFxcXCJcXG4gNTIyOlxcdFxcdHNlbGVjdCBESU1MSUJcXG4gNTIzOlxcdFxcdGRlZmF1bHQgeVxcbiA1MjQ6XFx0XFx0aGVscFxcbiA1MjU6XFx0XFx0ICBBbiBhbHRlcm5hdGl2ZSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGZvciBldGh0b29sIGJhc2VkIG9uIGdlbmVyaWNcXG4gNTI2OlxcdFxcdCAgbmV0bGluay4gSXQgcHJvdmlkZXMgYmV0dGVyIGV4dGVuc2liaWxpdHkgYW5kIHNvbWUgbmV3IGZlYXR1cmVzLFxcbiA1Mjc6XFx0XFx0ICBlLmcuIG5vdGlmaWNhdGlvbiBtZXNzYWdlcy5cXG4gNTI4OlxcdFxcbiA1Mjk6XFx0Y29uZmlnIE5FVERFVl9BRERSX0xJU1RfVEVTVFxcbiA1MzA6XFx0XFx0dHJpc3RhdGUgXFxcIlVuaXQgdGVzdHMgZm9yIGRldmljZSBhZGRyZXNzIGxpc3RcXFwiXFxuIDUzMTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiA1MzI6XFx0XFx0ZGVwZW5kcyBvbiBLVU5JVFxcbiA1MzM6XFx0XFxuIDUzNDpcXHRjb25maWcgTkVUX1RFU1RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MjguNjc0MDUwNDMyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI5Njk2MzAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB0aGlzIGZlYXR1cmUgaXMgb24gYnkgZGVmYXVsdCDigJMgZ29vZCB0byBrbm93LiBOb3csIG15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBmdW5jdGlvbiBjYWxscy4gSSBzZWUgdGhlc2UgYXMga2V5OiBgZXRobmxfYWN0X3BoeV90ZXN0YCwgYGludGZfY2Fwc19wcmVwYXJlX2RhdGFgLCBgaW50Zl9jYXBzX2ZpbGxfcmVwbHlgLCBgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhYCwgYW5kIGBwaHlfdGVzdF9maWxsX3JlcGx5YC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBidWlsZGluZyBibG9ja3MgcmVsYXRlZCB0byBlaXRoZXIgaW50ZXJmYWNlIGNhcGFiaWxpdGllcyBvciB0aGUgUEhZIHRlc3RpbmcgaXRzZWxmLiBNeSBuZXh0IHN0ZXAsIGFuZCBpdCdzIGEgY3JpdGljYWwgb25lLCBpcyB0byBkZXRlcm1pbmUgd2hpY2ggZHJpdmVycyBhcmUgYWN0dWFsbHkgKnVzaW5nKiB0aGVzZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBsb2NhdGUgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgZ2V0X2ludGZfY2Fwc2AsIGBnZXRfcGh5X3Rlc3RgLCBhbmQgYHNldF9waHlfdGVzdGAuIFRoYXQgd2lsbCByZXZlYWwgdGhlIHNwZWNpZmljIGhhcmR3YXJlIHRoZXNlIGZlYXR1cmVzIGFyZSBpbXBhY3RpbmcgYW5kIGhvdyB0aGV5J3JlIGJlaW5nIHVzZWQgd2l0aGluIHRoYXQgY29udGV4dC4gRnJvbSB0aGVyZSwgSSBjYW4gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIGV4aXN0aW5nIGRyaXZlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTgwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MzUuOTcxMDE1NDI3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Nzg5NzIzNTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuZ2V0X2ludGZfY2Fwc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MzcuODQ5OTk0NTI1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUyODUyODk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYGdldF9waHlfdGVzdGAgYW5kIGBzZXRfcGh5X3Rlc3RgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlc2UgdHdvIGZ1bmN0aW9ucywgYGdldF9waHlfdGVzdGAgYW5kIGBzZXRfcGh5X3Rlc3RgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkb3VibGUtY2hlY2sgdGhlaXIgaW1wbGVtZW50YXRpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJmYWNlIHdpdGggdGhlIFBIWSBsYXllciBhbmQsIG1vcmUgc3BlY2lmaWNhbGx5LCBob3cgdGhleSBoYW5kbGUgdGVzdCBtb2RlIGNvbmZpZ3VyYXRpb24uIEFyZSB0aGV5IHJlYWRpbmcvd3JpdGluZyBkaXJlY3RseSB0byByZWdpc3RlcnMsIG9yIGFyZSB0aGV5IHVzaW5nIHNvbWUgYWJzdHJhY3Rpb24gbGF5ZXIgbGlrZSBhIGRyaXZlcj8gSWYgaXQncyB0aGUgbGF0dGVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZHJpdmVyJ3MgdW5kZXJseWluZyBtZWNoYW5pc21zLlxuXG5XaGF0J3MgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlPyBBcmUgdGhlc2UgZnVuY3Rpb25zIHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmluZyBzcGVjaWZpYyBQSFkgdGVzdCBtb2Rlcywgb3IgYXJlIHRoZXkgbW9yZSBnZW5lcmFsLCBwcm92aWRpbmcgYSB3cmFwcGVyIGZvciBkaWZmZXJlbnQgdGVzdCBzY2VuYXJpb3M/IEkgbmVlZCB0byBsb29rIGF0IGFueSBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGVtIHRvIGdldCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgaW50ZW5kZWQgcHVycG9zZSBhbmQgc2NvcGUuXG5cbkZ1cnRoZXJtb3JlLCBJIG5lZWQgdG8gY29uc2lkZXIgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGlzc3VlcywgZXNwZWNpYWxseSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIGFjY2Vzc2VkIGNvbmN1cnJlbnRseSwgb3IgZnJvbSBkaWZmZXJlbnQgY29udGV4dHMuIEkgd2FudCB0byBsb29rIGNsb3NlbHkgYXQgd2hhdCB0aGVzZSBmdW5jdGlvbnMgZG8sIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgdGhyZWFkIHNhZmV0eSwgYW5kIGNvbmN1cnJlbmN5LiBJIHdhbnQgdG8gc2VlIGlmIGFueSBtdXRleGVzLCBzZW1hcGhvcmVzLCBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBhcmUgYmVpbmcgdXNlZCB0byBwcm90ZWN0IHNoYXJlZCByZXNvdXJjZXMuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgZXJyb3IgaGFuZGxpbmcuIEhvdyByb2J1c3QgYXJlIHRoZXNlIGZ1bmN0aW9ucz8gRG8gdGhleSBoYW5kbGUgZGlmZmVyZW50IHR5cGVzIG9mIFBIWSBpbml0aWFsaXphdGlvbiBmYWlsdXJlcywgb3IgaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLCBvciBjb21tdW5pY2F0aW9uIGVycm9ycyBncmFjZWZ1bGx5PyBBcmUgdGhlcmUgcHJvcGVyIGVycm9yIGNvZGVzIG9yIGV4Y2VwdGlvbiBoYW5kbGluZz8gQW55IHVuaXQgdGVzdHMgZm9yIHRoZXNlIGZ1bmN0aW9ucz8gV2hhdCBhcmUgdGhleSB0ZXN0aW5nP1xuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkyNSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA2OjQyLjM3ODUyNjM4NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNjk0NTc1OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXFxcXC5nZXRfcGh5X3Rlc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA2OjQ0LjExNTQ3OTkxNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODc5OTQ3NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFVEhUT09MIE5ldGxpbmsgUEhZIFRlc3QgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgRVRIVE9PTCBuZXRsaW5rIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIFBIWSB0ZXN0IGZ1bmN0aW9uYWxpdHkuIFRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBzaW5jZSBubyBjdXJyZW50IGRyaXZlcnMgaW1wbGVtZW50IHRoZXNlIGZlYXR1cmVzIHlldCwgdGhpcyBhcmVhIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgbmV0bGluayBjb3JlIGl0c2VsZiBpcyByZWFjaGFibGUsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuXG5cblRoZSBjb3JlIHBhcnNlcyB0aGUgbmV0bGluayBtZXNzYWdlcyBhbmQgdGhlbiBjYWxscyBkcml2ZXIgb3BlcmF0aW9ucyBpZiB0aGV5IGV4aXN0LiBJZiB0aGUgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uLCBpdCByZXR1cm5zIGAtRU9QTk9UU1VQUGAsIHdoaWNoIGlzIGFzIGV4cGVjdGVkLiBIb3dldmVyLCBldmVuIGlmIHRoZSBkcml2ZXIgb3BzIGFyZSBtaXNzaW5nLCBzb21lIHBhcnNpbmcgbG9naWMgaW4gYGV0aG5sX2FjdF9waHlfdGVzdGAgYW5kIGBwaHlfdGVzdF9wcmVwYXJlX2RhdGFgIG1pZ2h0IGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgY2hlY2suXG5cbkkgbmVlZCB0byBjb25maXJtIHRoYXQuIExvb2tpbmcgZGVlcGVyLCBJIHNlZSB0aGF0IGBldGhubF9kZWZhdWx0X2RvaXRgIGNhbGxzIGBwcmVwYXJlX2RhdGFgIHdoaWNoIGNhbGxzIGBkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2ludGZfY2Fwc2AuIEFuZCBpZiB0aGlzIGlzIE5VTEwsIGAtRU9QTk9UU1VQUGAgaXMgcmV0dXJuZWQuIFNvIGl0IG1ha2VzIHNlbnNlIHRoYXQgYGludGZfY2Fwc19maWxsX3JlcGx5YCB3b24ndCBiZSByZWFjaGVkLlxuXG5CdXQgd2FpdCwgYGV0aG5sX2FjdF9waHlfdGVzdGAgZG9lcyBzb21lIGF0dHJpYnV0ZSBwYXJzaW5nICpiZWZvcmUqIHRoZSBjaGVjayBmb3IgYGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VzZXRfcGh5X3Rlc3RgLiBPa2F5LCBsZXQncyBleGFtaW5lIGBldGhubF9hY3RfcGh5X3Rlc3RgLlxuXG5gYGBjXG5cdHJldCA9IGV0aG5sX3BhcnNlX2hlYWRlcl9kZXZfZ2V0KFx1MDAyNnJlcV9pbmZvLFxuXHRcdFx0XHRcdCB0YltFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXSxcblx0XHRcdFx0XHQgZ2VubF9pbmZvX25ldChpbmZvKSwgaW5mby1cdTAwM2VleHRhY2ssXG5cdFx0XHRcdFx0IHRydWUpO1xuXHRpZiAocmV0IFx1MDAzYyAwKVxuXHRcdHJldHVybiByZXQ7XG5cblx0ZGV2ID0gcmVxX2luZm8uZGV2O1xuXG5cdGlmICghZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZXNldF9waHlfdGVzdCkge1xuXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuXHRcdGdvdG8gb3V0X2Rldjtcblx0fVxuYGBgXG5cbk9rYXksIEkgc2VlLiBgZXRobmxfYWN0X3BoeV90ZXN0YCBjaGVja3MgZm9yIGBzZXRfcGh5X3Rlc3RgICppbW1lZGlhdGVseSogYWZ0ZXIgcmV0cmlldmluZyB0aGUgZGV2aWNlLlxuXG5gYGBjXG5cdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKSB7XG5cdFx0dGVzdC5ibG9ja19pZCA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9CTE9DS19JRF0pO1xuXHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CTE9DS19JRDtcblx0fVxuYGBgXG5cbkFuZCB0aGlzIGF0dHJpYnV0ZSBwYXJzaW5nIGlzIGRvbmUgKiphZnRlcioqIHRoZSBjaGVjazpcblxuYGBgY1xuXHRpZiAoIWRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VzZXRfcGh5X3Rlc3QpIHtcblx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcblx0XHRnb3RvIG91dF9kZXY7XG5cdH1cbmBgYFxuXG5TbyBpdCBsb29rcyBsaWtlIGlmIG5vIGRyaXZlciBpbXBsZW1lbnRzIGBzZXRfcGh5X3Rlc3RgLCB0aGF0IHBhcnNpbmcgbG9naWMgaXNuJ3QgZXZlbiByZWFjaGVkLiBIbW0uIEkgYmV0dGVyIGRvdWJsZS1jaGVjayBgZXRobmxfYWN0X3BoeV90ZXN0YCB0byBiZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgc29tZXRoaW5nIGNydWNpYWwuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGdldCByaWdodCBiZWZvcmUgSSBzdGFydCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMxMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjo1Mi45OTU0Mjk3NjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2V0aHRvb2wvcGh5dGVzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwOSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwOTpcXHRcXG4gMTEwOlxcdGludCBldGhubF9hY3RfcGh5X3Rlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4gMTExOlxcdHtcXG4gMTEyOlxcdFxcdHN0cnVjdCBldGhubF9yZXFfaW5mbyByZXFfaW5mbyA9IHt9O1xcbiAxMTM6XFx0XFx0c3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby1cXHUwMDNlYXR0cnM7XFxuIDExNDpcXHRcXHRzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCB0ZXN0ID0ge307XFxuIDExNTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiAxMTY6XFx0XFx0aW50IHJldDtcXG4gMTE3OlxcdFxcbiAxMTg6XFx0XFx0cmV0ID0gZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoXFx1MDAyNnJlcV9pbmZvLFxcbiAxMTk6XFx0XFx0XFx0XFx0XFx0XFx0IHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9IRUFERVJdLFxcbiAxMjA6XFx0XFx0XFx0XFx0XFx0XFx0IGdlbmxfaW5mb19uZXQoaW5mbyksIGluZm8tXFx1MDAzZWV4dGFjayxcXG4gMTIxOlxcdFxcdFxcdFxcdFxcdFxcdCB0cnVlKTtcXG4gMTIyOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAxMjM6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTI0OlxcdFxcbiAxMjU6XFx0XFx0ZGV2ID0gcmVxX2luZm8uZGV2O1xcbiAxMjY6XFx0XFxuIDEyNzpcXHRcXHRpZiAoIWRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZXNldF9waHlfdGVzdCkge1xcbiAxMjg6XFx0XFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuIDEyOTpcXHRcXHRcXHRnb3RvIG91dF9kZXY7XFxuIDEzMDpcXHRcXHR9XFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKSB7XFxuIDEzMzpcXHRcXHRcXHR0ZXN0LmJsb2NrX2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSk7XFxuIDEzNDpcXHRcXHRcXHR0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfQkxPQ0tfSUQ7XFxuIDEzNTpcXHRcXHR9XFxuIDEzNjpcXHRcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKSB7XFxuIDEzNzpcXHRcXHRcXHR0ZXN0LmxhbmUgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfTEFORV0pO1xcbiAxMzg6XFx0XFx0XFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0xBTkU7XFxuIDEzOTpcXHRcXHR9XFxuIDE0MDpcXHRcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dKSB7XFxuIDE0MTpcXHRcXHRcXHR0ZXN0LnR4X3BhdHRlcm4gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfVFhfUEFUVEVSTl0pO1xcbiAxNDI6XFx0XFx0XFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX1RYX1BBVFRFUk47XFxuIDE0MzpcXHRcXHR9XFxuIDE0NDpcXHRcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX1JYX1BBVFRFUk5dKSB7XFxuIDE0NTpcXHRcXHRcXHR0ZXN0LnJ4X3BhdHRlcm4gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl0pO1xcbiAxNDY6XFx0XFx0XFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX1JYX1BBVFRFUk47XFxuIDE0NzpcXHRcXHR9XFxuIDE0ODpcXHRcXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OXSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjo1Mi45OTU0OTU3NjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3NzQwNTE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBvdGVudGlhbDogRXRodG9vbCBOZXRsaW5rIEludGVyZmFjZSoqXG5cbk9rYXksIHNvIHRoZSBwYXJzaW5nIGl0c2VsZiBoYXBwZW5zICphZnRlciogdGhlIGluaXRpYWwgY2hlY2tzLCB3aGljaCBpcyBnb29kLiBCdXQgd2FpdCwgdGhlIE5ldGxpbmsgcG9saWN5IHBhcnNpbmcsIGhhbmRsZWQgYnkgdGhlIGdlbmVyaWMgTmV0bGluayBjb3JlLCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gSSBrbm93IHRoZSBwb2xpY2llcyBhcmUgZGVmaW5lZCBpbiBgZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeWAsIGBldGhubF9waHlfdGVzdF9nZXRfcG9saWN5YCwgYW5kIGBldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeWAsIGFuZCBgZXRobmxfYWN0X3BoeV90ZXN0YCBnZXRzIHVzIHRoYXQgZmFyLlxuXG5TbywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LCB5ZXMhIFRoZXNlIGFyZSBuZXcgTmV0bGluayBtZXNzYWdlcyBhbmQgcG9saWNpZXMsIHBlcmZlY3QgZm9yIFN5emthbGxlci4gSXQgY2FuIHBva2UgYXQgdGhlIG1lc3NhZ2UgZm9ybWF0cy4gRXZlbiBpZiB0aGVyZSdzIG5vIGRyaXZlciBhY3R1YWxseSAqdXNpbmcqIHRoaXMgZnVuY3Rpb25hbGl0eSB5ZXQsIHRoZSBwYXJzaW5nIGFuZCBpbml0aWFsIGhhbmRsZXJzIGFyZSBkZWZpbml0ZWx5IHRoZXJlIGFuZCByZWFjaGFibGUuXG5cbkhtbSwgb24gc2Vjb25kIHRob3VnaHQsIGlmIG5vIGRyaXZlciBpbXBsZW1lbnRzIHRoZXNlIGZ1bmN0aW9ucywgdGhlIGNvdmVyYWdlIGZyb20gZnV6emluZyB3aWxsIGJlIHZlcnkgbGltaXRlZC4gSXQgd291bGQgZXNzZW50aWFsbHkganVzdCBiZSB0ZXN0aW5nIHRoZSBwYXJzaW5nIGxvZ2ljIGl0c2VsZi4gQnV0LCBpdCBpcyBzdGlsbCBuZXcga2VybmVsIGNvZGUsIGFuZCBhbnkgY292ZXJhZ2UgaXMgdmFsdWFibGUuIExldCdzIG5vdCB3cml0ZSB0aGlzIG9mZiBjb21wbGV0ZWx5LiBJIHNob3VsZCBxdWlja2x5IGNoZWNrIHRoZSBjdXJyZW50IGtlcm5lbCB0cmVlIHRvIHNlZSBpZiBhbnkgZHJpdmVyIHdhcyBhZGRlZCB0byBpbXBsZW1lbnQgdGhpcyBmZWF0dXJlLiBQZXJoYXBzIGEgcmVsYXRlZCBjb21taXQgaW4gdGhlIHNhbWUgc2VyaWVzIHNudWNrIGEgZHJpdmVyIGluLiBHb3R0YSBjaGVjayBpdCBvdXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjY4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6NTguMzcyOTAzNTI2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQwNTg3MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9waHlfdGVzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfaGVscGVyLmM9MzI5OT1FWFBPUlRfU1lNQk9MKGRybV9kcF9nZXRfcGh5X3Rlc3RfcGF0dGVybik7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfaGVscGVyLmMtMzMwMS0vKipcXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfaGVscGVyLmM6MzMwMjogKiBkcm1fZHBfc2V0X3BoeV90ZXN0X3BhdHRlcm4oKSAtIHNldCB0aGUgcGF0dGVybiB0byB0aGUgc2luay5cXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfaGVscGVyLmMtMzMwMy0gKiBAYXV4OiBEaXNwbGF5UG9ydCBBVVggY2hhbm5lbFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5jLTMzMDgtICovXFxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5jOjMzMDk6aW50IGRybV9kcF9zZXRfcGh5X3Rlc3RfcGF0dGVybihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LFxcbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9oZWxwZXIuYy0zMzEwLVxcdFxcdFxcdFxcdHN0cnVjdCBkcm1fZHBfcGh5X3Rlc3RfcGFyYW1zICpkYXRhLCB1OCBkcF9yZXYpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZGlzcGxheS9kcm1fZHBfaGVscGVyLmMtMzMzNC19XFxuZHJpdmVycy9ncHUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5jOjMzMzU6RVhQT1JUX1NZTUJPTChkcm1fZHBfc2V0X3BoeV90ZXN0X3BhdHRlcm4pO1xcbmRyaXZlcnMvZ3B1L2RybS9kaXNwbGF5L2RybV9kcF9oZWxwZXIuYy0zMzM2LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcF90ZXN0LmM9MzA2PXN0YXRpYyB2b2lkIGludGVsX2RwX3Byb2Nlc3NfcGh5X3JlcXVlc3Qoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfdGVzdC5jLTMzMC1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwX3Rlc3QuYzozMzE6XFx0ZHJtX2RwX3NldF9waHlfdGVzdF9wYXR0ZXJuKFxcdTAwMjZpbnRlbF9kcC1cXHUwMDNlYXV4LCBkYXRhLFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHBfdGVzdC5jLTMzMi1cXHRcXHRcXHRcXHQgICAgaW50ZWxfZHAtXFx1MDAzZWRwY2RbRFBfRFBDRF9SRVZdKTtcXG4tLVxcbmluY2x1ZGUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5oPTk4OT1pbnQgZHJtX2RwX2dldF9waHlfdGVzdF9wYXR0ZXJuKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsXFxuaW5jbHVkZS9kcm0vZGlzcGxheS9kcm1fZHBfaGVscGVyLmgtOTkwLVxcdFxcdFxcdFxcdHN0cnVjdCBkcm1fZHBfcGh5X3Rlc3RfcGFyYW1zICpkYXRhKTtcXG5pbmNsdWRlL2RybS9kaXNwbGF5L2RybV9kcF9oZWxwZXIuaDo5OTE6aW50IGRybV9kcF9zZXRfcGh5X3Rlc3RfcGF0dGVybihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LFxcbmluY2x1ZGUvZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5oLTk5Mi1cXHRcXHRcXHRcXHRzdHJ1Y3QgZHJtX2RwX3BoeV90ZXN0X3BhcmFtcyAqZGF0YSwgdTggZHBfcmV2KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oPTEyODY9c3RydWN0IGV0aHRvb2xfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oLTE0NDYtXFx0XFx0XFx0XFx0c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnRlc3QpO1xcbmluY2x1ZGUvbGludXgvZXRodG9vbC5oOjE0NDc6XFx0aW50XFx0KCpzZXRfcGh5X3Rlc3QpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTQ0OC1cXHRcXHRcXHRcXHRzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCAqdGVzdCk7XFxuLS1cXG5uZXQvZXRodG9vbC9waHl0ZXN0LmM9MTEwPWludCBldGhubF9hY3RfcGh5X3Rlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL3BoeXRlc3QuYy0xMjYtXFxubmV0L2V0aHRvb2wvcGh5dGVzdC5jOjEyNzpcXHRpZiAoIWRldi1cXHUwMDNlZXRodG9vbF9vcHMtXFx1MDAzZXNldF9waHlfdGVzdCkge1xcbm5ldC9ldGh0b29sL3BoeXRlc3QuYy0xMjgtXFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvZXRodG9vbC9waHl0ZXN0LmMtMTYyLVxcbm5ldC9ldGh0b29sL3BoeXRlc3QuYzoxNjM6XFx0cmV0ID0gZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlc2V0X3BoeV90ZXN0KGRldiwgXFx1MDAyNnRlc3QpO1xcbm5ldC9ldGh0b29sL3BoeXRlc3QuYy0xNjQtXFx0ZXRobmxfb3BzX2NvbXBsZXRlKGRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA2OjU5LjgxMzQ5NDQ4N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk5NDQxNDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IE1pc3NpbmcgSW1wbGVtZW50YXRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBjb2RlIGFuZCwgYXMgSSBzdXNwZWN0ZWQsIG5vbmUgb2YgdGhlIGRyaXZlcnMgYXJlIGFjdHVhbGx5IGltcGxlbWVudGluZyBgc2V0X3BoeV90ZXN0YCwgYGdldF9waHlfdGVzdGAsIG9yIGBnZXRfaW50Zl9jYXBzYCBhdCB0aGlzIHBvaW50LiBUaGF0J3MgYSBiaXQgb2YgYSByZWQgZmxhZywgYnV0IG5vdCBuZWNlc3NhcmlseSB1bmV4cGVjdGVkIGdpdmVuIHRoZSBzdGFnZSBvZiBkZXZlbG9wbWVudC4gV2UgbWlnaHQgYmUgcmVseWluZyBvbiBkZWZhdWx0IG9yIHBsYWNlaG9sZGVyIGJlaGF2aW9yIGZvciBub3cuIEknZCBiZXR0ZXIgY29uZmlybSB0aGF0IHRoZSBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzIGFyZSBjb3JyZWN0bHkgZXN0YWJsaXNoZWQuIExldCBtZSBqdW1wIGluIGFuZCBoYXZlIGEgcXVpY2sgbG9vayBhdCBgZ2V0X2ludGZfY2Fwc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzQyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDc6MDMuMTEyOTM5MjI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI1NDM1MTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9pbnRmX2NhcHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9ldGh0b29sLmg9MTI4Nj1zdHJ1Y3QgZXRodG9vbF9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTQ0Mi1cXHR2b2lkXFx0KCpnZXRfbW1fc3RhdHMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX21tX3N0YXRzICpzdGF0cyk7XFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmg6MTQ0MzpcXHRpbnRcXHQoKmdldF9pbnRmX2NhcHMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9saW51eC9ldGh0b29sLmgtMTQ0NC1cXHRcXHRcXHRcXHQgc3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzICpjYXBzKTtcXG4tLVxcbm5ldC9ldGh0b29sL2ludGZfY2Fwcy5jPTUyPXN0YXRpYyBpbnQgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxcbi0tXFxubmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMtNTgtXFxubmV0L2V0aHRvb2wvaW50Zl9jYXBzLmM6NTk6XFx0aWYgKCFkZXYtXFx1MDAzZWV0aHRvb2xfb3BzLVxcdTAwM2VnZXRfaW50Zl9jYXBzKVxcbm5ldC9ldGh0b29sL2ludGZfY2Fwcy5jLTYwLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5uZXQvZXRodG9vbC9pbnRmX2NhcHMuYy02MS1cXG5uZXQvZXRodG9vbC9pbnRmX2NhcHMuYzo2MjpcXHRyZXR1cm4gZGV2LVxcdTAwM2VldGh0b29sX29wcy1cXHUwMDNlZ2V0X2ludGZfY2FwcyhkZXYsIFxcdTAwMjZkYXRhLVxcdTAwM2VjYXBzKTtcXG5uZXQvZXRodG9vbC9pbnRmX2NhcHMuYy02My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA3OjA0LjUzODM4MTQ4MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTY2MDkzOTMyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUHJvcG9zZWQgRXRodG9vbCBOZXRsaW5rIEFkZGl0aW9ucyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgdGhlIG5ldyBldGh0b29sIG5ldGxpbmsgYWRkaXRpb25zLiBUaGUgY29yZSBvZiBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gd29ydGggZnV6emluZz8gQnV0IHdhaXQsIHRoaXMgaW50cm9kdWNlcyBuZXcgbmV0bGluayBtZXNzYWdlIHR5cGVzIGFuZCBwb2xpY2llcywgd2hpY2ggKnN5emthbGxlciogd2lsbCBkZWZpbml0ZWx5IGdvIGFmdGVyLiBUaGF0J3MgYSBnb29kIHNpZ24uIFRoZSBwYXJzaW5nIG9mIHRoZXNlIG5ldGxpbmsgbWVzc2FnZXMgaXMgcmVhY2hhYmxlLiBJIG1lYW4sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYGV0aG5sX2FjdF9waHlfdGVzdGAgc3BlY2lmaWNhbGx5IOKAkyB0aGUgZnVuY3Rpb24gY2FsbCB0aGF0IHBhcnNlcyB0aGUgaGVhZGVyLCByZXRyaWV2ZXMgdGhlIGRldmljZSwgYW5kIHRoZW4gZG9lcyBhIGNoZWNrIG9mIGBzZXRfcGh5X3Rlc3RgIGFuZCByZWxhdGVkIG5ldGxpbmsgcG9saWNpZXMuIEkgYW0gdGhpbmtpbmcgdGhhdCBgZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXRgIGlzIHJlYWNoYWJsZSB3aGljaCBnaXZlcyBtZSBjb25maWRlbmNlLlxuXG5UaGUgcmVhY2hhYmxlIG5ldGxpbmsgcG9saWNpZXMgYXJlIGBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5YCwgYGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3lgLCBhbmQgYGV0aG5sX2ludGZfY2Fwc19nZXRfcG9saWN5YC4gVGhlc2Ugd2lsbCBiZSB1c2VkIGJ5IHRoZSBuZXRsaW5rIGNvcmUgdG8gdmFsaWRhdGUgYXR0cmlidXRlcy4gVGhpcyAqaXMqIG5ldyBuZXRsaW5rIEFQSSwgYW5kIHRoYXQncyB1c3VhbGx5IGdvb2QgZm9yIGZ1enppbmcuIFNvIHllYWgsIEknbSB0aGlua2luZywgXCJXb3J0aEZ1enppbmcgPSB0cnVlXCIuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzLiBUaGUgb2J2aW91cyBvbmVzIGFyZSBgZXRobmxfYWN0X3BoeV90ZXN0YCwgYGludGZfY2Fwc19wcmVwYXJlX2RhdGFgLCBhbmQgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YWAuIEJ1dCBob2xkIG9uLCBgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YWAgYW5kIGBwaHlfdGVzdF9wcmVwYXJlX2RhdGFgIGFyZSBhY3R1YWxseSBjYWxsZWQgYnkgYGV0aG5sX2RlZmF1bHRfZG9pdGAuIExldCBtZSBkb3VibGUtY2hlY2sgZm9yIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucy4uLiBBaCwgbm8sIHRoZSBvdGhlcnMsIGxpa2UgYGludGZfY2Fwc19yZXBseV9zaXplYCwgYGludGZfY2Fwc19maWxsX3JlcGx5YCwgYHBoeV90ZXN0X3JlcGx5X3NpemVgLCBhbmQgYHBoeV90ZXN0X2ZpbGxfcmVwbHlgLCB3b24ndCBiZSByZWFjaGVkIGJlY2F1c2UgYHByZXBhcmVfZGF0YWAgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBTbywgYmFjayB0byBmb2N1c2luZyBvbiBgZXRobmxfYWN0X3BoeV90ZXN0YCwgYGludGZfY2Fwc19wcmVwYXJlX2RhdGFgLCBhbmQgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YWAuXG5cbkhhbmcgb24sIGBldGhubF9hY3RfcGh5X3Rlc3RgIGl0c2VsZiBtaWdodCBqdXN0IGJlIHJldHVybmluZyBgLUVPUE5PVFNVUFBgIGJ1dCB0aGlzIG5lZWRzIGZ1enppbmchIFRoZSBuZXRsaW5rIHBvbGljeSBwYXJzaW5nIGlzIGhhcHBlbmluZyAqYmVmb3JlKiB0aGUgYGRvaXRgIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhlIGtlcm5lbCBpcyBnb2luZyB0byBwYXJzZSB0aG9zZSBhdHRyaWJ1dGVzIGFjY29yZGluZyB0byB0aGUgbmV3IHBvbGljaWVzLCBhbmQgKnN5emthbGxlciogY2FuIGRlZmluaXRlbHkgZnV6eiB0aG9zZSBuZXRsaW5rIG1lc3NhZ2VzLiBPa2F5LCBkZWZpbml0ZWx5IFwiV29ydGhGdXp6aW5nID0gdHJ1ZVwiLlxuXG5MZXQncyBsaXN0IHRoZSBmb2N1cyBzeW1ib2xzOlxuYGV0aG5sX2FjdF9waHlfdGVzdGBcbmBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhYFxuYHBoeV90ZXN0X3ByZXBhcmVfZGF0YWBcblxuQnV0IHdhaXQsIGBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhYCBhbmQgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YWAgYXJlICpzdGF0aWMqIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBPa2F5LCBgZXRobmxfYWN0X3BoeV90ZXN0YCBpcyB0aGUgb25lIHRvIGZvY3VzIG9uLiBJdCdzIG5vbi1zdGF0aWMsIHNvLCB0aGF0J3MgcGVyZmVjdC4gVGhlIG90aGVycyBhcmUgc3RhdGljLCBidXQgdGhleSdyZSBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gdGhlIGBldGhubF9pbnRmX2NhcHNfcmVxdWVzdF9vcHNgIGFuZCBgZXRobmxfcGh5X3Rlc3RfcmVxdWVzdF9vcHNgIHN0cnVjdHVyZXMuIFNvLCBJIGNhbiBqdXN0IHVzZSBgZXRobmxfYWN0X3BoeV90ZXN0YCBhcyB0aGUgZm9jdXMgc3ltYm9sLlxuXG5MZXQgbWUgdmVyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMuLi4gbm9wZSwganVzdCBgZXRobmxfYWN0X3BoeV90ZXN0YC5cblxuUmVnYXJkaW5nIGNvbmZpZ3VyYXRpb24sIGBFVEhUT09MX05FVExJTktgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IEknbGwgYWRkIGl0IHRvIGJlIHNhZmUuIEl0J3MgYSBib29sLCBzbyBubyBoYXJtIGluIGJlaW5nIGV4cGxpY2l0LlxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgZXRobmxfYWN0X3BoeV90ZXN0YCBpcyBpbmRlZWQgbm9uLXN0YXRpYywganVzdCB0byBiZSBzdXJlLi4uIFllcywgaXQncyBkZWZpbmVkIGluIGBuZXQvZXRodG9vbC9waHl0ZXN0LmNgIGFuZCBkZWNsYXJlZCBpbiBgbmV0L2V0aHRvb2wvbmV0bGluay5oYC5cblxuQXJlIHRoZXJlIGFueSBvdGhlciBmdW5jdGlvbnM/IE5vLlxuXG5BbHJpZ2h0LCBsZXQncyByZXZpZXcgdGhlIGluc3RydWN0aW9ucyB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QganVzdCBhIGRvY3VtZW50YXRpb24gb3IgY29tbWVudCBjaGFuZ2Ugb3Igc29tZXRoaW5nIHRoYXQncyB1bnJlYWNoYWJsZS4gTm8sIHRoaXMgYWRkcyBuZXcgbmV0bGluayBtZXNzYWdlcyB0byB0aGUgKmNvcmUqIGV0aHRvb2wgbmV0bGluayBpbnRlcmZhY2UuIEl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuIFNvOiBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbioqRm9jdXMgc3ltYm9sOioqXG5gZXRobmxfYWN0X3BoeV90ZXN0YFxuXG4qKkNvbmZpZ3M6KipcbmBFVEhUT09MX05FVExJTktgXG5cbioqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBldGh0b29sIG5ldGxpbmsgbWVzc2FnZXMgKGBFVEhUT09MX01TR19JTlRGX0NBUFNfR0VUYCwgYEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVGAsIGBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1RgKSBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgcG9saWNpZXNcblxuIiwiSW5wdXRUb2tlbnMiOjE5Mjg5LCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDc6MjAuMTk5MzIzNTY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM0NTUwODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVUSFRPT0xfTkVUTElOS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV0aG5sX2FjdF9waHlfdGVzdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbmV3IGV0aHRvb2wgbmV0bGluayBtZXNzYWdlcyAoRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVCwgRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULCBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QpIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljaWVzLiBFdmVuIHRob3VnaCBubyBkcml2ZXJzIGN1cnJlbnRseSBpbXBsZW1lbnQgdGhlIHVuZGVybHlpbmcgZXRodG9vbCBvcGVyYXRpb25zLCB0aGUgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcsIHBvbGljeSB2YWxpZGF0aW9uLCBhbmQgaW5pdGlhbCBoYW5kbGVyIGZ1bmN0aW9ucyAobGlrZSBldGhubF9hY3RfcGh5X3Rlc3QpIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyLXNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVUSFRPT0xfTkVUTElOS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV0aG5sX2FjdF9waHlfdGVzdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgbmV3IGV0aHRvb2wgbmV0bGluayBtZXNzYWdlcyAoRVRIVE9PTF9NU0dfSU5URl9DQVBTX0dFVCwgRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULCBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QpIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljaWVzLiBFdmVuIHRob3VnaCBubyBkcml2ZXJzIGN1cnJlbnRseSBpbXBsZW1lbnQgdGhlIHVuZGVybHlpbmcgZXRodG9vbCBvcGVyYXRpb25zLCB0aGUgbmV0bGluayBtZXNzYWdlIHBhcnNpbmcsIHBvbGljeSB2YWxpZGF0aW9uLCBhbmQgaW5pdGlhbCBoYW5kbGVyIGZ1bmN0aW9ucyAobGlrZSBldGhubF9hY3RfcGh5X3Rlc3QpIGFyZSByZWFjaGFibGUgZnJvbSB1c2VyLXNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzoyMC4yNzI3ODUwMzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTIwNzI3NTg4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA3OjIwLjI3MzI4ODc2MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjUyMDY3NjgzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kcyAoYElOVEZfQ0FQU19HRVRgLCBgUEhZX1RFU1RfR0VUYCwgYFBIWV9URVNUX0FDVGApIHRvIHF1ZXJ5IGludGVyZmFjZSBjYXBhYmlsaXRpZXMgYW5kIGNvbmZpZ3VyZSBQSFkgdGVzdHMuIFRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGJldHdlZW4gdGhlIGV0aHRvb2wgY29yZSBhbmQgdGhlIGRyaXZlcnMgKGBzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHNgIGFuZCBgc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3RgKSBhcmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5Llxcblxcbkhvd2V2ZXIsIHRoZSBldGh0b29sIG5ldGxpbmsgZnJhbWV3b3JrIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplcyB0aGUgcmVwbHkgZGF0YSBzdHJ1Y3R1cmVzIHZpYSBgZXRobmxfaW5pdF9yZXBseV9kYXRhKClgICh3aGljaCBjYWxscyBgbWVtc2V0KHJlcGx5X2RhdGEsIDAsIG9wcy1cXHUwMDNlcmVwbHlfZGF0YV9zaXplKWApIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlIGRyaXZlciBjYWxsYmFja3MgKGUuZy4sIGBnZXRfaW50Zl9jYXBzYCkuIFNpbWlsYXJseSwgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YSgpYCBleHBsaWNpdGx5IGNhbGxzIGBtZW1zZXQoXFx1MDAyNmRhdGEtXFx1MDAzZXRlc3QsIDAsIHNpemVvZihkYXRhLVxcdTAwM2V0ZXN0KSlgLCBhbmQgYGV0aG5sX2FjdF9waHlfdGVzdCgpYCBpbml0aWFsaXplcyBpdHMgbG9jYWwgc3RydWN0IHdpdGggYD0ge31gLlxcblxcbkJlY2F1c2UgYWxsIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0YWNrIG9yIGhlYXAgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGV2ZW4gaWYgYSBkcml2ZXIgZmFpbHMgdG8gcG9wdWxhdGUgYWxsIGZpZWxkcy4gRnVydGhlcm1vcmUsIHRoZSBuZXRsaW5rIHJlc3BvbnNlIGlzIGNvbnN0cnVjdGVkIGJ5IHNlcmlhbGl6aW5nIGluZGl2aWR1YWwgZmllbGRzIHVzaW5nIGBubGFfcHV0X3UzMmAsIGBubGFfcHV0X3N0cmluZ2AsIGV0Yy4sIHJhdGhlciB0aGFuIGNvcHlpbmcgcmF3IHN0cnVjdHMsIHdoaWNoIGluaGVyZW50bHkgYXZvaWRzIGxlYWtpbmcgc3RydWN0IHBhZGRpbmcuXFxuXFxuQW55IHBvdGVudGlhbCBpc3N1ZXMsIHN1Y2ggYXMgYSBkcml2ZXIgd3JpdGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGBibG9ja3NgIGFycmF5IG9yIHJldHVybmluZyBhbiBpbnZhbGlkIGBudW1fYmxvY2tzYCBsZWFkaW5nIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMsIHdvdWxkIGJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ1MDZkZDEwODYzOGU1ZDc3ZDIzZjMwZWZkZjJjZjdmYTg2ZGVlOWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAwNTowNjoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5pbmRleCA1ZGQ0ZDFiNWQ5NGJiLi4zNjFlYjNjNjY1NzcwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuQEAgLTIxMCw2ICsyMTAsNTUgQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogZGlzY2FyZFxuICAgICAgICAgdmFsdWU6IDMxXG4rICAtXG4rICAgIG5hbWU6IGludGYtY29tcG9uZW50XG4rICAgIHR5cGU6IGVudW1cbisgICAgZG9jOiBUeXBlIG9mIGhhcmR3YXJlIGNvbXBvbmVudCBpbiB0aGUgaW50ZXJmYWNlLlxuKyAgICBlbnRyaWVzOlxuKyAgICAgIC0gbWFjXG4rICAgICAgLSBwaHlcbisgICAgICAtIG1vZHVsZVxuKyAgLVxuKyAgICBuYW1lOiBpbnRmLXN1YmxheWVyXG4rICAgIHR5cGU6IGVudW1cbisgICAgZG9jOiA4MDIuMyBzdWJsYXllciB3aXRoaW4gYSBjb21wb25lbnQuXG4rICAgIGVudHJpZXM6XG4rICAgICAgLSBub25lXG4rICAgICAgLSByc1xuKyAgICAgIC0gcGNzXG4rICAgICAgLSBmZWNcbisgICAgICAtIHBtYVxuKyAgICAgIC0gcG1kXG4rICAtXG4rICAgIG5hbWU6IHBoeS10ZXN0LXBhdHRlcm5cbisgICAgdHlwZTogZW51bVxuKyAgICBkb2M6IFBIWSB0ZXN0IHBhdHRlcm4gdHlwZXMgZm9yIFBSQlMgZ2VuZXJhdGlvbi9jaGVja2luZy5cbisgICAgZW50cmllczpcbisgICAgICAtIG9mZlxuKyAgICAgIC0gcHJiczdcbisgICAgICAtIHByYnM5XG4rICAgICAgLSBwcmJzMTFcbisgICAgICAtIHByYnMxM1xuKyAgICAgIC0gcHJiczE1XG4rICAgICAgLSBwcmJzMjNcbisgICAgICAtIHByYnMzMVxuKyAgICAgIC0gc3NwcnFcbisgICAgICAtIHByYnMxM3FcbisgICAgICAtIHByYnMzMXFcbisgICAgICAtIHNxdWFyZS1ucnpcbisgICAgICAtIHNxdWFyZS1wYW00XG4rICAgICAgLSB0eC1saW5lYXJpdHlcbisgICAgICAtIHNjcmFtYmxlZC1pZGxlXG4rICAgICAgLSBrMjgtNVxuKyAgICAgIC0gazI4LTdcbisgIC1cbisgICAgbmFtZTogcGh5LXRlc3QtYWN0aW9uXG4rICAgIHR5cGU6IGVudW1cbisgICAgZG9jOiBCRVJUIGNvbnRyb2wgYWN0aW9ucy5cbisgICAgZW50cmllczpcbisgICAgICAtIG5vbmVcbisgICAgICAtIHN0YXJ0XG4rICAgICAgLSBzdG9wXG4gXG4gYXR0cmlidXRlLXNldHM6XG4gICAtXG5AQCAtMTkwNSw2ICsxOTU0LDExNSBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIG5hbWU6IGxpbmtcbiAgICAgICAgIHR5cGU6IG5lc3RcbiAgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBtc2Utc25hcHNob3RcbisgIC1cbisgICAgbmFtZTogaW50Zi1ibG9ja1xuKyAgICBkb2M6IEEgc2luZ2xlIGZ1bmN0aW9uYWwgYmxvY2sgaW4gdGhlIGludGVyZmFjZS5cbisgICAgYXR0cmlidXRlczpcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBpZFxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogY29tcG9uZW50XG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGVudW06IGludGYtY29tcG9uZW50XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogc3VibGF5ZXJcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZW51bTogaW50Zi1zdWJsYXllclxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGluc3RhbmNlXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGRvYzogfFxuKyAgICAgICAgICBJZGVudGlmaWVzIHRoZSBoYXJkd2FyZSBlbnRpdHkgd2hlbiBtdWx0aXBsZSBpbnN0YW5jZXMgb2ZcbisgICAgICAgICAgdGhlIHNhbWUgY29tcG9uZW50IGV4aXN0IGluIHRoZSBpbnRlcmZhY2UuIFRoZSBkcml2ZXJcbisgICAgICAgICAgYXNzaWducyBpbnN0YW5jZSBudW1iZXJzIHNlcXVlbnRpYWxseSBiYXNlZCBvbiBwb3NpdGlvbiBpblxuKyAgICAgICAgICB0aGUgcGh5c2ljYWwgcGF0aC4gRGVmYXVsdHMgdG8gMCB3aGVuIG9ubHkgb25lIGluc3RhbmNlIG9mXG4rICAgICAgICAgIGEgZ2l2ZW4gY29tcG9uZW50IGV4aXN0cy5cbisgICAgICAgICAgRm9yIFBIWTogaW5zdGFuY2UgMCBpcyB0aGUgaW50ZXJuYWwvaG9zdC1zaWRlIFBIWSxcbisgICAgICAgICAgaW5zdGFuY2UgMSBpcyBhbiBleHRlcm5hbCBQSFkgZnVydGhlciBhbG9uZyB0aGUgcGF0aFxuKyAgICAgICAgICB0b3dhcmQgdGhlIGxpbmUgc2lkZS5cbisgICAgICAgICAgRm9yIE1BQzogaW5zdGFuY2UgMCBpcyB0aGUgaG9zdC1mYWNpbmcgTUFDLCBpbnN0YW5jZSAxIGlzXG4rICAgICAgICAgIGEgc2Vjb25kYXJ5IE1BQyBmdXJ0aGVyIGFsb25nIHRoZSBkYXRhIHBhdGggKGUuZy4sIGJlaGluZFxuKyAgICAgICAgICBhbiBlbWJlZGRlZCBzd2l0Y2gpLlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IG5hbWVcbisgICAgICAgIHR5cGU6IHN0cmluZ1xuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGRlcHRoXG4rICAgICAgICB0eXBlOiB1OFxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGxhbmVzXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBsb29wYmFjay1zdXBwb3J0ZWRcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHN1cHBvcnRlZC10eC1wYXR0ZXJuc1xuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogc3VwcG9ydGVkLXJ4LXBhdHRlcm5zXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBlcnJvci1pbmplY3Qtc3VwcG9ydGVkXG4rICAgICAgICB0eXBlOiBmbGFnXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogYmVydC1zdXBwb3J0ZWRcbisgICAgICAgIHR5cGU6IGZsYWdcbisgIC1cbisgICAgbmFtZTogaW50Zi1jYXBzXG4rICAgIGRvYzogSW50ZXJmYWNlIGNhcGFiaWxpdGllcyBtZXNzYWdlLlxuKyAgICBhdHRyaWJ1dGVzOlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGhlYWRlclxuKyAgICAgICAgdHlwZTogbmVzdFxuKyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGhlYWRlclxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGJsb2Nrc1xuKyAgICAgICAgdHlwZTogbmVzdFxuKyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGludGYtYmxvY2tcbisgICAgICAgIG11bHRpLWF0dHI6IHRydWVcbisgIC1cbisgICAgbmFtZTogcGh5LXRlc3RcbisgICAgZG9jOiBQSFkgdGVzdCBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMuXG4rICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogaGVhZGVyXG4rICAgICAgICB0eXBlOiBuZXN0XG4rICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogaGVhZGVyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogYmxvY2staWRcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGxhbmVcbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHR4LXBhdHRlcm5cbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZW51bTogcGh5LXRlc3QtcGF0dGVyblxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHJ4LXBhdHRlcm5cbisgICAgICAgIHR5cGU6IHUzMlxuKyAgICAgICAgZW51bTogcGh5LXRlc3QtcGF0dGVyblxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGJlcnQtYWN0aW9uXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGVudW06IHBoeS10ZXN0LWFjdGlvblxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IGluamVjdC1lcnJvci1jb3VudFxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogYWN0aXZlLXRlc3RzXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGRvYzogQml0bWFzayBvZiBjdXJyZW50bHkgcnVubmluZyB0ZXN0cyAoYml0IDAgPSBCRVJUKS5cbisgICAgICAtXG4rICAgICAgICBuYW1lOiBjaGVja2VyLWxvY2tcbisgICAgICAgIHR5cGU6IHU4XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogZXJyb3ItY291bnRcbisgICAgICAgIHR5cGU6IHU2NFxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHRvdGFsLWJpdHMtc2VudFxuKyAgICAgICAgdHlwZTogdTY0XG4gXG4gb3BlcmF0aW9uczpcbiAgIGVudW0tbW9kZWw6IGRpcmVjdGlvbmFsXG5AQCAtMjg1OSw2ICszMDE3LDU0IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSB3b3JzdC1jaGFubmVsXG4gICAgICAgICAgICAgLSBsaW5rXG4gICAgICAgZHVtcDogKm1zZS1nZXQtb3BcbisgICAgLVxuKyAgICAgIG5hbWU6IGludGYtY2Fwcy1nZXRcbisgICAgICBkb2M6IEdldCBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzIChmdW5jdGlvbmFsIGJsb2NrIGxheW91dCkuXG4rICAgICAgYXR0cmlidXRlLXNldDogaW50Zi1jYXBzXG4rICAgICAgZG86IFx1MDAyNmludGYtY2Fwcy1nZXQtb3BcbisgICAgICAgIHJlcXVlc3Q6XG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgICAgLSBoZWFkZXJcbisgICAgICAgIHJlcGx5OlxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxuKyAgICAgICAgICAgIC0gaGVhZGVyXG4rICAgICAgICAgICAgLSBibG9ja3NcbisgICAgICBkdW1wOiAqaW50Zi1jYXBzLWdldC1vcFxuKyAgICAtXG4rICAgICAgbmFtZTogcGh5LXRlc3QtZ2V0XG4rICAgICAgZG9jOiBHZXQgUEhZIHRlc3Qgc3RhdHVzIChwYXR0ZXJucywgQkVSVCBjb3VudGVycykuXG4rICAgICAgYXR0cmlidXRlLXNldDogcGh5LXRlc3RcbisgICAgICBkbzpcbisgICAgICAgIHJlcXVlc3Q6XG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgICAgLSBoZWFkZXJcbisgICAgICAgICAgICAtIGJsb2NrLWlkXG4rICAgICAgICAgICAgLSBsYW5lXG4rICAgICAgICByZXBseTpcbisgICAgICAgICAgYXR0cmlidXRlczpcbisgICAgICAgICAgICAtIGhlYWRlclxuKyAgICAgICAgICAgIC0gYmxvY2staWRcbisgICAgICAgICAgICAtIGxhbmVcbisgICAgICAgICAgICAtIHR4LXBhdHRlcm5cbisgICAgICAgICAgICAtIHJ4LXBhdHRlcm5cbisgICAgICAgICAgICAtIGFjdGl2ZS10ZXN0c1xuKyAgICAgICAgICAgIC0gY2hlY2tlci1sb2NrXG4rICAgICAgICAgICAgLSBlcnJvci1jb3VudFxuKyAgICAgICAgICAgIC0gdG90YWwtYml0cy1zZW50XG4rICAgIC1cbisgICAgICBuYW1lOiBwaHktdGVzdC1hY3RcbisgICAgICBkb2M6IENvbmZpZ3VyZSBQSFkgdGVzdCAoc2V0IHBhdHRlcm5zLCBzdGFydC9zdG9wIEJFUlQsIGluamVjdCBlcnJvcnMpLlxuKyAgICAgIGF0dHJpYnV0ZS1zZXQ6IHBoeS10ZXN0XG4rICAgICAgZG86XG4rICAgICAgICByZXF1ZXN0OlxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxuKyAgICAgICAgICAgIC0gaGVhZGVyXG4rICAgICAgICAgICAgLSBibG9jay1pZFxuKyAgICAgICAgICAgIC0gbGFuZVxuKyAgICAgICAgICAgIC0gdHgtcGF0dGVyblxuKyAgICAgICAgICAgIC0gcngtcGF0dGVyblxuKyAgICAgICAgICAgIC0gYmVydC1hY3Rpb25cbisgICAgICAgICAgICAtIGluamVjdC1lcnJvci1jb3VudFxuIFxuIG1jYXN0LWdyb3VwczpcbiAgIGxpc3Q6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuaW5kZXggMTI2ODNiNWQxMjVlNC4uZjk3NDhlNzM5ZjAzZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaFxuQEAgLTExOTcsNiArMTE5Nyw5MiBAQCBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyB7XG4gICogU2VlIFx1MDAyNnN0cnVjdCBuZXRfZGV2aWNlIGFuZCBcdTAwMjZzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZm9yIGRvY3VtZW50YXRpb25cbiAgKiBvZiB0aGUgZ2VuZXJpYyBuZXRkZXYgZmVhdHVyZXMgaW50ZXJmYWNlLlxuICAqL1xuK1xuKyNkZWZpbmUgSU5URl9DQVBTX01BWF9CTE9DS1NcdDE2XG4rI2RlZmluZSBJTlRGX0JMT0NLX05BTUVfTEVOXHQzMlxuK1xuKyNkZWZpbmUgTE9PUEJBQ0tfU1VQUE9SVF9MT0NBTFx0QklUKDApXG4rI2RlZmluZSBMT09QQkFDS19TVVBQT1JUX1JFTU9URVx0QklUKDEpXG4rXG4rLyoqXG4rICogc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayAtIFNpbmdsZSBmdW5jdGlvbmFsIGJsb2NrIGluIHRoZSBpbnRlcmZhY2VcbisgKiBAaWQ6IFVuaXF1ZSBibG9jayBpZGVudGlmaWVyXG4rICogQGNvbXBvbmVudDogSGFyZHdhcmUgY29tcG9uZW50IChNQUMsIFBIWSwgTU9EVUxFKVxuKyAqIEBzdWJsYXllcjogODAyLjMgc3VibGF5ZXIgKFJTLCBQQ1MsIEZFQywgUE1BLCBQTUQsIG9yIE5PTkUpXG4rICogQGluc3RhbmNlOiBJbmRleCB3aGVuIG11bHRpcGxlIGluc3RhbmNlcyBvZiBzYW1lIGNvbXBvbmVudCBleGlzdFxuKyAqIEBuYW1lOiBEcml2ZXItY2hvc2VuIGxhYmVsXG4rICogQGRlcHRoOiBPcmRlcmluZyB3aXRoaW4gc2FtZSAoY29tcG9uZW50LCBzdWJsYXllcikgdHVwbGVcbisgKiBAbGFuZXM6IE51bWJlciBvZiBsYW5lc1xuKyAqIEBsb29wYmFja19zdXBwb3J0ZWQ6IEJpdG1hc2sgb2Ygc3VwcG9ydGVkIGxvb3BiYWNrIGRpcmVjdGlvbnNcbisgKiBAc3VwcG9ydGVkX3R4X3BhdHRlcm5zOiBCaXRtYXNrIG9mIHBhdHRlcm5zIHRoaXMgYmxvY2sgY2FuIGdlbmVyYXRlXG4rICogQHN1cHBvcnRlZF9yeF9wYXR0ZXJuczogQml0bWFzayBvZiBwYXR0ZXJucyB0aGlzIGJsb2NrIGNhbiBjaGVja1xuKyAqIEBlcnJvcl9pbmplY3Rfc3VwcG9ydGVkOiBCbG9jayBzdXBwb3J0cyBiaXQgZXJyb3IgaW5qZWN0aW9uXG4rICogQGJlcnRfc3VwcG9ydGVkOiBCbG9jayBzdXBwb3J0cyBCRVJUIGNvdW50ZXJzXG4rICovXG4rc3RydWN0IGV0aHRvb2xfaW50Zl9ibG9jayB7XG4rXHR1MzIgaWQ7XG4rXHRlbnVtIGludGZfY29tcG9uZW50IGNvbXBvbmVudDtcbitcdGVudW0gaW50Zl9zdWJsYXllciBzdWJsYXllcjtcbitcdHUzMiBpbnN0YW5jZTtcbitcdGNoYXIgbmFtZVtJTlRGX0JMT0NLX05BTUVfTEVOXTtcbitcdHU4IGRlcHRoO1xuK1x0dTMyIGxhbmVzO1xuK1x0dTMyIGxvb3BiYWNrX3N1cHBvcnRlZDtcbitcdHUzMiBzdXBwb3J0ZWRfdHhfcGF0dGVybnM7XG4rXHR1MzIgc3VwcG9ydGVkX3J4X3BhdHRlcm5zO1xuK1x0Ym9vbCBlcnJvcl9pbmplY3Rfc3VwcG9ydGVkO1xuK1x0Ym9vbCBiZXJ0X3N1cHBvcnRlZDtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBldGh0b29sX2ludGZfY2FwcyAtIEludGVyZmFjZSBjYXBhYmlsaXRpZXMgKGFsbCBibG9ja3MpXG4rICogQG51bV9ibG9ja3M6IE51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGluIGJsb2Nrc1tdXG4rICogQGJsb2NrczogQXJyYXkgb2YgZnVuY3Rpb25hbCBibG9ja3NcbisgKi9cbitzdHJ1Y3QgZXRodG9vbF9pbnRmX2NhcHMge1xuK1x0dTMyIG51bV9ibG9ja3M7XG4rXHRzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrIGJsb2Nrc1tJTlRGX0NBUFNfTUFYX0JMT0NLU107XG4rfTtcbitcbisvKiBCaXRtYXNrIG9mIHdoaWNoIGV0aHRvb2xfcGh5X3Rlc3QgZmllbGRzIHdlcmUgZXhwbGljaXRseSBzcGVjaWZpZWQgKi9cbisjZGVmaW5lIFBIWV9URVNUX0NNRF9UWF9QQVRURVJOXHRcdEJJVCgwKVxuKyNkZWZpbmUgUEhZX1RFU1RfQ01EX1JYX1BBVFRFUk5cdFx0QklUKDEpXG4rI2RlZmluZSBQSFlfVEVTVF9DTURfQkVSVF9BQ1RJT05cdFx0QklUKDIpXG4rI2RlZmluZSBQSFlfVEVTVF9DTURfSU5KRUNUX0NPVU5UXHRcdEJJVCgzKVxuKyNkZWZpbmUgUEhZX1RFU1RfQ01EX0xBTkVcdFx0XHRCSVQoNClcbisjZGVmaW5lIFBIWV9URVNUX0NNRF9CTE9DS19JRFx0XHRcdEJJVCg1KVxuK1xuKy8qIEJpdG1hc2sgb2YgY3VycmVudGx5IGFjdGl2ZSB0ZXN0cyAocmVhZC1vbmx5KSAqL1xuKyNkZWZpbmUgUEhZX1RFU1RfQUNUSVZFX0JFUlRcdFx0QklUKDApXG4rXG4rLyoqXG4rICogc3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgLSBQSFkgdGVzdCBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXNcbisgKiBAY21kOiBCaXRtYXNrIG9mIHdoaWNoIGZpZWxkcyBhcmUgdmFsaWQgKFBIWV9URVNUX0NNRF8qKVxuKyAqIEBibG9ja19pZDogQmxvY2sgdG8gb3BlcmF0ZSBvbiAoZnJvbSBpbnRmLWNhcHMtZ2V0KVxuKyAqIEBsYW5lOiBMYW5lIG51bWJlciAoMC1iYXNlZClcbisgKiBAdHhfcGF0dGVybjogVFggcGF0dGVybiBnZW5lcmF0b3Igc2V0dGluZ1xuKyAqIEByeF9wYXR0ZXJuOiBSWCBwYXR0ZXJuIGNoZWNrZXIgc2V0dGluZ1xuKyAqIEBiZXJ0X2FjdGlvbjogQkVSVCBzdGFydC9zdG9wIGNvbnRyb2xcbisgKiBAaW5qZWN0X2Vycm9yX2NvdW50OiBOdW1iZXIgb2YgZXJyb3JzIHRvIGluamVjdFxuKyAqIEBhY3RpdmVfdGVzdHM6IEJpdG1hc2sgb2YgcnVubmluZyB0ZXN0cyAoUEhZX1RFU1RfQUNUSVZFXyopXG4rICogQGNoZWNrZXJfbG9jazogUlggY2hlY2tlciBsb2NrIHN0YXR1cyAocmVhZC1vbmx5KVxuKyAqIEBlcnJvcl9jb3VudDogQkVSVCBlcnJvciBjb3VudGVyIChyZWFkLW9ubHkpXG4rICogQHRvdGFsX2JpdHNfc2VudDogQkVSVCB0b3RhbCBiaXRzIGNvdW50ZXIgKHJlYWQtb25seSlcbisgKi9cbitzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCB7XG4rXHR1MzIgY21kO1xuK1x0dTMyIGJsb2NrX2lkO1xuK1x0dTMyIGxhbmU7XG4rXHRlbnVtIHBoeV90ZXN0X3BhdHRlcm4gdHhfcGF0dGVybjtcbitcdGVudW0gcGh5X3Rlc3RfcGF0dGVybiByeF9wYXR0ZXJuO1xuK1x0ZW51bSBwaHlfdGVzdF9hY3Rpb24gYmVydF9hY3Rpb247XG4rXHR1MzIgaW5qZWN0X2Vycm9yX2NvdW50O1xuK1x0dTMyIGFjdGl2ZV90ZXN0cztcbitcdHU4IGNoZWNrZXJfbG9jaztcbitcdHU2NCBlcnJvcl9jb3VudDtcbitcdHU2NCB0b3RhbF9iaXRzX3NlbnQ7XG4rfTtcbitcbiBzdHJ1Y3QgZXRodG9vbF9vcHMge1xuIFx0dTMyICAgICBzdXBwb3J0ZWRfaW5wdXRfeGZybTo4O1xuIFx0dTMyICAgICBjYXBfbGlua19sYW5lc19zdXBwb3J0ZWQ6MTtcbkBAIC0xMzU0LDYgKzE0NDAsMTIgQEAgc3RydWN0IGV0aHRvb2xfb3BzIHtcbiBcdGludFx0KCpzZXRfbW0pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX21tX2NmZyAqY2ZnLFxuIFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiBcdHZvaWRcdCgqZ2V0X21tX3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9tbV9zdGF0cyAqc3RhdHMpO1xuK1x0aW50XHQoKmdldF9pbnRmX2NhcHMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgc3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzICpjYXBzKTtcbitcdGludFx0KCpnZXRfcGh5X3Rlc3QpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCAqdGVzdCk7XG4rXHRpbnRcdCgqc2V0X3BoeV90ZXN0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0c3RydWN0IGV0aHRvb2xfcGh5X3Rlc3QgKnRlc3QpO1xuIH07XG4gXG4gaW50IGV0aHRvb2xfY2hlY2tfb3BzKGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxuaW5kZXggODEzNGJhZjc4NjBmMy4uMzEwMmJiN2JhMzM3ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmhcbkBAIC04OTMsNiArODkzLDkgQEAgZW51bSB7XG4gXHRFVEhUT09MX01TR19SU1NfQ1JFQVRFX0FDVCxcbiBcdEVUSFRPT0xfTVNHX1JTU19ERUxFVEVfQUNULFxuIFx0RVRIVE9PTF9NU0dfTVNFX0dFVCxcbitcdEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVQsXG4rXHRFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsXG4rXHRFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QsXG4gXG4gXHRfX0VUSFRPT0xfTVNHX1VTRVJfQ05ULFxuIFx0RVRIVE9PTF9NU0dfVVNFUl9NQVggPSAoX19FVEhUT09MX01TR19VU0VSX0NOVCAtIDEpXG5AQCAtOTU0LDYgKzk1Nyw4IEBAIGVudW0ge1xuIFx0RVRIVE9PTF9NU0dfUlNTX0NSRUFURV9OVEYsXG4gXHRFVEhUT09MX01TR19SU1NfREVMRVRFX05URixcbiBcdEVUSFRPT0xfTVNHX01TRV9HRVRfUkVQTFksXG4rXHRFVEhUT09MX01TR19JTlRGX0NBUFNfR0VUX1JFUExZLFxuK1x0RVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VUX1JFUExZLFxuIFxuIFx0X19FVEhUT09MX01TR19LRVJORUxfQ05ULFxuIFx0RVRIVE9PTF9NU0dfS0VSTkVMX01BWCA9IChfX0VUSFRPT0xfTVNHX0tFUk5FTF9DTlQgLSAxKVxuQEAgLTk2MSw0ICs5NjYsMTAzIEBAIGVudW0ge1xuIFxuICNkZWZpbmUgRVRIVE9PTF9NQ0dSUF9NT05JVE9SX05BTUVcdFwibW9uaXRvclwiXG4gXG4rLyogSW50ZXJmYWNlIGNvbXBvbmVudCB0eXBlcyAqL1xuK2VudW0gaW50Zl9jb21wb25lbnQge1xuK1x0SU5URl9DT01QT05FTlRfTUFDLFxuK1x0SU5URl9DT01QT05FTlRfUEhZLFxuK1x0SU5URl9DT01QT05FTlRfTU9EVUxFLFxuK307XG4rXG4rLyogSW50ZXJmYWNlIHN1YmxheWVyIHR5cGVzICovXG4rZW51bSBpbnRmX3N1YmxheWVyIHtcbitcdElOVEZfU1VCTEFZRVJfTk9ORSxcbitcdElOVEZfU1VCTEFZRVJfUlMsXG4rXHRJTlRGX1NVQkxBWUVSX1BDUyxcbitcdElOVEZfU1VCTEFZRVJfRkVDLFxuK1x0SU5URl9TVUJMQVlFUl9QTUEsXG4rXHRJTlRGX1NVQkxBWUVSX1BNRCxcbit9O1xuK1xuKy8qIEF0dHJpYnV0ZXMgb2YgYSBzaW5nbGUgaW50ZXJmYWNlIGJsb2NrICovXG4rZW51bSB7XG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19JRCxcbitcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX0NPTVBPTkVOVCxcbitcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX1NVQkxBWUVSLFxuK1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfSU5TVEFOQ0UsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19OQU1FLFxuK1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfREVQVEgsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19MQU5FUyxcbitcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX0xPT1BCQUNLX1NVUFBPUlRFRCxcbitcdEVUSFRPT0xfQV9JTlRGX0JMT0NLX1RYX1BBVFRFUk5TLFxuK1x0RVRIVE9PTF9BX0lOVEZfQkxPQ0tfUlhfUEFUVEVSTlMsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19FUlJPUl9JTkpFQ1QsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19CRVJULFxuK1xuK1x0X19FVEhUT09MX0FfSU5URl9CTE9DS19DTlQsXG4rXHRFVEhUT09MX0FfSU5URl9CTE9DS19NQVggPSAoX19FVEhUT09MX0FfSU5URl9CTE9DS19DTlQgLSAxKVxuK307XG4rXG4rLyogQXR0cmlidXRlcyBvZiBpbnRmLWNhcHMtZ2V0IG1lc3NhZ2UgKi9cbitlbnVtIHtcbitcdEVUSFRPT0xfQV9JTlRGX0NBUFNfVU5TUEVDLFxuK1x0RVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIsXG4rXHRFVEhUT09MX0FfSU5URl9DQVBTX0JMT0NLUyxcbitcbitcdF9fRVRIVE9PTF9BX0lOVEZfQ0FQU19DTlQsXG4rXHRFVEhUT09MX0FfSU5URl9DQVBTX01BWCA9IChfX0VUSFRPT0xfQV9JTlRGX0NBUFNfQ05UIC0gMSlcbit9O1xuK1xuKy8qIFBIWSB0ZXN0IHBhdHRlcm4gdHlwZXMgKi9cbitlbnVtIHBoeV90ZXN0X3BhdHRlcm4ge1xuK1x0UEhZX1RFU1RfUEFUVEVSTl9PRkYsXG4rXHRQSFlfVEVTVF9QQVRURVJOX1BSQlM3LFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTOSxcbitcdFBIWV9URVNUX1BBVFRFUk5fUFJCUzExLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMTMsXG4rXHRQSFlfVEVTVF9QQVRURVJOX1BSQlMxNSxcbitcdFBIWV9URVNUX1BBVFRFUk5fUFJCUzIzLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMzEsXG4rXHRQSFlfVEVTVF9QQVRURVJOX1NTUFJRLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMTNRLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9QUkJTMzFRLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9TUVVBUkVfTlJaLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9TUVVBUkVfUEFNNCxcbitcdFBIWV9URVNUX1BBVFRFUk5fVFhfTElORUFSSVRZLFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9TQ1JBTUJMRURfSURMRSxcbitcdFBIWV9URVNUX1BBVFRFUk5fSzI4XzUsXG4rXHRQSFlfVEVTVF9QQVRURVJOX0syOF83LFxuK1xuK1x0X19QSFlfVEVTVF9QQVRURVJOX0NPVU5ULFxuK1x0UEhZX1RFU1RfUEFUVEVSTl9NQVggPSAoX19QSFlfVEVTVF9QQVRURVJOX0NPVU5UIC0gMSlcbit9O1xuK1xuKy8qIFBIWSB0ZXN0IEJFUlQgYWN0aW9ucyAqL1xuK2VudW0gcGh5X3Rlc3RfYWN0aW9uIHtcbitcdFBIWV9URVNUX0FDVElPTl9OT05FLFxuK1x0UEhZX1RFU1RfQUNUSU9OX1NUQVJULFxuK1x0UEhZX1RFU1RfQUNUSU9OX1NUT1AsXG4rXG4rXHRfX1BIWV9URVNUX0FDVElPTl9DT1VOVCxcbitcdFBIWV9URVNUX0FDVElPTl9NQVggPSAoX19QSFlfVEVTVF9BQ1RJT05fQ09VTlQgLSAxKVxuK307XG4rXG4rLyogQXR0cmlidXRlcyBvZiBwaHktdGVzdC1nZXQgLyBwaHktdGVzdC1hY3QgbWVzc2FnZXMgKi9cbitlbnVtIHtcbitcdEVUSFRPT0xfQV9QSFlfVEVTVF9VTlNQRUMsXG4rXHRFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSLFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lELFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0xBTkUsXG4rXHRFVEhUT09MX0FfUEhZX1RFU1RfVFhfUEFUVEVSTixcbitcdEVUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOLFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0JFUlRfQUNUSU9OLFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0lOSkVDVF9FUlJPUl9DT1VOVCxcbitcdEVUSFRPT0xfQV9QSFlfVEVTVF9BQ1RJVkVfVEVTVFMsXG4rXHRFVEhUT09MX0FfUEhZX1RFU1RfQ0hFQ0tFUl9MT0NLLFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX0VSUk9SX0NPVU5ULFxuK1x0RVRIVE9PTF9BX1BIWV9URVNUX1RPVEFMX0JJVFNfU0VOVCxcbitcbitcdF9fRVRIVE9PTF9BX1BIWV9URVNUX0NOVCxcbitcdEVUSFRPT0xfQV9QSFlfVEVTVF9NQVggPSAoX19FVEhUT09MX0FfUEhZX1RFU1RfQ05UIC0gMSlcbit9O1xuK1xuICNlbmRpZiAvKiBfVUFQSV9MSU5VWF9FVEhUT09MX05FVExJTktfR0VORVJBVEVEX0ggKi9cbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9NYWtlZmlsZSBiL25ldC9ldGh0b29sL01ha2VmaWxlXG5pbmRleCA2MjljMTA5MTY2NzBlLi43ZGQyYzU2MjRjZWRmIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvTWFrZWZpbGVcbisrKyBiL25ldC9ldGh0b29sL01ha2VmaWxlXG5AQCAtOSw0ICs5LDQgQEAgZXRodG9vbF9ubC15XHQ6PSBuZXRsaW5rLm8gYml0c2V0Lm8gc3Ryc2V0Lm8gbGlua2luZm8ubyBsaW5rbW9kZXMubyByc3MubyBcXFxuIFx0XHQgICBjaGFubmVscy5vIGNvYWxlc2NlLm8gcGF1c2UubyBlZWUubyB0c2luZm8ubyBjYWJsZXRlc3QubyBcXFxuIFx0XHQgICB0dW5uZWxzLm8gZmVjLm8gZWVwcm9tLm8gc3RhdHMubyBwaGNfdmNsb2Nrcy5vIG1tLm8gXFxcbiBcdFx0ICAgbW9kdWxlLm8gY21pc19md191cGRhdGUubyBjbWlzX2NkYi5vIHBzZS1wZC5vIHBsY2EubyBcXFxuLVx0XHQgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vXG4rXHRcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm8gaW50Zl9jYXBzLm8gcGh5dGVzdC5vXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvaW50Zl9jYXBzLmMgYi9uZXQvZXRodG9vbC9pbnRmX2NhcHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmU0NWNjYzRiODhjOWZcbi0tLSAvZGV2L251bGxcbisrKyBiL25ldC9ldGh0b29sL2ludGZfY2Fwcy5jXG5AQCAtMCwwICsxLDEzMCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbitcbisjaW5jbHVkZSBcIm5ldGxpbmsuaFwiXG4rI2luY2x1ZGUgXCJjb21tb24uaFwiXG4rXG4rc3RydWN0IGludGZfY2Fwc19yZXFfaW5mbyB7XG4rXHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTtcbit9O1xuK1xuK3N0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSB7XG4rXHRzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSBiYXNlO1xuK1x0c3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzIGNhcHM7XG4rfTtcbitcbisjZGVmaW5lIElOVEZfQ0FQU19SRVBEQVRBKF9fcmVwbHlfYmFzZSkgXFxcbitcdGNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSwgYmFzZSlcbitcbitjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9pbnRmX2NhcHNfZ2V0X3BvbGljeVtFVEhUT09MX0FfSU5URl9DQVBTX0hFQURFUiArIDFdID0ge1xuK1x0W0VUSFRPT0xfQV9JTlRGX0NBUFNfSEVBREVSXSA9XG4rXHRcdE5MQV9QT0xJQ1lfTkVTVEVEKGV0aG5sX2hlYWRlcl9wb2xpY3kpLFxuK307XG4rXG4rc3RhdGljIGludCBpbnRmX2NhcHNfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9iYXNlLFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhICpkYXRhID0gSU5URl9DQVBTX1JFUERBVEEocmVwbHlfYmFzZSk7XG4rXHRpbnQgbGVuID0gMDtcbitcdHUzMiBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGF0YS1cdTAwM2VjYXBzLm51bV9ibG9ja3M7IGkrKykge1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoMCk7XHRcdC8qIG5lc3RlZCBibG9jayAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogaWQgKi9cbitcdFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIGNvbXBvbmVudCAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0Lyogc3VibGF5ZXIgKi9cbitcdFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIGluc3RhbmNlICovXG4rXHRcdGxlbiArPSBubGFfdG90YWxfc2l6ZShJTlRGX0JMT0NLX05BTUVfTEVOKTsgLyogbmFtZSAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU4KSk7XHQvKiBkZXB0aCAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogbGFuZXMgKi9cbitcdFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIGxvb3BiYWNrX3N1cHBvcnRlZCAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1x0LyogdHhfcGF0dGVybnMgKi9cbitcdFx0bGVuICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcdC8qIHJ4X3BhdHRlcm5zICovXG4rXHRcdGxlbiArPSBubGFfdG90YWxfc2l6ZSgwKTtcdFx0LyogZXJyb3JfaW5qZWN0IChmbGFnKSAqL1xuK1x0XHRsZW4gKz0gbmxhX3RvdGFsX3NpemUoMCk7XHRcdC8qIGJlcnQgKGZsYWcpICovXG4rXHR9XG4rXG4rXHQvKiBvdXRlciBCTE9DS1MgbmVzdCAqL1xuK1x0bGVuICs9IG5sYV90b3RhbF9zaXplKDApO1xuK1xuK1x0cmV0dXJuIGxlbjtcbit9XG4rXG4rc3RhdGljIGludCBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4rXHRcdFx0XHQgIHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlLFxuK1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuK3tcbitcdHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSAqZGF0YSA9IElOVEZfQ0FQU19SRVBEQVRBKHJlcGx5X2Jhc2UpO1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJlcGx5X2Jhc2UtXHUwMDNlZGV2O1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2ludGZfY2FwcylcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0dXJuIGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfaW50Zl9jYXBzKGRldiwgXHUwMDI2ZGF0YS1cdTAwM2VjYXBzKTtcbit9XG4rXG4rc3RhdGljIGludCBpbnRmX2NhcHNfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcbitcdFx0XHRcdGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSAqZGF0YSA9IElOVEZfQ0FQU19SRVBEQVRBKHJlcGx5X2Jhc2UpO1xuK1x0c3RydWN0IG5sYXR0ciAqYmxvY2tzX2F0dHI7XG4rXHR1MzIgaTtcbitcbitcdGJsb2Nrc19hdHRyID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBFVEhUT09MX0FfSU5URl9DQVBTX0JMT0NLUyk7XG4rXHRpZiAoIWJsb2Nrc19hdHRyKVxuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGF0YS1cdTAwM2VjYXBzLm51bV9ibG9ja3M7IGkrKykge1xuK1x0XHRjb25zdCBzdHJ1Y3QgZXRodG9vbF9pbnRmX2Jsb2NrICpiID0gXHUwMDI2ZGF0YS1cdTAwM2VjYXBzLmJsb2Nrc1tpXTtcbitcdFx0c3RydWN0IG5sYXR0ciAqYmxvY2tfYXR0cjtcbitcbitcdFx0YmxvY2tfYXR0ciA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgMCk7XG4rXHRcdGlmICghYmxvY2tfYXR0cilcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcbitcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfSUQsIGItXHUwMDNlaWQpIHx8XG4rXHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0NPTVBPTkVOVCxcbitcdFx0XHRcdGItXHUwMDNlY29tcG9uZW50KSB8fFxuK1x0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19TVUJMQVlFUixcbitcdFx0XHRcdGItXHUwMDNlc3VibGF5ZXIpIHx8XG4rXHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0lOU1RBTkNFLFxuK1x0XHRcdFx0Yi1cdTAwM2VpbnN0YW5jZSkgfHxcbitcdFx0ICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTkFNRSwgYi1cdTAwM2VuYW1lKSB8fFxuK1x0XHQgICAgbmxhX3B1dF91OChza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX0RFUFRILCBiLVx1MDAzZWRlcHRoKSB8fFxuK1x0XHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19MQU5FUywgYi1cdTAwM2VsYW5lcykgfHxcbitcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfTE9PUEJBQ0tfU1VQUE9SVEVELFxuK1x0XHRcdFx0Yi1cdTAwM2Vsb29wYmFja19zdXBwb3J0ZWQpIHx8XG4rXHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX1RYX1BBVFRFUk5TLFxuK1x0XHRcdFx0Yi1cdTAwM2VzdXBwb3J0ZWRfdHhfcGF0dGVybnMpIHx8XG4rXHRcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9JTlRGX0JMT0NLX1JYX1BBVFRFUk5TLFxuK1x0XHRcdFx0Yi1cdTAwM2VzdXBwb3J0ZWRfcnhfcGF0dGVybnMpKVxuK1x0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuK1x0XHRpZiAoYi1cdTAwM2VlcnJvcl9pbmplY3Rfc3VwcG9ydGVkIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbmxhX3B1dF9mbGFnKHNrYiwgRVRIVE9PTF9BX0lOVEZfQkxPQ0tfRVJST1JfSU5KRUNUKSlcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcdFx0aWYgKGItXHUwMDNlYmVydF9zdXBwb3J0ZWQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBubGFfcHV0X2ZsYWcoc2tiLCBFVEhUT09MX0FfSU5URl9CTE9DS19CRVJUKSlcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbitcbitcdFx0bmxhX25lc3RfZW5kKHNrYiwgYmxvY2tfYXR0cik7XG4rXHR9XG4rXG4rXHRubGFfbmVzdF9lbmQoc2tiLCBibG9ja3NfYXR0cik7XG4rXHRyZXR1cm4gMDtcbitcbitubGFfcHV0X2ZhaWx1cmU6XG4rXHRubGFfbmVzdF9jYW5jZWwoc2tiLCBibG9ja3NfYXR0cik7XG4rXHRyZXR1cm4gLUVNU0dTSVpFO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfaW50Zl9jYXBzX3JlcXVlc3Rfb3BzID0ge1xuK1x0LnJlcXVlc3RfY21kXHQ9IEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVQsXG4rXHQucmVwbHlfY21kXHQ9IEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRfUkVQTFksXG4rXHQuaGRyX2F0dHJcdD0gRVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIsXG4rXHQucmVxX2luZm9fc2l6ZVx0PSBzaXplb2Yoc3RydWN0IGludGZfY2Fwc19yZXFfaW5mbyksXG4rXHQucmVwbHlfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbnRmX2NhcHNfcmVwbHlfZGF0YSksXG4rXHQucHJlcGFyZV9kYXRhXHQ9IGludGZfY2Fwc19wcmVwYXJlX2RhdGEsXG4rXHQucmVwbHlfc2l6ZVx0PSBpbnRmX2NhcHNfcmVwbHlfc2l6ZSxcbitcdC5maWxsX3JlcGx5XHQ9IGludGZfY2Fwc19maWxsX3JlcGx5LFxuK307XG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5jIGIvbmV0L2V0aHRvb2wvbmV0bGluay5jXG5pbmRleCAxYWYzOTViNTQzMzBlLi41NmU1YzgxMTQ1NGJiIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvbmV0bGluay5jXG4rKysgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmNcbkBAIC00MzEsNiArNDMxLDggQEAgZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tfX0VUSFRPT0xfTVNHX1VTRVJfQ05UXSA9IHtcbiBcdFtFVEhUT09MX01TR19UU0NPTkZJR19TRVRdXHQ9IFx1MDAyNmV0aG5sX3RzY29uZmlnX3JlcXVlc3Rfb3BzLFxuIFx0W0VUSFRPT0xfTVNHX1BIWV9HRVRdXHRcdD0gXHUwMDI2ZXRobmxfcGh5X3JlcXVlc3Rfb3BzLFxuIFx0W0VUSFRPT0xfTVNHX01TRV9HRVRdXHRcdD0gXHUwMDI2ZXRobmxfbXNlX3JlcXVlc3Rfb3BzLFxuK1x0W0VUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVRdXHQ9IFx1MDAyNmV0aG5sX2ludGZfY2Fwc19yZXF1ZXN0X29wcyxcbitcdFtFVEhUT09MX01TR19QSFlfVEVTVF9HRVRdXHQ9IFx1MDAyNmV0aG5sX3BoeV90ZXN0X3JlcXVlc3Rfb3BzLFxuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBldGhubF9kdW1wX2N0eCAqZXRobmxfZHVtcF9jb250ZXh0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbkBAIC0xNTcyLDYgKzE1NzQsMjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBldGh0b29sX2dlbmxfb3BzW10gPSB7XG4gXHRcdC5wb2xpY3kgPSBldGhubF9tc2VfZ2V0X3BvbGljeSxcbiBcdFx0Lm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX21zZV9nZXRfcG9saWN5KSAtIDEsXG4gXHR9LFxuK1x0e1xuK1x0XHQuY21kXHQ9IEVUSFRPT0xfTVNHX0lOVEZfQ0FQU19HRVQsXG4rXHRcdC5kb2l0XHQ9IGV0aG5sX2RlZmF1bHRfZG9pdCxcbitcdFx0LnN0YXJ0XHQ9IGV0aG5sX2RlZmF1bHRfc3RhcnQsXG4rXHRcdC5kdW1waXRcdD0gZXRobmxfZGVmYXVsdF9kdW1waXQsXG4rXHRcdC5kb25lXHQ9IGV0aG5sX2RlZmF1bHRfZG9uZSxcbitcdFx0LnBvbGljeSA9IGV0aG5sX2ludGZfY2Fwc19nZXRfcG9saWN5LFxuK1x0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3kpIC0gMSxcbitcdH0sXG4rXHR7XG4rXHRcdC5jbWRcdD0gRVRIVE9PTF9NU0dfUEhZX1RFU1RfR0VULFxuK1x0XHQuZG9pdFx0PSBldGhubF9kZWZhdWx0X2RvaXQsXG4rXHRcdC5wb2xpY3kgPSBldGhubF9waHlfdGVzdF9nZXRfcG9saWN5LFxuK1x0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcGh5X3Rlc3RfZ2V0X3BvbGljeSkgLSAxLFxuK1x0fSxcbitcdHtcbitcdFx0LmNtZFx0PSBFVEhUT09MX01TR19QSFlfVEVTVF9BQ1QsXG4rXHRcdC5mbGFnc1x0PSBHRU5MX1VOU19BRE1JTl9QRVJNLFxuK1x0XHQuZG9pdFx0PSBldGhubF9hY3RfcGh5X3Rlc3QsXG4rXHRcdC5wb2xpY3kgPSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5LFxuK1x0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcGh5X3Rlc3RfYWN0X3BvbGljeSkgLSAxLFxuK1x0fSxcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgZXRodG9vbF9ubF9tY2dycHNbXSA9IHtcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmggYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbmluZGV4IDNlOTY5YTA3MGY5ZmUuLjFjYWJhNjBkODNjNDMgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxuQEAgLTQ3NCw2ICs0NzQsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX21tX3JlcXVlc3Rfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcGh5X3JlcXVlc3Rfb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tc2VfcmVxdWVzdF9vcHM7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9pbnRmX2NhcHNfcmVxdWVzdF9vcHM7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcztcbiBcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtFVEhUT09MX0FfSEVBREVSX0ZMQUdTICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lfc3RhdHNbRVRIVE9PTF9BX0hFQURFUl9GTEFHUyArIDFdO1xuQEAgLTUzMCw2ICs1MzIsMTEgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfSEVBREVSICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX2dldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX0hFQURFUiArIDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19zZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19NQVggKyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfbXNlX2dldF9wb2xpY3lbRVRIVE9PTF9BX01TRV9IRUFERVIgKyAxXTtcbitleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaW50Zl9jYXBzX2dldF9wb2xpY3lbRVRIVE9PTF9BX0lOVEZfQ0FQU19IRUFERVIgKyAxXTtcbitleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcGh5X3Rlc3RfZ2V0X3BvbGljeVtFVEhUT09MX0FfUEhZX1RFU1RfTEFORSArIDFdO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9NQVggKyAxXTtcbitcbitpbnQgZXRobmxfYWN0X3BoeV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIFxuIGludCBldGhubF9zZXRfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gaW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BoeXRlc3QuYyBiL25ldC9ldGh0b29sL3BoeXRlc3QuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmRlZGNkMDM2YjdjMmVcbi0tLSAvZGV2L251bGxcbisrKyBiL25ldC9ldGh0b29sL3BoeXRlc3QuY1xuQEAgLTAsMCArMSwxNzEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rXG4rI2luY2x1ZGUgXCJuZXRsaW5rLmhcIlxuKyNpbmNsdWRlIFwiY29tbW9uLmhcIlxuK1xuK3N0cnVjdCBwaHlfdGVzdF9yZXFfaW5mbyB7XG4rXHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTtcbit9O1xuK1xuK3N0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhIHtcbitcdHN0cnVjdCBldGhubF9yZXBseV9kYXRhIGJhc2U7XG4rXHRzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCB0ZXN0O1xuK307XG4rXG4rI2RlZmluZSBQSFlfVEVTVF9SRVBEQVRBKF9fcmVwbHlfYmFzZSkgXFxcbitcdGNvbnRhaW5lcl9vZihfX3JlcGx5X2Jhc2UsIHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhLCBiYXNlKVxuK1xuKy8qIFBIWV9URVNUX0dFVCAqL1xuK1xuK2NvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV90ZXN0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkUgKyAxXSA9IHtcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXVx0PSBOTEFfUE9MSUNZX05FU1RFRChldGhubF9oZWFkZXJfcG9saWN5KSxcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4rXHRbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4rfTtcbitcbitzdGF0aWMgaW50IHBoeV90ZXN0X3JlcGx5X3NpemUoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcbitcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UpXG4re1xuK1x0cmV0dXJuIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXHQvKiBibG9ja19pZCAqL1xuK1x0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXHQvKiBsYW5lICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcdC8qIHR4X3BhdHRlcm4gKi9cbitcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1x0LyogcnhfcGF0dGVybiAqL1xuK1x0ICAgICAgIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArXHQvKiBhY3RpdmVfdGVzdHMgKi9cbitcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSAgK1x0LyogY2hlY2tlcl9sb2NrICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU2NCkpICtcdC8qIGVycm9yX2NvdW50ICovXG4rXHQgICAgICAgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU2NCkpO1x0LyogdG90YWxfYml0c19zZW50ICovXG4rfVxuK1xuK3N0YXRpYyBpbnQgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4rXHRcdFx0XHQgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UsXG4rXHRcdFx0XHQgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbit7XG4rXHRzdHJ1Y3QgcGh5X3Rlc3RfcmVwbHlfZGF0YSAqZGF0YSA9IFBIWV9URVNUX1JFUERBVEEocmVwbHlfYmFzZSk7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmVwbHlfYmFzZS1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVx1MDAzZWF0dHJzO1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X3BoeV90ZXN0KVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRtZW1zZXQoXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0LCAwLCBzaXplb2YoZGF0YS1cdTAwM2V0ZXN0KSk7XG4rXG4rXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSkge1xuK1x0XHRkYXRhLVx1MDAzZXRlc3QuYmxvY2tfaWQgPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfQkxPQ0tfSURdKTtcbitcdFx0ZGF0YS1cdTAwM2V0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfQkxPQ0tfSUQ7XG4rXHR9XG4rXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKSB7XG4rXHRcdGRhdGEtXHUwMDNldGVzdC5sYW5lID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKTtcbitcdFx0ZGF0YS1cdTAwM2V0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfTEFORTtcbitcdH1cbitcbitcdHJldHVybiBkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X3BoeV90ZXN0KGRldiwgXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0KTtcbit9XG4rXG4rc3RhdGljIGludCBwaHlfdGVzdF9maWxsX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhICpkYXRhID0gUEhZX1RFU1RfUkVQREFUQShyZXBseV9iYXNlKTtcbitcdGNvbnN0IHN0cnVjdCBldGh0b29sX3BoeV90ZXN0ICp0ID0gXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0O1xuK1xuK1x0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lELCB0LVx1MDAzZWJsb2NrX2lkKSB8fFxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0xBTkUsIHQtXHUwMDNlbGFuZSkgfHxcbitcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOLCB0LVx1MDAzZXR4X3BhdHRlcm4pIHx8XG4rXHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTiwgdC1cdTAwM2VyeF9wYXR0ZXJuKSB8fFxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0FDVElWRV9URVNUUyxcbitcdFx0XHR0LVx1MDAzZWFjdGl2ZV90ZXN0cykgfHxcbitcdCAgICBubGFfcHV0X3U4KHNrYiwgRVRIVE9PTF9BX1BIWV9URVNUX0NIRUNLRVJfTE9DSywgdC1cdTAwM2VjaGVja2VyX2xvY2spIHx8XG4rXHQgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBFVEhUT09MX0FfUEhZX1RFU1RfRVJST1JfQ09VTlQsXG4rXHRcdFx0ICAgICAgdC1cdTAwM2VlcnJvcl9jb3VudCwgRVRIVE9PTF9BX1BIWV9URVNUX1VOU1BFQykgfHxcbitcdCAgICBubGFfcHV0X3U2NF82NGJpdChza2IsIEVUSFRPT0xfQV9QSFlfVEVTVF9UT1RBTF9CSVRTX1NFTlQsXG4rXHRcdFx0ICAgICAgdC1cdTAwM2V0b3RhbF9iaXRzX3NlbnQsIEVUSFRPT0xfQV9QSFlfVEVTVF9VTlNQRUMpKVxuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfdGVzdF9yZXF1ZXN0X29wcyA9IHtcbitcdC5yZXF1ZXN0X2NtZFx0PSBFVEhUT09MX01TR19QSFlfVEVTVF9HRVQsXG4rXHQucmVwbHlfY21kXHQ9IEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVF9SRVBMWSxcbitcdC5oZHJfYXR0clx0PSBFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSLFxuK1x0LnJlcV9pbmZvX3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBwaHlfdGVzdF9yZXFfaW5mbyksXG4rXHQucmVwbHlfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBwaHlfdGVzdF9yZXBseV9kYXRhKSxcbitcdC5wcmVwYXJlX2RhdGFcdD0gcGh5X3Rlc3RfcHJlcGFyZV9kYXRhLFxuK1x0LnJlcGx5X3NpemVcdD0gcGh5X3Rlc3RfcmVwbHlfc2l6ZSxcbitcdC5maWxsX3JlcGx5XHQ9IHBoeV90ZXN0X2ZpbGxfcmVwbHksXG4rfTtcbitcbisvKiBQSFlfVEVTVF9BQ1QgKi9cbitcbitjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfdGVzdF9hY3RfcG9saWN5W0VUSFRPT0xfQV9QSFlfVEVTVF9NQVggKyAxXSA9IHtcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXVx0XHQ9IE5MQV9QT0xJQ1lfTkVTVEVEKGV0aG5sX2hlYWRlcl9wb2xpY3kpLFxuK1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9CTE9DS19JRF1cdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuK1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9MQU5FXVx0XHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXG4rXHRbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dXHRcdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl1cdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuK1x0W0VUSFRPT0xfQV9QSFlfVEVTVF9CRVJUX0FDVElPTl1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbitcdFtFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuK307XG4rXG4raW50IGV0aG5sX2FjdF9waHlfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuK3tcbitcdHN0cnVjdCBldGhubF9yZXFfaW5mbyByZXFfaW5mbyA9IHt9O1xuK1x0c3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby1cdTAwM2VhdHRycztcbitcdHN0cnVjdCBldGh0b29sX3BoeV90ZXN0IHRlc3QgPSB7fTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoXHUwMDI2cmVxX2luZm8sXG4rXHRcdFx0XHRcdCB0YltFVEhUT09MX0FfUEhZX1RFU1RfSEVBREVSXSxcbitcdFx0XHRcdFx0IGdlbmxfaW5mb19uZXQoaW5mbyksIGluZm8tXHUwMDNlZXh0YWNrLFxuK1x0XHRcdFx0XHQgdHJ1ZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0ZGV2ID0gcmVxX2luZm8uZGV2O1xuK1xuK1x0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlc2V0X3BoeV90ZXN0KSB7XG4rXHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuK1x0XHRnb3RvIG91dF9kZXY7XG4rXHR9XG4rXG4rXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSkge1xuK1x0XHR0ZXN0LmJsb2NrX2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0JMT0NLX0lEXSk7XG4rXHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9CTE9DS19JRDtcbitcdH1cbitcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfTEFORV0pIHtcbitcdFx0dGVzdC5sYW5lID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BIWV9URVNUX0xBTkVdKTtcbitcdFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0xBTkU7XG4rXHR9XG4rXHRpZiAodGJbRVRIVE9PTF9BX1BIWV9URVNUX1RYX1BBVFRFUk5dKSB7XG4rXHRcdHRlc3QudHhfcGF0dGVybiA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9UWF9QQVRURVJOXSk7XG4rXHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9UWF9QQVRURVJOO1xuK1x0fVxuK1x0aWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9SWF9QQVRURVJOXSkge1xuK1x0XHR0ZXN0LnJ4X3BhdHRlcm4gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfUlhfUEFUVEVSTl0pO1xuK1x0XHR0ZXN0LmNtZCB8PSBQSFlfVEVTVF9DTURfUlhfUEFUVEVSTjtcbitcdH1cbitcdGlmICh0YltFVEhUT09MX0FfUEhZX1RFU1RfQkVSVF9BQ1RJT05dKSB7XG4rXHRcdHRlc3QuYmVydF9hY3Rpb24gPSBubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfQkVSVF9BQ1RJT05dKTtcbitcdFx0dGVzdC5jbWQgfD0gUEhZX1RFU1RfQ01EX0JFUlRfQUNUSU9OO1xuK1x0fVxuK1x0aWYgKHRiW0VUSFRPT0xfQV9QSFlfVEVTVF9JTkpFQ1RfRVJST1JfQ09VTlRdKSB7XG4rXHRcdHRlc3QuaW5qZWN0X2Vycm9yX2NvdW50ID1cbitcdFx0XHRubGFfZ2V0X3UzMih0YltFVEhUT09MX0FfUEhZX1RFU1RfSU5KRUNUX0VSUk9SX0NPVU5UXSk7XG4rXHRcdHRlc3QuY21kIHw9IFBIWV9URVNUX0NNRF9JTkpFQ1RfQ09VTlQ7XG4rXHR9XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdHJldCA9IGV0aG5sX29wc19iZWdpbihkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBvdXRfcnRubDtcbitcbitcdHJldCA9IGRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VzZXRfcGh5X3Rlc3QoZGV2LCBcdTAwMjZ0ZXN0KTtcbitcdGV0aG5sX29wc19jb21wbGV0ZShkZXYpO1xuK1xuK291dF9ydG5sOlxuK1x0cnRubF91bmxvY2soKTtcbitvdXRfZGV2OlxuK1x0ZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9wdXQoXHUwMDI2cmVxX2luZm8pO1xuK1x0cmV0dXJuIHJldDtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzoyMC4yNzMyODk4NTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUwNzE3MjU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldyBldGh0b29sIE5ldGxpbmsgQ29tbWFuZHMqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgdGhpcyBuZXcgcGF0Y2ggc2VyaWVzIGFkZGluZyBhIGZldyBldGh0b29sIG5ldGxpbmsgY29tbWFuZHM6IGBFVEhUT09MX01TR19JTlRGX0NBUFNfR0VUYCwgYEVUSFRPT0xfTVNHX1BIWV9URVNUX0dFVGAsIGFuZCBgRVRIVE9PTF9NU0dfUEhZX1RFU1RfQUNUYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgdXNpbmcgYHN0cnVjdCBldGh0b29sX2ludGZfY2Fwc2AgYW5kIGBzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdGAgdG8gaGFuZGxlIGNvbW11bmljYXRpb24gd2l0aCB0aGUga2VybmVsIGRyaXZlcnMuIEknbSB0YWtpbmcgYSBsb29rIGF0IGBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhYCBpbiBgbmV0L2V0aHRvb2wvaW50Zl9jYXBzLmNgIHRvIHNlZSBob3cgaXQgd29ya3MuXG5cblNwZWNpZmljYWxseSwgdGhpcyBzbmlwcGV0OlxuXG5gYGBjXG5zdGF0aWMgaW50IGludGZfY2Fwc19wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcblx0XHRcdFx0ICBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfYmFzZSxcblx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxue1xuXHRzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGEgKmRhdGEgPSBJTlRGX0NBUFNfUkVQREFUQShyZXBseV9iYXNlKTtcblx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJlcGx5X2Jhc2UtXHUwMDNlZGV2O1xuXG5cdGlmICghZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9pbnRmX2NhcHMpXG5cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuXG5cdHJldHVybiBkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X2ludGZfY2FwcyhkZXYsIFx1MDAyNmRhdGEtXHUwMDNlY2Fwcyk7XG59XG5gYGBcblxuV2FpdCBhIHNlY29uZOKApiBgZGF0YS1cdTAwM2VjYXBzYCBpcyAqZGlyZWN0bHkqIHBhc3NlZCB0byBgZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9pbnRmX2NhcHMoZGV2LCBcdTAwMjZkYXRhLVx1MDAzZWNhcHMpYC4gVGhlIGRyaXZlcidzIGBnZXRfaW50Zl9jYXBzYCBmdW5jdGlvbiBpcyBnb2luZyB0byB3cml0ZSBpbnRvIHRoYXQgYGRhdGEtXHUwMDNlY2Fwc2Agc3RydWN0LiBCdXQgaXMgdGhhdCBgZGF0YS1cdTAwM2VjYXBzYCAqaW5pdGlhbGl6ZWQqIGJlZm9yZSB0aGUgY2FsbD8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGtub3cuIFdoZXJlIGlzIGl0IGdldHRpbmcgYWxsb2NhdGVkP1xuXG5Pa2F5LCBzbyBgZGF0YWAgaXMgcGFydCBvZiBgc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhYCwgd2hpY2ggaXMgYWxsb2NhdGVkIGJ5IHRoZSBldGh0b29sIG5ldGxpbmsgZnJhbWV3b3JrLiBSaWdodCwgbGV0IG1lIGNoZWNrIGhvdyB0aGUgYHJlcGx5X2RhdGFgIGl0c2VsZiBpcyBhbGxvY2F0ZWQgd2l0aGluIHRoZSBmcmFtZXdvcmsgaW4gYG5ldC9ldGh0b29sL25ldGxpbmsuY2AuIEkgc2hvdWxkIHByb2JhYmx5IHVzZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gZmluZCBvdXQgd2hlcmUgYHJlcGx5X2RhdGFgIGlzIGFsbG9jYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMTAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzoyNy43ODA0NjU0NzVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMTM2MDU5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvYy4qcmVwbHlfZGF0YVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZXRodG9vbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2V0aHRvb2wvbmV0bGluay5jPTUwOT1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTUyOS1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NTMwOlxcdHJlcGx5X2RhdGEgPSBrbWFsbG9jKG9wcy1cXHUwMDNlcmVwbHlfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNTMxLVxcdGlmICghcmVwbHlfZGF0YSkge1xcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jPTY3Mj1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTY5MC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NjkxOlxcdHJlcGx5X2RhdGEgPSBrbWFsbG9jKG9wcy1cXHUwMDNlcmVwbHlfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNjkyLVxcdGlmICghcmVwbHlfZGF0YSkge1xcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jPTcyNT1zdGF0aWMgaW50IGV0aG5sX3BlcnBoeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNzQ0LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo3NDU6XFx0cmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVxcdTAwM2VyZXBseV9kYXRhX3NpemUsIEdGUF9LRVJORUwpO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYy03NDYtXFx0aWYgKCFyZXBseV9kYXRhKSB7XFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM9OTk4PXN0YXRpYyB2b2lkIGV0aG5sX2RlZmF1bHRfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsXFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtMTAxOS1cXHRcXHRyZXR1cm47XFxubmV0L2V0aHRvb2wvbmV0bGluay5jOjEwMjA6XFx0cmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVxcdTAwM2VyZXBseV9kYXRhX3NpemUsIEdGUF9LRVJORUwpO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYy0xMDIxLVxcdGlmICghcmVwbHlfZGF0YSkge1xcbi0tXFxubmV0L2V0aHRvb2wvcnNzLmM9MTE4PXN0YXRpYyBpbnRcXG5uZXQvZXRodG9vbC9yc3MuYzoxMTk6cnNzX2dldF9kYXRhX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCByc3NfcmVwbHlfZGF0YSAqZGF0YSlcXG5uZXQvZXRodG9vbC9yc3MuYy0xMjAte1xcbi0tXFxubmV0L2V0aHRvb2wvdHNjb25maWcuYz0xOTk9c3RhdGljIGludCB0c2NvbmZpZ19zZW5kX3JlcGx5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jLTIxMC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jOjIxMTpcXHRyZXBseV9kYXRhID0ga21hbGxvY19vYmooKnJlcGx5X2RhdGEpO1xcbm5ldC9ldGh0b29sL3RzY29uZmlnLmMtMjEyLVxcdGlmICghcmVwbHlfZGF0YSkge1xcbi0tXFxubmV0L2V0aHRvb2wvdHNpbmZvLmM9NTAwPWludCBldGhubF90c2luZm9fc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2V0aHRvb2wvdHNpbmZvLmMtNTEzLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC9ldGh0b29sL3RzaW5mby5jOjUxNDpcXHRyZXBseV9kYXRhID0ga3phbGxvY19vYmooKnJlcGx5X2RhdGEpO1xcbm5ldC9ldGh0b29sL3RzaW5mby5jLTUxNS1cXHRpZiAoIXJlcGx5X2RhdGEpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDc6MjguMTExODM3NzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkzODY4MjMxNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5pbml0aWFsaXplZCBNZW1vcnkgVnVsbmVyYWJpbGl0eSBpbiBldGh0b29sJ3MgSW50ZXJmYWNlIENhcGFiaWxpdGllcyBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgZXRodG9vbGAgaGFuZGxlcyBpbnRlcmZhY2UgY2FwYWJpbGl0aWVzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZXRobmxfZGVmYXVsdF9kb2l0YCBhbmQgYGV0aG5sX2RlZmF1bHRfc3RhcnRgIGZ1bmN0aW9ucy4gSSBzZWUgdGhhdCBgcmVwbHlfZGF0YWAgaXMgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jYCB3aXRob3V0IHRoZSBgX19HRlBfWkVST2AgZmxhZy4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZTogdGhlIGFsbG9jYXRlZCBtZW1vcnkgaXNuJ3QgemVyb2VkLCBtZWFuaW5nIGl0IGNvbnRhaW5zIHdoYXRldmVyIGdhcmJhZ2UgaGFwcGVuZWQgdG8gYmUgdGhlcmUgcHJldmlvdXNseSBvbiB0aGUgaGVhcC5cblxuVGhlbiwgSSBmb2N1c2VkIG9uIHRoZSBgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YWAgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlIGRyaXZlcidzIGBnZXRfaW50Zl9jYXBzYCBmdW5jdGlvbiwgcGFzc2luZyBpdCBhIHBvaW50ZXIgdG8gYSBgc3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhYC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGludGZfY2Fwc19wcmVwYXJlX2RhdGFgICpkb2Vzbid0KiB6ZXJvLWluaXRpYWxpemUgdGhlIGBkYXRhLVx1MDAzZWNhcHNgIHN0cnVjdHVyZSBiZWZvcmUgY2FsbGluZyB0aGUgZHJpdmVyLiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgdGhpcyBzdHJ1Y3R1cmUuXG5cblRoZSB2dWxuZXJhYmlsaXR5IHN0ZW1zIGZyb20gd2hhdCBoYXBwZW5zIGlmIHRoZSBkcml2ZXIncyBgZ2V0X2ludGZfY2Fwc2AgZnVuY3Rpb24gZG9lc24ndCBjb21wbGV0ZWx5IGluaXRpYWxpemUgdGhlIGBkYXRhLVx1MDAzZWNhcHNgIHN0cnVjdHVyZSwgcGVyaGFwcyBkdWUgdG8gYW4gZXJyb3IgY29uZGl0aW9uIG9yIGEgbGFjayBvZiBjb21wbGV0ZSBpbml0aWFsaXphdGlvbi4gSWYgaXQgZG9lc24ndCBpbml0aWFsaXplIGFsbCB0aGUgZmllbGRzLCBpbmNsdWRpbmcsIGltcG9ydGFudGx5LCBgbnVtX2Jsb2Nrc2AsIHRoZSB2YWx1ZXMgd2l0aGluIGBkYXRhLVx1MDAzZWNhcHNgIGFyZSBlc3NlbnRpYWxseSBnYXJiYWdlIGZyb20gdGhlIGhlYXAuIFRoZXNlIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGNhbiB0aGVuIGdldCBwYXNzZWQgdG8gdXNlciBzcGFjZS5cblxuU3BlY2lmaWNhbGx5LCB0aGUgYGludGZfY2Fwc19maWxsX3JlcGx5YCBmdW5jdGlvbiBpdGVyYXRlcyB0aHJvdWdoIGEgYGJsb2Nrc2AgYXJyYXkgYmFzZWQgb24gYGRhdGEtXHUwMDNlY2Fwcy5udW1fYmxvY2tzYC4gSWYgYG51bV9ibG9ja3NgIGlzIHVuaW5pdGlhbGl6ZWQsIGl0IGNvdWxkIGJlIGEgbGFyZ2UsIHJhbmRvbSB2YWx1ZSwgbGVhZGluZyB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgd2hlbiBhY2Nlc3NpbmcgdGhlIGBibG9ja3NgIGFycmF5IGFuZCBzZW5kaW5nIHRoYXQgdG8gdGhlIHVzZXIuXG5cbkhvd2V2ZXIsIGV2ZW4gaWYgdGhlIGRyaXZlciBjb3JyZWN0bHkgc2V0cyBgbnVtX2Jsb2Nrc2AsIGl0IG1pZ2h0IG5vdCBmdWxseSBpbml0aWFsaXplIGFsbCB0aGUgZmllbGRzIHdpdGhpbiB0aGUgYGJsb2Nrc2AgYXJyYXkuIFRoaXMgbWVhbnMgdGhhdCBpZiBgZ2V0X2ludGZfY2Fwc2AgZG9lc24ndCBmdWxseSBpbml0aWFsaXplIHRoZSBkYXRhLCB0aGUgY29udGVudHMgb2YgdGhlIGBibG9ja3NgIGFycmF5IChpbmNsdWRpbmcgdGhlIGBuYW1lYCBmaWVsZCwgd2hpY2ggaXMgdXNlZCB3aXRoIGBubGFfcHV0X3N0cmluZ2ApIGNvdWxkIGNvbnRhaW4gdW5pbml0aWFsaXplZCBkYXRhLiBUaGlzIG1pZ2h0IGNhdXNlIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBpZiB0aGUgbmFtZSBpcyBub3QgbnVsbCB0ZXJtaW5hdGVkIGFuZCB0aGVuIHVzZXIgc3BhY2UgbWF5IGFsc28gbGVhayBzdGFjayBvciBoZWFwIG1lbW9yeS5cblxuSSBjb25maXJtZWQgdGhhdCBgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YWAgZG9lcyAqbm90KiB6ZXJvIHRoZSBgZGF0YS1cdTAwM2VjYXBzYCBzdHJ1Y3R1cmUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdGhlIGRyaXZlciwgaW4gY29udHJhc3QgdG8gd2hhdCBoYXBwZW5zIGluIGBwaHlfdGVzdF9wcmVwYXJlX2RhdGFgLCB3aGljaCAqZG9lcyogaW5pdGlhbGl6ZSBpdHMgZGF0YS5cblxuVGhpcyBpcyBhIGNsYXNzaWMgdW5pbml0aWFsaXplZCBtZW1vcnkgaW5mby1sZWFrIHNpdHVhdGlvbiwgd2hlcmUga2VybmVsIG1lbW9yeSBlbmRzIHVwIGJlaW5nIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBwb3RlbnRpYWxseSBjb250YWluaW5nIHNlbnNpdGl2ZSBkYXRhLCBvciBjYXVzaW5nIGNyYXNoZXMuIEkgc2hvdWxkIGZpbGUgYSBLTVNBTiByZXBvcnQgZm9yIHRoaXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzQ5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzo0Ny40OTg2NjM1MjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0Mzk4Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlcGx5X2RhdGEgPSBrbWFsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9ldGh0b29sL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZXRodG9vbC9uZXRsaW5rLmM9NTA5PXN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNTI5LVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo1MzA6XFx0cmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVxcdTAwM2VyZXBseV9kYXRhX3NpemUsIEdGUF9LRVJORUwpO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYy01MzEtXFx0aWYgKCFyZXBseV9kYXRhKSB7XFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM9NjcyPXN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNjkwLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYzo2OTE6XFx0cmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVxcdTAwM2VyZXBseV9kYXRhX3NpemUsIEdGUF9LRVJORUwpO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYy02OTItXFx0aWYgKCFyZXBseV9kYXRhKSB7XFxuLS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM9NzI1PXN0YXRpYyBpbnQgZXRobmxfcGVycGh5X3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy03NDQtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubmV0L2V0aHRvb2wvbmV0bGluay5jOjc0NTpcXHRyZXBseV9kYXRhID0ga21hbGxvYyhvcHMtXFx1MDAzZXJlcGx5X2RhdGFfc2l6ZSwgR0ZQX0tFUk5FTCk7XFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTc0Ni1cXHRpZiAoIXJlcGx5X2RhdGEpIHtcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYz05OTg9c3RhdGljIHZvaWQgZXRobmxfZGVmYXVsdF9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy0xMDE5LVxcdFxcdHJldHVybjtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6MTAyMDpcXHRyZXBseV9kYXRhID0ga21hbGxvYyhvcHMtXFx1MDAzZXJlcGx5X2RhdGFfc2l6ZSwgR0ZQX0tFUk5FTCk7XFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTEwMjEtXFx0aWYgKCFyZXBseV9kYXRhKSB7XFxuLS1cXG5uZXQvZXRodG9vbC90c2NvbmZpZy5jPTE5OT1zdGF0aWMgaW50IHRzY29uZmlnX3NlbmRfcmVwbHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9ldGh0b29sL3RzY29uZmlnLmMtMjEwLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbm5ldC9ldGh0b29sL3RzY29uZmlnLmM6MjExOlxcdHJlcGx5X2RhdGEgPSBrbWFsbG9jX29iaigqcmVwbHlfZGF0YSk7XFxubmV0L2V0aHRvb2wvdHNjb25maWcuYy0yMTItXFx0aWYgKCFyZXBseV9kYXRhKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA3OjQ3LjU1MzA2OTgwN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDMxNDI5NDYwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbmluaXRpYWxpemVkIE1lbW9yeSBWdWxuZXJhYmlsaXR5IGluIG5ldGxpbmsgQXR0cmlidXRlcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIGFzIGV4cGVjdGVkLCBgcmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSwgR0ZQX0tFUk5FTCk7YCBpcyB1c2VkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGByZXBseV9kYXRhYCBpcyBqdXN0IHVuaW5pdGlhbGl6ZWQgaGVhcCBtZW1vcnksIGEgY2xhc3NpYyBzb3VyY2Ugb2YgcHJvYmxlbXMuXG5cblRoZSBgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YWAgZnVuY3Rpb24gaXMgd2hlcmUgbXkgYXR0ZW50aW9uIGlzIGRyYXduLiBTcGVjaWZpY2FsbHksIGl0IHBhc3NlcyBgZGF0YS1cdTAwM2VjYXBzYCB0byB0aGUgZHJpdmVyJ3MgYGdldF9pbnRmX2NhcHNgIGNhbGxiYWNrLiBNeSBjb25jZXJuIGlzIHRoYXQgaWYgdGhlIGRyaXZlciBkb2Vzbid0IGluaXRpYWxpemUgKmFsbCogdGhlIGZpZWxkcyBvZiBgZGF0YS1cdTAwM2VjYXBzYCwgc2F5IGBudW1fYmxvY2tzYCBvciBldmVuIGp1c3QgdGhlIGluZGl2aWR1YWwgZmllbGRzIHdpdGhpbiBgYmxvY2tzW11gLCB0aGVuIGBpbnRmX2NhcHNfZmlsbF9yZXBseWAgd2lsbCByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdoZW4gaXQgZ29lcyB0byBjb25zdHJ1Y3QgdGhlIG5ldGxpbmsgYXR0cmlidXRlcy4gRnVuY3Rpb25zIGxpa2UgYG5sYV9wdXRfdTMyYCwgYG5sYV9wdXRfc3RyaW5nYCwgZXRjLiwgd2lsbCBlZmZlY3RpdmVseSBsZWFrIHRoaXMgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UgdmlhIHRoZSBza2IuIEtNU0FOIGlzIGRldGVjdGluZyB0aGlzLCBhcyBpdCBzaG91bGQsIGJlY2F1c2UgS0FTQU4gd291bGRuJ3QgY2F0Y2ggaXQgc2luY2UgdGhlIG1lbW9yeSBpcyBib3RoIGFsbG9jYXRlZCBhbmQgd2l0aGluIGJvdW5kcy5cblxuSSBuZWVkZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gU28gSSB0aGVuIGV4YW1pbmVkIGBldGhubF9hY3RfcGh5X3Rlc3RgLlxuXG5gYGBjXG5pbnQgZXRobmxfYWN0X3BoeV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG57XG5cdHN0cnVjdCBldGhubF9yZXFfaW5mbyByZXFfaW5mbyA9IHt9O1xuXHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVx1MDAzZWF0dHJzO1xuXHRzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdCB0ZXN0ID0ge307XG5gYGBcblxuRm9ydHVuYXRlbHksIGB0ZXN0YCBpcyBpbml0aWFsaXplZCB0byB6ZXJvIChgPSB7fWApLCBzbyB0aGF0IG9uZSBpcyBzYWZlLlxuXG5UaGVuIG9uIHRvIGBwaHlfdGVzdF9wcmVwYXJlX2RhdGFgP1xuYGBgY1xuc3RhdGljIGludCBwaHlfdGVzdF9wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfYmFzZSxcblx0XHRcdFx0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9iYXNlLFxuXHRcdFx0XHQgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbntcblx0c3RydWN0IHBoeV90ZXN0X3JlcGx5X2RhdGEgKmRhdGEgPSBQSFlfVEVTVF9SRVBEQVRBKHJlcGx5X2Jhc2UpO1xuXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcmVwbHlfYmFzZS1cdTAwM2VkZXY7XG5cdHN0cnVjdCBubGF0dHIgKip0YiA9IGluZm8tXHUwMDNlYXR0cnM7XG5cblx0aWYgKCFkZXYtXHUwMDNlZXRodG9vbF9vcHMtXHUwMDNlZ2V0X3BoeV90ZXN0KVxuXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcblxuXHRtZW1zZXQoXHUwMDI2ZGF0YS1cdTAwM2V0ZXN0LCAwLCBzaXplb2YoZGF0YS1cdTAwM2V0ZXN0KSk7XG5gYGBcbkl0IGV4cGxpY2l0bHkgZG9lcyBgbWVtc2V0KFx1MDAyNmRhdGEtXHUwMDNldGVzdCwgMCwgc2l6ZW9mKGRhdGEtXHUwMDNldGVzdCkpO2AsIHNvIHRoYXQgbG9va3Mgc2FmZSB0b28uIEdvb2QuXG5cbkJ1dCB3YWl0LCBgaW50Zl9jYXBzX3ByZXBhcmVfZGF0YWAgaXMgdGhlIG9uZSB0byBmb2N1cyBvbiFcblxuYGBgY1xuc3RhdGljIGludCBpbnRmX2NhcHNfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2Jhc2UsXG5cdFx0XHRcdCAgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2Jhc2UsXG5cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbntcblx0c3RydWN0IGludGZfY2Fwc19yZXBseV9kYXRhICpkYXRhID0gSU5URl9DQVBTX1JFUERBVEEocmVwbHlfYmFzZSk7XG5cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSByZXBseV9iYXNlLVx1MDAzZWRldjtcblxuXHRpZiAoIWRldi1cdTAwM2VldGh0b29sX29wcy1cdTAwM2VnZXRfaW50Zl9jYXBzKVxuXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcblxuXHRyZXR1cm4gZGV2LVx1MDAzZWV0aHRvb2xfb3BzLVx1MDAzZWdldF9pbnRmX2NhcHMoZGV2LCBcdTAwMjZkYXRhLVx1MDAzZWNhcHMpO1xufVxuYGBgXG5cblRoZXJlJ3Mgbm8gYG1lbXNldGAgaGVyZSEgVGhhdCBtZWFucyB0aGUgYGRhdGFgIHN0cnVjdCwgYWxsb2NhdGVkIHVzaW5nIGBrbWFsbG9jYCBpbiBgZXRobmxfZGVmYXVsdF9kb2l0YCwgaXMgcGFzc2VkIHRvIGBnZXRfaW50Zl9jYXBzYC4gSWYgdGhlIGRyaXZlciAqZG9lc24ndCogZnVsbHkgaW5pdGlhbGl6ZSBgZGF0YS1cdTAwM2VjYXBzYCwgd2UgKndpbGwqIGxlYWsgdW5pbml0aWFsaXplZCBoZWFwIG1lbW9yeSB0byB1c2VyIHNwYWNlIHZpYSBgaW50Zl9jYXBzX2ZpbGxfcmVwbHlgLiBUaGlzIGlzIGEgZGVmaW5pdGUgdnVsbmVyYWJpbGl0eS5cblxuVGltZSB0byBkb3VibGUtY2hlY2sgYGV0aG5sX2RlZmF1bHRfZG9pdGAgdG8gbWFrZSBzdXJlIGl0J3Mgbm90IHNvbWVob3cgemVyb2luZyB0aGUgbWVtb3J5IHRoYXQncyBnZXR0aW5nIGFsbG9jYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MjUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6MDEuODY3MzY3NjU5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdHN0YXRpYyB2b2lkIGV0aG5sX2luaXRfcmVwbHlfZGF0YShzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSxcXG4gNTAxOlxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzICpvcHMsXFxuIDUwMjpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDUwMzpcXHR7XFxuIDUwNDpcXHRcXHRtZW1zZXQocmVwbHlfZGF0YSwgMCwgb3BzLVxcdTAwM2VyZXBseV9kYXRhX3NpemUpO1xcbiA1MDU6XFx0XFx0cmVwbHlfZGF0YS1cXHUwMDNlZGV2ID0gZGV2O1xcbiA1MDY6XFx0fVxcbiA1MDc6XFx0XFxuIDUwODpcXHQvKiBkZWZhdWx0IC1cXHUwMDNlZG9pdCgpIGhhbmRsZXIgZm9yIEdFVCB0eXBlIHJlcXVlc3RzICovXFxuIDUwOTpcXHRzdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiA1MTA6XFx0e1xcbiA1MTE6XFx0XFx0c3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGEgPSBOVUxMO1xcbiA1MTI6XFx0XFx0c3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyA9IE5VTEw7XFxuIDUxMzpcXHRcXHRjb25zdCB1OCBjbWQgPSBpbmZvLVxcdTAwM2VnZW5saGRyLVxcdTAwM2VjbWQ7XFxuIDUxNDpcXHRcXHRjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgKm9wcztcXG4gNTE1OlxcdFxcdGJvb2wgbmVlZF9ydG5sID0gZmFsc2U7XFxuIDUxNjpcXHRcXHRpbnQgaGRyX2xlbiwgcmVwbHlfbGVuO1xcbiA1MTc6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnJza2I7XFxuIDUxODpcXHRcXHR2b2lkICpyZXBseV9wYXlsb2FkO1xcbiA1MTk6XFx0XFx0aW50IHJldDtcXG4gNTIwOlxcdFxcbiA1MjE6XFx0XFx0b3BzID0gZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tjbWRdO1xcbiA1MjI6XFx0XFx0aWYgKFdBUk5fT05DRSghb3BzLCBcXFwiY21kICV1IGhhcyBubyBldGhubF9yZXF1ZXN0X29wc1xcXFxuXFxcIiwgY21kKSlcXG4gNTIzOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gNTI0OlxcdFxcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIG9wcy1cXHUwMDNlaGRyX2F0dHIpKVxcbiA1MjU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUyNjpcXHRcXG4gNTI3OlxcdFxcdHJlcV9pbmZvID0ga3phbGxvYyhvcHMtXFx1MDAzZXJlcV9pbmZvX3NpemUsIEdGUF9LRVJORUwpO1xcbiA1Mjg6XFx0XFx0aWYgKCFyZXFfaW5mbylcXG4gNTI5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA1MzA6XFx0XFx0cmVwbHlfZGF0YSA9IGttYWxsb2Mob3BzLVxcdTAwM2VyZXBseV9kYXRhX3NpemUsIEdGUF9LRVJORUwpO1xcbiA1MzE6XFx0XFx0aWYgKCFyZXBseV9kYXRhKSB7XFxuIDUzMjpcXHRcXHRcXHRrZnJlZShyZXFfaW5mbyk7XFxuIDUzMzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNTM0OlxcdFxcdH1cXG4gNTM1OlxcdFxcbiA1MzY6XFx0XFx0cmV0ID0gZXRobmxfZGVmYXVsdF9wYXJzZShyZXFfaW5mbywgaW5mbywgb3BzLCAhb3BzLVxcdTAwM2VhbGxvd19ub2Rldl9kbyk7XFxuIDUzNzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNTM4OlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIDUzOTpcXHRcXHRldGhubF9pbml0X3JlcGx5X2RhdGEocmVwbHlfZGF0YSwgb3BzLCByZXFfaW5mby1cXHUwMDNlZGV2KTtcXG4gNTQwOlxcdFxcbiA1NDE6XFx0XFx0aWYgKHJlcV9pbmZvLVxcdTAwM2VkZXYpIHtcXG4gNTQyOlxcdFxcdFxcdG5lZWRfcnRubCA9ICFuZXRkZXZfbmVlZF9vcHNfbG9jayhyZXFfaW5mby1cXHUwMDNlZGV2KSB8fFxcbiA1NDM6XFx0XFx0XFx0XFx0ICAgIGV0aHRvb2xfbmxfbXNnX25lZWRzX3J0bmwocmVxX2luZm8tXFx1MDAzZWRldiwgY21kKTtcXG4gNTQ0OlxcdFxcdFxcdGlmIChuZWVkX3J0bmwpXFxuIDU0NTpcXHRcXHRcXHRcXHRydG5sX2xvY2soKTtcXG4gNTQ2OlxcdFxcdFxcdG5ldGRldl9sb2NrX29wcyhyZXFfaW5mby1cXHUwMDNlZGV2KTtcXG4gNTQ3OlxcdFxcdH1cXG4gNTQ4OlxcdFxcdHJldCA9IG9wcy1cXHUwMDNlcHJlcGFyZV9kYXRhKHJlcV9pbmZvLCByZXBseV9kYXRhLCBpbmZvKTtcXG4gNTQ5OlxcdFxcdGlmIChyZXFfaW5mby1cXHUwMDNlZGV2KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA4OjAxLjg2NzQ3MDg1OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzE4MzA5MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gRGF0YSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIGBldGhubF9pbml0X3JlcGx5X2RhdGFgIGlzIGNhbGxpbmcgYG1lbXNldGAgdG8gemVybyBvdXQgdGhlIGByZXBseV9kYXRhYCBidWZmZXIuIExldCdzIGNvbmZpcm0gdGhhdCB3aXRoIGEgcXVpY2sgY2hlY2sgb2YgbGluZSA1MDQ6IFl1cCwgdGhlcmUgaXQgaXM6IGBtZW1zZXQocmVwbHlfZGF0YSwgMCwgb3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSk7YC4gQW5kIGl0J3MgY2FsbGVkIGF0IGxpbmUgNTM5LCBzbyBgZXRobmxfaW5pdF9yZXBseV9kYXRhKHJlcGx5X2RhdGEsIG9wcywgcmVxX2luZm8tXHUwMDNlZGV2KTtgIGlzIGRlZmluaXRlbHkgaW5pdGlhbGl6aW5nIHRoYXQgYHJlcGx5X2RhdGFgIGJ1ZmZlci5cblxuQWhhISBJZiBgcmVwbHlfZGF0YWAgaXMgYmVpbmcgemVyb2VkIG91dCByaWdodCB0aGVyZSwgdGhlbiB0aGUgYGRhdGEtXHUwMDNlY2Fwc2AgZmllbGQgaW4gYGludGZfY2Fwc19wcmVwYXJlX2RhdGFgIHNob3VsZCAqYWxyZWFkeSogYmUgemVyb2VkIGFzIHdlbGwuIFRoaXMgY2hhbmdlcyB0aGluZ3M7IHRoZSBleHBsaWNpdCB6ZXJvaW5nIEkgd2FzIGV4cGVjdGluZyBtaWdodCBiZSByZWR1bmRhbnQuIExldCdzIG1ha2Ugc3VyZSB0aGF0IG5vdGhpbmcgZWxzZSBvdmVyd3JpdGVzIHRoaXMgYXMgd2VsbCwgYW5kIGRvdWJsZS1jaGVjayBgZXRobmxfZGVmYXVsdF9zdGFydGAgdG8gYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTk3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6MDcuNTg1NzgzOTY4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTM4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjcyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjcyOlxcdHN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIDY3MzpcXHR7XFxuIDY3NDpcXHRcXHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xcbiA2NzU6XFx0XFx0c3RydWN0IGV0aG5sX2R1bXBfY3R4ICpjdHggPSBldGhubF9kdW1wX2NvbnRleHQoY2IpO1xcbiA2NzY6XFx0XFx0c3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGE7XFxuIDY3NzpcXHRcXHRjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgKm9wcztcXG4gNjc4OlxcdFxcdHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm87XFxuIDY3OTpcXHRcXHRzdHJ1Y3QgZ2VubG1zZ2hkciAqZ2hkcjtcXG4gNjgwOlxcdFxcdGludCByZXQ7XFxuIDY4MTpcXHRcXG4gNjgyOlxcdFxcdEJVSUxEX0JVR19PTihzaXplb2YoKmN0eCkgXFx1MDAzZSBzaXplb2YoY2ItXFx1MDAzZWN0eCkpO1xcbiA2ODM6XFx0XFxuIDY4NDpcXHRcXHRnaGRyID0gbmxtc2dfZGF0YShjYi1cXHUwMDNlbmxoKTtcXG4gNjg1OlxcdFxcdG9wcyA9IGV0aG5sX2RlZmF1bHRfcmVxdWVzdHNbZ2hkci1cXHUwMDNlY21kXTtcXG4gNjg2OlxcdFxcdGlmIChXQVJOX09OQ0UoIW9wcywgXFxcImNtZCAldSBoYXMgbm8gZXRobmxfcmVxdWVzdF9vcHNcXFxcblxcXCIsIGdoZHItXFx1MDAzZWNtZCkpXFxuIDY4NzpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDY4ODpcXHRcXHRyZXFfaW5mbyA9IGt6YWxsb2Mob3BzLVxcdTAwM2VyZXFfaW5mb19zaXplLCBHRlBfS0VSTkVMKTtcXG4gNjg5OlxcdFxcdGlmICghcmVxX2luZm8pXFxuIDY5MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNjkxOlxcdFxcdHJlcGx5X2RhdGEgPSBrbWFsbG9jKG9wcy1cXHUwMDNlcmVwbHlfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTtcXG4gNjkyOlxcdFxcdGlmICghcmVwbHlfZGF0YSkge1xcbiA2OTM6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gNjk0OlxcdFxcdFxcdGdvdG8gZnJlZV9yZXFfaW5mbztcXG4gNjk1OlxcdFxcdH1cXG4gNjk2OlxcdFxcbiA2OTc6XFx0XFx0cmV0ID0gZXRobmxfZGVmYXVsdF9wYXJzZShyZXFfaW5mbywgXFx1MDAyNmluZm8tXFx1MDAzZWluZm8sIG9wcywgZmFsc2UpO1xcbiA2OTg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDY5OTpcXHRcXHRcXHRnb3RvIGZyZWVfcmVwbHlfZGF0YTtcXG4gNzAwOlxcdFxcdGlmIChyZXFfaW5mby1cXHUwMDNlZGV2KSB7XFxuIDcwMTpcXHRcXHRcXHQvKiBXZSBpZ25vcmUgZGV2aWNlIHNwZWNpZmljYXRpb24gaW4gZHVtcCByZXF1ZXN0cyBidXQgYXMgdGhlXFxuIDcwMjpcXHRcXHRcXHQgKiBzYW1lIHBhcnNlciBhcyBmb3Igbm9uLWR1bXAgKGRvaXQpIHJlcXVlc3RzIGlzIHVzZWQsIGl0XFxuIDcwMzpcXHRcXHRcXHQgKiB3b3VsZCB0YWtlIHJlZmVyZW5jZSB0byB0aGUgZGV2aWNlIGlmIGl0IGZpbmRzIG9uZVxcbiA3MDQ6XFx0XFx0XFx0ICovXFxuIDcwNTpcXHRcXHRcXHRuZXRkZXZfcHV0KHJlcV9pbmZvLVxcdTAwM2VkZXYsIFxcdTAwMjZyZXFfaW5mby1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbiA3MDY6XFx0XFx0XFx0cmVxX2luZm8tXFx1MDAzZWRldiA9IE5VTEw7XFxuIDcwNzpcXHRcXHR9XFxuIDcwODpcXHRcXG4gNzA5OlxcdFxcdGN0eC1cXHUwMDNlb3BzID0gb3BzO1xcbiA3MTA6XFx0XFx0Y3R4LVxcdTAwM2VyZXFfaW5mbyA9IHJlcV9pbmZvO1xcbiA3MTE6XFx0XFx0Y3R4LVxcdTAwM2VyZXBseV9kYXRhID0gcmVwbHlfZGF0YTtcXG4gNzEyOlxcdFxcdGN0eC1cXHUwMDNlcG9zX2lmaW5kZXggPSAwO1xcbiA3MTM6XFx0XFxuIDcxNDpcXHRcXHRyZXR1cm4gMDtcXG4gNzE1OlxcdFxcbiA3MTY6XFx0ZnJlZV9yZXBseV9kYXRhOlxcbiA3MTc6XFx0XFx0a2ZyZWUocmVwbHlfZGF0YSk7XFxuIDcxODpcXHRmcmVlX3JlcV9pbmZvOlxcbiA3MTk6XFx0XFx0a2ZyZWUocmVxX2luZm8pO1xcbiA3MjA6XFx0XFxuIDcyMTpcXHRcXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowODowNy41ODU5MTgyMjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4MzY2MDM0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBldGhubF9kZWZhdWx0X3N0YXJ0YCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGV0aG5sX2RlZmF1bHRfc3RhcnRgIGZ1bmN0aW9uLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYHJlcGx5X2RhdGFgIGlzIGFsbG9jYXRlZCB1c2luZyBga21hbGxvY2AgYnV0IGl0ICppc24ndCogemVyb2VkIG91dC4gVGhhdCdzIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgb3IgYXQgbGVhc3QgYW4gYXJlYSBmb3IgZGVidWdnaW5nIGxhdGVyLCBhcyB0aGF0IG1lbW9yeSBtaWdodCBjb250YWluIGdhcmJhZ2UuIFdhaXQgYSBtaW51dGUuLi4gdGhpcyBpcyB0aGUgZHVtcGl0IG1vZHVsZSwgaXNuJ3QgaXQ/IE9rYXksIHNvIGBldGhubF9kZWZhdWx0X3N0YXJ0YCBpcyBzcGVjaWZpYyB0byB0aGUgZHVtcGl0IGZ1bmN0aW9uYWxpdHkuIEFscmlnaHQsIGxldCdzIHRyYWNlIHRoaXMgYHJlcGx5X2RhdGFgIHZhcmlhYmxlIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIGR1bXBpdCBjb2RlIGFuZCBzZWUgZXhhY3RseSBob3cgaXQncyBiZWluZyB1dGlsaXplZCwgYW5kIHdoZXJlIGFuZCB3aGV0aGVyIGl0IGdldHMgY2xlYW5lZCB1cC4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgaW5mb3JtYXRpb24gaW4gdGhlcmUgZG9lcyBub3QgZ28gd2hlcmUgaXQgaXNuJ3Qgc3VwcG9zZWQgdG8sIGFuZCB0aGF0IHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBzdWZmZXIgZnJvbSBhbnkgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQyMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6MTEuODY5NTgwOTEzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzIyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzIyOlxcdH1cXG4gNzIzOlxcdFxcbiA3MjQ6XFx0LyogcGVyLVBIWSAtXFx1MDAzZXN0YXJ0KCkgaGFuZGxlciBmb3IgR0VUIHJlcXVlc3RzICovXFxuIDcyNTpcXHRzdGF0aWMgaW50IGV0aG5sX3BlcnBoeV9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIDcyNjpcXHR7XFxuIDcyNzpcXHRcXHRzdHJ1Y3QgZXRobmxfcGVycGh5X2R1bXBfY3R4ICpwaHlfY3R4ID0gZXRobmxfcGVycGh5X2R1bXBfY29udGV4dChjYik7XFxuIDcyODpcXHRcXHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xcbiA3Mjk6XFx0XFx0c3RydWN0IGV0aG5sX2R1bXBfY3R4ICpjdHggPSBcXHUwMDI2cGh5X2N0eC1cXHUwMDNlZXRobmxfY3R4O1xcbiA3MzA6XFx0XFx0c3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGE7XFxuIDczMTpcXHRcXHRjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgKm9wcztcXG4gNzMyOlxcdFxcdHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm87XFxuIDczMzpcXHRcXHRzdHJ1Y3QgZ2VubG1zZ2hkciAqZ2hkcjtcXG4gNzM0OlxcdFxcdGludCByZXQ7XFxuIDczNTpcXHRcXG4gNzM2OlxcdFxcdEJVSUxEX0JVR19PTihzaXplb2YoKmN0eCkgXFx1MDAzZSBzaXplb2YoY2ItXFx1MDAzZWN0eCkpO1xcbiA3Mzc6XFx0XFxuIDczODpcXHRcXHRnaGRyID0gbmxtc2dfZGF0YShjYi1cXHUwMDNlbmxoKTtcXG4gNzM5OlxcdFxcdG9wcyA9IGV0aG5sX2RlZmF1bHRfcmVxdWVzdHNbZ2hkci1cXHUwMDNlY21kXTtcXG4gNzQwOlxcdFxcdGlmIChXQVJOX09OQ0UoIW9wcywgXFxcImNtZCAldSBoYXMgbm8gZXRobmxfcmVxdWVzdF9vcHNcXFxcblxcXCIsIGdoZHItXFx1MDAzZWNtZCkpXFxuIDc0MTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDc0MjpcXHRcXHRyZXFfaW5mbyA9IGt6YWxsb2Mob3BzLVxcdTAwM2VyZXFfaW5mb19zaXplLCBHRlBfS0VSTkVMKTtcXG4gNzQzOlxcdFxcdGlmICghcmVxX2luZm8pXFxuIDc0NDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNzQ1OlxcdFxcdHJlcGx5X2RhdGEgPSBrbWFsbG9jKG9wcy1cXHUwMDNlcmVwbHlfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTtcXG4gNzQ2OlxcdFxcdGlmICghcmVwbHlfZGF0YSkge1xcbiA3NDc6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gNzQ4OlxcdFxcdFxcdGdvdG8gZnJlZV9yZXFfaW5mbztcXG4gNzQ5OlxcdFxcdH1cXG4gNzUwOlxcdFxcbiA3NTE6XFx0XFx0LyogVW5saWtlIHBlci1kZXYgZHVtcCwgZG9uJ3QgaWdub3JlIGRldi4gVGhlIGR1bXAgaGFuZGxlclxcbiA3NTI6XFx0XFx0ICogd2lsbCBub3RpY2UgaXQgYW5kIGR1bXAgUEhZcyBmcm9tIGdpdmVuIGRldi4gV2Ugb25seSBrZWVwIHRyYWNrIG9mXFxuIDc1MzpcXHRcXHQgKiB0aGUgZGV2J3MgaWZpbmRleCwgLmR1bXBpdCgpIHdpbGwgZ3JhYiBhbmQgcmVsZWFzZSB0aGUgbmV0ZGV2IGl0c2VsZi5cXG4gNzU0OlxcdFxcdCAqL1xcbiA3NTU6XFx0XFx0cmV0ID0gZXRobmxfZGVmYXVsdF9wYXJzZShyZXFfaW5mbywgXFx1MDAyNmluZm8tXFx1MDAzZWluZm8sIG9wcywgZmFsc2UpO1xcbiA3NTY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDc1NzpcXHRcXHRcXHRnb3RvIGZyZWVfcmVwbHlfZGF0YTtcXG4gNzU4OlxcdFxcdGlmIChyZXFfaW5mby1cXHUwMDNlZGV2KSB7XFxuIDc1OTpcXHRcXHRcXHRwaHlfY3R4LVxcdTAwM2VpZmluZGV4ID0gcmVxX2luZm8tXFx1MDAzZWRldi1cXHUwMDNlaWZpbmRleDtcXG4gNzYwOlxcdFxcdFxcdG5ldGRldl9wdXQocmVxX2luZm8tXFx1MDAzZWRldiwgXFx1MDAyNnJlcV9pbmZvLVxcdTAwM2VkZXZfdHJhY2tlcik7XFxuIDc2MTpcXHRcXHRcXHRyZXFfaW5mby1cXHUwMDNlZGV2ID0gTlVMTDtcXG4gNzYyOlxcdFxcdH1cXG4gNzYzOlxcdFxcbiA3NjQ6XFx0XFx0Y3R4LVxcdTAwM2VvcHMgPSBvcHM7XFxuIDc2NTpcXHRcXHRjdHgtXFx1MDAzZXJlcV9pbmZvID0gcmVxX2luZm87XFxuIDc2NjpcXHRcXHRjdHgtXFx1MDAzZXJlcGx5X2RhdGEgPSByZXBseV9kYXRhO1xcbiA3Njc6XFx0XFx0Y3R4LVxcdTAwM2Vwb3NfaWZpbmRleCA9IDA7XFxuIDc2ODpcXHRcXG4gNzY5OlxcdFxcdHJldHVybiAwO1xcbiA3NzA6XFx0XFxuIDc3MTpcXHRmcmVlX3JlcGx5X2RhdGE6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA4OjExLjg2OTY4NTEwNFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE0NzUwODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBgZXRobmxfZGVmYXVsdF9kdW1waXRgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBtZW50YWwgY2hlY2tsaXN0IHN0YXJ0cyB3aXRoIGBldGhubF9kZWZhdWx0X2R1bXBpdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhpcyBzcGVjaWZpYyBlbnRpdHkgaXMsIHByb2JhYmx5IGEgZnVuY3Rpb24sIHBlcmhhcHMgYSB2YXJpYWJsZSwgb3IgcG90ZW50aWFsbHkgZXZlbiBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gSSBjYW4gaW5mZXIgZnJvbSB0aGUgbmFtZSB0aGF0IHRoaXMgaGFzIHRvIGRvIHdpdGggc29tZSBkZWZhdWx0IHNldHRpbmdzIHRoYXQgbGlrZWx5IGdldCBcImR1bXBlZFwiIHNvbWV3aGVyZS4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIGl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gZWl0aGVyIG5ldHdvcmsgY29uZmlndXJhdGlvbiBvciBsb3ctbGV2ZWwgRXRoZXJuZXQgZHJpdmVyIHNldHRpbmdzLiBMZXQgbWUgc3RhcnQgYnkgc2VlaW5nIHdoZXJlIGl0J3MgY2FsbGVkIGFuZCBkZWZpbmVkLCBwZXJoYXBzIGEgcXVpY2sgYGdyZXBgIG9yIGBmaW5kYCB3aWxsIGdldCBtZSBzdGFydGVkLiBGcm9tIHRoZXJlIEknbGwgaW52ZXN0aWdhdGUgaG93IGl0J3MgdXNlZCBhbmQgd2hhdCBjb250ZXh0IGl0J3MgYXBwbGllZCBpbiwgaW4gdGhpcyBzeXN0ZW0uIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgcHJvY2VzcyBiZWZvcmUgSSBpbnZlc3RpZ2F0ZSB0aGUgaW50cmljYWNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTcxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowODoxNS4yODQ0Mzg1MjZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2V0aHRvb2wvbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3MixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3MjpcXHRcXHRrZnJlZShyZXBseV9kYXRhKTtcXG4gNzczOlxcdGZyZWVfcmVxX2luZm86XFxuIDc3NDpcXHRcXHRrZnJlZShyZXFfaW5mbyk7XFxuIDc3NTpcXHRcXG4gNzc2OlxcdFxcdHJldHVybiByZXQ7XFxuIDc3NzpcXHR9XFxuIDc3ODpcXHRcXG4gNzc5OlxcdHN0YXRpYyBpbnQgZXRobmxfcGVycGh5X2R1bXBfb25lX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA3ODA6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRobmxfcGVycGh5X2R1bXBfY3R4ICpjdHgsXFxuIDc4MTpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIDc4MjpcXHR7XFxuIDc4MzpcXHRcXHRzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmV0aG5sX2N0eCA9IFxcdTAwMjZjdHgtXFx1MDAzZWV0aG5sX2N0eDtcXG4gNzg0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBldGhubF9jdHgtXFx1MDAzZXJlcV9pbmZvLVxcdTAwM2VkZXY7XFxuIDc4NTpcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZV9ub2RlICpwZG47XFxuIDc4NjpcXHRcXHRpbnQgcmV0O1xcbiA3ODc6XFx0XFxuIDc4ODpcXHRcXHRpZiAoIWRldi1cXHUwMDNlbGlua190b3BvKVxcbiA3ODk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDc5MDpcXHRcXG4gNzkxOlxcdFxcdHhhX2Zvcl9lYWNoX3N0YXJ0KFxcdTAwMjZkZXYtXFx1MDAzZWxpbmtfdG9wby1cXHUwMDNlcGh5cywgY3R4LVxcdTAwM2Vwb3NfcGh5aW5kZXgsIHBkbixcXG4gNzkyOlxcdFxcdFxcdFxcdCAgY3R4LVxcdTAwM2Vwb3NfcGh5aW5kZXgpIHtcXG4gNzkzOlxcdFxcdFxcdGV0aG5sX2N0eC1cXHUwMDNlcmVxX2luZm8tXFx1MDAzZXBoeV9pbmRleCA9IGN0eC1cXHUwMDNlcG9zX3BoeWluZGV4O1xcbiA3OTQ6XFx0XFxuIDc5NTpcXHRcXHRcXHQvKiBXZSBjYW4gcmUtdXNlIHRoZSBvcmlnaW5hbCBkdW1wX29uZSBhcyAtXFx1MDAzZXByZXBhcmVfZGF0YSBpblxcbiA3OTY6XFx0XFx0XFx0ICogY29tbWFuZHMgdXNlIGV0aG5sX3JlcV9nZXRfcGh5ZGV2KCksIHdoaWNoIGdldHMgdGhlIFBIWSBmcm9tXFxuIDc5NzpcXHRcXHRcXHQgKiB0aGUgcmVxX2luZm8tXFx1MDAzZXBoeV9pbmRleFxcbiA3OTg6XFx0XFx0XFx0ICovXFxuIDc5OTpcXHRcXHRcXHRyZXQgPSBldGhubF9kZWZhdWx0X2R1bXBfb25lKHNrYiwgZGV2LCBldGhubF9jdHgsIGluZm8pO1xcbiA4MDA6XFx0XFx0XFx0aWYgKHJldClcXG4gODAxOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDgwMjpcXHRcXHR9XFxuIDgwMzpcXHRcXG4gODA0OlxcdFxcdGN0eC1cXHUwMDNlcG9zX3BoeWluZGV4ID0gMDtcXG4gODA1OlxcdFxcbiA4MDY6XFx0XFx0cmV0dXJuIDA7XFxuIDgwNzpcXHR9XFxuIDgwODpcXHRcXG4gODA5OlxcdHN0YXRpYyBpbnQgZXRobmxfcGVycGh5X2R1bXBfYWxsX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiA4MTA6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRobmxfcGVycGh5X2R1bXBfY3R4ICpjdHgsXFxuIDgxMTpcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuIDgxMjpcXHR7XFxuIDgxMzpcXHRcXHRzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmV0aG5sX2N0eCA9IFxcdTAwMjZjdHgtXFx1MDAzZWV0aG5sX2N0eDtcXG4gODE0OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spO1xcbiA4MTU6XFx0XFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XFxuIDgxNjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiA4MTc6XFx0XFx0aW50IHJldCA9IDA7XFxuIDgxODpcXHRcXG4gODE5OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gODIwOlxcdFxcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBldGhubF9jdHgtXFx1MDAzZXBvc19pZmluZGV4KSB7XFxuIDgyMTpcXHRcXHRcXHRuZXRkZXZfaG9sZChkZXYsIFxcdTAwMjZkZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA4OjE1LjI4NDUzNzg3NloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjMzNDM4MTExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENhbGwgU3RhY2sqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBldGhubF9kZWZhdWx0X2R1bXBfb25lYCBpcyBiZWluZyBpbnZva2VkLiBSaWdodCBhd2F5LCBteSBicmFpbiBqdW1wcyB0byB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoYXQgZnVuY3Rpb24gZGVmaW5lZCwgYW5kIHdoYXQgaXRzIGxpa2VseSBwdXJwb3NlIG1pZ2h0IGJlIGluIHRoaXMgY29udGV4dC4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZXRobmxfZGVmYXVsdF9kdW1wX29uZWAgaXRzZWxmIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgY2FsbCBzdGFjay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGZ1bGx5IHRvIGV2YWx1YXRlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGludm9jYXRpb24sIGFuZCB3aGVyZSB0aGUgdmFsdWVzIGJlaW5nIHByb2Nlc3NlZCBjb21lIGZyb20uIEkgbmVlZCB0byBleGFtaW5lIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzYyMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6MjcuNjE4OTIyMTIyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZXRodG9vbC9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODIyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODIyOlxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA4MjM6XFx0XFxuIDgyNDpcXHRcXHRcXHQvKiBwZXItUEhZIGNvbW1hbmRzIHVzZSBldGhubF9yZXFfZ2V0X3BoeWRldigpLCB3aGljaCBuZWVkcyB0aGVcXG4gODI1OlxcdFxcdFxcdCAqIG5ldF9kZXZpY2UgaW4gdGhlIHJlcV9pbmZvXFxuIDgyNjpcXHRcXHRcXHQgKi9cXG4gODI3OlxcdFxcdFxcdGV0aG5sX2N0eC1cXHUwMDNlcmVxX2luZm8tXFx1MDAzZWRldiA9IGRldjtcXG4gODI4OlxcdFxcdFxcdHJldCA9IGV0aG5sX3BlcnBoeV9kdW1wX29uZV9kZXYoc2tiLCBjdHgsIGluZm8pO1xcbiA4Mjk6XFx0XFxuIDgzMDpcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDgzMTpcXHRcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmRldl90cmFja2VyKTtcXG4gODMyOlxcdFxcdFxcdGV0aG5sX2N0eC1cXHUwMDNlcmVxX2luZm8tXFx1MDAzZWRldiA9IE5VTEw7XFxuIDgzMzpcXHRcXG4gODM0OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUCkge1xcbiA4MzU6XFx0XFx0XFx0XFx0aWYgKGxpa2VseShza2ItXFx1MDAzZWxlbikpXFxuIDgzNjpcXHRcXHRcXHRcXHRcXHRyZXQgPSBza2ItXFx1MDAzZWxlbjtcXG4gODM3OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4Mzg6XFx0XFx0XFx0fVxcbiA4Mzk6XFx0XFx0XFx0cmV0ID0gMDtcXG4gODQwOlxcdFxcdH1cXG4gODQxOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiA4NDI6XFx0XFxuIDg0MzpcXHRcXHRyZXR1cm4gcmV0O1xcbiA4NDQ6XFx0fVxcbiA4NDU6XFx0XFxuIDg0NjpcXHQvKiBwZXItUEhZIC1cXHUwMDNlZHVtcGl0KCkgaGFuZGxlciBmb3IgR0VUIHJlcXVlc3RzLiAqL1xcbiA4NDc6XFx0c3RhdGljIGludCBldGhubF9wZXJwaHlfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIDg0ODpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbiA4NDk6XFx0e1xcbiA4NTA6XFx0XFx0c3RydWN0IGV0aG5sX3BlcnBoeV9kdW1wX2N0eCAqY3R4ID0gZXRobmxfcGVycGh5X2R1bXBfY29udGV4dChjYik7XFxuIDg1MTpcXHRcXHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xcbiA4NTI6XFx0XFx0c3RydWN0IGV0aG5sX2R1bXBfY3R4ICpldGhubF9jdHggPSBcXHUwMDI2Y3R4LVxcdTAwM2VldGhubF9jdHg7XFxuIDg1MzpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gODU0OlxcdFxcbiA4NTU6XFx0XFx0aWYgKGN0eC1cXHUwMDNlaWZpbmRleCkge1xcbiA4NTY6XFx0XFx0XFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XFxuIDg1NzpcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbiA4NTg6XFx0XFxuIDg1OTpcXHRcXHRcXHRkZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4KGdlbmxfaW5mb19uZXQoXFx1MDAyNmluZm8tXFx1MDAzZWluZm8pLFxcbiA4NjA6XFx0XFx0XFx0XFx0XFx0XFx0ICBjdHgtXFx1MDAzZWlmaW5kZXgsIFxcdTAwMjZkZXZfdHJhY2tlcixcXG4gODYxOlxcdFxcdFxcdFxcdFxcdFxcdCAgR0ZQX0tFUk5FTCk7XFxuIDg2MjpcXHRcXHRcXHRpZiAoIWRldilcXG4gODYzOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA4NjQ6XFx0XFxuIDg2NTpcXHRcXHRcXHRldGhubF9jdHgtXFx1MDAzZXJlcV9pbmZvLVxcdTAwM2VkZXYgPSBkZXY7XFxuIDg2NjpcXHRcXHRcXHRyZXQgPSBldGhubF9wZXJwaHlfZHVtcF9vbmVfZGV2KHNrYiwgY3R4LCBnZW5sX2luZm9fZHVtcChjYikpO1xcbiA4Njc6XFx0XFxuIDg2ODpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVPUE5PVFNVUFAgXFx1MDAyNlxcdTAwMjYgbGlrZWx5KHNrYi1cXHUwMDNlbGVuKSlcXG4gODY5OlxcdFxcdFxcdFxcdHJldCA9IHNrYi1cXHUwMDNlbGVuO1xcbiA4NzA6XFx0XFxuIDg3MTpcXHRcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmRldl90cmFja2VyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6MjcuNjE5MTU3NTUyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTMyMzg1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSHVudGluZyBmb3IgYGV0aG5sX2RlZmF1bHRfZHVtcF9vbmVgKipcblxuT2theSwgc28gdGhlIGh1bnQgYmVnaW5zLiBJJ20gbG9va2luZyBmb3IgYGV0aG5sX2RlZmF1bHRfZHVtcF9vbmVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dC4gSXMgdGhpcyBhIGZ1bmN0aW9uLCBhIHZhcmlhYmxlLCBhIG1hY3JvPyBJdHMgbmFtaW5nIGNvbnZlbnRpb24gc3VnZ2VzdHMgYSBmdW5jdGlvbiBvciBwb3RlbnRpYWxseSBhIG1hY3JvLiBUaGUgYGV0aG5sYCBwcmVmaXggaXMgbGlrZWx5IHNvbWUgc29ydCBvZiBtb2R1bGUgb3IgbmFtZXNwYWNlOyBwZXJoYXBzIHJlbGF0ZWQgdG8gRXRoZXJuZXQgb3IgbmV0d29yayBjb25maWd1cmF0aW9uLCBnaXZlbiB0aGUgYG5sYCBmb3IgXCJuZXRsaW5rXCIuIFRoZSBcImRlZmF1bHRcIiBwcm9iYWJseSBoaW50cyBhdCBhIGRlZmF1bHQgb3IgZmFsbGJhY2sgbWVjaGFuaXNtLiBBbmQgXCJkdW1wXFxfb25lXCIuLi4gZGVmaW5pdGVseSBzb3VuZHMgbGlrZSBzb21lIGtpbmQgb2YgZGF0YSByZXRyaWV2YWwsIGxpa2VseSByZWxhdGVkIHRvIGR1bXBpbmcgb3Igb3V0cHV0dGluZyBhIHNpbmdsZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBvciBzdGF0ZS5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgZm9ybWluZyBhIGh5cG90aGVzaXMuIElzIHRoaXMgcmVsYXRlZCB0byBhIHNwZWNpZmljIEV0aGVybmV0IGludGVyZmFjZSdzIGRlZmF1bHQgY29uZmlndXJhdGlvbj8gT3IgcGVyaGFwcyByZWxhdGVkIHRvIGFuIG92ZXJhbGwgc3lzdGVtIGRlZmF1bHQgZm9yIG5ldHdvcmsgaW50ZXJmYWNlcz9cblxuSSdsbCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBjb2RlYmFzZTsgSSBjYW4gdXNlIGdyZXAsIGFjaywgcmlwZ3JlcCwgb3Igc2ltaWxhciB0b29scywgZGVwZW5kaW5nIG9uIHRoZSBzY2FsZSBhbmQgY29tcGxleGl0eSBvZiB0aGUgcHJvamVjdC4gSSdkIHN0YXJ0IHdpdGggYSBicm9hZCBzZWFyY2gsIGxvb2tpbmcgZm9yIHRoZSBleGFjdCBuYW1lLCBhbmQgdmFyaWF0aW9ucyBsaWtlIFwiZXRobmxcIiBhbmQgXCJkdW1wXCIuIEknbGwgYWxzbyBjb25zaWRlciBzZWFyY2hpbmcgZm9yIHJlbGF0ZWQgdGVybXMgbGlrZSBcIm5ldGxpbmtcIiwgXCJldGhlcm5ldFwiLCBcImRlZmF1bHQgY29uZmlndXJhdGlvblwiLCBcImludGVyZmFjZSBkdW1wXCIsIG9yIHNpbWlsYXIuXG5cbkknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBsYW5ndWFnZSBvciBmcmFtZXdvcmsgaGVyZS4gRm9yIGV4YW1wbGUsIGlmIGl0J3Mga2VybmVsIHNwYWNlLCBJIG1pZ2h0IGV4cGVjdCB0byBzZWUgYSBsb3Qgb2YgQyBjb2RlLiBJZiBpdCBpcyB1c2Vyc3BhY2UsIGl0IGNvdWxkIGJlIEMsIEMrKywgUHl0aG9uLCBvciB3aGF0ZXZlciB0aGUgcHJvamVjdCBpcyB1c2luZy4gU28gSSBoYXZlIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gZG9pbmcgdGhlIHNlYXJjaC4gQmFzZWQgb24gdGhlIGxhbmd1YWdlIGFuZCBmcmFtZXdvcmsgdGhlIHNlYXJjaCBtaWdodCBkaWZmZXIgYXMgd2VsbC5cblxuT25jZSBJIGhhdmUgYSBsaXN0IG9mIHBvc3NpYmxlIGxvY2F0aW9ucyBvciB1c2FnZXMsIEknbGwgdGhlbiBkcmlsbCBkb3duIGFuZCByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSwgd2hhdCBpdCBkb2VzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGNvbXBvbmVudHMsIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQgd2hhdCBpdCBkb2VzIGluIGRldGFpbC4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHdoZXJlIHRoZSBcImR1bXBcIiBvY2N1cnMsIHdoZW4gaXQncyBjYWxsZWQsIGFuZCB3aG8gY2FsbHMgaXQuIFRoaXMgd2lsbCBoZWxwIG1lIGNvbm5lY3QgdGhlIGRvdHMgYWJvdXQgaXRzIGZ1bmN0aW9uYWxpdHkuIEknbSBleHBlY3RpbmcgdGhpcyB3aWxsIGludm9sdmUgbmV0d29yayBjb25maWd1cmF0aW9uIHN0cnVjdHVyZXMsIHNvY2tldCBjYWxscywgbmV0bGluayBtZXNzYWdlcywgYW5kIHBvdGVudGlhbGx5IHNvbWUgZm9ybSBvZiBzdGF0ZSBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDYxNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6MzQuNzcyMzk5NDU5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDA0NzgwOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXRobmxfZGVmYXVsdF9kdW1wX29uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZXRodG9vbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2V0aHRvb2wvbmV0bGluay5jPTUwOT1zdGF0aWMgaW50IGV0aG5sX2RlZmF1bHRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTU5NS1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NTk2OnN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9kdW1wX29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy01OTctXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZXRobmxfZHVtcF9jdHggKmN0eCxcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYz02NDA9c3RhdGljIGludCBldGhubF9kZWZhdWx0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jLTY1My1cXG5uZXQvZXRodG9vbC9uZXRsaW5rLmM6NjU0OlxcdFxcdHJldCA9IGV0aG5sX2RlZmF1bHRfZHVtcF9vbmUoc2tiLCBkZXYsIGN0eCwgZ2VubF9pbmZvX2R1bXAoY2IpKTtcXG5uZXQvZXRodG9vbC9uZXRsaW5rLmMtNjU1LVxcbi0tXFxubmV0L2V0aHRvb2wvbmV0bGluay5jPTc3OT1zdGF0aWMgaW50IGV0aG5sX3BlcnBoeV9kdW1wX29uZV9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9ldGh0b29sL25ldGxpbmsuYy03OTgtXFx0XFx0ICovXFxubmV0L2V0aHRvb2wvbmV0bGluay5jOjc5OTpcXHRcXHRyZXQgPSBldGhubF9kZWZhdWx0X2R1bXBfb25lKHNrYiwgZGV2LCBldGhubF9jdHgsIGluZm8pO1xcbm5ldC9ldGh0b29sL25ldGxpbmsuYy04MDAtXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6MzUuMDcyODgzMzI3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwOTA4MzI5NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IERpdmluZyBpbnRvIGBldGhubF9kZWZhdWx0X2R1bXBfb25lYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJ1c2luZXNzLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBgZXRobmxfZGVmYXVsdF9kdW1wX29uZWAuIEknbSBhc3N1bWluZyBmcm9tIHRoZSBuYW1pbmcgY29udmVudGlvbiB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgZGVmYXVsdCBkdW1wLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGV0aG5pYyBuZXR3b3JrIChldGhubCkgY29uZmlndXJhdGlvbnMgb3IgZGF0YS4gVGhlIFwib25lXCIgYXQgdGhlIGVuZCBzdWdnZXN0cyBhIHByaW1hcnkgb3IgYmFzZSBjb25maWd1cmF0aW9uLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHZhcmlvdXMgcG90ZW50aWFsIGNvbnRleHRzOiBpcyB0aGlzIGEgc3BlY2lmaWMgbmV0d29yayBwYXJhbWV0ZXIgZHVtcD8gQSByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBhIHBhcnRpY3VsYXIgZGV2aWNlIG9yIHN5c3RlbSByZWxhdGVkIHRvIGV0aG5sPyBPciBwZXJoYXBzIGl0J3MgYSBzbmFwc2hvdCBvZiB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIGV0aG5sIGludGVyZmFjZSBpdHNlbGY/XG5cbkknbSBtZW50YWxseSBwcmVwYXJpbmcgZm9yIGEgZmlsZSB0aGF0IGNvdWxkIGNvbnRhaW4gYW55dGhpbmcgZnJvbSBiYXNpYyBNQUMgYWRkcmVzcyBhc3NpZ25tZW50cyBhbmQgTVRVIHNpemVzIHRvIG1vcmUgY29tcGxleCByb3V0aW5nIGluZm9ybWF0aW9uLCBWTEFOIGNvbmZpZ3VyYXRpb25zLCBvciBldmVuIHNlY3VyaXR5IHNldHRpbmdzIHJlbGF0ZWQgdG8gdGhlIGV0aG5sIHByb3RvY29scy4gTXkgZm9jdXMgd2lsbCBiZSBvbiBxdWlja2x5IGlkZW50aWZ5aW5nIHRoZSBrZXkgZWxlbWVudHMgYW5kIGFzc2Vzc2luZyB0aGVpciBpbXBsaWNhdGlvbnMsIGFzIHdlbGwgYXMgbG9va2luZyBmb3IgYW55IG9idmlvdXMgZGV2aWF0aW9ucyBmcm9tIHN0YW5kYXJkIHByYWN0aWNlLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIHRoYXQgY291bGQgc3VnZ2VzdCB1bmRlcmx5aW5nIGFzc3VtcHRpb25zIG9yIGhhcmRjb2RlZCB2YWx1ZXMuIE15IGdvYWwgaXMgdG8gcmFwaWRseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgdGhlIGxpa2VseSBwdXJwb3NlIG9mIHRoaXMgZHVtcC4gTm93LCBsZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTI0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6MzkuMTYzNzE4OTc3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9ldGh0b29sL25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1OTYsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1OTY6XFx0c3RhdGljIGludCBldGhubF9kZWZhdWx0X2R1bXBfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIDU5NzpcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBldGhubF9kdW1wX2N0eCAqY3R4LFxcbiA1OTg6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiA1OTk6XFx0e1xcbiA2MDA6XFx0XFx0Ym9vbCBuZWVkX3J0bmw7XFxuIDYwMTpcXHRcXHR2b2lkICplaGRyO1xcbiA2MDI6XFx0XFx0aW50IHJldDtcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0XFx0ZWhkciA9IGdlbmxtc2dfcHV0KHNrYiwgaW5mby1cXHUwMDNlc25kX3BvcnRpZCwgaW5mby1cXHUwMDNlc25kX3NlcSxcXG4gNjA1OlxcdFxcdFxcdFxcdCAgIFxcdTAwMjZldGh0b29sX2dlbmxfZmFtaWx5LCBOTE1fRl9NVUxUSSxcXG4gNjA2OlxcdFxcdFxcdFxcdCAgIGN0eC1cXHUwMDNlb3BzLVxcdTAwM2VyZXBseV9jbWQpO1xcbiA2MDc6XFx0XFx0aWYgKCFlaGRyKVxcbiA2MDg6XFx0XFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4gNjA5OlxcdFxcbiA2MTA6XFx0XFx0ZXRobmxfaW5pdF9yZXBseV9kYXRhKGN0eC1cXHUwMDNlcmVwbHlfZGF0YSwgY3R4LVxcdTAwM2VvcHMsIGRldik7XFxuIDYxMTpcXHRcXHRuZWVkX3J0bmwgPSAhbmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSB8fFxcbiA2MTI6XFx0XFx0XFx0ICAgIGV0aHRvb2xfbmxfbXNnX25lZWRzX3J0bmwoZGV2LCBjdHgtXFx1MDAzZW9wcy1cXHUwMDNlcmVxdWVzdF9jbWQpO1xcbiA2MTM6XFx0XFx0aWYgKG5lZWRfcnRubClcXG4gNjE0OlxcdFxcdFxcdHJ0bmxfbG9jaygpO1xcbiA2MTU6XFx0XFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxuIDYxNjpcXHRcXHRyZXQgPSBjdHgtXFx1MDAzZW9wcy1cXHUwMDNlcHJlcGFyZV9kYXRhKGN0eC1cXHUwMDNlcmVxX2luZm8sIGN0eC1cXHUwMDNlcmVwbHlfZGF0YSwgaW5mbyk7XFxuIDYxNzpcXHRcXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbiA2MTg6XFx0XFx0aWYgKG5lZWRfcnRubClcXG4gNjE5OlxcdFxcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuIDYyMDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNjIxOlxcdFxcdFxcdGdvdG8gb3V0X2NhbmNlbDtcXG4gNjIyOlxcdFxcdHJldCA9IGV0aG5sX2ZpbGxfcmVwbHlfaGVhZGVyKHNrYiwgZGV2LCBjdHgtXFx1MDAzZW9wcy1cXHUwMDNlaGRyX2F0dHIpO1xcbiA2MjM6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDYyNDpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNjI1OlxcdFxcdHJldCA9IGN0eC1cXHUwMDNlb3BzLVxcdTAwM2VmaWxsX3JlcGx5KHNrYiwgY3R4LVxcdTAwM2VyZXFfaW5mbywgY3R4LVxcdTAwM2VyZXBseV9kYXRhKTtcXG4gNjI2OlxcdFxcbiA2Mjc6XFx0b3V0OlxcbiA2Mjg6XFx0XFx0aWYgKGN0eC1cXHUwMDNlb3BzLVxcdTAwM2VjbGVhbnVwX2RhdGEpXFxuIDYyOTpcXHRcXHRcXHRjdHgtXFx1MDAzZW9wcy1cXHUwMDNlY2xlYW51cF9kYXRhKGN0eC1cXHUwMDNlcmVwbHlfZGF0YSk7XFxuIDYzMDpcXHRvdXRfY2FuY2VsOlxcbiA2MzE6XFx0XFx0Y3R4LVxcdTAwM2VyZXBseV9kYXRhLVxcdTAwM2VkZXYgPSBOVUxMO1xcbiA2MzI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDYzMzpcXHRcXHRcXHRnZW5sbXNnX2NhbmNlbChza2IsIGVoZHIpO1xcbiA2MzQ6XFx0XFx0ZWxzZVxcbiA2MzU6XFx0XFx0XFx0Z2VubG1zZ19lbmQoc2tiLCBlaGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6MzkuMTYzODE4NTM3WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjYyNzAyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRG91YmxlLUNoZWNraW5nIHRoZSBEYXRhIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIG5vdGljaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gVGhlIGNhbGwgdG8gYGV0aG5sX2luaXRfcmVwbHlfZGF0YShjdHgtXHUwMDNlcmVwbHlfZGF0YSwgY3R4LVx1MDAzZW9wcywgZGV2KTtgIHBvcHMgdXAgaW4gYGV0aG5sX2RlZmF1bHRfZHVtcF9vbmVgIHRvbywgbm90IGp1c3QgaW4gdGhlIGBkb2l0YCBwYXRoLiBSaWdodCwgYW5kIGVhcmxpZXIgd2UgdmVyaWZpZWQgdGhhdCBgZXRobmxfaW5pdF9yZXBseV9kYXRhYCBpbmNsdWRlcyBhIGBtZW1zZXQocmVwbHlfZGF0YSwgMCwgb3BzLVx1MDAzZXJlcGx5X2RhdGFfc2l6ZSk7YC4gVGhhdCBgbWVtc2V0YCBpcyBjcml0aWNhbCFcblxuU28sIHRoZSBgcmVwbHlfZGF0YWAgYnVmZmVyIGlzIGRlZmluaXRlbHkgZ2V0dGluZyB6ZXJvZWQgb3V0ICpiZWZvcmUqIGBwcmVwYXJlX2RhdGFgIGdldHMgY2FsbGVkLiBUaGlzIGhvbGRzIHRydWUgZm9yIGJvdGggdGhlIGBkb2l0YCBhbmQgYGR1bXBpdGAgZXhlY3V0aW9uIHBhdGhzLiBJdCdzIGdvb2QgdGhhdCB3ZSdyZSBjb3ZlcmluZyBvdXIgYmFzZXMuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYmFjayBhdCB0aGUgYGV0aG5sX2luaXRfcmVwbHlfZGF0YWAgZnVuY3Rpb24gaXRzZWxmLiBBbHdheXMgd29ydGggYSBkb3VibGUtY2hlY2sgb24gaW5pdGlhbGl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTU0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDg6NDMuNTkwMDkyMzJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9ldGh0b29sL25ldGxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MDA6XFx0c3RhdGljIHZvaWQgZXRobmxfaW5pdF9yZXBseV9kYXRhKHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhLFxcbiA1MDE6XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgKm9wcyxcXG4gNTAyOlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gNTAzOlxcdHtcXG4gNTA0OlxcdFxcdG1lbXNldChyZXBseV9kYXRhLCAwLCBvcHMtXFx1MDAzZXJlcGx5X2RhdGFfc2l6ZSk7XFxuIDUwNTpcXHRcXHRyZXBseV9kYXRhLVxcdTAwM2VkZXYgPSBkZXY7XFxuIDUwNjpcXHR9XFxuIDUwNzpcXHRcXG4gNTA4OlxcdC8qIGRlZmF1bHQgLVxcdTAwM2Vkb2l0KCkgaGFuZGxlciBmb3IgR0VUIHR5cGUgcmVxdWVzdHMgKi9cXG4gNTA5OlxcdHN0YXRpYyBpbnQgZXRobmxfZGVmYXVsdF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA4OjQzLjU5MDIwNDU3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxODg5ODM1Mzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlN1bW1hcnkgb2YgdGhlIENvZGUgUmV2aWV3KipcblxuT2theSwgc28gSSd2ZSBnb25lIHRocm91Z2ggdGhpcyBwYXRjaCB3aXRoIGEgZmluZS10b290aCBjb21iLCBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gdGhlIG5ldyBldGh0b29sIG5ldGxpbmsgZnVuY3Rpb25hbGl0eS4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBhYm91dCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLiBIb3dldmVyLCBhZnRlciBjYXJlZnVsbHkgdHJhY2luZyB0aGUgY29kZSBleGVjdXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHBhdGhzLCBJJ20gY29uZmlkZW50IHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzLlxuXG5IZXJlJ3MgbXkgcmVhc29uaW5nLiBGaXJzdCwgSSBjb25maXJtZWQgdGhhdCB0aGUgcHJpbWFyeSBgcmVwbHlfZGF0YWAgc3RydWN0dXJlIHVzZWQgZm9yIGJvdGggYElOVEZfQ0FQU19HRVRgIGFuZCBgUEhZX1RFU1RfR0VUYCBpcyBhbHdheXMgemVyb2VkIG91dCBiZWZvcmUgdGhlIGRyaXZlcidzIGBnZXRfaW50Zl9jYXBzYCBhbmQgYGdldF9waHlfdGVzdGAgY2FsbGJhY2tzIGFyZSBpbnZva2VkLiBUaGUgYGV0aG5sX2luaXRfcmVwbHlfZGF0YWAgZnVuY3Rpb24sIHdoaWNoIGlzIGNhbGxlZCBpbiBtdWx0aXBsZSBwbGFjZXMsIGV4cGxpY2l0bHkgdXNlcyBgbWVtc2V0YCB0byB6ZXJvIHRoZSBlbnRpcmUgYWxsb2NhdGVkIG1lbW9yeSByZWdpb24gKGBvcHMtXHUwMDNlcmVwbHlfZGF0YV9zaXplYCkuIFRoaXMgaW5jbHVkZXMgYWxsIGZpZWxkcyB3aXRoaW4gc3RydWN0dXJlcyBsaWtlIGBzdHJ1Y3QgaW50Zl9jYXBzX3JlcGx5X2RhdGFgIGFuZCBgc3RydWN0IGV0aHRvb2xfaW50Zl9jYXBzYC4gVGhpcyBtZWFucyB0aGF0IGV2ZW4gaWYgdGhlIGRyaXZlciAqZmFpbHMqIHRvIGluaXRpYWxpemUgYSBzcGVjaWZpYyBmaWVsZCwgaXQgd2lsbCBkZWZhdWx0IHRvIHplcm8uXG5cbkkgdGhlbiByZXZpc2l0ZWQgYHBoeV90ZXN0X3ByZXBhcmVfZGF0YWAgd2hpY2ggSSBmb3VuZCBoYXMgYW4gZXh0cmEgYG1lbXNldGAgY2FsbCwgYW5kIHdoaWNoIGNhbiBiZSByZWR1bmRhbnQsIGJ1dCBkb2Vzbid0IGNhdXNlIGFueSBpc3N1ZXMgYXMgaXQgZ3VhcmFudGVlcyB0aGUgc3RydWN0IGlzIGluZGVlZCB6ZXJvZWQuIEkgYWxzbyByZXZpZXdlZCBgZXRobmxfYWN0X3BoeV90ZXN0YCB3aGljaCBkZWZpbmVzIGB0ZXN0ID0ge31gLCB3aGljaCBhbHNvIGd1YXJhbnRlZXMgdGhlIHN0cnVjdCBpcyB6ZXJvZWQuIEFsc28gYW55IGxvY2FsIG9yIHN0YXRpY2FsbHkgZGVmaW5lZCBzdHJ1Y3RzIGFyZSBpbml0aWFsaXplZCB0byB6ZXJvLlxuXG5UaGUgY29kZSB1c2VzIGluZGl2aWR1YWwgYG5sYV9wdXRfKmAgZnVuY3Rpb25zIChlLmcuLCBgbmxhX3B1dF91MzJgLCBgbmxhX3B1dF9zdHJpbmdgLCBgbmxhX3B1dF9mbGFnYCwgYW5kIGBubGFfcHV0X3U2NF82NGJpdGApIHRvIHNlcmlhbGl6ZSB0aGUgZGF0YSBpbnRvIG5ldGxpbmsgbWVzc2FnZXMuIFRoZXNlIGZ1bmN0aW9ucyBkZWFsIHdpdGggY29weWluZyB0aGUgdmFsdWUgb2YgaW5kaXZpZHVhbCBmaWVsZHMsIG5vdCB0aGUgZW50aXJlIHN0cnVjdC4gVGhpcyBpcyBpbXBvcnRhbnQ6IGV2ZW4gaWYgdGhlcmUgYXJlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBieXRlcyB3aXRoaW4gYSBzdHJ1Y3QsIHRoZXNlIHBhZGRpbmcgYnl0ZXMgd291bGQgbm90IGJlIGNvcGllZCBpbnRvIHRoZSBuZXRsaW5rIG1lc3NhZ2UuIFRoZSBmdW5jdGlvbnMgY29weSB0aGUgYWN0dWFsIGRhdGEgZmllbGRzIG9ubHkuXG5cbkkgYWxzbyBsb29rZWQgYXQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzLiBUaGlzIGNhbiBvY2N1ciwgZm9yIGluc3RhbmNlLCBpZiB0aGUgZHJpdmVyIHNldHMgYW4gaW52YWxpZCBgbnVtX2Jsb2Nrc2AgdmFsdWUsIHNvIHRoYXQgYSBsb29wIGluIGEgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiBnb2VzIHBhc3QgdGhlIHZhbGlkIGJsb2NrIHJhbmdlLiBUaGF0IHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi5cblxuSSBkaWQgaWRlbnRpZnkgYSBsb2dpYyBidWcgd2l0aGluIGBpbnRmX2NhcHNfZmlsbF9yZXBseWAsIHdoZXJlIGFuIHVuY29uZGl0aW9uYWwgYGdvdG8gbmxhX3B1dF9mYWlsdXJlO2AgaXMgcHJlc2VudC4gSG93ZXZlciwgdGhpcyBpcyBhIGNvZGUgYnVnIHRoYXQgd2lsbCBjYXVzZSB0aGUgZnVuY3Rpb24gdG8gYWx3YXlzIGZhaWwuIEJ1dCwgY3J1Y2lhbGx5LCBpdCdzIG5vdCBhIG1lbW9yeSBzYWZldHkgaXNzdWUuIFRoZSBuZXRsaW5rIG1lc3NhZ2Ugd291bGQgYmUgY2FuY2VsZWQsIHNvIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdvdWxkIGJlIGV4cG9zZWQuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwbGljaXRseSB6ZXJvZWQgYmVmb3JlIHVzZSwgYW5kIGRhdGEgZmllbGRzIGFyZSBpbmRpdmlkdWFsbHkgc2VyaWFsaXplZCBpbnRvIG5ldGxpbmsgbWVzc2FnZXMsIGFuZCBhbnkgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzIGlzIGNhdWdodCBieSBLQVNBTiwgdGhlcmUgaXMgbm8gcmlzayBvZiBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIEkgY29uY2x1ZGUgdGhhdCBgTmVlZHNLTVNBTmAgaXMgYGZhbHNlYCBmb3IgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxMTgsIk91dHB1dFRva2VucyI6Mzc3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzg2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjEwOjA1LjQ4MDA0MjYwM1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmRzIChgSU5URl9DQVBTX0dFVGAsIGBQSFlfVEVTVF9HRVRgLCBgUEhZX1RFU1RfQUNUYCkgdG8gcXVlcnkgaW50ZXJmYWNlIGNhcGFiaWxpdGllcyBhbmQgY29uZmlndXJlIFBIWSB0ZXN0cy4gVGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgZXRodG9vbCBjb3JlIGFuZCB0aGUgZHJpdmVycyAoYHN0cnVjdCBldGh0b29sX2ludGZfY2Fwc2AgYW5kIGBzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdGApIGFyZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkuXFxuXFxuSG93ZXZlciwgdGhlIGV0aHRvb2wgbmV0bGluayBmcmFtZXdvcmsgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVzIHRoZSByZXBseSBkYXRhIHN0cnVjdHVyZXMgdmlhIGBldGhubF9pbml0X3JlcGx5X2RhdGEoKWAgKHdoaWNoIGNhbGxzIGBtZW1zZXQocmVwbHlfZGF0YSwgMCwgb3BzLVxcdTAwM2VyZXBseV9kYXRhX3NpemUpYCkgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUgZHJpdmVyIGNhbGxiYWNrcyAoZS5nLiwgYGdldF9pbnRmX2NhcHNgKS4gU2ltaWxhcmx5LCBgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhKClgIGV4cGxpY2l0bHkgY2FsbHMgYG1lbXNldChcXHUwMDI2ZGF0YS1cXHUwMDNldGVzdCwgMCwgc2l6ZW9mKGRhdGEtXFx1MDAzZXRlc3QpKWAsIGFuZCBgZXRobmxfYWN0X3BoeV90ZXN0KClgIGluaXRpYWxpemVzIGl0cyBsb2NhbCBzdHJ1Y3Qgd2l0aCBgPSB7fWAuXFxuXFxuQmVjYXVzZSBhbGwgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCBiZWZvcmUgdXNlLCB0aGVyZSBpcyBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgb3IgaGVhcCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgZXZlbiBpZiBhIGRyaXZlciBmYWlscyB0byBwb3B1bGF0ZSBhbGwgZmllbGRzLiBGdXJ0aGVybW9yZSwgdGhlIG5ldGxpbmsgcmVzcG9uc2UgaXMgY29uc3RydWN0ZWQgYnkgc2VyaWFsaXppbmcgaW5kaXZpZHVhbCBmaWVsZHMgdXNpbmcgYG5sYV9wdXRfdTMyYCwgYG5sYV9wdXRfc3RyaW5nYCwgZXRjLiwgcmF0aGVyIHRoYW4gY29weWluZyByYXcgc3RydWN0cywgd2hpY2ggaW5oZXJlbnRseSBhdm9pZHMgbGVha2luZyBzdHJ1Y3QgcGFkZGluZy5cXG5cXG5BbnkgcG90ZW50aWFsIGlzc3Vlcywgc3VjaCBhcyBhIGRyaXZlciB3cml0aW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGJsb2Nrc2AgYXJyYXkgb3IgcmV0dXJuaW5nIGFuIGludmFsaWQgYG51bV9ibG9ja3NgIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyByZWFkcywgd291bGQgYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmRzIChgSU5URl9DQVBTX0dFVGAsIGBQSFlfVEVTVF9HRVRgLCBgUEhZX1RFU1RfQUNUYCkgdG8gcXVlcnkgaW50ZXJmYWNlIGNhcGFiaWxpdGllcyBhbmQgY29uZmlndXJlIFBIWSB0ZXN0cy4gVGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgZXRodG9vbCBjb3JlIGFuZCB0aGUgZHJpdmVycyAoYHN0cnVjdCBldGh0b29sX2ludGZfY2Fwc2AgYW5kIGBzdHJ1Y3QgZXRodG9vbF9waHlfdGVzdGApIGFyZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkuXFxuXFxuSG93ZXZlciwgdGhlIGV0aHRvb2wgbmV0bGluayBmcmFtZXdvcmsgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVzIHRoZSByZXBseSBkYXRhIHN0cnVjdHVyZXMgdmlhIGBldGhubF9pbml0X3JlcGx5X2RhdGEoKWAgKHdoaWNoIGNhbGxzIGBtZW1zZXQocmVwbHlfZGF0YSwgMCwgb3BzLVxcdTAwM2VyZXBseV9kYXRhX3NpemUpYCkgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUgZHJpdmVyIGNhbGxiYWNrcyAoZS5nLiwgYGdldF9pbnRmX2NhcHNgKS4gU2ltaWxhcmx5LCBgcGh5X3Rlc3RfcHJlcGFyZV9kYXRhKClgIGV4cGxpY2l0bHkgY2FsbHMgYG1lbXNldChcXHUwMDI2ZGF0YS1cXHUwMDNldGVzdCwgMCwgc2l6ZW9mKGRhdGEtXFx1MDAzZXRlc3QpKWAsIGFuZCBgZXRobmxfYWN0X3BoeV90ZXN0KClgIGluaXRpYWxpemVzIGl0cyBsb2NhbCBzdHJ1Y3Qgd2l0aCBgPSB7fWAuXFxuXFxuQmVjYXVzZSBhbGwgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCBiZWZvcmUgdXNlLCB0aGVyZSBpcyBubyByaXNrIG9mIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgb3IgaGVhcCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgZXZlbiBpZiBhIGRyaXZlciBmYWlscyB0byBwb3B1bGF0ZSBhbGwgZmllbGRzLiBGdXJ0aGVybW9yZSwgdGhlIG5ldGxpbmsgcmVzcG9uc2UgaXMgY29uc3RydWN0ZWQgYnkgc2VyaWFsaXppbmcgaW5kaXZpZHVhbCBmaWVsZHMgdXNpbmcgYG5sYV9wdXRfdTMyYCwgYG5sYV9wdXRfc3RyaW5nYCwgZXRjLiwgcmF0aGVyIHRoYW4gY29weWluZyByYXcgc3RydWN0cywgd2hpY2ggaW5oZXJlbnRseSBhdm9pZHMgbGVha2luZyBzdHJ1Y3QgcGFkZGluZy5cXG5cXG5BbnkgcG90ZW50aWFsIGlzc3Vlcywgc3VjaCBhcyBhIGRyaXZlciB3cml0aW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGJsb2Nrc2AgYXJyYXkgb3IgcmV0dXJuaW5nIGFuIGludmFsaWQgYG51bV9ibG9ja3NgIGxlYWRpbmcgdG8gb3V0LW9mLWJvdW5kcyByZWFkcywgd291bGQgYmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowdhldv[1] Phase: Succeeded StartedAt: 2026-08-25 05:10:16 +0000 UTC FinishedAt: 2026-08-25 05:10:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 05:10:16 +0000 UTC FinishedAt: 2026-08-25 05:10:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2] Phase: Succeeded StartedAt: 2026-08-25 05:10:16 +0000 UTC FinishedAt: 2026-08-25 08:49:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 05:10:16 +0000 UTC FinishedAt: 2026-08-25 08:49:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 05:10:16 +0000 UTC FinishedAt: 2026-08-25 05:10:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 05:10:16 +0000 UTC FinishedAt: 2026-08-25 05:10:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdhldv/series-workflowdhldv-convert-artifact-2562403858/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 05:10:27 +0000 UTC FinishedAt: 2026-08-25 05:26:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 05:10:27 +0000 UTC FinishedAt: 2026-08-25 05:26:18 +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:*b89cb2b4-76bd-4f8f-89d5-09ae20a4a293,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-workflowdhldv/series-workflowdhldv-convert-artifact-2562403858/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": "61af20bb-7327-4567-a35a-521ca0613563", "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-workflowdhldv/series-workflowdhldv-build-action-685092752/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 05:10:27 +0000 UTC FinishedAt: 2026-08-25 05:26:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b89cb2b4-76bd-4f8f-89d5-09ae20a4a293,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-workflowdhldv/series-workflowdhldv-convert-artifact-2562403858/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": "61af20bb-7327-4567-a35a-521ca0613563", "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-workflowdhldv/series-workflowdhldv-build-action-685092752/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 05:26:18 +0000 UTC FinishedAt: 2026-08-25 05:26:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 05:26:18 +0000 UTC FinishedAt: 2026-08-25 05:26:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 05:26:18 +0000 UTC FinishedAt: 2026-08-25 05:26:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 05:26:18 +0000 UTC FinishedAt: 2026-08-25 05:26:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdhldv/series-workflowdhldv-convert-artifact-184051245/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 05:26:28 +0000 UTC FinishedAt: 2026-08-25 05:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 05:26:28 +0000 UTC FinishedAt: 2026-08-25 05:28:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*61af20bb-7327-4567-a35a-521ca0613563,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-workflowdhldv/series-workflowdhldv-build-action-685092752/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-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 05:28:41 +0000 UTC FinishedAt: 2026-08-25 05:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 05:28:41 +0000 UTC FinishedAt: 2026-08-25 05:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 05:28:41 +0000 UTC FinishedAt: 2026-08-25 05:46:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 05:28:41 +0000 UTC FinishedAt: 2026-08-25 05:46:15 +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:*b89cb2b4-76bd-4f8f-89d5-09ae20a4a293,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-workflowdhldv/series-workflowdhldv-convert-artifact-184051245/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": "7738c522-6c59-4e3d-9db3-8d879085cced", "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-workflowdhldv/series-workflowdhldv-build-action-4231834249/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 05:28:41 +0000 UTC FinishedAt: 2026-08-25 05:46:05 +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:*b89cb2b4-76bd-4f8f-89d5-09ae20a4a293,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-workflowdhldv/series-workflowdhldv-convert-artifact-184051245/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": "7738c522-6c59-4e3d-9db3-8d879085cced", "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-workflowdhldv/series-workflowdhldv-build-action-4231834249/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 05:46:15 +0000 UTC FinishedAt: 2026-08-25 05:46:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 05:46:15 +0000 UTC FinishedAt: 2026-08-25 05:46:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 05:46:15 +0000 UTC FinishedAt: 2026-08-25 05:48:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 05:46:15 +0000 UTC FinishedAt: 2026-08-25 05:48:06 +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:*7738c522-6c59-4e3d-9db3-8d879085cced,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-workflowdhldv/series-workflowdhldv-build-action-4231834249/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-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 05:48:16 +0000 UTC FinishedAt: 2026-08-25 08:49:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 05:48:16 +0000 UTC FinishedAt: 2026-08-25 08:49:47 +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":["ethnl_act_phy_test"],"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:*61af20bb-7327-4567-a35a-521ca0613563,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7738c522-6c59-4e3d-9db3-8d879085cced,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-workflowdhldv/series-workflowdhldv-build-action-685092752/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-workflowdhldv/series-workflowdhldv-build-action-4231834249/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 05:48:16 +0000 UTC FinishedAt: 2026-08-25 05:48:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 05:48:16 +0000 UTC FinishedAt: 2026-08-25 05:48:22 +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":["ethnl_act_phy_test"],"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-workflowdhldv/series-workflowdhldv-convert-artifact-578700434/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 05:48:16 +0000 UTC FinishedAt: 2026-08-25 05:48:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 05:48:16 +0000 UTC FinishedAt: 2026-08-25 05:48:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 05:48:16 +0000 UTC FinishedAt: 2026-08-25 05:48:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 05:48:26 +0000 UTC FinishedAt: 2026-08-25 08:49:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdhldv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_act_phy_test"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["ETHTOOL_NETLINK"],"series_id":"9efbd7b1-620a-4f70-9c56-1f5773c6efd6","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 05:48:26 +0000 UTC FinishedAt: 2026-08-25 08:49:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*61af20bb-7327-4567-a35a-521ca0613563,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7738c522-6c59-4e3d-9db3-8d879085cced,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-workflowdhldv/series-workflowdhldv-build-action-685092752/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-workflowdhldv/series-workflowdhldv-build-action-4231834249/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-workflowdhldv/series-workflowdhldv-convert-artifact-578700434/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,}