Name: series-workflowtqk9h Phase: Succeeded StartedAt: 2026-09-11 22:01:55 +0000 UTC FinishedAt: 2026-09-12 02:31:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[0] Phase: Succeeded StartedAt: 2026-09-11 22:01:55 +0000 UTC FinishedAt: 2026-09-11 22:51:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 22:01:55 +0000 UTC FinishedAt: 2026-09-11 22:51:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "ef39fca8508597fa565cf2be72a884a712fb98af", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VXLAN", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "ef39fca8508597fa565cf2be72a884a712fb98af", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VXLAN", "INET" ], "series_id": "61645882-9d5b-4310-89e2-4f3a98eee765" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vxlan_vni_add", "vxlan_fdb_update", "vxlan_fdb_update_existing", "vxlan_fdb_update_create", "vxlan_vnifilter_process" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "ef39fca8508597fa565cf2be72a884a712fb98af", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZYTEFOJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2eGxhbl92bmlfYWRkJiMzNDssCiAgICAmIzM0O3Z4bGFuX2ZkYl91cGRhdGUmIzM0OywKICAgICYjMzQ7dnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyYjMzQ7LAogICAgJiMzNDt2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2eGxhbl92bmlmaWx0ZXJfcHJvY2VzcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3ItdW53aW5kIGxvZ2ljIHRvIHZ4bGFuX3ZuaV9hZGQoKSBpZiB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKCkgZmFpbHMsIGludHJvZHVjaW5nIGEgYm9vbGVhbiBvdXQtcGFyYW1ldGVyICgmIzM5O2NyZWF0ZWQmIzM5OyAvICYjMzk7ZmRiX2NyZWF0ZWQmIzM5OykgYWNyb3NzIHZ4bGFuX2ZkYl91cGRhdGUoKSBhbmQgaGVscGVycyB0byB0cmFjayB3aGV0aGVyIGFuIEZEQiBlbnRyeSB3YXMgY3JlYXRlZCBzbyBpdCBjYW4gYmUgcm9sbGVkIGJhY2suXG5cbjEuIEtBU0FOIC8gTE9DS0RFUCBBcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggbW9kaWZpZXMgY2xlYW51cCBwYXRocyBhbmQgb2JqZWN0IGxpZmVjeWNsZSAodW53aW5kaW5nIGhhc2h0YWJsZSBpbnNlcnRpb24sIGxpc3QgYWRkaXRpb24sIHNvY2tldCBzdGF0ZSwgYW5kIHNjaGVkdWxpbmcgUkNVIGRlc3RydWN0aW9uIG9mIHZuaW5vZGUsIHBsdXMgZGVsZXRpbmcgRkRCIGVudHJpZXMgdW5kZXIgaGFzaF9sb2NrKS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgaGVyZSAoZS5nLiB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGxpc3QgY29ycnVwdGlvbiwgb3IgbG9ja2luZyBkaXNjcmVwYW5jaWVzKSBhcmUgYWRkcmVzc2VkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLlxuMi4gS01TQU4gQXBwbGljYWJpbGl0eTogS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgYW5kIGluZm8tbGVha3MuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIHZhcmlhYmxlICYjMzk7Ym9vbCBmZGJfY3JlYXRlZCA9IGZhbHNlOyYjMzk7IGluIHZ4bGFuX3ZuaV9hZGQoKSBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrLCBhbmQgdGhlIGNhbGxlZSBmdW5jdGlvbnMgb25seSBjb25kaXRpb25hbGx5IHdyaXRlICYjMzk7KmNyZWF0ZWQgPSB0cnVlJiMzOTsgd2l0aG91dCByZWFkaW5nIGZyb20gaXQgdW5pbml0aWFsaXplZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGhlYXAgYWxsb2NhdGlvbnMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgY3JlYXRlZCwgYW5kIG5vIGJyYW5jaGluZyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhbmQgZG9lcyBub3QganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWWExBTiBkcml2ZXIgKHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHJ0bmV0bGluayBjb21tYW5kcyBzdWNoIGFzIFJUTV9ORVdUVU5ORUwgYW5kIFJUTV9ORVdORUlHSCkuIEl0IHVwZGF0ZXMgdGhlIEZEQiB1cGRhdGUgbG9naWMgYWNyb3NzIHZ4bGFuX2ZkYl91cGRhdGUoKSwgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUoKSwgYW5kIHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcoKSB0byB0cmFjayB3aGVuIGFuIGVudHJ5IGlzIG5ld2x5IGNyZWF0ZWQsIGFuZCBpbXBsZW1lbnRzIGFuIGVycm9yIHJvbGxiYWNrIHBhdGggaW4gdnhsYW5fdm5pX2FkZCgpIHRoYXQgdGVhcnMgZG93biBGREIgZW50cmllcywgdW5saW5rcyBWTkkgbm9kZXMsIGFuZCBmcmVlcyBtZW1vcnkgdmlhIFJDVSBpZiB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKCkgZmFpbHMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgYWx0ZXJpbmcgc3RhdGUgbWFuYWdlbWVudCwgc3luY2hyb25pemF0aW9uLCBhbmQgZXJyb3ItaGFuZGxpbmcgaW4gdGhlIHZpcnR1YWwgbmV0d29ya2luZyBzdWJzeXN0ZW0sIG1ha2luZyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2NiOTcxZmU1NWFkNWM5MThjY2M5OWFiNTI4NDQ5NTg4NWVjOTViZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDIyOjQ5OjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1xuaW5kZXggYmU5NWFmNjRhMWY1MS4uMDY1MmRjNDcxZGNhNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jXG5AQCAtOTc0LDcgJiM0Mzs5NzQsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdFx0XHQgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgdm5pLFxuIFx0XHRcdFx0ICAgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB2eGxhbl9mZGIgKmYsIHUzMiBuaGlkLFxuLVx0XHRcdFx0ICAgICBib29sIHN3ZGV2X25vdGlmeSxcbiYjNDM7XHRcdFx0XHQgICAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0X191MTYgZmRiX2ZsYWdzID0gKG5kbV9mbGFncyBcdTAwMjYgfk5URl9VU0UpO1xuQEAgLTEwNDIsNiAmIzQzOzEwNDIsOCBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXG4gXHRcdGlmIChyYyBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHRpZiAocmMgXHUwMDI2XHUwMDI2IGNyZWF0ZWQpXG4mIzQzO1x0XHRcdCpjcmVhdGVkID0gdHJ1ZTtcbiBcdFx0bm90aWZ5IHw9IHJjO1xuIFx0fVxuIFxuQEAgLTEwNzgsNyAmIzQzOzEwODAsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0XHRcdFx0ICAgX191MTYgc3RhdGUsIF9fdTE2IGZsYWdzLFxuIFx0XHRcdFx0ICAgX19iZTE2IHBvcnQsIF9fYmUzMiBzcmNfdm5pLCBfX2JlMzIgdm5pLFxuIFx0XHRcdFx0ICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLCB1MzIgbmhpZCxcbi1cdFx0XHRcdCAgIGJvb2wgc3dkZXZfbm90aWZ5LFxuJiM0MztcdFx0XHRcdCAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdF9fdTE2IGZkYl9mbGFncyA9IChuZG1fZmxhZ3MgXHUwMDI2IH5OVEZfVVNFKTtcbkBAIC0xMTAxLDYgJiM0MzsxMTAzLDkgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdGlmIChyYylcbiBcdFx0Z290byBlcnJfbm90aWZ5O1xuIFxuJiM0MztcdGlmIChjcmVhdGVkKVxuJiM0MztcdFx0KmNyZWF0ZWQgPSB0cnVlO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIFxuIGVycl9ub3RpZnk6XG5AQCAtMTExNCw3ICYjNDM7MTExOSw3IEBAIGludCB2eGxhbl9mZGJfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0XHQgICAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncyxcbiBcdFx0ICAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHNyY192bmksIF9fYmUzMiB2bmksXG4gXHRcdCAgICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLCB1MzIgbmhpZCxcbi1cdFx0ICAgICBib29sIHN3ZGV2X25vdGlmeSxcbiYjNDM7XHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXG4gXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCB2eGxhbl9mZGIgKmY7XG5AQCAtMTEyOSw3ICYjNDM7MTEzNCw4IEBAIGludCB2eGxhbl9mZGJfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFxuIFx0XHRyZXR1cm4gdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyh2eGxhbiwgaXAsIHN0YXRlLCBmbGFncywgcG9ydCxcbiBcdFx0XHRcdFx0XHQgdm5pLCBpZmluZGV4LCBuZG1fZmxhZ3MsIGYsXG4tXHRcdFx0XHRcdFx0IG5oaWQsIHN3ZGV2X25vdGlmeSwgZXh0YWNrKTtcbiYjNDM7XHRcdFx0XHRcdFx0IG5oaWQsIHN3ZGV2X25vdGlmeSwgY3JlYXRlZCxcbiYjNDM7XHRcdFx0XHRcdFx0IGV4dGFjayk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAoIShmbGFncyBcdTAwMjYgTkxNX0ZfQ1JFQVRFKSlcbiBcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbkBAIC0xMTM3LDcgJiM0MzsxMTQzLDcgQEAgaW50IHZ4bGFuX2ZkYl91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdHJldHVybiB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSh2eGxhbiwgbWFjLCBpcCwgc3RhdGUsIGZsYWdzLFxuIFx0XHRcdFx0XHQgICAgICAgcG9ydCwgc3JjX3ZuaSwgdm5pLCBpZmluZGV4LFxuIFx0XHRcdFx0XHQgICAgICAgbmRtX2ZsYWdzLCBuaGlkLCBzd2Rldl9ub3RpZnksXG4tXHRcdFx0XHRcdCAgICAgICBleHRhY2spO1xuJiM0MztcdFx0XHRcdFx0ICAgICAgIGNyZWF0ZWQsIGV4dGFjayk7XG4gXHR9XG4gfVxuIFxuQEAgLTEyNzUsNyAmIzQzOzEyODEsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRlcnIgPSB2eGxhbl9mZGJfdXBkYXRlKHZ4bGFuLCBhZGRyLCBcdTAwMjZpcCwgbmRtLVx1MDAzZW5kbV9zdGF0ZSwgZmxhZ3MsXG4gXHRcdFx0ICAgICAgIHBvcnQsIHNyY192bmksIHZuaSwgaWZpbmRleCxcbiBcdFx0XHQgICAgICAgbmRtLVx1MDAzZW5kbV9mbGFncyB8IE5URl9WWExBTl9BRERFRF9CWV9VU0VSLFxuLVx0XHRcdCAgICAgICBuaGlkLCB0cnVlLCBleHRhY2spO1xuJiM0MztcdFx0XHQgICAgICAgbmhpZCwgdHJ1ZSwgTlVMTCwgZXh0YWNrKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4gXG4gXHRpZiAoIWVycilcbkBAIC0xNDkxLDcgJiM0MzsxNDk3LDggQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIHZ4bGFuX3Nub29wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRcdCB2eGxhbi1cdTAwM2VjZmcuZHN0X3BvcnQsXG4gXHRcdFx0XHRcdCB2bmksXG4gXHRcdFx0XHRcdCB2eGxhbi1cdTAwM2VkZWZhdWx0X2RzdC5yZW1vdGVfdm5pLFxuLVx0XHRcdFx0XHQgaWZpbmRleCwgTlRGX1NFTEYsIDAsIHRydWUsIE5VTEwpO1xuJiM0MztcdFx0XHRcdFx0IGlmaW5kZXgsIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMLFxuJiM0MztcdFx0XHRcdFx0IE5VTEwpO1xuIFx0XHRzcGluX3VubG9jayhcdTAwMjZ2eGxhbi1cdTAwM2VoYXNoX2xvY2spO1xuIFx0fVxuIFxuQEAgLTQwMzQsNyAmIzQzOzQwNDEsOCBAQCBzdGF0aWMgaW50IHZ4bGFuX2Rldl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgICAgIGRzdC1cdTAwM2VyZW1vdGVfdm5pLFxuIFx0XHRcdFx0ICAgICAgIGRzdC1cdTAwM2VyZW1vdGVfdm5pLFxuIFx0XHRcdFx0ICAgICAgIGRzdC1cdTAwM2VyZW1vdGVfaWZpbmRleCxcbi1cdFx0XHRcdCAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgZXh0YWNrKTtcbiYjNDM7XHRcdFx0XHQgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIE5VTEwsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGV4dGFjayk7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byB1bmxpbms7XG5AQCAtNDQ4NSw3ICYjNDM7NDQ5Myw4IEBAIHN0YXRpYyBpbnQgdnhsYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0XHRcdFx0XHQgICAgICAgdnhsYW4tXHUwMDNlY2ZnLmRzdF9wb3J0LFxuIFx0XHRcdFx0XHQgICAgICAgY29uZi52bmksIGNvbmYudm5pLFxuIFx0XHRcdFx0XHQgICAgICAgY29uZi5yZW1vdGVfaWZpbmRleCxcbi1cdFx0XHRcdFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBleHRhY2spO1xuJiM0MztcdFx0XHRcdFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGV4dGFjayk7XG4gXHRcdFx0aWYgKGVycikge1xuIFx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbiBcdFx0XHRcdG5ldGRldl9hZGphY2VudF9jaGFuZ2VfYWJvcnQoZHN0LVx1MDAzZXJlbW90ZV9kZXYsXG5AQCAtNDgwNiw3ICYjNDM7NDgxNSw3IEBAIHZ4bGFuX2ZkYl9leHRlcm5hbF9sZWFybl9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgICAgICAgZmRiX2luZm8tXHUwMDNlcmVtb3RlX3ZuaSxcbiBcdFx0XHQgICAgICAgZmRiX2luZm8tXHUwMDNlcmVtb3RlX2lmaW5kZXgsXG4gXHRcdFx0ICAgICAgIE5URl9VU0UgfCBOVEZfU0VMRiB8IE5URl9FWFRfTEVBUk5FRCxcbi1cdFx0XHQgICAgICAgMCwgZmFsc2UsIGV4dGFjayk7XG4mIzQzO1x0XHRcdCAgICAgICAwLCBmYWxzZSwgTlVMTCwgZXh0YWNrKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaCBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaFxuaW5kZXggYjFlZWMyMjE2MzYwOC4uZTUyNzU1OTIzYzMxMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oXG5AQCAtMTkzLDcgJiM0MzsxOTMsOCBAQCBpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0ICAgICBfX3UxNiBzdGF0ZSwgX191MTYgZmxhZ3MsXG4gXHRcdCAgICAgX19iZTE2IHBvcnQsIF9fYmUzMiBzcmNfdm5pLCBfX2JlMzIgdm5pLFxuIFx0XHQgICAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsXG4tXHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO1x0XHQgICAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLFxuJiM0MztcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIHZvaWQgdnhsYW5feG1pdF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgIF9fYmUzMiBkZWZhdWx0X3ZuaSwgc3RydWN0IHZ4bGFuX3Jkc3QgKnJkc3QsIGJvb2wgZGlkX3JzYyk7XG4gaW50IHZ4bGFuX3ZuaV9pbl91c2Uoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY1xuaW5kZXggZGQ5NDA4NWUwODg2NS4uOWNjOTMyYzYxNzdkMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY1xuQEAgLTQ3Myw2ICYjNDM7NDczLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHZuaV9maWx0ZXJfcG9saWN5W1ZYTEFOX1ZOSUZJTFRFUl9NQVggJiM0MzsgMV0gPSB7XG4gc3RhdGljIGludCB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnkoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIF9fYmUzMiB2bmksXG4gXHRcdFx0XHRcdCAgdW5pb24gdnhsYW5fYWRkciAqb2xkX3JlbW90ZV9pcCxcbiBcdFx0XHRcdFx0ICB1bmlvbiB2eGxhbl9hZGRyICpyZW1vdGVfaXAsXG4mIzQzO1x0XHRcdFx0XHQgIGJvb2wgKmZkYl9jcmVhdGVkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgdnhsYW5fcmRzdCAqZHN0ID0gXHUwMDI2dnhsYW4tXHUwMDNlZGVmYXVsdF9kc3Q7XG5AQCAtNDg4LDcgJiM0Mzs0ODksOCBAQCBzdGF0aWMgaW50IHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgX19iZTMyIHZuaSxcbiBcdFx0XHRcdCAgICAgICB2bmksXG4gXHRcdFx0XHQgICAgICAgdm5pLFxuIFx0XHRcdFx0ICAgICAgIGRzdC1cdTAwM2VyZW1vdGVfaWZpbmRleCxcbi1cdFx0XHRcdCAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgZXh0YWNrKTtcbiYjNDM7XHRcdFx0XHQgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIGZkYl9jcmVhdGVkLFxuJiM0MztcdFx0XHRcdCAgICAgICBleHRhY2spO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbiBcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTUxMiw2ICYjNDM7NTE0LDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnZuaW5vZGUsXG4gXHRcdFx0XHQgIHVuaW9uIHZ4bGFuX2FkZHIgKmdyb3VwLFxuIFx0XHRcdFx0ICBib29sIGNyZWF0ZSwgYm9vbCAqY2hhbmdlZCxcbiYjNDM7XHRcdFx0XHQgIGJvb2wgKmZkYl9jcmVhdGVkLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IHZ4bGFuX25ldCAqdm4gPSBuZXRfZ2VuZXJpYyh2eGxhbi1cdTAwM2VuZXQsIHZ4bGFuX25ldF9pZCk7XG5AQCAtNTQ1LDcgJiM0Mzs1NDgsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0ID0gdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHZ4bGFuLCB2bmlub2RlLVx1MDAzZXZuaSxcbi1cdFx0XHRcdFx0ICAgICBvbGRyaXAsIG5ld3JpcCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgb2xkcmlwLCBuZXdyaXAsIGZkYl9jcmVhdGVkLFxuIFx0XHRcdFx0XHQgICAgIGV4dGFjayk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dDtcbkBAIC01OTksNyAmIzQzOzYwMiw3IEBAIGludCB2eGxhbl92bmlsaXN0X3VwZGF0ZV9ncm91cChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0XHRyZXQgPSB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnkodnhsYW4sIHZlbnQtXHUwMDNldm5pLFxuIFx0XHRcdFx0XHRcdFx0ICAgICBvbGRfcmVtb3RlX2lwLFxuIFx0XHRcdFx0XHRcdFx0ICAgICBuZXdfcmVtb3RlX2lwLFxuLVx0XHRcdFx0XHRcdFx0ICAgICBleHRhY2spO1xuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgTlVMTCwgZXh0YWNrKTtcbiBcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuQEAgLTY1NSw3ICYjNDM7NjU4LDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJldCA9IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAodnhsYW4sIHZuaW5vZGUsIGdyb3VwLCBmYWxzZSwgY2hhbmdlZCxcbi1cdFx0XHRcdCAgICAgZXh0YWNrKTtcbiYjNDM7XHRcdFx0XHQgICAgIE5VTEwsIGV4dGFjayk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTcxOCw2ICYjNDM7NzIxLDggQEAgc3RhdGljIHZvaWQgdnhsYW5fdm5pX2ZyZWUoc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlKVxuIFx0a2ZyZWUodm5pbm9kZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSk7XG4mIzQzO1xuIHN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0XHQgc3RydWN0IHZ4bGFuX3ZuaV9ncm91cCAqdmcsXG4gXHRcdFx0IHUzMiB2bmksIHVuaW9uIHZ4bGFuX2FkZHIgKmdyb3VwLFxuQEAgLTcyNSw2ICYjNDM7NzMwLDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIHtcbiBcdHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZTtcbiBcdF9fYmUzMiB2ID0gY3B1X3RvX2JlMzIodm5pKTtcbiYjNDM7XHRib29sIGZkYl9jcmVhdGVkID0gZmFsc2U7XG4gXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiBcdGludCBlcnIgPSAwO1xuIFxuQEAgLTc1NSwxMCAmIzQzOzc2MSw0NyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZSh2eGxhbiwgdm5pbm9kZSwgZmFsc2UpO1xuIFxuIFx0ZXJyID0gdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCh2eGxhbiwgdm5pbm9kZSwgZ3JvdXAsIHRydWUsIFx1MDAyNmNoYW5nZWQsXG4tXHRcdFx0XHQgICAgIGV4dGFjayk7XG4mIzQzO1x0XHRcdFx0ICAgICBcdTAwMjZmZGJfY3JlYXRlZCwgZXh0YWNrKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfdm5pX2RlbDtcbiBcbiBcdHZ4bGFuX3ZuaWZpbHRlcl9ub3RpZnkodnhsYW4sIHZuaW5vZGUsIFJUTV9ORVdUVU5ORUwpO1xuIFxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3ZuaV9kZWw6XG4mIzQzO1x0LyogVW5kbyBvbmx5IHRoZSBkZWZhdWx0IEZEQiBlbnRyeSB0aGlzIGFkZCBpbnN0YWxsZWQuICBBbiBlbnRyeSB0aGF0XG4mIzQzO1x0ICogd2FzIGFscmVhZHkgdGhlcmUsIHdoZXRoZXIgYWRkZWQgb3V0IG9mIGJhbmQgb3IgYnkgYW5vdGhlciBWTkksIGlzXG4mIzQzO1x0ICogbGVmdCBhbG9uZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIE5vIG1lbWJlcnNoaXAgaGFzIHRvIGJlIGdpdmVuIGJhY2s6IHZ4bGFuX2lnbXBfbGVhdmUoKSBpcyBnYXRlZCBvblxuJiM0MztcdCAqIHZ4bGFuX2FkZHJfbXVsdGljYXN0KFx1MDAyNm9sZF9yZW1vdGVfaXApLCBhbmQgb2xkX3JlbW90ZV9pcCBpcyBhIGNvcHlcbiYjNDM7XHQgKiBvZiB0aGUgcmVtb3RlIElQIG9mIGEgbm9kZSB0aGlzIGFkZCBqdXN0IGFsbG9jYXRlZCwgc28gaXQgaXMgemVyby5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSBhZGRyZXNzIHBpY2tlZCBiZWxvdyBpcyB0aGUgb25lIHRoZSBlbnRyeSB3YXMgaW5zdGFsbGVkXG4mIzQzO1x0ICogYWdhaW5zdC4gIElmIHRoZSByZXF1ZXN0IGNhcnJpZWQgYSBncm91cCwgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpXG4mIzQzO1x0ICogY29waWVkIGl0IGludG8gdm5pbm9kZS1cdTAwM2VyZW1vdGVfaXAgYmVmb3JlIHRoZSBqb2luIGNvdWxkIGZhaWw7IGlmXG4mIzQzO1x0ICogaXQgZGlkIG5vdCwgdGhhdCBjb3B5IHdhcyBza2lwcGVkIGFuZCB0aGUgZW50cnkgd2VudCB0byB0aGUgZGV2aWNlXG4mIzQzO1x0ICogZGVmYXVsdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZmRiX2NyZWF0ZWQpIHtcbiYjNDM7XHRcdHVuaW9uIHZ4bGFuX2FkZHIgKnJpcCA9IHZ4bGFuX2FkZHJfYW55KFx1MDAyNnZuaW5vZGUtXHUwMDNlcmVtb3RlX2lwKSA/XG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZ2eGxhbi1cdTAwM2VkZWZhdWx0X2RzdC5yZW1vdGVfaXAgOlxuJiM0MztcdFx0XHRcdFx0XHUwMDI2dm5pbm9kZS1cdTAwM2VyZW1vdGVfaXA7XG4mIzQzO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4mIzQzO1x0XHRfX3Z4bGFuX2ZkYl9kZWxldGUodnhsYW4sIGFsbF96ZXJvc19tYWMsICpyaXAsXG4mIzQzO1x0XHRcdFx0ICAgdnhsYW4tXHUwMDNlY2ZnLmRzdF9wb3J0LCB2bmlub2RlLVx1MDAzZXZuaSxcbiYjNDM7XHRcdFx0XHQgICB2bmlub2RlLVx1MDAzZXZuaSxcbiYjNDM7XHRcdFx0XHQgICB2eGxhbi1cdTAwM2VkZWZhdWx0X2RzdC5yZW1vdGVfaWZpbmRleCwgdHJ1ZSk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ2eGxhbi1cdTAwM2VoYXNoX2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnZnLVx1MDAzZXZuaV9oYXNoLCBcdTAwMjZ2bmlub2RlLVx1MDAzZXZub2RlLFxuJiM0MztcdFx0XHQgICAgICAgdnhsYW5fdm5pX3JodF9wYXJhbXMpO1xuJiM0MztcdF9fdnhsYW5fdm5pX2RlbF9saXN0KHZnLCB2bmlub2RlKTtcbiYjNDM7XHRpZiAodnhsYW4tXHUwMDNlZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApXG4mIzQzO1x0XHR2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGUodnhsYW4sIHZuaW5vZGUsIHRydWUpO1xuJiM0MztcdGNhbGxfcmN1KFx1MDAyNnZuaW5vZGUtXHUwMDNlcmN1LCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWWExBTiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dnhsYW5fdm5pX2FkZCYjMzQ7LAogICAgJiMzNDt2eGxhbl9mZGJfdXBkYXRlJiMzNDssCiAgICAmIzM0O3Z4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcmIzM0OywKICAgICYjMzQ7dnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUmIzM0OywKICAgICYjMzQ7dnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZYTEFOIGRyaXZlciAocmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIGNvbW1hbmRzIHN1Y2ggYXMgUlRNX05FV1RVTk5FTCBhbmQgUlRNX05FV05FSUdIKS4gSXQgdXBkYXRlcyB0aGUgRkRCIHVwZGF0ZSBsb2dpYyBhY3Jvc3MgdnhsYW5fZmRiX3VwZGF0ZSgpLCB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSgpLCBhbmQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZygpIHRvIHRyYWNrIHdoZW4gYW4gZW50cnkgaXMgbmV3bHkgY3JlYXRlZCwgYW5kIGltcGxlbWVudHMgYW4gZXJyb3Igcm9sbGJhY2sgcGF0aCBpbiB2eGxhbl92bmlfYWRkKCkgdGhhdCB0ZWFycyBkb3duIEZEQiBlbnRyaWVzLCB1bmxpbmtzIFZOSSBub2RlcywgYW5kIGZyZWVzIG1lbW9yeSB2aWEgUkNVIGlmIHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKSBmYWlscy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBsb2dpYyBhbHRlcmluZyBzdGF0ZSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBlcnJvci1oYW5kbGluZyBpbiB0aGUgdmlydHVhbCBuZXR3b3JraW5nIHN1YnN5c3RlbSwgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3Y2I5NzFmZTU1YWQ1YzkxOGNjYzk5YWI1Mjg0NDk1ODg1ZWM5NWJmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMjI6NDk6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMKaW5kZXggYmU5NWFmNjRhMWY1MS4uMDY1MmRjNDcxZGNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYwpAQCAtOTc0LDcgJiM0Mzs5NzQsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiAJCQkJICAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHZuaSwKIAkJCQkgICAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywKIAkJCQkgICAgIHN0cnVjdCB2eGxhbl9mZGIgKmYsIHUzMiBuaGlkLAotCQkJCSAgICAgYm9vbCBzd2Rldl9ub3RpZnksCiYjNDM7CQkJCSAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsCiAJCQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJX191MTYgZmRiX2ZsYWdzID0gKG5kbV9mbGFncyAmYW1wOyB+TlRGX1VTRSk7CkBAIC0xMDQyLDYgJiM0MzsxMDQyLDggQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCiAJCWlmIChyYyAmbHQ7IDApCiAJCQlyZXR1cm4gcmM7CiYjNDM7CQlpZiAocmMgJmFtcDsmYW1wOyBjcmVhdGVkKQomIzQzOwkJCSpjcmVhdGVkID0gdHJ1ZTsKIAkJbm90aWZ5IHw9IHJjOwogCX0KIApAQCAtMTA3OCw3ICYjNDM7MTA4MCw3IEBAIHN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiAJCQkJICAgX191MTYgc3RhdGUsIF9fdTE2IGZsYWdzLAogCQkJCSAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSwKIAkJCQkgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsIHUzMiBuaGlkLAotCQkJCSAgIGJvb2wgc3dkZXZfbm90aWZ5LAomIzQzOwkJCQkgICBib29sIHN3ZGV2X25vdGlmeSwgYm9vbCAqY3JlYXRlZCwKIAkJCQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJX191MTYgZmRiX2ZsYWdzID0gKG5kbV9mbGFncyAmYW1wOyB+TlRGX1VTRSk7CkBAIC0xMTAxLDYgJiM0MzsxMTAzLDkgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKIAlpZiAocmMpCiAJCWdvdG8gZXJyX25vdGlmeTsKIAomIzQzOwlpZiAoY3JlYXRlZCkKJiM0MzsJCSpjcmVhdGVkID0gdHJ1ZTsKJiM0MzsKIAlyZXR1cm4gMDsKIAogZXJyX25vdGlmeToKQEAgLTExMTQsNyAmIzQzOzExMTksNyBAQCBpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKIAkJICAgICBfX3UxNiBzdGF0ZSwgX191MTYgZmxhZ3MsCiAJCSAgICAgX19iZTE2IHBvcnQsIF9fYmUzMiBzcmNfdm5pLCBfX2JlMzIgdm5pLAogCQkgICAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsCi0JCSAgICAgYm9vbCBzd2Rldl9ub3RpZnksCiYjNDM7CQkgICAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLAogCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgdnhsYW5fZmRiICpmOwpAQCAtMTEyOSw3ICYjNDM7MTEzNCw4IEBAIGludCB2eGxhbl9mZGJfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCiAJCXJldHVybiB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHZ4bGFuLCBpcCwgc3RhdGUsIGZsYWdzLCBwb3J0LAogCQkJCQkJIHZuaSwgaWZpbmRleCwgbmRtX2ZsYWdzLCBmLAotCQkJCQkJIG5oaWQsIHN3ZGV2X25vdGlmeSwgZXh0YWNrKTsKJiM0MzsJCQkJCQkgbmhpZCwgc3dkZXZfbm90aWZ5LCBjcmVhdGVkLAomIzQzOwkJCQkJCSBleHRhY2spOwogCX0gZWxzZSB7CiAJCWlmICghKGZsYWdzICZhbXA7IE5MTV9GX0NSRUFURSkpCiAJCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTExMzcsNyAmIzQzOzExNDMsNyBAQCBpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKIAkJcmV0dXJuIHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHZ4bGFuLCBtYWMsIGlwLCBzdGF0ZSwgZmxhZ3MsCiAJCQkJCSAgICAgICBwb3J0LCBzcmNfdm5pLCB2bmksIGlmaW5kZXgsCiAJCQkJCSAgICAgICBuZG1fZmxhZ3MsIG5oaWQsIHN3ZGV2X25vdGlmeSwKLQkJCQkJICAgICAgIGV4dGFjayk7CiYjNDM7CQkJCQkgICAgICAgY3JlYXRlZCwgZXh0YWNrKTsKIAl9CiB9CiAKQEAgLTEyNzUsNyAmIzQzOzEyODEsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sCiAJZXJyID0gdnhsYW5fZmRiX3VwZGF0ZSh2eGxhbiwgYWRkciwgJmFtcDtpcCwgbmRtLSZndDtuZG1fc3RhdGUsIGZsYWdzLAogCQkJICAgICAgIHBvcnQsIHNyY192bmksIHZuaSwgaWZpbmRleCwKIAkJCSAgICAgICBuZG0tJmd0O25kbV9mbGFncyB8IE5URl9WWExBTl9BRERFRF9CWV9VU0VSLAotCQkJICAgICAgIG5oaWQsIHRydWUsIGV4dGFjayk7CiYjNDM7CQkJICAgICAgIG5oaWQsIHRydWUsIE5VTEwsIGV4dGFjayk7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt2eGxhbi0mZ3Q7aGFzaF9sb2NrKTsKIAogCWlmICghZXJyKQpAQCAtMTQ5MSw3ICYjNDM7MTQ5Nyw4IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB2eGxhbl9zbm9vcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkgdnhsYW4tJmd0O2NmZy5kc3RfcG9ydCwKIAkJCQkJIHZuaSwKIAkJCQkJIHZ4bGFuLSZndDtkZWZhdWx0X2RzdC5yZW1vdGVfdm5pLAotCQkJCQkgaWZpbmRleCwgTlRGX1NFTEYsIDAsIHRydWUsIE5VTEwpOwomIzQzOwkJCQkJIGlmaW5kZXgsIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMLAomIzQzOwkJCQkJIE5VTEwpOwogCQlzcGluX3VubG9jaygmYW1wO3Z4bGFuLSZndDtoYXNoX2xvY2spOwogCX0KIApAQCAtNDAzNCw3ICYjNDM7NDA0MSw4IEBAIHN0YXRpYyBpbnQgdnhsYW5fZGV2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgICAgIGRzdC0mZ3Q7cmVtb3RlX3ZuaSwKIAkJCQkgICAgICAgZHN0LSZndDtyZW1vdGVfdm5pLAogCQkJCSAgICAgICBkc3QtJmd0O3JlbW90ZV9pZmluZGV4LAotCQkJCSAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgZXh0YWNrKTsKJiM0MzsJCQkJICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMLAomIzQzOwkJCQkgICAgICAgZXh0YWNrKTsKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDt2eGxhbi0mZ3Q7aGFzaF9sb2NrKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gdW5saW5rOwpAQCAtNDQ4NSw3ICYjNDM7NDQ5Myw4IEBAIHN0YXRpYyBpbnQgdnhsYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCQkJCQkgICAgICAgdnhsYW4tJmd0O2NmZy5kc3RfcG9ydCwKIAkJCQkJICAgICAgIGNvbmYudm5pLCBjb25mLnZuaSwKIAkJCQkJICAgICAgIGNvbmYucmVtb3RlX2lmaW5kZXgsCi0JCQkJCSAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgZXh0YWNrKTsKJiM0MzsJCQkJCSAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgTlVMTCwKJiM0MzsJCQkJCSAgICAgICBleHRhY2spOwogCQkJaWYgKGVycikgewogCQkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7dnhsYW4tJmd0O2hhc2hfbG9jayk7CiAJCQkJbmV0ZGV2X2FkamFjZW50X2NoYW5nZV9hYm9ydChkc3QtJmd0O3JlbW90ZV9kZXYsCkBAIC00ODA2LDcgJiM0Mzs0ODE1LDcgQEAgdnhsYW5fZmRiX2V4dGVybmFsX2xlYXJuX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICAgIGZkYl9pbmZvLSZndDtyZW1vdGVfdm5pLAogCQkJICAgICAgIGZkYl9pbmZvLSZndDtyZW1vdGVfaWZpbmRleCwKIAkJCSAgICAgICBOVEZfVVNFIHwgTlRGX1NFTEYgfCBOVEZfRVhUX0xFQVJORUQsCi0JCQkgICAgICAgMCwgZmFsc2UsIGV4dGFjayk7CiYjNDM7CQkJICAgICAgIDAsIGZhbHNlLCBOVUxMLCBleHRhY2spOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dnhsYW4tJmd0O2hhc2hfbG9jayk7CiAKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oIGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oCmluZGV4IGIxZWVjMjIxNjM2MDguLmU1Mjc1NTkyM2MzMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmgKQEAgLTE5Myw3ICYjNDM7MTkzLDggQEAgaW50IHZ4bGFuX2ZkYl91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiAJCSAgICAgX191MTYgc3RhdGUsIF9fdTE2IGZsYWdzLAogCQkgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSwKIAkJICAgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsIHUzMiBuaGlkLAotCQkgICAgIGJvb2wgc3dkZXZfbm90aWZ5LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwomIzQzOwkJICAgICBib29sIHN3ZGV2X25vdGlmeSwgYm9vbCAqY3JlYXRlZCwKJiM0MzsJCSAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIHZvaWQgdnhsYW5feG1pdF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgIF9fYmUzMiBkZWZhdWx0X3ZuaSwgc3RydWN0IHZ4bGFuX3Jkc3QgKnJkc3QsIGJvb2wgZGlkX3JzYyk7CiBpbnQgdnhsYW5fdm5pX2luX3VzZShzdHJ1Y3QgbmV0ICpzcmNfbmV0LCBzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jIGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMKaW5kZXggZGQ5NDA4NWUwODg2NS4uOWNjOTMyYzYxNzdkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMKQEAgLTQ3Myw2ICYjNDM7NDczLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHZuaV9maWx0ZXJfcG9saWN5W1ZYTEFOX1ZOSUZJTFRFUl9NQVggJiM0MzsgMV0gPSB7CiBzdGF0aWMgaW50IHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgX19iZTMyIHZuaSwKIAkJCQkJICB1bmlvbiB2eGxhbl9hZGRyICpvbGRfcmVtb3RlX2lwLAogCQkJCQkgIHVuaW9uIHZ4bGFuX2FkZHIgKnJlbW90ZV9pcCwKJiM0MzsJCQkJCSAgYm9vbCAqZmRiX2NyZWF0ZWQsCiAJCQkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCB2eGxhbl9yZHN0ICpkc3QgPSAmYW1wO3Z4bGFuLSZndDtkZWZhdWx0X2RzdDsKQEAgLTQ4OCw3ICYjNDM7NDg5LDggQEAgc3RhdGljIGludCB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnkoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIF9fYmUzMiB2bmksCiAJCQkJICAgICAgIHZuaSwKIAkJCQkgICAgICAgdm5pLAogCQkJCSAgICAgICBkc3QtJmd0O3JlbW90ZV9pZmluZGV4LAotCQkJCSAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgZXh0YWNrKTsKJiM0MzsJCQkJICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBmZGJfY3JlYXRlZCwKJiM0MzsJCQkJICAgICAgIGV4dGFjayk7CiAJCWlmIChlcnIpIHsKIAkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7dnhsYW4tJmd0O2hhc2hfbG9jayk7CiAJCQlyZXR1cm4gZXJyOwpAQCAtNTEyLDYgJiM0Mzs1MTQsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiAJCQkJICBzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnZuaW5vZGUsCiAJCQkJICB1bmlvbiB2eGxhbl9hZGRyICpncm91cCwKIAkJCQkgIGJvb2wgY3JlYXRlLCBib29sICpjaGFuZ2VkLAomIzQzOwkJCQkgIGJvb2wgKmZkYl9jcmVhdGVkLAogCQkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCB2eGxhbl9uZXQgKnZuID0gbmV0X2dlbmVyaWModnhsYW4tJmd0O25ldCwgdnhsYW5fbmV0X2lkKTsKQEAgLTU0NSw3ICYjNDM7NTQ4LDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQlyZXR1cm4gMDsKIAogCXJldCA9IHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeSh2eGxhbiwgdm5pbm9kZS0mZ3Q7dm5pLAotCQkJCQkgICAgIG9sZHJpcCwgbmV3cmlwLAomIzQzOwkJCQkJICAgICBvbGRyaXAsIG5ld3JpcCwgZmRiX2NyZWF0ZWQsCiAJCQkJCSAgICAgZXh0YWNrKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKQEAgLTU5OSw3ICYjNDM7NjAyLDcgQEAgaW50IHZ4bGFuX3ZuaWxpc3RfdXBkYXRlX2dyb3VwKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQkJcmV0ID0gdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHZ4bGFuLCB2ZW50LSZndDt2bmksCiAJCQkJCQkJICAgICBvbGRfcmVtb3RlX2lwLAogCQkJCQkJCSAgICAgbmV3X3JlbW90ZV9pcCwKLQkJCQkJCQkgICAgIGV4dGFjayk7CiYjNDM7CQkJCQkJCSAgICAgTlVMTCwgZXh0YWNrKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKIAkJfQpAQCAtNjU1LDcgJiM0Mzs2NTgsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiAJCXJldHVybiAwOwogCiAJcmV0ID0gdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCh2eGxhbiwgdm5pbm9kZSwgZ3JvdXAsIGZhbHNlLCBjaGFuZ2VkLAotCQkJCSAgICAgZXh0YWNrKTsKJiM0MzsJCQkJICAgICBOVUxMLCBleHRhY2spOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTcxOCw2ICYjNDM7NzIxLDggQEAgc3RhdGljIHZvaWQgdnhsYW5fdm5pX2ZyZWUoc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlKQogCWtmcmVlKHZuaW5vZGUpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpOwomIzQzOwogc3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQkJIHN0cnVjdCB2eGxhbl92bmlfZ3JvdXAgKnZnLAogCQkJIHUzMiB2bmksIHVuaW9uIHZ4bGFuX2FkZHIgKmdyb3VwLApAQCAtNzI1LDYgJiM0Mzs3MzAsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiB7CiAJc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlOwogCV9fYmUzMiB2ID0gY3B1X3RvX2JlMzIodm5pKTsKJiM0MzsJYm9vbCBmZGJfY3JlYXRlZCA9IGZhbHNlOwogCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwogCWludCBlcnIgPSAwOwogCkBAIC03NTUsMTAgJiM0Mzs3NjEsNDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQl2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGUodnhsYW4sIHZuaW5vZGUsIGZhbHNlKTsKIAogCWVyciA9IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAodnhsYW4sIHZuaW5vZGUsIGdyb3VwLCB0cnVlLCAmYW1wO2NoYW5nZWQsCi0JCQkJICAgICBleHRhY2spOwomIzQzOwkJCQkgICAgICZhbXA7ZmRiX2NyZWF0ZWQsIGV4dGFjayk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl92bmlfZGVsOwogCiAJdnhsYW5fdm5pZmlsdGVyX25vdGlmeSh2eGxhbiwgdm5pbm9kZSwgUlRNX05FV1RVTk5FTCk7CiAKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3ZuaV9kZWw6CiYjNDM7CS8qIFVuZG8gb25seSB0aGUgZGVmYXVsdCBGREIgZW50cnkgdGhpcyBhZGQgaW5zdGFsbGVkLiAgQW4gZW50cnkgdGhhdAomIzQzOwkgKiB3YXMgYWxyZWFkeSB0aGVyZSwgd2hldGhlciBhZGRlZCBvdXQgb2YgYmFuZCBvciBieSBhbm90aGVyIFZOSSwgaXMKJiM0MzsJICogbGVmdCBhbG9uZS4KJiM0MzsJICoKJiM0MzsJICogTm8gbWVtYmVyc2hpcCBoYXMgdG8gYmUgZ2l2ZW4gYmFjazogdnhsYW5faWdtcF9sZWF2ZSgpIGlzIGdhdGVkIG9uCiYjNDM7CSAqIHZ4bGFuX2FkZHJfbXVsdGljYXN0KCZhbXA7b2xkX3JlbW90ZV9pcCksIGFuZCBvbGRfcmVtb3RlX2lwIGlzIGEgY29weQomIzQzOwkgKiBvZiB0aGUgcmVtb3RlIElQIG9mIGEgbm9kZSB0aGlzIGFkZCBqdXN0IGFsbG9jYXRlZCwgc28gaXQgaXMgemVyby4KJiM0MzsJICoKJiM0MzsJICogVGhlIGFkZHJlc3MgcGlja2VkIGJlbG93IGlzIHRoZSBvbmUgdGhlIGVudHJ5IHdhcyBpbnN0YWxsZWQKJiM0MzsJICogYWdhaW5zdC4gIElmIHRoZSByZXF1ZXN0IGNhcnJpZWQgYSBncm91cCwgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpCiYjNDM7CSAqIGNvcGllZCBpdCBpbnRvIHZuaW5vZGUtJmd0O3JlbW90ZV9pcCBiZWZvcmUgdGhlIGpvaW4gY291bGQgZmFpbDsgaWYKJiM0MzsJICogaXQgZGlkIG5vdCwgdGhhdCBjb3B5IHdhcyBza2lwcGVkIGFuZCB0aGUgZW50cnkgd2VudCB0byB0aGUgZGV2aWNlCiYjNDM7CSAqIGRlZmF1bHQuCiYjNDM7CSAqLwomIzQzOwlpZiAoZmRiX2NyZWF0ZWQpIHsKJiM0MzsJCXVuaW9uIHZ4bGFuX2FkZHIgKnJpcCA9IHZ4bGFuX2FkZHJfYW55KCZhbXA7dm5pbm9kZS0mZ3Q7cmVtb3RlX2lwKSA/CiYjNDM7CQkJCQkmYW1wO3Z4bGFuLSZndDtkZWZhdWx0X2RzdC5yZW1vdGVfaXAgOgomIzQzOwkJCQkJJmFtcDt2bmlub2RlLSZndDtyZW1vdGVfaXA7CiYjNDM7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDt2eGxhbi0mZ3Q7aGFzaF9sb2NrKTsKJiM0MzsJCV9fdnhsYW5fZmRiX2RlbGV0ZSh2eGxhbiwgYWxsX3plcm9zX21hYywgKnJpcCwKJiM0MzsJCQkJICAgdnhsYW4tJmd0O2NmZy5kc3RfcG9ydCwgdm5pbm9kZS0mZ3Q7dm5pLAomIzQzOwkJCQkgICB2bmlub2RlLSZndDt2bmksCiYjNDM7CQkJCSAgIHZ4bGFuLSZndDtkZWZhdWx0X2RzdC5yZW1vdGVfaWZpbmRleCwgdHJ1ZSk7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO3Z4bGFuLSZndDtoYXNoX2xvY2spOwomIzQzOwl9CiYjNDM7CXJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoJmFtcDt2Zy0mZ3Q7dm5pX2hhc2gsICZhbXA7dm5pbm9kZS0mZ3Q7dm5vZGUsCiYjNDM7CQkJICAgICAgIHZ4bGFuX3ZuaV9yaHRfcGFyYW1zKTsKJiM0MzsJX192eGxhbl92bmlfZGVsX2xpc3QodmcsIHZuaW5vZGUpOwomIzQzOwlpZiAodnhsYW4tJmd0O2Rldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX1VQKQomIzQzOwkJdnhsYW5fdnNfYWRkX2RlbF92bmlub2RlKHZ4bGFuLCB2bmlub2RlLCB0cnVlKTsKJiM0MzsJY2FsbF9yY3UoJmFtcDt2bmlub2RlLSZndDtyY3UsIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKTsKIAlyZXR1cm4gZXJyOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NTEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVlhMQU4gUGF0Y2ggZm9yIEZ1enppbmcgd2l0aCBTeXprYWxsZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBiYXNlZCBvbiBhIHF1aWNrIHNjYW4sIHRoYXQgdGhpcyBwYXRjaCAqY291bGQqIGJlIGZydWl0ZnVsIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaGUgVlhMQU4gZHJpdmVyIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggaXMgYSBodWdlIHBsdXMuIFdlIGNhbiB0cmlnZ2VyIGl0IHRocm91Z2ggbmV0bGluaywgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCB0YXJnZXQsIG9yIGV2ZW4ganVzdCBuZXR3b3JrIHRyYWZmaWMuCgpNeSBmaXJzdCBjaGVja3BvaW50IGlzIHJlYWNoYWJpbGl0eSwgYW5kIFZYTEFOIHBhc3NlcyB3aXRoIGZseWluZyBjb2xvcnMgZHVlIHRvIGl0cyBuZXRsaW5rIGFuZCBuZXR3b3JrIHRyYWZmaWMgaW50ZXJhY3Rpb24uCgpOb3csIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXI6IHdoYXQgZG9lcyB0aGUgcGF0Y2ggKmRvKj8gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCwgYHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlYCwgYHZ4bGFuX2ZkYl91cGRhdGVgLCBhbmQgYHZ4bGFuX3ZuaV9hZGRgLiBUaGlzIHNjcmVhbXMgJiMzNDtwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIHN0YXRlIHRyYW5zaXRpb25zIGFuZCBlcnJvciBjb25kaXRpb25zLCYjMzQ7IHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50IGZvciBmdXp6aW5nISBUaGUgYWRkaXRpb24gb2YgdGhlIGBlcnJfdm5pX2RlbGAgY2xlYW51cCBwYXRoIGluIGB2eGxhbl92bmlfYWRkYCwgd2l0aCB0aGUgcm9sbGJhY2sgbG9naWMgZm9yIEZEQiBlbnRyaWVzIGFuZCBWTkkgbm9kZXMgaWYgYHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXBgIGZhaWxzLCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZS4gVGhpcyBpcyBhIGNsYXNzaWMgJiMzNDtlcnJvciBoYW5kbGluZyB0aGF0JiMzOTtzIGxpa2VseSB0byBoYXZlIGJ1Z3MmIzM0OyBzY2VuYXJpby4gVGhlIG5ldyBgYm9vbCAqY3JlYXRlZGAgcGFyYW1ldGVyIGluIHRoZSBgdnhsYW5fZmRiX3VwZGF0ZSpgIGZ1bmN0aW9ucywgZGlyZWN0bHkgaW1wYWN0aW5nIGVycm9yIGhhbmRsaW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50LCBpcyBhbHNvIGEgcmVkIGZsYWcgaW4gYSBnb29kIHdheS4gSXQgaW5kaWNhdGVzIGRlbGljYXRlIGNoYW5nZXMgdG8gdGhlIGRyaXZlciYjMzk7cyBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lLgoKTW9kaWZpZWQgZmlsZXMgaW5jbHVkZSBgdnhsYW5fY29yZS5jYCwgYHZ4bGFuX3ByaXZhdGUuaGAsIGFuZCBgdnhsYW5fdm5pZmlsdGVyLmNgLCB3aGljaCBjb25maXJtcyB3ZSBhcmUgaW4gdGhlIGNvcmUgb2YgdGhlIGRyaXZlciwgc28gaXQgaXMgaGlnaCB2YWx1ZS4KCk15IG5leHQgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgc291cmNlIG1vcmUgdGhvcm91Z2hseS4gSSYjMzk7bGwgbmVlZCB0byBkbyBzb21lIGBncmVwYHMgdG8gZmluZCBhbGwgdGhlIGNhbGxlcnMgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgYXNzZXNzIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGhvdyB0aGVzZSBjaGFuZ2VzIGFyZSBpbnRlZ3JhdGVkLCBhbmQgZ2l2ZSB0aGUgYWJpbGl0eSB0byB0ZXN0IGV2ZXJ5IGZ1bmN0aW9uIHBhdGguIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBidWlsZCBhIHN0cm9uZ2VyIGNhc2UgZm9yIHdoeSB0aGlzIHBhdGNoIGlzIHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6ei4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfVlhMQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi9NYWtlZmlsZS00LVxuZHJpdmVycy9uZXQvdnhsYW4vTWFrZWZpbGU6NTpvYmotJChDT05GSUdfVlhMQU4pICYjNDM7PSB2eGxhbi5vXG5kcml2ZXJzL25ldC92eGxhbi9NYWtlZmlsZS02LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MjgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFZYTEFOIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX1ZYTEFOYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSB0aGUgb25lcyBpbiB0aGUgYGRyaXZlcnMvbmV0L2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2UgbmV0d29yay1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGxvY2F0aW9uIHRvIGJlIGNlcnRhaW4sIHRob3VnaC4gRmluZGluZyB0aGUgZXhhY3QgbG9jYXRpb24gd2hlcmUgYENPTkZJR19WWExBTmAgaXMgZGVjbGFyZWQgaXMgdGhlIGtleS4gT25jZSBJIGtub3cgd2hlcmUgaXQgbGl2ZXMsIEkgY2FuIHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgbWVhbnMgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugb3RoZXIgYENPTkZJR19gIG9wdGlvbnMgdGhhdCBpdCByZXF1aXJlcywgYW55IGFyY2hpdGVjdHVyYWwgY29uc3RyYWludHMsIGFuZCBwZXJoYXBzIGV2ZW4ga2VybmVsIG1vZHVsZXMgdGhhdCBpdCBwdWxscyBpbi4gS25vd2luZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGltcGFjdCBvbiB0aGUgc3lzdGVtLCB3aGV0aGVyIGl0JiMzOTtzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSwgb3IgYW5vdGhlciBkcml2ZXIgaXQmIzM5O3MgcmVsaWFudCBvbiB0byBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUgcHJlY29uZGl0aW9ucyBmb3IgZW5hYmxpbmcgVlhMQU4gcHJvcGVybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZYTEFOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0yMTY9Y29uZmlnIElQVlRBUFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMjI5LVxuZHJpdmVycy9uZXQvS2NvbmZpZzoyMzA6Y29uZmlnIFZYTEFOXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzMS1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgZVh0ZW5zaWJsZSBMb2NhbCBBcmVhIE5ldHdvcmsgKFZYTEFOKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCBzdWl0YWJsZSBmb3IgYSBuZXR3b3JraW5nIGV4cGVydCBsaWtlIG15c2VsZjoKCioqRGl2aW5nIGludG8gdGhlIFZYTEFOIEtjb25maWcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIExldCYjMzk7cyBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgZW50cnkgZm9yIFZYTEFOLCBsb2NhdGVkIGluIHRoZSBgZHJpdmVycy9uZXRgIGRpcmVjdG9yeS4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgdGhpcyBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIGFueSBjb25kaXRpb25hbCBidWlsZCBvcHRpb25zLiBJcyBpdCBhbiBNIG1vZHVsZSwgYnVpbHQtaW4sIG9yIHBlcmhhcHMgb25seSBlbmFibGVkIHdpdGggYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbj8gV2hhdCBmZWF0dXJlcyBhcmUgc2VsZWN0aXZlbHkgZW5hYmxlZCBvciBkaXNhYmxlZD8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSBWWExBTiBkcml2ZXIgaW50ZWdyYXRlcyB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgc3RhY2sg4oCTIGFyZSB0aGVyZSBzcGVjaWZpYyBoYXJkd2FyZSBkZXBlbmRlbmNpZXM/IFdoYXQgdXNlciBzcGFjZSB0b29scyBhcmUgcmVxdWlyZWQsIGFuZCBhcmUgdGhleSByZWZsZWN0ZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24/IEkmIzM5O2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBhbnkgaGludHMgb24gaG93IHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIG9mZmxvYWQgb3IgYWNjZWxlcmF0ZWQgZmVhdHVyZXMuIFRoaXMgS2NvbmZpZyBlbnRyeSBpcyB0aGUgYmx1ZXByaW50LCB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWxseSBjb21wcmVoZW5kaW5nIGhvdyBWWExBTiBpcyBicm91Z2h0IHRvIGxpZmUgd2l0aGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgbXkgY2hhbmNlIHRvIHNlZSBpZiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIGNvbXBsZXRlLCBvciBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbiB0aGUgY29kZSBmb3Igc3BlY2lmaWMgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIyODpcdFx0ICB3aWxsIGJlIGNhbGxlZCBpcHZ0YXAuXG4gMjI5Olx0XG4gMjMwOlx0Y29uZmlnIFZYTEFOXG4gMjMxOlx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIGVYdGVuc2libGUgTG9jYWwgQXJlYSBOZXR3b3JrIChWWExBTilcJiMzNDtcbiAyMzI6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDIzMzpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gMjM0Olx0XHRzZWxlY3QgR1JPX0NFTExTXG4gMjM1Olx0XHRoZWxwXG4gMjM2Olx0XHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgdnhsYW4gdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgcHJvdmlkZVxuIDIzNzpcdFx0ICBMYXllciAyIE5ldHdvcmtzIG92ZXIgTGF5ZXIgMyBOZXR3b3Jrcy4gVlhMQU4gaXMgb2Z0ZW4gdXNlZFxuIDIzODpcdFx0ICB0byB0dW5uZWwgdmlydHVhbCBuZXR3b3JrIGluZnJhc3RydWN0dXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cbiAyMzk6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOlxuIDI0MDpcdFx0ICAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LW1haGFsaW5nYW0tZHV0dC1kY29wcy12eGxhbi0wMlxuIDI0MTpcdFxuIDI0MjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMjQzOlx0XHQgIHdpbGwgYmUgY2FsbGVkIHZ4bGFuLlxuIDI0NDpcdFxuIDI0NTpcdGNvbmZpZyBHRU5FVkVcbiAyNDY6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgTmV0d29yayBWaXJ0dWFsaXphdGlvbiBFbmNhcHN1bGF0aW9uXCYjMzQ7XG4gMjQ3Olx0XHRkZXBlbmRzIG9uIElORVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Njg5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKlZYTEFOIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IFZYTEFOLi4uIEl0IGZ1bmRhbWVudGFsbHkgcmVsaWVzIG9uIElORVQsIHdoaWNoIGlzIGhhcmRseSBzdXJwcmlzaW5nLiBCdXQgSSBuZWVkIHRvIGJlIG1vcmUgdGhvcm91Z2ggaGVyZSwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBhbHRlcm5hdGUgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBgZHJpdmVycy9uZXQvdnhsYW4vYCBkaXJlY3RvcnkuCgpUaGUgcXVlc3Rpb24gdGhhdCBJIGFtIGFza2luZyBpczogaXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0aGF0IHBlcnRhaW5zIHRvIGB2bmlmaWx0ZXJgIG9yIGFueSBvdGhlciBjb21wb25lbnRzIGluIHRoYXQgVlhMQU4gaW1wbGVtZW50YXRpb24/CgpNeSBiZXN0IHN0YXJ0aW5nIHBvaW50IHdvdWxkIGJlIHRoZSBgTWFrZWZpbGVgIGluIGBkcml2ZXJzL25ldC92eGxhbi9gLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHdoYXQgaXQgcmV2ZWFscyBhYm91dCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBjb21wb25lbnQgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjXG4gICAyOlx0IyBNYWtlZmlsZSBmb3IgdGhlIHZ4bGFuIGRyaXZlclxuICAgMzpcdCNcbiAgIDQ6XHRcbiAgIDU6XHRvYmotJChDT05GSUdfVlhMQU4pICYjNDM7PSB2eGxhbi5vXG4gICA2Olx0XG4gICA3Olx0dnhsYW4tb2JqcyA6PSB2eGxhbl9jb3JlLm8gdnhsYW5fbXVsdGljYXN0Lm8gdnhsYW5fdm5pZmlsdGVyLm8gdnhsYW5fbWRiLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA1OAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDUwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVlhMQU4gRkRCIFVwZGF0ZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIFZYTEFOIGNvZGUsIGFuZCBmaXJzdCB0aGluZyYjMzk7cyBmaXJzdCwgSSBzZWUgdGhlIGNvcmUgb2JqZWN0cyBhcmUgZGVmaW5lZC4gRXZlcnl0aGluZyBoaW5nZXMgb24gYENPTkZJR19WWExBTmAsIG9idmlvdXNseS4gTm93LCBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHJlY2VudCBjaGFuZ2UgaXMgYWZmZWN0aW5nIGZ1bmN0aW9uIGNhbGxzLgoKTG9va2luZyBhdCBgZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jYCwgSSBzZWUgYSBwcmV0dHkgcGVydmFzaXZlIHBhdHRlcm4uIEZ1bmN0aW9ucyBsaWtlIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCwgYHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlYCwgYW5kIGB2eGxhbl9mZGJfdXBkYXRlYCBpdHNlbGYgaGF2ZSBhbGwgYmVlbiBtb2RpZmllZCwgYW5kIGEgYGNyZWF0ZWRgIHBhcmFtZXRlciBoYXMgYmVlbiBhZGRlZC4gTWFrZXMgc2Vuc2UuIEJ1dCBpdCYjMzk7cyBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoaXMgY2hhbmdlIHJpcHBsZXMgdGhyb3VnaC4gRnVuY3Rpb25zIGxpa2UgYHZ4bGFuX2ZkYl9hZGRgLCBgdnhsYW5fc25vb3BgLCBgdnhsYW5fZGV2X2NyZWF0ZWAsIGB2eGxhbl9jaGFuZ2VsaW5rYCwgYW5kIGB2eGxhbl9mZGJfZXh0ZXJuYWxfbGVhcm5fYWRkYCAqYWxsKiBjYWxsIGB2eGxhbl9mZGJfdXBkYXRlYCwgYnV0IHBhc3MgYSBOVUxMIGZvciB0aGlzIG5ldyBgY3JlYXRlZGAgcGFyYW1ldGVyLiBUaGF0JiMzOTtzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBiZWNhdXNlIHdoYXQmIzM5O3MgZ29pbmcgdG8gaGFwcGVuIHdpdGggdGhhdCBOVUxMIHZhbHVlPwoKTW92aW5nIG92ZXIgdG8gYGRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jYCwgdGhlIHBpY3R1cmUgZ2V0cyBhIGJpdCBtb3JlIGNvbXBsZXguIEhlcmUsIGB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnlgIGdldHMgdGhlIGBmZGJfY3JlYXRlZGAgcGFyYW1ldGVyLCBhbmQgc3Vic2VxdWVudGx5IHBhc3NlcyBpdCBkb3duIHRvIGB2eGxhbl9mZGJfdXBkYXRlYC4gU2ltaWxhciB0aGluZyB3aXRoIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYC4gSG93ZXZlciwgYHZ4bGFuX3ZuaWxpc3RfdXBkYXRlX2dyb3VwYCBhbmQgYHZ4bGFuX3ZuaV91cGRhdGVgIHBhc3MgTlVMTCBmb3IgdGhlIGBmZGJfY3JlYXRlZGAgcGFyYW1ldGVyLiBOb3csIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGB2eGxhbl92bmlfYWRkYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBwYXNzaW5nIGAmYW1wO2ZkYl9jcmVhdGVkYCB0byBgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cGAsIGFuZCB0aGVyZSYjMzk7cyBzb21lIGVycm9yIGhhbmRsaW5nIGluIHBsYWNlLCBzcGVjaWZpY2FsbHkgZXJyb3IgaGFuZGxpbmcgd2l0aCBgZXJyX3ZuaV9kZWxgLiBJJiMzOTtsbCBoYXZlIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gY2FsbCBhcm91bmQgbGluZXMgNzEwLTc3MCBpbiBgdnhsYW5fdm5pZmlsdGVyLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcxNTpcdFx0cmV0dXJuIHZuaW5vZGU7XG4gNzE2Olx0fVxuIDcxNzpcdFxuIDcxODpcdHN0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9mcmVlKHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSlcbiA3MTk6XHR7XG4gNzIwOlx0XHRmcmVlX3BlcmNwdSh2bmlub2RlLVx1MDAzZXN0YXRzKTtcbiA3MjE6XHRcdGtmcmVlKHZuaW5vZGUpO1xuIDcyMjpcdH1cbiA3MjM6XHRcbiA3MjQ6XHRzdGF0aWMgdm9pZCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSk7XG4gNzI1Olx0XG4gNzI2Olx0c3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIDcyNzpcdFx0XHRcdCBzdHJ1Y3QgdnhsYW5fdm5pX2dyb3VwICp2ZyxcbiA3Mjg6XHRcdFx0XHQgdTMyIHZuaSwgdW5pb24gdnhsYW5fYWRkciAqZ3JvdXAsXG4gNzI5Olx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiA3MzA6XHR7XG4gNzMxOlx0XHRzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnZuaW5vZGU7XG4gNzMyOlx0XHRfX2JlMzIgdiA9IGNwdV90b19iZTMyKHZuaSk7XG4gNzMzOlx0XHRib29sIGZkYl9jcmVhdGVkID0gZmFsc2U7XG4gNzM0Olx0XHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiA3MzU6XHRcdGludCBlcnIgPSAwO1xuIDczNjpcdFxuIDczNzpcdFx0aWYgKHZ4bGFuX3ZuaWZpbHRlcl9sb29rdXAodnhsYW4sIHYpKVxuIDczODpcdFx0XHRyZXR1cm4gdnhsYW5fdm5pX3VwZGF0ZSh2eGxhbiwgdmcsIHYsIGdyb3VwLCBcdTAwMjZjaGFuZ2VkLCBleHRhY2spO1xuIDczOTpcdFxuIDc0MDpcdFx0ZXJyID0gdnhsYW5fdm5pX2luX3VzZSh2eGxhbi1cdTAwM2VuZXQsIHZ4bGFuLCBcdTAwMjZ2eGxhbi1cdTAwM2VjZmcsIHYpO1xuIDc0MTpcdFx0aWYgKGVycikge1xuIDc0MjpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1ZOSSBpbiB1c2VcJiMzNDspO1xuIDc0MzpcdFx0XHRyZXR1cm4gZXJyO1xuIDc0NDpcdFx0fVxuIDc0NTpcdFxuIDc0NjpcdFx0dm5pbm9kZSA9IHZ4bGFuX3ZuaV9hbGxvYyh2eGxhbiwgdik7XG4gNzQ3Olx0XHRpZiAoIXZuaW5vZGUpXG4gNzQ4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDc0OTpcdFxuIDc1MDpcdFx0ZXJyID0gcmhhc2h0YWJsZV9sb29rdXBfaW5zZXJ0X2Zhc3QoXHUwMDI2dmctXHUwMDNldm5pX2hhc2gsXG4gNzUxOlx0XHRcdFx0XHRcdCAgICBcdTAwMjZ2bmlub2RlLVx1MDAzZXZub2RlLFxuIDc1MjpcdFx0XHRcdFx0XHQgICAgdnhsYW5fdm5pX3JodF9wYXJhbXMpO1xuIDc1MzpcdFx0aWYgKGVycikge1xuIDc1NDpcdFx0XHR2eGxhbl92bmlfZnJlZSh2bmlub2RlKTtcbiA3NTU6XHRcdFx0cmV0dXJuIGVycjtcbiA3NTY6XHRcdH1cbiA3NTc6XHRcbiA3NTg6XHRcdF9fdnhsYW5fdm5pX2FkZF9saXN0KHZnLCB2bmlub2RlKTtcbiA3NTk6XHRcbiA3NjA6XHRcdGlmICh2eGxhbi1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUClcbiA3NjE6XHRcdFx0dnhsYW5fdnNfYWRkX2RlbF92bmlub2RlKHZ4bGFuLCB2bmlub2RlLCBmYWxzZSk7XG4gNzYyOlx0XG4gNzYzOlx0XHRlcnIgPSB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKHZ4bGFuLCB2bmlub2RlLCBncm91cCwgdHJ1ZSwgXHUwMDI2Y2hhbmdlZCxcbiA3NjQ6XHRcdFx0XHRcdCAgICAgXHUwMDI2ZmRiX2NyZWF0ZWQsIGV4dGFjayk7XG4gNzY1Olx0XHRpZiAoZXJyKVxuIDc2NjpcdFx0XHRnb3RvIGVycl92bmlfZGVsO1xuIDc2NzpcdFxuIDc2ODpcdFx0dnhsYW5fdm5pZmlsdGVyX25vdGlmeSh2eGxhbiwgdm5pbm9kZSwgUlRNX05FV1RVTk5FTCk7XG4gNzY5Olx0XG4gNzcwOlx0XHRyZXR1cm4gMDtcbiA3NzE6XHRcbiA3NzI6XHRlcnJfdm5pX2RlbDpcbiA3NzM6XHRcdC8qIFVuZG8gb25seSB0aGUgZGVmYXVsdCBGREIgZW50cnkgdGhpcyBhZGQgaW5zdGFsbGVkLiAgQW4gZW50cnkgdGhhdFxuIDc3NDpcdFx0ICogd2FzIGFscmVhZHkgdGhlcmUsIHdoZXRoZXIgYWRkZWQgb3V0IG9mIGJhbmQgb3IgYnkgYW5vdGhlciBWTkksIGlzXG4gNzc1Olx0XHQgKiBsZWZ0IGFsb25lLlxuIDc3NjpcdFx0ICpcbiA3Nzc6XHRcdCAqIE5vIG1lbWJlcnNoaXAgaGFzIHRvIGJlIGdpdmVuIGJhY2s6IHZ4bGFuX2lnbXBfbGVhdmUoKSBpcyBnYXRlZCBvblxuIDc3ODpcdFx0ICogdnhsYW5fYWRkcl9tdWx0aWNhc3QoXHUwMDI2b2xkX3JlbW90ZV9pcCksIGFuZCBvbGRfcmVtb3RlX2lwIGlzIGEgY29weVxuIDc3OTpcdFx0ICogb2YgdGhlIHJlbW90ZSBJUCBvZiBhIG5vZGUgdGhpcyBhZGQganVzdCBhbGxvY2F0ZWQsIHNvIGl0IGlzIHplcm8uXG4gNzgwOlx0XHQgKlxuIDc4MTpcdFx0ICogVGhlIGFkZHJlc3MgcGlja2VkIGJlbG93IGlzIHRoZSBvbmUgdGhlIGVudHJ5IHdhcyBpbnN0YWxsZWRcbiA3ODI6XHRcdCAqIGFnYWluc3QuICBJZiB0aGUgcmVxdWVzdCBjYXJyaWVkIGEgZ3JvdXAsIHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKVxuIDc4MzpcdFx0ICogY29waWVkIGl0IGludG8gdm5pbm9kZS1cdTAwM2VyZW1vdGVfaXAgYmVmb3JlIHRoZSBqb2luIGNvdWxkIGZhaWw7IGlmXG4gNzg0Olx0XHQgKiBpdCBkaWQgbm90LCB0aGF0IGNvcHkgd2FzIHNraXBwZWQgYW5kIHRoZSBlbnRyeSB3ZW50IHRvIHRoZSBkZXZpY2VcbiA3ODU6XHRcdCAqIGRlZmF1bHQuXG4gNzg2Olx0XHQgKi9cbiA3ODc6XHRcdGlmIChmZGJfY3JlYXRlZCkge1xuIDc4ODpcdFx0XHR1bmlvbiB2eGxhbl9hZGRyICpyaXAgPSB2eGxhbl9hZGRyX2FueShcdTAwMjZ2bmlub2RlLVx1MDAzZXJlbW90ZV9pcCkgP1xuIDc4OTpcdFx0XHRcdFx0XHRcdTAwMjZ2eGxhbi1cdTAwM2VkZWZhdWx0X2RzdC5yZW1vdGVfaXAgOlxuIDc5MDpcdFx0XHRcdFx0XHRcdTAwMjZ2bmlub2RlLVx1MDAzZXJlbW90ZV9pcDtcbiA3OTE6XHRcbiA3OTI6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4gNzkzOlx0XHRcdF9fdnhsYW5fZmRiX2RlbGV0ZSh2eGxhbiwgYWxsX3plcm9zX21hYywgKnJpcCxcbiA3OTQ6XHRcdFx0XHRcdCAgIHZ4bGFuLVx1MDAzZWNmZy5kc3RfcG9ydCwgdm5pbm9kZS1cdTAwM2V2bmksXG4gNzk1Olx0XHRcdFx0XHQgICB2bmlub2RlLVx1MDAzZXZuaSxcbiA3OTY6XHRcdFx0XHRcdCAgIHZ4bGFuLVx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pZmluZGV4LCB0cnVlKTtcbiA3OTc6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbiA3OTg6XHRcdH1cbiA3OTk6XHRcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2dmctXHUwMDNldm5pX2hhc2gsIFx1MDAyNnZuaW5vZGUtXHUwMDNldm5vZGUsXG4gODAwOlx0XHRcdFx0ICAgICAgIHZ4bGFuX3ZuaV9yaHRfcGFyYW1zKTtcbiA4MDE6XHRcdF9fdnhsYW5fdm5pX2RlbF9saXN0KHZnLCB2bmlub2RlKTtcbiA4MDI6XHRcdGlmICh2eGxhbi1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUClcbiA4MDM6XHRcdFx0dnhsYW5fdnNfYWRkX2RlbF92bmlub2RlKHZ4bGFuLCB2bmlub2RlLCB0cnVlKTtcbiA4MDQ6XHRcdGNhbGxfcmN1KFx1MDAyNnZuaW5vZGUtXHUwMDNlcmN1LCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZSk7XG4gODA1Olx0XHRyZXR1cm4gZXJyO1xuIDgwNjpcdH1cbiA4MDc6XHRcbiA4MDg6XHRzdGF0aWMgdm9pZCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbiA4MDk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzE2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgdnhsYW5fdm5pX2FkZCBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHBhdGNoIHRvIGB2eGxhbl92bmlfYWRkYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIHRvIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cGAuIFByZXZpb3VzbHksIGB2eGxhbl92bmlfYWRkYCBhcHBlYXJzIHRvIGhhdmUgY29tcGxldGVseSBpZ25vcmVkIHRoZSByZXR1cm4gdmFsdWUgb2YgYHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXBgLiBUaGUgY29kZSBqdXN0IHBsb3dlZCBhaGVhZCB0byBgdnhsYW5fdm5pZmlsdGVyX25vdGlmeWAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYCBoYWQgYW4gaXNzdWUsIHVsdGltYXRlbHkgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUuIEVzc2VudGlhbGx5LCBhIHBhcnRpYWxseSBpbml0aWFsaXplZCB2bmlub2RlIHdhcyBsZWZ0IGhhbmdpbmcgYXJvdW5kIGluIHRoZSByaGFzaHRhYmxlIGFuZCBsaXN0LiBUaGF0JiMzOTtzIGEgc2VyaW91cyBwb3RlbnRpYWwgbGVhayBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZS4KCk5vdywgYWZ0ZXIgdGhlIHBhdGNoLCB3ZSBoYXZlIGEgcm9idXN0IGVycm9yLWhhbmRsaW5nIHBhdGguIElmIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYCBmYWlscywgdGhlIGB2bmlub2RlYCBnZXRzIGNsZWFuZWQgdXAgcHJvcGVybHkuIFRoaXMgaW52b2x2ZXMgYGNhbGxfcmN1YCBmb3IgUkNVLXNhZmUgZnJlZWluZywgcmVtb3ZpbmcgdGhlIG5vZGUgZnJvbSB0aGUgaGFzaHRhYmxlIGFuZCBsaXN0LCBoYW5kbGluZyBzcGlubG9ja3MgKGBzcGluX2xvY2tfYmhgKSwgYW5kIHBvdGVudGlhbGx5IHVuZG9pbmcgdGhlIEZEQiBkZWxldGlvbiBpZiBpdCB3YXMgY3JlYXRlZCAoYGZkYl9jcmVhdGVkYCkuIFRoZXJlJiMzOTtzIGV2ZW4gc29ja2V0IG1hbmlwdWxhdGlvbiB3aXRoIGB2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGVgLCB3aGljaCBsaWtlbHkgaW50ZXJhY3RzIHdpdGggdGhlIGRhdGFwYXRoLiBJdCYjMzk7cyBhIGNvbXByZWhlbnNpdmUgYXBwcm9hY2guCgpUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29yZSB2aXJ0dWFsIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIHZ4bGFuIGNvcmUgYW5kIHZuaWZpbHRlciBtb2R1bGVzLiBUaGVzZSBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBuZXRsaW5rIChzcGVjaWZpY2FsbHkgcnRuZXRsaW5rIHZuaWZpbHRlciBjb21tYW5kcykuIFRoaXMgbWVhbnMgYW55IGVycm9yIGluIHRoZSBwcmV2aW91cyBjb2RlIGNvdWxkIGhhdmUgY2F1c2VkIHNpZ25pZmljYW50IHByb2JsZW1zIGJlY2F1c2Ugb2YgdGhlIGxhY2sgb2YgZXJyb3IgaGFuZGxpbmcsIGJ1dCBub3csIHRoaXMgaXMgYWxsIG11Y2ggbW9yZSByb2J1c3QuCgpJIG5lZWQgdG8gc2VlIGhvdyBgdnhsYW5fdm5pX2FkZGAgaXMgcmVhY2hlZCBzbyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCBmb3IgdGhlIGZ1bmN0aW9uIG5hbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Z4bGFuX3ZuaV9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz02NDY9c3RhdGljIGludCB2eGxhbl92bmlfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTY3MC1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjY3MTpzdGF0aWMgdm9pZCBfX3Z4bGFuX3ZuaV9hZGRfbGlzdChzdHJ1Y3QgdnhsYW5fdm5pX2dyb3VwICp2ZyxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTY3Mi1cdFx0XHRcdCBzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnYpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NzI0PXN0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTcyNS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjcyNjpzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy03MjctXHRcdFx0IHN0cnVjdCB2eGxhbl92bmlfZ3JvdXAgKnZnLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTc1Ny1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjc1ODpcdF9fdnhsYW5fdm5pX2FkZF9saXN0KHZnLCB2bmlub2RlKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTc1OS1cbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz04MTY9c3RhdGljIGludCB2eGxhbl92bmlfZGVsKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTg1NC1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjg1NTpzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGRfZGVsKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBfX3UzMiBzdGFydF92bmksXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04NTYtXHRcdFx0ICAgICBfX3UzMiBlbmRfdm5pLCB1bmlvbiB2eGxhbl9hZGRyICpncm91cCxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04NjYtXHRcdGNhc2UgUlRNX05FV1RVTk5FTDpcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjg2NzpcdFx0XHRlcnIgPSB2eGxhbl92bmlfYWRkKHZ4bGFuLCB2ZywgdiwgZ3JvdXAsIGV4dGFjayk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04NjgtXHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9ODg1PXN0YXRpYyBpbnQgdnhsYW5fcHJvY2Vzc192bmlfZmlsdGVyKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTkzMy1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjkzNDpcdGVyciA9IHZ4bGFuX3ZuaV9hZGRfZGVsKHZ4bGFuLCB2bmlfc3RhcnQsIHZuaV9lbmQsIFx1MDAyNmdyb3VwLCBjbWQsXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy05MzUtXHRcdFx0XHRleHRhY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgVnhMQU4gVk5JIEZpbHRlcioqCgpPa2F5LCBzbyBgdnhsYW5fcHJvY2Vzc192bmlfZmlsdGVyYCBpcyB0cmlnZ2VyZWQsIGVpdGhlciB0aHJvdWdoIHRoZSBzdGFuZGFyZCBydG5ldGxpbmsgcm91dGUgdXBkYXRlIHByb2Nlc3MgKGBSVE1fTkVXVFVOTkVMYCkgb3IgZGlyZWN0bHkgYnkgYSBgdm5pZmlsdGVyYCBjYWxsLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCAqd2hlcmUqIHRoaXMgZmlsdGVyaW5nIHJvdXRpbmUgaXMgYWN0dWFsbHkgZ2V0dGluZyBob29rZWQgdXAgaW4gdGhlIGNvZGUuIEkgbmVlZCB0byB0cmFjZSBpdHMgcmVnaXN0cmF0aW9uIHRvIGdldCB0aGUgYmlnIHBpY3R1cmUgb2YgaXRzIGludGVncmF0aW9uIGludG8gdGhlIFZ4TEFOIGRhdGEgcGF0aC4gSeKAmW0gdGhpbmtpbmcgSSB3aWxsIGVpdGhlciBmaW5kIGl0IHJlZ2lzdGVyZWQgYXMgYSBoYW5kbGVyIGZvciBhIHBhcnRpY3VsYXIgTmV0bGluayBmYW1pbHkvbWVzc2FnZSB0eXBlIG9yIGludGVncmF0ZWQgaW50byB0aGUgb3ZlcmFsbCBuZXR3b3JrIGRldmljZSBvciB0dW5uZWwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gZmluZCBvdXQgd2hlcmUgdGhlIHJlZ2lzdHJhdGlvbiBoYXBwZW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2eGxhbl9wcm9jZXNzX3ZuaV9maWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz04NTU9c3RhdGljIGludCB2eGxhbl92bmlfYWRkX2RlbChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgX191MzIgc3RhcnRfdm5pLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTg4NC1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjg4NTpzdGF0aWMgaW50IHZ4bGFuX3Byb2Nlc3Nfdm5pX2ZpbHRlcihzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTg4Ni1cdFx0XHRcdCAgICBzdHJ1Y3QgbmxhdHRyICpubHZuaWZpbHRlcixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz05ODI9c3RhdGljIGludCB2eGxhbl92bmlmaWx0ZXJfcHJvY2VzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0xMDE1LVx0XHRcdFx0IHNpemVvZigqdG1zZyksIHJlbSkge1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6MTAxNjpcdFx0ZXJyID0gdnhsYW5fcHJvY2Vzc192bmlfZmlsdGVyKHZ4bGFuLCBhdHRyLCBubGgtXHUwMDNlbmxtc2dfdHlwZSxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTEwMTctXHRcdFx0XHRcdCAgICAgICBleHRhY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA0NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgVHVubmVsIENvbmZpZ3VyYXRpb24gSGFuZGxlcioqCgpPa2F5LCBzbyBgdnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3NgIGlzIHJlZ2lzdGVyZWQgYXMgYSBuZXRsaW5rIGhhbmRsZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBsZXQmIzM5O3MgdHJhY2UgZXhhY3RseSAqd2hlcmUqIHRoYXQgcmVnaXN0cmF0aW9uIGhhcHBlbnMuJiMzNDsgVW5kZXJzdGFuZGluZyB0aGUgaGFuZGxlciYjMzk7cyBjb250ZXh0IGlzIGNydWNpYWwuIEtub3dpbmcgdGhlIHJlZ2lzdHJhdGlvbiBwb2ludCB0ZWxscyBtZSBhIGxvdCBhYm91dCBpdHMgc2NvcGUsIGhvdyBpdCYjMzk7cyBpbnZva2VkLCBhbmQgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVGhpcyBpcyBhIHN0YW5kYXJkIGluaXRpYWwgYXBwcm9hY2ggd2hlbiBkaWdnaW5nIGludG8ga2VybmVsIG5ldHdvcmtpbmcgY29kZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0dW5uZWwgY29uZmlndXJhdGlvbnMg4oCTIHVuZGVyc3RhbmRpbmcgdGhlIGVudHJ5IHBvaW50IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIHBsYW5lIGludGVyYWN0aW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNhbGwgY2hhaW4gdGhhdCBsZWFkcyB0byB0aGlzIHJlZ2lzdHJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz05NjM9aW50IHZ4bGFuX3ZuaWdyb3VwX2luaXQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4pXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtOTgxLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6OTgyOnN0YXRpYyBpbnQgdnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy05ODMtXHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9MTAzMT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgdnhsYW5fdm5pZmlsdGVyX3J0bmxfbXNnX2hhbmRsZXJzW10gPSB7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0xMDMyLVx0e1RISVNfTU9EVUxFLCBQRl9CUklER0UsIFJUTV9HRVRUVU5ORUwsIE5VTEwsIHZ4bGFuX3ZuaWZpbHRlcl9kdW1wLCAwfSxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjEwMzM6XHR7VEhJU19NT0RVTEUsIFBGX0JSSURHRSwgUlRNX05FV1RVTk5FTCwgdnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3MsIE5VTEwsIDB9LFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6MTAzNDpcdHtUSElTX01PRFVMRSwgUEZfQlJJREdFLCBSVE1fREVMVFVOTkVMLCB2eGxhbl92bmlmaWx0ZXJfcHJvY2VzcywgTlVMTCwgMH0sXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0xMDM1LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjYzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogdnhsYW4gRkRCIFVwZGF0ZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBpZGVudGlmaWVkIHNvbWUgcHJvbWlzaW5nIGdyb3VuZCBmb3IgZnV6emluZy4gV2UmIzM5O3ZlIGdvdCBgUEZfQlJJREdFYCwgYFJUTV9ORVdUVU5ORUxgLCBhbmQgYFJUTV9ERUxUVU5ORUxgIHJlZ2lzdGVyZWQsIG1lYW5pbmcgdGhpcyBpcyByZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rIHNvY2tldHMsIGV2ZW4gZnJvbSB1bnByaXZpbGVnZWQgdXNlcnNwYWNlLCB3aGljaCBpcyBwZXJmZWN0IGZvciBzeXprYWxsZXIuCgpOb3csIEkmIzM5O20gZm9jdXNpbmcgb24gYHZ4bGFuX2ZkYl91cGRhdGVgLiBUaGlzIGZ1bmN0aW9uIGlzIHBpdm90YWw7IGl0JiMzOTtzIHVzZWQgaW4gY3J1Y2lhbCBhcmVhczogRkRCIG5ldGxpbmsgdXBkYXRlcyAoYHZ4bGFuX2ZkYl9hZGRgKSwgcGFja2V0IHNub29waW5nIChgdnhsYW5fc25vb3BgKSwgdnhsYW4gaW50ZXJmYWNlIGNyZWF0aW9uIGFuZCBtb2RpZmljYXRpb24gKGB2eGxhbl9kZXZfY3JlYXRlYCwgYHZ4bGFuX2NoYW5nZWxpbmtgKSwgc3dpdGNoZGV2L2JyaWRnZSBvZmZsb2FkL2xlYXJuaW5nIChgdnhsYW5fZmRiX2V4dGVybmFsX2xlYXJuX2FkZGApLCBhbmQgZXZlbiB2bmlmaWx0ZXIgbG9naWMgKGB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnlgKS4gQ2xlYXJseSwgdGhpcyB0b3VjaGVzIGNvcmUgdnhsYW4gZHJpdmVyIGZ1bmN0aW9uYWxpdHksIGluY2x1ZGluZyBzdGF0ZSBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgUkNVIGZyZWVpbmcsIGFuZCBGREIgbWFuaXB1bGF0aW9ucy4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSAtIFdvcnRoRnV6emluZyA9IHRydWUhCgpOb3cgbGV0JiMzOTtzIGZvY3VzIG9uIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMuIEkmIzM5O3ZlIGdvdCB0byBhdm9pZCB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMsIHNvIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbXBsZW1lbnRpbmcgdGhlIGNvcmUgbG9naWMsIG9yIGFyZSBBUEkgZW50cnlwb2ludHMuCgpUaGUgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhpcyBjb21taXQgYXJlOiBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AsIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZWAsIGB2eGxhbl9mZGJfdXBkYXRlYCwgYHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeWAsIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYCwgYHZ4bGFuX3ZuaV9hZGRgLCBgdnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3NgLCBhbmQgYHZ4bGFuX2ZkYl9hZGRgLgoKSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGEgZmV3IGtleSBvbmVzOiBgdnhsYW5fZmRiX3VwZGF0ZWAsIHdoaWNoIGlzIGNsZWFybHkgdGhlIGNvcmUgdXBkYXRlZCBmdW5jdGlvbjsgYHZ4bGFuX3ZuaV9hZGRgLCBiZWNhdXNlIGl0IGhhcyB0aGUgZXJyb3Igcm9sbGJhY2sgbG9naWM7IGB2eGxhbl92bmlmaWx0ZXJfcHJvY2Vzc2AgLSB0aGUgcnRubCBlbnRyeXBvaW50IGZvciBgUlRNX05FV1RVTk5FTGAgd2hpY2ggdHJpZ2dlcnMgYHZ4bGFuX3ZuaV9hZGRgOyBhbmQgYHZ4bGFuX2ZkYl9hZGRgLCBiZWNhdXNlIGl0JiMzOTtzIGEgcnRubCBlbnRyeXBvaW50IHRoYXQgY2FsbHMgYHZ4bGFuX2ZkYl91cGRhdGVgLiBgdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5YCBhbHNvIG1lcml0cyBzY3J1dGlueSBhcyBhbiB1cGRhdGVkIGZ1bmN0aW9uLgoKTm93LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGdvb2QgdGFyZ2V0cy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhleSYjMzk7cmUgbm9uLXN0YXRpYywgc28gdGhleSB3b24mIzM5O3QgYmUgaW5saW5lZCBhbmQgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSBmdXp6ZXIuCgpgdnhsYW5fZmRiX3VwZGF0ZWAgaXMgZGVjbGFyZWQgaW4gYHZ4bGFuX3ByaXZhdGUuaGAsIHNvIGl0JiMzOTtzICpkZWZpbml0ZWx5KiBhIG5vbi1zdGF0aWMgc3ltYm9sLiBJdCYjMzk7cyBkZWNsYXJlZCBhczoKYGBgYwppbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKCQkgICAgIGNvbnN0IHU4ICpzcmNfbWFjLCB1bmlvbiB2eGxhbl9hZGRyICppcCwKCQkgICAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncywKCQkgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSwKCQkgICAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsCgkJICAgICBib29sIHN3ZGV2X25vdGlmeSwgYm9vbCAqY3JlYXRlZCwKCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CmBgYAoKQXMgZm9yIGB2eGxhbl92bmlmaWx0ZXJfcHJvY2Vzc2AsIHRoYXQmIzM5O3MgYSBmdW5jdGlvbiBwb2ludGVyIGluIGB2eGxhbl92bmlmaWx0ZXJfcnRubF9tc2dfaGFuZGxlcnNgLiBObyB3YXkgdGhlIGNvbXBpbGVyIGlubGluZXMgdGhhdCwgc28gdGhhdCYjMzk7cyBnb29kLgoKYHZ4bGFuX2ZkYl9hZGRgIGlzIGFsc28gYW4gZW50cnkgcG9pbnQgLSBsZXQmIzM5O3MgY2hlY2sgaG93IGl0JiMzOTtzIHJlZmVyZW5jZWQuIEl0JiMzOTtzIHJlZmVyZW5jZWQgdmlhIHRoZSBgdnhsYW5fbmV0ZGV2X29wc2AsIHdoaWNoIGFyZSBuZXRsaW5rIGZ1bmN0aW9ucy4gU28gdGhhdCYjMzk7cyByZWFjaGFibGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Z4bGFuX2ZkYl9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTE1OD1zdGF0aWMgaW50IHZ4bGFuX2ZkYl9wYXJzZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTI0NC0vKiBBZGQgc3RhdGljIGVudHJ5ICh2aWEgbmV0bGluaykgKi9cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoxMjQ1OnN0YXRpYyBpbnQgdnhsYW5fZmRiX2FkZChzdHJ1Y3QgbmRtc2cgKm5kbSwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMjQ2LVx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0zMzA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdnhsYW5fbmV0ZGV2X2V0aGVyX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzMxOC1cdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGV0aF9tYWNfYWRkcixcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozMzE5Olx0Lm5kb19mZGJfYWRkXHRcdD0gdnhsYW5fZmRiX2FkZCxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMzIwLVx0Lm5kb19mZGJfZGVsXHRcdD0gdnhsYW5fZmRiX2RlbGV0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMjQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZYTEFOIEZEQiBhbmQgVk5JIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgdnhsYW5fZmRiX2FkZGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVmaW5lZCBpbiB0aHJlZSBkaWZmZXJlbnQgcGxhY2VzLCBhbGwgdGhyb3VnaCB0aGUgYG5kb19mZGJfYWRkYCBuZXRkZXZfb3BzIHN0cnVjdHVyZS4gVGhlIGZhY3QgdGhhdCBpdHMgYWRkcmVzcyBpcyB0YWtlbiBzb21ld2hlcmUgbWVhbnMgaXQmIzM5O3MgZGVmaW5pdGVseSAqbm90KiBpbmxpbmVkLCB0aGF0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlci4gTm93LCBJJiMzOTttIHNoaWZ0aW5nIG15IGZvY3VzIHRvIGB2eGxhbl92bmlfYWRkYC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyBpdHMgYWRkcmVzcyBiZWluZyB1c2VkIHNvbWV3aGVyZSwgbWFraW5nIGlubGluaW5nIGltcG9zc2libGUsIG9yIGNhbiB3ZSBwb3RlbnRpYWxseSBleHBlY3QgYW4gaW5saW5lZCBpbXBsZW1lbnRhdGlvbj8KClRvIGZpZ3VyZSB0aGlzIG91dCwgSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxscy4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IGB2eGxhbl92bmlmaWx0ZXIuY2AsIEkgc2VlIGB2eGxhbl92bmlfYWRkX2RlbGAgY2FsbHMgYHZ4bGFuX3ZuaV9hZGRgLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGB2eGxhbl92bmlfYWRkX2RlbGAgaXRzZWxmIGlzIGlubGluZWQgd2l0aGluIGB2eGxhbl9wcm9jZXNzX3ZuaV9maWx0ZXJgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBUbyBnZXQgYSBjbGVhciBwaWN0dXJlLCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgYmxvY2sgYXJvdW5kIGxpbmVzIDg1MC04ODAgaW4gYGRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NTA6XHRcdHJldHVybiAwO1xuIDg1MTpcdG91dDpcbiA4NTI6XHRcdHJldHVybiBlcnI7XG4gODUzOlx0fVxuIDg1NDpcdFxuIDg1NTpcdHN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZF9kZWwoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIF9fdTMyIHN0YXJ0X3ZuaSxcbiA4NTY6XHRcdFx0XHQgICAgIF9fdTMyIGVuZF92bmksIHVuaW9uIHZ4bGFuX2FkZHIgKmdyb3VwLFxuIDg1NzpcdFx0XHRcdCAgICAgaW50IGNtZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDg1ODpcdHtcbiA4NTk6XHRcdHN0cnVjdCB2eGxhbl92bmlfZ3JvdXAgKnZnO1xuIDg2MDpcdFx0aW50IHYsIGVyciA9IDA7XG4gODYxOlx0XG4gODYyOlx0XHR2ZyA9IHJ0bmxfZGVyZWZlcmVuY2UodnhsYW4tXHUwMDNldm5pZ3JwKTtcbiA4NjM6XHRcbiA4NjQ6XHRcdGZvciAodiA9IHN0YXJ0X3ZuaTsgdiBcdTAwM2M9IGVuZF92bmk7IHYmIzQzOyYjNDM7KSB7XG4gODY1Olx0XHRcdHN3aXRjaCAoY21kKSB7XG4gODY2Olx0XHRcdGNhc2UgUlRNX05FV1RVTk5FTDpcbiA4Njc6XHRcdFx0XHRlcnIgPSB2eGxhbl92bmlfYWRkKHZ4bGFuLCB2ZywgdiwgZ3JvdXAsIGV4dGFjayk7XG4gODY4Olx0XHRcdFx0YnJlYWs7XG4gODY5Olx0XHRcdGNhc2UgUlRNX0RFTFRVTk5FTDpcbiA4NzA6XHRcdFx0XHRlcnIgPSB2eGxhbl92bmlfZGVsKHZ4bGFuLCB2ZywgdiwgZXh0YWNrKTtcbiA4NzE6XHRcdFx0XHRicmVhaztcbiA4NzI6XHRcdFx0ZGVmYXVsdDpcbiA4NzM6XHRcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbiA4NzQ6XHRcdFx0XHRicmVhaztcbiA4NzU6XHRcdFx0fVxuIDg3NjpcdFx0XHRpZiAoZXJyKVxuIDg3NzpcdFx0XHRcdGdvdG8gb3V0O1xuIDg3ODpcdFx0fVxuIDg3OTpcdFxuIDg4MDpcdFx0cmV0dXJuIDA7XG4gODgxOlx0b3V0OlxuIDg4MjpcdFx0cmV0dXJuIGVycjtcbiA4ODM6XHR9XG4gODg0Olx0XG4gODg1Olx0c3RhdGljIGludCB2eGxhbl9wcm9jZXNzX3ZuaV9maWx0ZXIoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gODg2Olx0XHRcdFx0XHQgICAgc3RydWN0IG5sYXR0ciAqbmx2bmlmaWx0ZXIsXG4gODg3Olx0XHRcdFx0XHQgICAgaW50IGNtZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDg4ODpcdHtcbiA4ODk6XHRcdHN0cnVjdCBubGF0dHIgKnZhdHRyc1tWWExBTl9WTklGSUxURVJfRU5UUllfTUFYICYjNDM7IDFdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODExNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBWWExBTiBTeW1ib2wgQmVoYXZpb3IqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2UgVlhMQU4gc3ltYm9scy4gRmlyc3Qgb2ZmLCBJJiMzOTttIGNlcnRhaW4gdGhhdCBgdnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3NgIGlzICpub3QqIGlubGluZWQuIEl0JiMzOTtzIHRoZSBuZXRsaW5rIGVudHJ5IHBvaW50LCBhbmQgdGhhdCYjMzk7cyBhIGRlYWQgZ2l2ZWF3YXkuIFRoZSBjb21waWxlciB3b24mIzM5O3Qgb3B0aW1pemUgdGhhdCBhd2F5OyBpdCBuZWVkcyB0byBiZSBhY2Nlc3NpYmxlIGFzIGEgZGlzdGluY3Qgc3ltYm9sLiBgdnhsYW5fdm5pX2FkZGAgaXMgYSBiaXQgdHJpY2tpZXIuIEl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCBhbmQgd2hpbGUgaXQmIzM5O3MgYSBkZWNlbnQtc2l6ZWQgb25lLCBhcm91bmQgOTAgbGluZXMsIHNvIHRoZSBjb21waWxlciAqbWlnaHQqIGlubGluZSBpdCwgZGVwZW5kaW5nIG9uIHRoZSBjaXJjdW1zdGFuY2VzLiAgSXQmIzM5O3Mgd29ydGggbm90aW5nLgoKSG93ZXZlciwgYHZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzYCAqd2lsbCogZXhpc3QgYXMgYSBzeW1ib2wsIGFuZCBpdCYjMzk7cyB0aGUgbWFpbiBwb2ludCBvZiBlbnRyeSB2aWEgbmV0bGluay4gIE5vdywgYHZ4bGFuX2ZkYl91cGRhdGVgIGlzIGEgdG90YWxseSBkaWZmZXJlbnQgYmVhc3QuICBJdCYjMzk7cyBnbG9iYWwsIGRlZmluZWQgaW4gYHZ4bGFuX3ByaXZhdGUuaGAsIGFuZCB1c2VkIGluIG11bHRpcGxlIGNvbXBpbGF0aW9uIHVuaXRzOiBgdnhsYW5fY29yZS5jYCBhbmQgYHZ4bGFuX3ZuaWZpbHRlci5jYC4gIFRoYXQgbWVhbnMgbm8gY3Jvc3MtdW5pdCBpbmxpbmluZyBpcyBoYXBwZW5pbmcsIGVuZCBvZiBzdG9yeSEKCkFuZCBmaW5hbGx5LCBgdnhsYW5fZmRiX2FkZGAgaXMgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXRzIGFkZHJlc3MgaXMgdGFrZW4gYW5kIGFzc2lnbmVkIHRvIGEgYG5kb19mZGJfYWRkYCBzdHJ1Y3QuIFRoYXQgZ3VhcmFudGVlcyBpdCB3aWxsIGhhdmUgaXRzIG93biBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcyBpbiBib3RoIHRoZSBgdm1saW51eGAgaW1hZ2UgYW5kIHRoZSBgdnhsYW4ua29gIG1vZHVsZS4KCk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBsb29rIGF0IGBkcml2ZXJzL25ldC9LY29uZmlnYCBmb3IgVlhMQU4uIE9rYXksIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBWWExBTmAgcmVxdWlyZXMgYElORVRgLCBhbmQgaXQgYHNlbGVjdGBzIGBORVRfVURQX1RVTk5FTGAgYW5kIGBHUk9fQ0VMTFNgLiBHb29kLgoKSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBgdnhsYW5fdm5pZmlsdGVyLmNgIGRvZXNuJiMzOTt0IGhhdmUgYW55IGFkZGl0aW9uYWwgY29uZmlnIHJlcXVpcmVtZW50cy4gIExldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYHMgaW4gdGhlIGNvZGUgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NTMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipWWExBTiBGaWx0ZXJpbmcgQ29uZmlndXJhdGlvbiBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgdnhsYW5fdm5pZmlsdGVyLmNgIGZpbGUuIEkmIzM5O20gZ2xhZCB0byBzZWUgdGhlcmUgYXJlIG5vIGAjaWZkZWZzYCBpbiBpdCDigJMgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnQuIEtlZXBpbmcgdGhpbmdzIGNsZWFuIGxpa2UgdGhhdCBhbHdheXMgbWFrZXMgbWFpbnRlbmFuY2UgZWFzaWVyIGRvd24gdGhlIGxpbmUuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmaWx0ZXJpbmcgbWVjaGFuaXNtIGlzIGFjdHVhbGx5IGJlaW5nIGNvbnRyb2xsZWQsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSYjMzk7bGwgbmVlZCB0byBnbyBodW50aW5nIGZvciBhbGwgdGhlIGBDT05GSUdfYCByZWZlcmVuY2VzIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3Z4bGFuYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBmZWF0dXJlIGZsYWdzIHdpbGwgYmUgZGVmaW5lZC4gVW5kZXJzdGFuZGluZyB0aG9zZSBzZXR0aW5ncyBpcyBnb2luZyB0byBiZSBrZXkgdG8gc2VlaW5nIGhvdyB0aGlzIGZpbHRlciBpcyBlbmFibGVkLCBkaXNhYmxlZCwgb3IgY29uZmlndXJlZC4gVGltZSB0byBkaXZlIGludG8gdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4vTWFrZWZpbGUtNC1cbmRyaXZlcnMvbmV0L3Z4bGFuL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1ZYTEFOKSAmIzQzOz0gdnhsYW4ub1xuZHJpdmVycy9uZXQvdnhsYW4vTWFrZWZpbGUtNi1cbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzItXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzQtI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl90dW5uZWwuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xMDA9c3RhdGljIHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuX3ZzX2ZpbmRfdm5pKHN0cnVjdCB2eGxhbl9zb2NrICp2cyxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTIzLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjEyNDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpKSB7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTI1LVx0XHRcdGNvbnN0IHN0cnVjdCB2eGxhbl9jb25maWcgKmNmZyA9IFx1MDAyNm5vZGUtXHUwMDNldnhsYW4tXHUwMDNlY2ZnO1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xMTU4PXN0YXRpYyBpbnQgdnhsYW5fZmRiX3BhcnNlKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMTgzLVx0XHRcdGlwLVx1MDAzZXNhLnNhX2ZhbWlseSA9IEFGX0lORVQ7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTE4NDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMTg1LVx0XHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xNDQyPXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB2eGxhbl9zbm9vcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNDU0LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE0NTU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTQ1Ni1cdGlmIChzcmNfaXAtXHUwMDNlc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNlxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xNTI2PXN0YXRpYyB2b2lkIHZ4bGFuX3NvY2tfcmVsZWFzZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbilcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTUyOC1cdHN0cnVjdCB2eGxhbl9zb2NrICpzb2NrNCA9IHJ0bmxfZGVyZWZlcmVuY2UodnhsYW4tXHUwMDNldm40X3NvY2spO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE1Mjk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTUzMC1cdHN0cnVjdCB2eGxhbl9zb2NrICpzb2NrNiA9IHJ0bmxfZGVyZWZlcmVuY2UodnhsYW4tXHUwMDNldm42X3NvY2spO1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNTQ2LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE1NDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTU0OC1cdGlmIChfX3Z4bGFuX3NvY2tfcmVsZWFzZV9wcmVwKHNvY2s2KSkge1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xNjA3PXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB2eGxhbl9zZXRfbWFjKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNjI1LVx0XHRzYWRkci5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE2MjY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTYyNy1cdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTE2NDA9c3RhdGljIGJvb2wgdnhsYW5fZWNuX2RlY2Fwc3VsYXRlKHN0cnVjdCB2eGxhbl9zb2NrICp2cywgdm9pZCAqb2lwaCxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTY0Ni1cdFx0ZXJyID0gSVBfRUNOX2RlY2Fwc3VsYXRlKG9pcGgsIHNrYik7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTY0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNjQ4LVx0ZWxzZVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xODYwPXN0YXRpYyBpbnQgYXJwX3JlZHVjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgdm5pKVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xOTU2LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE5NTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTk1OC1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZ4bGFuX25hX2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqcmVxdWVzdCxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MjEyND1zdGF0aWMgYm9vbCByb3V0ZV9zaG9ydGNpcmN1aXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjE1My1cdH1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyMTU0OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTIxNTUtXHRjYXNlIEVUSF9QX0lQVjY6XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTIyODU9c3RhdGljIHZvaWQgdnhsYW5fZW5jYXBfYnlwYXNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB2eGxhbl9kZXYgKnNyY192eGxhbixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjMwMS1cdFx0bG9vcGJhY2suc2Euc2FfZmFtaWx5ID0gIEFGX0lORVQ7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MjMwMjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yMzAzLVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MjMzNT1zdGF0aWMgaW50IGVuY2FwX2J5cGFzc19pZl9sb2NhbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yMzQxLXtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyMzQyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTIzNDMtXHQvKiBJUHY2IHJ0LWZsYWdzIGFyZSBjaGVja2VkIGFnYWluc3QgUlRGX0xPQ0FMLCBidXQgdGhlIHZhbHVlIG9mXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTIzNzQ9dm9pZCB2eGxhbl94bWl0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yNDU2LVx0XHRcdHVkcF9zdW0gPSAhKGZsYWdzIFx1MDAyNiBWWExBTl9GX1VEUF9aRVJPX0NTVU02X1RYKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyNDU3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI0NTgtXHRcdHN3aXRjaCAodnhsYW4tXHUwMDNlY2ZnLmxhYmVsX3BvbGljeSkge1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yNTc5LVx0XHRcdFx0ICAgIGlwY2JfZmxhZ3MpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjI1ODA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjU4MS1cdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTI3NTU9c3RhdGljIG5ldGRldl90eF90IHZ4bGFuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjc4Ny1cdFx0XHRyZXR1cm4gYXJwX3JlZHVjZShkZXYsIHNrYiwgdm5pKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyNzg4OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI3ODktXHRcdGVsc2UgaWYgKG50b2hzKGV0aC1cdTAwM2VoX3Byb3RvKSA9PSBFVEhfUF9JUFY2IFx1MDAyNlx1MDAyNlxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0yOTE0PXN0YXRpYyB2b2lkIHZ4bGFuX3ZzX2RlbF9kZXYoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4pXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI5MTgtXHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2dnhsYW4tXHUwMDNlaGxpc3Q0LmhsaXN0KTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyOTE5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI5MjAtXHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2dnhsYW4tXHUwMDNlaGxpc3Q2LmhsaXN0KTtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MzI1OT1zdGF0aWMgaW50IHZ4bGFuX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTMyODQtXHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjMyODU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzI4Ni1cdFx0c3RydWN0IHZ4bGFuX3NvY2sgKnNvY2s2ID0gcmN1X2RlcmVmZXJlbmNlKHZ4bGFuLVx1MDAzZXZuNl9zb2NrKTtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzI5OS1cdFx0ZHN0X3JlbGVhc2UobmRzdCk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MzMwMDojZWxzZSAvKiAhQ09ORklHX0lQVjYgKi9cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMzAxLVx0XHRyZXR1cm4gLUVQRk5PU1VQUE9SVDtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MzY2NT1zdGF0aWMgaW50IF9fdnhsYW5fc29ja19hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIGJvb2wgaXB2Nilcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzY5NC1cdFx0cmV0dXJuIFBUUl9FUlIodnMpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjM2OTU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzY5Ni1cdGlmIChpcHY2KSB7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTM3MTQ9c3RhdGljIGludCB2eGxhbl9zb2NrX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbilcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzcyMS1cdFJDVV9JTklUX1BPSU5URVIodnhsYW4tXHUwMDNldm40X3NvY2ssIE5VTEwpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjM3MjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzcyMy1cdFJDVV9JTklUX1BPSU5URVIodnhsYW4tXHUwMDNldm42X3NvY2ssIE5VTEwpO1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0zNzY4PXN0YXRpYyBpbnQgdnhsYW5fY29uZmlnX3ZhbGlkYXRlKHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCB2eGxhbl9jb25maWcgKmNvbmYsXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTM4MTAtXHRpZiAoY29uZi1cdTAwM2VzYWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozODExOlx0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0lQVjYpKSB7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzgxMi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTM4NjgtXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6Mzg2OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zODcwLVx0XHRpZiAodXNlX2lwdjYpIHtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzg4OS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozODkwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTM4OTEtXHRcdGlmIChjb25mLVx1MDAzZWZsYWdzIFx1MDAyNiBWWExBTl9GX0lQVjZfTElOS0xPQ0FMKSB7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTQwOTE9c3RhdGljIGludCB2eGxhbl9ubDJjb25mKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDEyNi1cdH0gZWxzZSBpZiAoZGF0YVtJRkxBX1ZYTEFOX0dST1VQNl0pIHtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo0MTI3Olx0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0lQVjYpKSB7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDEyOC1cdFx0XHROTF9TRVRfRVJSX01TR19BVFRSKGV4dGFjaywgdGJbSUZMQV9WWExBTl9HUk9VUDZdLCBcJiMzNDtJUHY2IHN1cHBvcnQgbm90IGVuYWJsZWQgaW4gdGhlIGtlcm5lbFwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQxNDktXHR9IGVsc2UgaWYgKGRhdGFbSUZMQV9WWExBTl9MT0NBTDZdKSB7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NDE1MDpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19JUFY2KSkge1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQxNTEtXHRcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihleHRhY2ssIHRiW0lGTEFfVlhMQU5fTE9DQUw2XSwgXCYjMzQ7SVB2NiBzdXBwb3J0IG5vdCBlbmFibGVkIGluIHRoZSBrZXJuZWxcJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz00NTk4PXN0YXRpYyBpbnQgdnhsYW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ2MTQtXHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo0NjE1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ2MTYtXHRcdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ2MzEtXHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo0NjMyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ2MzMtXHRcdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmM9OTg9c3RhdGljIHZvaWQgdnhsYW5fYnJfbWRiX2VudHJ5X2ZpbGwoY29uc3Qgc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmMtMTE2LVx0XHRicmVhaztcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jOjExNzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jLTExOC1cdGNhc2UgQUZfSU5FVDY6XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmM9MzQ0PXN0YXRpYyBib29sIHZ4bGFuX21kYl9pc192YWxpZF9zb3VyY2UoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgX19iZTE2IHByb3RvLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jLTM2MS1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYzozNjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYy0zNjMtXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOiB7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmM9MzkwPXN0YXRpYyB2b2lkIHZ4bGFuX21kYl9ncm91cF9zZXQoc3RydWN0IHZ4bGFuX21kYl9lbnRyeV9rZXkgKmdyb3VwLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jLTM5OC1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYzozOTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYy00MDAtXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jPTE2MjM9c3RydWN0IHZ4bGFuX21kYl9lbnRyeSAqdnhsYW5fbWRiX2VudHJ5X3NrYl9nZXQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmMtMTY1MS1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYzoxNjUyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmMtMTY1My1cdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmMtMTY4NS1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYzoxNjg2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmMtMTY4Ny1cdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmM9MTc9aW50IHZ4bGFuX2lnbXBfam9pbihzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgdW5pb24gdnhsYW5fYWRkciAqcmlwLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jLTM1LVx0XHRyZWxlYXNlX3NvY2soc2spO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmM6MzY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYy0zNy1cdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmM9NTA9aW50IHZ4bGFuX2lnbXBfbGVhdmUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIHVuaW9uIHZ4bGFuX2FkZHIgKnJpcCxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYy02OC1cdFx0cmVsZWFzZV9zb2NrKHNrKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jOjY5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtNzAtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jPTEyMz1ib29sIHZ4bGFuX2dyb3VwX3VzZWQoc3RydWN0IHZ4bGFuX25ldCAqdm4sIHN0cnVjdCB2eGxhbl9kZXYgKmRldixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYy0xMjktXHRzdHJ1Y3QgdnhsYW5fc29jayAqc29jazQ7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYzoxMzA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYy0xMzEtXHRzdHJ1Y3QgdnhsYW5fc29jayAqc29jazY7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtMTQyLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmM6MTQzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtMTQ0LVx0c29jazYgPSBydG5sX2RlcmVmZXJlbmNlKGRldi1cdTAwM2V2bjZfc29jayk7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtMTU1LVx0XHRcdGNvbnRpbnVlO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmM6MTU2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtMTU3LVx0XHRpZiAoZmFtaWx5ID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNlxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaD03Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCB2eGxhbl9yZHN0ICpmaXJzdF9yZW1vdGVfcnRubChzdHJ1Y3QgdnhsYW5fZmRiICpmZGIpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oLTc4LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oOjc5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oLTgwLXN0YXRpYyBpbmxpbmVcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmg9MTE2PXN0YXRpYyBpbmxpbmUgYm9vbCB2eGxhbl9hZGRyX2lzX211bHRpY2FzdChjb25zdCB1bmlvbiB2eGxhbl9hZGRyICppcClcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmgtMTIzLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oOjEyNDojZWxzZSAvKiAhQ09ORklHX0lQVjYgKi9cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaC0xMjUtXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9Mzk9c3RhdGljIHZvaWQgdnhsYW5fdnNfYWRkX2RlbF92bmlub2RlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTUwLVx0XHRcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZ2LVx1MDAzZWhsaXN0NC5obGlzdCk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo1MTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTUyLVx0XHRpZiAoIWhsaXN0X3VuaGFzaGVkKFx1MDAyNnYtXHUwMDNlaGxpc3Q2LmhsaXN0KSlcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy01Ny1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjU4OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNTktXHR2cyA9IHJ0bmxfZGVyZWZlcmVuY2UodnhsYW4tXHUwMDNldm42X3NvY2spO1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jPTcyPXZvaWQgdnhsYW5fdnNfYWRkX3ZuaWdycChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04NS1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2LCB0bXAsIFx1MDAyNnZnLVx1MDAzZXZuaV9saXN0LCB2bGlzdCkge1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6ODY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04Ny1cdFx0aWYgKGlwdjYpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9OTc9dm9pZCB2eGxhbl92c19kZWxfdm5pZ3JwKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuKVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTEwOC1cdFx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNnYtXHUwMDNlaGxpc3Q0LmhsaXN0KTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjEwOTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTExMC1cdFx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNnYtXHUwMDNlaGxpc3Q2LmhsaXN0KTtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz0yNDc9c3RhdGljIGJvb2wgdnhsYW5fZmlsbF92bmlfZmlsdGVyX2VudHJ5KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjczLVx0XHRcdFx0Z290byBvdXRfZXJyO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6Mjc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjc1LVx0XHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jPTY5Nj1zdGF0aWMgc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2eGxhbl92bmlfYWxsb2Moc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNzEwLVx0dm5pbm9kZS1cdTAwM2VobGlzdDQudnhsYW4gPSB2eGxhbjtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjcxMTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTcxMi1cdHZuaW5vZGUtXHUwMDNlaGxpc3Q2LnZ4bGFuID0gdnhsYW47XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9OTQyPXZvaWQgdnhsYW5fdm5pZ3JvdXBfdW5pbml0KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuKVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTk1MS1cdFx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNnYtXHUwMDNlaGxpc3Q0LmhsaXN0KTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjk1MjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTk1My1cdFx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNnYtXHUwMDNlaGxpc3Q2LmhsaXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxMDgKCQkJCQkJCW91dHB1dDogMjUyCgkJCQkJCQl0aG91Z2h0czogNTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBWWExBTiBFcnJvciBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBzbyBlbmFibGluZyBWWExBTiwgYW5kIElORVQgKGFuZCBvcHRpb25hbGx5IElQVjYsIGFzIGlzIHN0YW5kYXJkIHByYWN0aWNlIGZvciBmdXp6aW5nKSB3aWxsIGJyaW5nIHRoaXMgY29kZSBpbnRvIHRoZSBjb21waWxhdGlvbi4gVGltZSB0byBsYXkgaXQgb3V0IGNsZWFybHkuCgpGaXJzdCwgdGhlIGtleSBjb25maWd1cmF0aW9uczogYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O1ZYTEFOJiMzNDssICYjMzQ7SU5FVCYjMzQ7XWAuCgpOb3csIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSYjMzk7bSBnb2luZyB0byBiZSBmb2N1c2VkIG9uIGFyZSB0aGVzZSwgYmVjYXVzZSB0aGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQ6CgoxLiAgYHZ4bGFuX3ZuaV9hZGRgOiBUaGlzIGlzICp0aGUqIGNlbnRyYWwgZnVuY3Rpb24gd2hlcmUgdGhlIGVycm9yIGhhbmRsaW5nIHJvbGxiYWNrIGxvZ2ljIGhhcyBiZWVuIGludHJvZHVjZWQuIFRoZSBwYXRjaCBpbmNsdWRlcyBhbiBlcnJvciBwYXRoIChgZXJyX3ZuaV9kZWw6YCkgdG8gdW53aW5kIG9wZXJhdGlvbnMgcGVyZm9ybWVkIG9uIGZhaWx1cmUgd2l0aGluIGB2eGxhbl92bmlfYWRkYC4gVGhlIHVud2luZCBpbmNsdWRlczogZG9pbmcgYF9fdnhsYW5fZmRiX2RlbGV0ZWAsIGByaGFzaHRhYmxlX3JlbW92ZV9mYXN0YCwgYF9fdnhsYW5fdm5pX2RlbF9saXN0YCwgYHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZWAsIGFuZCBgY2FsbF9yY3VgLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgZW5zdXJpbmcgYSBjbGVhbiBzdGF0ZS4KMi4gIGB2eGxhbl9mZGJfdXBkYXRlYDogVGhpcyBmdW5jdGlvbiYjMzk7cyBzaWduYXR1cmUgYW5kIGxvZ2ljIGhhdmUgYmVlbiBtb2RpZmllZCB0byBub3cgcmVjb3JkIHdoZXRoZXIgYSBuZXcgZW50cnkgd2FzIGNyZWF0ZWQgKGAqY3JlYXRlZCA9IHRydWVgKS4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IGxldHMgbWUgdHJhY2sgaWYgaXQmIzM5O3MgdGhlIGZpcnN0IHRpbWUgYW4gZW50cnkgaXMgd3JpdHRlbi4KMy4gIGB2eGxhbl92bmlmaWx0ZXJfcHJvY2Vzc2A6IFRoaXMgZnVuY3Rpb24gaXMgdGhlIE5ldGxpbmsgZW50cnkgcG9pbnQgZm9yIGBSVE1fTkVXVFVOTkVMYCBhbmQgYFJUTV9ERUxUVU5ORUxgIHJlcXVlc3RzLCB3aGljaCBldmVudHVhbGx5IHRyaWdnZXIgdGhlIGB2eGxhbl92bmlfYWRkYCBmdW5jdGlvbi4gU28gZnV6emluZyB0aGUgTmV0bGluayBpbnRlcmZhY2UgaXMgaW1wb3J0YW50IHRvIGV4ZXJjaXNlIHRoZXNlIGNvZGUgcGF0aHMuCjQuICBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2A6IFRoaXMgZnVuY3Rpb24gaXMgbW9kaWZpZWQgdG8gdHJhY2sgd2hldGhlciBhbiBlbnRyeSB3YXMgbmV3bHkgY3JlYXRlZCB2aWEgYSByZW1vdGUgZGVzdGluYXRpb24sIGFnYWluIGJ5IHRyYWNraW5nIHRoZSBgY3JlYXRlZGAgZmxhZy4KNS4gIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZWA6IFRoaXMgaXMgbW9kaWZpZWQgaW4gc2ltaWxhciBmYXNoaW9uIHRvIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCwgYnV0IGZvciBjcmVhdGluZyBuZXcgZW50cmllcy4KCkkmIzM5O3ZlIHJlY2hlY2tlZCBteSByZWFzb25pbmcgYW5kIGNvbnN0cmFpbnRzOgoKKiAgIFRoaXMgaXMgZGVmaW5pdGVseSBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVGhpcyBwYXRjaCBmaXhlcyBhIGNyaXRpY2FsIGVycm9yIHVud2luZGluZyBwcm9ibGVtIGluIFZYTEFOIFZOSSBmaWx0ZXIgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBhZGRyZXNzZXMgZmFpbHVyZXMgd2l0aGluIGB2eGxhbl92bmlfYWRkKClgIGR1cmluZyBWTkkgbm9kZSBjcmVhdGlvbi9jb25maWd1cmF0aW9uLiBUaGUgcGF0Y2ggYWRkcyBhIHByb3BlciBlcnJvciBwYXRoIHRoYXQgY2xlYW5zIHVwIFZOSSBub2RlcywgZGVsZXRlcyBGREIgZW50cmllcywgYW5kIGZyZWVzIG1lbW9yeSB2aWEgUkNVIHdoZW4gYHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKWAgZmFpbHMuIFRoZSBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMsIGB2eGxhbl9mZGJfdXBkYXRlKClgLCBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZygpYCwgYW5kIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSgpYCBub3cgcmVwb3J0IGlmIGFuIGVudHJ5IHdhcyBuZXdseSBjcmVhdGVkLiBUaGlzIGNoYW5nZXMgdmlydHVhbCBuZXR3b3JraW5nIGRyaXZlciBsb2dpYyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayAoYFJUTV9ORVdUVU5ORUxgLCBgUlRNX05FV05FSUdIYCkuCiogICBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBgWyYjMzQ7VlhMQU4mIzM0OywgJiMzNDtJTkVUJiMzNDtdYC4KKiAgIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmU6CiAgICAqICAgYHZ4bGFuX3ZuaV9hZGRgCiAgICAqICAgYHZ4bGFuX2ZkYl91cGRhdGVgCiAgICAqICAgYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgCiAgICAqICAgYHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlYAogICAgKiAgIGB2eGxhbl92bmlmaWx0ZXJfcHJvY2Vzc2AKCkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZCwgYW5kIEkmIzM5O3ZlIHZlcmlmaWVkIHRoaXMgZGlyZWN0bHkgYWdhaW5zdCB0aGUga2VybmVsIHNvdXJjZS4gTm93IEkgY2FuIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VlhMQU4mIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Z4bGFuX3ZuaV9hZGQmIzM0OywKICAgICYjMzQ7dnhsYW5fZmRiX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDt2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nJiMzNDssCiAgICAmIzM0O3Z4bGFuX2ZkYl91cGRhdGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3Z4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWWExBTiBkcml2ZXIgKHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHJ0bmV0bGluayBjb21tYW5kcyBzdWNoIGFzIFJUTV9ORVdUVU5ORUwgYW5kIFJUTV9ORVdORUlHSCkuIEl0IHVwZGF0ZXMgdGhlIEZEQiB1cGRhdGUgbG9naWMgYWNyb3NzIHZ4bGFuX2ZkYl91cGRhdGUoKSwgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUoKSwgYW5kIHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcoKSB0byB0cmFjayB3aGVuIGFuIGVudHJ5IGlzIG5ld2x5IGNyZWF0ZWQsIGFuZCBpbXBsZW1lbnRzIGFuIGVycm9yIHJvbGxiYWNrIHBhdGggaW4gdnhsYW5fdm5pX2FkZCgpIHRoYXQgdGVhcnMgZG93biBGREIgZW50cmllcywgdW5saW5rcyBWTkkgbm9kZXMsIGFuZCBmcmVlcyBtZW1vcnkgdmlhIFJDVSBpZiB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKCkgZmFpbHMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgYWx0ZXJpbmcgc3RhdGUgbWFuYWdlbWVudCwgc3luY2hyb25pemF0aW9uLCBhbmQgZXJyb3ItaGFuZGxpbmcgaW4gdGhlIHZpcnR1YWwgbmV0d29ya2luZyBzdWJzeXN0ZW0sIG1ha2luZyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWWExBTiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dnhsYW5fdm5pX2FkZCYjMzQ7LAogICAgJiMzNDt2eGxhbl9mZGJfdXBkYXRlJiMzNDssCiAgICAmIzM0O3Z4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcmIzM0OywKICAgICYjMzQ7dnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUmIzM0OywKICAgICYjMzQ7dnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZYTEFOIGRyaXZlciAocmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIGNvbW1hbmRzIHN1Y2ggYXMgUlRNX05FV1RVTk5FTCBhbmQgUlRNX05FV05FSUdIKS4gSXQgdXBkYXRlcyB0aGUgRkRCIHVwZGF0ZSBsb2dpYyBhY3Jvc3MgdnhsYW5fZmRiX3VwZGF0ZSgpLCB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSgpLCBhbmQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZygpIHRvIHRyYWNrIHdoZW4gYW4gZW50cnkgaXMgbmV3bHkgY3JlYXRlZCwgYW5kIGltcGxlbWVudHMgYW4gZXJyb3Igcm9sbGJhY2sgcGF0aCBpbiB2eGxhbl92bmlfYWRkKCkgdGhhdCB0ZWFycyBkb3duIEZEQiBlbnRyaWVzLCB1bmxpbmtzIFZOSSBub2RlcywgYW5kIGZyZWVzIG1lbW9yeSB2aWEgUkNVIGlmIHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKSBmYWlscy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBsb2dpYyBhbHRlcmluZyBzdGF0ZSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBlcnJvci1oYW5kbGluZyBpbiB0aGUgdmlydHVhbCBuZXR3b3JraW5nIHN1YnN5c3RlbSwgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yLXVud2luZCBsb2dpYyB0byB2eGxhbl92bmlfYWRkKCkgaWYgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpIGZhaWxzLCBpbnRyb2R1Y2luZyBhIGJvb2xlYW4gb3V0LXBhcmFtZXRlciAoJiMzOTtjcmVhdGVkJiMzOTsgLyAmIzM5O2ZkYl9jcmVhdGVkJiMzOTspIGFjcm9zcyB2eGxhbl9mZGJfdXBkYXRlKCkgYW5kIGhlbHBlcnMgdG8gdHJhY2sgd2hldGhlciBhbiBGREIgZW50cnkgd2FzIGNyZWF0ZWQgc28gaXQgY2FuIGJlIHJvbGxlZCBiYWNrLlxuXG4xLiBLQVNBTiAvIExPQ0tERVAgQXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIG1vZGlmaWVzIGNsZWFudXAgcGF0aHMgYW5kIG9iamVjdCBsaWZlY3ljbGUgKHVud2luZGluZyBoYXNodGFibGUgaW5zZXJ0aW9uLCBsaXN0IGFkZGl0aW9uLCBzb2NrZXQgc3RhdGUsIGFuZCBzY2hlZHVsaW5nIFJDVSBkZXN0cnVjdGlvbiBvZiB2bmlub2RlLCBwbHVzIGRlbGV0aW5nIEZEQiBlbnRyaWVzIHVuZGVyIGhhc2hfbG9jaykuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGhlcmUgKGUuZy4gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBsaXN0IGNvcnJ1cHRpb24sIG9yIGxvY2tpbmcgZGlzY3JlcGFuY2llcykgYXJlIGFkZHJlc3NlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC5cbjIuIEtNU0FOIEFwcGxpY2FiaWxpdHk6IEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGFuZCBpbmZvLWxlYWtzLiBUaGUgbmV3bHkgaW50cm9kdWNlZCB2YXJpYWJsZSAmIzM5O2Jvb2wgZmRiX2NyZWF0ZWQgPSBmYWxzZTsmIzM5OyBpbiB2eGxhbl92bmlfYWRkKCkgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIG9uIHRoZSBzdGFjaywgYW5kIHRoZSBjYWxsZWUgZnVuY3Rpb25zIG9ubHkgY29uZGl0aW9uYWxseSB3cml0ZSAmIzM5OypjcmVhdGVkID0gdHJ1ZSYjMzk7IHdpdGhvdXQgcmVhZGluZyBmcm9tIGl0IHVuaW5pdGlhbGl6ZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBoZWFwIGFsbG9jYXRpb25zIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGNyZWF0ZWQsIGFuZCBubyBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgYW5kIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2NiOTcxZmU1NWFkNWM5MThjY2M5OWFiNTI4NDQ5NTg4NWVjOTViZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDIyOjQ5OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jIGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jCmluZGV4IGJlOTVhZjY0YTFmNTEuLjA2NTJkYzQ3MWRjYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMKQEAgLTk3NCw3ICYjNDM7OTc0LDcgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQkJCSAgICAgX19iZTE2IHBvcnQsIF9fYmUzMiB2bmksCiAJCQkJICAgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsCiAJCQkJICAgICBzdHJ1Y3QgdnhsYW5fZmRiICpmLCB1MzIgbmhpZCwKLQkJCQkgICAgIGJvb2wgc3dkZXZfbm90aWZ5LAomIzQzOwkJCQkgICAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLAogCQkJCSAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCV9fdTE2IGZkYl9mbGFncyA9IChuZG1fZmxhZ3MgJmFtcDsgfk5URl9VU0UpOwpAQCAtMTA0Miw2ICYjNDM7MTA0Miw4IEBAIHN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKIAogCQlpZiAocmMgJmx0OyAwKQogCQkJcmV0dXJuIHJjOwomIzQzOwkJaWYgKHJjICZhbXA7JmFtcDsgY3JlYXRlZCkKJiM0MzsJCQkqY3JlYXRlZCA9IHRydWU7CiAJCW5vdGlmeSB8PSByYzsKIAl9CiAKQEAgLTEwNzgsNyAmIzQzOzEwODAsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQkJCSAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncywKIAkJCQkgICBfX2JlMTYgcG9ydCwgX19iZTMyIHNyY192bmksIF9fYmUzMiB2bmksCiAJCQkJICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLCB1MzIgbmhpZCwKLQkJCQkgICBib29sIHN3ZGV2X25vdGlmeSwKJiM0MzsJCQkJICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsCiAJCQkJICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCV9fdTE2IGZkYl9mbGFncyA9IChuZG1fZmxhZ3MgJmFtcDsgfk5URl9VU0UpOwpAQCAtMTEwMSw2ICYjNDM7MTEwMyw5IEBAIHN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiAJaWYgKHJjKQogCQlnb3RvIGVycl9ub3RpZnk7CiAKJiM0MzsJaWYgKGNyZWF0ZWQpCiYjNDM7CQkqY3JlYXRlZCA9IHRydWU7CiYjNDM7CiAJcmV0dXJuIDA7CiAKIGVycl9ub3RpZnk6CkBAIC0xMTE0LDcgJiM0MzsxMTE5LDcgQEAgaW50IHZ4bGFuX2ZkYl91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiAJCSAgICAgX191MTYgc3RhdGUsIF9fdTE2IGZsYWdzLAogCQkgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSwKIAkJICAgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsIHUzMiBuaGlkLAotCQkgICAgIGJvb2wgc3dkZXZfbm90aWZ5LAomIzQzOwkJICAgICBib29sIHN3ZGV2X25vdGlmeSwgYm9vbCAqY3JlYXRlZCwKIAkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IHZ4bGFuX2ZkYiAqZjsKQEAgLTExMjksNyAmIzQzOzExMzQsOCBAQCBpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKIAogCQlyZXR1cm4gdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyh2eGxhbiwgaXAsIHN0YXRlLCBmbGFncywgcG9ydCwKIAkJCQkJCSB2bmksIGlmaW5kZXgsIG5kbV9mbGFncywgZiwKLQkJCQkJCSBuaGlkLCBzd2Rldl9ub3RpZnksIGV4dGFjayk7CiYjNDM7CQkJCQkJIG5oaWQsIHN3ZGV2X25vdGlmeSwgY3JlYXRlZCwKJiM0MzsJCQkJCQkgZXh0YWNrKTsKIAl9IGVsc2UgewogCQlpZiAoIShmbGFncyAmYW1wOyBOTE1fRl9DUkVBVEUpKQogCQkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0xMTM3LDcgJiM0MzsxMTQzLDcgQEAgaW50IHZ4bGFuX2ZkYl91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiAJCXJldHVybiB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSh2eGxhbiwgbWFjLCBpcCwgc3RhdGUsIGZsYWdzLAogCQkJCQkgICAgICAgcG9ydCwgc3JjX3ZuaSwgdm5pLCBpZmluZGV4LAogCQkJCQkgICAgICAgbmRtX2ZsYWdzLCBuaGlkLCBzd2Rldl9ub3RpZnksCi0JCQkJCSAgICAgICBleHRhY2spOwomIzQzOwkJCQkJICAgICAgIGNyZWF0ZWQsIGV4dGFjayk7CiAJfQogfQogCkBAIC0xMjc1LDcgJiM0MzsxMjgxLDcgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfYWRkKHN0cnVjdCBuZG1zZyAqbmRtLCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCWVyciA9IHZ4bGFuX2ZkYl91cGRhdGUodnhsYW4sIGFkZHIsICZhbXA7aXAsIG5kbS0mZ3Q7bmRtX3N0YXRlLCBmbGFncywKIAkJCSAgICAgICBwb3J0LCBzcmNfdm5pLCB2bmksIGlmaW5kZXgsCiAJCQkgICAgICAgbmRtLSZndDtuZG1fZmxhZ3MgfCBOVEZfVlhMQU5fQURERURfQllfVVNFUiwKLQkJCSAgICAgICBuaGlkLCB0cnVlLCBleHRhY2spOwomIzQzOwkJCSAgICAgICBuaGlkLCB0cnVlLCBOVUxMLCBleHRhY2spOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dnhsYW4tJmd0O2hhc2hfbG9jayk7CiAKIAlpZiAoIWVycikKQEAgLTE0OTEsNyAmIzQzOzE0OTcsOCBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gdnhsYW5fc25vb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJIHZ4bGFuLSZndDtjZmcuZHN0X3BvcnQsCiAJCQkJCSB2bmksCiAJCQkJCSB2eGxhbi0mZ3Q7ZGVmYXVsdF9kc3QucmVtb3RlX3ZuaSwKLQkJCQkJIGlmaW5kZXgsIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMKTsKJiM0MzsJCQkJCSBpZmluZGV4LCBOVEZfU0VMRiwgMCwgdHJ1ZSwgTlVMTCwKJiM0MzsJCQkJCSBOVUxMKTsKIAkJc3Bpbl91bmxvY2soJmFtcDt2eGxhbi0mZ3Q7aGFzaF9sb2NrKTsKIAl9CiAKQEAgLTQwMzQsNyAmIzQzOzQwNDEsOCBAQCBzdGF0aWMgaW50IHZ4bGFuX2Rldl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICAgICBkc3QtJmd0O3JlbW90ZV92bmksCiAJCQkJICAgICAgIGRzdC0mZ3Q7cmVtb3RlX3ZuaSwKIAkJCQkgICAgICAgZHN0LSZndDtyZW1vdGVfaWZpbmRleCwKLQkJCQkgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIGV4dGFjayk7CiYjNDM7CQkJCSAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgTlVMTCwKJiM0MzsJCQkJICAgICAgIGV4dGFjayk7CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7dnhsYW4tJmd0O2hhc2hfbG9jayk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIHVubGluazsKQEAgLTQ0ODUsNyAmIzQzOzQ0OTMsOCBAQCBzdGF0aWMgaW50IHZ4bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAkJCQkJICAgICAgIHZ4bGFuLSZndDtjZmcuZHN0X3BvcnQsCiAJCQkJCSAgICAgICBjb25mLnZuaSwgY29uZi52bmksCiAJCQkJCSAgICAgICBjb25mLnJlbW90ZV9pZmluZGV4LAotCQkJCQkgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIGV4dGFjayk7CiYjNDM7CQkJCQkgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIE5VTEwsCiYjNDM7CQkJCQkgICAgICAgZXh0YWNrKTsKIAkJCWlmIChlcnIpIHsKIAkJCQlzcGluX3VubG9ja19iaCgmYW1wO3Z4bGFuLSZndDtoYXNoX2xvY2spOwogCQkJCW5ldGRldl9hZGphY2VudF9jaGFuZ2VfYWJvcnQoZHN0LSZndDtyZW1vdGVfZGV2LApAQCAtNDgwNiw3ICYjNDM7NDgxNSw3IEBAIHZ4bGFuX2ZkYl9leHRlcm5hbF9sZWFybl9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgICBmZGJfaW5mby0mZ3Q7cmVtb3RlX3ZuaSwKIAkJCSAgICAgICBmZGJfaW5mby0mZ3Q7cmVtb3RlX2lmaW5kZXgsCiAJCQkgICAgICAgTlRGX1VTRSB8IE5URl9TRUxGIHwgTlRGX0VYVF9MRUFSTkVELAotCQkJICAgICAgIDAsIGZhbHNlLCBleHRhY2spOwomIzQzOwkJCSAgICAgICAwLCBmYWxzZSwgTlVMTCwgZXh0YWNrKTsKIAlzcGluX3VubG9ja19iaCgmYW1wO3Z4bGFuLSZndDtoYXNoX2xvY2spOwogCiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaCBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaAppbmRleCBiMWVlYzIyMTYzNjA4Li5lNTI3NTU5MjNjMzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oCkBAIC0xOTMsNyAmIzQzOzE5Myw4IEBAIGludCB2eGxhbl9mZGJfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQkgICAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncywKIAkJICAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHNyY192bmksIF9fYmUzMiB2bmksCiAJCSAgICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLCB1MzIgbmhpZCwKLQkJICAgICBib29sIHN3ZGV2X25vdGlmeSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKJiM0MzsJCSAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsCiYjNDM7CQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiB2b2lkIHZ4bGFuX3htaXRfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICBfX2JlMzIgZGVmYXVsdF92bmksIHN0cnVjdCB2eGxhbl9yZHN0ICpyZHN0LCBib29sIGRpZF9yc2MpOwogaW50IHZ4bGFuX3ZuaV9pbl91c2Uoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jCmluZGV4IGRkOTQwODVlMDg4NjUuLjljYzkzMmM2MTc3ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jCkBAIC00NzMsNiAmIzQzOzQ3Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB2bmlfZmlsdGVyX3BvbGljeVtWWExBTl9WTklGSUxURVJfTUFYICYjNDM7IDFdID0gewogc3RhdGljIGludCB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnkoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIF9fYmUzMiB2bmksCiAJCQkJCSAgdW5pb24gdnhsYW5fYWRkciAqb2xkX3JlbW90ZV9pcCwKIAkJCQkJICB1bmlvbiB2eGxhbl9hZGRyICpyZW1vdGVfaXAsCiYjNDM7CQkJCQkgIGJvb2wgKmZkYl9jcmVhdGVkLAogCQkJCQkgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgdnhsYW5fcmRzdCAqZHN0ID0gJmFtcDt2eGxhbi0mZ3Q7ZGVmYXVsdF9kc3Q7CkBAIC00ODgsNyAmIzQzOzQ4OSw4IEBAIHN0YXRpYyBpbnQgdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBfX2JlMzIgdm5pLAogCQkJCSAgICAgICB2bmksCiAJCQkJICAgICAgIHZuaSwKIAkJCQkgICAgICAgZHN0LSZndDtyZW1vdGVfaWZpbmRleCwKLQkJCQkgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIGV4dGFjayk7CiYjNDM7CQkJCSAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgZmRiX2NyZWF0ZWQsCiYjNDM7CQkJCSAgICAgICBleHRhY2spOwogCQlpZiAoZXJyKSB7CiAJCQlzcGluX3VubG9ja19iaCgmYW1wO3Z4bGFuLSZndDtoYXNoX2xvY2spOwogCQkJcmV0dXJuIGVycjsKQEAgLTUxMiw2ICYjNDM7NTE0LDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQkJCSAgc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlLAogCQkJCSAgdW5pb24gdnhsYW5fYWRkciAqZ3JvdXAsCiAJCQkJICBib29sIGNyZWF0ZSwgYm9vbCAqY2hhbmdlZCwKJiM0MzsJCQkJICBib29sICpmZGJfY3JlYXRlZCwKIAkJCQkgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgdnhsYW5fbmV0ICp2biA9IG5ldF9nZW5lcmljKHZ4bGFuLSZndDtuZXQsIHZ4bGFuX25ldF9pZCk7CkBAIC01NDUsNyAmIzQzOzU0OCw3IEBAIHN0YXRpYyBpbnQgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnkodnhsYW4sIHZuaW5vZGUtJmd0O3ZuaSwKLQkJCQkJICAgICBvbGRyaXAsIG5ld3JpcCwKJiM0MzsJCQkJCSAgICAgb2xkcmlwLCBuZXdyaXAsIGZkYl9jcmVhdGVkLAogCQkJCQkgICAgIGV4dGFjayk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CkBAIC01OTksNyAmIzQzOzYwMiw3IEBAIGludCB2eGxhbl92bmlsaXN0X3VwZGF0ZV9ncm91cChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKIAkJCXJldCA9IHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeSh2eGxhbiwgdmVudC0mZ3Q7dm5pLAogCQkJCQkJCSAgICAgb2xkX3JlbW90ZV9pcCwKIAkJCQkJCQkgICAgIG5ld19yZW1vdGVfaXAsCi0JCQkJCQkJICAgICBleHRhY2spOwomIzQzOwkJCQkJCQkgICAgIE5VTEwsIGV4dGFjayk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTY1NSw3ICYjNDM7NjU4LDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQlyZXR1cm4gMDsKIAogCXJldCA9IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAodnhsYW4sIHZuaW5vZGUsIGdyb3VwLCBmYWxzZSwgY2hhbmdlZCwKLQkJCQkgICAgIGV4dGFjayk7CiYjNDM7CQkJCSAgICAgTlVMTCwgZXh0YWNrKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC03MTgsNiAmIzQzOzcyMSw4IEBAIHN0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9mcmVlKHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSkKIAlrZnJlZSh2bmlub2RlKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KTsKJiM0MzsKIHN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKIAkJCSBzdHJ1Y3QgdnhsYW5fdm5pX2dyb3VwICp2ZywKIAkJCSB1MzIgdm5pLCB1bmlvbiB2eGxhbl9hZGRyICpncm91cCwKQEAgLTcyNSw2ICYjNDM7NzMwLDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogewogCXN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZTsKIAlfX2JlMzIgdiA9IGNwdV90b19iZTMyKHZuaSk7CiYjNDM7CWJvb2wgZmRiX2NyZWF0ZWQgPSBmYWxzZTsKIAlib29sIGNoYW5nZWQgPSBmYWxzZTsKIAlpbnQgZXJyID0gMDsKIApAQCAtNzU1LDEwICYjNDM7NzYxLDQ3IEBAIHN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKIAkJdnhsYW5fdnNfYWRkX2RlbF92bmlub2RlKHZ4bGFuLCB2bmlub2RlLCBmYWxzZSk7CiAKIAllcnIgPSB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKHZ4bGFuLCB2bmlub2RlLCBncm91cCwgdHJ1ZSwgJmFtcDtjaGFuZ2VkLAotCQkJCSAgICAgZXh0YWNrKTsKJiM0MzsJCQkJICAgICAmYW1wO2ZkYl9jcmVhdGVkLCBleHRhY2spOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfdm5pX2RlbDsKIAogCXZ4bGFuX3ZuaWZpbHRlcl9ub3RpZnkodnhsYW4sIHZuaW5vZGUsIFJUTV9ORVdUVU5ORUwpOwogCiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl92bmlfZGVsOgomIzQzOwkvKiBVbmRvIG9ubHkgdGhlIGRlZmF1bHQgRkRCIGVudHJ5IHRoaXMgYWRkIGluc3RhbGxlZC4gIEFuIGVudHJ5IHRoYXQKJiM0MzsJICogd2FzIGFscmVhZHkgdGhlcmUsIHdoZXRoZXIgYWRkZWQgb3V0IG9mIGJhbmQgb3IgYnkgYW5vdGhlciBWTkksIGlzCiYjNDM7CSAqIGxlZnQgYWxvbmUuCiYjNDM7CSAqCiYjNDM7CSAqIE5vIG1lbWJlcnNoaXAgaGFzIHRvIGJlIGdpdmVuIGJhY2s6IHZ4bGFuX2lnbXBfbGVhdmUoKSBpcyBnYXRlZCBvbgomIzQzOwkgKiB2eGxhbl9hZGRyX211bHRpY2FzdCgmYW1wO29sZF9yZW1vdGVfaXApLCBhbmQgb2xkX3JlbW90ZV9pcCBpcyBhIGNvcHkKJiM0MzsJICogb2YgdGhlIHJlbW90ZSBJUCBvZiBhIG5vZGUgdGhpcyBhZGQganVzdCBhbGxvY2F0ZWQsIHNvIGl0IGlzIHplcm8uCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBhZGRyZXNzIHBpY2tlZCBiZWxvdyBpcyB0aGUgb25lIHRoZSBlbnRyeSB3YXMgaW5zdGFsbGVkCiYjNDM7CSAqIGFnYWluc3QuICBJZiB0aGUgcmVxdWVzdCBjYXJyaWVkIGEgZ3JvdXAsIHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKQomIzQzOwkgKiBjb3BpZWQgaXQgaW50byB2bmlub2RlLSZndDtyZW1vdGVfaXAgYmVmb3JlIHRoZSBqb2luIGNvdWxkIGZhaWw7IGlmCiYjNDM7CSAqIGl0IGRpZCBub3QsIHRoYXQgY29weSB3YXMgc2tpcHBlZCBhbmQgdGhlIGVudHJ5IHdlbnQgdG8gdGhlIGRldmljZQomIzQzOwkgKiBkZWZhdWx0LgomIzQzOwkgKi8KJiM0MzsJaWYgKGZkYl9jcmVhdGVkKSB7CiYjNDM7CQl1bmlvbiB2eGxhbl9hZGRyICpyaXAgPSB2eGxhbl9hZGRyX2FueSgmYW1wO3ZuaW5vZGUtJmd0O3JlbW90ZV9pcCkgPwomIzQzOwkJCQkJJmFtcDt2eGxhbi0mZ3Q7ZGVmYXVsdF9kc3QucmVtb3RlX2lwIDoKJiM0MzsJCQkJCSZhbXA7dm5pbm9kZS0mZ3Q7cmVtb3RlX2lwOwomIzQzOwomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7dnhsYW4tJmd0O2hhc2hfbG9jayk7CiYjNDM7CQlfX3Z4bGFuX2ZkYl9kZWxldGUodnhsYW4sIGFsbF96ZXJvc19tYWMsICpyaXAsCiYjNDM7CQkJCSAgIHZ4bGFuLSZndDtjZmcuZHN0X3BvcnQsIHZuaW5vZGUtJmd0O3ZuaSwKJiM0MzsJCQkJICAgdm5pbm9kZS0mZ3Q7dm5pLAomIzQzOwkJCQkgICB2eGxhbi0mZ3Q7ZGVmYXVsdF9kc3QucmVtb3RlX2lmaW5kZXgsIHRydWUpOwomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDt2eGxhbi0mZ3Q7aGFzaF9sb2NrKTsKJiM0MzsJfQomIzQzOwlyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KCZhbXA7dmctJmd0O3ZuaV9oYXNoLCAmYW1wO3ZuaW5vZGUtJmd0O3Zub2RlLAomIzQzOwkJCSAgICAgICB2eGxhbl92bmlfcmh0X3BhcmFtcyk7CiYjNDM7CV9fdnhsYW5fdm5pX2RlbF9saXN0KHZnLCB2bmlub2RlKTsKJiM0MzsJaWYgKHZ4bGFuLSZndDtkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9VUCkKJiM0MzsJCXZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZSh2eGxhbiwgdm5pbm9kZSwgdHJ1ZSk7CiYjNDM7CWNhbGxfcmN1KCZhbXA7dm5pbm9kZS0mZ3Q7cmN1LCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZSk7CiAJcmV0dXJuIGVycjsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc2MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRGV0ZXJtaW5hdGlvbiBmb3IgVlhMQU4gRkRCIFVwZGF0ZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUga2V5IGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBwb3RlbnRpYWwga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuICBUaGUgcnVsZSBvZiB0aHVtYiBpcywgaWYgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGRldGVjdG9ycyBjYW4gY2F0Y2ggaXQsIHdlIGRvbiYjMzk7dCBuZWVkIEtNU0FOLiAgV2UmIzM5O3JlIGxvb2tpbmcgZm9yIHNwZWNpZmljIHNjZW5hcmlvczoga2VybmVsIHN0cnVjdHVyZXMgZ29pbmcgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29tcGxleCBhbGxvY2F0aW9ucyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRoYXQgKmNvdWxkKiBiZSByZWFkIGxhdGVyLCBvciBsb2dpYyB0aGF0IGVuYWJsZXMgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgcGFydHMgb2YgZXhpc3RpbmcgYnVmZmVycy4gIENvbnZlcnNlbHksIGlmIGl0JiMzOTtzIHByaW1hcmlseSBhYm91dCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGlzc3Vlcywgb3IgdXNlLWFmdGVyLWZyZWUsIHRoZW4gd2Ugc2hvdWxkICpub3QqIG1hcmsgaXQgZm9yIEtNU0FOLiBGdWxsIHplcm9pbmcvaW5pdGlhbGl6YXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBhcmUgYWxzbyByZWFzb25zIHRvIHNraXAgS01TQU4uCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkaW5nIGEgYGJvb2wgKmNyZWF0ZWRgIHBhcmFtZXRlciB0byBhIGZldyBmdW5jdGlvbnMgcmVsYXRlZCB0byBWWExBTiBGREIgdXBkYXRlcy4gIFNwZWNpZmljYWxseSwgYHZ4bGFuX2ZkYl91cGRhdGVgLCBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AsIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZWAsIGFuZCBhIGZldyByZWxhdGVkIGZ1bmN0aW9ucyBpbiBgdnhsYW5fdm5pZmlsdGVyLmNgLgoKSSBzZWUgdGhhdCBgdnhsYW5fZmRiX3VwZGF0ZWAgaXMgdXBkYXRlZCB0byB0YWtlIHRoZSBgYm9vbCAqY3JlYXRlZGAgcGFyYW1ldGVyLiBUaGVuIGl0IGNhbGxzIGJvdGggYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgIGFuZCBgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGVgLiBDcnVjaWFsbHksIG1hbnkgY2FsbGVycyBwYXNzIGBOVUxMYCBmb3IgdGhpcyBgY3JlYXRlZGAgcGFyYW1ldGVyLCBidXQgYHZ4bGFuX3ZuaV9hZGRgIGFwcGVhcnMgdG8gKnNvbWV0aW1lcyogcGFzcyBhIGBib29sYCBpbml0aWFsaXplZCB0byBgZmFsc2VgLCB3aXRoIGNvZGUgcGF0aHMgdGhhdCBwb3RlbnRpYWxseSBzZXQgdGhhdCBib29sZWFuIHRvIHRydWUuIExldCYjMzk7cyBzZWUuLi4gdGhlIGNvZGUgcGFzc2VzIHRoZSBhZGRyZXNzIG9mIHRoZSBgZmRiX2NyZWF0ZWRgIHZhcmlhYmxlIHRvIHRob3NlIGZ1bmN0aW9ucy4KCk15IGNvbmNlcm4gaXMgd2hldGhlciB0aGUgZnVuY3Rpb25zIHRoYXQgYWNjZXB0IHRoaXMgYGNyZWF0ZWRgIHBvaW50ZXIgcmVhZCBpdCBiZWZvcmUgd3JpdGluZyB0byBpdCwgbWFraW5nIGl0IHBvc3NpYmxlIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBjYXJlZnVsbHkgaW5zcGVjdCB0aGUgZnVuY3Rpb25zLgoKT2theSwgbGV0JiMzOTtzIGhvbmUgaW4gb24gYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgIGFuZCBgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGVgLiAgQ3J1Y2lhbGx5LCBpbiBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AsIHRoZSBjb2RlIGlzOiBgaWYgKHJjICZhbXA7JmFtcDsgY3JlYXRlZCkgKmNyZWF0ZWQgPSB0cnVlO2AgSXQgKndyaXRlcyogdG8gYCpjcmVhdGVkYCBvbmx5IGlmIHRoZSBwb2ludGVyIGlzIG5vdCBgTlVMTGAgYW5kIHRoZSByZXR1cm4gY29kZSBgcmNgIGlzIG5vbi16ZXJvIChpbmRpY2F0aW5nIHN1Y2Nlc3MpLiBUaGVyZSYjMzk7cyBubyByZWFkIG9mIGAqY3JlYXRlZGAgaWYgaXQmIzM5O3Mgbm90IGBOVUxMYC4gSW4gYHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlYCwgaXQmIzM5O3MgZXZlbiBzaW1wbGVyOiBgaWYgKGNyZWF0ZWQpICpjcmVhdGVkID0gdHJ1ZTtgICBBZ2FpbiwgaXQmIzM5O3MganVzdCBhIHdyaXRlIGlmIGBjcmVhdGVkYCBpcyBub3QgYE5VTExgLgoKU28sIGl0IHNlZW1zIHRoYXQgdGhlcmUgaXNuJiMzOTt0IGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpyZWFkcyogaGVyZS4gSW4gdGhlIGNhc2Ugd2hlcmUgYSBib29sZWFuIGlzIHBhc3NlZCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgaXMgdGhlbiBwb3RlbnRpYWxseSB1cGRhdGVkIHRvIGB0cnVlYCwgdGhlbiBpdCBtYXkgYmUgY2hlY2tlZC4gVGhlIGtleSBpcyB0aGVyZSBhcmUgbm8gcmVhZHMgYmVmb3JlIGEgd3JpdGUuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIGl0IGRvZXNuJiMzOTt0IG1lZXQgdGhlIGNyaXRlcmlhIGZvciBydW5uaW5nIGEgS01TQU4gc2Vzc2lvbi4gTm8gYE5lZWRzS01TQU49dHJ1ZWAuIEl0IGxvb2tzIHByZXR0eSBjbGVhbiBmcm9tIHRoaXMgcGVyc3BlY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9OTYzPXN0YXRpYyB2b2lkIHZ4bGFuX2RzdF9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTcwLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjk3MTpzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTcyLVx0XHRcdFx0ICAgICB1bmlvbiB2eGxhbl9hZGRyICppcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxNgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbmV0d29ya2luZyBhbmQgZmFtaWxpYXIgd2l0aCBWWExBTiBhbmQgRkRCczoKCioqQW5hbHl6aW5nIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBmdW5jdGlvbi4gVGhlIG5hbWUgaXRzZWxmIGlzIHByZXR0eSBleHBsaWNpdCDigJMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbiBleGlzdGluZyBGb3J3YXJkaW5nIERhdGFiYXNlIChGREIpIGVudHJ5IHJlbGF0ZWQgdG8gVlhMQU4sIGFuZCB3ZSBuZWVkIHRvIHVwZGF0ZSBpdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdXNlIGByZWFkLWZpbGVgLCBwcmVzdW1hYmx5IGEgZnVuY3Rpb24gb3IgbWV0aG9kIGF2YWlsYWJsZSBpbiB3aGF0ZXZlciBzY3JpcHRpbmcgZW52aXJvbm1lbnQgb3IgY29kZWJhc2UgSSYjMzk7bSBjdXJyZW50bHkgd29ya2luZyBpbi4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIG9yIHRoZSByZWxldmFudCBjb2RlIGJsb2NrLCBzbyBJIGNhbiBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhpcyB1cGRhdGUgcHJvY2Vzcy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGFuYWx5c2lzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhpc3RpbmcgbG9naWMgdG8gc2VlICpob3cqIGl0JiMzOTtzIHVwZGF0aW5nIHRoZSBGREIgZW50cnkuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLCB0aGUgY29uZGl0aW9ucyBiZWluZyBjaGVja2VkLCBhbmQgYW55IG90aGVyIGV4dGVybmFsIGNhbGxzLCBzdWNoIGFzIGhhcmR3YXJlIGludGVyYWN0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3Mgd2hldGhlciB0aGUgY29kZSBpcyBlZmZpY2llbnQsIGNvcnJlY3QsIGFuZCBzZWN1cmUuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBmbGF3cyBvciBhcmVhcyBvZiBpbXByb3ZlbWVudCBpbiB0aGlzIGNyaXRpY2FsIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk3MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTcxOlx0c3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIDk3MjpcdFx0XHRcdFx0ICAgICB1bmlvbiB2eGxhbl9hZGRyICppcCxcbiA5NzM6XHRcdFx0XHRcdCAgICAgX191MTYgc3RhdGUsIF9fdTE2IGZsYWdzLFxuIDk3NDpcdFx0XHRcdFx0ICAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHZuaSxcbiA5NzU6XHRcdFx0XHRcdCAgICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLFxuIDk3NjpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdnhsYW5fZmRiICpmLCB1MzIgbmhpZCxcbiA5Nzc6XHRcdFx0XHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXG4gOTc4Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiA5Nzk6XHR7XG4gOTgwOlx0XHRfX3UxNiBmZGJfZmxhZ3MgPSAobmRtX2ZsYWdzIFx1MDAyNiB+TlRGX1VTRSk7XG4gOTgxOlx0XHRzdHJ1Y3QgdnhsYW5fcmRzdCAqcmQgPSBOVUxMO1xuIDk4MjpcdFx0c3RydWN0IHZ4bGFuX3Jkc3Qgb2xkcmQ7XG4gOTgzOlx0XHRpbnQgbm90aWZ5ID0gMDtcbiA5ODQ6XHRcdGludCByYyA9IDA7XG4gOTg1Olx0XHRpbnQgZXJyO1xuIDk4NjpcdFxuIDk4NzpcdFx0aWYgKG5oaWQgXHUwMDI2XHUwMDI2ICFyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkpIHtcbiA5ODg6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuIDk4OTpcdFx0XHRcdCAgICAgICBcJiMzNDtDYW5ub3QgcmVwbGFjZSBhbiBleGlzdGluZyBub24gbmV4dGhvcCBmZGIgd2l0aCBhIG5leHRob3BcJiMzNDspO1xuIDk5MDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gOTkxOlx0XHR9XG4gOTkyOlx0XG4gOTkzOlx0XHRpZiAobmhpZCBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBOTE1fRl9BUFBFTkQpKSB7XG4gOTk0Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiA5OTU6XHRcdFx0XHQgICAgICAgXCYjMzQ7Q2Fubm90IGFwcGVuZCB0byBhIG5leHRob3AgZmRiXCYjMzQ7KTtcbiA5OTY6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDk5NzpcdFx0fVxuIDk5ODpcdFxuIDk5OTpcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihmLVx1MDAzZW5oKSBcdTAwMjZcdTAwMjZcbjEwMDA6XHRcdCAgICAhKHN0YXRlIFx1MDAyNiAoTlVEX1BFUk1BTkVOVCB8IE5VRF9OT0FSUCkpKSB7XG4xMDAxOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q2Fubm90IG1ha2UgYSBuZXh0aG9wIGZkYiBkeW5hbWljXCYjMzQ7KTtcbjEwMDI6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTAwMzpcdFx0fVxuMTAwNDpcdFxuMTAwNTpcdFx0LyogRG8gbm90IGFsbG93IGFuIGV4dGVybmFsbHkgbGVhcm5lZCBlbnRyeSB0byB0YWtlIG92ZXIgYW4gZW50cnkgYWRkZWRcbjEwMDY6XHRcdCAqIGJ5IHRoZSB1c2VyLlxuMTAwNzpcdFx0ICovXG4xMDA4Olx0XHRpZiAoIShmZGJfZmxhZ3MgXHUwMDI2IE5URl9FWFRfTEVBUk5FRCkgfHxcbjEwMDk6XHRcdCAgICAhKGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE5URl9WWExBTl9BRERFRF9CWV9VU0VSKSkge1xuMTAxMDpcdFx0XHRpZiAoZi1cdTAwM2VzdGF0ZSAhPSBzdGF0ZSkge1xuMTAxMTpcdFx0XHRcdGYtXHUwMDNlc3RhdGUgPSBzdGF0ZTtcbjEwMTI6XHRcdFx0XHRub3RpZnkgPSAxO1xuMTAxMzpcdFx0XHR9XG4xMDE0Olx0XHRcdGlmIChmLVx1MDAzZWZsYWdzICE9IGZkYl9mbGFncykge1xuMTAxNTpcdFx0XHRcdGYtXHUwMDNlZmxhZ3MgPSBmZGJfZmxhZ3M7XG4xMDE2Olx0XHRcdFx0bm90aWZ5ID0gMTtcbjEwMTc6XHRcdFx0fVxuMTAxODpcdFx0fVxuMTAxOTpcdFxuMTAyMDpcdFx0aWYgKChmbGFncyBcdTAwMjYgTkxNX0ZfUkVQTEFDRSkpIHtcbjEwMjE6XHRcdFx0LyogT25seSBjaGFuZ2UgdW5pY2FzdHMgKi9cbjEwMjI6XHRcdFx0aWYgKCEoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZi1cdTAwM2VrZXkuZXRoX2FkZHIpIHx8XG4xMDIzOlx0XHRcdCAgICAgIGlzX3plcm9fZXRoZXJfYWRkcihmLVx1MDAzZWtleS5ldGhfYWRkcikpKSB7XG4xMDI0Olx0XHRcdFx0aWYgKG5oaWQpIHtcbjEwMjU6XHRcdFx0XHRcdHJjID0gdnhsYW5fZmRiX25oX3VwZGF0ZSh2eGxhbiwgZiwgbmhpZCwgZXh0YWNrKTtcbjEwMjY6XHRcdFx0XHRcdGlmIChyYyBcdTAwM2MgMClcbjEwMjc6XHRcdFx0XHRcdFx0cmV0dXJuIHJjO1xuMTAyODpcdFx0XHRcdH0gZWxzZSB7XG4xMDI5Olx0XHRcdFx0XHRyYyA9IHZ4bGFuX2ZkYl9yZXBsYWNlKGYsIGlwLCBwb3J0LCB2bmksXG4xMDMwOlx0XHRcdFx0XHRcdFx0ICAgICAgIGlmaW5kZXgsIFx1MDAyNm9sZHJkKTtcbjEwMzE6XHRcdFx0XHR9XG4xMDMyOlx0XHRcdFx0bm90aWZ5IHw9IHJjO1xuMTAzMzpcdFx0XHR9IGVsc2Uge1xuMTAzNDpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q2Fubm90IHJlcGxhY2Ugbm9uLXVuaWNhc3QgZmRiIGVudHJpZXNcJiMzNDspO1xuMTAzNTpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEwMzY6XHRcdFx0fVxuMTAzNzpcdFx0fVxuMTAzODpcdFx0aWYgKChmbGFncyBcdTAwMjYgTkxNX0ZfQVBQRU5EKSBcdTAwMjZcdTAwMjZcbjEwMzk6XHRcdCAgICAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZi1cdTAwM2VrZXkuZXRoX2FkZHIpIHx8XG4xMDQwOlx0XHQgICAgIGlzX3plcm9fZXRoZXJfYWRkcihmLVx1MDAzZWtleS5ldGhfYWRkcikpKSB7XG4xMDQxOlx0XHRcdHJjID0gdnhsYW5fZmRiX2FwcGVuZChmLCBpcCwgcG9ydCwgdm5pLCBpZmluZGV4LCBcdTAwMjZyZCk7XG4xMDQyOlx0XG4xMDQzOlx0XHRcdGlmIChyYyBcdTAwM2MgMClcbjEwNDQ6XHRcdFx0XHRyZXR1cm4gcmM7XG4xMDQ1Olx0XHRcdGlmIChyYyBcdTAwMjZcdTAwMjYgY3JlYXRlZClcbjEwNDY6XHRcdFx0XHQqY3JlYXRlZCA9IHRydWU7XG4xMDQ3Olx0XHRcdG5vdGlmeSB8PSByYztcbjEwNDg6XHRcdH1cbjEwNDk6XHRcbjEwNTA6XHRcdGlmIChuZG1fZmxhZ3MgXHUwMDI2IE5URl9VU0UpXG4xMDUxOlx0XHRcdFdSSVRFX09OQ0UoZi1cdTAwM2V1cGRhdGVkLCBqaWZmaWVzKTtcbjEwNTI6XHRcbjEwNTM6XHRcdGlmIChub3RpZnkpIHtcbjEwNTQ6XHRcdFx0aWYgKHJkID09IE5VTEwpXG4xMDU1Olx0XHRcdFx0cmQgPSBmaXJzdF9yZW1vdGVfcnRubChmKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYwOAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlRpbWUgdG8gRGl2ZSBpbnRvIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZWAgYW5kIHRoZSBTdXJyb3VuZGluZ3MqKgoKQWxyaWdodCwgZ2l2ZW4gd2hhdCB3ZSYjMzk7cmUgd29ya2luZyBvbiwgaXQmIzM5O3MgcHJ1ZGVudCB0byBnaXZlIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZWAgYSBnb29kLCBoYXJkIGxvb2suIEJ1dCwgSSBkb24mIzM5O3Qgd2FudCB0byBqdXN0IGlzb2xhdGUgdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgdGhhdCBjYWxscyBpdCwgdGhlIGZ1bmN0aW9ucyBpdCByZWxpZXMgb24sIGFuZCBlc3BlY2lhbGx5IGFueSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGF0IHNwZWNpZmljIHVwZGF0ZTsgaXQmIzM5O3MgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGhvdyB0aGUgRm9yd2FyZGluZyBEYXRhYmFzZSAoRkRCKSB1cGRhdGVzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgVlhMQU4gbW9kdWxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY2F0Y2hpbmcgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMsIGVkZ2UgY2FzZXMsIG9yIG9wdGltaXphdGlvbnMgdGhhdCBtaWdodCBiZSBtaXNzZWQgaWYgSSBvbmx5IGZvY3VzIG9uIHRoZSB0YXJnZXQgZnVuY3Rpb24uIFRoaW5raW5nIGhvbGlzdGljYWxseSBhYm91dCBpdHMgcmVsYXRpb24gdG8gdGhlIFZYTEFOIGRhdGFwYXRoIGlzIGtleSBoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDc1Olx0XHRyZXR1cm4gZXJyO1xuMTA3NjpcdH1cbjEwNzc6XHRcbjEwNzg6XHRzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuMTA3OTpcdFx0XHRcdFx0ICAgY29uc3QgdTggKm1hYywgdW5pb24gdnhsYW5fYWRkciAqaXAsXG4xMDgwOlx0XHRcdFx0XHQgICBfX3UxNiBzdGF0ZSwgX191MTYgZmxhZ3MsXG4xMDgxOlx0XHRcdFx0XHQgICBfX2JlMTYgcG9ydCwgX19iZTMyIHNyY192bmksIF9fYmUzMiB2bmksXG4xMDgyOlx0XHRcdFx0XHQgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsIHUzMiBuaGlkLFxuMTA4MzpcdFx0XHRcdFx0ICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXG4xMDg0Olx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4xMDg1Olx0e1xuMTA4NjpcdFx0X191MTYgZmRiX2ZsYWdzID0gKG5kbV9mbGFncyBcdTAwMjYgfk5URl9VU0UpO1xuMTA4NzpcdFx0c3RydWN0IHZ4bGFuX2ZkYiAqZjtcbjEwODg6XHRcdGludCByYztcbjEwODk6XHRcbjEwOTA6XHRcdC8qIERpc2FsbG93IHJlcGxhY2UgdG8gYWRkIGEgbXVsdGljYXN0IGVudHJ5ICovXG4xMDkxOlx0XHRpZiAoKGZsYWdzIFx1MDAyNiBOTE1fRl9SRVBMQUNFKSBcdTAwMjZcdTAwMjZcbjEwOTI6XHRcdCAgICAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIobWFjKSB8fCBpc196ZXJvX2V0aGVyX2FkZHIobWFjKSkpXG4xMDkzOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEwOTQ6XHRcbjEwOTU6XHRcdG5ldGRldl9kYmcodnhsYW4tXHUwMDNlZGV2LCBcJiMzNDthZGQgJXBNIC1cdTAwM2UgJXBJU1xcblwmIzM0OywgbWFjLCBpcCk7XG4xMDk2Olx0XHRyYyA9IHZ4bGFuX2ZkYl9jcmVhdGUodnhsYW4sIG1hYywgaXAsIHN0YXRlLCBwb3J0LCBzcmNfdm5pLFxuMTA5NzpcdFx0XHRcdCAgICAgIHZuaSwgaWZpbmRleCwgZmRiX2ZsYWdzLCBuaGlkLCBcdTAwMjZmLCBleHRhY2spO1xuMTA5ODpcdFx0aWYgKHJjIFx1MDAzYyAwKVxuMTA5OTpcdFx0XHRyZXR1cm4gcmM7XG4xMTAwOlx0XG4xMTAxOlx0XHRyYyA9IHZ4bGFuX2ZkYl9ub3RpZnkodnhsYW4sIGYsIGZpcnN0X3JlbW90ZV9ydG5sKGYpLCBSVE1fTkVXTkVJR0gsXG4xMTAyOlx0XHRcdFx0ICAgICAgc3dkZXZfbm90aWZ5LCBleHRhY2spO1xuMTEwMzpcdFx0aWYgKHJjKVxuMTEwNDpcdFx0XHRnb3RvIGVycl9ub3RpZnk7XG4xMTA1Olx0XG4xMTA2Olx0XHRpZiAoY3JlYXRlZClcbjExMDc6XHRcdFx0KmNyZWF0ZWQgPSB0cnVlO1xuMTEwODpcdFxuMTEwOTpcdFx0cmV0dXJuIDA7XG4xMTEwOlx0XG4xMTExOlx0ZXJyX25vdGlmeTpcbjExMTI6XHRcdHZ4bGFuX2ZkYl9kZXN0cm95KHZ4bGFuLCBmLCBmYWxzZSwgZmFsc2UpO1xuMTExMzpcdFx0cmV0dXJuIHJjO1xuMTExNDpcdH1cbjExMTU6XHRcbjExMTY6XHQvKiBBZGQgbmV3IGVudHJ5IHRvIGZvcndhcmRpbmcgdGFibGUgLS0gYXNzdW1lcyBsb2NrIGhlbGQgKi9cbjExMTc6XHRpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbjExMTg6XHRcdFx0ICAgICBjb25zdCB1OCAqbWFjLCB1bmlvbiB2eGxhbl9hZGRyICppcCxcbjExMTk6XHRcdFx0ICAgICBfX3UxNiBzdGF0ZSwgX191MTYgZmxhZ3MsXG4xMTIwOlx0XHRcdCAgICAgX19iZTE2IHBvcnQsIF9fYmUzMiBzcmNfdm5pLCBfX2JlMzIgdm5pLFxuMTEyMTpcdFx0XHQgICAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsXG4xMTIyOlx0XHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXG4xMTIzOlx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTEyNDpcdHtcbjExMjU6XHRcdHN0cnVjdCB2eGxhbl9mZGIgKmY7XG4xMTI2Olx0XG4xMTI3Olx0XHRmID0gdnhsYW5fZmluZF9tYWModnhsYW4sIG1hYywgc3JjX3ZuaSk7XG4xMTI4Olx0XHRpZiAoZikge1xuMTEyOTpcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE5MTV9GX0VYQ0wpIHtcbjExMzA6XHRcdFx0XHRuZXRkZXZfZGJnKHZ4bGFuLVx1MDAzZWRldixcbjExMzE6XHRcdFx0XHRcdCAgIFwmIzM0O2xvc3QgcmFjZSB0byBjcmVhdGUgJXBNXFxuXCYjMzQ7LCBtYWMpO1xuMTEzMjpcdFx0XHRcdHJldHVybiAtRUVYSVNUO1xuMTEzMzpcdFx0XHR9XG4xMTM0Olx0XG4xMTM1Olx0XHRcdHJldHVybiB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHZ4bGFuLCBpcCwgc3RhdGUsIGZsYWdzLCBwb3J0LFxuMTEzNjpcdFx0XHRcdFx0XHRcdCB2bmksIGlmaW5kZXgsIG5kbV9mbGFncywgZixcbjExMzc6XHRcdFx0XHRcdFx0XHQgbmhpZCwgc3dkZXZfbm90aWZ5LCBjcmVhdGVkLFxuMTEzODpcdFx0XHRcdFx0XHRcdCBleHRhY2spO1xuMTEzOTpcdFx0fSBlbHNlIHtcbjExNDA6XHRcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE5MTV9GX0NSRUFURSkpXG4xMTQxOlx0XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xMTQyOlx0XG4xMTQzOlx0XHRcdHJldHVybiB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSh2eGxhbiwgbWFjLCBpcCwgc3RhdGUsIGZsYWdzLFxuMTE0NDpcdFx0XHRcdFx0XHQgICAgICAgcG9ydCwgc3JjX3ZuaSwgdm5pLCBpZmluZGV4LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA2OQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHZ4bGFuX3ZuaWZpbHRlci5jYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBkaWdnaW5nIGludG8gYHZ4bGFuX3ZuaWZpbHRlci5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtb2R1bGUgYmV0dGVyLCBhbmQgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gbG9vayBhdCB0aGUgY29kZSBkaXJlY3RseS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGdvaW5nIHRvIGJlIGFyb3VuZCBsaW5lcyA1MTIsIDcyNSwgYW5kIHBvdGVudGlhbGx5IG90aGVyIGFyZWFzIG5lYXJieS4gVGhlc2UgbGluZSBudW1iZXJzIG9mdGVuIHBpbnBvaW50IGtleSBmdW5jdGlvbnMgb3IgY3JpdGljYWwgbG9naWMgd2l0aGluIHRoZSBtb2R1bGUsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTEwOlx0XHRyZXR1cm4gZXJyO1xuIDUxMTpcdH1cbiA1MTI6XHRcbiA1MTM6XHRzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gNTE0Olx0XHRcdFx0XHQgIHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSxcbiA1MTU6XHRcdFx0XHRcdCAgdW5pb24gdnhsYW5fYWRkciAqZ3JvdXAsXG4gNTE2Olx0XHRcdFx0XHQgIGJvb2wgY3JlYXRlLCBib29sICpjaGFuZ2VkLFxuIDUxNzpcdFx0XHRcdFx0ICBib29sICpmZGJfY3JlYXRlZCxcbiA1MTg6XHRcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDUxOTpcdHtcbiA1MjA6XHRcdHN0cnVjdCB2eGxhbl9uZXQgKnZuID0gbmV0X2dlbmVyaWModnhsYW4tXHUwMDNlbmV0LCB2eGxhbl9uZXRfaWQpO1xuIDUyMTpcdFx0c3RydWN0IHZ4bGFuX3Jkc3QgKmRzdCA9IFx1MDAyNnZ4bGFuLVx1MDAzZWRlZmF1bHRfZHN0O1xuIDUyMjpcdFx0dW5pb24gdnhsYW5fYWRkciAqbmV3cmlwID0gTlVMTCwgKm9sZHJpcCA9IE5VTEw7XG4gNTIzOlx0XHR1bmlvbiB2eGxhbl9hZGRyIG9sZF9yZW1vdGVfaXA7XG4gNTI0Olx0XHRpbnQgcmV0ID0gMDtcbiA1MjU6XHRcbiA1MjY6XHRcdG1lbWNweShcdTAwMjZvbGRfcmVtb3RlX2lwLCBcdTAwMjZ2bmlub2RlLVx1MDAzZXJlbW90ZV9pcCwgc2l6ZW9mKG9sZF9yZW1vdGVfaXApKTtcbiA1Mjc6XHRcbiA1Mjg6XHRcdC8qIGlmIHBlciB2bmkgcmVtb3RlIGlwIGlzIG5vdCBwcmVzZW50IHVzZSB2eGxhbiBkZXZcbiA1Mjk6XHRcdCAqIGRlZmF1bHQgZHN0IHJlbW90ZSBpcCBmb3IgZmRiIGVudHJ5XG4gNTMwOlx0XHQgKi9cbiA1MzE6XHRcdGlmIChncm91cCBcdTAwMjZcdTAwMjYgIXZ4bGFuX2FkZHJfYW55KGdyb3VwKSkge1xuIDUzMjpcdFx0XHRuZXdyaXAgPSBncm91cDtcbiA1MzM6XHRcdH0gZWxzZSB7XG4gNTM0Olx0XHRcdGlmICghdnhsYW5fYWRkcl9hbnkoXHUwMDI2ZHN0LVx1MDAzZXJlbW90ZV9pcCkpXG4gNTM1Olx0XHRcdFx0bmV3cmlwID0gXHUwMDI2ZHN0LVx1MDAzZXJlbW90ZV9pcDtcbiA1MzY6XHRcdH1cbiA1Mzc6XHRcbiA1Mzg6XHRcdC8qIGlmIG9sZCByaXAgZXhpc3RzLCBhbmQgbm8gbmV3cmlwLFxuIDUzOTpcdFx0ICogZXhwbGljaXRseSBkZWxldGUgb2xkIHJpcFxuIDU0MDpcdFx0ICovXG4gNTQxOlx0XHRpZiAoIW5ld3JpcCBcdTAwMjZcdTAwMjYgIXZ4bGFuX2FkZHJfYW55KFx1MDAyNm9sZF9yZW1vdGVfaXApKVxuIDU0MjpcdFx0XHRvbGRyaXAgPSBcdTAwMjZvbGRfcmVtb3RlX2lwO1xuIDU0MzpcdFxuIDU0NDpcdFx0aWYgKCFuZXdyaXAgXHUwMDI2XHUwMDI2ICFvbGRyaXApXG4gNTQ1Olx0XHRcdHJldHVybiAwO1xuIDU0NjpcdFxuIDU0NzpcdFx0aWYgKCFjcmVhdGUgXHUwMDI2XHUwMDI2IG9sZHJpcCBcdTAwMjZcdTAwMjYgbmV3cmlwIFx1MDAyNlx1MDAyNiB2eGxhbl9hZGRyX2VxdWFsKG9sZHJpcCwgbmV3cmlwKSlcbiA1NDg6XHRcdFx0cmV0dXJuIDA7XG4gNTQ5Olx0XG4gNTUwOlx0XHRyZXQgPSB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnkodnhsYW4sIHZuaW5vZGUtXHUwMDNldm5pLFxuIDU1MTpcdFx0XHRcdFx0XHQgICAgIG9sZHJpcCwgbmV3cmlwLCBmZGJfY3JlYXRlZCxcbiA1NTI6XHRcdFx0XHRcdFx0ICAgICBleHRhY2spO1xuIDU1MzpcdFx0aWYgKHJldClcbiA1NTQ6XHRcdFx0Z290byBvdXQ7XG4gNTU1Olx0XG4gNTU2Olx0XHRpZiAoZ3JvdXApXG4gNTU3Olx0XHRcdG1lbWNweShcdTAwMjZ2bmlub2RlLVx1MDAzZXJlbW90ZV9pcCwgZ3JvdXAsIHNpemVvZih2bmlub2RlLVx1MDAzZXJlbW90ZV9pcCkpO1xuIDU1ODpcdFxuIDU1OTpcdFx0aWYgKHZ4bGFuLVx1MDAzZWRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDczCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgVlhMQU4gVk5JIEFkZGl0aW9uIENvZGUqKgoKT2theSwgdGltZSB0byBkaWcgaW4uIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHNvbWV0aGluZyBtaWdodCBiZSBvZmYgd2l0aCB0aGUgYHZ4bGFuX3ZuaV9hZGRgIGZ1bmN0aW9uLiBHaXZlbiB0aGUgYXJlYSBJJiMzOTttIHRyb3VibGVzaG9vdGluZywgbGluZSBudW1iZXJzIDcyNSB0aHJvdWdoIDc4MCBpbiB0aGF0IGNvZGUgYmxvY2sgYXJlIHNjcmVhbWluZyBvdXQgdG8gYmUgY2hlY2tlZC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gdGhlcmUgYW5kIHN0YXJ0IGJ5IHJ1bm5pbmcgdGhyb3VnaCB0aGF0IHNlY3Rpb24gc2xvd2x5LCBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGxvZ2ljIGZsYXdzLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCBoYW5kbGluZyBvZiBWTkkgYWRkaXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBhbmQgaG93IHRoZXkmIzM5O3JlIGJlaW5nIHVwZGF0ZWQuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBodW5jaCBwYW5zIG91dC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgaGFuZGxpbmcgdGhvc2UgVk5JIGFkZCByZXF1ZXN0cyBleGFjdGx5IGFzIGRlZmluZWQgaW4gdGhlIHNwZWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyNTpcdFxuIDcyNjpcdHN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiA3Mjc6XHRcdFx0XHQgc3RydWN0IHZ4bGFuX3ZuaV9ncm91cCAqdmcsXG4gNzI4Olx0XHRcdFx0IHUzMiB2bmksIHVuaW9uIHZ4bGFuX2FkZHIgKmdyb3VwLFxuIDcyOTpcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNzMwOlx0e1xuIDczMTpcdFx0c3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlO1xuIDczMjpcdFx0X19iZTMyIHYgPSBjcHVfdG9fYmUzMih2bmkpO1xuIDczMzpcdFx0Ym9vbCBmZGJfY3JlYXRlZCA9IGZhbHNlO1xuIDczNDpcdFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4gNzM1Olx0XHRpbnQgZXJyID0gMDtcbiA3MzY6XHRcbiA3Mzc6XHRcdGlmICh2eGxhbl92bmlmaWx0ZXJfbG9va3VwKHZ4bGFuLCB2KSlcbiA3Mzg6XHRcdFx0cmV0dXJuIHZ4bGFuX3ZuaV91cGRhdGUodnhsYW4sIHZnLCB2LCBncm91cCwgXHUwMDI2Y2hhbmdlZCwgZXh0YWNrKTtcbiA3Mzk6XHRcbiA3NDA6XHRcdGVyciA9IHZ4bGFuX3ZuaV9pbl91c2UodnhsYW4tXHUwMDNlbmV0LCB2eGxhbiwgXHUwMDI2dnhsYW4tXHUwMDNlY2ZnLCB2KTtcbiA3NDE6XHRcdGlmIChlcnIpIHtcbiA3NDI6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtWTkkgaW4gdXNlXCYjMzQ7KTtcbiA3NDM6XHRcdFx0cmV0dXJuIGVycjtcbiA3NDQ6XHRcdH1cbiA3NDU6XHRcbiA3NDY6XHRcdHZuaW5vZGUgPSB2eGxhbl92bmlfYWxsb2ModnhsYW4sIHYpO1xuIDc0NzpcdFx0aWYgKCF2bmlub2RlKVxuIDc0ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA3NDk6XHRcbiA3NTA6XHRcdGVyciA9IHJoYXNodGFibGVfbG9va3VwX2luc2VydF9mYXN0KFx1MDAyNnZnLVx1MDAzZXZuaV9oYXNoLFxuIDc1MTpcdFx0XHRcdFx0XHQgICAgXHUwMDI2dm5pbm9kZS1cdTAwM2V2bm9kZSxcbiA3NTI6XHRcdFx0XHRcdFx0ICAgIHZ4bGFuX3ZuaV9yaHRfcGFyYW1zKTtcbiA3NTM6XHRcdGlmIChlcnIpIHtcbiA3NTQ6XHRcdFx0dnhsYW5fdm5pX2ZyZWUodm5pbm9kZSk7XG4gNzU1Olx0XHRcdHJldHVybiBlcnI7XG4gNzU2Olx0XHR9XG4gNzU3Olx0XG4gNzU4Olx0XHRfX3Z4bGFuX3ZuaV9hZGRfbGlzdCh2Zywgdm5pbm9kZSk7XG4gNzU5Olx0XG4gNzYwOlx0XHRpZiAodnhsYW4tXHUwMDNlZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApXG4gNzYxOlx0XHRcdHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZSh2eGxhbiwgdm5pbm9kZSwgZmFsc2UpO1xuIDc2MjpcdFxuIDc2MzpcdFx0ZXJyID0gdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCh2eGxhbiwgdm5pbm9kZSwgZ3JvdXAsIHRydWUsIFx1MDAyNmNoYW5nZWQsXG4gNzY0Olx0XHRcdFx0XHQgICAgIFx1MDAyNmZkYl9jcmVhdGVkLCBleHRhY2spO1xuIDc2NTpcdFx0aWYgKGVycilcbiA3NjY6XHRcdFx0Z290byBlcnJfdm5pX2RlbDtcbiA3Njc6XHRcbiA3Njg6XHRcdHZ4bGFuX3ZuaWZpbHRlcl9ub3RpZnkodnhsYW4sIHZuaW5vZGUsIFJUTV9ORVdUVU5ORUwpO1xuIDc2OTpcdFxuIDc3MDpcdFx0cmV0dXJuIDA7XG4gNzcxOlx0XG4gNzcyOlx0ZXJyX3ZuaV9kZWw6XG4gNzczOlx0XHQvKiBVbmRvIG9ubHkgdGhlIGRlZmF1bHQgRkRCIGVudHJ5IHRoaXMgYWRkIGluc3RhbGxlZC4gIEFuIGVudHJ5IHRoYXRcbiA3NzQ6XHRcdCAqIHdhcyBhbHJlYWR5IHRoZXJlLCB3aGV0aGVyIGFkZGVkIG91dCBvZiBiYW5kIG9yIGJ5IGFub3RoZXIgVk5JLCBpc1xuIDc3NTpcdFx0ICogbGVmdCBhbG9uZS5cbiA3NzY6XHRcdCAqXG4gNzc3Olx0XHQgKiBObyBtZW1iZXJzaGlwIGhhcyB0byBiZSBnaXZlbiBiYWNrOiB2eGxhbl9pZ21wX2xlYXZlKCkgaXMgZ2F0ZWQgb25cbiA3Nzg6XHRcdCAqIHZ4bGFuX2FkZHJfbXVsdGljYXN0KFx1MDAyNm9sZF9yZW1vdGVfaXApLCBhbmQgb2xkX3JlbW90ZV9pcCBpcyBhIGNvcHlcbiA3Nzk6XHRcdCAqIG9mIHRoZSByZW1vdGUgSVAgb2YgYSBub2RlIHRoaXMgYWRkIGp1c3QgYWxsb2NhdGVkLCBzbyBpdCBpcyB6ZXJvLlxuIDc4MDpcdFx0ICpcbiA3ODE6XHRcdCAqIFRoZSBhZGRyZXNzIHBpY2tlZCBiZWxvdyBpcyB0aGUgb25lIHRoZSBlbnRyeSB3YXMgaW5zdGFsbGVkXG4gNzgyOlx0XHQgKiBhZ2FpbnN0LiAgSWYgdGhlIHJlcXVlc3QgY2FycmllZCBhIGdyb3VwLCB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKClcbiA3ODM6XHRcdCAqIGNvcGllZCBpdCBpbnRvIHZuaW5vZGUtXHUwMDNlcmVtb3RlX2lwIGJlZm9yZSB0aGUgam9pbiBjb3VsZCBmYWlsOyBpZlxuIDc4NDpcdFx0ICogaXQgZGlkIG5vdCwgdGhhdCBjb3B5IHdhcyBza2lwcGVkIGFuZCB0aGUgZW50cnkgd2VudCB0byB0aGUgZGV2aWNlXG4gNzg1Olx0XHQgKiBkZWZhdWx0LlxuIDc4NjpcdFx0ICovXG4gNzg3Olx0XHRpZiAoZmRiX2NyZWF0ZWQpIHtcbiA3ODg6XHRcdFx0dW5pb24gdnhsYW5fYWRkciAqcmlwID0gdnhsYW5fYWRkcl9hbnkoXHUwMDI2dm5pbm9kZS1cdTAwM2VyZW1vdGVfaXApID9cbiA3ODk6XHRcdFx0XHRcdFx0XHUwMDI2dnhsYW4tXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX2lwIDpcbiA3OTA6XHRcdFx0XHRcdFx0XHUwMDI2dm5pbm9kZS1cdTAwM2VyZW1vdGVfaXA7XG4gNzkxOlx0XG4gNzkyOlx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ2eGxhbi1cdTAwM2VoYXNoX2xvY2spO1xuIDc5MzpcdFx0XHRfX3Z4bGFuX2ZkYl9kZWxldGUodnhsYW4sIGFsbF96ZXJvc19tYWMsICpyaXAsXG4gNzk0Olx0XHRcdFx0XHQgICB2eGxhbi1cdTAwM2VjZmcuZHN0X3BvcnQsIHZuaW5vZGUtXHUwMDNldm5pLFxuIDc5NTpcdFx0XHRcdFx0ICAgdm5pbm9kZS1cdTAwM2V2bmksXG4gNzk2Olx0XHRcdFx0XHQgICB2eGxhbi1cdTAwM2VkZWZhdWx0X2RzdC5yZW1vdGVfaWZpbmRleCwgdHJ1ZSk7XG4gNzk3Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4gNzk4Olx0XHR9XG4gNzk5Olx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnZnLVx1MDAzZXZuaV9oYXNoLCBcdTAwMjZ2bmlub2RlLVx1MDAzZXZub2RlLFxuIDgwMDpcdFx0XHRcdCAgICAgICB2eGxhbl92bmlfcmh0X3BhcmFtcyk7XG4gODAxOlx0XHRfX3Z4bGFuX3ZuaV9kZWxfbGlzdCh2Zywgdm5pbm9kZSk7XG4gODAyOlx0XHRpZiAodnhsYW4tXHUwMDNlZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApXG4gODAzOlx0XHRcdHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZSh2eGxhbiwgdm5pbm9kZSwgdHJ1ZSk7XG4gODA0Olx0XHRjYWxsX3JjdShcdTAwMjZ2bmlub2RlLVx1MDAzZXJjdSwgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUpO1xuIDgwNTpcdFx0cmV0dXJuIGVycjtcbiA4MDY6XHR9XG4gODA3Olx0XG4gODA4Olx0c3RhdGljIHZvaWQgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4gODA5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgwNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZYTEFOIFZOSSBBZGRpdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXRjaD8gQWgsIHJpZ2h0LCBlcnJvciBoYW5kbGluZyBmb3IgYHZ4bGFuX3ZuaV9hZGRgLiBUaGUgcHJldmlvdXMgY29kZSwgSSByZW1lbWJlciBub3csIGRpZG4mIzM5O3QgcHJvcGVybHkgaGFuZGxlIGZhaWx1cmVzIGluIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYC4gSXQganVzdCBibGl0aGVseSBjb250aW51ZWQsIGxlYXZpbmcgcG90ZW50aWFsIG1lc3NlcyBpbiBpdHMgd2FrZS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cGAgY291bGQgZmFpbCwgYW5kIHRoZSBjb2RlIHdvdWxkIHByb2NlZWQgYXMgaWYgZXZlcnl0aGluZyB3YXMgaHVua3ktZG9yeSwgcG90ZW50aWFsbHkgbGVhdmluZyBhIHBhcnRpYWxseSBjcmVhdGVkIGB2bmlub2RlYCBoYW5naW5nIGFyb3VuZCwgb3IgYSBzdGFsZSBGREIgZW50cnkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSwgYnV0IEkgcmVjYWxsIHRoaXMgYmVpbmcgaW50cm9kdWNlZCBhIHdoaWxlIGJhY2s7IEkgbmVlZCB0byBjaGVjayB0aGUgZ2l0IGxvZyBvZiBgdnhsYW5fdm5pX2FkZGAgb3IgdGhlIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgaXQgdG8gY29uZmlybSBteSBzdXNwaWNpb24uCgpUaGlzIHBhdGNoLCB0aGVuLCBhZGRzIGNydWNpYWwgZXJyb3IgaGFuZGxpbmcuIElmIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYCBmYWlscywgaXQgY2xlYW5zIHVwIGV2ZXJ5dGhpbmcuIFRoZSBhdXRob3IgaXMgdHJhY2tpbmcgd2hldGhlciBhbiBGREIgZW50cnkgd2FzIGNyZWF0ZWQgdmlhIGBmZGJfY3JlYXRlZGAsIHdoaWNoIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAuIElmIGl0ICp3YXMqIGNyZWF0ZWQsIGl0JiMzOTtzIGRlbGV0ZWQgd2l0aCBgX192eGxhbl9mZGJfZGVsZXRlYC4gQWRkaXRpb25hbGx5LCBpdCB0YWtlcyBjYXJlIHRvIHJlbW92ZSB0aGUgZW50cnkgZnJvbSBgdmctJmd0O3ZuaV9oYXNoYCwgZGVsZXRlIGl0IGZyb20gYF9fdnhsYW5fdm5pX2RlbF9saXN0YCwgZGVsZXRlIHRoZSB2bmlub2RlIHNvY2tldCBpZiBpdCYjMzk7cyBJRkZfVVAgdXNpbmcgYHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZWAsIGFuZCBmaW5hbGx5LCBjYWxscyBSQ1UgZnJlZSBvbiBgdm5pbm9kZWAuIFNvbGlkLCBwcm9wZXIgY2xlYW51cC4KCk5vdywgbGV0JiMzOTtzIHB1dCBvbiBteSBLTVNBTiBoYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwYXRjaCBpc24mIzM5O3QgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIHJlYWRzIHRoYXQgY291bGQgY2F1c2UgaXNzdWVzLiBGaXJzdCwgYXJlIHRoZXJlIGFueSBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBiZSBhZmZlY3RlZD8gTm8uIGBmZGJfY3JlYXRlZGAgaXMgYW4gaW50ZXJuYWwgYm9vbGVhbiwgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayB3aXRoaW4gYHZ4bGFuX3ZuaV9hZGRgLCBhbmQgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2UuIEdvb2QuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gYmUgbWV0aWN1bG91cy4gTGV0JiMzOTtzIHNlZS4uLiBgYm9vbCBmZGJfY3JlYXRlZCA9IGZhbHNlO2AgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBJdCYjMzk7cyBwYXNzZWQgdG8gYHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXBgLCB3aGljaCBjYWxscyBgdnhsYW5fZmRiX3VwZGF0ZWAgYnkgcGFzc2luZyBpdCBhcyB0aGUgYGNyZWF0ZWRgIGFyZ3VtZW50LiBJbiBgdnhsYW5fZmRiX3VwZGF0ZWAsIHRoZXJlIGFyZSBjb25kaXRpb25hbCBhc3NpZ25tZW50cyB0byBgY3JlYXRlZGAgd2l0aGluIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBhbmQgYHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlYCwgYnV0IGNyaXRpY2FsbHksIHRoZSBjb2RlIG9ubHkgKndyaXRlcyogdG8gYCpjcmVhdGVkYCBpZiB0aGUgcG9pbnRlciBpcyBub24tTlVMTC4gTm8gcmVhZHMuIEJhY2sgaW4gYHZ4bGFuX3ZuaV9hZGRgLCBpdCYjMzk7cyB1c2VkIGluIGFuIGBpZiAoZmRiX2NyZWF0ZWQpYCBibG9jay4gVGhpcyBjaGVja3MgaXMgc2FmZSBiZWNhdXNlIHRoZSB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCBhdCBsaW5lIDczMy4gU28gYGZkYl9jcmVhdGVkYCBpcyBzYWZlLgpUaGUgbmV4dCBwbGFjZSBJIHdhbnQgdG8gdmVyaWZ5IGlzIGhlcmU6IGB1bmlvbiB2eGxhbl9hZGRyICpyaXAgPSB2eGxhbl9hZGRyX2FueSgmYW1wO3ZuaW5vZGUtJmd0O3JlbW90ZV9pcCkgPyAmYW1wO3Z4bGFuLSZndDtkZWZhdWx0X2RzdC5yZW1vdGVfaXAgOiAmYW1wO3ZuaW5vZGUtJmd0O3JlbW90ZV9pcDtgLiBJJiMzOTt2ZSB1c2VkIHRoaXMgcGF0dGVybiBhIGh1bmRyZWQgdGltZXMuICBgdm5pbm9kZWAgaXMgY3JlYXRlZCB3aXRoIGB2eGxhbl92bmlfYWxsb2ModnhsYW4sIHYpYC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgcmVtb3RlX2lwIGluIGB2eGxhbl92bmlfYWxsb2NgLiBMb29raW5nIGF0IGB2eGxhbl92bmlfYWxsb2NgLCBJIHNlZSBpdCBjYWxscyBga21lbV9jYWNoZV9hbGxvY2AuIEkgd2lsbCBuZWVkIHRvIHZlcmlmeSBpZiB0aGUgcmVtb3RlIGlwIGlzIGluaXRpYWxpemVkIHRoZXJlLgpJJiMzOTttIHNhdGlzZmllZCB0aGF0IHRoaXMgcGF0Y2gsIGFzIGl0IHN0YW5kcywgc2VlbXMgY2xlYW4gZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBhdXRob3JzIHRob3VnaHQgYWJvdXQgdGhlIHBpdGZhbGxzIGFuZCB0b29rIGFwcHJvcHJpYXRlIG1lYXN1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2eGxhbl92bmlfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9Njg5PXN0YXRpYyB2b2lkIF9fdnhsYW5fdm5pX2RlbF9saXN0KHN0cnVjdCB2eGxhbl92bmlfZ3JvdXAgKnZnLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTY5NS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjY5NjpzdGF0aWMgc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2eGxhbl92bmlfYWxsb2Moc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy02OTctXHRcdFx0XHRcdCAgICAgIF9fYmUzMiB2bmkpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NzI2PXN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy03NDUtXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo3NDY6XHR2bmlub2RlID0gdnhsYW5fdm5pX2FsbG9jKHZ4bGFuLCB2KTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTc0Ny1cdGlmICghdm5pbm9kZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4ODEKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGB2eGxhbl92bmlfYWxsb2NgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgYHZ4bGFuX3ZuaV9hbGxvY2AuIFRoZSBmYWN0IHRoYXQgSSYjMzk7bSBldmVuICp0aGlua2luZyogYWJvdXQgdGhpcyBmdW5jdGlvbiBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBWTkkgKFZYTEFOIE5ldHdvcmsgSWRlbnRpZmllcikgYWxsb2NhdGlvbiwgYW5kIHByb2JhYmx5IGluIHRoZSBjb250ZXh0IG9mIGEgdmlydHVhbGl6ZWQgbmV0d29yayBlbnZpcm9ubWVudC4gTXkgYnJhaW4mIzM5O3MgYWxyZWFkeSBnZWFyaW5nIHVwIHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgdW5kZXJseWluZyBtZWNoYW5pc21zOiBpcyB0aGlzIGEgY2VudHJhbGl6ZWQgYWxsb2NhdG9yLCBvciBhIGRpc3RyaWJ1dGVkIG9uZT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgY291bnRlciwgYSBtb3JlIGNvbXBsZXggYml0bWFwLCBvciBwZXJoYXBzIGV2ZW4gc29tZXRoaW5nIGxldmVyYWdpbmcgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgZGF0YSBzdHJ1Y3R1cmUgZm9yIG9wdGltaXplZCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24/CgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHNjYWxhYmlsaXR5LiBDYW4gdGhpcyBoYW5kbGUgYSBtYXNzaXZlIG51bWJlciBvZiBWTklzLCBhbmQgaG93IGFyZSB3ZSBtYW5hZ2luZyBwb3RlbnRpYWwgZnJhZ21lbnRhdGlvbiBpc3N1ZXMgaW4gdGhlIFZOSSBzcGFjZT8gSXMgdGhlcmUgYW55IGxvZ2ljIGZvciBoYW5kbGluZyBWTkkgY29sbGlzaW9ucyBvciBjb25mbGljdHMsIHBhcnRpY3VsYXJseSBpbiBhIG11bHRpLXRlbmFudCBlbnZpcm9ubWVudD8gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgdHlwaWNhbCBjaGFsbGVuZ2VzOiBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIG11bHRpcGxlIHByb2Nlc3NlcyBhcmUgdHJ5aW5nIHRvIGFsbG9jYXRlIFZOSXMgY29uY3VycmVudGx5LCBhbmQgdGhlIGltcG9ydGFuY2Ugb2YgYXRvbWljaXR5IGFuZCBsb2NraW5nIHN0cmF0ZWdpZXMuCgpGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVycm9yIGhhbmRsaW5nLiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGRlYWwgd2l0aCBhbGxvY2F0aW9uIGZhaWx1cmVzPyBEb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlLCB0aHJvdyBhbiBleGNlcHRpb24sIG9yIG1heWJlIGV2ZW4gc2lnbmFsIGFuIG91dC1vZi1WTklzIGNvbmRpdGlvbj8gSSYjMzk7bSBsb29raW5nIGZvciByb2J1c3RuZXNzLCBoZXJlLiBIb3cgd2VsbCBkb2VzIGl0IGhhbmRsZSBjb3JuZXIgY2FzZXMgYW5kIGVkZ2UgY29uZGl0aW9ucz8gQXJlIHRoZXJlIGFueSBwcm90ZWN0aW9ucyBhZ2FpbnN0IHJlc291cmNlIGV4aGF1c3Rpb24gb3IgZGVuaWFsLW9mLXNlcnZpY2U/IFRoaXMgaXMgY3JpdGljYWwgZm9yIHJlbGlhYmlsaXR5IGluIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudC4gSeKAmW0gaG9waW5nIHRvIGZpbmQgY2xldmVyIGxvZ2ljIHRvIGhhbmRsZSB0aGVzZSBpc3N1ZXMgd2l0aGluIHRoZSBmdW5jdGlvbi4KCkFuZCBmaW5hbGx5LCBJJiMzOTttIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgaW50ZWdyYXRpb24gd2l0aCB0aGUgcmVzdCBvZiB0aGUgVlhMQU4gc3RhY2suIEhvdyBkb2VzIHRoaXMgYWxsb2NhdGlvbiBpbnRlcmZhY2Ugd2l0aCB0aGUgZW5jYXBzdWxhdGlvbiBhbmQgZGVjYXBzdWxhdGlvbiBsb2dpYz8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRhdGFiYXNlcyBvciBjb250cm9sIHBsYW5lIGNvbXBvbmVudHM/IFRoZSBlbGVnYW5jZSBvZiB0aGlzIGludGVncmF0aW9uIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgbmV0d29yayBwZXJmb3JtYW5jZS4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjk2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2OTY6XHRzdGF0aWMgc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2eGxhbl92bmlfYWxsb2Moc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gNjk3Olx0XHRcdFx0XHRcdCAgICAgIF9fYmUzMiB2bmkpXG4gNjk4Olx0e1xuIDY5OTpcdFx0c3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlO1xuIDcwMDpcdFxuIDcwMTpcdFx0dm5pbm9kZSA9IGt6YWxsb2Nfb2JqKCp2bmlub2RlKTtcbiA3MDI6XHRcdGlmICghdm5pbm9kZSlcbiA3MDM6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNzA0Olx0XHR2bmlub2RlLVx1MDAzZXN0YXRzID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IHZ4bGFuX3ZuaV9zdGF0c19wY3B1KTtcbiA3MDU6XHRcdGlmICghdm5pbm9kZS1cdTAwM2VzdGF0cykge1xuIDcwNjpcdFx0XHRrZnJlZSh2bmlub2RlKTtcbiA3MDc6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNzA4Olx0XHR9XG4gNzA5Olx0XHR2bmlub2RlLVx1MDAzZXZuaSA9IHZuaTtcbiA3MTA6XHRcdHZuaW5vZGUtXHUwMDNlaGxpc3Q0LnZ4bGFuID0gdnhsYW47XG4gNzExOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gNzEyOlx0XHR2bmlub2RlLVx1MDAzZWhsaXN0Ni52eGxhbiA9IHZ4bGFuO1xuIDcxMzpcdCNlbmRpZlxuIDcxNDpcdFxuIDcxNTpcdFx0cmV0dXJuIHZuaW5vZGU7XG4gNzE2Olx0fVxuIDcxNzpcdFxuIDcxODpcdHN0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9mcmVlKHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSlcbiA3MTk6XHR7XG4gNzIwOlx0XHRmcmVlX3BlcmNwdSh2bmlub2RlLVx1MDAzZXN0YXRzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2Ygdm5pbm9kZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgYHZuaW5vZGVgIHN0cnVjdHVyZSBpcyBoYW5kbGVkLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQmIzM5O3MgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqKCp2bmlub2RlKWAuIFRoaXMgaXMga2V5IGJlY2F1c2UgdGhhdCBtZWFucyB0aGUgZW50aXJlIHN0cnVjdHVyZSBnZXRzIHplcm9lZCByaWdodCBvZmYgdGhlIGJhdCEgU28sIHRoYXQgaW1wb3J0YW50IGByZW1vdGVfaXBgIGZpZWxkPyBJdCBzdGFydHMgd2l0aCBhbGwgemVyb3MuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LgoKTm93LCBpZiBhIGBncm91cGAgaXMgcHJvdmlkZWQgbGF0ZXIgb24sIGBtZW1jcHlgIGlzIHVzZWQgd2l0aGluIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYCB0byBjb3B5IHRoZSBJUCBhZGRyZXNzIGZyb20gdGhlIGBncm91cGAgaW50byBgdm5pbm9kZS0mZ3Q7cmVtb3RlX2lwYC4gTWFrZXMgc2Vuc2UuCgpCdXQgd2hhdCBhYm91dCB0aGF0IGBhbGxfemVyb3NfbWFjYCB2YXJpYWJsZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHRvby4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byBjaGVjayBob3cgdGhhdCB2YXJpYWJsZSB3b3JrcyB0byBzZWUgaWYgaXQmIzM5O3MgcmVsYXRlZC4gSSYjMzk7bGwgY2hlY2sgaXRzIGRlZmluaXRpb24gdG8gc2VlIGhvdyBpdCBjYW4gYWZmZWN0IHRoZSBvdmVyYWxsIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxfemVyb3NfbWFjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz01Nz11bnNpZ25lZCBpbnQgdnhsYW5fbmV0X2lkO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTU4LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjU5OmNvbnN0IHU4IGFsbF96ZXJvc19tYWNbRVRIX0FMRU4gJiM0MzsgMl07XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNjAtc3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIHZ4bGFuX2xpbmtfb3BzO1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0yNzU1PXN0YXRpYyBuZXRkZXZfdHhfdCB2eGxhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI4MzQtXHRpZiAoZiA9PSBOVUxMKSB7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MjgzNTpcdFx0ZiA9IHZ4bGFuX2ZpbmRfbWFjX3R4KHZ4bGFuLCBhbGxfemVyb3NfbWFjLCB2bmkpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI4MzYtXHRcdGlmIChmID09IE5VTEwpIHtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9Mzk5ND1zdGF0aWMgaW50IHZ4bGFuX2Rldl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy00MDM1LVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo0MDM2Olx0XHRlcnIgPSB2eGxhbl9mZGJfdXBkYXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQwMzctXHRcdFx0XHQgICAgICAgXHUwMDI2ZHN0LVx1MDAzZXJlbW90ZV9pcCxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9NDQ0OD1zdGF0aWMgaW50IHZ4bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDQ4OC1cdFx0aWYgKCF2eGxhbl9hZGRyX2FueShcdTAwMjZjb25mLnJlbW90ZV9pcCkpIHtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo0NDg5Olx0XHRcdGVyciA9IHZ4bGFuX2ZkYl91cGRhdGUodnhsYW4sIGFsbF96ZXJvc19tYWMsXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDQ5MC1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNmNvbmYucmVtb3RlX2lwLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy00NTA1LVx0XHRpZiAoIXZ4bGFuX2FkZHJfYW55KFx1MDAyNmRzdC1cdTAwM2VyZW1vdGVfaXApKVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjQ1MDY6XHRcdFx0X192eGxhbl9mZGJfZGVsZXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ1MDctXHRcdFx0XHRcdCAgIGRzdC1cdTAwM2VyZW1vdGVfaXAsXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oPTEyPWV4dGVybiB1bnNpZ25lZCBpbnQgdnhsYW5fbmV0X2lkO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oOjEzOmV4dGVybiBjb25zdCB1OCBhbGxfemVyb3NfbWFjW0VUSF9BTEVOICYjNDM7IDJdO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oLTE0LWV4dGVybiBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgdnhsYW5fdm5pX3JodF9wYXJhbXM7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NDczPXN0YXRpYyBpbnQgdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBfX2JlMzIgdm5pLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTQ4My1cdGlmIChyZW1vdGVfaXAgXHUwMDI2XHUwMDI2ICF2eGxhbl9hZGRyX2FueShyZW1vdGVfaXApKSB7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo0ODQ6XHRcdGVyciA9IHZ4bGFuX2ZkYl91cGRhdGUodnhsYW4sIGFsbF96ZXJvc19tYWMsXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy00ODUtXHRcdFx0XHQgICAgICAgcmVtb3RlX2lwLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTUwMC1cdGlmIChvbGRfcmVtb3RlX2lwIFx1MDAyNlx1MDAyNiAhdnhsYW5fYWRkcl9hbnkob2xkX3JlbW90ZV9pcCkpIHtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjUwMTpcdFx0X192eGxhbl9mZGJfZGVsZXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNTAyLVx0XHRcdFx0ICAgKm9sZF9yZW1vdGVfaXAsXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NjE0PXN0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9kZWxldGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNjI1LVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjYyNjpcdFx0X192eGxhbl9mZGJfZGVsZXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNjI3LVx0XHRcdFx0ICAgKHZ4bGFuX2FkZHJfYW55KFx1MDAyNnZuaW5vZGUtXHUwMDNlcmVtb3RlX2lwKSA/XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NzI2PXN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy03OTItXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ2eGxhbi1cdTAwM2VoYXNoX2xvY2spO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6NzkzOlx0XHRfX3Z4bGFuX2ZkYl9kZWxldGUodnhsYW4sIGFsbF96ZXJvc19tYWMsICpyaXAsXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy03OTQtXHRcdFx0XHQgICB2eGxhbi1cdTAwM2VjZmcuZHN0X3BvcnQsIHZuaW5vZGUtXHUwMDNldm5pLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODUxNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZ4bGFuIEZEQiBEZWxldGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIGBhbGxfemVyb3NfbWFjYCBpcyBqdXN0IGEgQlNTLWJhc2VkLCB6ZXJvLWluaXRpYWxpemVkIGdsb2JhbCBhcnJheS4gTm90aGluZyBpbmhlcmVudGx5IGludGVyZXN0aW5nIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYF9fdnhsYW5fZmRiX2RlbGV0ZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IHdoYXQgYXJndW1lbnRzIGRvZXMgaXQgdGFrZSwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGRvZXMgaXQgcG90ZW50aWFsbHkgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnk/IExvb2tzIGxpa2UgSSBkb24mIzM5O3QgbmVlZCB0byB3b3JyeS4gRnJvbSB0aGUgYXJndW1lbnQgbGlzdCwgaXQganVzdCBzZWVtcyB0byBiZSB1c2luZyBNQUMsIElQLCBwb3J0LCBzb3VyY2UgVk5JLCBWTkksIGlmaW5kZXgsIGFuZCBhIGJvb2xlYW4gdG8gZGVsZXRlIGFuIEZEQiBlbnRyeS4gQWxsIGtleSBwYXJhbWV0ZXJzLgoKTmV4dCB1cCwgdGhpcyBgY2FsbF9yY3UoJmFtcDt2bmlub2RlLSZndDtyY3UsIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKTtgIGNhbGwuIEFscmlnaHQsIGBjYWxsX3JjdWAgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGdyYWNlIHBlcmlvZCBmb3IgbWVtb3J5IHJlY2xhbWF0aW9uLiBHb29kLiBOb3csIHRoZSBtZWF0IG9mIGl0OiBgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWVgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBmdW5jdGlvbiBpcyB0aGUgb25lIGFjdHVhbGx5IGZyZWVpbmcgdGhlIGB2bmlub2RlYCBzdHJ1Y3R1cmUuIFNvLCB0aW1lIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZWAgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2l0aCBob3cgaXQgbWFuYWdlcyB0aGlzIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NzE4PXN0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9mcmVlKHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSlcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy03MjMtXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo3MjQ6c3RhdGljIHZvaWQgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNzI1LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NzI2PXN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04MDMtXHRcdHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZSh2eGxhbiwgdm5pbm9kZSwgdHJ1ZSk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo4MDQ6XHRjYWxsX3JjdShcdTAwMjZ2bmlub2RlLVx1MDAzZXJjdSwgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtODA1LVx0cmV0dXJuIGVycjtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04MDctXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo4MDg6c3RhdGljIHZvaWQgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04MDkte1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jPTgxNj1zdGF0aWMgaW50IHZ4bGFuX3ZuaV9kZWwoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtODQ3LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6ODQ4Olx0Y2FsbF9yY3UoXHUwMDI2dm5pbm9kZS1cdTAwM2VyY3UsIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTg0OS1cbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz05NDI9dm9pZCB2eGxhbl92bmlncm91cF91bmluaXQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4pXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtOTU2LVx0XHR2eGxhbl92bmlmaWx0ZXJfbm90aWZ5KHZ4bGFuLCB2LCBSVE1fREVMVFVOTkVMKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjk1NzpcdFx0Y2FsbF9yY3UoXHUwMDI2di1cdTAwM2VyY3UsIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTk1OC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MDEKCQkJCQkJCW91dHB1dDogMzExCgkJCQkJCQl0aG91Z2h0czogNzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5ldyBSaXNrcyBJbnRyb2R1Y2VkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIExpbmUgODA4IGFscmVhZHkgaGFzIHRoZSBgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWVgIGZ1bmN0aW9uIGluIGV4aXN0aW5nIGNvZGUuIFRoZSBlcnJvciBwYXRoIGluIGB2eGxhbl92bmlfYWRkYCBpcyBjb3JyZWN0bHkgdXNpbmcgYGNhbGxfcmN1YCBhZnRlciBgdm5pbm9kZWAgaGFzIGJlZW4gZXhwb3NlZCB0byBSQ1UgcmVhZGVycyDigJMgdGhpcyBwcmV2ZW50cyBhIHVzZS1hZnRlci1mcmVlLCB3aGljaCBpcyBncmVhdC4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWVzLCBhbmQgY29uY3VycmVuY3kgaXNzdWVzLCBidXQgdGhvc2UgYXJlIGNvdmVyZWQgYnkgS0FTQU4vTE9DS0RFUC9LQ1NBTi4KClRoZSBrZXkgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIG5ldyBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcyBzcGVjaWZpY2FsbHkgZGV0ZWN0YWJsZSBieSBLTVNBTj8KCkxldOKAmXMgcmV2aWV3IHRoZSBLTVNBTiBjcml0ZXJpYToKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOioqIE5vcGUsIG5vdGhpbmcgaXMgYmVpbmcgY29waWVkIG91dC4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogVGhlIGBib29sIGZkYl9jcmVhdGVkID0gZmFsc2U7YCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgdGhlIGBjcmVhdGVkYCBwb2ludGVyIGlzICp3cml0dGVuKiB0bywgYW5kIGNoZWNrZWQgKGBpZiAoY3JlYXRlZClgKSBiZWZvcmUgdXNlIGFuZCBpbiBgdnhsYW5fdm5pX2FkZGAgd2l0aCB0aGUgZXhwbGljaXRseSBpbml0aWFsaXplZCB2YXJpYWJsZS4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gYnJhbmNoaW5nIGhlcmUuCjMuICAqKkFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBwb3RlbnRpYWxseSByZWFkIGxhdGVyOioqIFRoZSBhbGxvY2F0aW9ucyB1c2UgYGt6YWxsb2Nfb2JqYCwgYW5kIG5vIG5ldyBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgYnkgdGhpcyBwYXRjaCwgc28gd2XigJlyZSBnb29kLgo0LiAgKipCb3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBieXRlczoqKiBObyBjaGFuZ2VzIHRvIGFueSBvZiB0aG9zZS4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGNsZWFybHkgYGZhbHNlYC4KCk5vdywgZm9yIGEgY2FyZWZ1bCBjb250cmFzdCB3aXRoIEtBU0FOOiB0aGlzIHBhdGNoIGFkZHMgYW4gZXJyb3ItdW53aW5kIHBhdGggdG8gYHZ4bGFuX3ZuaV9hZGRgIHRoYXQgZW5zdXJlcyB0aGUgY3JlYXRlZCBkZWZhdWx0IEZEQiBlbnRyeSBpcyBkZWxldGVkLCB0aGUgYHZuaW5vZGVgIGlzIHVubGlua2VkLCBhbmQgZnJlZWQgd2l0aCBSQ1UsIGVuc3VyaW5nIHRoZSBjcmVhdGVkIEZEQiBlbnRyeSBpcyBkZWxldGVkLiBQb3RlbnRpYWwgaXNzdWVzIHdpdGggbWVtb3J5IHNhZmV0eSBvciBjb25jdXJyZW5jeSAoVUFGLCBkb3VibGUtZnJlZSwgZXRjLikgKmhlcmUqIGFyZSBhbGwgdGhpbmdzIEtBU0FOIGFuZCBMT0NLREVQIHdvdWxkIGNhdGNoLiBUaGF0IGNvdmVycyBsaWZlY3ljbGUgbWFuYWdlbWVudCwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgbG9ja2luZyByZWxhdGVkIHRvIGB2eGxhbi0mZ3Q7aGFzaF9sb2NrYC4KCktNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgZGVhbHMgd2l0aCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIHBhZ2VzKSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBXZSAqZG8qIGhhdmUgdGhhdCBgYm9vbCAqY3JlYXRlZGAgcGFyYW1ldGVyIGFuZCB0aGUgYGZkYl9jcmVhdGVkYCBsb2NhbCB2YXJpYWJsZSBpbiBgdnhsYW5fdm5pX2FkZGAsIGJ1dCBpdCYjMzk7cyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGFuZCBvbmx5IGV2ZXIgd3JpdHRlbiB0byB0aHJvdWdoIHRoZSBwb2ludGVyLCBub3QgcmVhZCBvciBsZWFrZWQuIFNvLCBubyBLTVNBTi1zcGVjaWZpYyByaXNrcyBhcmUgcHJlc2VudC4gVGhlIHZhcmlhYmxlIGlzIHdyaXR0ZW4gdG8sIGFuZCBuZXZlciByZWFkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uCgpBbGwgY2xlYXIuIEkmIzM5O20gc2F0aXNmaWVkLiBUaW1lIGZvciBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yLXVud2luZCBsb2dpYyB0byB2eGxhbl92bmlfYWRkKCkgaWYgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpIGZhaWxzLCBpbnRyb2R1Y2luZyBhIGJvb2xlYW4gb3V0LXBhcmFtZXRlciAoJiMzOTtjcmVhdGVkJiMzOTsgLyAmIzM5O2ZkYl9jcmVhdGVkJiMzOTspIGFjcm9zcyB2eGxhbl9mZGJfdXBkYXRlKCkgYW5kIGhlbHBlcnMgdG8gdHJhY2sgd2hldGhlciBhbiBGREIgZW50cnkgd2FzIGNyZWF0ZWQgc28gaXQgY2FuIGJlIHJvbGxlZCBiYWNrLlxuXG4xLiBLQVNBTiAvIExPQ0tERVAgQXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIG1vZGlmaWVzIGNsZWFudXAgcGF0aHMgYW5kIG9iamVjdCBsaWZlY3ljbGUgKHVud2luZGluZyBoYXNodGFibGUgaW5zZXJ0aW9uLCBsaXN0IGFkZGl0aW9uLCBzb2NrZXQgc3RhdGUsIGFuZCBzY2hlZHVsaW5nIFJDVSBkZXN0cnVjdGlvbiBvZiB2bmlub2RlLCBwbHVzIGRlbGV0aW5nIEZEQiBlbnRyaWVzIHVuZGVyIGhhc2hfbG9jaykuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGhlcmUgKGUuZy4gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBsaXN0IGNvcnJ1cHRpb24sIG9yIGxvY2tpbmcgZGlzY3JlcGFuY2llcykgYXJlIGFkZHJlc3NlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC5cbjIuIEtNU0FOIEFwcGxpY2FiaWxpdHk6IEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGFuZCBpbmZvLWxlYWtzLiBUaGUgbmV3bHkgaW50cm9kdWNlZCB2YXJpYWJsZSAmIzM5O2Jvb2wgZmRiX2NyZWF0ZWQgPSBmYWxzZTsmIzM5OyBpbiB2eGxhbl92bmlfYWRkKCkgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIG9uIHRoZSBzdGFjaywgYW5kIHRoZSBjYWxsZWUgZnVuY3Rpb25zIG9ubHkgY29uZGl0aW9uYWxseSB3cml0ZSAmIzM5OypjcmVhdGVkID0gdHJ1ZSYjMzk7IHdpdGhvdXQgcmVhZGluZyBmcm9tIGl0IHVuaW5pdGlhbGl6ZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBoZWFwIGFsbG9jYXRpb25zIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGNyZWF0ZWQsIGFuZCBubyBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgYW5kIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvci11bndpbmQgbG9naWMgdG8gdnhsYW5fdm5pX2FkZCgpIGlmIHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKSBmYWlscywgaW50cm9kdWNpbmcgYSBib29sZWFuIG91dC1wYXJhbWV0ZXIgKCYjMzk7Y3JlYXRlZCYjMzk7IC8gJiMzOTtmZGJfY3JlYXRlZCYjMzk7KSBhY3Jvc3MgdnhsYW5fZmRiX3VwZGF0ZSgpIGFuZCBoZWxwZXJzIHRvIHRyYWNrIHdoZXRoZXIgYW4gRkRCIGVudHJ5IHdhcyBjcmVhdGVkIHNvIGl0IGNhbiBiZSByb2xsZWQgYmFjay5cblxuMS4gS0FTQU4gLyBMT0NLREVQIEFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBtb2RpZmllcyBjbGVhbnVwIHBhdGhzIGFuZCBvYmplY3QgbGlmZWN5Y2xlICh1bndpbmRpbmcgaGFzaHRhYmxlIGluc2VydGlvbiwgbGlzdCBhZGRpdGlvbiwgc29ja2V0IHN0YXRlLCBhbmQgc2NoZWR1bGluZyBSQ1UgZGVzdHJ1Y3Rpb24gb2Ygdm5pbm9kZSwgcGx1cyBkZWxldGluZyBGREIgZW50cmllcyB1bmRlciBoYXNoX2xvY2spLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBoZXJlIChlLmcuIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgbGlzdCBjb3JydXB0aW9uLCBvciBsb2NraW5nIGRpc2NyZXBhbmNpZXMpIGFyZSBhZGRyZXNzZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuXG4yLiBLTVNBTiBBcHBsaWNhYmlsaXR5OiBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBhbmQgaW5mby1sZWFrcy4gVGhlIG5ld2x5IGludHJvZHVjZWQgdmFyaWFibGUgJiMzOTtib29sIGZkYl9jcmVhdGVkID0gZmFsc2U7JiMzOTsgaW4gdnhsYW5fdm5pX2FkZCgpIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2ssIGFuZCB0aGUgY2FsbGVlIGZ1bmN0aW9ucyBvbmx5IGNvbmRpdGlvbmFsbHkgd3JpdGUgJiMzOTsqY3JlYXRlZCA9IHRydWUmIzM5OyB3aXRob3V0IHJlYWRpbmcgZnJvbSBpdCB1bmluaXRpYWxpemVkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgaGVhcCBhbGxvY2F0aW9ucyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBjcmVhdGVkLCBhbmQgbm8gYnJhbmNoaW5nIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIGFuZCBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NDk6NTQuMTI1NjMzMDk5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc5ODAwNjAzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlhMQU5cIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2eGxhbl92bmlfYWRkXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZVwiLFxuICAgIFwidnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3ItdW53aW5kIGxvZ2ljIHRvIHZ4bGFuX3ZuaV9hZGQoKSBpZiB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKCkgZmFpbHMsIGludHJvZHVjaW5nIGEgYm9vbGVhbiBvdXQtcGFyYW1ldGVyICgnY3JlYXRlZCcgLyAnZmRiX2NyZWF0ZWQnKSBhY3Jvc3MgdnhsYW5fZmRiX3VwZGF0ZSgpIGFuZCBoZWxwZXJzIHRvIHRyYWNrIHdoZXRoZXIgYW4gRkRCIGVudHJ5IHdhcyBjcmVhdGVkIHNvIGl0IGNhbiBiZSByb2xsZWQgYmFjay5cXG5cXG4xLiBLQVNBTiAvIExPQ0tERVAgQXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIG1vZGlmaWVzIGNsZWFudXAgcGF0aHMgYW5kIG9iamVjdCBsaWZlY3ljbGUgKHVud2luZGluZyBoYXNodGFibGUgaW5zZXJ0aW9uLCBsaXN0IGFkZGl0aW9uLCBzb2NrZXQgc3RhdGUsIGFuZCBzY2hlZHVsaW5nIFJDVSBkZXN0cnVjdGlvbiBvZiB2bmlub2RlLCBwbHVzIGRlbGV0aW5nIEZEQiBlbnRyaWVzIHVuZGVyIGhhc2hfbG9jaykuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGhlcmUgKGUuZy4gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBsaXN0IGNvcnJ1cHRpb24sIG9yIGxvY2tpbmcgZGlzY3JlcGFuY2llcykgYXJlIGFkZHJlc3NlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC5cXG4yLiBLTVNBTiBBcHBsaWNhYmlsaXR5OiBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBhbmQgaW5mby1sZWFrcy4gVGhlIG5ld2x5IGludHJvZHVjZWQgdmFyaWFibGUgJ2Jvb2wgZmRiX2NyZWF0ZWQgPSBmYWxzZTsnIGluIHZ4bGFuX3ZuaV9hZGQoKSBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrLCBhbmQgdGhlIGNhbGxlZSBmdW5jdGlvbnMgb25seSBjb25kaXRpb25hbGx5IHdyaXRlICcqY3JlYXRlZCA9IHRydWUnIHdpdGhvdXQgcmVhZGluZyBmcm9tIGl0IHVuaW5pdGlhbGl6ZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBoZWFwIGFsbG9jYXRpb25zIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGNyZWF0ZWQsIGFuZCBubyBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhbmQgZG9lcyBub3QganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZYTEFOIGRyaXZlciAocmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIGNvbW1hbmRzIHN1Y2ggYXMgUlRNX05FV1RVTk5FTCBhbmQgUlRNX05FV05FSUdIKS4gSXQgdXBkYXRlcyB0aGUgRkRCIHVwZGF0ZSBsb2dpYyBhY3Jvc3MgdnhsYW5fZmRiX3VwZGF0ZSgpLCB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSgpLCBhbmQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZygpIHRvIHRyYWNrIHdoZW4gYW4gZW50cnkgaXMgbmV3bHkgY3JlYXRlZCwgYW5kIGltcGxlbWVudHMgYW4gZXJyb3Igcm9sbGJhY2sgcGF0aCBpbiB2eGxhbl92bmlfYWRkKCkgdGhhdCB0ZWFycyBkb3duIEZEQiBlbnRyaWVzLCB1bmxpbmtzIFZOSSBub2RlcywgYW5kIGZyZWVzIG1lbW9yeSB2aWEgUkNVIGlmIHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKSBmYWlscy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBsb2dpYyBhbHRlcmluZyBzdGF0ZSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBlcnJvci1oYW5kbGluZyBpbiB0aGUgdmlydHVhbCBuZXR3b3JraW5nIHN1YnN5c3RlbSwgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjQ5OjU0LjEyNTYzNzc4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMDQ0NTE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdjYjk3MWZlNTVhZDVjOTE4Y2NjOTlhYjUyODQ0OTU4ODVlYzk1YmZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMjI6NDk6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jIGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jXFxuaW5kZXggYmU5NWFmNjRhMWY1MS4uMDY1MmRjNDcxZGNhNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcXG5AQCAtOTc0LDcgKzk3NCw3IEBAIHN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4gXFx0XFx0XFx0XFx0ICAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHZuaSxcXG4gXFx0XFx0XFx0XFx0ICAgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHZ4bGFuX2ZkYiAqZiwgdTMyIG5oaWQsXFxuLVxcdFxcdFxcdFxcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksXFxuK1xcdFxcdFxcdFxcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdF9fdTE2IGZkYl9mbGFncyA9IChuZG1fZmxhZ3MgXFx1MDAyNiB+TlRGX1VTRSk7XFxuQEAgLTEwNDIsNiArMTA0Miw4IEBAIHN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4gXFxuIFxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiByYztcXG4rXFx0XFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IGNyZWF0ZWQpXFxuK1xcdFxcdFxcdCpjcmVhdGVkID0gdHJ1ZTtcXG4gXFx0XFx0bm90aWZ5IHw9IHJjO1xcbiBcXHR9XFxuIFxcbkBAIC0xMDc4LDcgKzEwODAsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbiBcXHRcXHRcXHRcXHQgICBfX3UxNiBzdGF0ZSwgX191MTYgZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdCAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSxcXG4gXFx0XFx0XFx0XFx0ICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLCB1MzIgbmhpZCxcXG4tXFx0XFx0XFx0XFx0ICAgYm9vbCBzd2Rldl9ub3RpZnksXFxuK1xcdFxcdFxcdFxcdCAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0X191MTYgZmRiX2ZsYWdzID0gKG5kbV9mbGFncyBcXHUwMDI2IH5OVEZfVVNFKTtcXG5AQCAtMTEwMSw2ICsxMTAzLDkgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRnb3RvIGVycl9ub3RpZnk7XFxuIFxcbitcXHRpZiAoY3JlYXRlZClcXG4rXFx0XFx0KmNyZWF0ZWQgPSB0cnVlO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBlcnJfbm90aWZ5OlxcbkBAIC0xMTE0LDcgKzExMTksNyBAQCBpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4gXFx0XFx0ICAgICBfX3UxNiBzdGF0ZSwgX191MTYgZmxhZ3MsXFxuIFxcdFxcdCAgICAgX19iZTE2IHBvcnQsIF9fYmUzMiBzcmNfdm5pLCBfX2JlMzIgdm5pLFxcbiBcXHRcXHQgICAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsXFxuLVxcdFxcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksXFxuK1xcdFxcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXFxuIFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCB2eGxhbl9mZGIgKmY7XFxuQEAgLTExMjksNyArMTEzNCw4IEBAIGludCB2eGxhbl9mZGJfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbiBcXG4gXFx0XFx0cmV0dXJuIHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcodnhsYW4sIGlwLCBzdGF0ZSwgZmxhZ3MsIHBvcnQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCB2bmksIGlmaW5kZXgsIG5kbV9mbGFncywgZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IG5oaWQsIHN3ZGV2X25vdGlmeSwgZXh0YWNrKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IG5oaWQsIHN3ZGV2X25vdGlmeSwgY3JlYXRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGV4dGFjayk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgTkxNX0ZfQ1JFQVRFKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuQEAgLTExMzcsNyArMTE0Myw3IEBAIGludCB2eGxhbl9mZGJfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbiBcXHRcXHRyZXR1cm4gdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUodnhsYW4sIG1hYywgaXAsIHN0YXRlLCBmbGFncyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIHBvcnQsIHNyY192bmksIHZuaSwgaWZpbmRleCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIG5kbV9mbGFncywgbmhpZCwgc3dkZXZfbm90aWZ5LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgZXh0YWNrKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNyZWF0ZWQsIGV4dGFjayk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMTI3NSw3ICsxMjgxLDcgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfYWRkKHN0cnVjdCBuZG1zZyAqbmRtLCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbiBcXHRlcnIgPSB2eGxhbl9mZGJfdXBkYXRlKHZ4bGFuLCBhZGRyLCBcXHUwMDI2aXAsIG5kbS1cXHUwMDNlbmRtX3N0YXRlLCBmbGFncyxcXG4gXFx0XFx0XFx0ICAgICAgIHBvcnQsIHNyY192bmksIHZuaSwgaWZpbmRleCxcXG4gXFx0XFx0XFx0ICAgICAgIG5kbS1cXHUwMDNlbmRtX2ZsYWdzIHwgTlRGX1ZYTEFOX0FEREVEX0JZX1VTRVIsXFxuLVxcdFxcdFxcdCAgICAgICBuaGlkLCB0cnVlLCBleHRhY2spO1xcbitcXHRcXHRcXHQgICAgICAgbmhpZCwgdHJ1ZSwgTlVMTCwgZXh0YWNrKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnZ4bGFuLVxcdTAwM2VoYXNoX2xvY2spO1xcbiBcXG4gXFx0aWYgKCFlcnIpXFxuQEAgLTE0OTEsNyArMTQ5Nyw4IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB2eGxhbl9zbm9vcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgdnhsYW4tXFx1MDAzZWNmZy5kc3RfcG9ydCxcXG4gXFx0XFx0XFx0XFx0XFx0IHZuaSxcXG4gXFx0XFx0XFx0XFx0XFx0IHZ4bGFuLVxcdTAwM2VkZWZhdWx0X2RzdC5yZW1vdGVfdm5pLFxcbi1cXHRcXHRcXHRcXHRcXHQgaWZpbmRleCwgTlRGX1NFTEYsIDAsIHRydWUsIE5VTEwpO1xcbitcXHRcXHRcXHRcXHRcXHQgaWZpbmRleCwgTlRGX1NFTEYsIDAsIHRydWUsIE5VTEwsXFxuK1xcdFxcdFxcdFxcdFxcdCBOVUxMKTtcXG4gXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnZ4bGFuLVxcdTAwM2VoYXNoX2xvY2spO1xcbiBcXHR9XFxuIFxcbkBAIC00MDM0LDcgKzQwNDEsOCBAQCBzdGF0aWMgaW50IHZ4bGFuX2Rldl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgZHN0LVxcdTAwM2VyZW1vdGVfdm5pLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgZHN0LVxcdTAwM2VyZW1vdGVfdm5pLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgZHN0LVxcdTAwM2VyZW1vdGVfaWZpbmRleCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBleHRhY2spO1xcbitcXHRcXHRcXHRcXHQgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIE5VTEwsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBleHRhY2spO1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dnhsYW4tXFx1MDAzZWhhc2hfbG9jayk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gdW5saW5rO1xcbkBAIC00NDg1LDcgKzQ0OTMsOCBAQCBzdGF0aWMgaW50IHZ4bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIHZ4bGFuLVxcdTAwM2VjZmcuZHN0X3BvcnQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25mLnZuaSwgY29uZi52bmksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25mLnJlbW90ZV9pZmluZGV4LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIGV4dGFjayk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGV4dGFjayk7XFxuIFxcdFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnZ4bGFuLVxcdTAwM2VoYXNoX2xvY2spO1xcbiBcXHRcXHRcXHRcXHRuZXRkZXZfYWRqYWNlbnRfY2hhbmdlX2Fib3J0KGRzdC1cXHUwMDNlcmVtb3RlX2RldixcXG5AQCAtNDgwNiw3ICs0ODE1LDcgQEAgdnhsYW5fZmRiX2V4dGVybmFsX2xlYXJuX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHQgICAgICAgZmRiX2luZm8tXFx1MDAzZXJlbW90ZV92bmksXFxuIFxcdFxcdFxcdCAgICAgICBmZGJfaW5mby1cXHUwMDNlcmVtb3RlX2lmaW5kZXgsXFxuIFxcdFxcdFxcdCAgICAgICBOVEZfVVNFIHwgTlRGX1NFTEYgfCBOVEZfRVhUX0xFQVJORUQsXFxuLVxcdFxcdFxcdCAgICAgICAwLCBmYWxzZSwgZXh0YWNrKTtcXG4rXFx0XFx0XFx0ICAgICAgIDAsIGZhbHNlLCBOVUxMLCBleHRhY2spO1xcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dnhsYW4tXFx1MDAzZWhhc2hfbG9jayk7XFxuIFxcbiBcXHRyZXR1cm4gZXJyO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmggYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmhcXG5pbmRleCBiMWVlYzIyMTYzNjA4Li5lNTI3NTU5MjNjMzExIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaFxcbkBAIC0xOTMsNyArMTkzLDggQEAgaW50IHZ4bGFuX2ZkYl91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuIFxcdFxcdCAgICAgX191MTYgc3RhdGUsIF9fdTE2IGZsYWdzLFxcbiBcXHRcXHQgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSxcXG4gXFx0XFx0ICAgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsIHUzMiBuaGlkLFxcbi1cXHRcXHQgICAgIGJvb2wgc3dkZXZfbm90aWZ5LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbitcXHRcXHQgICAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLFxcbitcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuIHZvaWQgdnhsYW5feG1pdF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0ICAgIF9fYmUzMiBkZWZhdWx0X3ZuaSwgc3RydWN0IHZ4bGFuX3Jkc3QgKnJkc3QsIGJvb2wgZGlkX3JzYyk7XFxuIGludCB2eGxhbl92bmlfaW5fdXNlKHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jXFxuaW5kZXggZGQ5NDA4NWUwODg2NS4uOWNjOTMyYzYxNzdkMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jXFxuQEAgLTQ3Myw2ICs0NzMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdm5pX2ZpbHRlcl9wb2xpY3lbVlhMQU5fVk5JRklMVEVSX01BWCArIDFdID0ge1xcbiBzdGF0aWMgaW50IHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgX19iZTMyIHZuaSxcXG4gXFx0XFx0XFx0XFx0XFx0ICB1bmlvbiB2eGxhbl9hZGRyICpvbGRfcmVtb3RlX2lwLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHVuaW9uIHZ4bGFuX2FkZHIgKnJlbW90ZV9pcCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBib29sICpmZGJfY3JlYXRlZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IHZ4bGFuX3Jkc3QgKmRzdCA9IFxcdTAwMjZ2eGxhbi1cXHUwMDNlZGVmYXVsdF9kc3Q7XFxuQEAgLTQ4OCw3ICs0ODksOCBAQCBzdGF0aWMgaW50IHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgX19iZTMyIHZuaSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHZuaSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHZuaSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGRzdC1cXHUwMDNlcmVtb3RlX2lmaW5kZXgsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgZXh0YWNrKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBmZGJfY3JlYXRlZCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGV4dGFjayk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnZ4bGFuLVxcdTAwM2VoYXNoX2xvY2spO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbkBAIC01MTIsNiArNTE0LDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSxcXG4gXFx0XFx0XFx0XFx0ICB1bmlvbiB2eGxhbl9hZGRyICpncm91cCxcXG4gXFx0XFx0XFx0XFx0ICBib29sIGNyZWF0ZSwgYm9vbCAqY2hhbmdlZCxcXG4rXFx0XFx0XFx0XFx0ICBib29sICpmZGJfY3JlYXRlZCxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IHZ4bGFuX25ldCAqdm4gPSBuZXRfZ2VuZXJpYyh2eGxhbi1cXHUwMDNlbmV0LCB2eGxhbl9uZXRfaWQpO1xcbkBAIC01NDUsNyArNTQ4LDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdHJldCA9IHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeSh2eGxhbiwgdm5pbm9kZS1cXHUwMDNldm5pLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIG9sZHJpcCwgbmV3cmlwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIG9sZHJpcCwgbmV3cmlwLCBmZGJfY3JlYXRlZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBleHRhY2spO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtNTk5LDcgKzYwMiw3IEBAIGludCB2eGxhbl92bmlsaXN0X3VwZGF0ZV9ncm91cChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4gXFx0XFx0XFx0cmV0ID0gdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHZ4bGFuLCB2ZW50LVxcdTAwM2V2bmksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgb2xkX3JlbW90ZV9pcCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBuZXdfcmVtb3RlX2lwLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGV4dGFjayk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTlVMTCwgZXh0YWNrKTtcXG4gXFx0XFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0fVxcbkBAIC02NTUsNyArNjU4LDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdHJldCA9IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAodnhsYW4sIHZuaW5vZGUsIGdyb3VwLCBmYWxzZSwgY2hhbmdlZCxcXG4tXFx0XFx0XFx0XFx0ICAgICBleHRhY2spO1xcbitcXHRcXHRcXHRcXHQgICAgIE5VTEwsIGV4dGFjayk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbkBAIC03MTgsNiArNzIxLDggQEAgc3RhdGljIHZvaWQgdnhsYW5fdm5pX2ZyZWUoc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlKVxcbiBcXHRrZnJlZSh2bmlub2RlKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpO1xcbitcXG4gc3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbiBcXHRcXHRcXHQgc3RydWN0IHZ4bGFuX3ZuaV9ncm91cCAqdmcsXFxuIFxcdFxcdFxcdCB1MzIgdm5pLCB1bmlvbiB2eGxhbl9hZGRyICpncm91cCxcXG5AQCAtNzI1LDYgKzczMCw3IEBAIHN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4ge1xcbiBcXHRzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnZuaW5vZGU7XFxuIFxcdF9fYmUzMiB2ID0gY3B1X3RvX2JlMzIodm5pKTtcXG4rXFx0Ym9vbCBmZGJfY3JlYXRlZCA9IGZhbHNlO1xcbiBcXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcbkBAIC03NTUsMTAgKzc2MSw0NyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuIFxcdFxcdHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZSh2eGxhbiwgdm5pbm9kZSwgZmFsc2UpO1xcbiBcXG4gXFx0ZXJyID0gdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCh2eGxhbiwgdm5pbm9kZSwgZ3JvdXAsIHRydWUsIFxcdTAwMjZjaGFuZ2VkLFxcbi1cXHRcXHRcXHRcXHQgICAgIGV4dGFjayk7XFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmZkYl9jcmVhdGVkLCBleHRhY2spO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl92bmlfZGVsO1xcbiBcXG4gXFx0dnhsYW5fdm5pZmlsdGVyX25vdGlmeSh2eGxhbiwgdm5pbm9kZSwgUlRNX05FV1RVTk5FTCk7XFxuIFxcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl92bmlfZGVsOlxcbitcXHQvKiBVbmRvIG9ubHkgdGhlIGRlZmF1bHQgRkRCIGVudHJ5IHRoaXMgYWRkIGluc3RhbGxlZC4gIEFuIGVudHJ5IHRoYXRcXG4rXFx0ICogd2FzIGFscmVhZHkgdGhlcmUsIHdoZXRoZXIgYWRkZWQgb3V0IG9mIGJhbmQgb3IgYnkgYW5vdGhlciBWTkksIGlzXFxuK1xcdCAqIGxlZnQgYWxvbmUuXFxuK1xcdCAqXFxuK1xcdCAqIE5vIG1lbWJlcnNoaXAgaGFzIHRvIGJlIGdpdmVuIGJhY2s6IHZ4bGFuX2lnbXBfbGVhdmUoKSBpcyBnYXRlZCBvblxcbitcXHQgKiB2eGxhbl9hZGRyX211bHRpY2FzdChcXHUwMDI2b2xkX3JlbW90ZV9pcCksIGFuZCBvbGRfcmVtb3RlX2lwIGlzIGEgY29weVxcbitcXHQgKiBvZiB0aGUgcmVtb3RlIElQIG9mIGEgbm9kZSB0aGlzIGFkZCBqdXN0IGFsbG9jYXRlZCwgc28gaXQgaXMgemVyby5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGFkZHJlc3MgcGlja2VkIGJlbG93IGlzIHRoZSBvbmUgdGhlIGVudHJ5IHdhcyBpbnN0YWxsZWRcXG4rXFx0ICogYWdhaW5zdC4gIElmIHRoZSByZXF1ZXN0IGNhcnJpZWQgYSBncm91cCwgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpXFxuK1xcdCAqIGNvcGllZCBpdCBpbnRvIHZuaW5vZGUtXFx1MDAzZXJlbW90ZV9pcCBiZWZvcmUgdGhlIGpvaW4gY291bGQgZmFpbDsgaWZcXG4rXFx0ICogaXQgZGlkIG5vdCwgdGhhdCBjb3B5IHdhcyBza2lwcGVkIGFuZCB0aGUgZW50cnkgd2VudCB0byB0aGUgZGV2aWNlXFxuK1xcdCAqIGRlZmF1bHQuXFxuK1xcdCAqL1xcbitcXHRpZiAoZmRiX2NyZWF0ZWQpIHtcXG4rXFx0XFx0dW5pb24gdnhsYW5fYWRkciAqcmlwID0gdnhsYW5fYWRkcl9hbnkoXFx1MDAyNnZuaW5vZGUtXFx1MDAzZXJlbW90ZV9pcCkgP1xcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dnhsYW4tXFx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pcCA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdTAwMjZ2bmlub2RlLVxcdTAwM2VyZW1vdGVfaXA7XFxuK1xcbitcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZ4bGFuLVxcdTAwM2VoYXNoX2xvY2spO1xcbitcXHRcXHRfX3Z4bGFuX2ZkYl9kZWxldGUodnhsYW4sIGFsbF96ZXJvc19tYWMsICpyaXAsXFxuK1xcdFxcdFxcdFxcdCAgIHZ4bGFuLVxcdTAwM2VjZmcuZHN0X3BvcnQsIHZuaW5vZGUtXFx1MDAzZXZuaSxcXG4rXFx0XFx0XFx0XFx0ICAgdm5pbm9kZS1cXHUwMDNldm5pLFxcbitcXHRcXHRcXHRcXHQgICB2eGxhbi1cXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX2lmaW5kZXgsIHRydWUpO1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dnhsYW4tXFx1MDAzZWhhc2hfbG9jayk7XFxuK1xcdH1cXG4rXFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2dmctXFx1MDAzZXZuaV9oYXNoLCBcXHUwMDI2dm5pbm9kZS1cXHUwMDNldm5vZGUsXFxuK1xcdFxcdFxcdCAgICAgICB2eGxhbl92bmlfcmh0X3BhcmFtcyk7XFxuK1xcdF9fdnhsYW5fdm5pX2RlbF9saXN0KHZnLCB2bmlub2RlKTtcXG4rXFx0aWYgKHZ4bGFuLVxcdTAwM2VkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKVxcbitcXHRcXHR2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGUodnhsYW4sIHZuaW5vZGUsIHRydWUpO1xcbitcXHRjYWxsX3JjdShcXHUwMDI2dm5pbm9kZS1cXHUwMDNlcmN1LCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjQ5OjU1Ljc1NjczNTU4NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTI1OTYzODcwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlhMQU5cIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2eGxhbl92bmlfYWRkXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZVwiLFxuICAgIFwidnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVlhMQU4gZHJpdmVyIChyZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBydG5ldGxpbmsgY29tbWFuZHMgc3VjaCBhcyBSVE1fTkVXVFVOTkVMIGFuZCBSVE1fTkVXTkVJR0gpLiBJdCB1cGRhdGVzIHRoZSBGREIgdXBkYXRlIGxvZ2ljIGFjcm9zcyB2eGxhbl9mZGJfdXBkYXRlKCksIHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKCksIGFuZCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKCkgdG8gdHJhY2sgd2hlbiBhbiBlbnRyeSBpcyBuZXdseSBjcmVhdGVkLCBhbmQgaW1wbGVtZW50cyBhbiBlcnJvciByb2xsYmFjayBwYXRoIGluIHZ4bGFuX3ZuaV9hZGQoKSB0aGF0IHRlYXJzIGRvd24gRkRCIGVudHJpZXMsIHVubGlua3MgVk5JIG5vZGVzLCBhbmQgZnJlZXMgbWVtb3J5IHZpYSBSQ1UgaWYgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpIGZhaWxzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIGFsdGVyaW5nIHN0YXRlIG1hbmFnZW1lbnQsIHN5bmNocm9uaXphdGlvbiwgYW5kIGVycm9yLWhhbmRsaW5nIGluIHRoZSB2aXJ0dWFsIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBtYWtpbmcgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3Y2I5NzFmZTU1YWQ1YzkxOGNjYzk5YWI1Mjg0NDk1ODg1ZWM5NWJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMjI6NDk6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcbmluZGV4IGJlOTVhZjY0YTFmNTEuLjA2NTJkYzQ3MWRjYTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1xuQEAgLTk3NCw3ICs5NzQsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdFx0XHQgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgdm5pLFxuIFx0XHRcdFx0ICAgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB2eGxhbl9mZGIgKmYsIHUzMiBuaGlkLFxuLVx0XHRcdFx0ICAgICBib29sIHN3ZGV2X25vdGlmeSxcbitcdFx0XHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRfX3UxNiBmZGJfZmxhZ3MgPSAobmRtX2ZsYWdzIFx1MDAyNiB+TlRGX1VTRSk7XG5AQCAtMTA0Miw2ICsxMDQyLDggQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFxuIFx0XHRpZiAocmMgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHRpZiAocmMgXHUwMDI2XHUwMDI2IGNyZWF0ZWQpXG4rXHRcdFx0KmNyZWF0ZWQgPSB0cnVlO1xuIFx0XHRub3RpZnkgfD0gcmM7XG4gXHR9XG4gXG5AQCAtMTA3OCw3ICsxMDgwLDcgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0XHRcdCAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncyxcbiBcdFx0XHRcdCAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSxcbiBcdFx0XHRcdCAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsXG4tXHRcdFx0XHQgICBib29sIHN3ZGV2X25vdGlmeSxcbitcdFx0XHRcdCAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdF9fdTE2IGZkYl9mbGFncyA9IChuZG1fZmxhZ3MgXHUwMDI2IH5OVEZfVVNFKTtcbkBAIC0xMTAxLDYgKzExMDMsOSBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0aWYgKHJjKVxuIFx0XHRnb3RvIGVycl9ub3RpZnk7XG4gXG4rXHRpZiAoY3JlYXRlZClcbitcdFx0KmNyZWF0ZWQgPSB0cnVlO1xuK1xuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX25vdGlmeTpcbkBAIC0xMTE0LDcgKzExMTksNyBAQCBpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0ICAgICBfX3UxNiBzdGF0ZSwgX191MTYgZmxhZ3MsXG4gXHRcdCAgICAgX19iZTE2IHBvcnQsIF9fYmUzMiBzcmNfdm5pLCBfX2JlMzIgdm5pLFxuIFx0XHQgICAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsXG4tXHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksXG4rXHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXG4gXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCB2eGxhbl9mZGIgKmY7XG5AQCAtMTEyOSw3ICsxMTM0LDggQEAgaW50IHZ4bGFuX2ZkYl91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXG4gXHRcdHJldHVybiB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHZ4bGFuLCBpcCwgc3RhdGUsIGZsYWdzLCBwb3J0LFxuIFx0XHRcdFx0XHRcdCB2bmksIGlmaW5kZXgsIG5kbV9mbGFncywgZixcbi1cdFx0XHRcdFx0XHQgbmhpZCwgc3dkZXZfbm90aWZ5LCBleHRhY2spO1xuK1x0XHRcdFx0XHRcdCBuaGlkLCBzd2Rldl9ub3RpZnksIGNyZWF0ZWQsXG4rXHRcdFx0XHRcdFx0IGV4dGFjayk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAoIShmbGFncyBcdTAwMjYgTkxNX0ZfQ1JFQVRFKSlcbiBcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbkBAIC0xMTM3LDcgKzExNDMsNyBAQCBpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0cmV0dXJuIHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHZ4bGFuLCBtYWMsIGlwLCBzdGF0ZSwgZmxhZ3MsXG4gXHRcdFx0XHRcdCAgICAgICBwb3J0LCBzcmNfdm5pLCB2bmksIGlmaW5kZXgsXG4gXHRcdFx0XHRcdCAgICAgICBuZG1fZmxhZ3MsIG5oaWQsIHN3ZGV2X25vdGlmeSxcbi1cdFx0XHRcdFx0ICAgICAgIGV4dGFjayk7XG4rXHRcdFx0XHRcdCAgICAgICBjcmVhdGVkLCBleHRhY2spO1xuIFx0fVxuIH1cbiBcbkBAIC0xMjc1LDcgKzEyODEsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRlcnIgPSB2eGxhbl9mZGJfdXBkYXRlKHZ4bGFuLCBhZGRyLCBcdTAwMjZpcCwgbmRtLVx1MDAzZW5kbV9zdGF0ZSwgZmxhZ3MsXG4gXHRcdFx0ICAgICAgIHBvcnQsIHNyY192bmksIHZuaSwgaWZpbmRleCxcbiBcdFx0XHQgICAgICAgbmRtLVx1MDAzZW5kbV9mbGFncyB8IE5URl9WWExBTl9BRERFRF9CWV9VU0VSLFxuLVx0XHRcdCAgICAgICBuaGlkLCB0cnVlLCBleHRhY2spO1xuK1x0XHRcdCAgICAgICBuaGlkLCB0cnVlLCBOVUxMLCBleHRhY2spO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbiBcbiBcdGlmICghZXJyKVxuQEAgLTE0OTEsNyArMTQ5Nyw4IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB2eGxhbl9zbm9vcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0XHQgdnhsYW4tXHUwMDNlY2ZnLmRzdF9wb3J0LFxuIFx0XHRcdFx0XHQgdm5pLFxuIFx0XHRcdFx0XHQgdnhsYW4tXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX3ZuaSxcbi1cdFx0XHRcdFx0IGlmaW5kZXgsIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMKTtcbitcdFx0XHRcdFx0IGlmaW5kZXgsIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMLFxuK1x0XHRcdFx0XHQgTlVMTCk7XG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4gXHR9XG4gXG5AQCAtNDAzNCw3ICs0MDQxLDggQEAgc3RhdGljIGludCB2eGxhbl9kZXZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgICAgICBkc3QtXHUwMDNlcmVtb3RlX3ZuaSxcbiBcdFx0XHRcdCAgICAgICBkc3QtXHUwMDNlcmVtb3RlX3ZuaSxcbiBcdFx0XHRcdCAgICAgICBkc3QtXHUwMDNlcmVtb3RlX2lmaW5kZXgsXG4tXHRcdFx0XHQgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIGV4dGFjayk7XG4rXHRcdFx0XHQgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIE5VTEwsXG4rXHRcdFx0XHQgICAgICAgZXh0YWNrKTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIHVubGluaztcbkBAIC00NDg1LDcgKzQ0OTMsOCBAQCBzdGF0aWMgaW50IHZ4bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdFx0XHRcdFx0ICAgICAgIHZ4bGFuLVx1MDAzZWNmZy5kc3RfcG9ydCxcbiBcdFx0XHRcdFx0ICAgICAgIGNvbmYudm5pLCBjb25mLnZuaSxcbiBcdFx0XHRcdFx0ICAgICAgIGNvbmYucmVtb3RlX2lmaW5kZXgsXG4tXHRcdFx0XHRcdCAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgZXh0YWNrKTtcbitcdFx0XHRcdFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMLFxuK1x0XHRcdFx0XHQgICAgICAgZXh0YWNrKTtcbiBcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ2eGxhbi1cdTAwM2VoYXNoX2xvY2spO1xuIFx0XHRcdFx0bmV0ZGV2X2FkamFjZW50X2NoYW5nZV9hYm9ydChkc3QtXHUwMDNlcmVtb3RlX2RldixcbkBAIC00ODA2LDcgKzQ4MTUsNyBAQCB2eGxhbl9mZGJfZXh0ZXJuYWxfbGVhcm5fYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0ICAgICAgIGZkYl9pbmZvLVx1MDAzZXJlbW90ZV92bmksXG4gXHRcdFx0ICAgICAgIGZkYl9pbmZvLVx1MDAzZXJlbW90ZV9pZmluZGV4LFxuIFx0XHRcdCAgICAgICBOVEZfVVNFIHwgTlRGX1NFTEYgfCBOVEZfRVhUX0xFQVJORUQsXG4tXHRcdFx0ICAgICAgIDAsIGZhbHNlLCBleHRhY2spO1xuK1x0XHRcdCAgICAgICAwLCBmYWxzZSwgTlVMTCwgZXh0YWNrKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaCBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaFxuaW5kZXggYjFlZWMyMjE2MzYwOC4uZTUyNzU1OTIzYzMxMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaFxuKysrIGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oXG5AQCAtMTkzLDcgKzE5Myw4IEBAIGludCB2eGxhbl9mZGJfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0XHQgICAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncyxcbiBcdFx0ICAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHNyY192bmksIF9fYmUzMiB2bmksXG4gXHRcdCAgICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLCB1MzIgbmhpZCxcbi1cdFx0ICAgICBib29sIHN3ZGV2X25vdGlmeSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbitcdFx0ICAgICBib29sIHN3ZGV2X25vdGlmeSwgYm9vbCAqY3JlYXRlZCxcbitcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIHZvaWQgdnhsYW5feG1pdF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgIF9fYmUzMiBkZWZhdWx0X3ZuaSwgc3RydWN0IHZ4bGFuX3Jkc3QgKnJkc3QsIGJvb2wgZGlkX3JzYyk7XG4gaW50IHZ4bGFuX3ZuaV9pbl91c2Uoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY1xuaW5kZXggZGQ5NDA4NWUwODg2NS4uOWNjOTMyYzYxNzdkMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jXG4rKysgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY1xuQEAgLTQ3Myw2ICs0NzMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdm5pX2ZpbHRlcl9wb2xpY3lbVlhMQU5fVk5JRklMVEVSX01BWCArIDFdID0ge1xuIHN0YXRpYyBpbnQgdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBfX2JlMzIgdm5pLFxuIFx0XHRcdFx0XHQgIHVuaW9uIHZ4bGFuX2FkZHIgKm9sZF9yZW1vdGVfaXAsXG4gXHRcdFx0XHRcdCAgdW5pb24gdnhsYW5fYWRkciAqcmVtb3RlX2lwLFxuK1x0XHRcdFx0XHQgIGJvb2wgKmZkYl9jcmVhdGVkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgdnhsYW5fcmRzdCAqZHN0ID0gXHUwMDI2dnhsYW4tXHUwMDNlZGVmYXVsdF9kc3Q7XG5AQCAtNDg4LDcgKzQ4OSw4IEBAIHN0YXRpYyBpbnQgdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBfX2JlMzIgdm5pLFxuIFx0XHRcdFx0ICAgICAgIHZuaSxcbiBcdFx0XHRcdCAgICAgICB2bmksXG4gXHRcdFx0XHQgICAgICAgZHN0LVx1MDAzZXJlbW90ZV9pZmluZGV4LFxuLVx0XHRcdFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBleHRhY2spO1xuK1x0XHRcdFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBmZGJfY3JlYXRlZCxcbitcdFx0XHRcdCAgICAgICBleHRhY2spO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbiBcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTUxMiw2ICs1MTQsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdFx0XHQgIHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSxcbiBcdFx0XHRcdCAgdW5pb24gdnhsYW5fYWRkciAqZ3JvdXAsXG4gXHRcdFx0XHQgIGJvb2wgY3JlYXRlLCBib29sICpjaGFuZ2VkLFxuK1x0XHRcdFx0ICBib29sICpmZGJfY3JlYXRlZCxcbiBcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCB2eGxhbl9uZXQgKnZuID0gbmV0X2dlbmVyaWModnhsYW4tXHUwMDNlbmV0LCB2eGxhbl9uZXRfaWQpO1xuQEAgLTU0NSw3ICs1NDgsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0ID0gdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHZ4bGFuLCB2bmlub2RlLVx1MDAzZXZuaSxcbi1cdFx0XHRcdFx0ICAgICBvbGRyaXAsIG5ld3JpcCxcbitcdFx0XHRcdFx0ICAgICBvbGRyaXAsIG5ld3JpcCwgZmRiX2NyZWF0ZWQsXG4gXHRcdFx0XHRcdCAgICAgZXh0YWNrKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTU5OSw3ICs2MDIsNyBAQCBpbnQgdnhsYW5fdm5pbGlzdF91cGRhdGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdFx0cmV0ID0gdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHZ4bGFuLCB2ZW50LVx1MDAzZXZuaSxcbiBcdFx0XHRcdFx0XHRcdCAgICAgb2xkX3JlbW90ZV9pcCxcbiBcdFx0XHRcdFx0XHRcdCAgICAgbmV3X3JlbW90ZV9pcCxcbi1cdFx0XHRcdFx0XHRcdCAgICAgZXh0YWNrKTtcbitcdFx0XHRcdFx0XHRcdCAgICAgTlVMTCwgZXh0YWNrKTtcbiBcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuQEAgLTY1NSw3ICs2NTgsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0ID0gdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCh2eGxhbiwgdm5pbm9kZSwgZ3JvdXAsIGZhbHNlLCBjaGFuZ2VkLFxuLVx0XHRcdFx0ICAgICBleHRhY2spO1xuK1x0XHRcdFx0ICAgICBOVUxMLCBleHRhY2spO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC03MTgsNiArNzIxLDggQEAgc3RhdGljIHZvaWQgdnhsYW5fdm5pX2ZyZWUoc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlKVxuIFx0a2ZyZWUodm5pbm9kZSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KTtcbitcbiBzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdFx0IHN0cnVjdCB2eGxhbl92bmlfZ3JvdXAgKnZnLFxuIFx0XHRcdCB1MzIgdm5pLCB1bmlvbiB2eGxhbl9hZGRyICpncm91cCxcbkBAIC03MjUsNiArNzMwLDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIHtcbiBcdHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZTtcbiBcdF9fYmUzMiB2ID0gY3B1X3RvX2JlMzIodm5pKTtcbitcdGJvb2wgZmRiX2NyZWF0ZWQgPSBmYWxzZTtcbiBcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuIFx0aW50IGVyciA9IDA7XG4gXG5AQCAtNzU1LDEwICs3NjEsNDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0XHR2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGUodnhsYW4sIHZuaW5vZGUsIGZhbHNlKTtcbiBcbiBcdGVyciA9IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAodnhsYW4sIHZuaW5vZGUsIGdyb3VwLCB0cnVlLCBcdTAwMjZjaGFuZ2VkLFxuLVx0XHRcdFx0ICAgICBleHRhY2spO1xuK1x0XHRcdFx0ICAgICBcdTAwMjZmZGJfY3JlYXRlZCwgZXh0YWNrKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX3ZuaV9kZWw7XG4gXG4gXHR2eGxhbl92bmlmaWx0ZXJfbm90aWZ5KHZ4bGFuLCB2bmlub2RlLCBSVE1fTkVXVFVOTkVMKTtcbiBcbitcdHJldHVybiAwO1xuK1xuK2Vycl92bmlfZGVsOlxuK1x0LyogVW5kbyBvbmx5IHRoZSBkZWZhdWx0IEZEQiBlbnRyeSB0aGlzIGFkZCBpbnN0YWxsZWQuICBBbiBlbnRyeSB0aGF0XG4rXHQgKiB3YXMgYWxyZWFkeSB0aGVyZSwgd2hldGhlciBhZGRlZCBvdXQgb2YgYmFuZCBvciBieSBhbm90aGVyIFZOSSwgaXNcbitcdCAqIGxlZnQgYWxvbmUuXG4rXHQgKlxuK1x0ICogTm8gbWVtYmVyc2hpcCBoYXMgdG8gYmUgZ2l2ZW4gYmFjazogdnhsYW5faWdtcF9sZWF2ZSgpIGlzIGdhdGVkIG9uXG4rXHQgKiB2eGxhbl9hZGRyX211bHRpY2FzdChcdTAwMjZvbGRfcmVtb3RlX2lwKSwgYW5kIG9sZF9yZW1vdGVfaXAgaXMgYSBjb3B5XG4rXHQgKiBvZiB0aGUgcmVtb3RlIElQIG9mIGEgbm9kZSB0aGlzIGFkZCBqdXN0IGFsbG9jYXRlZCwgc28gaXQgaXMgemVyby5cbitcdCAqXG4rXHQgKiBUaGUgYWRkcmVzcyBwaWNrZWQgYmVsb3cgaXMgdGhlIG9uZSB0aGUgZW50cnkgd2FzIGluc3RhbGxlZFxuK1x0ICogYWdhaW5zdC4gIElmIHRoZSByZXF1ZXN0IGNhcnJpZWQgYSBncm91cCwgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpXG4rXHQgKiBjb3BpZWQgaXQgaW50byB2bmlub2RlLVx1MDAzZXJlbW90ZV9pcCBiZWZvcmUgdGhlIGpvaW4gY291bGQgZmFpbDsgaWZcbitcdCAqIGl0IGRpZCBub3QsIHRoYXQgY29weSB3YXMgc2tpcHBlZCBhbmQgdGhlIGVudHJ5IHdlbnQgdG8gdGhlIGRldmljZVxuK1x0ICogZGVmYXVsdC5cbitcdCAqL1xuK1x0aWYgKGZkYl9jcmVhdGVkKSB7XG4rXHRcdHVuaW9uIHZ4bGFuX2FkZHIgKnJpcCA9IHZ4bGFuX2FkZHJfYW55KFx1MDAyNnZuaW5vZGUtXHUwMDNlcmVtb3RlX2lwKSA/XG4rXHRcdFx0XHRcdFx1MDAyNnZ4bGFuLVx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pcCA6XG4rXHRcdFx0XHRcdFx1MDAyNnZuaW5vZGUtXHUwMDNlcmVtb3RlX2lwO1xuK1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbitcdFx0X192eGxhbl9mZGJfZGVsZXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLCAqcmlwLFxuK1x0XHRcdFx0ICAgdnhsYW4tXHUwMDNlY2ZnLmRzdF9wb3J0LCB2bmlub2RlLVx1MDAzZXZuaSxcbitcdFx0XHRcdCAgIHZuaW5vZGUtXHUwMDNldm5pLFxuK1x0XHRcdFx0ICAgdnhsYW4tXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX2lmaW5kZXgsIHRydWUpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ2eGxhbi1cdTAwM2VoYXNoX2xvY2spO1xuK1x0fVxuK1x0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcdTAwMjZ2Zy1cdTAwM2V2bmlfaGFzaCwgXHUwMDI2dm5pbm9kZS1cdTAwM2V2bm9kZSxcbitcdFx0XHQgICAgICAgdnhsYW5fdm5pX3JodF9wYXJhbXMpO1xuK1x0X192eGxhbl92bmlfZGVsX2xpc3QodmcsIHZuaW5vZGUpO1xuK1x0aWYgKHZ4bGFuLVx1MDAzZWRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKVxuK1x0XHR2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGUodnhsYW4sIHZuaW5vZGUsIHRydWUpO1xuK1x0Y2FsbF9yY3UoXHUwMDI2dm5pbm9kZS1cdTAwM2VyY3UsIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NDk6NTUuNzU2NzQxOTc0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTQ4NzE4Mzk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBWWExBTiBQYXRjaCBmb3IgRnV6emluZyB3aXRoIFN5emthbGxlcioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBiYXNlZCBvbiBhIHF1aWNrIHNjYW4sIHRoYXQgdGhpcyBwYXRjaCAqY291bGQqIGJlIGZydWl0ZnVsIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaGUgVlhMQU4gZHJpdmVyIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggaXMgYSBodWdlIHBsdXMuIFdlIGNhbiB0cmlnZ2VyIGl0IHRocm91Z2ggbmV0bGluaywgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCB0YXJnZXQsIG9yIGV2ZW4ganVzdCBuZXR3b3JrIHRyYWZmaWMuXG5cbk15IGZpcnN0IGNoZWNrcG9pbnQgaXMgcmVhY2hhYmlsaXR5LCBhbmQgVlhMQU4gcGFzc2VzIHdpdGggZmx5aW5nIGNvbG9ycyBkdWUgdG8gaXRzIG5ldGxpbmsgYW5kIG5ldHdvcmsgdHJhZmZpYyBpbnRlcmFjdGlvbi5cblxuTm93LCB0aGUgY29yZSBvZiB0aGUgbWF0dGVyOiB3aGF0IGRvZXMgdGhlIHBhdGNoICpkbyo/IEl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCwgYHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlYCwgYHZ4bGFuX2ZkYl91cGRhdGVgLCBhbmQgYHZ4bGFuX3ZuaV9hZGRgLiBUaGlzIHNjcmVhbXMgXCJwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIHN0YXRlIHRyYW5zaXRpb25zIGFuZCBlcnJvciBjb25kaXRpb25zLFwiIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50IGZvciBmdXp6aW5nISBUaGUgYWRkaXRpb24gb2YgdGhlIGBlcnJfdm5pX2RlbGAgY2xlYW51cCBwYXRoIGluIGB2eGxhbl92bmlfYWRkYCwgd2l0aCB0aGUgcm9sbGJhY2sgbG9naWMgZm9yIEZEQiBlbnRyaWVzIGFuZCBWTkkgbm9kZXMgaWYgYHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXBgIGZhaWxzLCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZS4gVGhpcyBpcyBhIGNsYXNzaWMgXCJlcnJvciBoYW5kbGluZyB0aGF0J3MgbGlrZWx5IHRvIGhhdmUgYnVnc1wiIHNjZW5hcmlvLiBUaGUgbmV3IGBib29sICpjcmVhdGVkYCBwYXJhbWV0ZXIgaW4gdGhlIGB2eGxhbl9mZGJfdXBkYXRlKmAgZnVuY3Rpb25zLCBkaXJlY3RseSBpbXBhY3RpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQsIGlzIGFsc28gYSByZWQgZmxhZyBpbiBhIGdvb2Qgd2F5LiBJdCBpbmRpY2F0ZXMgZGVsaWNhdGUgY2hhbmdlcyB0byB0aGUgZHJpdmVyJ3MgaW50ZXJuYWwgc3RhdGUgbWFjaGluZS5cblxuTW9kaWZpZWQgZmlsZXMgaW5jbHVkZSBgdnhsYW5fY29yZS5jYCwgYHZ4bGFuX3ByaXZhdGUuaGAsIGFuZCBgdnhsYW5fdm5pZmlsdGVyLmNgLCB3aGljaCBjb25maXJtcyB3ZSBhcmUgaW4gdGhlIGNvcmUgb2YgdGhlIGRyaXZlciwgc28gaXQgaXMgaGlnaCB2YWx1ZS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgbW9yZSB0aG9yb3VnaGx5LiBJJ2xsIG5lZWQgdG8gZG8gc29tZSBgZ3JlcGBzIHRvIGZpbmQgYWxsIHRoZSBjYWxsZXJzIG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYW5kIGFzc2VzcyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgdGhlc2UgY2hhbmdlcyBhcmUgaW50ZWdyYXRlZCwgYW5kIGdpdmUgdGhlIGFiaWxpdHkgdG8gdGVzdCBldmVyeSBmdW5jdGlvbiBwYXRoLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gYnVpbGQgYSBzdHJvbmdlciBjYXNlIGZvciB3aHkgdGhpcyBwYXRjaCBpcyB3b3J0aCB0aGUgZWZmb3J0IHRvIGZ1enouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NTEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDowMS4yNDM5Mjg3MzFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxMTgxMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1ZYTEFOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL01ha2VmaWxlLTQtXFxuZHJpdmVycy9uZXQvdnhsYW4vTWFrZWZpbGU6NTpvYmotJChDT05GSUdfVlhMQU4pICs9IHZ4bGFuLm9cXG5kcml2ZXJzL25ldC92eGxhbi9NYWtlZmlsZS02LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDowMS4yOTMwNDk1MDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDQ3OTg3NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFZYTEFOIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfVlhMQU5gLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IHRoZSBvbmVzIGluIHRoZSBgZHJpdmVycy9uZXQvYCBkaXJlY3RvcnkuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZXNlIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGxvY2F0aW9uIHRvIGJlIGNlcnRhaW4sIHRob3VnaC4gRmluZGluZyB0aGUgZXhhY3QgbG9jYXRpb24gd2hlcmUgYENPTkZJR19WWExBTmAgaXMgZGVjbGFyZWQgaXMgdGhlIGtleS4gT25jZSBJIGtub3cgd2hlcmUgaXQgbGl2ZXMsIEkgY2FuIHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgbWVhbnMgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugb3RoZXIgYENPTkZJR19gIG9wdGlvbnMgdGhhdCBpdCByZXF1aXJlcywgYW55IGFyY2hpdGVjdHVyYWwgY29uc3RyYWludHMsIGFuZCBwZXJoYXBzIGV2ZW4ga2VybmVsIG1vZHVsZXMgdGhhdCBpdCBwdWxscyBpbi4gS25vd2luZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGltcGFjdCBvbiB0aGUgc3lzdGVtLCB3aGV0aGVyIGl0J3MgcmVsYXRlZCB0byBhIHNwZWNpZmljIGhhcmR3YXJlLCBvciBhbm90aGVyIGRyaXZlciBpdCdzIHJlbGlhbnQgb24gdG8gZnVuY3Rpb24uIEknbGwgbmVlZCB0byBpZGVudGlmeSB0aGUgcHJlY29uZGl0aW9ucyBmb3IgZW5hYmxpbmcgVlhMQU4gcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MjgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDowMy4zNDEwNDAwMThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwOTk1NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWWExBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTIxNj1jb25maWcgSVBWVEFQXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTIyOS1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjIzMDpjb25maWcgVlhMQU5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzMS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBlWHRlbnNpYmxlIExvY2FsIEFyZWEgTmV0d29yayAoVlhMQU4pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDowMy40OTIwNDEwMTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTQ4MTgwNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQgc3VpdGFibGUgZm9yIGEgbmV0d29ya2luZyBleHBlcnQgbGlrZSBteXNlbGY6XG5cbioqRGl2aW5nIGludG8gdGhlIFZYTEFOIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTGV0J3MgZGlnIGludG8gdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGVudHJ5IGZvciBWWExBTiwgbG9jYXRlZCBpbiB0aGUgYGRyaXZlcnMvbmV0YCBkaXJlY3RvcnkuIEknbSBrZWVuIHRvIHNlZSBob3cgdGhpcyBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGJ1aWxkIG9wdGlvbnMuIElzIGl0IGFuIE0gbW9kdWxlLCBidWlsdC1pbiwgb3IgcGVyaGFwcyBvbmx5IGVuYWJsZWQgd2l0aCBhbm90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBXaGF0IGZlYXR1cmVzIGFyZSBzZWxlY3RpdmVseSBlbmFibGVkIG9yIGRpc2FibGVkPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUgVlhMQU4gZHJpdmVyIGludGVncmF0ZXMgd2l0aCB0aGUgYnJvYWRlciBuZXR3b3JraW5nIHN0YWNrIOKAkyBhcmUgdGhlcmUgc3BlY2lmaWMgaGFyZHdhcmUgZGVwZW5kZW5jaWVzPyBXaGF0IHVzZXIgc3BhY2UgdG9vbHMgYXJlIHJlcXVpcmVkLCBhbmQgYXJlIHRoZXkgcmVmbGVjdGVkIGluIHRoZSBjb25maWd1cmF0aW9uPyBJJ2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBhbnkgaGludHMgb24gaG93IHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIG9mZmxvYWQgb3IgYWNjZWxlcmF0ZWQgZmVhdHVyZXMuIFRoaXMgS2NvbmZpZyBlbnRyeSBpcyB0aGUgYmx1ZXByaW50LCB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWxseSBjb21wcmVoZW5kaW5nIGhvdyBWWExBTiBpcyBicm91Z2h0IHRvIGxpZmUgd2l0aGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgbXkgY2hhbmNlIHRvIHNlZSBpZiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIGNvbXBsZXRlLCBvciBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbiB0aGUgY29kZSBmb3Igc3BlY2lmaWMgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA3MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUwOjA1LjY0MDIyNTMwMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjI4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjI4OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgaXB2dGFwLlxcbiAyMjk6XFx0XFxuIDIzMDpcXHRjb25maWcgVlhMQU5cXG4gMjMxOlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIGVYdGVuc2libGUgTG9jYWwgQXJlYSBOZXR3b3JrIChWWExBTilcXFwiXFxuIDIzMjpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gMjMzOlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAyMzQ6XFx0XFx0c2VsZWN0IEdST19DRUxMU1xcbiAyMzU6XFx0XFx0aGVscFxcbiAyMzY6XFx0XFx0ICBUaGlzIGFsbG93cyBvbmUgdG8gY3JlYXRlIHZ4bGFuIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGVcXG4gMjM3OlxcdFxcdCAgTGF5ZXIgMiBOZXR3b3JrcyBvdmVyIExheWVyIDMgTmV0d29ya3MuIFZYTEFOIGlzIG9mdGVuIHVzZWRcXG4gMjM4OlxcdFxcdCAgdG8gdHVubmVsIHZpcnR1YWwgbmV0d29yayBpbmZyYXN0cnVjdHVyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXFxuIDIzOTpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTpcXG4gMjQwOlxcdFxcdCAgICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1tYWhhbGluZ2FtLWR1dHQtZGNvcHMtdnhsYW4tMDJcXG4gMjQxOlxcdFxcbiAyNDI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDI0MzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHZ4bGFuLlxcbiAyNDQ6XFx0XFxuIDI0NTpcXHRjb25maWcgR0VORVZFXFxuIDI0NjpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBOZXR3b3JrIFZpcnR1YWxpemF0aW9uIEVuY2Fwc3VsYXRpb25cXFwiXFxuIDI0NzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6MDUuNjQwMjk4NjUxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU3MzcwMDUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKlZYTEFOIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBWWExBTi4uLiBJdCBmdW5kYW1lbnRhbGx5IHJlbGllcyBvbiBJTkVULCB3aGljaCBpcyBoYXJkbHkgc3VycHJpc2luZy4gQnV0IEkgbmVlZCB0byBiZSBtb3JlIHRob3JvdWdoIGhlcmUsIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBkZXBlbmRlbmNpZXMgb3IgYWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIEknbSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBgZHJpdmVycy9uZXQvdnhsYW4vYCBkaXJlY3RvcnkuXG5cblRoZSBxdWVzdGlvbiB0aGF0IEkgYW0gYXNraW5nIGlzOiBpcyB0aGVyZSBhbnl0aGluZyBlbHNlIHRoYXQgcGVydGFpbnMgdG8gYHZuaWZpbHRlcmAgb3IgYW55IG90aGVyIGNvbXBvbmVudHMgaW4gdGhhdCBWWExBTiBpbXBsZW1lbnRhdGlvbj9cblxuTXkgYmVzdCBzdGFydGluZyBwb2ludCB3b3VsZCBiZSB0aGUgYE1ha2VmaWxlYCBpbiBgZHJpdmVycy9uZXQvdnhsYW4vYC4gTGV0J3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHdoYXQgaXQgcmV2ZWFscyBhYm91dCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBjb21wb25lbnQgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2ODksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUwOjA4LjIxNDAwMTc5N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC92eGxhbi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCNcXG4gICAyOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSB2eGxhbiBkcml2ZXJcXG4gICAzOlxcdCNcXG4gICA0OlxcdFxcbiAgIDU6XFx0b2JqLSQoQ09ORklHX1ZYTEFOKSArPSB2eGxhbi5vXFxuICAgNjpcXHRcXG4gICA3OlxcdHZ4bGFuLW9ianMgOj0gdnhsYW5fY29yZS5vIHZ4bGFuX211bHRpY2FzdC5vIHZ4bGFuX3ZuaWZpbHRlci5vIHZ4bGFuX21kYi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUwOjA4LjIxNDA2ODU3N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDUyMTUyODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWWExBTiBGREIgVXBkYXRlcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIFZYTEFOIGNvZGUsIGFuZCBmaXJzdCB0aGluZydzIGZpcnN0LCBJIHNlZSB0aGUgY29yZSBvYmplY3RzIGFyZSBkZWZpbmVkLiBFdmVyeXRoaW5nIGhpbmdlcyBvbiBgQ09ORklHX1ZYTEFOYCwgb2J2aW91c2x5LiBOb3csIEkgd2FudCB0byBzZWUgaG93IHRoaXMgcmVjZW50IGNoYW5nZSBpcyBhZmZlY3RpbmcgZnVuY3Rpb24gY2FsbHMuXG5cbkxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY2AsIEkgc2VlIGEgcHJldHR5IHBlcnZhc2l2ZSBwYXR0ZXJuLiBGdW5jdGlvbnMgbGlrZSBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AsIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZWAsIGFuZCBgdnhsYW5fZmRiX3VwZGF0ZWAgaXRzZWxmIGhhdmUgYWxsIGJlZW4gbW9kaWZpZWQsIGFuZCBhIGBjcmVhdGVkYCBwYXJhbWV0ZXIgaGFzIGJlZW4gYWRkZWQuIE1ha2VzIHNlbnNlLiBCdXQgaXQncyBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoaXMgY2hhbmdlIHJpcHBsZXMgdGhyb3VnaC4gRnVuY3Rpb25zIGxpa2UgYHZ4bGFuX2ZkYl9hZGRgLCBgdnhsYW5fc25vb3BgLCBgdnhsYW5fZGV2X2NyZWF0ZWAsIGB2eGxhbl9jaGFuZ2VsaW5rYCwgYW5kIGB2eGxhbl9mZGJfZXh0ZXJuYWxfbGVhcm5fYWRkYCAqYWxsKiBjYWxsIGB2eGxhbl9mZGJfdXBkYXRlYCwgYnV0IHBhc3MgYSBOVUxMIGZvciB0aGlzIG5ldyBgY3JlYXRlZGAgcGFyYW1ldGVyLiBUaGF0J3Mgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGJlY2F1c2Ugd2hhdCdzIGdvaW5nIHRvIGhhcHBlbiB3aXRoIHRoYXQgTlVMTCB2YWx1ZT9cblxuTW92aW5nIG92ZXIgdG8gYGRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jYCwgdGhlIHBpY3R1cmUgZ2V0cyBhIGJpdCBtb3JlIGNvbXBsZXguIEhlcmUsIGB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnlgIGdldHMgdGhlIGBmZGJfY3JlYXRlZGAgcGFyYW1ldGVyLCBhbmQgc3Vic2VxdWVudGx5IHBhc3NlcyBpdCBkb3duIHRvIGB2eGxhbl9mZGJfdXBkYXRlYC4gU2ltaWxhciB0aGluZyB3aXRoIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYC4gSG93ZXZlciwgYHZ4bGFuX3ZuaWxpc3RfdXBkYXRlX2dyb3VwYCBhbmQgYHZ4bGFuX3ZuaV91cGRhdGVgIHBhc3MgTlVMTCBmb3IgdGhlIGBmZGJfY3JlYXRlZGAgcGFyYW1ldGVyLiBOb3csIEknbSBmb2N1c2luZyBvbiB0aGUgYHZ4bGFuX3ZuaV9hZGRgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0J3MgcGFzc2luZyBgXHUwMDI2ZmRiX2NyZWF0ZWRgIHRvIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYCwgYW5kIHRoZXJlJ3Mgc29tZSBlcnJvciBoYW5kbGluZyBpbiBwbGFjZSwgc3BlY2lmaWNhbGx5IGVycm9yIGhhbmRsaW5nIHdpdGggYGVycl92bmlfZGVsYC4gSSdsbCBoYXZlIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gY2FsbCBhcm91bmQgbGluZXMgNzEwLTc3MCBpbiBgdnhsYW5fdm5pZmlsdGVyLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA1OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUwOjEyLjI2NjIyMzczNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzE1LFxuICBcIkxpbmVDb3VudFwiOiA5NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzE1OlxcdFxcdHJldHVybiB2bmlub2RlO1xcbiA3MTY6XFx0fVxcbiA3MTc6XFx0XFxuIDcxODpcXHRzdGF0aWMgdm9pZCB2eGxhbl92bmlfZnJlZShzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnZuaW5vZGUpXFxuIDcxOTpcXHR7XFxuIDcyMDpcXHRcXHRmcmVlX3BlcmNwdSh2bmlub2RlLVxcdTAwM2VzdGF0cyk7XFxuIDcyMTpcXHRcXHRrZnJlZSh2bmlub2RlKTtcXG4gNzIyOlxcdH1cXG4gNzIzOlxcdFxcbiA3MjQ6XFx0c3RhdGljIHZvaWQgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpO1xcbiA3MjU6XFx0XFxuIDcyNjpcXHRzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuIDcyNzpcXHRcXHRcXHRcXHQgc3RydWN0IHZ4bGFuX3ZuaV9ncm91cCAqdmcsXFxuIDcyODpcXHRcXHRcXHRcXHQgdTMyIHZuaSwgdW5pb24gdnhsYW5fYWRkciAqZ3JvdXAsXFxuIDcyOTpcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA3MzA6XFx0e1xcbiA3MzE6XFx0XFx0c3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlO1xcbiA3MzI6XFx0XFx0X19iZTMyIHYgPSBjcHVfdG9fYmUzMih2bmkpO1xcbiA3MzM6XFx0XFx0Ym9vbCBmZGJfY3JlYXRlZCA9IGZhbHNlO1xcbiA3MzQ6XFx0XFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuIDczNTpcXHRcXHRpbnQgZXJyID0gMDtcXG4gNzM2OlxcdFxcbiA3Mzc6XFx0XFx0aWYgKHZ4bGFuX3ZuaWZpbHRlcl9sb29rdXAodnhsYW4sIHYpKVxcbiA3Mzg6XFx0XFx0XFx0cmV0dXJuIHZ4bGFuX3ZuaV91cGRhdGUodnhsYW4sIHZnLCB2LCBncm91cCwgXFx1MDAyNmNoYW5nZWQsIGV4dGFjayk7XFxuIDczOTpcXHRcXG4gNzQwOlxcdFxcdGVyciA9IHZ4bGFuX3ZuaV9pbl91c2UodnhsYW4tXFx1MDAzZW5ldCwgdnhsYW4sIFxcdTAwMjZ2eGxhbi1cXHUwMDNlY2ZnLCB2KTtcXG4gNzQxOlxcdFxcdGlmIChlcnIpIHtcXG4gNzQyOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlZOSSBpbiB1c2VcXFwiKTtcXG4gNzQzOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDc0NDpcXHRcXHR9XFxuIDc0NTpcXHRcXG4gNzQ2OlxcdFxcdHZuaW5vZGUgPSB2eGxhbl92bmlfYWxsb2ModnhsYW4sIHYpO1xcbiA3NDc6XFx0XFx0aWYgKCF2bmlub2RlKVxcbiA3NDg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDc0OTpcXHRcXG4gNzUwOlxcdFxcdGVyciA9IHJoYXNodGFibGVfbG9va3VwX2luc2VydF9mYXN0KFxcdTAwMjZ2Zy1cXHUwMDNldm5pX2hhc2gsXFxuIDc1MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnZuaW5vZGUtXFx1MDAzZXZub2RlLFxcbiA3NTI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHZ4bGFuX3ZuaV9yaHRfcGFyYW1zKTtcXG4gNzUzOlxcdFxcdGlmIChlcnIpIHtcXG4gNzU0OlxcdFxcdFxcdHZ4bGFuX3ZuaV9mcmVlKHZuaW5vZGUpO1xcbiA3NTU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzU2OlxcdFxcdH1cXG4gNzU3OlxcdFxcbiA3NTg6XFx0XFx0X192eGxhbl92bmlfYWRkX2xpc3QodmcsIHZuaW5vZGUpO1xcbiA3NTk6XFx0XFxuIDc2MDpcXHRcXHRpZiAodnhsYW4tXFx1MDAzZWRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApXFxuIDc2MTpcXHRcXHRcXHR2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGUodnhsYW4sIHZuaW5vZGUsIGZhbHNlKTtcXG4gNzYyOlxcdFxcbiA3NjM6XFx0XFx0ZXJyID0gdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCh2eGxhbiwgdm5pbm9kZSwgZ3JvdXAsIHRydWUsIFxcdTAwMjZjaGFuZ2VkLFxcbiA3NjQ6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2ZmRiX2NyZWF0ZWQsIGV4dGFjayk7XFxuIDc2NTpcXHRcXHRpZiAoZXJyKVxcbiA3NjY6XFx0XFx0XFx0Z290byBlcnJfdm5pX2RlbDtcXG4gNzY3OlxcdFxcbiA3Njg6XFx0XFx0dnhsYW5fdm5pZmlsdGVyX25vdGlmeSh2eGxhbiwgdm5pbm9kZSwgUlRNX05FV1RVTk5FTCk7XFxuIDc2OTpcXHRcXG4gNzcwOlxcdFxcdHJldHVybiAwO1xcbiA3NzE6XFx0XFxuIDc3MjpcXHRlcnJfdm5pX2RlbDpcXG4gNzczOlxcdFxcdC8qIFVuZG8gb25seSB0aGUgZGVmYXVsdCBGREIgZW50cnkgdGhpcyBhZGQgaW5zdGFsbGVkLiAgQW4gZW50cnkgdGhhdFxcbiA3NzQ6XFx0XFx0ICogd2FzIGFscmVhZHkgdGhlcmUsIHdoZXRoZXIgYWRkZWQgb3V0IG9mIGJhbmQgb3IgYnkgYW5vdGhlciBWTkksIGlzXFxuIDc3NTpcXHRcXHQgKiBsZWZ0IGFsb25lLlxcbiA3NzY6XFx0XFx0ICpcXG4gNzc3OlxcdFxcdCAqIE5vIG1lbWJlcnNoaXAgaGFzIHRvIGJlIGdpdmVuIGJhY2s6IHZ4bGFuX2lnbXBfbGVhdmUoKSBpcyBnYXRlZCBvblxcbiA3Nzg6XFx0XFx0ICogdnhsYW5fYWRkcl9tdWx0aWNhc3QoXFx1MDAyNm9sZF9yZW1vdGVfaXApLCBhbmQgb2xkX3JlbW90ZV9pcCBpcyBhIGNvcHlcXG4gNzc5OlxcdFxcdCAqIG9mIHRoZSByZW1vdGUgSVAgb2YgYSBub2RlIHRoaXMgYWRkIGp1c3QgYWxsb2NhdGVkLCBzbyBpdCBpcyB6ZXJvLlxcbiA3ODA6XFx0XFx0ICpcXG4gNzgxOlxcdFxcdCAqIFRoZSBhZGRyZXNzIHBpY2tlZCBiZWxvdyBpcyB0aGUgb25lIHRoZSBlbnRyeSB3YXMgaW5zdGFsbGVkXFxuIDc4MjpcXHRcXHQgKiBhZ2FpbnN0LiAgSWYgdGhlIHJlcXVlc3QgY2FycmllZCBhIGdyb3VwLCB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKClcXG4gNzgzOlxcdFxcdCAqIGNvcGllZCBpdCBpbnRvIHZuaW5vZGUtXFx1MDAzZXJlbW90ZV9pcCBiZWZvcmUgdGhlIGpvaW4gY291bGQgZmFpbDsgaWZcXG4gNzg0OlxcdFxcdCAqIGl0IGRpZCBub3QsIHRoYXQgY29weSB3YXMgc2tpcHBlZCBhbmQgdGhlIGVudHJ5IHdlbnQgdG8gdGhlIGRldmljZVxcbiA3ODU6XFx0XFx0ICogZGVmYXVsdC5cXG4gNzg2OlxcdFxcdCAqL1xcbiA3ODc6XFx0XFx0aWYgKGZkYl9jcmVhdGVkKSB7XFxuIDc4ODpcXHRcXHRcXHR1bmlvbiB2eGxhbl9hZGRyICpyaXAgPSB2eGxhbl9hZGRyX2FueShcXHUwMDI2dm5pbm9kZS1cXHUwMDNlcmVtb3RlX2lwKSA/XFxuIDc4OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dnhsYW4tXFx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pcCA6XFxuIDc5MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dm5pbm9kZS1cXHUwMDNlcmVtb3RlX2lwO1xcbiA3OTE6XFx0XFxuIDc5MjpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZ4bGFuLVxcdTAwM2VoYXNoX2xvY2spO1xcbiA3OTM6XFx0XFx0XFx0X192eGxhbl9mZGJfZGVsZXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLCAqcmlwLFxcbiA3OTQ6XFx0XFx0XFx0XFx0XFx0ICAgdnhsYW4tXFx1MDAzZWNmZy5kc3RfcG9ydCwgdm5pbm9kZS1cXHUwMDNldm5pLFxcbiA3OTU6XFx0XFx0XFx0XFx0XFx0ICAgdm5pbm9kZS1cXHUwMDNldm5pLFxcbiA3OTY6XFx0XFx0XFx0XFx0XFx0ICAgdnhsYW4tXFx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pZmluZGV4LCB0cnVlKTtcXG4gNzk3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ2eGxhbi1cXHUwMDNlaGFzaF9sb2NrKTtcXG4gNzk4OlxcdFxcdH1cXG4gNzk5OlxcdFxcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXFx1MDAyNnZnLVxcdTAwM2V2bmlfaGFzaCwgXFx1MDAyNnZuaW5vZGUtXFx1MDAzZXZub2RlLFxcbiA4MDA6XFx0XFx0XFx0XFx0ICAgICAgIHZ4bGFuX3ZuaV9yaHRfcGFyYW1zKTtcXG4gODAxOlxcdFxcdF9fdnhsYW5fdm5pX2RlbF9saXN0KHZnLCB2bmlub2RlKTtcXG4gODAyOlxcdFxcdGlmICh2eGxhbi1cXHUwMDNlZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUClcXG4gODAzOlxcdFxcdFxcdHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZSh2eGxhbiwgdm5pbm9kZSwgdHJ1ZSk7XFxuIDgwNDpcXHRcXHRjYWxsX3JjdShcXHUwMDI2dm5pbm9kZS1cXHUwMDNlcmN1LCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZSk7XFxuIDgwNTpcXHRcXHRyZXR1cm4gZXJyO1xcbiA4MDY6XFx0fVxcbiA4MDc6XFx0XFxuIDgwODpcXHRzdGF0aWMgdm9pZCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4gODA5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6MTIuMjY2MzI2MzQ1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYxMDY0NzQyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2eGxhbl92bmlfYWRkIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzIHBhdGNoIHRvIGB2eGxhbl92bmlfYWRkYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIHRvIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cGAuIFByZXZpb3VzbHksIGB2eGxhbl92bmlfYWRkYCBhcHBlYXJzIHRvIGhhdmUgY29tcGxldGVseSBpZ25vcmVkIHRoZSByZXR1cm4gdmFsdWUgb2YgYHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXBgLiBUaGUgY29kZSBqdXN0IHBsb3dlZCBhaGVhZCB0byBgdnhsYW5fdm5pZmlsdGVyX25vdGlmeWAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYCBoYWQgYW4gaXNzdWUsIHVsdGltYXRlbHkgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUuIEVzc2VudGlhbGx5LCBhIHBhcnRpYWxseSBpbml0aWFsaXplZCB2bmlub2RlIHdhcyBsZWZ0IGhhbmdpbmcgYXJvdW5kIGluIHRoZSByaGFzaHRhYmxlIGFuZCBsaXN0LiBUaGF0J3MgYSBzZXJpb3VzIHBvdGVudGlhbCBsZWFrIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlLlxuXG5Ob3csIGFmdGVyIHRoZSBwYXRjaCwgd2UgaGF2ZSBhIHJvYnVzdCBlcnJvci1oYW5kbGluZyBwYXRoLiBJZiBgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cGAgZmFpbHMsIHRoZSBgdm5pbm9kZWAgZ2V0cyBjbGVhbmVkIHVwIHByb3Blcmx5LiBUaGlzIGludm9sdmVzIGBjYWxsX3JjdWAgZm9yIFJDVS1zYWZlIGZyZWVpbmcsIHJlbW92aW5nIHRoZSBub2RlIGZyb20gdGhlIGhhc2h0YWJsZSBhbmQgbGlzdCwgaGFuZGxpbmcgc3BpbmxvY2tzIChgc3Bpbl9sb2NrX2JoYCksIGFuZCBwb3RlbnRpYWxseSB1bmRvaW5nIHRoZSBGREIgZGVsZXRpb24gaWYgaXQgd2FzIGNyZWF0ZWQgKGBmZGJfY3JlYXRlZGApLiBUaGVyZSdzIGV2ZW4gc29ja2V0IG1hbmlwdWxhdGlvbiB3aXRoIGB2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGVgLCB3aGljaCBsaWtlbHkgaW50ZXJhY3RzIHdpdGggdGhlIGRhdGFwYXRoLiBJdCdzIGEgY29tcHJlaGVuc2l2ZSBhcHByb2FjaC5cblxuVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSB2aXJ0dWFsIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIHZ4bGFuIGNvcmUgYW5kIHZuaWZpbHRlciBtb2R1bGVzLiBUaGVzZSBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBuZXRsaW5rIChzcGVjaWZpY2FsbHkgcnRuZXRsaW5rIHZuaWZpbHRlciBjb21tYW5kcykuIFRoaXMgbWVhbnMgYW55IGVycm9yIGluIHRoZSBwcmV2aW91cyBjb2RlIGNvdWxkIGhhdmUgY2F1c2VkIHNpZ25pZmljYW50IHByb2JsZW1zIGJlY2F1c2Ugb2YgdGhlIGxhY2sgb2YgZXJyb3IgaGFuZGxpbmcsIGJ1dCBub3csIHRoaXMgaXMgYWxsIG11Y2ggbW9yZSByb2J1c3QuXG5cbkkgbmVlZCB0byBzZWUgaG93IGB2eGxhbl92bmlfYWRkYCBpcyByZWFjaGVkIHNvIEknbSBnb2luZyB0byBxdWlja2x5IGdyZXAgZm9yIHRoZSBmdW5jdGlvbiBuYW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcxNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUwOjE4LjM3MjgwNDE3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI2MjU2NDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZ4bGFuX3ZuaV9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdnhsYW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NjQ2PXN0YXRpYyBpbnQgdnhsYW5fdm5pX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTY3MC1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo2NzE6c3RhdGljIHZvaWQgX192eGxhbl92bmlfYWRkX2xpc3Qoc3RydWN0IHZ4bGFuX3ZuaV9ncm91cCAqdmcsXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNjcyLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnYpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz03MjQ9c3RhdGljIHZvaWQgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTcyNS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo3MjY6c3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTcyNy1cXHRcXHRcXHQgc3RydWN0IHZ4bGFuX3ZuaV9ncm91cCAqdmcsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy03NTctXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6NzU4OlxcdF9fdnhsYW5fdm5pX2FkZF9saXN0KHZnLCB2bmlub2RlKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy03NTktXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz04MTY9c3RhdGljIGludCB2eGxhbl92bmlfZGVsKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtODU0LVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjg1NTpzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGRfZGVsKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBfX3UzMiBzdGFydF92bmksXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtODU2LVxcdFxcdFxcdCAgICAgX191MzIgZW5kX3ZuaSwgdW5pb24gdnhsYW5fYWRkciAqZ3JvdXAsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04NjYtXFx0XFx0Y2FzZSBSVE1fTkVXVFVOTkVMOlxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjg2NzpcXHRcXHRcXHRlcnIgPSB2eGxhbl92bmlfYWRkKHZ4bGFuLCB2ZywgdiwgZ3JvdXAsIGV4dGFjayk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtODY4LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9ODg1PXN0YXRpYyBpbnQgdnhsYW5fcHJvY2Vzc192bmlfZmlsdGVyKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtOTMzLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjkzNDpcXHRlcnIgPSB2eGxhbl92bmlfYWRkX2RlbCh2eGxhbiwgdm5pX3N0YXJ0LCB2bmlfZW5kLCBcXHUwMDI2Z3JvdXAsIGNtZCxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy05MzUtXFx0XFx0XFx0XFx0ZXh0YWNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6MTkuMjk5MDY2MzUxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwODIyODY1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgVnhMQU4gVk5JIEZpbHRlcioqXG5cbk9rYXksIHNvIGB2eGxhbl9wcm9jZXNzX3ZuaV9maWx0ZXJgIGlzIHRyaWdnZXJlZCwgZWl0aGVyIHRocm91Z2ggdGhlIHN0YW5kYXJkIHJ0bmV0bGluayByb3V0ZSB1cGRhdGUgcHJvY2VzcyAoYFJUTV9ORVdUVU5ORUxgKSBvciBkaXJlY3RseSBieSBhIGB2bmlmaWx0ZXJgIGNhbGwuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kICp3aGVyZSogdGhpcyBmaWx0ZXJpbmcgcm91dGluZSBpcyBhY3R1YWxseSBnZXR0aW5nIGhvb2tlZCB1cCBpbiB0aGUgY29kZS4gSSBuZWVkIHRvIHRyYWNlIGl0cyByZWdpc3RyYXRpb24gdG8gZ2V0IHRoZSBiaWcgcGljdHVyZSBvZiBpdHMgaW50ZWdyYXRpb24gaW50byB0aGUgVnhMQU4gZGF0YSBwYXRoLiBJ4oCZbSB0aGlua2luZyBJIHdpbGwgZWl0aGVyIGZpbmQgaXQgcmVnaXN0ZXJlZCBhcyBhIGhhbmRsZXIgZm9yIGEgcGFydGljdWxhciBOZXRsaW5rIGZhbWlseS9tZXNzYWdlIHR5cGUgb3IgaW50ZWdyYXRlZCBpbnRvIHRoZSBvdmVyYWxsIG5ldHdvcmsgZGV2aWNlIG9yIHR1bm5lbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGNhbGxzIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSByZWdpc3RyYXRpb24gaGFwcGVucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDoyMS4zODEzNTU0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwNzMyMjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZ4bGFuX3Byb2Nlc3Nfdm5pX2ZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC92eGxhblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz04NTU9c3RhdGljIGludCB2eGxhbl92bmlfYWRkX2RlbChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgX191MzIgc3RhcnRfdm5pLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtODg0LVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjg4NTpzdGF0aWMgaW50IHZ4bGFuX3Byb2Nlc3Nfdm5pX2ZpbHRlcihzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04ODYtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKm5sdm5pZmlsdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9OTgyPXN0YXRpYyBpbnQgdnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0xMDE1LVxcdFxcdFxcdFxcdCBzaXplb2YoKnRtc2cpLCByZW0pIHtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzoxMDE2OlxcdFxcdGVyciA9IHZ4bGFuX3Byb2Nlc3Nfdm5pX2ZpbHRlcih2eGxhbiwgYXR0ciwgbmxoLVxcdTAwM2VubG1zZ190eXBlLFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTEwMTctXFx0XFx0XFx0XFx0XFx0ICAgICAgIGV4dGFjayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUwOjIxLjkwMjA5MzQyMloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDgwODM4NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIFR1bm5lbCBDb25maWd1cmF0aW9uIEhhbmRsZXIqKlxuXG5Pa2F5LCBzbyBgdnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3NgIGlzIHJlZ2lzdGVyZWQgYXMgYSBuZXRsaW5rIGhhbmRsZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBsZXQncyB0cmFjZSBleGFjdGx5ICp3aGVyZSogdGhhdCByZWdpc3RyYXRpb24gaGFwcGVucy5cIiBVbmRlcnN0YW5kaW5nIHRoZSBoYW5kbGVyJ3MgY29udGV4dCBpcyBjcnVjaWFsLiBLbm93aW5nIHRoZSByZWdpc3RyYXRpb24gcG9pbnQgdGVsbHMgbWUgYSBsb3QgYWJvdXQgaXRzIHNjb3BlLCBob3cgaXQncyBpbnZva2VkLCBhbmQgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVGhpcyBpcyBhIHN0YW5kYXJkIGluaXRpYWwgYXBwcm9hY2ggd2hlbiBkaWdnaW5nIGludG8ga2VybmVsIG5ldHdvcmtpbmcgY29kZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0dW5uZWwgY29uZmlndXJhdGlvbnMg4oCTIHVuZGVyc3RhbmRpbmcgdGhlIGVudHJ5IHBvaW50IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIHBsYW5lIGludGVyYWN0aW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNhbGwgY2hhaW4gdGhhdCBsZWFkcyB0byB0aGlzIHJlZ2lzdHJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDoyMy45ODI5MzQ2NDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MDgwNzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jPTk2Mz1pbnQgdnhsYW5fdm5pZ3JvdXBfaW5pdChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbilcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTk4MS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo5ODI6c3RhdGljIGludCB2eGxhbl92bmlmaWx0ZXJfcHJvY2VzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy05ODMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9MTAzMT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgdnhsYW5fdm5pZmlsdGVyX3J0bmxfbXNnX2hhbmRsZXJzW10gPSB7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMTAzMi1cXHR7VEhJU19NT0RVTEUsIFBGX0JSSURHRSwgUlRNX0dFVFRVTk5FTCwgTlVMTCwgdnhsYW5fdm5pZmlsdGVyX2R1bXAsIDB9LFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjEwMzM6XFx0e1RISVNfTU9EVUxFLCBQRl9CUklER0UsIFJUTV9ORVdUVU5ORUwsIHZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzLCBOVUxMLCAwfSxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzoxMDM0OlxcdHtUSElTX01PRFVMRSwgUEZfQlJJREdFLCBSVE1fREVMVFVOTkVMLCB2eGxhbl92bmlmaWx0ZXJfcHJvY2VzcywgTlVMTCwgMH0sXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMTAzNS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDoyNC4wNTkwMjQ2MjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzM2MjE5NDU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogdnhsYW4gRkRCIFVwZGF0ZSoqXG5cbk9rYXksIHNvIEkndmUgaWRlbnRpZmllZCBzb21lIHByb21pc2luZyBncm91bmQgZm9yIGZ1enppbmcuIFdlJ3ZlIGdvdCBgUEZfQlJJREdFYCwgYFJUTV9ORVdUVU5ORUxgLCBhbmQgYFJUTV9ERUxUVU5ORUxgIHJlZ2lzdGVyZWQsIG1lYW5pbmcgdGhpcyBpcyByZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rIHNvY2tldHMsIGV2ZW4gZnJvbSB1bnByaXZpbGVnZWQgdXNlcnNwYWNlLCB3aGljaCBpcyBwZXJmZWN0IGZvciBzeXprYWxsZXIuXG5cbk5vdywgSSdtIGZvY3VzaW5nIG9uIGB2eGxhbl9mZGJfdXBkYXRlYC4gVGhpcyBmdW5jdGlvbiBpcyBwaXZvdGFsOyBpdCdzIHVzZWQgaW4gY3J1Y2lhbCBhcmVhczogRkRCIG5ldGxpbmsgdXBkYXRlcyAoYHZ4bGFuX2ZkYl9hZGRgKSwgcGFja2V0IHNub29waW5nIChgdnhsYW5fc25vb3BgKSwgdnhsYW4gaW50ZXJmYWNlIGNyZWF0aW9uIGFuZCBtb2RpZmljYXRpb24gKGB2eGxhbl9kZXZfY3JlYXRlYCwgYHZ4bGFuX2NoYW5nZWxpbmtgKSwgc3dpdGNoZGV2L2JyaWRnZSBvZmZsb2FkL2xlYXJuaW5nIChgdnhsYW5fZmRiX2V4dGVybmFsX2xlYXJuX2FkZGApLCBhbmQgZXZlbiB2bmlmaWx0ZXIgbG9naWMgKGB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnlgKS4gQ2xlYXJseSwgdGhpcyB0b3VjaGVzIGNvcmUgdnhsYW4gZHJpdmVyIGZ1bmN0aW9uYWxpdHksIGluY2x1ZGluZyBzdGF0ZSBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgUkNVIGZyZWVpbmcsIGFuZCBGREIgbWFuaXB1bGF0aW9ucy4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSAtIFdvcnRoRnV6emluZyA9IHRydWUhXG5cbk5vdyBsZXQncyBmb2N1cyBvbiBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zLiBJJ3ZlIGdvdCB0byBhdm9pZCB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMsIHNvIEknbSBsb29raW5nIGZvciB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGltcGxlbWVudGluZyB0aGUgY29yZSBsb2dpYywgb3IgYXJlIEFQSSBlbnRyeXBvaW50cy5cblxuVGhlIGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoaXMgY29tbWl0IGFyZTogYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgLCBgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGVgLCBgdnhsYW5fZmRiX3VwZGF0ZWAsIGB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnlgLCBgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cGAsIGB2eGxhbl92bmlfYWRkYCwgYHZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzYCwgYW5kIGB2eGxhbl9mZGJfYWRkYC5cblxuSSdtIHplcm9pbmcgaW4gb24gYSBmZXcga2V5IG9uZXM6IGB2eGxhbl9mZGJfdXBkYXRlYCwgd2hpY2ggaXMgY2xlYXJseSB0aGUgY29yZSB1cGRhdGVkIGZ1bmN0aW9uOyBgdnhsYW5fdm5pX2FkZGAsIGJlY2F1c2UgaXQgaGFzIHRoZSBlcnJvciByb2xsYmFjayBsb2dpYzsgYHZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzYCAtIHRoZSBydG5sIGVudHJ5cG9pbnQgZm9yIGBSVE1fTkVXVFVOTkVMYCB3aGljaCB0cmlnZ2VycyBgdnhsYW5fdm5pX2FkZGA7IGFuZCBgdnhsYW5fZmRiX2FkZGAsIGJlY2F1c2UgaXQncyBhIHJ0bmwgZW50cnlwb2ludCB0aGF0IGNhbGxzIGB2eGxhbl9mZGJfdXBkYXRlYC4gYHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeWAgYWxzbyBtZXJpdHMgc2NydXRpbnkgYXMgYW4gdXBkYXRlZCBmdW5jdGlvbi5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgZ29vZCB0YXJnZXRzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBpZiB0aGV5J3JlIG5vbi1zdGF0aWMsIHNvIHRoZXkgd29uJ3QgYmUgaW5saW5lZCBhbmQgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSBmdXp6ZXIuXG5cbmB2eGxhbl9mZGJfdXBkYXRlYCBpcyBkZWNsYXJlZCBpbiBgdnhsYW5fcHJpdmF0ZS5oYCwgc28gaXQncyAqZGVmaW5pdGVseSogYSBub24tc3RhdGljIHN5bWJvbC4gSXQncyBkZWNsYXJlZCBhczpcbmBgYGNcbmludCB2eGxhbl9mZGJfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuXHRcdCAgICAgY29uc3QgdTggKnNyY19tYWMsIHVuaW9uIHZ4bGFuX2FkZHIgKmlwLFxuXHRcdCAgICAgX191MTYgc3RhdGUsIF9fdTE2IGZsYWdzLFxuXHRcdCAgICAgX19iZTE2IHBvcnQsIF9fYmUzMiBzcmNfdm5pLCBfX2JlMzIgdm5pLFxuXHRcdCAgICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLCB1MzIgbmhpZCxcblx0XHQgICAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLFxuXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbmBgYFxuXG5BcyBmb3IgYHZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzYCwgdGhhdCdzIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBgdnhsYW5fdm5pZmlsdGVyX3J0bmxfbXNnX2hhbmRsZXJzYC4gTm8gd2F5IHRoZSBjb21waWxlciBpbmxpbmVzIHRoYXQsIHNvIHRoYXQncyBnb29kLlxuXG5gdnhsYW5fZmRiX2FkZGAgaXMgYWxzbyBhbiBlbnRyeSBwb2ludCAtIGxldCdzIGNoZWNrIGhvdyBpdCdzIHJlZmVyZW5jZWQuIEl0J3MgcmVmZXJlbmNlZCB2aWEgdGhlIGB2eGxhbl9uZXRkZXZfb3BzYCwgd2hpY2ggYXJlIG5ldGxpbmsgZnVuY3Rpb25zLiBTbyB0aGF0J3MgcmVhY2hhYmxlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY2MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6MzEuNDIxMjIyMDdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NTc5NDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZ4bGFuX2ZkYl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdnhsYW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTExNTg9c3RhdGljIGludCB2eGxhbl9mZGJfcGFyc2Uoc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTI0NC0vKiBBZGQgc3RhdGljIGVudHJ5ICh2aWEgbmV0bGluaykgKi9cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTI0NTpzdGF0aWMgaW50IHZ4bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTEyNDYtXFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MzMwOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZ4bGFuX25ldGRldl9ldGhlcl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzMxOC1cXHQubmRvX3NldF9tYWNfYWRkcmVzc1xcdD0gZXRoX21hY19hZGRyLFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozMzE5OlxcdC5uZG9fZmRiX2FkZFxcdFxcdD0gdnhsYW5fZmRiX2FkZCxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzMyMC1cXHQubmRvX2ZkYl9kZWxcXHRcXHQ9IHZ4bGFuX2ZkYl9kZWxldGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUwOjMxLjQ4NzgwNTc0OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDUyMTE2NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWWExBTiBGREIgYW5kIFZOSSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGB2eGxhbl9mZGJfYWRkYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCdzIGRlZmluZWQgaW4gdGhyZWUgZGlmZmVyZW50IHBsYWNlcywgYWxsIHRocm91Z2ggdGhlIGBuZG9fZmRiX2FkZGAgbmV0ZGV2X29wcyBzdHJ1Y3R1cmUuIFRoZSBmYWN0IHRoYXQgaXRzIGFkZHJlc3MgaXMgdGFrZW4gc29tZXdoZXJlIG1lYW5zIGl0J3MgZGVmaW5pdGVseSAqbm90KiBpbmxpbmVkLCB0aGF0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBOb3csIEknbSBzaGlmdGluZyBteSBmb2N1cyB0byBgdnhsYW5fdm5pX2FkZGAuIFRoZSBxdWVzdGlvbiBpcywgaXMgaXRzIGFkZHJlc3MgYmVpbmcgdXNlZCBzb21ld2hlcmUsIG1ha2luZyBpbmxpbmluZyBpbXBvc3NpYmxlLCBvciBjYW4gd2UgcG90ZW50aWFsbHkgZXhwZWN0IGFuIGlubGluZWQgaW1wbGVtZW50YXRpb24/XG5cblRvIGZpZ3VyZSB0aGlzIG91dCwgSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxscy4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgYHZ4bGFuX3ZuaWZpbHRlci5jYCwgSSBzZWUgYHZ4bGFuX3ZuaV9hZGRfZGVsYCBjYWxscyBgdnhsYW5fdm5pX2FkZGAuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYHZ4bGFuX3ZuaV9hZGRfZGVsYCBpdHNlbGYgaXMgaW5saW5lZCB3aXRoaW4gYHZ4bGFuX3Byb2Nlc3Nfdm5pX2ZpbHRlcmAuIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIFRvIGdldCBhIGNsZWFyIHBpY3R1cmUsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGJsb2NrIGFyb3VuZCBsaW5lcyA4NTAtODgwIGluIGBkcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAyNCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDozNC41Mzk5MjQ4NDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODUwOlxcdFxcdHJldHVybiAwO1xcbiA4NTE6XFx0b3V0OlxcbiA4NTI6XFx0XFx0cmV0dXJuIGVycjtcXG4gODUzOlxcdH1cXG4gODU0OlxcdFxcbiA4NTU6XFx0c3RhdGljIGludCB2eGxhbl92bmlfYWRkX2RlbChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgX191MzIgc3RhcnRfdm5pLFxcbiA4NTY6XFx0XFx0XFx0XFx0ICAgICBfX3UzMiBlbmRfdm5pLCB1bmlvbiB2eGxhbl9hZGRyICpncm91cCxcXG4gODU3OlxcdFxcdFxcdFxcdCAgICAgaW50IGNtZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA4NTg6XFx0e1xcbiA4NTk6XFx0XFx0c3RydWN0IHZ4bGFuX3ZuaV9ncm91cCAqdmc7XFxuIDg2MDpcXHRcXHRpbnQgdiwgZXJyID0gMDtcXG4gODYxOlxcdFxcbiA4NjI6XFx0XFx0dmcgPSBydG5sX2RlcmVmZXJlbmNlKHZ4bGFuLVxcdTAwM2V2bmlncnApO1xcbiA4NjM6XFx0XFxuIDg2NDpcXHRcXHRmb3IgKHYgPSBzdGFydF92bmk7IHYgXFx1MDAzYz0gZW5kX3ZuaTsgdisrKSB7XFxuIDg2NTpcXHRcXHRcXHRzd2l0Y2ggKGNtZCkge1xcbiA4NjY6XFx0XFx0XFx0Y2FzZSBSVE1fTkVXVFVOTkVMOlxcbiA4Njc6XFx0XFx0XFx0XFx0ZXJyID0gdnhsYW5fdm5pX2FkZCh2eGxhbiwgdmcsIHYsIGdyb3VwLCBleHRhY2spO1xcbiA4Njg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDg2OTpcXHRcXHRcXHRjYXNlIFJUTV9ERUxUVU5ORUw6XFxuIDg3MDpcXHRcXHRcXHRcXHRlcnIgPSB2eGxhbl92bmlfZGVsKHZ4bGFuLCB2ZywgdiwgZXh0YWNrKTtcXG4gODcxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4NzI6XFx0XFx0XFx0ZGVmYXVsdDpcXG4gODczOlxcdFxcdFxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbiA4NzQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDg3NTpcXHRcXHRcXHR9XFxuIDg3NjpcXHRcXHRcXHRpZiAoZXJyKVxcbiA4Nzc6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDg3ODpcXHRcXHR9XFxuIDg3OTpcXHRcXG4gODgwOlxcdFxcdHJldHVybiAwO1xcbiA4ODE6XFx0b3V0OlxcbiA4ODI6XFx0XFx0cmV0dXJuIGVycjtcXG4gODgzOlxcdH1cXG4gODg0OlxcdFxcbiA4ODU6XFx0c3RhdGljIGludCB2eGxhbl9wcm9jZXNzX3ZuaV9maWx0ZXIoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuIDg4NjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5sYXR0ciAqbmx2bmlmaWx0ZXIsXFxuIDg4NzpcXHRcXHRcXHRcXHRcXHQgICAgaW50IGNtZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA4ODg6XFx0e1xcbiA4ODk6XFx0XFx0c3RydWN0IG5sYXR0ciAqdmF0dHJzW1ZYTEFOX1ZOSUZJTFRFUl9FTlRSWV9NQVggKyAxXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6MzQuNTQwMDE0NDU2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ1MjQ4NzgxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVlhMQU4gU3ltYm9sIEJlaGF2aW9yKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBWWExBTiBzeW1ib2xzLiBGaXJzdCBvZmYsIEknbSBjZXJ0YWluIHRoYXQgYHZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzYCBpcyAqbm90KiBpbmxpbmVkLiBJdCdzIHRoZSBuZXRsaW5rIGVudHJ5IHBvaW50LCBhbmQgdGhhdCdzIGEgZGVhZCBnaXZlYXdheS4gVGhlIGNvbXBpbGVyIHdvbid0IG9wdGltaXplIHRoYXQgYXdheTsgaXQgbmVlZHMgdG8gYmUgYWNjZXNzaWJsZSBhcyBhIGRpc3RpbmN0IHN5bWJvbC4gYHZ4bGFuX3ZuaV9hZGRgIGlzIGEgYml0IHRyaWNraWVyLiBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBhbmQgd2hpbGUgaXQncyBhIGRlY2VudC1zaXplZCBvbmUsIGFyb3VuZCA5MCBsaW5lcywgc28gdGhlIGNvbXBpbGVyICptaWdodCogaW5saW5lIGl0LCBkZXBlbmRpbmcgb24gdGhlIGNpcmN1bXN0YW5jZXMuICBJdCdzIHdvcnRoIG5vdGluZy5cblxuSG93ZXZlciwgYHZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzYCAqd2lsbCogZXhpc3QgYXMgYSBzeW1ib2wsIGFuZCBpdCdzIHRoZSBtYWluIHBvaW50IG9mIGVudHJ5IHZpYSBuZXRsaW5rLiAgTm93LCBgdnhsYW5fZmRiX3VwZGF0ZWAgaXMgYSB0b3RhbGx5IGRpZmZlcmVudCBiZWFzdC4gIEl0J3MgZ2xvYmFsLCBkZWZpbmVkIGluIGB2eGxhbl9wcml2YXRlLmhgLCBhbmQgdXNlZCBpbiBtdWx0aXBsZSBjb21waWxhdGlvbiB1bml0czogYHZ4bGFuX2NvcmUuY2AgYW5kIGB2eGxhbl92bmlmaWx0ZXIuY2AuICBUaGF0IG1lYW5zIG5vIGNyb3NzLXVuaXQgaW5saW5pbmcgaXMgaGFwcGVuaW5nLCBlbmQgb2Ygc3RvcnkhXG5cbkFuZCBmaW5hbGx5LCBgdnhsYW5fZmRiX2FkZGAgaXMgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXRzIGFkZHJlc3MgaXMgdGFrZW4gYW5kIGFzc2lnbmVkIHRvIGEgYG5kb19mZGJfYWRkYCBzdHJ1Y3QuIFRoYXQgZ3VhcmFudGVlcyBpdCB3aWxsIGhhdmUgaXRzIG93biBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcyBpbiBib3RoIHRoZSBgdm1saW51eGAgaW1hZ2UgYW5kIHRoZSBgdnhsYW4ua29gIG1vZHVsZS5cblxuTm93LCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0J3MgbG9vayBhdCBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZm9yIFZYTEFOLiBPa2F5LCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBWWExBTmAgcmVxdWlyZXMgYElORVRgLCBhbmQgaXQgYHNlbGVjdGBzIGBORVRfVURQX1RVTk5FTGAgYW5kIGBHUk9fQ0VMTFNgLiBHb29kLlxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIGB2eGxhbl92bmlmaWx0ZXIuY2AgZG9lc24ndCBoYXZlIGFueSBhZGRpdGlvbmFsIGNvbmZpZyByZXF1aXJlbWVudHMuICBMZXQncyB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYHMgaW4gdGhlIGNvZGUgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODExNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUwOjM5LjA2NDg5NTMxNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyNTA4NDAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6MzkuMTIzMTU0Nzc0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2NzI1MTE1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVlhMQU4gRmlsdGVyaW5nIENvbmZpZ3VyYXRpb24gRGl2ZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGB2eGxhbl92bmlmaWx0ZXIuY2AgZmlsZS4gSSdtIGdsYWQgdG8gc2VlIHRoZXJlIGFyZSBubyBgI2lmZGVmc2AgaW4gaXQg4oCTIHRoYXQncyBhIGdvb2Qgc3RhcnQuIEtlZXBpbmcgdGhpbmdzIGNsZWFuIGxpa2UgdGhhdCBhbHdheXMgbWFrZXMgbWFpbnRlbmFuY2UgZWFzaWVyIGRvd24gdGhlIGxpbmUuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmaWx0ZXJpbmcgbWVjaGFuaXNtIGlzIGFjdHVhbGx5IGJlaW5nIGNvbnRyb2xsZWQsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSdsbCBuZWVkIHRvIGdvIGh1bnRpbmcgZm9yIGFsbCB0aGUgYENPTkZJR19gIHJlZmVyZW5jZXMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdnhsYW5gIGRpcmVjdG9yeS4gVGhhdCdzIHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgZmVhdHVyZSBmbGFncyB3aWxsIGJlIGRlZmluZWQuIFVuZGVyc3RhbmRpbmcgdGhvc2Ugc2V0dGluZ3MgaXMgZ29pbmcgdG8gYmUga2V5IHRvIHNlZWluZyBob3cgdGhpcyBmaWx0ZXIgaXMgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGNvbmZpZ3VyZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NTMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDo0MS43OTU2NzA2NzRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjM3NjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdnhsYW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vTWFrZWZpbGUtNC1cXG5kcml2ZXJzL25ldC92eGxhbi9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19WWExBTikgKz0gdnhsYW4ub1xcbmRyaXZlcnMvbmV0L3Z4bGFuL01ha2VmaWxlLTYtXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzItXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjMzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zNC0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl90dW5uZWwuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xMDA9c3RhdGljIHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuX3ZzX2ZpbmRfdm5pKHN0cnVjdCB2eGxhbl9zb2NrICp2cyxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMjMtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjEyNDpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikpIHtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTI1LVxcdFxcdFxcdGNvbnN0IHN0cnVjdCB2eGxhbl9jb25maWcgKmNmZyA9IFxcdTAwMjZub2RlLVxcdTAwM2V2eGxhbi1cXHUwMDNlY2ZnO1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTExNTg9c3RhdGljIGludCB2eGxhbl9mZGJfcGFyc2Uoc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTE4My1cXHRcXHRcXHRpcC1cXHUwMDNlc2Euc2FfZmFtaWx5ID0gQUZfSU5FVDtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTE4NDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTE4NS1cXHRcXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTE0NDI9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIHZ4bGFuX3Nub29wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTQ1NC1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTQ1NTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTQ1Ni1cXHRpZiAoc3JjX2lwLVxcdTAwM2VzYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xNTI2PXN0YXRpYyB2b2lkIHZ4bGFuX3NvY2tfcmVsZWFzZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbilcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNTI4LVxcdHN0cnVjdCB2eGxhbl9zb2NrICpzb2NrNCA9IHJ0bmxfZGVyZWZlcmVuY2UodnhsYW4tXFx1MDAzZXZuNF9zb2NrKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTUyOTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTUzMC1cXHRzdHJ1Y3QgdnhsYW5fc29jayAqc29jazYgPSBydG5sX2RlcmVmZXJlbmNlKHZ4bGFuLVxcdTAwM2V2bjZfc29jayk7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTU0Ni1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTU0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTU0OC1cXHRpZiAoX192eGxhbl9zb2NrX3JlbGVhc2VfcHJlcChzb2NrNikpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xNjA3PXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB2eGxhbl9zZXRfbWFjKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTE2MjUtXFx0XFx0c2FkZHIuc2Euc2FfZmFtaWx5ID0gQUZfSU5FVDtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTYyNjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTYyNy1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTE2NDA9c3RhdGljIGJvb2wgdnhsYW5fZWNuX2RlY2Fwc3VsYXRlKHN0cnVjdCB2eGxhbl9zb2NrICp2cywgdm9pZCAqb2lwaCxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNjQ2LVxcdFxcdGVyciA9IElQX0VDTl9kZWNhcHN1bGF0ZShvaXBoLCBza2IpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoxNjQ3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNjQ4LVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xODYwPXN0YXRpYyBpbnQgYXJwX3JlZHVjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgdm5pKVxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTE5NTYtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE5NTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTE5NTgtc3RhdGljIHN0cnVjdCBza19idWZmICp2eGxhbl9uYV9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnJlcXVlc3QsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MjEyND1zdGF0aWMgYm9vbCByb3V0ZV9zaG9ydGNpcmN1aXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yMTUzLVxcdH1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MjE1NDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjE1NS1cXHRjYXNlIEVUSF9QX0lQVjY6XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MjI4NT1zdGF0aWMgdm9pZCB2eGxhbl9lbmNhcF9ieXBhc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHZ4bGFuX2RldiAqc3JjX3Z4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTIzMDEtXFx0XFx0bG9vcGJhY2suc2Euc2FfZmFtaWx5ID0gIEFGX0lORVQ7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjIzMDI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTIzMDMtXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0yMzM1PXN0YXRpYyBpbnQgZW5jYXBfYnlwYXNzX2lmX2xvY2FsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjM0MS17XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjIzNDI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTIzNDMtXFx0LyogSVB2NiBydC1mbGFncyBhcmUgY2hlY2tlZCBhZ2FpbnN0IFJURl9MT0NBTCwgYnV0IHRoZSB2YWx1ZSBvZlxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTIzNzQ9dm9pZCB2eGxhbl94bWl0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI0NTYtXFx0XFx0XFx0dWRwX3N1bSA9ICEoZmxhZ3MgXFx1MDAyNiBWWExBTl9GX1VEUF9aRVJPX0NTVU02X1RYKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MjQ1NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjQ1OC1cXHRcXHRzd2l0Y2ggKHZ4bGFuLVxcdTAwM2VjZmcubGFiZWxfcG9saWN5KSB7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjU3OS1cXHRcXHRcXHRcXHQgICAgaXBjYl9mbGFncyk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjI1ODA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI1ODEtXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0yNzU1PXN0YXRpYyBuZXRkZXZfdHhfdCB2eGxhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjc4Ny1cXHRcXHRcXHRyZXR1cm4gYXJwX3JlZHVjZShkZXYsIHNrYiwgdm5pKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6Mjc4ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjc4OS1cXHRcXHRlbHNlIGlmIChudG9ocyhldGgtXFx1MDAzZWhfcHJvdG8pID09IEVUSF9QX0lQVjYgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0yOTE0PXN0YXRpYyB2b2lkIHZ4bGFuX3ZzX2RlbF9kZXYoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjkxOC1cXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNnZ4bGFuLVxcdTAwM2VobGlzdDQuaGxpc3QpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyOTE5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yOTIwLVxcdGhsaXN0X2RlbF9pbml0X3JjdShcXHUwMDI2dnhsYW4tXFx1MDAzZWhsaXN0Ni5obGlzdCk7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MzI1OT1zdGF0aWMgaW50IHZ4bGFuX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzI4NC1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozMjg1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMjg2LVxcdFxcdHN0cnVjdCB2eGxhbl9zb2NrICpzb2NrNiA9IHJjdV9kZXJlZmVyZW5jZSh2eGxhbi1cXHUwMDNldm42X3NvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTMyOTktXFx0XFx0ZHN0X3JlbGVhc2UobmRzdCk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjMzMDA6I2Vsc2UgLyogIUNPTkZJR19JUFY2ICovXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTMzMDEtXFx0XFx0cmV0dXJuIC1FUEZOT1NVUFBPUlQ7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MzY2NT1zdGF0aWMgaW50IF9fdnhsYW5fc29ja19hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIGJvb2wgaXB2NilcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zNjk0LVxcdFxcdHJldHVybiBQVFJfRVJSKHZzKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MzY5NTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzY5Ni1cXHRpZiAoaXB2Nikge1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTM3MTQ9c3RhdGljIGludCB2eGxhbl9zb2NrX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbilcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zNzIxLVxcdFJDVV9JTklUX1BPSU5URVIodnhsYW4tXFx1MDAzZXZuNF9zb2NrLCBOVUxMKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MzcyMjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzcyMy1cXHRSQ1VfSU5JVF9QT0lOVEVSKHZ4bGFuLVxcdTAwM2V2bjZfc29jaywgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9Mzc2OD1zdGF0aWMgaW50IHZ4bGFuX2NvbmZpZ192YWxpZGF0ZShzdHJ1Y3QgbmV0ICpzcmNfbmV0LCBzdHJ1Y3QgdnhsYW5fY29uZmlnICpjb25mLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTM4MTAtXFx0aWYgKGNvbmYtXFx1MDAzZXNhZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozODExOlxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSVBWNikpIHtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzgxMi1cXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzg2OC1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6Mzg2OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzg3MC1cXHRcXHRpZiAodXNlX2lwdjYpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zODg5LVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozODkwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zODkxLVxcdFxcdGlmIChjb25mLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZYTEFOX0ZfSVBWNl9MSU5LTE9DQUwpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz00MDkxPXN0YXRpYyBpbnQgdnhsYW5fbmwyY29uZihzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDEyNi1cXHR9IGVsc2UgaWYgKGRhdGFbSUZMQV9WWExBTl9HUk9VUDZdKSB7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjQxMjc6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19JUFY2KSkge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy00MTI4LVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0FUVFIoZXh0YWNrLCB0YltJRkxBX1ZYTEFOX0dST1VQNl0sIFxcXCJJUHY2IHN1cHBvcnQgbm90IGVuYWJsZWQgaW4gdGhlIGtlcm5lbFxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQxNDktXFx0fSBlbHNlIGlmIChkYXRhW0lGTEFfVlhMQU5fTE9DQUw2XSkge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo0MTUwOlxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSVBWNikpIHtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDE1MS1cXHRcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSKGV4dGFjaywgdGJbSUZMQV9WWExBTl9MT0NBTDZdLCBcXFwiSVB2NiBzdXBwb3J0IG5vdCBlbmFibGVkIGluIHRoZSBrZXJuZWxcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz00NTk4PXN0YXRpYyBpbnQgdnhsYW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDYxNC1cXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NDYxNTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDYxNi1cXHRcXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ2MzEtXFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjQ2MzI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ2MzMtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jPTk4PXN0YXRpYyB2b2lkIHZ4bGFuX2JyX21kYl9lbnRyeV9maWxsKGNvbnN0IHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmMtMTE2LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jOjExNzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYy0xMTgtXFx0Y2FzZSBBRl9JTkVUNjpcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jPTM0ND1zdGF0aWMgYm9vbCB2eGxhbl9tZGJfaXNfdmFsaWRfc291cmNlKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIF9fYmUxNiBwcm90byxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jLTM2MS1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYzozNjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmMtMzYzLVxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jPTM5MD1zdGF0aWMgdm9pZCB2eGxhbl9tZGJfZ3JvdXBfc2V0KHN0cnVjdCB2eGxhbl9tZGJfZW50cnlfa2V5ICpncm91cCxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jLTM5OC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYzozOTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmMtNDAwLVxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYz0xNjIzPXN0cnVjdCB2eGxhbl9tZGJfZW50cnkgKnZ4bGFuX21kYl9lbnRyeV9za2JfZ2V0KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmMtMTY1MS1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYzoxNjUyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jLTE2NTMtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jLTE2ODUtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmM6MTY4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYy0xNjg3LVxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYz0xNz1pbnQgdnhsYW5faWdtcF9qb2luKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCB1bmlvbiB2eGxhbl9hZGRyICpyaXAsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYy0zNS1cXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jOjM2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jLTM3LVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYz01MD1pbnQgdnhsYW5faWdtcF9sZWF2ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgdW5pb24gdnhsYW5fYWRkciAqcmlwLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtNjgtXFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYzo2OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYy03MC1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmM9MTIzPWJvb2wgdnhsYW5fZ3JvdXBfdXNlZChzdHJ1Y3QgdnhsYW5fbmV0ICp2biwgc3RydWN0IHZ4bGFuX2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtMTI5LVxcdHN0cnVjdCB2eGxhbl9zb2NrICpzb2NrNDtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYzoxMzA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtMTMxLVxcdHN0cnVjdCB2eGxhbl9zb2NrICpzb2NrNjtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jLTE0Mi1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYzoxNDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtMTQ0LVxcdHNvY2s2ID0gcnRubF9kZXJlZmVyZW5jZShkZXYtXFx1MDAzZXZuNl9zb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jLTE1NS1cXHRcXHRcXHRjb250aW51ZTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYzoxNTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtMTU3LVxcdFxcdGlmIChmYW1pbHkgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaD03Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCB2eGxhbl9yZHN0ICpmaXJzdF9yZW1vdGVfcnRubChzdHJ1Y3QgdnhsYW5fZmRiICpmZGIpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmgtNzgtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oOjc5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaC04MC1zdGF0aWMgaW5saW5lXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmg9MTE2PXN0YXRpYyBpbmxpbmUgYm9vbCB2eGxhbl9hZGRyX2lzX211bHRpY2FzdChjb25zdCB1bmlvbiB2eGxhbl9hZGRyICppcClcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaC0xMjMtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oOjEyNDojZWxzZSAvKiAhQ09ORklHX0lQVjYgKi9cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmgtMTI1LVxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9Mzk9c3RhdGljIHZvaWQgdnhsYW5fdnNfYWRkX2RlbF92bmlub2RlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNTAtXFx0XFx0XFx0aGxpc3RfZGVsX2luaXRfcmN1KFxcdTAwMjZ2LVxcdTAwM2VobGlzdDQuaGxpc3QpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjUxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTUyLVxcdFxcdGlmICghaGxpc3RfdW5oYXNoZWQoXFx1MDAyNnYtXFx1MDAzZWhsaXN0Ni5obGlzdCkpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy01Ny1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy01OS1cXHR2cyA9IHJ0bmxfZGVyZWZlcmVuY2UodnhsYW4tXFx1MDAzZXZuNl9zb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jPTcyPXZvaWQgdnhsYW5fdnNfYWRkX3ZuaWdycChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTg1LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2LCB0bXAsIFxcdTAwMjZ2Zy1cXHUwMDNldm5pX2xpc3QsIHZsaXN0KSB7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6ODY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtODctXFx0XFx0aWYgKGlwdjYpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz05Nz12b2lkIHZ4bGFuX3ZzX2RlbF92bmlncnAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0xMDgtXFx0XFx0aGxpc3RfZGVsX2luaXRfcmN1KFxcdTAwMjZ2LVxcdTAwM2VobGlzdDQuaGxpc3QpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjEwOTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0xMTAtXFx0XFx0aGxpc3RfZGVsX2luaXRfcmN1KFxcdTAwMjZ2LVxcdTAwM2VobGlzdDYuaGxpc3QpO1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9MjQ3PXN0YXRpYyBib29sIHZ4bGFuX2ZpbGxfdm5pX2ZpbHRlcl9lbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjczLVxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzoyNzQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjc1LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz02OTY9c3RhdGljIHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdnhsYW5fdm5pX2FsbG9jKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNzEwLVxcdHZuaW5vZGUtXFx1MDAzZWhsaXN0NC52eGxhbiA9IHZ4bGFuO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjcxMTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy03MTItXFx0dm5pbm9kZS1cXHUwMDNlaGxpc3Q2LnZ4bGFuID0gdnhsYW47XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz05NDI9dm9pZCB2eGxhbl92bmlncm91cF91bmluaXQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy05NTEtXFx0XFx0aGxpc3RfZGVsX2luaXRfcmN1KFxcdTAwMjZ2LVxcdTAwM2VobGlzdDQuaGxpc3QpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjk1MjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy05NTMtXFx0XFx0aGxpc3RfZGVsX2luaXRfcmN1KFxcdTAwMjZ2LVxcdTAwM2VobGlzdDYuaGxpc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDo0MS44NDEzMTEzOTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjQzMTg3MjU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVlhMQU4gRXJyb3IgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBlbmFibGluZyBWWExBTiwgYW5kIElORVQgKGFuZCBvcHRpb25hbGx5IElQVjYsIGFzIGlzIHN0YW5kYXJkIHByYWN0aWNlIGZvciBmdXp6aW5nKSB3aWxsIGJyaW5nIHRoaXMgY29kZSBpbnRvIHRoZSBjb21waWxhdGlvbi4gVGltZSB0byBsYXkgaXQgb3V0IGNsZWFybHkuXG5cbkZpcnN0LCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zOiBgRW5hYmxlQ29uZmlnczogW1wiVlhMQU5cIiwgXCJJTkVUXCJdYC5cblxuTm93LCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIEknbSBnb2luZyB0byBiZSBmb2N1c2VkIG9uIGFyZSB0aGVzZSwgYmVjYXVzZSB0aGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQ6XG5cbjEuICBgdnhsYW5fdm5pX2FkZGA6IFRoaXMgaXMgKnRoZSogY2VudHJhbCBmdW5jdGlvbiB3aGVyZSB0aGUgZXJyb3IgaGFuZGxpbmcgcm9sbGJhY2sgbG9naWMgaGFzIGJlZW4gaW50cm9kdWNlZC4gVGhlIHBhdGNoIGluY2x1ZGVzIGFuIGVycm9yIHBhdGggKGBlcnJfdm5pX2RlbDpgKSB0byB1bndpbmQgb3BlcmF0aW9ucyBwZXJmb3JtZWQgb24gZmFpbHVyZSB3aXRoaW4gYHZ4bGFuX3ZuaV9hZGRgLiBUaGUgdW53aW5kIGluY2x1ZGVzOiBkb2luZyBgX192eGxhbl9mZGJfZGVsZXRlYCwgYHJoYXNodGFibGVfcmVtb3ZlX2Zhc3RgLCBgX192eGxhbl92bmlfZGVsX2xpc3RgLCBgdnhsYW5fdnNfYWRkX2RlbF92bmlub2RlYCwgYW5kIGBjYWxsX3JjdWAuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBlbnN1cmluZyBhIGNsZWFuIHN0YXRlLlxuMi4gIGB2eGxhbl9mZGJfdXBkYXRlYDogVGhpcyBmdW5jdGlvbidzIHNpZ25hdHVyZSBhbmQgbG9naWMgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIG5vdyByZWNvcmQgd2hldGhlciBhIG5ldyBlbnRyeSB3YXMgY3JlYXRlZCAoYCpjcmVhdGVkID0gdHJ1ZWApLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgbGV0cyBtZSB0cmFjayBpZiBpdCdzIHRoZSBmaXJzdCB0aW1lIGFuIGVudHJ5IGlzIHdyaXR0ZW4uXG4zLiAgYHZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzYDogVGhpcyBmdW5jdGlvbiBpcyB0aGUgTmV0bGluayBlbnRyeSBwb2ludCBmb3IgYFJUTV9ORVdUVU5ORUxgIGFuZCBgUlRNX0RFTFRVTk5FTGAgcmVxdWVzdHMsIHdoaWNoIGV2ZW50dWFsbHkgdHJpZ2dlciB0aGUgYHZ4bGFuX3ZuaV9hZGRgIGZ1bmN0aW9uLiBTbyBmdXp6aW5nIHRoZSBOZXRsaW5rIGludGVyZmFjZSBpcyBpbXBvcnRhbnQgdG8gZXhlcmNpc2UgdGhlc2UgY29kZSBwYXRocy5cbjQuICBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2A6IFRoaXMgZnVuY3Rpb24gaXMgbW9kaWZpZWQgdG8gdHJhY2sgd2hldGhlciBhbiBlbnRyeSB3YXMgbmV3bHkgY3JlYXRlZCB2aWEgYSByZW1vdGUgZGVzdGluYXRpb24sIGFnYWluIGJ5IHRyYWNraW5nIHRoZSBgY3JlYXRlZGAgZmxhZy5cbjUuICBgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGVgOiBUaGlzIGlzIG1vZGlmaWVkIGluIHNpbWlsYXIgZmFzaGlvbiB0byBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AsIGJ1dCBmb3IgY3JlYXRpbmcgbmV3IGVudHJpZXMuXG5cbkkndmUgcmVjaGVja2VkIG15IHJlYXNvbmluZyBhbmQgY29uc3RyYWludHM6XG5cbiogICBUaGlzIGlzIGRlZmluaXRlbHkgYFdvcnRoRnV6emluZzogdHJ1ZWAuIFRoaXMgcGF0Y2ggZml4ZXMgYSBjcml0aWNhbCBlcnJvciB1bndpbmRpbmcgcHJvYmxlbSBpbiBWWExBTiBWTkkgZmlsdGVyIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgaXQgYWRkcmVzc2VzIGZhaWx1cmVzIHdpdGhpbiBgdnhsYW5fdm5pX2FkZCgpYCBkdXJpbmcgVk5JIG5vZGUgY3JlYXRpb24vY29uZmlndXJhdGlvbi4gVGhlIHBhdGNoIGFkZHMgYSBwcm9wZXIgZXJyb3IgcGF0aCB0aGF0IGNsZWFucyB1cCBWTkkgbm9kZXMsIGRlbGV0ZXMgRkRCIGVudHJpZXMsIGFuZCBmcmVlcyBtZW1vcnkgdmlhIFJDVSB3aGVuIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKClgIGZhaWxzLiBUaGUgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zLCBgdnhsYW5fZmRiX3VwZGF0ZSgpYCwgYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcoKWAsIGFuZCBgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUoKWAgbm93IHJlcG9ydCBpZiBhbiBlbnRyeSB3YXMgbmV3bHkgY3JlYXRlZC4gVGhpcyBjaGFuZ2VzIHZpcnR1YWwgbmV0d29ya2luZyBkcml2ZXIgbG9naWMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgKGBSVE1fTkVXVFVOTkVMYCwgYFJUTV9ORVdORUlHSGApLlxuKiAgIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBbXCJWWExBTlwiLCBcIklORVRcIl1gLlxuKiAgIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmU6XG4gICAgKiAgIGB2eGxhbl92bmlfYWRkYFxuICAgICogICBgdnhsYW5fZmRiX3VwZGF0ZWBcbiAgICAqICAgYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgXG4gICAgKiAgIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZWBcbiAgICAqICAgYHZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzYFxuXG5FdmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRoZSByZWFzb25pbmcgaXMgc29saWQsIGFuZCBJJ3ZlIHZlcmlmaWVkIHRoaXMgZGlyZWN0bHkgYWdhaW5zdCB0aGUga2VybmVsIHNvdXJjZS4gTm93IEkgY2FuIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTEwOCwiT3V0cHV0VG9rZW5zIjoyNTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6NDguMjczMTg2MjQ0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5MzIzNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZYTEFOXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnhsYW5fdm5pX2FkZFwiLFxuICAgIFwidnhsYW5fZmRiX3VwZGF0ZVwiLFxuICAgIFwidnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ1wiLFxuICAgIFwidnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGVcIixcbiAgICBcInZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZYTEFOIGRyaXZlciAocmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIGNvbW1hbmRzIHN1Y2ggYXMgUlRNX05FV1RVTk5FTCBhbmQgUlRNX05FV05FSUdIKS4gSXQgdXBkYXRlcyB0aGUgRkRCIHVwZGF0ZSBsb2dpYyBhY3Jvc3MgdnhsYW5fZmRiX3VwZGF0ZSgpLCB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSgpLCBhbmQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZygpIHRvIHRyYWNrIHdoZW4gYW4gZW50cnkgaXMgbmV3bHkgY3JlYXRlZCwgYW5kIGltcGxlbWVudHMgYW4gZXJyb3Igcm9sbGJhY2sgcGF0aCBpbiB2eGxhbl92bmlfYWRkKCkgdGhhdCB0ZWFycyBkb3duIEZEQiBlbnRyaWVzLCB1bmxpbmtzIFZOSSBub2RlcywgYW5kIGZyZWVzIG1lbW9yeSB2aWEgUkNVIGlmIHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKSBmYWlscy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBsb2dpYyBhbHRlcmluZyBzdGF0ZSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBlcnJvci1oYW5kbGluZyBpbiB0aGUgdmlydHVhbCBuZXR3b3JraW5nIHN1YnN5c3RlbSwgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlhMQU5cIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2eGxhbl92bmlfYWRkXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZVwiLFxuICAgIFwidnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVlhMQU4gZHJpdmVyIChyZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBydG5ldGxpbmsgY29tbWFuZHMgc3VjaCBhcyBSVE1fTkVXVFVOTkVMIGFuZCBSVE1fTkVXTkVJR0gpLiBJdCB1cGRhdGVzIHRoZSBGREIgdXBkYXRlIGxvZ2ljIGFjcm9zcyB2eGxhbl9mZGJfdXBkYXRlKCksIHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKCksIGFuZCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKCkgdG8gdHJhY2sgd2hlbiBhbiBlbnRyeSBpcyBuZXdseSBjcmVhdGVkLCBhbmQgaW1wbGVtZW50cyBhbiBlcnJvciByb2xsYmFjayBwYXRoIGluIHZ4bGFuX3ZuaV9hZGQoKSB0aGF0IHRlYXJzIGRvd24gRkRCIGVudHJpZXMsIHVubGlua3MgVk5JIG5vZGVzLCBhbmQgZnJlZXMgbWVtb3J5IHZpYSBSQ1UgaWYgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpIGZhaWxzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIGFsdGVyaW5nIHN0YXRlIG1hbmFnZW1lbnQsIHN5bmNocm9uaXphdGlvbiwgYW5kIGVycm9yLWhhbmRsaW5nIGluIHRoZSB2aXJ0dWFsIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBtYWtpbmcgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6NDguMzUzMTI2NzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzUyNTU2NjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6NDguMzUzNTk0ODlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0Mzc1MjA4Mzk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvci11bndpbmQgbG9naWMgdG8gdnhsYW5fdm5pX2FkZCgpIGlmIHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKSBmYWlscywgaW50cm9kdWNpbmcgYSBib29sZWFuIG91dC1wYXJhbWV0ZXIgKCdjcmVhdGVkJyAvICdmZGJfY3JlYXRlZCcpIGFjcm9zcyB2eGxhbl9mZGJfdXBkYXRlKCkgYW5kIGhlbHBlcnMgdG8gdHJhY2sgd2hldGhlciBhbiBGREIgZW50cnkgd2FzIGNyZWF0ZWQgc28gaXQgY2FuIGJlIHJvbGxlZCBiYWNrLlxcblxcbjEuIEtBU0FOIC8gTE9DS0RFUCBBcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggbW9kaWZpZXMgY2xlYW51cCBwYXRocyBhbmQgb2JqZWN0IGxpZmVjeWNsZSAodW53aW5kaW5nIGhhc2h0YWJsZSBpbnNlcnRpb24sIGxpc3QgYWRkaXRpb24sIHNvY2tldCBzdGF0ZSwgYW5kIHNjaGVkdWxpbmcgUkNVIGRlc3RydWN0aW9uIG9mIHZuaW5vZGUsIHBsdXMgZGVsZXRpbmcgRkRCIGVudHJpZXMgdW5kZXIgaGFzaF9sb2NrKS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgaGVyZSAoZS5nLiB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGxpc3QgY29ycnVwdGlvbiwgb3IgbG9ja2luZyBkaXNjcmVwYW5jaWVzKSBhcmUgYWRkcmVzc2VkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLlxcbjIuIEtNU0FOIEFwcGxpY2FiaWxpdHk6IEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGFuZCBpbmZvLWxlYWtzLiBUaGUgbmV3bHkgaW50cm9kdWNlZCB2YXJpYWJsZSAnYm9vbCBmZGJfY3JlYXRlZCA9IGZhbHNlOycgaW4gdnhsYW5fdm5pX2FkZCgpIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2ssIGFuZCB0aGUgY2FsbGVlIGZ1bmN0aW9ucyBvbmx5IGNvbmRpdGlvbmFsbHkgd3JpdGUgJypjcmVhdGVkID0gdHJ1ZScgd2l0aG91dCByZWFkaW5nIGZyb20gaXQgdW5pbml0aWFsaXplZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGhlYXAgYWxsb2NhdGlvbnMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgY3JlYXRlZCwgYW5kIG5vIGJyYW5jaGluZyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIGFuZCBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3Y2I5NzFmZTU1YWQ1YzkxOGNjYzk5YWI1Mjg0NDk1ODg1ZWM5NWJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMjI6NDk6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcbmluZGV4IGJlOTVhZjY0YTFmNTEuLjA2NTJkYzQ3MWRjYTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1xuQEAgLTk3NCw3ICs5NzQsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdFx0XHQgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgdm5pLFxuIFx0XHRcdFx0ICAgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB2eGxhbl9mZGIgKmYsIHUzMiBuaGlkLFxuLVx0XHRcdFx0ICAgICBib29sIHN3ZGV2X25vdGlmeSxcbitcdFx0XHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRfX3UxNiBmZGJfZmxhZ3MgPSAobmRtX2ZsYWdzIFx1MDAyNiB+TlRGX1VTRSk7XG5AQCAtMTA0Miw2ICsxMDQyLDggQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFxuIFx0XHRpZiAocmMgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHRpZiAocmMgXHUwMDI2XHUwMDI2IGNyZWF0ZWQpXG4rXHRcdFx0KmNyZWF0ZWQgPSB0cnVlO1xuIFx0XHRub3RpZnkgfD0gcmM7XG4gXHR9XG4gXG5AQCAtMTA3OCw3ICsxMDgwLDcgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0XHRcdCAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncyxcbiBcdFx0XHRcdCAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSxcbiBcdFx0XHRcdCAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsXG4tXHRcdFx0XHQgICBib29sIHN3ZGV2X25vdGlmeSxcbitcdFx0XHRcdCAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdF9fdTE2IGZkYl9mbGFncyA9IChuZG1fZmxhZ3MgXHUwMDI2IH5OVEZfVVNFKTtcbkBAIC0xMTAxLDYgKzExMDMsOSBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0aWYgKHJjKVxuIFx0XHRnb3RvIGVycl9ub3RpZnk7XG4gXG4rXHRpZiAoY3JlYXRlZClcbitcdFx0KmNyZWF0ZWQgPSB0cnVlO1xuK1xuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX25vdGlmeTpcbkBAIC0xMTE0LDcgKzExMTksNyBAQCBpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0ICAgICBfX3UxNiBzdGF0ZSwgX191MTYgZmxhZ3MsXG4gXHRcdCAgICAgX19iZTE2IHBvcnQsIF9fYmUzMiBzcmNfdm5pLCBfX2JlMzIgdm5pLFxuIFx0XHQgICAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsXG4tXHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksXG4rXHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXG4gXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCB2eGxhbl9mZGIgKmY7XG5AQCAtMTEyOSw3ICsxMTM0LDggQEAgaW50IHZ4bGFuX2ZkYl91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXG4gXHRcdHJldHVybiB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHZ4bGFuLCBpcCwgc3RhdGUsIGZsYWdzLCBwb3J0LFxuIFx0XHRcdFx0XHRcdCB2bmksIGlmaW5kZXgsIG5kbV9mbGFncywgZixcbi1cdFx0XHRcdFx0XHQgbmhpZCwgc3dkZXZfbm90aWZ5LCBleHRhY2spO1xuK1x0XHRcdFx0XHRcdCBuaGlkLCBzd2Rldl9ub3RpZnksIGNyZWF0ZWQsXG4rXHRcdFx0XHRcdFx0IGV4dGFjayk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAoIShmbGFncyBcdTAwMjYgTkxNX0ZfQ1JFQVRFKSlcbiBcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbkBAIC0xMTM3LDcgKzExNDMsNyBAQCBpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0cmV0dXJuIHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHZ4bGFuLCBtYWMsIGlwLCBzdGF0ZSwgZmxhZ3MsXG4gXHRcdFx0XHRcdCAgICAgICBwb3J0LCBzcmNfdm5pLCB2bmksIGlmaW5kZXgsXG4gXHRcdFx0XHRcdCAgICAgICBuZG1fZmxhZ3MsIG5oaWQsIHN3ZGV2X25vdGlmeSxcbi1cdFx0XHRcdFx0ICAgICAgIGV4dGFjayk7XG4rXHRcdFx0XHRcdCAgICAgICBjcmVhdGVkLCBleHRhY2spO1xuIFx0fVxuIH1cbiBcbkBAIC0xMjc1LDcgKzEyODEsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRlcnIgPSB2eGxhbl9mZGJfdXBkYXRlKHZ4bGFuLCBhZGRyLCBcdTAwMjZpcCwgbmRtLVx1MDAzZW5kbV9zdGF0ZSwgZmxhZ3MsXG4gXHRcdFx0ICAgICAgIHBvcnQsIHNyY192bmksIHZuaSwgaWZpbmRleCxcbiBcdFx0XHQgICAgICAgbmRtLVx1MDAzZW5kbV9mbGFncyB8IE5URl9WWExBTl9BRERFRF9CWV9VU0VSLFxuLVx0XHRcdCAgICAgICBuaGlkLCB0cnVlLCBleHRhY2spO1xuK1x0XHRcdCAgICAgICBuaGlkLCB0cnVlLCBOVUxMLCBleHRhY2spO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbiBcbiBcdGlmICghZXJyKVxuQEAgLTE0OTEsNyArMTQ5Nyw4IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB2eGxhbl9zbm9vcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0XHQgdnhsYW4tXHUwMDNlY2ZnLmRzdF9wb3J0LFxuIFx0XHRcdFx0XHQgdm5pLFxuIFx0XHRcdFx0XHQgdnhsYW4tXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX3ZuaSxcbi1cdFx0XHRcdFx0IGlmaW5kZXgsIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMKTtcbitcdFx0XHRcdFx0IGlmaW5kZXgsIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMLFxuK1x0XHRcdFx0XHQgTlVMTCk7XG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4gXHR9XG4gXG5AQCAtNDAzNCw3ICs0MDQxLDggQEAgc3RhdGljIGludCB2eGxhbl9kZXZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgICAgICBkc3QtXHUwMDNlcmVtb3RlX3ZuaSxcbiBcdFx0XHRcdCAgICAgICBkc3QtXHUwMDNlcmVtb3RlX3ZuaSxcbiBcdFx0XHRcdCAgICAgICBkc3QtXHUwMDNlcmVtb3RlX2lmaW5kZXgsXG4tXHRcdFx0XHQgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIGV4dGFjayk7XG4rXHRcdFx0XHQgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIE5VTEwsXG4rXHRcdFx0XHQgICAgICAgZXh0YWNrKTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIHVubGluaztcbkBAIC00NDg1LDcgKzQ0OTMsOCBAQCBzdGF0aWMgaW50IHZ4bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdFx0XHRcdFx0ICAgICAgIHZ4bGFuLVx1MDAzZWNmZy5kc3RfcG9ydCxcbiBcdFx0XHRcdFx0ICAgICAgIGNvbmYudm5pLCBjb25mLnZuaSxcbiBcdFx0XHRcdFx0ICAgICAgIGNvbmYucmVtb3RlX2lmaW5kZXgsXG4tXHRcdFx0XHRcdCAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgZXh0YWNrKTtcbitcdFx0XHRcdFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMLFxuK1x0XHRcdFx0XHQgICAgICAgZXh0YWNrKTtcbiBcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ2eGxhbi1cdTAwM2VoYXNoX2xvY2spO1xuIFx0XHRcdFx0bmV0ZGV2X2FkamFjZW50X2NoYW5nZV9hYm9ydChkc3QtXHUwMDNlcmVtb3RlX2RldixcbkBAIC00ODA2LDcgKzQ4MTUsNyBAQCB2eGxhbl9mZGJfZXh0ZXJuYWxfbGVhcm5fYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0ICAgICAgIGZkYl9pbmZvLVx1MDAzZXJlbW90ZV92bmksXG4gXHRcdFx0ICAgICAgIGZkYl9pbmZvLVx1MDAzZXJlbW90ZV9pZmluZGV4LFxuIFx0XHRcdCAgICAgICBOVEZfVVNFIHwgTlRGX1NFTEYgfCBOVEZfRVhUX0xFQVJORUQsXG4tXHRcdFx0ICAgICAgIDAsIGZhbHNlLCBleHRhY2spO1xuK1x0XHRcdCAgICAgICAwLCBmYWxzZSwgTlVMTCwgZXh0YWNrKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaCBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaFxuaW5kZXggYjFlZWMyMjE2MzYwOC4uZTUyNzU1OTIzYzMxMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaFxuKysrIGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oXG5AQCAtMTkzLDcgKzE5Myw4IEBAIGludCB2eGxhbl9mZGJfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0XHQgICAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncyxcbiBcdFx0ICAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHNyY192bmksIF9fYmUzMiB2bmksXG4gXHRcdCAgICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLCB1MzIgbmhpZCxcbi1cdFx0ICAgICBib29sIHN3ZGV2X25vdGlmeSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbitcdFx0ICAgICBib29sIHN3ZGV2X25vdGlmeSwgYm9vbCAqY3JlYXRlZCxcbitcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIHZvaWQgdnhsYW5feG1pdF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgIF9fYmUzMiBkZWZhdWx0X3ZuaSwgc3RydWN0IHZ4bGFuX3Jkc3QgKnJkc3QsIGJvb2wgZGlkX3JzYyk7XG4gaW50IHZ4bGFuX3ZuaV9pbl91c2Uoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY1xuaW5kZXggZGQ5NDA4NWUwODg2NS4uOWNjOTMyYzYxNzdkMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jXG4rKysgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY1xuQEAgLTQ3Myw2ICs0NzMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdm5pX2ZpbHRlcl9wb2xpY3lbVlhMQU5fVk5JRklMVEVSX01BWCArIDFdID0ge1xuIHN0YXRpYyBpbnQgdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBfX2JlMzIgdm5pLFxuIFx0XHRcdFx0XHQgIHVuaW9uIHZ4bGFuX2FkZHIgKm9sZF9yZW1vdGVfaXAsXG4gXHRcdFx0XHRcdCAgdW5pb24gdnhsYW5fYWRkciAqcmVtb3RlX2lwLFxuK1x0XHRcdFx0XHQgIGJvb2wgKmZkYl9jcmVhdGVkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgdnhsYW5fcmRzdCAqZHN0ID0gXHUwMDI2dnhsYW4tXHUwMDNlZGVmYXVsdF9kc3Q7XG5AQCAtNDg4LDcgKzQ4OSw4IEBAIHN0YXRpYyBpbnQgdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBfX2JlMzIgdm5pLFxuIFx0XHRcdFx0ICAgICAgIHZuaSxcbiBcdFx0XHRcdCAgICAgICB2bmksXG4gXHRcdFx0XHQgICAgICAgZHN0LVx1MDAzZXJlbW90ZV9pZmluZGV4LFxuLVx0XHRcdFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBleHRhY2spO1xuK1x0XHRcdFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBmZGJfY3JlYXRlZCxcbitcdFx0XHRcdCAgICAgICBleHRhY2spO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbiBcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTUxMiw2ICs1MTQsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdFx0XHQgIHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSxcbiBcdFx0XHRcdCAgdW5pb24gdnhsYW5fYWRkciAqZ3JvdXAsXG4gXHRcdFx0XHQgIGJvb2wgY3JlYXRlLCBib29sICpjaGFuZ2VkLFxuK1x0XHRcdFx0ICBib29sICpmZGJfY3JlYXRlZCxcbiBcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCB2eGxhbl9uZXQgKnZuID0gbmV0X2dlbmVyaWModnhsYW4tXHUwMDNlbmV0LCB2eGxhbl9uZXRfaWQpO1xuQEAgLTU0NSw3ICs1NDgsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0ID0gdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHZ4bGFuLCB2bmlub2RlLVx1MDAzZXZuaSxcbi1cdFx0XHRcdFx0ICAgICBvbGRyaXAsIG5ld3JpcCxcbitcdFx0XHRcdFx0ICAgICBvbGRyaXAsIG5ld3JpcCwgZmRiX2NyZWF0ZWQsXG4gXHRcdFx0XHRcdCAgICAgZXh0YWNrKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTU5OSw3ICs2MDIsNyBAQCBpbnQgdnhsYW5fdm5pbGlzdF91cGRhdGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdFx0cmV0ID0gdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHZ4bGFuLCB2ZW50LVx1MDAzZXZuaSxcbiBcdFx0XHRcdFx0XHRcdCAgICAgb2xkX3JlbW90ZV9pcCxcbiBcdFx0XHRcdFx0XHRcdCAgICAgbmV3X3JlbW90ZV9pcCxcbi1cdFx0XHRcdFx0XHRcdCAgICAgZXh0YWNrKTtcbitcdFx0XHRcdFx0XHRcdCAgICAgTlVMTCwgZXh0YWNrKTtcbiBcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuQEAgLTY1NSw3ICs2NTgsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0ID0gdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCh2eGxhbiwgdm5pbm9kZSwgZ3JvdXAsIGZhbHNlLCBjaGFuZ2VkLFxuLVx0XHRcdFx0ICAgICBleHRhY2spO1xuK1x0XHRcdFx0ICAgICBOVUxMLCBleHRhY2spO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC03MTgsNiArNzIxLDggQEAgc3RhdGljIHZvaWQgdnhsYW5fdm5pX2ZyZWUoc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlKVxuIFx0a2ZyZWUodm5pbm9kZSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KTtcbitcbiBzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdFx0IHN0cnVjdCB2eGxhbl92bmlfZ3JvdXAgKnZnLFxuIFx0XHRcdCB1MzIgdm5pLCB1bmlvbiB2eGxhbl9hZGRyICpncm91cCxcbkBAIC03MjUsNiArNzMwLDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIHtcbiBcdHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZTtcbiBcdF9fYmUzMiB2ID0gY3B1X3RvX2JlMzIodm5pKTtcbitcdGJvb2wgZmRiX2NyZWF0ZWQgPSBmYWxzZTtcbiBcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuIFx0aW50IGVyciA9IDA7XG4gXG5AQCAtNzU1LDEwICs3NjEsNDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0XHR2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGUodnhsYW4sIHZuaW5vZGUsIGZhbHNlKTtcbiBcbiBcdGVyciA9IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAodnhsYW4sIHZuaW5vZGUsIGdyb3VwLCB0cnVlLCBcdTAwMjZjaGFuZ2VkLFxuLVx0XHRcdFx0ICAgICBleHRhY2spO1xuK1x0XHRcdFx0ICAgICBcdTAwMjZmZGJfY3JlYXRlZCwgZXh0YWNrKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX3ZuaV9kZWw7XG4gXG4gXHR2eGxhbl92bmlmaWx0ZXJfbm90aWZ5KHZ4bGFuLCB2bmlub2RlLCBSVE1fTkVXVFVOTkVMKTtcbiBcbitcdHJldHVybiAwO1xuK1xuK2Vycl92bmlfZGVsOlxuK1x0LyogVW5kbyBvbmx5IHRoZSBkZWZhdWx0IEZEQiBlbnRyeSB0aGlzIGFkZCBpbnN0YWxsZWQuICBBbiBlbnRyeSB0aGF0XG4rXHQgKiB3YXMgYWxyZWFkeSB0aGVyZSwgd2hldGhlciBhZGRlZCBvdXQgb2YgYmFuZCBvciBieSBhbm90aGVyIFZOSSwgaXNcbitcdCAqIGxlZnQgYWxvbmUuXG4rXHQgKlxuK1x0ICogTm8gbWVtYmVyc2hpcCBoYXMgdG8gYmUgZ2l2ZW4gYmFjazogdnhsYW5faWdtcF9sZWF2ZSgpIGlzIGdhdGVkIG9uXG4rXHQgKiB2eGxhbl9hZGRyX211bHRpY2FzdChcdTAwMjZvbGRfcmVtb3RlX2lwKSwgYW5kIG9sZF9yZW1vdGVfaXAgaXMgYSBjb3B5XG4rXHQgKiBvZiB0aGUgcmVtb3RlIElQIG9mIGEgbm9kZSB0aGlzIGFkZCBqdXN0IGFsbG9jYXRlZCwgc28gaXQgaXMgemVyby5cbitcdCAqXG4rXHQgKiBUaGUgYWRkcmVzcyBwaWNrZWQgYmVsb3cgaXMgdGhlIG9uZSB0aGUgZW50cnkgd2FzIGluc3RhbGxlZFxuK1x0ICogYWdhaW5zdC4gIElmIHRoZSByZXF1ZXN0IGNhcnJpZWQgYSBncm91cCwgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpXG4rXHQgKiBjb3BpZWQgaXQgaW50byB2bmlub2RlLVx1MDAzZXJlbW90ZV9pcCBiZWZvcmUgdGhlIGpvaW4gY291bGQgZmFpbDsgaWZcbitcdCAqIGl0IGRpZCBub3QsIHRoYXQgY29weSB3YXMgc2tpcHBlZCBhbmQgdGhlIGVudHJ5IHdlbnQgdG8gdGhlIGRldmljZVxuK1x0ICogZGVmYXVsdC5cbitcdCAqL1xuK1x0aWYgKGZkYl9jcmVhdGVkKSB7XG4rXHRcdHVuaW9uIHZ4bGFuX2FkZHIgKnJpcCA9IHZ4bGFuX2FkZHJfYW55KFx1MDAyNnZuaW5vZGUtXHUwMDNlcmVtb3RlX2lwKSA/XG4rXHRcdFx0XHRcdFx1MDAyNnZ4bGFuLVx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pcCA6XG4rXHRcdFx0XHRcdFx1MDAyNnZuaW5vZGUtXHUwMDNlcmVtb3RlX2lwO1xuK1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbitcdFx0X192eGxhbl9mZGJfZGVsZXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLCAqcmlwLFxuK1x0XHRcdFx0ICAgdnhsYW4tXHUwMDNlY2ZnLmRzdF9wb3J0LCB2bmlub2RlLVx1MDAzZXZuaSxcbitcdFx0XHRcdCAgIHZuaW5vZGUtXHUwMDNldm5pLFxuK1x0XHRcdFx0ICAgdnhsYW4tXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX2lmaW5kZXgsIHRydWUpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ2eGxhbi1cdTAwM2VoYXNoX2xvY2spO1xuK1x0fVxuK1x0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcdTAwMjZ2Zy1cdTAwM2V2bmlfaGFzaCwgXHUwMDI2dm5pbm9kZS1cdTAwM2V2bm9kZSxcbitcdFx0XHQgICAgICAgdnhsYW5fdm5pX3JodF9wYXJhbXMpO1xuK1x0X192eGxhbl92bmlfZGVsX2xpc3QodmcsIHZuaW5vZGUpO1xuK1x0aWYgKHZ4bGFuLVx1MDAzZWRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKVxuK1x0XHR2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGUodnhsYW4sIHZuaW5vZGUsIHRydWUpO1xuK1x0Y2FsbF9yY3UoXHUwMDI2dm5pbm9kZS1cdTAwM2VyY3UsIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6NDguMzUzNTk2MTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTE4MDgxNzEzNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRGV0ZXJtaW5hdGlvbiBmb3IgVlhMQU4gRkRCIFVwZGF0ZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIGtleSBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgcG90ZW50aWFsIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiAgVGhlIHJ1bGUgb2YgdGh1bWIgaXMsIGlmIEtBU0FOLCBMT0NLREVQLCBvciBvdGhlciBzdGFuZGFyZCBkZXRlY3RvcnMgY2FuIGNhdGNoIGl0LCB3ZSBkb24ndCBuZWVkIEtNU0FOLiAgV2UncmUgbG9va2luZyBmb3Igc3BlY2lmaWMgc2NlbmFyaW9zOiBrZXJuZWwgc3RydWN0dXJlcyBnb2luZyB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb21wbGV4IGFsbG9jYXRpb25zIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgdGhhdCAqY291bGQqIGJlIHJlYWQgbGF0ZXIsIG9yIGxvZ2ljIHRoYXQgZW5hYmxlcyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBwYXJ0cyBvZiBleGlzdGluZyBidWZmZXJzLiAgQ29udmVyc2VseSwgaWYgaXQncyBwcmltYXJpbHkgYWJvdXQgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBpc3N1ZXMsIG9yIHVzZS1hZnRlci1mcmVlLCB0aGVuIHdlIHNob3VsZCAqbm90KiBtYXJrIGl0IGZvciBLTVNBTi4gRnVsbCB6ZXJvaW5nL2luaXRpYWxpemF0aW9uIG9mIGRhdGEgc3RydWN0dXJlcyBhbmQgbm8gaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgYXJlIGFsc28gcmVhc29ucyB0byBza2lwIEtNU0FOLlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBhIGBib29sICpjcmVhdGVkYCBwYXJhbWV0ZXIgdG8gYSBmZXcgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gVlhMQU4gRkRCIHVwZGF0ZXMuICBTcGVjaWZpY2FsbHksIGB2eGxhbl9mZGJfdXBkYXRlYCwgYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgLCBgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGVgLCBhbmQgYSBmZXcgcmVsYXRlZCBmdW5jdGlvbnMgaW4gYHZ4bGFuX3ZuaWZpbHRlci5jYC5cblxuSSBzZWUgdGhhdCBgdnhsYW5fZmRiX3VwZGF0ZWAgaXMgdXBkYXRlZCB0byB0YWtlIHRoZSBgYm9vbCAqY3JlYXRlZGAgcGFyYW1ldGVyLiBUaGVuIGl0IGNhbGxzIGJvdGggYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgIGFuZCBgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGVgLiBDcnVjaWFsbHksIG1hbnkgY2FsbGVycyBwYXNzIGBOVUxMYCBmb3IgdGhpcyBgY3JlYXRlZGAgcGFyYW1ldGVyLCBidXQgYHZ4bGFuX3ZuaV9hZGRgIGFwcGVhcnMgdG8gKnNvbWV0aW1lcyogcGFzcyBhIGBib29sYCBpbml0aWFsaXplZCB0byBgZmFsc2VgLCB3aXRoIGNvZGUgcGF0aHMgdGhhdCBwb3RlbnRpYWxseSBzZXQgdGhhdCBib29sZWFuIHRvIHRydWUuIExldCdzIHNlZS4uLiB0aGUgY29kZSBwYXNzZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGBmZGJfY3JlYXRlZGAgdmFyaWFibGUgdG8gdGhvc2UgZnVuY3Rpb25zLlxuXG5NeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhlIGZ1bmN0aW9ucyB0aGF0IGFjY2VwdCB0aGlzIGBjcmVhdGVkYCBwb2ludGVyIHJlYWQgaXQgYmVmb3JlIHdyaXRpbmcgdG8gaXQsIG1ha2luZyBpdCBwb3NzaWJsZSB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyBjYXJlZnVsbHkgaW5zcGVjdCB0aGUgZnVuY3Rpb25zLlxuXG5Pa2F5LCBsZXQncyBob25lIGluIG9uIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBhbmQgYHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlYC4gIENydWNpYWxseSwgaW4gYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgLCB0aGUgY29kZSBpczogYGlmIChyYyBcdTAwMjZcdTAwMjYgY3JlYXRlZCkgKmNyZWF0ZWQgPSB0cnVlO2AgSXQgKndyaXRlcyogdG8gYCpjcmVhdGVkYCBvbmx5IGlmIHRoZSBwb2ludGVyIGlzIG5vdCBgTlVMTGAgYW5kIHRoZSByZXR1cm4gY29kZSBgcmNgIGlzIG5vbi16ZXJvIChpbmRpY2F0aW5nIHN1Y2Nlc3MpLiBUaGVyZSdzIG5vIHJlYWQgb2YgYCpjcmVhdGVkYCBpZiBpdCdzIG5vdCBgTlVMTGAuIEluIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZWAsIGl0J3MgZXZlbiBzaW1wbGVyOiBgaWYgKGNyZWF0ZWQpICpjcmVhdGVkID0gdHJ1ZTtgICBBZ2FpbiwgaXQncyBqdXN0IGEgd3JpdGUgaWYgYGNyZWF0ZWRgIGlzIG5vdCBgTlVMTGAuXG5cblNvLCBpdCBzZWVtcyB0aGF0IHRoZXJlIGlzbid0IGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpyZWFkcyogaGVyZS4gSW4gdGhlIGNhc2Ugd2hlcmUgYSBib29sZWFuIGlzIHBhc3NlZCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgaXMgdGhlbiBwb3RlbnRpYWxseSB1cGRhdGVkIHRvIGB0cnVlYCwgdGhlbiBpdCBtYXkgYmUgY2hlY2tlZC4gVGhlIGtleSBpcyB0aGVyZSBhcmUgbm8gcmVhZHMgYmVmb3JlIGEgd3JpdGUuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBpdCBkb2Vzbid0IG1lZXQgdGhlIGNyaXRlcmlhIGZvciBydW5uaW5nIGEgS01TQU4gc2Vzc2lvbi4gTm8gYE5lZWRzS01TQU49dHJ1ZWAuIEl0IGxvb2tzIHByZXR0eSBjbGVhbiBmcm9tIHRoaXMgcGVyc3BlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NjMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MDAuMTYxNzcxMjUyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDExOTAxNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9OTYzPXN0YXRpYyB2b2lkIHZ4bGFuX2RzdF9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy05NzAtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjk3MTpzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTk3Mi1cXHRcXHRcXHRcXHQgICAgIHVuaW9uIHZ4bGFuX2FkZHIgKmlwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MTowMC4zMDI5NjkxMDhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM5MDQyNDU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBuZXR3b3JraW5nIGFuZCBmYW1pbGlhciB3aXRoIFZYTEFOIGFuZCBGREJzOlxuXG4qKkFuYWx5emluZyBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBmdW5jdGlvbi4gVGhlIG5hbWUgaXRzZWxmIGlzIHByZXR0eSBleHBsaWNpdCDigJMgd2UncmUgZGVhbGluZyB3aXRoIGFuIGV4aXN0aW5nIEZvcndhcmRpbmcgRGF0YWJhc2UgKEZEQikgZW50cnkgcmVsYXRlZCB0byBWWExBTiwgYW5kIHdlIG5lZWQgdG8gdXBkYXRlIGl0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1c2UgYHJlYWQtZmlsZWAsIHByZXN1bWFibHkgYSBmdW5jdGlvbiBvciBtZXRob2QgYXZhaWxhYmxlIGluIHdoYXRldmVyIHNjcmlwdGluZyBlbnZpcm9ubWVudCBvciBjb2RlYmFzZSBJJ20gY3VycmVudGx5IHdvcmtpbmcgaW4uIEknbGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIG9yIHRoZSByZWxldmFudCBjb2RlIGJsb2NrLCBzbyBJIGNhbiBzZWUgZXhhY3RseSB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGlzIHVwZGF0ZSBwcm9jZXNzLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbXkgYW5hbHlzaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGlzdGluZyBsb2dpYyB0byBzZWUgKmhvdyogaXQncyB1cGRhdGluZyB0aGUgRkRCIGVudHJ5LiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLCB0aGUgY29uZGl0aW9ucyBiZWluZyBjaGVja2VkLCBhbmQgYW55IG90aGVyIGV4dGVybmFsIGNhbGxzLCBzdWNoIGFzIGhhcmR3YXJlIGludGVyYWN0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3Mgd2hldGhlciB0aGUgY29kZSBpcyBlZmZpY2llbnQsIGNvcnJlY3QsIGFuZCBzZWN1cmUuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBmbGF3cyBvciBhcmVhcyBvZiBpbXByb3ZlbWVudCBpbiB0aGlzIGNyaXRpY2FsIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTE2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MDIuNjkzMzk2MjA1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTcxLFxuICBcIkxpbmVDb3VudFwiOiA4NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTcxOlxcdHN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4gOTcyOlxcdFxcdFxcdFxcdFxcdCAgICAgdW5pb24gdnhsYW5fYWRkciAqaXAsXFxuIDk3MzpcXHRcXHRcXHRcXHRcXHQgICAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncyxcXG4gOTc0OlxcdFxcdFxcdFxcdFxcdCAgICAgX19iZTE2IHBvcnQsIF9fYmUzMiB2bmksXFxuIDk3NTpcXHRcXHRcXHRcXHRcXHQgICAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncyxcXG4gOTc2OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHZ4bGFuX2ZkYiAqZiwgdTMyIG5oaWQsXFxuIDk3NzpcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLFxcbiA5Nzg6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDk3OTpcXHR7XFxuIDk4MDpcXHRcXHRfX3UxNiBmZGJfZmxhZ3MgPSAobmRtX2ZsYWdzIFxcdTAwMjYgfk5URl9VU0UpO1xcbiA5ODE6XFx0XFx0c3RydWN0IHZ4bGFuX3Jkc3QgKnJkID0gTlVMTDtcXG4gOTgyOlxcdFxcdHN0cnVjdCB2eGxhbl9yZHN0IG9sZHJkO1xcbiA5ODM6XFx0XFx0aW50IG5vdGlmeSA9IDA7XFxuIDk4NDpcXHRcXHRpbnQgcmMgPSAwO1xcbiA5ODU6XFx0XFx0aW50IGVycjtcXG4gOTg2OlxcdFxcbiA5ODc6XFx0XFx0aWYgKG5oaWQgXFx1MDAyNlxcdTAwMjYgIXJjdV9hY2Nlc3NfcG9pbnRlcihmLVxcdTAwM2VuaCkpIHtcXG4gOTg4OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4gOTg5OlxcdFxcdFxcdFxcdCAgICAgICBcXFwiQ2Fubm90IHJlcGxhY2UgYW4gZXhpc3Rpbmcgbm9uIG5leHRob3AgZmRiIHdpdGggYSBuZXh0aG9wXFxcIik7XFxuIDk5MDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDk5MTpcXHRcXHR9XFxuIDk5MjpcXHRcXG4gOTkzOlxcdFxcdGlmIChuaGlkIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IE5MTV9GX0FQUEVORCkpIHtcXG4gOTk0OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4gOTk1OlxcdFxcdFxcdFxcdCAgICAgICBcXFwiQ2Fubm90IGFwcGVuZCB0byBhIG5leHRob3AgZmRiXFxcIik7XFxuIDk5NjpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDk5NzpcXHRcXHR9XFxuIDk5ODpcXHRcXG4gOTk5OlxcdFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cXHUwMDNlbmgpIFxcdTAwMjZcXHUwMDI2XFxuMTAwMDpcXHRcXHQgICAgIShzdGF0ZSBcXHUwMDI2IChOVURfUEVSTUFORU5UIHwgTlVEX05PQVJQKSkpIHtcXG4xMDAxOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkNhbm5vdCBtYWtlIGEgbmV4dGhvcCBmZGIgZHluYW1pY1xcXCIpO1xcbjEwMDI6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjEwMDM6XFx0XFx0fVxcbjEwMDQ6XFx0XFxuMTAwNTpcXHRcXHQvKiBEbyBub3QgYWxsb3cgYW4gZXh0ZXJuYWxseSBsZWFybmVkIGVudHJ5IHRvIHRha2Ugb3ZlciBhbiBlbnRyeSBhZGRlZFxcbjEwMDY6XFx0XFx0ICogYnkgdGhlIHVzZXIuXFxuMTAwNzpcXHRcXHQgKi9cXG4xMDA4OlxcdFxcdGlmICghKGZkYl9mbGFncyBcXHUwMDI2IE5URl9FWFRfTEVBUk5FRCkgfHxcXG4xMDA5OlxcdFxcdCAgICAhKGYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTlRGX1ZYTEFOX0FEREVEX0JZX1VTRVIpKSB7XFxuMTAxMDpcXHRcXHRcXHRpZiAoZi1cXHUwMDNlc3RhdGUgIT0gc3RhdGUpIHtcXG4xMDExOlxcdFxcdFxcdFxcdGYtXFx1MDAzZXN0YXRlID0gc3RhdGU7XFxuMTAxMjpcXHRcXHRcXHRcXHRub3RpZnkgPSAxO1xcbjEwMTM6XFx0XFx0XFx0fVxcbjEwMTQ6XFx0XFx0XFx0aWYgKGYtXFx1MDAzZWZsYWdzICE9IGZkYl9mbGFncykge1xcbjEwMTU6XFx0XFx0XFx0XFx0Zi1cXHUwMDNlZmxhZ3MgPSBmZGJfZmxhZ3M7XFxuMTAxNjpcXHRcXHRcXHRcXHRub3RpZnkgPSAxO1xcbjEwMTc6XFx0XFx0XFx0fVxcbjEwMTg6XFx0XFx0fVxcbjEwMTk6XFx0XFxuMTAyMDpcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgTkxNX0ZfUkVQTEFDRSkpIHtcXG4xMDIxOlxcdFxcdFxcdC8qIE9ubHkgY2hhbmdlIHVuaWNhc3RzICovXFxuMTAyMjpcXHRcXHRcXHRpZiAoIShpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihmLVxcdTAwM2VrZXkuZXRoX2FkZHIpIHx8XFxuMTAyMzpcXHRcXHRcXHQgICAgICBpc196ZXJvX2V0aGVyX2FkZHIoZi1cXHUwMDNla2V5LmV0aF9hZGRyKSkpIHtcXG4xMDI0OlxcdFxcdFxcdFxcdGlmIChuaGlkKSB7XFxuMTAyNTpcXHRcXHRcXHRcXHRcXHRyYyA9IHZ4bGFuX2ZkYl9uaF91cGRhdGUodnhsYW4sIGYsIG5oaWQsIGV4dGFjayk7XFxuMTAyNjpcXHRcXHRcXHRcXHRcXHRpZiAocmMgXFx1MDAzYyAwKVxcbjEwMjc6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjEwMjg6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xMDI5OlxcdFxcdFxcdFxcdFxcdHJjID0gdnhsYW5fZmRiX3JlcGxhY2UoZiwgaXAsIHBvcnQsIHZuaSxcXG4xMDMwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpZmluZGV4LCBcXHUwMDI2b2xkcmQpO1xcbjEwMzE6XFx0XFx0XFx0XFx0fVxcbjEwMzI6XFx0XFx0XFx0XFx0bm90aWZ5IHw9IHJjO1xcbjEwMzM6XFx0XFx0XFx0fSBlbHNlIHtcXG4xMDM0OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkNhbm5vdCByZXBsYWNlIG5vbi11bmljYXN0IGZkYiBlbnRyaWVzXFxcIik7XFxuMTAzNTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTAzNjpcXHRcXHRcXHR9XFxuMTAzNzpcXHRcXHR9XFxuMTAzODpcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgTkxNX0ZfQVBQRU5EKSBcXHUwMDI2XFx1MDAyNlxcbjEwMzk6XFx0XFx0ICAgIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihmLVxcdTAwM2VrZXkuZXRoX2FkZHIpIHx8XFxuMTA0MDpcXHRcXHQgICAgIGlzX3plcm9fZXRoZXJfYWRkcihmLVxcdTAwM2VrZXkuZXRoX2FkZHIpKSkge1xcbjEwNDE6XFx0XFx0XFx0cmMgPSB2eGxhbl9mZGJfYXBwZW5kKGYsIGlwLCBwb3J0LCB2bmksIGlmaW5kZXgsIFxcdTAwMjZyZCk7XFxuMTA0MjpcXHRcXG4xMDQzOlxcdFxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuMTA0NDpcXHRcXHRcXHRcXHRyZXR1cm4gcmM7XFxuMTA0NTpcXHRcXHRcXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgY3JlYXRlZClcXG4xMDQ2OlxcdFxcdFxcdFxcdCpjcmVhdGVkID0gdHJ1ZTtcXG4xMDQ3OlxcdFxcdFxcdG5vdGlmeSB8PSByYztcXG4xMDQ4OlxcdFxcdH1cXG4xMDQ5OlxcdFxcbjEwNTA6XFx0XFx0aWYgKG5kbV9mbGFncyBcXHUwMDI2IE5URl9VU0UpXFxuMTA1MTpcXHRcXHRcXHRXUklURV9PTkNFKGYtXFx1MDAzZXVwZGF0ZWQsIGppZmZpZXMpO1xcbjEwNTI6XFx0XFxuMTA1MzpcXHRcXHRpZiAobm90aWZ5KSB7XFxuMTA1NDpcXHRcXHRcXHRpZiAocmQgPT0gTlVMTClcXG4xMDU1OlxcdFxcdFxcdFxcdHJkID0gZmlyc3RfcmVtb3RlX3J0bmwoZik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUxOjAyLjY5MzY2NzYzNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDA2Njk2OTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipUaW1lIHRvIERpdmUgaW50byBgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGVgIGFuZCB0aGUgU3Vycm91bmRpbmdzKipcblxuQWxyaWdodCwgZ2l2ZW4gd2hhdCB3ZSdyZSB3b3JraW5nIG9uLCBpdCdzIHBydWRlbnQgdG8gZ2l2ZSBgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGVgIGEgZ29vZCwgaGFyZCBsb29rLiBCdXQsIEkgZG9uJ3Qgd2FudCB0byBqdXN0IGlzb2xhdGUgdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgY29kZSB0aGF0IGNhbGxzIGl0LCB0aGUgZnVuY3Rpb25zIGl0IHJlbGllcyBvbiwgYW5kIGVzcGVjaWFsbHkgYW55IHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhhdCBzcGVjaWZpYyB1cGRhdGU7IGl0J3MgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGhvdyB0aGUgRm9yd2FyZGluZyBEYXRhYmFzZSAoRkRCKSB1cGRhdGVzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgVlhMQU4gbW9kdWxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjYXRjaGluZyBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcywgZWRnZSBjYXNlcywgb3Igb3B0aW1pemF0aW9ucyB0aGF0IG1pZ2h0IGJlIG1pc3NlZCBpZiBJIG9ubHkgZm9jdXMgb24gdGhlIHRhcmdldCBmdW5jdGlvbi4gVGhpbmtpbmcgaG9saXN0aWNhbGx5IGFib3V0IGl0cyByZWxhdGlvbiB0byB0aGUgVlhMQU4gZGF0YXBhdGggaXMga2V5IGhlcmUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjA4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MTowNC43MDAzNjY5ODdaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDc1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDc1OlxcdFxcdHJldHVybiBlcnI7XFxuMTA3NjpcXHR9XFxuMTA3NzpcXHRcXG4xMDc4OlxcdHN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuMTA3OTpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCB1OCAqbWFjLCB1bmlvbiB2eGxhbl9hZGRyICppcCxcXG4xMDgwOlxcdFxcdFxcdFxcdFxcdCAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncyxcXG4xMDgxOlxcdFxcdFxcdFxcdFxcdCAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSxcXG4xMDgyOlxcdFxcdFxcdFxcdFxcdCAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsXFxuMTA4MzpcXHRcXHRcXHRcXHRcXHQgICBib29sIHN3ZGV2X25vdGlmeSwgYm9vbCAqY3JlYXRlZCxcXG4xMDg0OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xMDg1OlxcdHtcXG4xMDg2OlxcdFxcdF9fdTE2IGZkYl9mbGFncyA9IChuZG1fZmxhZ3MgXFx1MDAyNiB+TlRGX1VTRSk7XFxuMTA4NzpcXHRcXHRzdHJ1Y3QgdnhsYW5fZmRiICpmO1xcbjEwODg6XFx0XFx0aW50IHJjO1xcbjEwODk6XFx0XFxuMTA5MDpcXHRcXHQvKiBEaXNhbGxvdyByZXBsYWNlIHRvIGFkZCBhIG11bHRpY2FzdCBlbnRyeSAqL1xcbjEwOTE6XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IE5MTV9GX1JFUExBQ0UpIFxcdTAwMjZcXHUwMDI2XFxuMTA5MjpcXHRcXHQgICAgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKG1hYykgfHwgaXNfemVyb19ldGhlcl9hZGRyKG1hYykpKVxcbjEwOTM6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjEwOTQ6XFx0XFxuMTA5NTpcXHRcXHRuZXRkZXZfZGJnKHZ4bGFuLVxcdTAwM2VkZXYsIFxcXCJhZGQgJXBNIC1cXHUwMDNlICVwSVNcXFxcblxcXCIsIG1hYywgaXApO1xcbjEwOTY6XFx0XFx0cmMgPSB2eGxhbl9mZGJfY3JlYXRlKHZ4bGFuLCBtYWMsIGlwLCBzdGF0ZSwgcG9ydCwgc3JjX3ZuaSxcXG4xMDk3OlxcdFxcdFxcdFxcdCAgICAgIHZuaSwgaWZpbmRleCwgZmRiX2ZsYWdzLCBuaGlkLCBcXHUwMDI2ZiwgZXh0YWNrKTtcXG4xMDk4OlxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuMTA5OTpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuMTEwMDpcXHRcXG4xMTAxOlxcdFxcdHJjID0gdnhsYW5fZmRiX25vdGlmeSh2eGxhbiwgZiwgZmlyc3RfcmVtb3RlX3J0bmwoZiksIFJUTV9ORVdORUlHSCxcXG4xMTAyOlxcdFxcdFxcdFxcdCAgICAgIHN3ZGV2X25vdGlmeSwgZXh0YWNrKTtcXG4xMTAzOlxcdFxcdGlmIChyYylcXG4xMTA0OlxcdFxcdFxcdGdvdG8gZXJyX25vdGlmeTtcXG4xMTA1OlxcdFxcbjExMDY6XFx0XFx0aWYgKGNyZWF0ZWQpXFxuMTEwNzpcXHRcXHRcXHQqY3JlYXRlZCA9IHRydWU7XFxuMTEwODpcXHRcXG4xMTA5OlxcdFxcdHJldHVybiAwO1xcbjExMTA6XFx0XFxuMTExMTpcXHRlcnJfbm90aWZ5OlxcbjExMTI6XFx0XFx0dnhsYW5fZmRiX2Rlc3Ryb3kodnhsYW4sIGYsIGZhbHNlLCBmYWxzZSk7XFxuMTExMzpcXHRcXHRyZXR1cm4gcmM7XFxuMTExNDpcXHR9XFxuMTExNTpcXHRcXG4xMTE2OlxcdC8qIEFkZCBuZXcgZW50cnkgdG8gZm9yd2FyZGluZyB0YWJsZSAtLSBhc3N1bWVzIGxvY2sgaGVsZCAqL1xcbjExMTc6XFx0aW50IHZ4bGFuX2ZkYl91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuMTExODpcXHRcXHRcXHQgICAgIGNvbnN0IHU4ICptYWMsIHVuaW9uIHZ4bGFuX2FkZHIgKmlwLFxcbjExMTk6XFx0XFx0XFx0ICAgICBfX3UxNiBzdGF0ZSwgX191MTYgZmxhZ3MsXFxuMTEyMDpcXHRcXHRcXHQgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSxcXG4xMTIxOlxcdFxcdFxcdCAgICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLCB1MzIgbmhpZCxcXG4xMTIyOlxcdFxcdFxcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXFxuMTEyMzpcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xMTI0OlxcdHtcXG4xMTI1OlxcdFxcdHN0cnVjdCB2eGxhbl9mZGIgKmY7XFxuMTEyNjpcXHRcXG4xMTI3OlxcdFxcdGYgPSB2eGxhbl9maW5kX21hYyh2eGxhbiwgbWFjLCBzcmNfdm5pKTtcXG4xMTI4OlxcdFxcdGlmIChmKSB7XFxuMTEyOTpcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBOTE1fRl9FWENMKSB7XFxuMTEzMDpcXHRcXHRcXHRcXHRuZXRkZXZfZGJnKHZ4bGFuLVxcdTAwM2VkZXYsXFxuMTEzMTpcXHRcXHRcXHRcXHRcXHQgICBcXFwibG9zdCByYWNlIHRvIGNyZWF0ZSAlcE1cXFxcblxcXCIsIG1hYyk7XFxuMTEzMjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4xMTMzOlxcdFxcdFxcdH1cXG4xMTM0OlxcdFxcbjExMzU6XFx0XFx0XFx0cmV0dXJuIHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcodnhsYW4sIGlwLCBzdGF0ZSwgZmxhZ3MsIHBvcnQsXFxuMTEzNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgdm5pLCBpZmluZGV4LCBuZG1fZmxhZ3MsIGYsXFxuMTEzNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgbmhpZCwgc3dkZXZfbm90aWZ5LCBjcmVhdGVkLFxcbjExMzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGV4dGFjayk7XFxuMTEzOTpcXHRcXHR9IGVsc2Uge1xcbjExNDA6XFx0XFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBOTE1fRl9DUkVBVEUpKVxcbjExNDE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMTE0MjpcXHRcXG4xMTQzOlxcdFxcdFxcdHJldHVybiB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSh2eGxhbiwgbWFjLCBpcCwgc3RhdGUsIGZsYWdzLFxcbjExNDQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHBvcnQsIHNyY192bmksIHZuaSwgaWZpbmRleCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MDQuNzAwNjUyMjI3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3MDkzODUwNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHZ4bGFuX3ZuaWZpbHRlci5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIGB2eGxhbl92bmlmaWx0ZXIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbW9kdWxlIGJldHRlciwgYW5kIHRoZSBiZXN0IHdheSB0byBkbyB0aGF0IGlzIHRvIGxvb2sgYXQgdGhlIGNvZGUgZGlyZWN0bHkuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBhcm91bmQgbGluZXMgNTEyLCA3MjUsIGFuZCBwb3RlbnRpYWxseSBvdGhlciBhcmVhcyBuZWFyYnkuIFRoZXNlIGxpbmUgbnVtYmVycyBvZnRlbiBwaW5wb2ludCBrZXkgZnVuY3Rpb25zIG9yIGNyaXRpY2FsIGxvZ2ljIHdpdGhpbiB0aGUgbW9kdWxlLCBzbyB0aGF0J3Mgd2hlcmUgSSdsbCBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDY5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MTowNi40MTAwMzk3NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzEzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTEwOlxcdFxcdHJldHVybiBlcnI7XFxuIDUxMTpcXHR9XFxuIDUxMjpcXHRcXG4gNTEzOlxcdHN0YXRpYyBpbnQgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4gNTE0OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlLFxcbiA1MTU6XFx0XFx0XFx0XFx0XFx0ICB1bmlvbiB2eGxhbl9hZGRyICpncm91cCxcXG4gNTE2OlxcdFxcdFxcdFxcdFxcdCAgYm9vbCBjcmVhdGUsIGJvb2wgKmNoYW5nZWQsXFxuIDUxNzpcXHRcXHRcXHRcXHRcXHQgIGJvb2wgKmZkYl9jcmVhdGVkLFxcbiA1MTg6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDUxOTpcXHR7XFxuIDUyMDpcXHRcXHRzdHJ1Y3QgdnhsYW5fbmV0ICp2biA9IG5ldF9nZW5lcmljKHZ4bGFuLVxcdTAwM2VuZXQsIHZ4bGFuX25ldF9pZCk7XFxuIDUyMTpcXHRcXHRzdHJ1Y3QgdnhsYW5fcmRzdCAqZHN0ID0gXFx1MDAyNnZ4bGFuLVxcdTAwM2VkZWZhdWx0X2RzdDtcXG4gNTIyOlxcdFxcdHVuaW9uIHZ4bGFuX2FkZHIgKm5ld3JpcCA9IE5VTEwsICpvbGRyaXAgPSBOVUxMO1xcbiA1MjM6XFx0XFx0dW5pb24gdnhsYW5fYWRkciBvbGRfcmVtb3RlX2lwO1xcbiA1MjQ6XFx0XFx0aW50IHJldCA9IDA7XFxuIDUyNTpcXHRcXG4gNTI2OlxcdFxcdG1lbWNweShcXHUwMDI2b2xkX3JlbW90ZV9pcCwgXFx1MDAyNnZuaW5vZGUtXFx1MDAzZXJlbW90ZV9pcCwgc2l6ZW9mKG9sZF9yZW1vdGVfaXApKTtcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0XFx0LyogaWYgcGVyIHZuaSByZW1vdGUgaXAgaXMgbm90IHByZXNlbnQgdXNlIHZ4bGFuIGRldlxcbiA1Mjk6XFx0XFx0ICogZGVmYXVsdCBkc3QgcmVtb3RlIGlwIGZvciBmZGIgZW50cnlcXG4gNTMwOlxcdFxcdCAqL1xcbiA1MzE6XFx0XFx0aWYgKGdyb3VwIFxcdTAwMjZcXHUwMDI2ICF2eGxhbl9hZGRyX2FueShncm91cCkpIHtcXG4gNTMyOlxcdFxcdFxcdG5ld3JpcCA9IGdyb3VwO1xcbiA1MzM6XFx0XFx0fSBlbHNlIHtcXG4gNTM0OlxcdFxcdFxcdGlmICghdnhsYW5fYWRkcl9hbnkoXFx1MDAyNmRzdC1cXHUwMDNlcmVtb3RlX2lwKSlcXG4gNTM1OlxcdFxcdFxcdFxcdG5ld3JpcCA9IFxcdTAwMjZkc3QtXFx1MDAzZXJlbW90ZV9pcDtcXG4gNTM2OlxcdFxcdH1cXG4gNTM3OlxcdFxcbiA1Mzg6XFx0XFx0LyogaWYgb2xkIHJpcCBleGlzdHMsIGFuZCBubyBuZXdyaXAsXFxuIDUzOTpcXHRcXHQgKiBleHBsaWNpdGx5IGRlbGV0ZSBvbGQgcmlwXFxuIDU0MDpcXHRcXHQgKi9cXG4gNTQxOlxcdFxcdGlmICghbmV3cmlwIFxcdTAwMjZcXHUwMDI2ICF2eGxhbl9hZGRyX2FueShcXHUwMDI2b2xkX3JlbW90ZV9pcCkpXFxuIDU0MjpcXHRcXHRcXHRvbGRyaXAgPSBcXHUwMDI2b2xkX3JlbW90ZV9pcDtcXG4gNTQzOlxcdFxcbiA1NDQ6XFx0XFx0aWYgKCFuZXdyaXAgXFx1MDAyNlxcdTAwMjYgIW9sZHJpcClcXG4gNTQ1OlxcdFxcdFxcdHJldHVybiAwO1xcbiA1NDY6XFx0XFxuIDU0NzpcXHRcXHRpZiAoIWNyZWF0ZSBcXHUwMDI2XFx1MDAyNiBvbGRyaXAgXFx1MDAyNlxcdTAwMjYgbmV3cmlwIFxcdTAwMjZcXHUwMDI2IHZ4bGFuX2FkZHJfZXF1YWwob2xkcmlwLCBuZXdyaXApKVxcbiA1NDg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDU0OTpcXHRcXG4gNTUwOlxcdFxcdHJldCA9IHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeSh2eGxhbiwgdm5pbm9kZS1cXHUwMDNldm5pLFxcbiA1NTE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBvbGRyaXAsIG5ld3JpcCwgZmRiX2NyZWF0ZWQsXFxuIDU1MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGV4dGFjayk7XFxuIDU1MzpcXHRcXHRpZiAocmV0KVxcbiA1NTQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDU1NTpcXHRcXG4gNTU2OlxcdFxcdGlmIChncm91cClcXG4gNTU3OlxcdFxcdFxcdG1lbWNweShcXHUwMDI2dm5pbm9kZS1cXHUwMDNlcmVtb3RlX2lwLCBncm91cCwgc2l6ZW9mKHZuaW5vZGUtXFx1MDAzZXJlbW90ZV9pcCkpO1xcbiA1NTg6XFx0XFxuIDU1OTpcXHRcXHRpZiAodnhsYW4tXFx1MDAzZWRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MDYuNDEwMTc2NTE5WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5OTI1ODEzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFZYTEFOIFZOSSBBZGRpdGlvbiBDb2RlKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHNvbWV0aGluZyBtaWdodCBiZSBvZmYgd2l0aCB0aGUgYHZ4bGFuX3ZuaV9hZGRgIGZ1bmN0aW9uLiBHaXZlbiB0aGUgYXJlYSBJJ20gdHJvdWJsZXNob290aW5nLCBsaW5lIG51bWJlcnMgNzI1IHRocm91Z2ggNzgwIGluIHRoYXQgY29kZSBibG9jayBhcmUgc2NyZWFtaW5nIG91dCB0byBiZSBjaGVja2VkLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIHRoZXJlIGFuZCBzdGFydCBieSBydW5uaW5nIHRocm91Z2ggdGhhdCBzZWN0aW9uIHNsb3dseSwgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBsb2dpYyBmbGF3cywgbWVtb3J5IGxlYWtzLCBvciBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgVk5JIGFkZGl0aW9ucy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBhbmQgaG93IHRoZXkncmUgYmVpbmcgdXBkYXRlZC4gTGV0J3Mgc2VlIGlmIHRoaXMgaHVuY2ggcGFucyBvdXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzIGhhbmRsaW5nIHRob3NlIFZOSSBhZGQgcmVxdWVzdHMgZXhhY3RseSBhcyBkZWZpbmVkIGluIHRoZSBzcGVjLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA3MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MDguNDAyNzYwNDE0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjUsXG4gIFwiTGluZUNvdW50XCI6IDg1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MjU6XFx0XFxuIDcyNjpcXHRzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuIDcyNzpcXHRcXHRcXHRcXHQgc3RydWN0IHZ4bGFuX3ZuaV9ncm91cCAqdmcsXFxuIDcyODpcXHRcXHRcXHRcXHQgdTMyIHZuaSwgdW5pb24gdnhsYW5fYWRkciAqZ3JvdXAsXFxuIDcyOTpcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA3MzA6XFx0e1xcbiA3MzE6XFx0XFx0c3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlO1xcbiA3MzI6XFx0XFx0X19iZTMyIHYgPSBjcHVfdG9fYmUzMih2bmkpO1xcbiA3MzM6XFx0XFx0Ym9vbCBmZGJfY3JlYXRlZCA9IGZhbHNlO1xcbiA3MzQ6XFx0XFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuIDczNTpcXHRcXHRpbnQgZXJyID0gMDtcXG4gNzM2OlxcdFxcbiA3Mzc6XFx0XFx0aWYgKHZ4bGFuX3ZuaWZpbHRlcl9sb29rdXAodnhsYW4sIHYpKVxcbiA3Mzg6XFx0XFx0XFx0cmV0dXJuIHZ4bGFuX3ZuaV91cGRhdGUodnhsYW4sIHZnLCB2LCBncm91cCwgXFx1MDAyNmNoYW5nZWQsIGV4dGFjayk7XFxuIDczOTpcXHRcXG4gNzQwOlxcdFxcdGVyciA9IHZ4bGFuX3ZuaV9pbl91c2UodnhsYW4tXFx1MDAzZW5ldCwgdnhsYW4sIFxcdTAwMjZ2eGxhbi1cXHUwMDNlY2ZnLCB2KTtcXG4gNzQxOlxcdFxcdGlmIChlcnIpIHtcXG4gNzQyOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlZOSSBpbiB1c2VcXFwiKTtcXG4gNzQzOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDc0NDpcXHRcXHR9XFxuIDc0NTpcXHRcXG4gNzQ2OlxcdFxcdHZuaW5vZGUgPSB2eGxhbl92bmlfYWxsb2ModnhsYW4sIHYpO1xcbiA3NDc6XFx0XFx0aWYgKCF2bmlub2RlKVxcbiA3NDg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDc0OTpcXHRcXG4gNzUwOlxcdFxcdGVyciA9IHJoYXNodGFibGVfbG9va3VwX2luc2VydF9mYXN0KFxcdTAwMjZ2Zy1cXHUwMDNldm5pX2hhc2gsXFxuIDc1MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnZuaW5vZGUtXFx1MDAzZXZub2RlLFxcbiA3NTI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHZ4bGFuX3ZuaV9yaHRfcGFyYW1zKTtcXG4gNzUzOlxcdFxcdGlmIChlcnIpIHtcXG4gNzU0OlxcdFxcdFxcdHZ4bGFuX3ZuaV9mcmVlKHZuaW5vZGUpO1xcbiA3NTU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzU2OlxcdFxcdH1cXG4gNzU3OlxcdFxcbiA3NTg6XFx0XFx0X192eGxhbl92bmlfYWRkX2xpc3QodmcsIHZuaW5vZGUpO1xcbiA3NTk6XFx0XFxuIDc2MDpcXHRcXHRpZiAodnhsYW4tXFx1MDAzZWRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApXFxuIDc2MTpcXHRcXHRcXHR2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGUodnhsYW4sIHZuaW5vZGUsIGZhbHNlKTtcXG4gNzYyOlxcdFxcbiA3NjM6XFx0XFx0ZXJyID0gdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCh2eGxhbiwgdm5pbm9kZSwgZ3JvdXAsIHRydWUsIFxcdTAwMjZjaGFuZ2VkLFxcbiA3NjQ6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2ZmRiX2NyZWF0ZWQsIGV4dGFjayk7XFxuIDc2NTpcXHRcXHRpZiAoZXJyKVxcbiA3NjY6XFx0XFx0XFx0Z290byBlcnJfdm5pX2RlbDtcXG4gNzY3OlxcdFxcbiA3Njg6XFx0XFx0dnhsYW5fdm5pZmlsdGVyX25vdGlmeSh2eGxhbiwgdm5pbm9kZSwgUlRNX05FV1RVTk5FTCk7XFxuIDc2OTpcXHRcXG4gNzcwOlxcdFxcdHJldHVybiAwO1xcbiA3NzE6XFx0XFxuIDc3MjpcXHRlcnJfdm5pX2RlbDpcXG4gNzczOlxcdFxcdC8qIFVuZG8gb25seSB0aGUgZGVmYXVsdCBGREIgZW50cnkgdGhpcyBhZGQgaW5zdGFsbGVkLiAgQW4gZW50cnkgdGhhdFxcbiA3NzQ6XFx0XFx0ICogd2FzIGFscmVhZHkgdGhlcmUsIHdoZXRoZXIgYWRkZWQgb3V0IG9mIGJhbmQgb3IgYnkgYW5vdGhlciBWTkksIGlzXFxuIDc3NTpcXHRcXHQgKiBsZWZ0IGFsb25lLlxcbiA3NzY6XFx0XFx0ICpcXG4gNzc3OlxcdFxcdCAqIE5vIG1lbWJlcnNoaXAgaGFzIHRvIGJlIGdpdmVuIGJhY2s6IHZ4bGFuX2lnbXBfbGVhdmUoKSBpcyBnYXRlZCBvblxcbiA3Nzg6XFx0XFx0ICogdnhsYW5fYWRkcl9tdWx0aWNhc3QoXFx1MDAyNm9sZF9yZW1vdGVfaXApLCBhbmQgb2xkX3JlbW90ZV9pcCBpcyBhIGNvcHlcXG4gNzc5OlxcdFxcdCAqIG9mIHRoZSByZW1vdGUgSVAgb2YgYSBub2RlIHRoaXMgYWRkIGp1c3QgYWxsb2NhdGVkLCBzbyBpdCBpcyB6ZXJvLlxcbiA3ODA6XFx0XFx0ICpcXG4gNzgxOlxcdFxcdCAqIFRoZSBhZGRyZXNzIHBpY2tlZCBiZWxvdyBpcyB0aGUgb25lIHRoZSBlbnRyeSB3YXMgaW5zdGFsbGVkXFxuIDc4MjpcXHRcXHQgKiBhZ2FpbnN0LiAgSWYgdGhlIHJlcXVlc3QgY2FycmllZCBhIGdyb3VwLCB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKClcXG4gNzgzOlxcdFxcdCAqIGNvcGllZCBpdCBpbnRvIHZuaW5vZGUtXFx1MDAzZXJlbW90ZV9pcCBiZWZvcmUgdGhlIGpvaW4gY291bGQgZmFpbDsgaWZcXG4gNzg0OlxcdFxcdCAqIGl0IGRpZCBub3QsIHRoYXQgY29weSB3YXMgc2tpcHBlZCBhbmQgdGhlIGVudHJ5IHdlbnQgdG8gdGhlIGRldmljZVxcbiA3ODU6XFx0XFx0ICogZGVmYXVsdC5cXG4gNzg2OlxcdFxcdCAqL1xcbiA3ODc6XFx0XFx0aWYgKGZkYl9jcmVhdGVkKSB7XFxuIDc4ODpcXHRcXHRcXHR1bmlvbiB2eGxhbl9hZGRyICpyaXAgPSB2eGxhbl9hZGRyX2FueShcXHUwMDI2dm5pbm9kZS1cXHUwMDNlcmVtb3RlX2lwKSA/XFxuIDc4OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dnhsYW4tXFx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pcCA6XFxuIDc5MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dm5pbm9kZS1cXHUwMDNlcmVtb3RlX2lwO1xcbiA3OTE6XFx0XFxuIDc5MjpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZ4bGFuLVxcdTAwM2VoYXNoX2xvY2spO1xcbiA3OTM6XFx0XFx0XFx0X192eGxhbl9mZGJfZGVsZXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLCAqcmlwLFxcbiA3OTQ6XFx0XFx0XFx0XFx0XFx0ICAgdnhsYW4tXFx1MDAzZWNmZy5kc3RfcG9ydCwgdm5pbm9kZS1cXHUwMDNldm5pLFxcbiA3OTU6XFx0XFx0XFx0XFx0XFx0ICAgdm5pbm9kZS1cXHUwMDNldm5pLFxcbiA3OTY6XFx0XFx0XFx0XFx0XFx0ICAgdnhsYW4tXFx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pZmluZGV4LCB0cnVlKTtcXG4gNzk3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ2eGxhbi1cXHUwMDNlaGFzaF9sb2NrKTtcXG4gNzk4OlxcdFxcdH1cXG4gNzk5OlxcdFxcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXFx1MDAyNnZnLVxcdTAwM2V2bmlfaGFzaCwgXFx1MDAyNnZuaW5vZGUtXFx1MDAzZXZub2RlLFxcbiA4MDA6XFx0XFx0XFx0XFx0ICAgICAgIHZ4bGFuX3ZuaV9yaHRfcGFyYW1zKTtcXG4gODAxOlxcdFxcdF9fdnhsYW5fdm5pX2RlbF9saXN0KHZnLCB2bmlub2RlKTtcXG4gODAyOlxcdFxcdGlmICh2eGxhbi1cXHUwMDNlZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUClcXG4gODAzOlxcdFxcdFxcdHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZSh2eGxhbiwgdm5pbm9kZSwgdHJ1ZSk7XFxuIDgwNDpcXHRcXHRjYWxsX3JjdShcXHUwMDI2dm5pbm9kZS1cXHUwMDNlcmN1LCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZSk7XFxuIDgwNTpcXHRcXHRyZXR1cm4gZXJyO1xcbiA4MDY6XFx0fVxcbiA4MDc6XFx0XFxuIDgwODpcXHRzdGF0aWMgdm9pZCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4gODA5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MDguNDAyODY3NTU0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjczMDMwNzYzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWWExBTiBWTkkgQWRkaXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2hhdCdzIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGF0Y2g/IEFoLCByaWdodCwgZXJyb3IgaGFuZGxpbmcgZm9yIGB2eGxhbl92bmlfYWRkYC4gVGhlIHByZXZpb3VzIGNvZGUsIEkgcmVtZW1iZXIgbm93LCBkaWRuJ3QgcHJvcGVybHkgaGFuZGxlIGZhaWx1cmVzIGluIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYC4gSXQganVzdCBibGl0aGVseSBjb250aW51ZWQsIGxlYXZpbmcgcG90ZW50aWFsIG1lc3NlcyBpbiBpdHMgd2FrZS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cGAgY291bGQgZmFpbCwgYW5kIHRoZSBjb2RlIHdvdWxkIHByb2NlZWQgYXMgaWYgZXZlcnl0aGluZyB3YXMgaHVua3ktZG9yeSwgcG90ZW50aWFsbHkgbGVhdmluZyBhIHBhcnRpYWxseSBjcmVhdGVkIGB2bmlub2RlYCBoYW5naW5nIGFyb3VuZCwgb3IgYSBzdGFsZSBGREIgZW50cnkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSwgYnV0IEkgcmVjYWxsIHRoaXMgYmVpbmcgaW50cm9kdWNlZCBhIHdoaWxlIGJhY2s7IEkgbmVlZCB0byBjaGVjayB0aGUgZ2l0IGxvZyBvZiBgdnhsYW5fdm5pX2FkZGAgb3IgdGhlIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgaXQgdG8gY29uZmlybSBteSBzdXNwaWNpb24uXG5cblRoaXMgcGF0Y2gsIHRoZW4sIGFkZHMgY3J1Y2lhbCBlcnJvciBoYW5kbGluZy4gSWYgYHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXBgIGZhaWxzLCBpdCBjbGVhbnMgdXAgZXZlcnl0aGluZy4gVGhlIGF1dGhvciBpcyB0cmFja2luZyB3aGV0aGVyIGFuIEZEQiBlbnRyeSB3YXMgY3JlYXRlZCB2aWEgYGZkYl9jcmVhdGVkYCwgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYC4gSWYgaXQgKndhcyogY3JlYXRlZCwgaXQncyBkZWxldGVkIHdpdGggYF9fdnhsYW5fZmRiX2RlbGV0ZWAuIEFkZGl0aW9uYWxseSwgaXQgdGFrZXMgY2FyZSB0byByZW1vdmUgdGhlIGVudHJ5IGZyb20gYHZnLVx1MDAzZXZuaV9oYXNoYCwgZGVsZXRlIGl0IGZyb20gYF9fdnhsYW5fdm5pX2RlbF9saXN0YCwgZGVsZXRlIHRoZSB2bmlub2RlIHNvY2tldCBpZiBpdCdzIElGRl9VUCB1c2luZyBgdnhsYW5fdnNfYWRkX2RlbF92bmlub2RlYCwgYW5kIGZpbmFsbHksIGNhbGxzIFJDVSBmcmVlIG9uIGB2bmlub2RlYC4gU29saWQsIHByb3BlciBjbGVhbnVwLlxuXG5Ob3csIGxldCdzIHB1dCBvbiBteSBLTVNBTiBoYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwYXRjaCBpc24ndCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgcmVhZHMgdGhhdCBjb3VsZCBjYXVzZSBpc3N1ZXMuIEZpcnN0LCBhcmUgdGhlcmUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGJlIGFmZmVjdGVkPyBOby4gYGZkYl9jcmVhdGVkYCBpcyBhbiBpbnRlcm5hbCBib29sZWFuLCBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIHdpdGhpbiBgdnhsYW5fdm5pX2FkZGAsIGFuZCBpdCdzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAgYW5kIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlLiBHb29kLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gYmUgbWV0aWN1bG91cy4gTGV0J3Mgc2VlLi4uIGBib29sIGZkYl9jcmVhdGVkID0gZmFsc2U7YCBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuIEl0J3MgcGFzc2VkIHRvIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYCwgd2hpY2ggY2FsbHMgYHZ4bGFuX2ZkYl91cGRhdGVgIGJ5IHBhc3NpbmcgaXQgYXMgdGhlIGBjcmVhdGVkYCBhcmd1bWVudC4gSW4gYHZ4bGFuX2ZkYl91cGRhdGVgLCB0aGVyZSBhcmUgY29uZGl0aW9uYWwgYXNzaWdubWVudHMgdG8gYGNyZWF0ZWRgIHdpdGhpbiBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AgYW5kIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZWAsIGJ1dCBjcml0aWNhbGx5LCB0aGUgY29kZSBvbmx5ICp3cml0ZXMqIHRvIGAqY3JlYXRlZGAgaWYgdGhlIHBvaW50ZXIgaXMgbm9uLU5VTEwuIE5vIHJlYWRzLiBCYWNrIGluIGB2eGxhbl92bmlfYWRkYCwgaXQncyB1c2VkIGluIGFuIGBpZiAoZmRiX2NyZWF0ZWQpYCBibG9jay4gVGhpcyBjaGVja3MgaXMgc2FmZSBiZWNhdXNlIHRoZSB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCBhdCBsaW5lIDczMy4gU28gYGZkYl9jcmVhdGVkYCBpcyBzYWZlLlxuVGhlIG5leHQgcGxhY2UgSSB3YW50IHRvIHZlcmlmeSBpcyBoZXJlOiBgdW5pb24gdnhsYW5fYWRkciAqcmlwID0gdnhsYW5fYWRkcl9hbnkoXHUwMDI2dm5pbm9kZS1cdTAwM2VyZW1vdGVfaXApID8gXHUwMDI2dnhsYW4tXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX2lwIDogXHUwMDI2dm5pbm9kZS1cdTAwM2VyZW1vdGVfaXA7YC4gSSd2ZSB1c2VkIHRoaXMgcGF0dGVybiBhIGh1bmRyZWQgdGltZXMuICBgdm5pbm9kZWAgaXMgY3JlYXRlZCB3aXRoIGB2eGxhbl92bmlfYWxsb2ModnhsYW4sIHYpYC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgcmVtb3RlX2lwIGluIGB2eGxhbl92bmlfYWxsb2NgLiBMb29raW5nIGF0IGB2eGxhbl92bmlfYWxsb2NgLCBJIHNlZSBpdCBjYWxscyBga21lbV9jYWNoZV9hbGxvY2AuIEkgd2lsbCBuZWVkIHRvIHZlcmlmeSBpZiB0aGUgcmVtb3RlIGlwIGlzIGluaXRpYWxpemVkIHRoZXJlLlxuSSdtIHNhdGlzZmllZCB0aGF0IHRoaXMgcGF0Y2gsIGFzIGl0IHN0YW5kcywgc2VlbXMgY2xlYW4gZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBhdXRob3JzIHRob3VnaHQgYWJvdXQgdGhlIHBpdGZhbGxzIGFuZCB0b29rIGFwcHJvcHJpYXRlIG1lYXN1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgwNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUxOjE1LjcwNTk0NjA5NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY2ODYwOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnhsYW5fdm5pX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz02ODk9c3RhdGljIHZvaWQgX192eGxhbl92bmlfZGVsX2xpc3Qoc3RydWN0IHZ4bGFuX3ZuaV9ncm91cCAqdmcsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy02OTUtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6Njk2OnN0YXRpYyBzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnZ4bGFuX3ZuaV9hbGxvYyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy02OTctXFx0XFx0XFx0XFx0XFx0ICAgICAgX19iZTMyIHZuaSlcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jPTcyNj1zdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy03NDUtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6NzQ2OlxcdHZuaW5vZGUgPSB2eGxhbl92bmlfYWxsb2ModnhsYW4sIHYpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTc0Ny1cXHRpZiAoIXZuaW5vZGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUxOjE1Ljc2MjYzNjIyNVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNTAwMDYzNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGB2eGxhbl92bmlfYWxsb2NgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIGB2eGxhbl92bmlfYWxsb2NgLiBUaGUgZmFjdCB0aGF0IEknbSBldmVuICp0aGlua2luZyogYWJvdXQgdGhpcyBmdW5jdGlvbiBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIFZOSSAoVlhMQU4gTmV0d29yayBJZGVudGlmaWVyKSBhbGxvY2F0aW9uLCBhbmQgcHJvYmFibHkgaW4gdGhlIGNvbnRleHQgb2YgYSB2aXJ0dWFsaXplZCBuZXR3b3JrIGVudmlyb25tZW50LiBNeSBicmFpbidzIGFscmVhZHkgZ2VhcmluZyB1cCB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIHVuZGVybHlpbmcgbWVjaGFuaXNtczogaXMgdGhpcyBhIGNlbnRyYWxpemVkIGFsbG9jYXRvciwgb3IgYSBkaXN0cmlidXRlZCBvbmU/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGNvdW50ZXIsIGEgbW9yZSBjb21wbGV4IGJpdG1hcCwgb3IgcGVyaGFwcyBldmVuIHNvbWV0aGluZyBsZXZlcmFnaW5nIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGRhdGEgc3RydWN0dXJlIGZvciBvcHRpbWl6ZWQgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uP1xuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3Igc2NhbGFiaWxpdHkuIENhbiB0aGlzIGhhbmRsZSBhIG1hc3NpdmUgbnVtYmVyIG9mIFZOSXMsIGFuZCBob3cgYXJlIHdlIG1hbmFnaW5nIHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIGlzc3VlcyBpbiB0aGUgVk5JIHNwYWNlPyBJcyB0aGVyZSBhbnkgbG9naWMgZm9yIGhhbmRsaW5nIFZOSSBjb2xsaXNpb25zIG9yIGNvbmZsaWN0cywgcGFydGljdWxhcmx5IGluIGEgbXVsdGktdGVuYW50IGVudmlyb25tZW50PyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIHR5cGljYWwgY2hhbGxlbmdlczogcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpZiBtdWx0aXBsZSBwcm9jZXNzZXMgYXJlIHRyeWluZyB0byBhbGxvY2F0ZSBWTklzIGNvbmN1cnJlbnRseSwgYW5kIHRoZSBpbXBvcnRhbmNlIG9mIGF0b21pY2l0eSBhbmQgbG9ja2luZyBzdHJhdGVnaWVzLlxuXG5GdXJ0aGVybW9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVycm9yIGhhbmRsaW5nLiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGRlYWwgd2l0aCBhbGxvY2F0aW9uIGZhaWx1cmVzPyBEb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlLCB0aHJvdyBhbiBleGNlcHRpb24sIG9yIG1heWJlIGV2ZW4gc2lnbmFsIGFuIG91dC1vZi1WTklzIGNvbmRpdGlvbj8gSSdtIGxvb2tpbmcgZm9yIHJvYnVzdG5lc3MsIGhlcmUuIEhvdyB3ZWxsIGRvZXMgaXQgaGFuZGxlIGNvcm5lciBjYXNlcyBhbmQgZWRnZSBjb25kaXRpb25zPyBBcmUgdGhlcmUgYW55IHByb3RlY3Rpb25zIGFnYWluc3QgcmVzb3VyY2UgZXhoYXVzdGlvbiBvciBkZW5pYWwtb2Ytc2VydmljZT8gVGhpcyBpcyBjcml0aWNhbCBmb3IgcmVsaWFiaWxpdHkgaW4gYSBwcm9kdWN0aW9uIGVudmlyb25tZW50LiBJ4oCZbSBob3BpbmcgdG8gZmluZCBjbGV2ZXIgbG9naWMgdG8gaGFuZGxlIHRoZXNlIGlzc3VlcyB3aXRoaW4gdGhlIGZ1bmN0aW9uLlxuXG5BbmQgZmluYWxseSwgSSdtIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgaW50ZWdyYXRpb24gd2l0aCB0aGUgcmVzdCBvZiB0aGUgVlhMQU4gc3RhY2suIEhvdyBkb2VzIHRoaXMgYWxsb2NhdGlvbiBpbnRlcmZhY2Ugd2l0aCB0aGUgZW5jYXBzdWxhdGlvbiBhbmQgZGVjYXBzdWxhdGlvbiBsb2dpYz8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRhdGFiYXNlcyBvciBjb250cm9sIHBsYW5lIGNvbXBvbmVudHM/IFRoZSBlbGVnYW5jZSBvZiB0aGlzIGludGVncmF0aW9uIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgbmV0d29yayBwZXJmb3JtYW5jZS4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg4MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUxOjE5LjI2MjcwMjIyNVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjk2LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjk2OlxcdHN0YXRpYyBzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnZ4bGFuX3ZuaV9hbGxvYyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4gNjk3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIF9fYmUzMiB2bmkpXFxuIDY5ODpcXHR7XFxuIDY5OTpcXHRcXHRzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnZuaW5vZGU7XFxuIDcwMDpcXHRcXG4gNzAxOlxcdFxcdHZuaW5vZGUgPSBremFsbG9jX29iaigqdm5pbm9kZSk7XFxuIDcwMjpcXHRcXHRpZiAoIXZuaW5vZGUpXFxuIDcwMzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNzA0OlxcdFxcdHZuaW5vZGUtXFx1MDAzZXN0YXRzID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IHZ4bGFuX3ZuaV9zdGF0c19wY3B1KTtcXG4gNzA1OlxcdFxcdGlmICghdm5pbm9kZS1cXHUwMDNlc3RhdHMpIHtcXG4gNzA2OlxcdFxcdFxcdGtmcmVlKHZuaW5vZGUpO1xcbiA3MDc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDcwODpcXHRcXHR9XFxuIDcwOTpcXHRcXHR2bmlub2RlLVxcdTAwM2V2bmkgPSB2bmk7XFxuIDcxMDpcXHRcXHR2bmlub2RlLVxcdTAwM2VobGlzdDQudnhsYW4gPSB2eGxhbjtcXG4gNzExOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiA3MTI6XFx0XFx0dm5pbm9kZS1cXHUwMDNlaGxpc3Q2LnZ4bGFuID0gdnhsYW47XFxuIDcxMzpcXHQjZW5kaWZcXG4gNzE0OlxcdFxcbiA3MTU6XFx0XFx0cmV0dXJuIHZuaW5vZGU7XFxuIDcxNjpcXHR9XFxuIDcxNzpcXHRcXG4gNzE4OlxcdHN0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9mcmVlKHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSlcXG4gNzE5OlxcdHtcXG4gNzIwOlxcdFxcdGZyZWVfcGVyY3B1KHZuaW5vZGUtXFx1MDAzZXN0YXRzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MTkuMjYyODA1MDk1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMDI3NTQ0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2Ygdm5pbm9kZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIGB2bmlub2RlYCBzdHJ1Y3R1cmUgaXMgaGFuZGxlZCwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0J3MgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqKCp2bmlub2RlKWAuIFRoaXMgaXMga2V5IGJlY2F1c2UgdGhhdCBtZWFucyB0aGUgZW50aXJlIHN0cnVjdHVyZSBnZXRzIHplcm9lZCByaWdodCBvZmYgdGhlIGJhdCEgU28sIHRoYXQgaW1wb3J0YW50IGByZW1vdGVfaXBgIGZpZWxkPyBJdCBzdGFydHMgd2l0aCBhbGwgemVyb3MuIFRoYXQncyBnb29kIHRvIGtub3cuXG5cbk5vdywgaWYgYSBgZ3JvdXBgIGlzIHByb3ZpZGVkIGxhdGVyIG9uLCBgbWVtY3B5YCBpcyB1c2VkIHdpdGhpbiBgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cGAgdG8gY29weSB0aGUgSVAgYWRkcmVzcyBmcm9tIHRoZSBgZ3JvdXBgIGludG8gYHZuaW5vZGUtXHUwMDNlcmVtb3RlX2lwYC4gTWFrZXMgc2Vuc2UuXG5cbkJ1dCB3aGF0IGFib3V0IHRoYXQgYGFsbF96ZXJvc19tYWNgIHZhcmlhYmxlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdG9vLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyB3aGVyZSBpdCdzIGRlZmluZWQgYW5kIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gY2hlY2sgaG93IHRoYXQgdmFyaWFibGUgd29ya3MgdG8gc2VlIGlmIGl0J3MgcmVsYXRlZC4gSSdsbCBjaGVjayBpdHMgZGVmaW5pdGlvbiB0byBzZWUgaG93IGl0IGNhbiBhZmZlY3QgdGhlIG92ZXJhbGwgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzU3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MjEuNDY1NTYyMjc1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA3MjIzMDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbF96ZXJvc19tYWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz01Nz11bnNpZ25lZCBpbnQgdnhsYW5fbmV0X2lkO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy01OC1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NTk6Y29uc3QgdTggYWxsX3plcm9zX21hY1tFVEhfQUxFTiArIDJdO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy02MC1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgdnhsYW5fbGlua19vcHM7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9Mjc1NT1zdGF0aWMgbmV0ZGV2X3R4X3QgdnhsYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI4MzQtXFx0aWYgKGYgPT0gTlVMTCkge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyODM1OlxcdFxcdGYgPSB2eGxhbl9maW5kX21hY190eCh2eGxhbiwgYWxsX3plcm9zX21hYywgdm5pKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjgzNi1cXHRcXHRpZiAoZiA9PSBOVUxMKSB7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9Mzk5ND1zdGF0aWMgaW50IHZ4bGFuX2Rldl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQwMzUtXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ2eGxhbi1cXHUwMDNlaGFzaF9sb2NrKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NDAzNjpcXHRcXHRlcnIgPSB2eGxhbl9mZGJfdXBkYXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy00MDM3LVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZHN0LVxcdTAwM2VyZW1vdGVfaXAsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9NDQ0OD1zdGF0aWMgaW50IHZ4bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy00NDg4LVxcdFxcdGlmICghdnhsYW5fYWRkcl9hbnkoXFx1MDAyNmNvbmYucmVtb3RlX2lwKSkge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo0NDg5OlxcdFxcdFxcdGVyciA9IHZ4bGFuX2ZkYl91cGRhdGUodnhsYW4sIGFsbF96ZXJvc19tYWMsXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ0OTAtXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjb25mLnJlbW90ZV9pcCxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy00NTA1LVxcdFxcdGlmICghdnhsYW5fYWRkcl9hbnkoXFx1MDAyNmRzdC1cXHUwMDNlcmVtb3RlX2lwKSlcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NDUwNjpcXHRcXHRcXHRfX3Z4bGFuX2ZkYl9kZWxldGUodnhsYW4sIGFsbF96ZXJvc19tYWMsXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ1MDctXFx0XFx0XFx0XFx0XFx0ICAgZHN0LVxcdTAwM2VyZW1vdGVfaXAsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmg9MTI9ZXh0ZXJuIHVuc2lnbmVkIGludCB2eGxhbl9uZXRfaWQ7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oOjEzOmV4dGVybiBjb25zdCB1OCBhbGxfemVyb3NfbWFjW0VUSF9BTEVOICsgMl07XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oLTE0LWV4dGVybiBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgdnhsYW5fdm5pX3JodF9wYXJhbXM7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz00NzM9c3RhdGljIGludCB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnkoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIF9fYmUzMiB2bmksXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy00ODMtXFx0aWYgKHJlbW90ZV9pcCBcXHUwMDI2XFx1MDAyNiAhdnhsYW5fYWRkcl9hbnkocmVtb3RlX2lwKSkge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjQ4NDpcXHRcXHRlcnIgPSB2eGxhbl9mZGJfdXBkYXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTQ4NS1cXHRcXHRcXHRcXHQgICAgICAgcmVtb3RlX2lwLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNTAwLVxcdGlmIChvbGRfcmVtb3RlX2lwIFxcdTAwMjZcXHUwMDI2ICF2eGxhbl9hZGRyX2FueShvbGRfcmVtb3RlX2lwKSkge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjUwMTpcXHRcXHRfX3Z4bGFuX2ZkYl9kZWxldGUodnhsYW4sIGFsbF96ZXJvc19tYWMsXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNTAyLVxcdFxcdFxcdFxcdCAgICpvbGRfcmVtb3RlX2lwLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NjE0PXN0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9kZWxldGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy02MjUtXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ2eGxhbi1cXHUwMDNlaGFzaF9sb2NrKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo2MjY6XFx0XFx0X192eGxhbl9mZGJfZGVsZXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTYyNy1cXHRcXHRcXHRcXHQgICAodnhsYW5fYWRkcl9hbnkoXFx1MDAyNnZuaW5vZGUtXFx1MDAzZXJlbW90ZV9pcCkgP1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NzI2PXN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTc5Mi1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZ4bGFuLVxcdTAwM2VoYXNoX2xvY2spO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjc5MzpcXHRcXHRfX3Z4bGFuX2ZkYl9kZWxldGUodnhsYW4sIGFsbF96ZXJvc19tYWMsICpyaXAsXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNzk0LVxcdFxcdFxcdFxcdCAgIHZ4bGFuLVxcdTAwM2VjZmcuZHN0X3BvcnQsIHZuaW5vZGUtXFx1MDAzZXZuaSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MjIuODcyNzkzNDg3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3MzU5NTMzODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2eGxhbiBGREIgRGVsZXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIGBhbGxfemVyb3NfbWFjYCBpcyBqdXN0IGEgQlNTLWJhc2VkLCB6ZXJvLWluaXRpYWxpemVkIGdsb2JhbCBhcnJheS4gTm90aGluZyBpbmhlcmVudGx5IGludGVyZXN0aW5nIHRoZXJlLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGlzIGBfX3Z4bGFuX2ZkYl9kZWxldGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiB3aGF0IGFyZ3VtZW50cyBkb2VzIGl0IHRha2UsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBkb2VzIGl0IHBvdGVudGlhbGx5IHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBMb29rcyBsaWtlIEkgZG9uJ3QgbmVlZCB0byB3b3JyeS4gRnJvbSB0aGUgYXJndW1lbnQgbGlzdCwgaXQganVzdCBzZWVtcyB0byBiZSB1c2luZyBNQUMsIElQLCBwb3J0LCBzb3VyY2UgVk5JLCBWTkksIGlmaW5kZXgsIGFuZCBhIGJvb2xlYW4gdG8gZGVsZXRlIGFuIEZEQiBlbnRyeS4gQWxsIGtleSBwYXJhbWV0ZXJzLlxuXG5OZXh0IHVwLCB0aGlzIGBjYWxsX3JjdShcdTAwMjZ2bmlub2RlLVx1MDAzZXJjdSwgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUpO2AgY2FsbC4gQWxyaWdodCwgYGNhbGxfcmN1YCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBncmFjZSBwZXJpb2QgZm9yIG1lbW9yeSByZWNsYW1hdGlvbi4gR29vZC4gTm93LCB0aGUgbWVhdCBvZiBpdDogYHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhpcyBmdW5jdGlvbiBpcyB0aGUgb25lIGFjdHVhbGx5IGZyZWVpbmcgdGhlIGB2bmlub2RlYCBzdHJ1Y3R1cmUuIFNvLCB0aW1lIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZWAgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2l0aCBob3cgaXQgbWFuYWdlcyB0aGlzIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MTYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MjUuNjA4NzUwMTc3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzkwNTAzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2eGxhbl92bmlfbm9kZV9yY3VfZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC92eGxhbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NzE4PXN0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9mcmVlKHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTcyMy1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo3MjQ6c3RhdGljIHZvaWQgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTcyNS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz03MjY9c3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtODAzLVxcdFxcdHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZSh2eGxhbiwgdm5pbm9kZSwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6ODA0OlxcdGNhbGxfcmN1KFxcdTAwMjZ2bmlub2RlLVxcdTAwM2VyY3UsIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04MDUtXFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTgwNy1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo4MDg6c3RhdGljIHZvaWQgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtODA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jPTgxNj1zdGF0aWMgaW50IHZ4bGFuX3ZuaV9kZWwoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04NDctXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6ODQ4OlxcdGNhbGxfcmN1KFxcdTAwMjZ2bmlub2RlLVxcdTAwM2VyY3UsIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04NDktXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz05NDI9dm9pZCB2eGxhbl92bmlncm91cF91bmluaXQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy05NTYtXFx0XFx0dnhsYW5fdm5pZmlsdGVyX25vdGlmeSh2eGxhbiwgdiwgUlRNX0RFTFRVTk5FTCk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6OTU3OlxcdFxcdGNhbGxfcmN1KFxcdTAwMjZ2LVxcdTAwM2VyY3UsIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy05NTgtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MToyNS42ODI2NjY5NjVaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjQyMjk5MDY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZXcgUmlza3MgSW50cm9kdWNlZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTGluZSA4MDggYWxyZWFkeSBoYXMgdGhlIGB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZWAgZnVuY3Rpb24gaW4gZXhpc3RpbmcgY29kZS4gVGhlIGVycm9yIHBhdGggaW4gYHZ4bGFuX3ZuaV9hZGRgIGlzIGNvcnJlY3RseSB1c2luZyBgY2FsbF9yY3VgIGFmdGVyIGB2bmlub2RlYCBoYXMgYmVlbiBleHBvc2VkIHRvIFJDVSByZWFkZXJzIOKAkyB0aGlzIHByZXZlbnRzIGEgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGlzIGdyZWF0LiBJ4oCZbSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMsIGJ1dCB0aG9zZSBhcmUgY292ZXJlZCBieSBLQVNBTi9MT0NLREVQL0tDU0FOLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG9yIGV4cG9zZSBuZXcgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3Mgc3BlY2lmaWNhbGx5IGRldGVjdGFibGUgYnkgS01TQU4/XG5cbkxldOKAmXMgcmV2aWV3IHRoZSBLTVNBTiBjcml0ZXJpYTpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U6KiogTm9wZSwgbm90aGluZyBpcyBiZWluZyBjb3BpZWQgb3V0LlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogVGhlIGBib29sIGZkYl9jcmVhdGVkID0gZmFsc2U7YCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgdGhlIGBjcmVhdGVkYCBwb2ludGVyIGlzICp3cml0dGVuKiB0bywgYW5kIGNoZWNrZWQgKGBpZiAoY3JlYXRlZClgKSBiZWZvcmUgdXNlIGFuZCBpbiBgdnhsYW5fdm5pX2FkZGAgd2l0aCB0aGUgZXhwbGljaXRseSBpbml0aWFsaXplZCB2YXJpYWJsZS4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gYnJhbmNoaW5nIGhlcmUuXG4zLiAgKipBbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgcG90ZW50aWFsbHkgcmVhZCBsYXRlcjoqKiBUaGUgYWxsb2NhdGlvbnMgdXNlIGBremFsbG9jX29iamAsIGFuZCBubyBuZXcgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGJ5IHRoaXMgcGF0Y2gsIHNvIHdl4oCZcmUgZ29vZC5cbjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RocyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzOioqIE5vIGNoYW5nZXMgdG8gYW55IG9mIHRob3NlLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBjbGVhcmx5IGBmYWxzZWAuXG5cbk5vdywgZm9yIGEgY2FyZWZ1bCBjb250cmFzdCB3aXRoIEtBU0FOOiB0aGlzIHBhdGNoIGFkZHMgYW4gZXJyb3ItdW53aW5kIHBhdGggdG8gYHZ4bGFuX3ZuaV9hZGRgIHRoYXQgZW5zdXJlcyB0aGUgY3JlYXRlZCBkZWZhdWx0IEZEQiBlbnRyeSBpcyBkZWxldGVkLCB0aGUgYHZuaW5vZGVgIGlzIHVubGlua2VkLCBhbmQgZnJlZWQgd2l0aCBSQ1UsIGVuc3VyaW5nIHRoZSBjcmVhdGVkIEZEQiBlbnRyeSBpcyBkZWxldGVkLiBQb3RlbnRpYWwgaXNzdWVzIHdpdGggbWVtb3J5IHNhZmV0eSBvciBjb25jdXJyZW5jeSAoVUFGLCBkb3VibGUtZnJlZSwgZXRjLikgKmhlcmUqIGFyZSBhbGwgdGhpbmdzIEtBU0FOIGFuZCBMT0NLREVQIHdvdWxkIGNhdGNoLiBUaGF0IGNvdmVycyBsaWZlY3ljbGUgbWFuYWdlbWVudCwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgbG9ja2luZyByZWxhdGVkIHRvIGB2eGxhbi1cdTAwM2VoYXNoX2xvY2tgLlxuXG5LTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGRlYWxzIHdpdGggcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBwYWdlcykgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gV2UgKmRvKiBoYXZlIHRoYXQgYGJvb2wgKmNyZWF0ZWRgIHBhcmFtZXRlciBhbmQgdGhlIGBmZGJfY3JlYXRlZGAgbG9jYWwgdmFyaWFibGUgaW4gYHZ4bGFuX3ZuaV9hZGRgLCBidXQgaXQncyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGFuZCBvbmx5IGV2ZXIgd3JpdHRlbiB0byB0aHJvdWdoIHRoZSBwb2ludGVyLCBub3QgcmVhZCBvciBsZWFrZWQuIFNvLCBubyBLTVNBTi1zcGVjaWZpYyByaXNrcyBhcmUgcHJlc2VudC4gVGhlIHZhcmlhYmxlIGlzIHdyaXR0ZW4gdG8sIGFuZCBuZXZlciByZWFkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uXG5cbkFsbCBjbGVhci4gSSdtIHNhdGlzZmllZC4gVGltZSBmb3IgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MDEsIk91dHB1dFRva2VucyI6MzExLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUxOjMyLjEwNTY2MDY0M1oiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvci11bndpbmQgbG9naWMgdG8gdnhsYW5fdm5pX2FkZCgpIGlmIHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKSBmYWlscywgaW50cm9kdWNpbmcgYSBib29sZWFuIG91dC1wYXJhbWV0ZXIgKCdjcmVhdGVkJyAvICdmZGJfY3JlYXRlZCcpIGFjcm9zcyB2eGxhbl9mZGJfdXBkYXRlKCkgYW5kIGhlbHBlcnMgdG8gdHJhY2sgd2hldGhlciBhbiBGREIgZW50cnkgd2FzIGNyZWF0ZWQgc28gaXQgY2FuIGJlIHJvbGxlZCBiYWNrLlxcblxcbjEuIEtBU0FOIC8gTE9DS0RFUCBBcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggbW9kaWZpZXMgY2xlYW51cCBwYXRocyBhbmQgb2JqZWN0IGxpZmVjeWNsZSAodW53aW5kaW5nIGhhc2h0YWJsZSBpbnNlcnRpb24sIGxpc3QgYWRkaXRpb24sIHNvY2tldCBzdGF0ZSwgYW5kIHNjaGVkdWxpbmcgUkNVIGRlc3RydWN0aW9uIG9mIHZuaW5vZGUsIHBsdXMgZGVsZXRpbmcgRkRCIGVudHJpZXMgdW5kZXIgaGFzaF9sb2NrKS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgaGVyZSAoZS5nLiB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGxpc3QgY29ycnVwdGlvbiwgb3IgbG9ja2luZyBkaXNjcmVwYW5jaWVzKSBhcmUgYWRkcmVzc2VkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLlxcbjIuIEtNU0FOIEFwcGxpY2FiaWxpdHk6IEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGFuZCBpbmZvLWxlYWtzLiBUaGUgbmV3bHkgaW50cm9kdWNlZCB2YXJpYWJsZSAnYm9vbCBmZGJfY3JlYXRlZCA9IGZhbHNlOycgaW4gdnhsYW5fdm5pX2FkZCgpIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2ssIGFuZCB0aGUgY2FsbGVlIGZ1bmN0aW9ucyBvbmx5IGNvbmRpdGlvbmFsbHkgd3JpdGUgJypjcmVhdGVkID0gdHJ1ZScgd2l0aG91dCByZWFkaW5nIGZyb20gaXQgdW5pbml0aWFsaXplZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGhlYXAgYWxsb2NhdGlvbnMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgY3JlYXRlZCwgYW5kIG5vIGJyYW5jaGluZyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIGFuZCBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yLXVud2luZCBsb2dpYyB0byB2eGxhbl92bmlfYWRkKCkgaWYgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpIGZhaWxzLCBpbnRyb2R1Y2luZyBhIGJvb2xlYW4gb3V0LXBhcmFtZXRlciAoJ2NyZWF0ZWQnIC8gJ2ZkYl9jcmVhdGVkJykgYWNyb3NzIHZ4bGFuX2ZkYl91cGRhdGUoKSBhbmQgaGVscGVycyB0byB0cmFjayB3aGV0aGVyIGFuIEZEQiBlbnRyeSB3YXMgY3JlYXRlZCBzbyBpdCBjYW4gYmUgcm9sbGVkIGJhY2suXFxuXFxuMS4gS0FTQU4gLyBMT0NLREVQIEFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBtb2RpZmllcyBjbGVhbnVwIHBhdGhzIGFuZCBvYmplY3QgbGlmZWN5Y2xlICh1bndpbmRpbmcgaGFzaHRhYmxlIGluc2VydGlvbiwgbGlzdCBhZGRpdGlvbiwgc29ja2V0IHN0YXRlLCBhbmQgc2NoZWR1bGluZyBSQ1UgZGVzdHJ1Y3Rpb24gb2Ygdm5pbm9kZSwgcGx1cyBkZWxldGluZyBGREIgZW50cmllcyB1bmRlciBoYXNoX2xvY2spLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBoZXJlIChlLmcuIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgbGlzdCBjb3JydXB0aW9uLCBvciBsb2NraW5nIGRpc2NyZXBhbmNpZXMpIGFyZSBhZGRyZXNzZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuXFxuMi4gS01TQU4gQXBwbGljYWJpbGl0eTogS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgYW5kIGluZm8tbGVha3MuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIHZhcmlhYmxlICdib29sIGZkYl9jcmVhdGVkID0gZmFsc2U7JyBpbiB2eGxhbl92bmlfYWRkKCkgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIG9uIHRoZSBzdGFjaywgYW5kIHRoZSBjYWxsZWUgZnVuY3Rpb25zIG9ubHkgY29uZGl0aW9uYWxseSB3cml0ZSAnKmNyZWF0ZWQgPSB0cnVlJyB3aXRob3V0IHJlYWRpbmcgZnJvbSBpdCB1bmluaXRpYWxpemVkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgaGVhcCBhbGxvY2F0aW9ucyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBjcmVhdGVkLCBhbmQgbm8gYnJhbmNoaW5nIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgYW5kIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtqk9h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 22:01:55 +0000 UTC FinishedAt: 2026-09-11 22:51:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "ef39fca8508597fa565cf2be72a884a712fb98af", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VXLAN", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "ef39fca8508597fa565cf2be72a884a712fb98af", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VXLAN", "INET" ], "series_id": "61645882-9d5b-4310-89e2-4f3a98eee765" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vxlan_vni_add", "vxlan_fdb_update", "vxlan_fdb_update_existing", "vxlan_fdb_update_create", "vxlan_vnifilter_process" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "ef39fca8508597fa565cf2be72a884a712fb98af", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZYTEFOJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2eGxhbl92bmlfYWRkJiMzNDssCiAgICAmIzM0O3Z4bGFuX2ZkYl91cGRhdGUmIzM0OywKICAgICYjMzQ7dnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyYjMzQ7LAogICAgJiMzNDt2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2eGxhbl92bmlmaWx0ZXJfcHJvY2VzcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3ItdW53aW5kIGxvZ2ljIHRvIHZ4bGFuX3ZuaV9hZGQoKSBpZiB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKCkgZmFpbHMsIGludHJvZHVjaW5nIGEgYm9vbGVhbiBvdXQtcGFyYW1ldGVyICgmIzM5O2NyZWF0ZWQmIzM5OyAvICYjMzk7ZmRiX2NyZWF0ZWQmIzM5OykgYWNyb3NzIHZ4bGFuX2ZkYl91cGRhdGUoKSBhbmQgaGVscGVycyB0byB0cmFjayB3aGV0aGVyIGFuIEZEQiBlbnRyeSB3YXMgY3JlYXRlZCBzbyBpdCBjYW4gYmUgcm9sbGVkIGJhY2suXG5cbjEuIEtBU0FOIC8gTE9DS0RFUCBBcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggbW9kaWZpZXMgY2xlYW51cCBwYXRocyBhbmQgb2JqZWN0IGxpZmVjeWNsZSAodW53aW5kaW5nIGhhc2h0YWJsZSBpbnNlcnRpb24sIGxpc3QgYWRkaXRpb24sIHNvY2tldCBzdGF0ZSwgYW5kIHNjaGVkdWxpbmcgUkNVIGRlc3RydWN0aW9uIG9mIHZuaW5vZGUsIHBsdXMgZGVsZXRpbmcgRkRCIGVudHJpZXMgdW5kZXIgaGFzaF9sb2NrKS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgaGVyZSAoZS5nLiB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGxpc3QgY29ycnVwdGlvbiwgb3IgbG9ja2luZyBkaXNjcmVwYW5jaWVzKSBhcmUgYWRkcmVzc2VkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLlxuMi4gS01TQU4gQXBwbGljYWJpbGl0eTogS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgYW5kIGluZm8tbGVha3MuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIHZhcmlhYmxlICYjMzk7Ym9vbCBmZGJfY3JlYXRlZCA9IGZhbHNlOyYjMzk7IGluIHZ4bGFuX3ZuaV9hZGQoKSBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrLCBhbmQgdGhlIGNhbGxlZSBmdW5jdGlvbnMgb25seSBjb25kaXRpb25hbGx5IHdyaXRlICYjMzk7KmNyZWF0ZWQgPSB0cnVlJiMzOTsgd2l0aG91dCByZWFkaW5nIGZyb20gaXQgdW5pbml0aWFsaXplZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGhlYXAgYWxsb2NhdGlvbnMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgY3JlYXRlZCwgYW5kIG5vIGJyYW5jaGluZyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhbmQgZG9lcyBub3QganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWWExBTiBkcml2ZXIgKHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHJ0bmV0bGluayBjb21tYW5kcyBzdWNoIGFzIFJUTV9ORVdUVU5ORUwgYW5kIFJUTV9ORVdORUlHSCkuIEl0IHVwZGF0ZXMgdGhlIEZEQiB1cGRhdGUgbG9naWMgYWNyb3NzIHZ4bGFuX2ZkYl91cGRhdGUoKSwgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUoKSwgYW5kIHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcoKSB0byB0cmFjayB3aGVuIGFuIGVudHJ5IGlzIG5ld2x5IGNyZWF0ZWQsIGFuZCBpbXBsZW1lbnRzIGFuIGVycm9yIHJvbGxiYWNrIHBhdGggaW4gdnhsYW5fdm5pX2FkZCgpIHRoYXQgdGVhcnMgZG93biBGREIgZW50cmllcywgdW5saW5rcyBWTkkgbm9kZXMsIGFuZCBmcmVlcyBtZW1vcnkgdmlhIFJDVSBpZiB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKCkgZmFpbHMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgYWx0ZXJpbmcgc3RhdGUgbWFuYWdlbWVudCwgc3luY2hyb25pemF0aW9uLCBhbmQgZXJyb3ItaGFuZGxpbmcgaW4gdGhlIHZpcnR1YWwgbmV0d29ya2luZyBzdWJzeXN0ZW0sIG1ha2luZyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2NiOTcxZmU1NWFkNWM5MThjY2M5OWFiNTI4NDQ5NTg4NWVjOTViZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDIyOjQ5OjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1xuaW5kZXggYmU5NWFmNjRhMWY1MS4uMDY1MmRjNDcxZGNhNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jXG5AQCAtOTc0LDcgJiM0Mzs5NzQsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdFx0XHQgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgdm5pLFxuIFx0XHRcdFx0ICAgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB2eGxhbl9mZGIgKmYsIHUzMiBuaGlkLFxuLVx0XHRcdFx0ICAgICBib29sIHN3ZGV2X25vdGlmeSxcbiYjNDM7XHRcdFx0XHQgICAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0X191MTYgZmRiX2ZsYWdzID0gKG5kbV9mbGFncyBcdTAwMjYgfk5URl9VU0UpO1xuQEAgLTEwNDIsNiAmIzQzOzEwNDIsOCBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXG4gXHRcdGlmIChyYyBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHRpZiAocmMgXHUwMDI2XHUwMDI2IGNyZWF0ZWQpXG4mIzQzO1x0XHRcdCpjcmVhdGVkID0gdHJ1ZTtcbiBcdFx0bm90aWZ5IHw9IHJjO1xuIFx0fVxuIFxuQEAgLTEwNzgsNyAmIzQzOzEwODAsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0XHRcdFx0ICAgX191MTYgc3RhdGUsIF9fdTE2IGZsYWdzLFxuIFx0XHRcdFx0ICAgX19iZTE2IHBvcnQsIF9fYmUzMiBzcmNfdm5pLCBfX2JlMzIgdm5pLFxuIFx0XHRcdFx0ICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLCB1MzIgbmhpZCxcbi1cdFx0XHRcdCAgIGJvb2wgc3dkZXZfbm90aWZ5LFxuJiM0MztcdFx0XHRcdCAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdF9fdTE2IGZkYl9mbGFncyA9IChuZG1fZmxhZ3MgXHUwMDI2IH5OVEZfVVNFKTtcbkBAIC0xMTAxLDYgJiM0MzsxMTAzLDkgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdGlmIChyYylcbiBcdFx0Z290byBlcnJfbm90aWZ5O1xuIFxuJiM0MztcdGlmIChjcmVhdGVkKVxuJiM0MztcdFx0KmNyZWF0ZWQgPSB0cnVlO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIFxuIGVycl9ub3RpZnk6XG5AQCAtMTExNCw3ICYjNDM7MTExOSw3IEBAIGludCB2eGxhbl9mZGJfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0XHQgICAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncyxcbiBcdFx0ICAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHNyY192bmksIF9fYmUzMiB2bmksXG4gXHRcdCAgICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLCB1MzIgbmhpZCxcbi1cdFx0ICAgICBib29sIHN3ZGV2X25vdGlmeSxcbiYjNDM7XHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXG4gXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCB2eGxhbl9mZGIgKmY7XG5AQCAtMTEyOSw3ICYjNDM7MTEzNCw4IEBAIGludCB2eGxhbl9mZGJfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFxuIFx0XHRyZXR1cm4gdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyh2eGxhbiwgaXAsIHN0YXRlLCBmbGFncywgcG9ydCxcbiBcdFx0XHRcdFx0XHQgdm5pLCBpZmluZGV4LCBuZG1fZmxhZ3MsIGYsXG4tXHRcdFx0XHRcdFx0IG5oaWQsIHN3ZGV2X25vdGlmeSwgZXh0YWNrKTtcbiYjNDM7XHRcdFx0XHRcdFx0IG5oaWQsIHN3ZGV2X25vdGlmeSwgY3JlYXRlZCxcbiYjNDM7XHRcdFx0XHRcdFx0IGV4dGFjayk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAoIShmbGFncyBcdTAwMjYgTkxNX0ZfQ1JFQVRFKSlcbiBcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbkBAIC0xMTM3LDcgJiM0MzsxMTQzLDcgQEAgaW50IHZ4bGFuX2ZkYl91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdHJldHVybiB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSh2eGxhbiwgbWFjLCBpcCwgc3RhdGUsIGZsYWdzLFxuIFx0XHRcdFx0XHQgICAgICAgcG9ydCwgc3JjX3ZuaSwgdm5pLCBpZmluZGV4LFxuIFx0XHRcdFx0XHQgICAgICAgbmRtX2ZsYWdzLCBuaGlkLCBzd2Rldl9ub3RpZnksXG4tXHRcdFx0XHRcdCAgICAgICBleHRhY2spO1xuJiM0MztcdFx0XHRcdFx0ICAgICAgIGNyZWF0ZWQsIGV4dGFjayk7XG4gXHR9XG4gfVxuIFxuQEAgLTEyNzUsNyAmIzQzOzEyODEsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRlcnIgPSB2eGxhbl9mZGJfdXBkYXRlKHZ4bGFuLCBhZGRyLCBcdTAwMjZpcCwgbmRtLVx1MDAzZW5kbV9zdGF0ZSwgZmxhZ3MsXG4gXHRcdFx0ICAgICAgIHBvcnQsIHNyY192bmksIHZuaSwgaWZpbmRleCxcbiBcdFx0XHQgICAgICAgbmRtLVx1MDAzZW5kbV9mbGFncyB8IE5URl9WWExBTl9BRERFRF9CWV9VU0VSLFxuLVx0XHRcdCAgICAgICBuaGlkLCB0cnVlLCBleHRhY2spO1xuJiM0MztcdFx0XHQgICAgICAgbmhpZCwgdHJ1ZSwgTlVMTCwgZXh0YWNrKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4gXG4gXHRpZiAoIWVycilcbkBAIC0xNDkxLDcgJiM0MzsxNDk3LDggQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIHZ4bGFuX3Nub29wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRcdCB2eGxhbi1cdTAwM2VjZmcuZHN0X3BvcnQsXG4gXHRcdFx0XHRcdCB2bmksXG4gXHRcdFx0XHRcdCB2eGxhbi1cdTAwM2VkZWZhdWx0X2RzdC5yZW1vdGVfdm5pLFxuLVx0XHRcdFx0XHQgaWZpbmRleCwgTlRGX1NFTEYsIDAsIHRydWUsIE5VTEwpO1xuJiM0MztcdFx0XHRcdFx0IGlmaW5kZXgsIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMLFxuJiM0MztcdFx0XHRcdFx0IE5VTEwpO1xuIFx0XHRzcGluX3VubG9jayhcdTAwMjZ2eGxhbi1cdTAwM2VoYXNoX2xvY2spO1xuIFx0fVxuIFxuQEAgLTQwMzQsNyAmIzQzOzQwNDEsOCBAQCBzdGF0aWMgaW50IHZ4bGFuX2Rldl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgICAgIGRzdC1cdTAwM2VyZW1vdGVfdm5pLFxuIFx0XHRcdFx0ICAgICAgIGRzdC1cdTAwM2VyZW1vdGVfdm5pLFxuIFx0XHRcdFx0ICAgICAgIGRzdC1cdTAwM2VyZW1vdGVfaWZpbmRleCxcbi1cdFx0XHRcdCAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgZXh0YWNrKTtcbiYjNDM7XHRcdFx0XHQgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIE5VTEwsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGV4dGFjayk7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byB1bmxpbms7XG5AQCAtNDQ4NSw3ICYjNDM7NDQ5Myw4IEBAIHN0YXRpYyBpbnQgdnhsYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0XHRcdFx0XHQgICAgICAgdnhsYW4tXHUwMDNlY2ZnLmRzdF9wb3J0LFxuIFx0XHRcdFx0XHQgICAgICAgY29uZi52bmksIGNvbmYudm5pLFxuIFx0XHRcdFx0XHQgICAgICAgY29uZi5yZW1vdGVfaWZpbmRleCxcbi1cdFx0XHRcdFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBleHRhY2spO1xuJiM0MztcdFx0XHRcdFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGV4dGFjayk7XG4gXHRcdFx0aWYgKGVycikge1xuIFx0XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbiBcdFx0XHRcdG5ldGRldl9hZGphY2VudF9jaGFuZ2VfYWJvcnQoZHN0LVx1MDAzZXJlbW90ZV9kZXYsXG5AQCAtNDgwNiw3ICYjNDM7NDgxNSw3IEBAIHZ4bGFuX2ZkYl9leHRlcm5hbF9sZWFybl9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgICAgICAgZmRiX2luZm8tXHUwMDNlcmVtb3RlX3ZuaSxcbiBcdFx0XHQgICAgICAgZmRiX2luZm8tXHUwMDNlcmVtb3RlX2lmaW5kZXgsXG4gXHRcdFx0ICAgICAgIE5URl9VU0UgfCBOVEZfU0VMRiB8IE5URl9FWFRfTEVBUk5FRCxcbi1cdFx0XHQgICAgICAgMCwgZmFsc2UsIGV4dGFjayk7XG4mIzQzO1x0XHRcdCAgICAgICAwLCBmYWxzZSwgTlVMTCwgZXh0YWNrKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaCBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaFxuaW5kZXggYjFlZWMyMjE2MzYwOC4uZTUyNzU1OTIzYzMxMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oXG5AQCAtMTkzLDcgJiM0MzsxOTMsOCBAQCBpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0ICAgICBfX3UxNiBzdGF0ZSwgX191MTYgZmxhZ3MsXG4gXHRcdCAgICAgX19iZTE2IHBvcnQsIF9fYmUzMiBzcmNfdm5pLCBfX2JlMzIgdm5pLFxuIFx0XHQgICAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsXG4tXHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO1x0XHQgICAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLFxuJiM0MztcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIHZvaWQgdnhsYW5feG1pdF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgIF9fYmUzMiBkZWZhdWx0X3ZuaSwgc3RydWN0IHZ4bGFuX3Jkc3QgKnJkc3QsIGJvb2wgZGlkX3JzYyk7XG4gaW50IHZ4bGFuX3ZuaV9pbl91c2Uoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY1xuaW5kZXggZGQ5NDA4NWUwODg2NS4uOWNjOTMyYzYxNzdkMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY1xuQEAgLTQ3Myw2ICYjNDM7NDczLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHZuaV9maWx0ZXJfcG9saWN5W1ZYTEFOX1ZOSUZJTFRFUl9NQVggJiM0MzsgMV0gPSB7XG4gc3RhdGljIGludCB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnkoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIF9fYmUzMiB2bmksXG4gXHRcdFx0XHRcdCAgdW5pb24gdnhsYW5fYWRkciAqb2xkX3JlbW90ZV9pcCxcbiBcdFx0XHRcdFx0ICB1bmlvbiB2eGxhbl9hZGRyICpyZW1vdGVfaXAsXG4mIzQzO1x0XHRcdFx0XHQgIGJvb2wgKmZkYl9jcmVhdGVkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgdnhsYW5fcmRzdCAqZHN0ID0gXHUwMDI2dnhsYW4tXHUwMDNlZGVmYXVsdF9kc3Q7XG5AQCAtNDg4LDcgJiM0Mzs0ODksOCBAQCBzdGF0aWMgaW50IHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgX19iZTMyIHZuaSxcbiBcdFx0XHRcdCAgICAgICB2bmksXG4gXHRcdFx0XHQgICAgICAgdm5pLFxuIFx0XHRcdFx0ICAgICAgIGRzdC1cdTAwM2VyZW1vdGVfaWZpbmRleCxcbi1cdFx0XHRcdCAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgZXh0YWNrKTtcbiYjNDM7XHRcdFx0XHQgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIGZkYl9jcmVhdGVkLFxuJiM0MztcdFx0XHRcdCAgICAgICBleHRhY2spO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbiBcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTUxMiw2ICYjNDM7NTE0LDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnZuaW5vZGUsXG4gXHRcdFx0XHQgIHVuaW9uIHZ4bGFuX2FkZHIgKmdyb3VwLFxuIFx0XHRcdFx0ICBib29sIGNyZWF0ZSwgYm9vbCAqY2hhbmdlZCxcbiYjNDM7XHRcdFx0XHQgIGJvb2wgKmZkYl9jcmVhdGVkLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0c3RydWN0IHZ4bGFuX25ldCAqdm4gPSBuZXRfZ2VuZXJpYyh2eGxhbi1cdTAwM2VuZXQsIHZ4bGFuX25ldF9pZCk7XG5AQCAtNTQ1LDcgJiM0Mzs1NDgsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0ID0gdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHZ4bGFuLCB2bmlub2RlLVx1MDAzZXZuaSxcbi1cdFx0XHRcdFx0ICAgICBvbGRyaXAsIG5ld3JpcCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgb2xkcmlwLCBuZXdyaXAsIGZkYl9jcmVhdGVkLFxuIFx0XHRcdFx0XHQgICAgIGV4dGFjayk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dDtcbkBAIC01OTksNyAmIzQzOzYwMiw3IEBAIGludCB2eGxhbl92bmlsaXN0X3VwZGF0ZV9ncm91cChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0XHRyZXQgPSB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnkodnhsYW4sIHZlbnQtXHUwMDNldm5pLFxuIFx0XHRcdFx0XHRcdFx0ICAgICBvbGRfcmVtb3RlX2lwLFxuIFx0XHRcdFx0XHRcdFx0ICAgICBuZXdfcmVtb3RlX2lwLFxuLVx0XHRcdFx0XHRcdFx0ICAgICBleHRhY2spO1xuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgTlVMTCwgZXh0YWNrKTtcbiBcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuQEAgLTY1NSw3ICYjNDM7NjU4LDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdHJldCA9IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAodnhsYW4sIHZuaW5vZGUsIGdyb3VwLCBmYWxzZSwgY2hhbmdlZCxcbi1cdFx0XHRcdCAgICAgZXh0YWNrKTtcbiYjNDM7XHRcdFx0XHQgICAgIE5VTEwsIGV4dGFjayk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTcxOCw2ICYjNDM7NzIxLDggQEAgc3RhdGljIHZvaWQgdnhsYW5fdm5pX2ZyZWUoc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlKVxuIFx0a2ZyZWUodm5pbm9kZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSk7XG4mIzQzO1xuIHN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0XHQgc3RydWN0IHZ4bGFuX3ZuaV9ncm91cCAqdmcsXG4gXHRcdFx0IHUzMiB2bmksIHVuaW9uIHZ4bGFuX2FkZHIgKmdyb3VwLFxuQEAgLTcyNSw2ICYjNDM7NzMwLDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIHtcbiBcdHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZTtcbiBcdF9fYmUzMiB2ID0gY3B1X3RvX2JlMzIodm5pKTtcbiYjNDM7XHRib29sIGZkYl9jcmVhdGVkID0gZmFsc2U7XG4gXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiBcdGludCBlcnIgPSAwO1xuIFxuQEAgLTc1NSwxMCAmIzQzOzc2MSw0NyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZSh2eGxhbiwgdm5pbm9kZSwgZmFsc2UpO1xuIFxuIFx0ZXJyID0gdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCh2eGxhbiwgdm5pbm9kZSwgZ3JvdXAsIHRydWUsIFx1MDAyNmNoYW5nZWQsXG4tXHRcdFx0XHQgICAgIGV4dGFjayk7XG4mIzQzO1x0XHRcdFx0ICAgICBcdTAwMjZmZGJfY3JlYXRlZCwgZXh0YWNrKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfdm5pX2RlbDtcbiBcbiBcdHZ4bGFuX3ZuaWZpbHRlcl9ub3RpZnkodnhsYW4sIHZuaW5vZGUsIFJUTV9ORVdUVU5ORUwpO1xuIFxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3ZuaV9kZWw6XG4mIzQzO1x0LyogVW5kbyBvbmx5IHRoZSBkZWZhdWx0IEZEQiBlbnRyeSB0aGlzIGFkZCBpbnN0YWxsZWQuICBBbiBlbnRyeSB0aGF0XG4mIzQzO1x0ICogd2FzIGFscmVhZHkgdGhlcmUsIHdoZXRoZXIgYWRkZWQgb3V0IG9mIGJhbmQgb3IgYnkgYW5vdGhlciBWTkksIGlzXG4mIzQzO1x0ICogbGVmdCBhbG9uZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIE5vIG1lbWJlcnNoaXAgaGFzIHRvIGJlIGdpdmVuIGJhY2s6IHZ4bGFuX2lnbXBfbGVhdmUoKSBpcyBnYXRlZCBvblxuJiM0MztcdCAqIHZ4bGFuX2FkZHJfbXVsdGljYXN0KFx1MDAyNm9sZF9yZW1vdGVfaXApLCBhbmQgb2xkX3JlbW90ZV9pcCBpcyBhIGNvcHlcbiYjNDM7XHQgKiBvZiB0aGUgcmVtb3RlIElQIG9mIGEgbm9kZSB0aGlzIGFkZCBqdXN0IGFsbG9jYXRlZCwgc28gaXQgaXMgemVyby5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSBhZGRyZXNzIHBpY2tlZCBiZWxvdyBpcyB0aGUgb25lIHRoZSBlbnRyeSB3YXMgaW5zdGFsbGVkXG4mIzQzO1x0ICogYWdhaW5zdC4gIElmIHRoZSByZXF1ZXN0IGNhcnJpZWQgYSBncm91cCwgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpXG4mIzQzO1x0ICogY29waWVkIGl0IGludG8gdm5pbm9kZS1cdTAwM2VyZW1vdGVfaXAgYmVmb3JlIHRoZSBqb2luIGNvdWxkIGZhaWw7IGlmXG4mIzQzO1x0ICogaXQgZGlkIG5vdCwgdGhhdCBjb3B5IHdhcyBza2lwcGVkIGFuZCB0aGUgZW50cnkgd2VudCB0byB0aGUgZGV2aWNlXG4mIzQzO1x0ICogZGVmYXVsdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZmRiX2NyZWF0ZWQpIHtcbiYjNDM7XHRcdHVuaW9uIHZ4bGFuX2FkZHIgKnJpcCA9IHZ4bGFuX2FkZHJfYW55KFx1MDAyNnZuaW5vZGUtXHUwMDNlcmVtb3RlX2lwKSA/XG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZ2eGxhbi1cdTAwM2VkZWZhdWx0X2RzdC5yZW1vdGVfaXAgOlxuJiM0MztcdFx0XHRcdFx0XHUwMDI2dm5pbm9kZS1cdTAwM2VyZW1vdGVfaXA7XG4mIzQzO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4mIzQzO1x0XHRfX3Z4bGFuX2ZkYl9kZWxldGUodnhsYW4sIGFsbF96ZXJvc19tYWMsICpyaXAsXG4mIzQzO1x0XHRcdFx0ICAgdnhsYW4tXHUwMDNlY2ZnLmRzdF9wb3J0LCB2bmlub2RlLVx1MDAzZXZuaSxcbiYjNDM7XHRcdFx0XHQgICB2bmlub2RlLVx1MDAzZXZuaSxcbiYjNDM7XHRcdFx0XHQgICB2eGxhbi1cdTAwM2VkZWZhdWx0X2RzdC5yZW1vdGVfaWZpbmRleCwgdHJ1ZSk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ2eGxhbi1cdTAwM2VoYXNoX2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnZnLVx1MDAzZXZuaV9oYXNoLCBcdTAwMjZ2bmlub2RlLVx1MDAzZXZub2RlLFxuJiM0MztcdFx0XHQgICAgICAgdnhsYW5fdm5pX3JodF9wYXJhbXMpO1xuJiM0MztcdF9fdnhsYW5fdm5pX2RlbF9saXN0KHZnLCB2bmlub2RlKTtcbiYjNDM7XHRpZiAodnhsYW4tXHUwMDNlZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApXG4mIzQzO1x0XHR2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGUodnhsYW4sIHZuaW5vZGUsIHRydWUpO1xuJiM0MztcdGNhbGxfcmN1KFx1MDAyNnZuaW5vZGUtXHUwMDNlcmN1LCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWWExBTiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dnhsYW5fdm5pX2FkZCYjMzQ7LAogICAgJiMzNDt2eGxhbl9mZGJfdXBkYXRlJiMzNDssCiAgICAmIzM0O3Z4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcmIzM0OywKICAgICYjMzQ7dnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUmIzM0OywKICAgICYjMzQ7dnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZYTEFOIGRyaXZlciAocmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIGNvbW1hbmRzIHN1Y2ggYXMgUlRNX05FV1RVTk5FTCBhbmQgUlRNX05FV05FSUdIKS4gSXQgdXBkYXRlcyB0aGUgRkRCIHVwZGF0ZSBsb2dpYyBhY3Jvc3MgdnhsYW5fZmRiX3VwZGF0ZSgpLCB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSgpLCBhbmQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZygpIHRvIHRyYWNrIHdoZW4gYW4gZW50cnkgaXMgbmV3bHkgY3JlYXRlZCwgYW5kIGltcGxlbWVudHMgYW4gZXJyb3Igcm9sbGJhY2sgcGF0aCBpbiB2eGxhbl92bmlfYWRkKCkgdGhhdCB0ZWFycyBkb3duIEZEQiBlbnRyaWVzLCB1bmxpbmtzIFZOSSBub2RlcywgYW5kIGZyZWVzIG1lbW9yeSB2aWEgUkNVIGlmIHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKSBmYWlscy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBsb2dpYyBhbHRlcmluZyBzdGF0ZSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBlcnJvci1oYW5kbGluZyBpbiB0aGUgdmlydHVhbCBuZXR3b3JraW5nIHN1YnN5c3RlbSwgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3Y2I5NzFmZTU1YWQ1YzkxOGNjYzk5YWI1Mjg0NDk1ODg1ZWM5NWJmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMjI6NDk6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMKaW5kZXggYmU5NWFmNjRhMWY1MS4uMDY1MmRjNDcxZGNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYwpAQCAtOTc0LDcgJiM0Mzs5NzQsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiAJCQkJICAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHZuaSwKIAkJCQkgICAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywKIAkJCQkgICAgIHN0cnVjdCB2eGxhbl9mZGIgKmYsIHUzMiBuaGlkLAotCQkJCSAgICAgYm9vbCBzd2Rldl9ub3RpZnksCiYjNDM7CQkJCSAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsCiAJCQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJX191MTYgZmRiX2ZsYWdzID0gKG5kbV9mbGFncyAmYW1wOyB+TlRGX1VTRSk7CkBAIC0xMDQyLDYgJiM0MzsxMDQyLDggQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCiAJCWlmIChyYyAmbHQ7IDApCiAJCQlyZXR1cm4gcmM7CiYjNDM7CQlpZiAocmMgJmFtcDsmYW1wOyBjcmVhdGVkKQomIzQzOwkJCSpjcmVhdGVkID0gdHJ1ZTsKIAkJbm90aWZ5IHw9IHJjOwogCX0KIApAQCAtMTA3OCw3ICYjNDM7MTA4MCw3IEBAIHN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiAJCQkJICAgX191MTYgc3RhdGUsIF9fdTE2IGZsYWdzLAogCQkJCSAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSwKIAkJCQkgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsIHUzMiBuaGlkLAotCQkJCSAgIGJvb2wgc3dkZXZfbm90aWZ5LAomIzQzOwkJCQkgICBib29sIHN3ZGV2X25vdGlmeSwgYm9vbCAqY3JlYXRlZCwKIAkJCQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJX191MTYgZmRiX2ZsYWdzID0gKG5kbV9mbGFncyAmYW1wOyB+TlRGX1VTRSk7CkBAIC0xMTAxLDYgJiM0MzsxMTAzLDkgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKIAlpZiAocmMpCiAJCWdvdG8gZXJyX25vdGlmeTsKIAomIzQzOwlpZiAoY3JlYXRlZCkKJiM0MzsJCSpjcmVhdGVkID0gdHJ1ZTsKJiM0MzsKIAlyZXR1cm4gMDsKIAogZXJyX25vdGlmeToKQEAgLTExMTQsNyAmIzQzOzExMTksNyBAQCBpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKIAkJICAgICBfX3UxNiBzdGF0ZSwgX191MTYgZmxhZ3MsCiAJCSAgICAgX19iZTE2IHBvcnQsIF9fYmUzMiBzcmNfdm5pLCBfX2JlMzIgdm5pLAogCQkgICAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsCi0JCSAgICAgYm9vbCBzd2Rldl9ub3RpZnksCiYjNDM7CQkgICAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLAogCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgdnhsYW5fZmRiICpmOwpAQCAtMTEyOSw3ICYjNDM7MTEzNCw4IEBAIGludCB2eGxhbl9mZGJfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCiAJCXJldHVybiB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHZ4bGFuLCBpcCwgc3RhdGUsIGZsYWdzLCBwb3J0LAogCQkJCQkJIHZuaSwgaWZpbmRleCwgbmRtX2ZsYWdzLCBmLAotCQkJCQkJIG5oaWQsIHN3ZGV2X25vdGlmeSwgZXh0YWNrKTsKJiM0MzsJCQkJCQkgbmhpZCwgc3dkZXZfbm90aWZ5LCBjcmVhdGVkLAomIzQzOwkJCQkJCSBleHRhY2spOwogCX0gZWxzZSB7CiAJCWlmICghKGZsYWdzICZhbXA7IE5MTV9GX0NSRUFURSkpCiAJCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTExMzcsNyAmIzQzOzExNDMsNyBAQCBpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKIAkJcmV0dXJuIHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHZ4bGFuLCBtYWMsIGlwLCBzdGF0ZSwgZmxhZ3MsCiAJCQkJCSAgICAgICBwb3J0LCBzcmNfdm5pLCB2bmksIGlmaW5kZXgsCiAJCQkJCSAgICAgICBuZG1fZmxhZ3MsIG5oaWQsIHN3ZGV2X25vdGlmeSwKLQkJCQkJICAgICAgIGV4dGFjayk7CiYjNDM7CQkJCQkgICAgICAgY3JlYXRlZCwgZXh0YWNrKTsKIAl9CiB9CiAKQEAgLTEyNzUsNyAmIzQzOzEyODEsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sCiAJZXJyID0gdnhsYW5fZmRiX3VwZGF0ZSh2eGxhbiwgYWRkciwgJmFtcDtpcCwgbmRtLSZndDtuZG1fc3RhdGUsIGZsYWdzLAogCQkJICAgICAgIHBvcnQsIHNyY192bmksIHZuaSwgaWZpbmRleCwKIAkJCSAgICAgICBuZG0tJmd0O25kbV9mbGFncyB8IE5URl9WWExBTl9BRERFRF9CWV9VU0VSLAotCQkJICAgICAgIG5oaWQsIHRydWUsIGV4dGFjayk7CiYjNDM7CQkJICAgICAgIG5oaWQsIHRydWUsIE5VTEwsIGV4dGFjayk7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt2eGxhbi0mZ3Q7aGFzaF9sb2NrKTsKIAogCWlmICghZXJyKQpAQCAtMTQ5MSw3ICYjNDM7MTQ5Nyw4IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB2eGxhbl9zbm9vcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkgdnhsYW4tJmd0O2NmZy5kc3RfcG9ydCwKIAkJCQkJIHZuaSwKIAkJCQkJIHZ4bGFuLSZndDtkZWZhdWx0X2RzdC5yZW1vdGVfdm5pLAotCQkJCQkgaWZpbmRleCwgTlRGX1NFTEYsIDAsIHRydWUsIE5VTEwpOwomIzQzOwkJCQkJIGlmaW5kZXgsIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMLAomIzQzOwkJCQkJIE5VTEwpOwogCQlzcGluX3VubG9jaygmYW1wO3Z4bGFuLSZndDtoYXNoX2xvY2spOwogCX0KIApAQCAtNDAzNCw3ICYjNDM7NDA0MSw4IEBAIHN0YXRpYyBpbnQgdnhsYW5fZGV2X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgICAgIGRzdC0mZ3Q7cmVtb3RlX3ZuaSwKIAkJCQkgICAgICAgZHN0LSZndDtyZW1vdGVfdm5pLAogCQkJCSAgICAgICBkc3QtJmd0O3JlbW90ZV9pZmluZGV4LAotCQkJCSAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgZXh0YWNrKTsKJiM0MzsJCQkJICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMLAomIzQzOwkJCQkgICAgICAgZXh0YWNrKTsKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDt2eGxhbi0mZ3Q7aGFzaF9sb2NrKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gdW5saW5rOwpAQCAtNDQ4NSw3ICYjNDM7NDQ5Myw4IEBAIHN0YXRpYyBpbnQgdnhsYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCQkJCQkgICAgICAgdnhsYW4tJmd0O2NmZy5kc3RfcG9ydCwKIAkJCQkJICAgICAgIGNvbmYudm5pLCBjb25mLnZuaSwKIAkJCQkJICAgICAgIGNvbmYucmVtb3RlX2lmaW5kZXgsCi0JCQkJCSAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgZXh0YWNrKTsKJiM0MzsJCQkJCSAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgTlVMTCwKJiM0MzsJCQkJCSAgICAgICBleHRhY2spOwogCQkJaWYgKGVycikgewogCQkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7dnhsYW4tJmd0O2hhc2hfbG9jayk7CiAJCQkJbmV0ZGV2X2FkamFjZW50X2NoYW5nZV9hYm9ydChkc3QtJmd0O3JlbW90ZV9kZXYsCkBAIC00ODA2LDcgJiM0Mzs0ODE1LDcgQEAgdnhsYW5fZmRiX2V4dGVybmFsX2xlYXJuX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICAgIGZkYl9pbmZvLSZndDtyZW1vdGVfdm5pLAogCQkJICAgICAgIGZkYl9pbmZvLSZndDtyZW1vdGVfaWZpbmRleCwKIAkJCSAgICAgICBOVEZfVVNFIHwgTlRGX1NFTEYgfCBOVEZfRVhUX0xFQVJORUQsCi0JCQkgICAgICAgMCwgZmFsc2UsIGV4dGFjayk7CiYjNDM7CQkJICAgICAgIDAsIGZhbHNlLCBOVUxMLCBleHRhY2spOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dnhsYW4tJmd0O2hhc2hfbG9jayk7CiAKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oIGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oCmluZGV4IGIxZWVjMjIxNjM2MDguLmU1Mjc1NTkyM2MzMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmgKQEAgLTE5Myw3ICYjNDM7MTkzLDggQEAgaW50IHZ4bGFuX2ZkYl91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiAJCSAgICAgX191MTYgc3RhdGUsIF9fdTE2IGZsYWdzLAogCQkgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSwKIAkJICAgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsIHUzMiBuaGlkLAotCQkgICAgIGJvb2wgc3dkZXZfbm90aWZ5LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwomIzQzOwkJICAgICBib29sIHN3ZGV2X25vdGlmeSwgYm9vbCAqY3JlYXRlZCwKJiM0MzsJCSAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKIHZvaWQgdnhsYW5feG1pdF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgIF9fYmUzMiBkZWZhdWx0X3ZuaSwgc3RydWN0IHZ4bGFuX3Jkc3QgKnJkc3QsIGJvb2wgZGlkX3JzYyk7CiBpbnQgdnhsYW5fdm5pX2luX3VzZShzdHJ1Y3QgbmV0ICpzcmNfbmV0LCBzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jIGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMKaW5kZXggZGQ5NDA4NWUwODg2NS4uOWNjOTMyYzYxNzdkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMKQEAgLTQ3Myw2ICYjNDM7NDczLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHZuaV9maWx0ZXJfcG9saWN5W1ZYTEFOX1ZOSUZJTFRFUl9NQVggJiM0MzsgMV0gPSB7CiBzdGF0aWMgaW50IHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgX19iZTMyIHZuaSwKIAkJCQkJICB1bmlvbiB2eGxhbl9hZGRyICpvbGRfcmVtb3RlX2lwLAogCQkJCQkgIHVuaW9uIHZ4bGFuX2FkZHIgKnJlbW90ZV9pcCwKJiM0MzsJCQkJCSAgYm9vbCAqZmRiX2NyZWF0ZWQsCiAJCQkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCB2eGxhbl9yZHN0ICpkc3QgPSAmYW1wO3Z4bGFuLSZndDtkZWZhdWx0X2RzdDsKQEAgLTQ4OCw3ICYjNDM7NDg5LDggQEAgc3RhdGljIGludCB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnkoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIF9fYmUzMiB2bmksCiAJCQkJICAgICAgIHZuaSwKIAkJCQkgICAgICAgdm5pLAogCQkJCSAgICAgICBkc3QtJmd0O3JlbW90ZV9pZmluZGV4LAotCQkJCSAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgZXh0YWNrKTsKJiM0MzsJCQkJICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBmZGJfY3JlYXRlZCwKJiM0MzsJCQkJICAgICAgIGV4dGFjayk7CiAJCWlmIChlcnIpIHsKIAkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7dnhsYW4tJmd0O2hhc2hfbG9jayk7CiAJCQlyZXR1cm4gZXJyOwpAQCAtNTEyLDYgJiM0Mzs1MTQsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiAJCQkJICBzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnZuaW5vZGUsCiAJCQkJICB1bmlvbiB2eGxhbl9hZGRyICpncm91cCwKIAkJCQkgIGJvb2wgY3JlYXRlLCBib29sICpjaGFuZ2VkLAomIzQzOwkJCQkgIGJvb2wgKmZkYl9jcmVhdGVkLAogCQkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCXN0cnVjdCB2eGxhbl9uZXQgKnZuID0gbmV0X2dlbmVyaWModnhsYW4tJmd0O25ldCwgdnhsYW5fbmV0X2lkKTsKQEAgLTU0NSw3ICYjNDM7NTQ4LDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQlyZXR1cm4gMDsKIAogCXJldCA9IHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeSh2eGxhbiwgdm5pbm9kZS0mZ3Q7dm5pLAotCQkJCQkgICAgIG9sZHJpcCwgbmV3cmlwLAomIzQzOwkJCQkJICAgICBvbGRyaXAsIG5ld3JpcCwgZmRiX2NyZWF0ZWQsCiAJCQkJCSAgICAgZXh0YWNrKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKQEAgLTU5OSw3ICYjNDM7NjAyLDcgQEAgaW50IHZ4bGFuX3ZuaWxpc3RfdXBkYXRlX2dyb3VwKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQkJcmV0ID0gdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHZ4bGFuLCB2ZW50LSZndDt2bmksCiAJCQkJCQkJICAgICBvbGRfcmVtb3RlX2lwLAogCQkJCQkJCSAgICAgbmV3X3JlbW90ZV9pcCwKLQkJCQkJCQkgICAgIGV4dGFjayk7CiYjNDM7CQkJCQkJCSAgICAgTlVMTCwgZXh0YWNrKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKIAkJfQpAQCAtNjU1LDcgJiM0Mzs2NTgsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiAJCXJldHVybiAwOwogCiAJcmV0ID0gdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCh2eGxhbiwgdm5pbm9kZSwgZ3JvdXAsIGZhbHNlLCBjaGFuZ2VkLAotCQkJCSAgICAgZXh0YWNrKTsKJiM0MzsJCQkJICAgICBOVUxMLCBleHRhY2spOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTcxOCw2ICYjNDM7NzIxLDggQEAgc3RhdGljIHZvaWQgdnhsYW5fdm5pX2ZyZWUoc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlKQogCWtmcmVlKHZuaW5vZGUpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpOwomIzQzOwogc3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQkJIHN0cnVjdCB2eGxhbl92bmlfZ3JvdXAgKnZnLAogCQkJIHUzMiB2bmksIHVuaW9uIHZ4bGFuX2FkZHIgKmdyb3VwLApAQCAtNzI1LDYgJiM0Mzs3MzAsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiB7CiAJc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlOwogCV9fYmUzMiB2ID0gY3B1X3RvX2JlMzIodm5pKTsKJiM0MzsJYm9vbCBmZGJfY3JlYXRlZCA9IGZhbHNlOwogCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwogCWludCBlcnIgPSAwOwogCkBAIC03NTUsMTAgJiM0Mzs3NjEsNDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQl2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGUodnhsYW4sIHZuaW5vZGUsIGZhbHNlKTsKIAogCWVyciA9IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAodnhsYW4sIHZuaW5vZGUsIGdyb3VwLCB0cnVlLCAmYW1wO2NoYW5nZWQsCi0JCQkJICAgICBleHRhY2spOwomIzQzOwkJCQkgICAgICZhbXA7ZmRiX2NyZWF0ZWQsIGV4dGFjayk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl92bmlfZGVsOwogCiAJdnhsYW5fdm5pZmlsdGVyX25vdGlmeSh2eGxhbiwgdm5pbm9kZSwgUlRNX05FV1RVTk5FTCk7CiAKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3ZuaV9kZWw6CiYjNDM7CS8qIFVuZG8gb25seSB0aGUgZGVmYXVsdCBGREIgZW50cnkgdGhpcyBhZGQgaW5zdGFsbGVkLiAgQW4gZW50cnkgdGhhdAomIzQzOwkgKiB3YXMgYWxyZWFkeSB0aGVyZSwgd2hldGhlciBhZGRlZCBvdXQgb2YgYmFuZCBvciBieSBhbm90aGVyIFZOSSwgaXMKJiM0MzsJICogbGVmdCBhbG9uZS4KJiM0MzsJICoKJiM0MzsJICogTm8gbWVtYmVyc2hpcCBoYXMgdG8gYmUgZ2l2ZW4gYmFjazogdnhsYW5faWdtcF9sZWF2ZSgpIGlzIGdhdGVkIG9uCiYjNDM7CSAqIHZ4bGFuX2FkZHJfbXVsdGljYXN0KCZhbXA7b2xkX3JlbW90ZV9pcCksIGFuZCBvbGRfcmVtb3RlX2lwIGlzIGEgY29weQomIzQzOwkgKiBvZiB0aGUgcmVtb3RlIElQIG9mIGEgbm9kZSB0aGlzIGFkZCBqdXN0IGFsbG9jYXRlZCwgc28gaXQgaXMgemVyby4KJiM0MzsJICoKJiM0MzsJICogVGhlIGFkZHJlc3MgcGlja2VkIGJlbG93IGlzIHRoZSBvbmUgdGhlIGVudHJ5IHdhcyBpbnN0YWxsZWQKJiM0MzsJICogYWdhaW5zdC4gIElmIHRoZSByZXF1ZXN0IGNhcnJpZWQgYSBncm91cCwgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpCiYjNDM7CSAqIGNvcGllZCBpdCBpbnRvIHZuaW5vZGUtJmd0O3JlbW90ZV9pcCBiZWZvcmUgdGhlIGpvaW4gY291bGQgZmFpbDsgaWYKJiM0MzsJICogaXQgZGlkIG5vdCwgdGhhdCBjb3B5IHdhcyBza2lwcGVkIGFuZCB0aGUgZW50cnkgd2VudCB0byB0aGUgZGV2aWNlCiYjNDM7CSAqIGRlZmF1bHQuCiYjNDM7CSAqLwomIzQzOwlpZiAoZmRiX2NyZWF0ZWQpIHsKJiM0MzsJCXVuaW9uIHZ4bGFuX2FkZHIgKnJpcCA9IHZ4bGFuX2FkZHJfYW55KCZhbXA7dm5pbm9kZS0mZ3Q7cmVtb3RlX2lwKSA/CiYjNDM7CQkJCQkmYW1wO3Z4bGFuLSZndDtkZWZhdWx0X2RzdC5yZW1vdGVfaXAgOgomIzQzOwkJCQkJJmFtcDt2bmlub2RlLSZndDtyZW1vdGVfaXA7CiYjNDM7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDt2eGxhbi0mZ3Q7aGFzaF9sb2NrKTsKJiM0MzsJCV9fdnhsYW5fZmRiX2RlbGV0ZSh2eGxhbiwgYWxsX3plcm9zX21hYywgKnJpcCwKJiM0MzsJCQkJICAgdnhsYW4tJmd0O2NmZy5kc3RfcG9ydCwgdm5pbm9kZS0mZ3Q7dm5pLAomIzQzOwkJCQkgICB2bmlub2RlLSZndDt2bmksCiYjNDM7CQkJCSAgIHZ4bGFuLSZndDtkZWZhdWx0X2RzdC5yZW1vdGVfaWZpbmRleCwgdHJ1ZSk7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO3Z4bGFuLSZndDtoYXNoX2xvY2spOwomIzQzOwl9CiYjNDM7CXJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoJmFtcDt2Zy0mZ3Q7dm5pX2hhc2gsICZhbXA7dm5pbm9kZS0mZ3Q7dm5vZGUsCiYjNDM7CQkJICAgICAgIHZ4bGFuX3ZuaV9yaHRfcGFyYW1zKTsKJiM0MzsJX192eGxhbl92bmlfZGVsX2xpc3QodmcsIHZuaW5vZGUpOwomIzQzOwlpZiAodnhsYW4tJmd0O2Rldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX1VQKQomIzQzOwkJdnhsYW5fdnNfYWRkX2RlbF92bmlub2RlKHZ4bGFuLCB2bmlub2RlLCB0cnVlKTsKJiM0MzsJY2FsbF9yY3UoJmFtcDt2bmlub2RlLSZndDtyY3UsIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKTsKIAlyZXR1cm4gZXJyOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NTEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2MTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVlhMQU4gUGF0Y2ggZm9yIEZ1enppbmcgd2l0aCBTeXprYWxsZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBiYXNlZCBvbiBhIHF1aWNrIHNjYW4sIHRoYXQgdGhpcyBwYXRjaCAqY291bGQqIGJlIGZydWl0ZnVsIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaGUgVlhMQU4gZHJpdmVyIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggaXMgYSBodWdlIHBsdXMuIFdlIGNhbiB0cmlnZ2VyIGl0IHRocm91Z2ggbmV0bGluaywgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCB0YXJnZXQsIG9yIGV2ZW4ganVzdCBuZXR3b3JrIHRyYWZmaWMuCgpNeSBmaXJzdCBjaGVja3BvaW50IGlzIHJlYWNoYWJpbGl0eSwgYW5kIFZYTEFOIHBhc3NlcyB3aXRoIGZseWluZyBjb2xvcnMgZHVlIHRvIGl0cyBuZXRsaW5rIGFuZCBuZXR3b3JrIHRyYWZmaWMgaW50ZXJhY3Rpb24uCgpOb3csIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXI6IHdoYXQgZG9lcyB0aGUgcGF0Y2ggKmRvKj8gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCwgYHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlYCwgYHZ4bGFuX2ZkYl91cGRhdGVgLCBhbmQgYHZ4bGFuX3ZuaV9hZGRgLiBUaGlzIHNjcmVhbXMgJiMzNDtwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIHN0YXRlIHRyYW5zaXRpb25zIGFuZCBlcnJvciBjb25kaXRpb25zLCYjMzQ7IHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50IGZvciBmdXp6aW5nISBUaGUgYWRkaXRpb24gb2YgdGhlIGBlcnJfdm5pX2RlbGAgY2xlYW51cCBwYXRoIGluIGB2eGxhbl92bmlfYWRkYCwgd2l0aCB0aGUgcm9sbGJhY2sgbG9naWMgZm9yIEZEQiBlbnRyaWVzIGFuZCBWTkkgbm9kZXMgaWYgYHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXBgIGZhaWxzLCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZS4gVGhpcyBpcyBhIGNsYXNzaWMgJiMzNDtlcnJvciBoYW5kbGluZyB0aGF0JiMzOTtzIGxpa2VseSB0byBoYXZlIGJ1Z3MmIzM0OyBzY2VuYXJpby4gVGhlIG5ldyBgYm9vbCAqY3JlYXRlZGAgcGFyYW1ldGVyIGluIHRoZSBgdnhsYW5fZmRiX3VwZGF0ZSpgIGZ1bmN0aW9ucywgZGlyZWN0bHkgaW1wYWN0aW5nIGVycm9yIGhhbmRsaW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50LCBpcyBhbHNvIGEgcmVkIGZsYWcgaW4gYSBnb29kIHdheS4gSXQgaW5kaWNhdGVzIGRlbGljYXRlIGNoYW5nZXMgdG8gdGhlIGRyaXZlciYjMzk7cyBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lLgoKTW9kaWZpZWQgZmlsZXMgaW5jbHVkZSBgdnhsYW5fY29yZS5jYCwgYHZ4bGFuX3ByaXZhdGUuaGAsIGFuZCBgdnhsYW5fdm5pZmlsdGVyLmNgLCB3aGljaCBjb25maXJtcyB3ZSBhcmUgaW4gdGhlIGNvcmUgb2YgdGhlIGRyaXZlciwgc28gaXQgaXMgaGlnaCB2YWx1ZS4KCk15IG5leHQgc3RlcCBpcyB0byBkaWcgaW50byB0aGUgc291cmNlIG1vcmUgdGhvcm91Z2hseS4gSSYjMzk7bGwgbmVlZCB0byBkbyBzb21lIGBncmVwYHMgdG8gZmluZCBhbGwgdGhlIGNhbGxlcnMgb2YgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgYXNzZXNzIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGhvdyB0aGVzZSBjaGFuZ2VzIGFyZSBpbnRlZ3JhdGVkLCBhbmQgZ2l2ZSB0aGUgYWJpbGl0eSB0byB0ZXN0IGV2ZXJ5IGZ1bmN0aW9uIHBhdGguIFRoaXMgd2lsbCBhbGxvdyBtZSB0byBidWlsZCBhIHN0cm9uZ2VyIGNhc2UgZm9yIHdoeSB0aGlzIHBhdGNoIGlzIHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6ei4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfVlhMQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi9NYWtlZmlsZS00LVxuZHJpdmVycy9uZXQvdnhsYW4vTWFrZWZpbGU6NTpvYmotJChDT05GSUdfVlhMQU4pICYjNDM7PSB2eGxhbi5vXG5kcml2ZXJzL25ldC92eGxhbi9NYWtlZmlsZS02LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MjgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFZYTEFOIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRlcGVuZGVuY2llcyBvZiBgQ09ORklHX1ZYTEFOYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSB0aGUgb25lcyBpbiB0aGUgYGRyaXZlcnMvbmV0L2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlc2UgbmV0d29yay1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGxvY2F0aW9uIHRvIGJlIGNlcnRhaW4sIHRob3VnaC4gRmluZGluZyB0aGUgZXhhY3QgbG9jYXRpb24gd2hlcmUgYENPTkZJR19WWExBTmAgaXMgZGVjbGFyZWQgaXMgdGhlIGtleS4gT25jZSBJIGtub3cgd2hlcmUgaXQgbGl2ZXMsIEkgY2FuIHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgbWVhbnMgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugb3RoZXIgYENPTkZJR19gIG9wdGlvbnMgdGhhdCBpdCByZXF1aXJlcywgYW55IGFyY2hpdGVjdHVyYWwgY29uc3RyYWludHMsIGFuZCBwZXJoYXBzIGV2ZW4ga2VybmVsIG1vZHVsZXMgdGhhdCBpdCBwdWxscyBpbi4gS25vd2luZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGltcGFjdCBvbiB0aGUgc3lzdGVtLCB3aGV0aGVyIGl0JiMzOTtzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBoYXJkd2FyZSwgb3IgYW5vdGhlciBkcml2ZXIgaXQmIzM5O3MgcmVsaWFudCBvbiB0byBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUgcHJlY29uZGl0aW9ucyBmb3IgZW5hYmxpbmcgVlhMQU4gcHJvcGVybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZYTEFOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0yMTY9Y29uZmlnIElQVlRBUFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMjI5LVxuZHJpdmVycy9uZXQvS2NvbmZpZzoyMzA6Y29uZmlnIFZYTEFOXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzMS1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgZVh0ZW5zaWJsZSBMb2NhbCBBcmVhIE5ldHdvcmsgKFZYTEFOKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBmcmFtZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCBzdWl0YWJsZSBmb3IgYSBuZXR3b3JraW5nIGV4cGVydCBsaWtlIG15c2VsZjoKCioqRGl2aW5nIGludG8gdGhlIFZYTEFOIEtjb25maWcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIExldCYjMzk7cyBkaWcgaW50byB0aGUgYEtjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgZW50cnkgZm9yIFZYTEFOLCBsb2NhdGVkIGluIHRoZSBgZHJpdmVycy9uZXRgIGRpcmVjdG9yeS4gSSYjMzk7bSBrZWVuIHRvIHNlZSBob3cgdGhpcyBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgYW5kIGFueSBjb25kaXRpb25hbCBidWlsZCBvcHRpb25zLiBJcyBpdCBhbiBNIG1vZHVsZSwgYnVpbHQtaW4sIG9yIHBlcmhhcHMgb25seSBlbmFibGVkIHdpdGggYW5vdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbj8gV2hhdCBmZWF0dXJlcyBhcmUgc2VsZWN0aXZlbHkgZW5hYmxlZCBvciBkaXNhYmxlZD8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZSBWWExBTiBkcml2ZXIgaW50ZWdyYXRlcyB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgc3RhY2sg4oCTIGFyZSB0aGVyZSBzcGVjaWZpYyBoYXJkd2FyZSBkZXBlbmRlbmNpZXM/IFdoYXQgdXNlciBzcGFjZSB0b29scyBhcmUgcmVxdWlyZWQsIGFuZCBhcmUgdGhleSByZWZsZWN0ZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24/IEkmIzM5O2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBhbnkgaGludHMgb24gaG93IHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIG9mZmxvYWQgb3IgYWNjZWxlcmF0ZWQgZmVhdHVyZXMuIFRoaXMgS2NvbmZpZyBlbnRyeSBpcyB0aGUgYmx1ZXByaW50LCB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWxseSBjb21wcmVoZW5kaW5nIGhvdyBWWExBTiBpcyBicm91Z2h0IHRvIGxpZmUgd2l0aGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgbXkgY2hhbmNlIHRvIHNlZSBpZiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIGNvbXBsZXRlLCBvciBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbiB0aGUgY29kZSBmb3Igc3BlY2lmaWMgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIyODpcdFx0ICB3aWxsIGJlIGNhbGxlZCBpcHZ0YXAuXG4gMjI5Olx0XG4gMjMwOlx0Y29uZmlnIFZYTEFOXG4gMjMxOlx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIGVYdGVuc2libGUgTG9jYWwgQXJlYSBOZXR3b3JrIChWWExBTilcJiMzNDtcbiAyMzI6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDIzMzpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gMjM0Olx0XHRzZWxlY3QgR1JPX0NFTExTXG4gMjM1Olx0XHRoZWxwXG4gMjM2Olx0XHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgdnhsYW4gdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgcHJvdmlkZVxuIDIzNzpcdFx0ICBMYXllciAyIE5ldHdvcmtzIG92ZXIgTGF5ZXIgMyBOZXR3b3Jrcy4gVlhMQU4gaXMgb2Z0ZW4gdXNlZFxuIDIzODpcdFx0ICB0byB0dW5uZWwgdmlydHVhbCBuZXR3b3JrIGluZnJhc3RydWN0dXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cbiAyMzk6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOlxuIDI0MDpcdFx0ICAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LW1haGFsaW5nYW0tZHV0dC1kY29wcy12eGxhbi0wMlxuIDI0MTpcdFxuIDI0MjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMjQzOlx0XHQgIHdpbGwgYmUgY2FsbGVkIHZ4bGFuLlxuIDI0NDpcdFxuIDI0NTpcdGNvbmZpZyBHRU5FVkVcbiAyNDY6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgTmV0d29yayBWaXJ0dWFsaXphdGlvbiBFbmNhcHN1bGF0aW9uXCYjMzQ7XG4gMjQ3Olx0XHRkZXBlbmRzIG9uIElORVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Njg5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKlZYTEFOIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IFZYTEFOLi4uIEl0IGZ1bmRhbWVudGFsbHkgcmVsaWVzIG9uIElORVQsIHdoaWNoIGlzIGhhcmRseSBzdXJwcmlzaW5nLiBCdXQgSSBuZWVkIHRvIGJlIG1vcmUgdGhvcm91Z2ggaGVyZSwgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBhbHRlcm5hdGUgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBgZHJpdmVycy9uZXQvdnhsYW4vYCBkaXJlY3RvcnkuCgpUaGUgcXVlc3Rpb24gdGhhdCBJIGFtIGFza2luZyBpczogaXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0aGF0IHBlcnRhaW5zIHRvIGB2bmlmaWx0ZXJgIG9yIGFueSBvdGhlciBjb21wb25lbnRzIGluIHRoYXQgVlhMQU4gaW1wbGVtZW50YXRpb24/CgpNeSBiZXN0IHN0YXJ0aW5nIHBvaW50IHdvdWxkIGJlIHRoZSBgTWFrZWZpbGVgIGluIGBkcml2ZXJzL25ldC92eGxhbi9gLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHdoYXQgaXQgcmV2ZWFscyBhYm91dCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBjb21wb25lbnQgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjXG4gICAyOlx0IyBNYWtlZmlsZSBmb3IgdGhlIHZ4bGFuIGRyaXZlclxuICAgMzpcdCNcbiAgIDQ6XHRcbiAgIDU6XHRvYmotJChDT05GSUdfVlhMQU4pICYjNDM7PSB2eGxhbi5vXG4gICA2Olx0XG4gICA3Olx0dnhsYW4tb2JqcyA6PSB2eGxhbl9jb3JlLm8gdnhsYW5fbXVsdGljYXN0Lm8gdnhsYW5fdm5pZmlsdGVyLm8gdnhsYW5fbWRiLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA1OAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDUwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVlhMQU4gRkRCIFVwZGF0ZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIFZYTEFOIGNvZGUsIGFuZCBmaXJzdCB0aGluZyYjMzk7cyBmaXJzdCwgSSBzZWUgdGhlIGNvcmUgb2JqZWN0cyBhcmUgZGVmaW5lZC4gRXZlcnl0aGluZyBoaW5nZXMgb24gYENPTkZJR19WWExBTmAsIG9idmlvdXNseS4gTm93LCBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHJlY2VudCBjaGFuZ2UgaXMgYWZmZWN0aW5nIGZ1bmN0aW9uIGNhbGxzLgoKTG9va2luZyBhdCBgZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jYCwgSSBzZWUgYSBwcmV0dHkgcGVydmFzaXZlIHBhdHRlcm4uIEZ1bmN0aW9ucyBsaWtlIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCwgYHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlYCwgYW5kIGB2eGxhbl9mZGJfdXBkYXRlYCBpdHNlbGYgaGF2ZSBhbGwgYmVlbiBtb2RpZmllZCwgYW5kIGEgYGNyZWF0ZWRgIHBhcmFtZXRlciBoYXMgYmVlbiBhZGRlZC4gTWFrZXMgc2Vuc2UuIEJ1dCBpdCYjMzk7cyBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoaXMgY2hhbmdlIHJpcHBsZXMgdGhyb3VnaC4gRnVuY3Rpb25zIGxpa2UgYHZ4bGFuX2ZkYl9hZGRgLCBgdnhsYW5fc25vb3BgLCBgdnhsYW5fZGV2X2NyZWF0ZWAsIGB2eGxhbl9jaGFuZ2VsaW5rYCwgYW5kIGB2eGxhbl9mZGJfZXh0ZXJuYWxfbGVhcm5fYWRkYCAqYWxsKiBjYWxsIGB2eGxhbl9mZGJfdXBkYXRlYCwgYnV0IHBhc3MgYSBOVUxMIGZvciB0aGlzIG5ldyBgY3JlYXRlZGAgcGFyYW1ldGVyLiBUaGF0JiMzOTtzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBiZWNhdXNlIHdoYXQmIzM5O3MgZ29pbmcgdG8gaGFwcGVuIHdpdGggdGhhdCBOVUxMIHZhbHVlPwoKTW92aW5nIG92ZXIgdG8gYGRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jYCwgdGhlIHBpY3R1cmUgZ2V0cyBhIGJpdCBtb3JlIGNvbXBsZXguIEhlcmUsIGB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnlgIGdldHMgdGhlIGBmZGJfY3JlYXRlZGAgcGFyYW1ldGVyLCBhbmQgc3Vic2VxdWVudGx5IHBhc3NlcyBpdCBkb3duIHRvIGB2eGxhbl9mZGJfdXBkYXRlYC4gU2ltaWxhciB0aGluZyB3aXRoIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYC4gSG93ZXZlciwgYHZ4bGFuX3ZuaWxpc3RfdXBkYXRlX2dyb3VwYCBhbmQgYHZ4bGFuX3ZuaV91cGRhdGVgIHBhc3MgTlVMTCBmb3IgdGhlIGBmZGJfY3JlYXRlZGAgcGFyYW1ldGVyLiBOb3csIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGB2eGxhbl92bmlfYWRkYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBwYXNzaW5nIGAmYW1wO2ZkYl9jcmVhdGVkYCB0byBgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cGAsIGFuZCB0aGVyZSYjMzk7cyBzb21lIGVycm9yIGhhbmRsaW5nIGluIHBsYWNlLCBzcGVjaWZpY2FsbHkgZXJyb3IgaGFuZGxpbmcgd2l0aCBgZXJyX3ZuaV9kZWxgLiBJJiMzOTtsbCBoYXZlIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gY2FsbCBhcm91bmQgbGluZXMgNzEwLTc3MCBpbiBgdnhsYW5fdm5pZmlsdGVyLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcxNTpcdFx0cmV0dXJuIHZuaW5vZGU7XG4gNzE2Olx0fVxuIDcxNzpcdFxuIDcxODpcdHN0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9mcmVlKHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSlcbiA3MTk6XHR7XG4gNzIwOlx0XHRmcmVlX3BlcmNwdSh2bmlub2RlLVx1MDAzZXN0YXRzKTtcbiA3MjE6XHRcdGtmcmVlKHZuaW5vZGUpO1xuIDcyMjpcdH1cbiA3MjM6XHRcbiA3MjQ6XHRzdGF0aWMgdm9pZCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSk7XG4gNzI1Olx0XG4gNzI2Olx0c3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIDcyNzpcdFx0XHRcdCBzdHJ1Y3QgdnhsYW5fdm5pX2dyb3VwICp2ZyxcbiA3Mjg6XHRcdFx0XHQgdTMyIHZuaSwgdW5pb24gdnhsYW5fYWRkciAqZ3JvdXAsXG4gNzI5Olx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiA3MzA6XHR7XG4gNzMxOlx0XHRzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnZuaW5vZGU7XG4gNzMyOlx0XHRfX2JlMzIgdiA9IGNwdV90b19iZTMyKHZuaSk7XG4gNzMzOlx0XHRib29sIGZkYl9jcmVhdGVkID0gZmFsc2U7XG4gNzM0Olx0XHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbiA3MzU6XHRcdGludCBlcnIgPSAwO1xuIDczNjpcdFxuIDczNzpcdFx0aWYgKHZ4bGFuX3ZuaWZpbHRlcl9sb29rdXAodnhsYW4sIHYpKVxuIDczODpcdFx0XHRyZXR1cm4gdnhsYW5fdm5pX3VwZGF0ZSh2eGxhbiwgdmcsIHYsIGdyb3VwLCBcdTAwMjZjaGFuZ2VkLCBleHRhY2spO1xuIDczOTpcdFxuIDc0MDpcdFx0ZXJyID0gdnhsYW5fdm5pX2luX3VzZSh2eGxhbi1cdTAwM2VuZXQsIHZ4bGFuLCBcdTAwMjZ2eGxhbi1cdTAwM2VjZmcsIHYpO1xuIDc0MTpcdFx0aWYgKGVycikge1xuIDc0MjpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1ZOSSBpbiB1c2VcJiMzNDspO1xuIDc0MzpcdFx0XHRyZXR1cm4gZXJyO1xuIDc0NDpcdFx0fVxuIDc0NTpcdFxuIDc0NjpcdFx0dm5pbm9kZSA9IHZ4bGFuX3ZuaV9hbGxvYyh2eGxhbiwgdik7XG4gNzQ3Olx0XHRpZiAoIXZuaW5vZGUpXG4gNzQ4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDc0OTpcdFxuIDc1MDpcdFx0ZXJyID0gcmhhc2h0YWJsZV9sb29rdXBfaW5zZXJ0X2Zhc3QoXHUwMDI2dmctXHUwMDNldm5pX2hhc2gsXG4gNzUxOlx0XHRcdFx0XHRcdCAgICBcdTAwMjZ2bmlub2RlLVx1MDAzZXZub2RlLFxuIDc1MjpcdFx0XHRcdFx0XHQgICAgdnhsYW5fdm5pX3JodF9wYXJhbXMpO1xuIDc1MzpcdFx0aWYgKGVycikge1xuIDc1NDpcdFx0XHR2eGxhbl92bmlfZnJlZSh2bmlub2RlKTtcbiA3NTU6XHRcdFx0cmV0dXJuIGVycjtcbiA3NTY6XHRcdH1cbiA3NTc6XHRcbiA3NTg6XHRcdF9fdnhsYW5fdm5pX2FkZF9saXN0KHZnLCB2bmlub2RlKTtcbiA3NTk6XHRcbiA3NjA6XHRcdGlmICh2eGxhbi1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUClcbiA3NjE6XHRcdFx0dnhsYW5fdnNfYWRkX2RlbF92bmlub2RlKHZ4bGFuLCB2bmlub2RlLCBmYWxzZSk7XG4gNzYyOlx0XG4gNzYzOlx0XHRlcnIgPSB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKHZ4bGFuLCB2bmlub2RlLCBncm91cCwgdHJ1ZSwgXHUwMDI2Y2hhbmdlZCxcbiA3NjQ6XHRcdFx0XHRcdCAgICAgXHUwMDI2ZmRiX2NyZWF0ZWQsIGV4dGFjayk7XG4gNzY1Olx0XHRpZiAoZXJyKVxuIDc2NjpcdFx0XHRnb3RvIGVycl92bmlfZGVsO1xuIDc2NzpcdFxuIDc2ODpcdFx0dnhsYW5fdm5pZmlsdGVyX25vdGlmeSh2eGxhbiwgdm5pbm9kZSwgUlRNX05FV1RVTk5FTCk7XG4gNzY5Olx0XG4gNzcwOlx0XHRyZXR1cm4gMDtcbiA3NzE6XHRcbiA3NzI6XHRlcnJfdm5pX2RlbDpcbiA3NzM6XHRcdC8qIFVuZG8gb25seSB0aGUgZGVmYXVsdCBGREIgZW50cnkgdGhpcyBhZGQgaW5zdGFsbGVkLiAgQW4gZW50cnkgdGhhdFxuIDc3NDpcdFx0ICogd2FzIGFscmVhZHkgdGhlcmUsIHdoZXRoZXIgYWRkZWQgb3V0IG9mIGJhbmQgb3IgYnkgYW5vdGhlciBWTkksIGlzXG4gNzc1Olx0XHQgKiBsZWZ0IGFsb25lLlxuIDc3NjpcdFx0ICpcbiA3Nzc6XHRcdCAqIE5vIG1lbWJlcnNoaXAgaGFzIHRvIGJlIGdpdmVuIGJhY2s6IHZ4bGFuX2lnbXBfbGVhdmUoKSBpcyBnYXRlZCBvblxuIDc3ODpcdFx0ICogdnhsYW5fYWRkcl9tdWx0aWNhc3QoXHUwMDI2b2xkX3JlbW90ZV9pcCksIGFuZCBvbGRfcmVtb3RlX2lwIGlzIGEgY29weVxuIDc3OTpcdFx0ICogb2YgdGhlIHJlbW90ZSBJUCBvZiBhIG5vZGUgdGhpcyBhZGQganVzdCBhbGxvY2F0ZWQsIHNvIGl0IGlzIHplcm8uXG4gNzgwOlx0XHQgKlxuIDc4MTpcdFx0ICogVGhlIGFkZHJlc3MgcGlja2VkIGJlbG93IGlzIHRoZSBvbmUgdGhlIGVudHJ5IHdhcyBpbnN0YWxsZWRcbiA3ODI6XHRcdCAqIGFnYWluc3QuICBJZiB0aGUgcmVxdWVzdCBjYXJyaWVkIGEgZ3JvdXAsIHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKVxuIDc4MzpcdFx0ICogY29waWVkIGl0IGludG8gdm5pbm9kZS1cdTAwM2VyZW1vdGVfaXAgYmVmb3JlIHRoZSBqb2luIGNvdWxkIGZhaWw7IGlmXG4gNzg0Olx0XHQgKiBpdCBkaWQgbm90LCB0aGF0IGNvcHkgd2FzIHNraXBwZWQgYW5kIHRoZSBlbnRyeSB3ZW50IHRvIHRoZSBkZXZpY2VcbiA3ODU6XHRcdCAqIGRlZmF1bHQuXG4gNzg2Olx0XHQgKi9cbiA3ODc6XHRcdGlmIChmZGJfY3JlYXRlZCkge1xuIDc4ODpcdFx0XHR1bmlvbiB2eGxhbl9hZGRyICpyaXAgPSB2eGxhbl9hZGRyX2FueShcdTAwMjZ2bmlub2RlLVx1MDAzZXJlbW90ZV9pcCkgP1xuIDc4OTpcdFx0XHRcdFx0XHRcdTAwMjZ2eGxhbi1cdTAwM2VkZWZhdWx0X2RzdC5yZW1vdGVfaXAgOlxuIDc5MDpcdFx0XHRcdFx0XHRcdTAwMjZ2bmlub2RlLVx1MDAzZXJlbW90ZV9pcDtcbiA3OTE6XHRcbiA3OTI6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4gNzkzOlx0XHRcdF9fdnhsYW5fZmRiX2RlbGV0ZSh2eGxhbiwgYWxsX3plcm9zX21hYywgKnJpcCxcbiA3OTQ6XHRcdFx0XHRcdCAgIHZ4bGFuLVx1MDAzZWNmZy5kc3RfcG9ydCwgdm5pbm9kZS1cdTAwM2V2bmksXG4gNzk1Olx0XHRcdFx0XHQgICB2bmlub2RlLVx1MDAzZXZuaSxcbiA3OTY6XHRcdFx0XHRcdCAgIHZ4bGFuLVx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pZmluZGV4LCB0cnVlKTtcbiA3OTc6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbiA3OTg6XHRcdH1cbiA3OTk6XHRcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2dmctXHUwMDNldm5pX2hhc2gsIFx1MDAyNnZuaW5vZGUtXHUwMDNldm5vZGUsXG4gODAwOlx0XHRcdFx0ICAgICAgIHZ4bGFuX3ZuaV9yaHRfcGFyYW1zKTtcbiA4MDE6XHRcdF9fdnhsYW5fdm5pX2RlbF9saXN0KHZnLCB2bmlub2RlKTtcbiA4MDI6XHRcdGlmICh2eGxhbi1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUClcbiA4MDM6XHRcdFx0dnhsYW5fdnNfYWRkX2RlbF92bmlub2RlKHZ4bGFuLCB2bmlub2RlLCB0cnVlKTtcbiA4MDQ6XHRcdGNhbGxfcmN1KFx1MDAyNnZuaW5vZGUtXHUwMDNlcmN1LCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZSk7XG4gODA1Olx0XHRyZXR1cm4gZXJyO1xuIDgwNjpcdH1cbiA4MDc6XHRcbiA4MDg6XHRzdGF0aWMgdm9pZCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcbiA4MDk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzE2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgdnhsYW5fdm5pX2FkZCBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHBhdGNoIHRvIGB2eGxhbl92bmlfYWRkYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIHRvIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cGAuIFByZXZpb3VzbHksIGB2eGxhbl92bmlfYWRkYCBhcHBlYXJzIHRvIGhhdmUgY29tcGxldGVseSBpZ25vcmVkIHRoZSByZXR1cm4gdmFsdWUgb2YgYHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXBgLiBUaGUgY29kZSBqdXN0IHBsb3dlZCBhaGVhZCB0byBgdnhsYW5fdm5pZmlsdGVyX25vdGlmeWAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYCBoYWQgYW4gaXNzdWUsIHVsdGltYXRlbHkgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUuIEVzc2VudGlhbGx5LCBhIHBhcnRpYWxseSBpbml0aWFsaXplZCB2bmlub2RlIHdhcyBsZWZ0IGhhbmdpbmcgYXJvdW5kIGluIHRoZSByaGFzaHRhYmxlIGFuZCBsaXN0LiBUaGF0JiMzOTtzIGEgc2VyaW91cyBwb3RlbnRpYWwgbGVhayBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZS4KCk5vdywgYWZ0ZXIgdGhlIHBhdGNoLCB3ZSBoYXZlIGEgcm9idXN0IGVycm9yLWhhbmRsaW5nIHBhdGguIElmIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYCBmYWlscywgdGhlIGB2bmlub2RlYCBnZXRzIGNsZWFuZWQgdXAgcHJvcGVybHkuIFRoaXMgaW52b2x2ZXMgYGNhbGxfcmN1YCBmb3IgUkNVLXNhZmUgZnJlZWluZywgcmVtb3ZpbmcgdGhlIG5vZGUgZnJvbSB0aGUgaGFzaHRhYmxlIGFuZCBsaXN0LCBoYW5kbGluZyBzcGlubG9ja3MgKGBzcGluX2xvY2tfYmhgKSwgYW5kIHBvdGVudGlhbGx5IHVuZG9pbmcgdGhlIEZEQiBkZWxldGlvbiBpZiBpdCB3YXMgY3JlYXRlZCAoYGZkYl9jcmVhdGVkYCkuIFRoZXJlJiMzOTtzIGV2ZW4gc29ja2V0IG1hbmlwdWxhdGlvbiB3aXRoIGB2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGVgLCB3aGljaCBsaWtlbHkgaW50ZXJhY3RzIHdpdGggdGhlIGRhdGFwYXRoLiBJdCYjMzk7cyBhIGNvbXByZWhlbnNpdmUgYXBwcm9hY2guCgpUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZS4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29yZSB2aXJ0dWFsIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIHZ4bGFuIGNvcmUgYW5kIHZuaWZpbHRlciBtb2R1bGVzLiBUaGVzZSBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBuZXRsaW5rIChzcGVjaWZpY2FsbHkgcnRuZXRsaW5rIHZuaWZpbHRlciBjb21tYW5kcykuIFRoaXMgbWVhbnMgYW55IGVycm9yIGluIHRoZSBwcmV2aW91cyBjb2RlIGNvdWxkIGhhdmUgY2F1c2VkIHNpZ25pZmljYW50IHByb2JsZW1zIGJlY2F1c2Ugb2YgdGhlIGxhY2sgb2YgZXJyb3IgaGFuZGxpbmcsIGJ1dCBub3csIHRoaXMgaXMgYWxsIG11Y2ggbW9yZSByb2J1c3QuCgpJIG5lZWQgdG8gc2VlIGhvdyBgdnhsYW5fdm5pX2FkZGAgaXMgcmVhY2hlZCBzbyBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ3JlcCBmb3IgdGhlIGZ1bmN0aW9uIG5hbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Z4bGFuX3ZuaV9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz02NDY9c3RhdGljIGludCB2eGxhbl92bmlfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTY3MC1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjY3MTpzdGF0aWMgdm9pZCBfX3Z4bGFuX3ZuaV9hZGRfbGlzdChzdHJ1Y3QgdnhsYW5fdm5pX2dyb3VwICp2ZyxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTY3Mi1cdFx0XHRcdCBzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnYpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NzI0PXN0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTcyNS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjcyNjpzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy03MjctXHRcdFx0IHN0cnVjdCB2eGxhbl92bmlfZ3JvdXAgKnZnLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTc1Ny1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjc1ODpcdF9fdnhsYW5fdm5pX2FkZF9saXN0KHZnLCB2bmlub2RlKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTc1OS1cbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz04MTY9c3RhdGljIGludCB2eGxhbl92bmlfZGVsKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTg1NC1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjg1NTpzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGRfZGVsKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBfX3UzMiBzdGFydF92bmksXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04NTYtXHRcdFx0ICAgICBfX3UzMiBlbmRfdm5pLCB1bmlvbiB2eGxhbl9hZGRyICpncm91cCxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04NjYtXHRcdGNhc2UgUlRNX05FV1RVTk5FTDpcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjg2NzpcdFx0XHRlcnIgPSB2eGxhbl92bmlfYWRkKHZ4bGFuLCB2ZywgdiwgZ3JvdXAsIGV4dGFjayk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04NjgtXHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9ODg1PXN0YXRpYyBpbnQgdnhsYW5fcHJvY2Vzc192bmlfZmlsdGVyKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTkzMy1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjkzNDpcdGVyciA9IHZ4bGFuX3ZuaV9hZGRfZGVsKHZ4bGFuLCB2bmlfc3RhcnQsIHZuaV9lbmQsIFx1MDAyNmdyb3VwLCBjbWQsXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy05MzUtXHRcdFx0XHRleHRhY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgVnhMQU4gVk5JIEZpbHRlcioqCgpPa2F5LCBzbyBgdnhsYW5fcHJvY2Vzc192bmlfZmlsdGVyYCBpcyB0cmlnZ2VyZWQsIGVpdGhlciB0aHJvdWdoIHRoZSBzdGFuZGFyZCBydG5ldGxpbmsgcm91dGUgdXBkYXRlIHByb2Nlc3MgKGBSVE1fTkVXVFVOTkVMYCkgb3IgZGlyZWN0bHkgYnkgYSBgdm5pZmlsdGVyYCBjYWxsLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCAqd2hlcmUqIHRoaXMgZmlsdGVyaW5nIHJvdXRpbmUgaXMgYWN0dWFsbHkgZ2V0dGluZyBob29rZWQgdXAgaW4gdGhlIGNvZGUuIEkgbmVlZCB0byB0cmFjZSBpdHMgcmVnaXN0cmF0aW9uIHRvIGdldCB0aGUgYmlnIHBpY3R1cmUgb2YgaXRzIGludGVncmF0aW9uIGludG8gdGhlIFZ4TEFOIGRhdGEgcGF0aC4gSeKAmW0gdGhpbmtpbmcgSSB3aWxsIGVpdGhlciBmaW5kIGl0IHJlZ2lzdGVyZWQgYXMgYSBoYW5kbGVyIGZvciBhIHBhcnRpY3VsYXIgTmV0bGluayBmYW1pbHkvbWVzc2FnZSB0eXBlIG9yIGludGVncmF0ZWQgaW50byB0aGUgb3ZlcmFsbCBuZXR3b3JrIGRldmljZSBvciB0dW5uZWwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyB0aGUgY2FsbHMgdG8gZmluZCBvdXQgd2hlcmUgdGhlIHJlZ2lzdHJhdGlvbiBoYXBwZW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2eGxhbl9wcm9jZXNzX3ZuaV9maWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz04NTU9c3RhdGljIGludCB2eGxhbl92bmlfYWRkX2RlbChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgX191MzIgc3RhcnRfdm5pLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTg4NC1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjg4NTpzdGF0aWMgaW50IHZ4bGFuX3Byb2Nlc3Nfdm5pX2ZpbHRlcihzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTg4Ni1cdFx0XHRcdCAgICBzdHJ1Y3QgbmxhdHRyICpubHZuaWZpbHRlcixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz05ODI9c3RhdGljIGludCB2eGxhbl92bmlmaWx0ZXJfcHJvY2VzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0xMDE1LVx0XHRcdFx0IHNpemVvZigqdG1zZyksIHJlbSkge1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6MTAxNjpcdFx0ZXJyID0gdnhsYW5fcHJvY2Vzc192bmlfZmlsdGVyKHZ4bGFuLCBhdHRyLCBubGgtXHUwMDNlbmxtc2dfdHlwZSxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTEwMTctXHRcdFx0XHRcdCAgICAgICBleHRhY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA0NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgVHVubmVsIENvbmZpZ3VyYXRpb24gSGFuZGxlcioqCgpPa2F5LCBzbyBgdnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3NgIGlzIHJlZ2lzdGVyZWQgYXMgYSBuZXRsaW5rIGhhbmRsZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBsZXQmIzM5O3MgdHJhY2UgZXhhY3RseSAqd2hlcmUqIHRoYXQgcmVnaXN0cmF0aW9uIGhhcHBlbnMuJiMzNDsgVW5kZXJzdGFuZGluZyB0aGUgaGFuZGxlciYjMzk7cyBjb250ZXh0IGlzIGNydWNpYWwuIEtub3dpbmcgdGhlIHJlZ2lzdHJhdGlvbiBwb2ludCB0ZWxscyBtZSBhIGxvdCBhYm91dCBpdHMgc2NvcGUsIGhvdyBpdCYjMzk7cyBpbnZva2VkLCBhbmQgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVGhpcyBpcyBhIHN0YW5kYXJkIGluaXRpYWwgYXBwcm9hY2ggd2hlbiBkaWdnaW5nIGludG8ga2VybmVsIG5ldHdvcmtpbmcgY29kZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0dW5uZWwgY29uZmlndXJhdGlvbnMg4oCTIHVuZGVyc3RhbmRpbmcgdGhlIGVudHJ5IHBvaW50IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIHBsYW5lIGludGVyYWN0aW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNhbGwgY2hhaW4gdGhhdCBsZWFkcyB0byB0aGlzIHJlZ2lzdHJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz05NjM9aW50IHZ4bGFuX3ZuaWdyb3VwX2luaXQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4pXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtOTgxLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6OTgyOnN0YXRpYyBpbnQgdnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy05ODMtXHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9MTAzMT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgdnhsYW5fdm5pZmlsdGVyX3J0bmxfbXNnX2hhbmRsZXJzW10gPSB7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0xMDMyLVx0e1RISVNfTU9EVUxFLCBQRl9CUklER0UsIFJUTV9HRVRUVU5ORUwsIE5VTEwsIHZ4bGFuX3ZuaWZpbHRlcl9kdW1wLCAwfSxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjEwMzM6XHR7VEhJU19NT0RVTEUsIFBGX0JSSURHRSwgUlRNX05FV1RVTk5FTCwgdnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3MsIE5VTEwsIDB9LFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6MTAzNDpcdHtUSElTX01PRFVMRSwgUEZfQlJJREdFLCBSVE1fREVMVFVOTkVMLCB2eGxhbl92bmlmaWx0ZXJfcHJvY2VzcywgTlVMTCwgMH0sXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0xMDM1LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjYzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogdnhsYW4gRkRCIFVwZGF0ZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBpZGVudGlmaWVkIHNvbWUgcHJvbWlzaW5nIGdyb3VuZCBmb3IgZnV6emluZy4gV2UmIzM5O3ZlIGdvdCBgUEZfQlJJREdFYCwgYFJUTV9ORVdUVU5ORUxgLCBhbmQgYFJUTV9ERUxUVU5ORUxgIHJlZ2lzdGVyZWQsIG1lYW5pbmcgdGhpcyBpcyByZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rIHNvY2tldHMsIGV2ZW4gZnJvbSB1bnByaXZpbGVnZWQgdXNlcnNwYWNlLCB3aGljaCBpcyBwZXJmZWN0IGZvciBzeXprYWxsZXIuCgpOb3csIEkmIzM5O20gZm9jdXNpbmcgb24gYHZ4bGFuX2ZkYl91cGRhdGVgLiBUaGlzIGZ1bmN0aW9uIGlzIHBpdm90YWw7IGl0JiMzOTtzIHVzZWQgaW4gY3J1Y2lhbCBhcmVhczogRkRCIG5ldGxpbmsgdXBkYXRlcyAoYHZ4bGFuX2ZkYl9hZGRgKSwgcGFja2V0IHNub29waW5nIChgdnhsYW5fc25vb3BgKSwgdnhsYW4gaW50ZXJmYWNlIGNyZWF0aW9uIGFuZCBtb2RpZmljYXRpb24gKGB2eGxhbl9kZXZfY3JlYXRlYCwgYHZ4bGFuX2NoYW5nZWxpbmtgKSwgc3dpdGNoZGV2L2JyaWRnZSBvZmZsb2FkL2xlYXJuaW5nIChgdnhsYW5fZmRiX2V4dGVybmFsX2xlYXJuX2FkZGApLCBhbmQgZXZlbiB2bmlmaWx0ZXIgbG9naWMgKGB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnlgKS4gQ2xlYXJseSwgdGhpcyB0b3VjaGVzIGNvcmUgdnhsYW4gZHJpdmVyIGZ1bmN0aW9uYWxpdHksIGluY2x1ZGluZyBzdGF0ZSBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgUkNVIGZyZWVpbmcsIGFuZCBGREIgbWFuaXB1bGF0aW9ucy4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSAtIFdvcnRoRnV6emluZyA9IHRydWUhCgpOb3cgbGV0JiMzOTtzIGZvY3VzIG9uIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMuIEkmIzM5O3ZlIGdvdCB0byBhdm9pZCB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMsIHNvIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBpbXBsZW1lbnRpbmcgdGhlIGNvcmUgbG9naWMsIG9yIGFyZSBBUEkgZW50cnlwb2ludHMuCgpUaGUgZnVuY3Rpb25zIHRvdWNoZWQgYnkgdGhpcyBjb21taXQgYXJlOiBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AsIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZWAsIGB2eGxhbl9mZGJfdXBkYXRlYCwgYHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeWAsIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYCwgYHZ4bGFuX3ZuaV9hZGRgLCBgdnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3NgLCBhbmQgYHZ4bGFuX2ZkYl9hZGRgLgoKSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGEgZmV3IGtleSBvbmVzOiBgdnhsYW5fZmRiX3VwZGF0ZWAsIHdoaWNoIGlzIGNsZWFybHkgdGhlIGNvcmUgdXBkYXRlZCBmdW5jdGlvbjsgYHZ4bGFuX3ZuaV9hZGRgLCBiZWNhdXNlIGl0IGhhcyB0aGUgZXJyb3Igcm9sbGJhY2sgbG9naWM7IGB2eGxhbl92bmlmaWx0ZXJfcHJvY2Vzc2AgLSB0aGUgcnRubCBlbnRyeXBvaW50IGZvciBgUlRNX05FV1RVTk5FTGAgd2hpY2ggdHJpZ2dlcnMgYHZ4bGFuX3ZuaV9hZGRgOyBhbmQgYHZ4bGFuX2ZkYl9hZGRgLCBiZWNhdXNlIGl0JiMzOTtzIGEgcnRubCBlbnRyeXBvaW50IHRoYXQgY2FsbHMgYHZ4bGFuX2ZkYl91cGRhdGVgLiBgdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5YCBhbHNvIG1lcml0cyBzY3J1dGlueSBhcyBhbiB1cGRhdGVkIGZ1bmN0aW9uLgoKTm93LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGdvb2QgdGFyZ2V0cy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhleSYjMzk7cmUgbm9uLXN0YXRpYywgc28gdGhleSB3b24mIzM5O3QgYmUgaW5saW5lZCBhbmQgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSBmdXp6ZXIuCgpgdnhsYW5fZmRiX3VwZGF0ZWAgaXMgZGVjbGFyZWQgaW4gYHZ4bGFuX3ByaXZhdGUuaGAsIHNvIGl0JiMzOTtzICpkZWZpbml0ZWx5KiBhIG5vbi1zdGF0aWMgc3ltYm9sLiBJdCYjMzk7cyBkZWNsYXJlZCBhczoKYGBgYwppbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKCQkgICAgIGNvbnN0IHU4ICpzcmNfbWFjLCB1bmlvbiB2eGxhbl9hZGRyICppcCwKCQkgICAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncywKCQkgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSwKCQkgICAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsCgkJICAgICBib29sIHN3ZGV2X25vdGlmeSwgYm9vbCAqY3JlYXRlZCwKCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CmBgYAoKQXMgZm9yIGB2eGxhbl92bmlmaWx0ZXJfcHJvY2Vzc2AsIHRoYXQmIzM5O3MgYSBmdW5jdGlvbiBwb2ludGVyIGluIGB2eGxhbl92bmlmaWx0ZXJfcnRubF9tc2dfaGFuZGxlcnNgLiBObyB3YXkgdGhlIGNvbXBpbGVyIGlubGluZXMgdGhhdCwgc28gdGhhdCYjMzk7cyBnb29kLgoKYHZ4bGFuX2ZkYl9hZGRgIGlzIGFsc28gYW4gZW50cnkgcG9pbnQgLSBsZXQmIzM5O3MgY2hlY2sgaG93IGl0JiMzOTtzIHJlZmVyZW5jZWQuIEl0JiMzOTtzIHJlZmVyZW5jZWQgdmlhIHRoZSBgdnhsYW5fbmV0ZGV2X29wc2AsIHdoaWNoIGFyZSBuZXRsaW5rIGZ1bmN0aW9ucy4gU28gdGhhdCYjMzk7cyByZWFjaGFibGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Z4bGFuX2ZkYl9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTE1OD1zdGF0aWMgaW50IHZ4bGFuX2ZkYl9wYXJzZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTI0NC0vKiBBZGQgc3RhdGljIGVudHJ5ICh2aWEgbmV0bGluaykgKi9cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoxMjQ1OnN0YXRpYyBpbnQgdnhsYW5fZmRiX2FkZChzdHJ1Y3QgbmRtc2cgKm5kbSwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMjQ2LVx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0zMzA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdnhsYW5fbmV0ZGV2X2V0aGVyX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzMxOC1cdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGV0aF9tYWNfYWRkcixcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozMzE5Olx0Lm5kb19mZGJfYWRkXHRcdD0gdnhsYW5fZmRiX2FkZCxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMzIwLVx0Lm5kb19mZGJfZGVsXHRcdD0gdnhsYW5fZmRiX2RlbGV0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMjQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFZYTEFOIEZEQiBhbmQgVk5JIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgdnhsYW5fZmRiX2FkZGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVmaW5lZCBpbiB0aHJlZSBkaWZmZXJlbnQgcGxhY2VzLCBhbGwgdGhyb3VnaCB0aGUgYG5kb19mZGJfYWRkYCBuZXRkZXZfb3BzIHN0cnVjdHVyZS4gVGhlIGZhY3QgdGhhdCBpdHMgYWRkcmVzcyBpcyB0YWtlbiBzb21ld2hlcmUgbWVhbnMgaXQmIzM5O3MgZGVmaW5pdGVseSAqbm90KiBpbmxpbmVkLCB0aGF0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlci4gTm93LCBJJiMzOTttIHNoaWZ0aW5nIG15IGZvY3VzIHRvIGB2eGxhbl92bmlfYWRkYC4gVGhlIHF1ZXN0aW9uIGlzLCBpcyBpdHMgYWRkcmVzcyBiZWluZyB1c2VkIHNvbWV3aGVyZSwgbWFraW5nIGlubGluaW5nIGltcG9zc2libGUsIG9yIGNhbiB3ZSBwb3RlbnRpYWxseSBleHBlY3QgYW4gaW5saW5lZCBpbXBsZW1lbnRhdGlvbj8KClRvIGZpZ3VyZSB0aGlzIG91dCwgSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxscy4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IGB2eGxhbl92bmlmaWx0ZXIuY2AsIEkgc2VlIGB2eGxhbl92bmlfYWRkX2RlbGAgY2FsbHMgYHZ4bGFuX3ZuaV9hZGRgLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIGB2eGxhbl92bmlfYWRkX2RlbGAgaXRzZWxmIGlzIGlubGluZWQgd2l0aGluIGB2eGxhbl9wcm9jZXNzX3ZuaV9maWx0ZXJgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBUbyBnZXQgYSBjbGVhciBwaWN0dXJlLCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgYmxvY2sgYXJvdW5kIGxpbmVzIDg1MC04ODAgaW4gYGRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4NTA6XHRcdHJldHVybiAwO1xuIDg1MTpcdG91dDpcbiA4NTI6XHRcdHJldHVybiBlcnI7XG4gODUzOlx0fVxuIDg1NDpcdFxuIDg1NTpcdHN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZF9kZWwoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIF9fdTMyIHN0YXJ0X3ZuaSxcbiA4NTY6XHRcdFx0XHQgICAgIF9fdTMyIGVuZF92bmksIHVuaW9uIHZ4bGFuX2FkZHIgKmdyb3VwLFxuIDg1NzpcdFx0XHRcdCAgICAgaW50IGNtZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDg1ODpcdHtcbiA4NTk6XHRcdHN0cnVjdCB2eGxhbl92bmlfZ3JvdXAgKnZnO1xuIDg2MDpcdFx0aW50IHYsIGVyciA9IDA7XG4gODYxOlx0XG4gODYyOlx0XHR2ZyA9IHJ0bmxfZGVyZWZlcmVuY2UodnhsYW4tXHUwMDNldm5pZ3JwKTtcbiA4NjM6XHRcbiA4NjQ6XHRcdGZvciAodiA9IHN0YXJ0X3ZuaTsgdiBcdTAwM2M9IGVuZF92bmk7IHYmIzQzOyYjNDM7KSB7XG4gODY1Olx0XHRcdHN3aXRjaCAoY21kKSB7XG4gODY2Olx0XHRcdGNhc2UgUlRNX05FV1RVTk5FTDpcbiA4Njc6XHRcdFx0XHRlcnIgPSB2eGxhbl92bmlfYWRkKHZ4bGFuLCB2ZywgdiwgZ3JvdXAsIGV4dGFjayk7XG4gODY4Olx0XHRcdFx0YnJlYWs7XG4gODY5Olx0XHRcdGNhc2UgUlRNX0RFTFRVTk5FTDpcbiA4NzA6XHRcdFx0XHRlcnIgPSB2eGxhbl92bmlfZGVsKHZ4bGFuLCB2ZywgdiwgZXh0YWNrKTtcbiA4NzE6XHRcdFx0XHRicmVhaztcbiA4NzI6XHRcdFx0ZGVmYXVsdDpcbiA4NzM6XHRcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbiA4NzQ6XHRcdFx0XHRicmVhaztcbiA4NzU6XHRcdFx0fVxuIDg3NjpcdFx0XHRpZiAoZXJyKVxuIDg3NzpcdFx0XHRcdGdvdG8gb3V0O1xuIDg3ODpcdFx0fVxuIDg3OTpcdFxuIDg4MDpcdFx0cmV0dXJuIDA7XG4gODgxOlx0b3V0OlxuIDg4MjpcdFx0cmV0dXJuIGVycjtcbiA4ODM6XHR9XG4gODg0Olx0XG4gODg1Olx0c3RhdGljIGludCB2eGxhbl9wcm9jZXNzX3ZuaV9maWx0ZXIoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gODg2Olx0XHRcdFx0XHQgICAgc3RydWN0IG5sYXR0ciAqbmx2bmlmaWx0ZXIsXG4gODg3Olx0XHRcdFx0XHQgICAgaW50IGNtZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDg4ODpcdHtcbiA4ODk6XHRcdHN0cnVjdCBubGF0dHIgKnZhdHRyc1tWWExBTl9WTklGSUxURVJfRU5UUllfTUFYICYjNDM7IDFdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODExNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBWWExBTiBTeW1ib2wgQmVoYXZpb3IqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlc2UgVlhMQU4gc3ltYm9scy4gRmlyc3Qgb2ZmLCBJJiMzOTttIGNlcnRhaW4gdGhhdCBgdnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3NgIGlzICpub3QqIGlubGluZWQuIEl0JiMzOTtzIHRoZSBuZXRsaW5rIGVudHJ5IHBvaW50LCBhbmQgdGhhdCYjMzk7cyBhIGRlYWQgZ2l2ZWF3YXkuIFRoZSBjb21waWxlciB3b24mIzM5O3Qgb3B0aW1pemUgdGhhdCBhd2F5OyBpdCBuZWVkcyB0byBiZSBhY2Nlc3NpYmxlIGFzIGEgZGlzdGluY3Qgc3ltYm9sLiBgdnhsYW5fdm5pX2FkZGAgaXMgYSBiaXQgdHJpY2tpZXIuIEl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCBhbmQgd2hpbGUgaXQmIzM5O3MgYSBkZWNlbnQtc2l6ZWQgb25lLCBhcm91bmQgOTAgbGluZXMsIHNvIHRoZSBjb21waWxlciAqbWlnaHQqIGlubGluZSBpdCwgZGVwZW5kaW5nIG9uIHRoZSBjaXJjdW1zdGFuY2VzLiAgSXQmIzM5O3Mgd29ydGggbm90aW5nLgoKSG93ZXZlciwgYHZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzYCAqd2lsbCogZXhpc3QgYXMgYSBzeW1ib2wsIGFuZCBpdCYjMzk7cyB0aGUgbWFpbiBwb2ludCBvZiBlbnRyeSB2aWEgbmV0bGluay4gIE5vdywgYHZ4bGFuX2ZkYl91cGRhdGVgIGlzIGEgdG90YWxseSBkaWZmZXJlbnQgYmVhc3QuICBJdCYjMzk7cyBnbG9iYWwsIGRlZmluZWQgaW4gYHZ4bGFuX3ByaXZhdGUuaGAsIGFuZCB1c2VkIGluIG11bHRpcGxlIGNvbXBpbGF0aW9uIHVuaXRzOiBgdnhsYW5fY29yZS5jYCBhbmQgYHZ4bGFuX3ZuaWZpbHRlci5jYC4gIFRoYXQgbWVhbnMgbm8gY3Jvc3MtdW5pdCBpbmxpbmluZyBpcyBoYXBwZW5pbmcsIGVuZCBvZiBzdG9yeSEKCkFuZCBmaW5hbGx5LCBgdnhsYW5fZmRiX2FkZGAgaXMgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXRzIGFkZHJlc3MgaXMgdGFrZW4gYW5kIGFzc2lnbmVkIHRvIGEgYG5kb19mZGJfYWRkYCBzdHJ1Y3QuIFRoYXQgZ3VhcmFudGVlcyBpdCB3aWxsIGhhdmUgaXRzIG93biBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcyBpbiBib3RoIHRoZSBgdm1saW51eGAgaW1hZ2UgYW5kIHRoZSBgdnhsYW4ua29gIG1vZHVsZS4KCk5vdywgSSBzaG91bGQgcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBsb29rIGF0IGBkcml2ZXJzL25ldC9LY29uZmlnYCBmb3IgVlhMQU4uIE9rYXksIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBWWExBTmAgcmVxdWlyZXMgYElORVRgLCBhbmQgaXQgYHNlbGVjdGBzIGBORVRfVURQX1RVTk5FTGAgYW5kIGBHUk9fQ0VMTFNgLiBHb29kLgoKSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBgdnhsYW5fdm5pZmlsdGVyLmNgIGRvZXNuJiMzOTt0IGhhdmUgYW55IGFkZGl0aW9uYWwgY29uZmlnIHJlcXVpcmVtZW50cy4gIExldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYHMgaW4gdGhlIGNvZGUgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NTMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipWWExBTiBGaWx0ZXJpbmcgQ29uZmlndXJhdGlvbiBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgdnhsYW5fdm5pZmlsdGVyLmNgIGZpbGUuIEkmIzM5O20gZ2xhZCB0byBzZWUgdGhlcmUgYXJlIG5vIGAjaWZkZWZzYCBpbiBpdCDigJMgdGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnQuIEtlZXBpbmcgdGhpbmdzIGNsZWFuIGxpa2UgdGhhdCBhbHdheXMgbWFrZXMgbWFpbnRlbmFuY2UgZWFzaWVyIGRvd24gdGhlIGxpbmUuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmaWx0ZXJpbmcgbWVjaGFuaXNtIGlzIGFjdHVhbGx5IGJlaW5nIGNvbnRyb2xsZWQsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSYjMzk7bGwgbmVlZCB0byBnbyBodW50aW5nIGZvciBhbGwgdGhlIGBDT05GSUdfYCByZWZlcmVuY2VzIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3Z4bGFuYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBmZWF0dXJlIGZsYWdzIHdpbGwgYmUgZGVmaW5lZC4gVW5kZXJzdGFuZGluZyB0aG9zZSBzZXR0aW5ncyBpcyBnb2luZyB0byBiZSBrZXkgdG8gc2VlaW5nIGhvdyB0aGlzIGZpbHRlciBpcyBlbmFibGVkLCBkaXNhYmxlZCwgb3IgY29uZmlndXJlZC4gVGltZSB0byBkaXZlIGludG8gdGhvc2UgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4vTWFrZWZpbGUtNC1cbmRyaXZlcnMvbmV0L3Z4bGFuL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1ZYTEFOKSAmIzQzOz0gdnhsYW4ub1xuZHJpdmVycy9uZXQvdnhsYW4vTWFrZWZpbGUtNi1cbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzItXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzQtI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl90dW5uZWwuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xMDA9c3RhdGljIHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuX3ZzX2ZpbmRfdm5pKHN0cnVjdCB2eGxhbl9zb2NrICp2cyxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTIzLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjEyNDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpKSB7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTI1LVx0XHRcdGNvbnN0IHN0cnVjdCB2eGxhbl9jb25maWcgKmNmZyA9IFx1MDAyNm5vZGUtXHUwMDNldnhsYW4tXHUwMDNlY2ZnO1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xMTU4PXN0YXRpYyBpbnQgdnhsYW5fZmRiX3BhcnNlKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMTgzLVx0XHRcdGlwLVx1MDAzZXNhLnNhX2ZhbWlseSA9IEFGX0lORVQ7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTE4NDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMTg1LVx0XHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xNDQyPXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB2eGxhbl9zbm9vcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNDU0LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE0NTU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTQ1Ni1cdGlmIChzcmNfaXAtXHUwMDNlc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNlxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xNTI2PXN0YXRpYyB2b2lkIHZ4bGFuX3NvY2tfcmVsZWFzZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbilcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTUyOC1cdHN0cnVjdCB2eGxhbl9zb2NrICpzb2NrNCA9IHJ0bmxfZGVyZWZlcmVuY2UodnhsYW4tXHUwMDNldm40X3NvY2spO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE1Mjk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTUzMC1cdHN0cnVjdCB2eGxhbl9zb2NrICpzb2NrNiA9IHJ0bmxfZGVyZWZlcmVuY2UodnhsYW4tXHUwMDNldm42X3NvY2spO1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNTQ2LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE1NDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTU0OC1cdGlmIChfX3Z4bGFuX3NvY2tfcmVsZWFzZV9wcmVwKHNvY2s2KSkge1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xNjA3PXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB2eGxhbl9zZXRfbWFjKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNjI1LVx0XHRzYWRkci5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE2MjY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTYyNy1cdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTE2NDA9c3RhdGljIGJvb2wgdnhsYW5fZWNuX2RlY2Fwc3VsYXRlKHN0cnVjdCB2eGxhbl9zb2NrICp2cywgdm9pZCAqb2lwaCxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTY0Ni1cdFx0ZXJyID0gSVBfRUNOX2RlY2Fwc3VsYXRlKG9pcGgsIHNrYik7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTY0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNjQ4LVx0ZWxzZVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xODYwPXN0YXRpYyBpbnQgYXJwX3JlZHVjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgdm5pKVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xOTU2LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE5NTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTk1OC1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnZ4bGFuX25hX2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqcmVxdWVzdCxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MjEyND1zdGF0aWMgYm9vbCByb3V0ZV9zaG9ydGNpcmN1aXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjE1My1cdH1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyMTU0OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTIxNTUtXHRjYXNlIEVUSF9QX0lQVjY6XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTIyODU9c3RhdGljIHZvaWQgdnhsYW5fZW5jYXBfYnlwYXNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB2eGxhbl9kZXYgKnNyY192eGxhbixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjMwMS1cdFx0bG9vcGJhY2suc2Euc2FfZmFtaWx5ID0gIEFGX0lORVQ7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MjMwMjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yMzAzLVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MjMzNT1zdGF0aWMgaW50IGVuY2FwX2J5cGFzc19pZl9sb2NhbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yMzQxLXtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyMzQyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTIzNDMtXHQvKiBJUHY2IHJ0LWZsYWdzIGFyZSBjaGVja2VkIGFnYWluc3QgUlRGX0xPQ0FMLCBidXQgdGhlIHZhbHVlIG9mXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTIzNzQ9dm9pZCB2eGxhbl94bWl0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yNDU2LVx0XHRcdHVkcF9zdW0gPSAhKGZsYWdzIFx1MDAyNiBWWExBTl9GX1VEUF9aRVJPX0NTVU02X1RYKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyNDU3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI0NTgtXHRcdHN3aXRjaCAodnhsYW4tXHUwMDNlY2ZnLmxhYmVsX3BvbGljeSkge1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yNTc5LVx0XHRcdFx0ICAgIGlwY2JfZmxhZ3MpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjI1ODA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjU4MS1cdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTI3NTU9c3RhdGljIG5ldGRldl90eF90IHZ4bGFuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjc4Ny1cdFx0XHRyZXR1cm4gYXJwX3JlZHVjZShkZXYsIHNrYiwgdm5pKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyNzg4OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI3ODktXHRcdGVsc2UgaWYgKG50b2hzKGV0aC1cdTAwM2VoX3Byb3RvKSA9PSBFVEhfUF9JUFY2IFx1MDAyNlx1MDAyNlxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0yOTE0PXN0YXRpYyB2b2lkIHZ4bGFuX3ZzX2RlbF9kZXYoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4pXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI5MTgtXHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2dnhsYW4tXHUwMDNlaGxpc3Q0LmhsaXN0KTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyOTE5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI5MjAtXHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2dnhsYW4tXHUwMDNlaGxpc3Q2LmhsaXN0KTtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MzI1OT1zdGF0aWMgaW50IHZ4bGFuX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTMyODQtXHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjMyODU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzI4Ni1cdFx0c3RydWN0IHZ4bGFuX3NvY2sgKnNvY2s2ID0gcmN1X2RlcmVmZXJlbmNlKHZ4bGFuLVx1MDAzZXZuNl9zb2NrKTtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzI5OS1cdFx0ZHN0X3JlbGVhc2UobmRzdCk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MzMwMDojZWxzZSAvKiAhQ09ORklHX0lQVjYgKi9cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMzAxLVx0XHRyZXR1cm4gLUVQRk5PU1VQUE9SVDtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MzY2NT1zdGF0aWMgaW50IF9fdnhsYW5fc29ja19hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIGJvb2wgaXB2Nilcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzY5NC1cdFx0cmV0dXJuIFBUUl9FUlIodnMpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjM2OTU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzY5Ni1cdGlmIChpcHY2KSB7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTM3MTQ9c3RhdGljIGludCB2eGxhbl9zb2NrX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbilcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzcyMS1cdFJDVV9JTklUX1BPSU5URVIodnhsYW4tXHUwMDNldm40X3NvY2ssIE5VTEwpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjM3MjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzcyMy1cdFJDVV9JTklUX1BPSU5URVIodnhsYW4tXHUwMDNldm42X3NvY2ssIE5VTEwpO1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0zNzY4PXN0YXRpYyBpbnQgdnhsYW5fY29uZmlnX3ZhbGlkYXRlKHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCB2eGxhbl9jb25maWcgKmNvbmYsXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTM4MTAtXHRpZiAoY29uZi1cdTAwM2VzYWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozODExOlx0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0lQVjYpKSB7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzgxMi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTM4NjgtXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6Mzg2OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zODcwLVx0XHRpZiAodXNlX2lwdjYpIHtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzg4OS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozODkwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTM4OTEtXHRcdGlmIChjb25mLVx1MDAzZWZsYWdzIFx1MDAyNiBWWExBTl9GX0lQVjZfTElOS0xPQ0FMKSB7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTQwOTE9c3RhdGljIGludCB2eGxhbl9ubDJjb25mKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDEyNi1cdH0gZWxzZSBpZiAoZGF0YVtJRkxBX1ZYTEFOX0dST1VQNl0pIHtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo0MTI3Olx0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0lQVjYpKSB7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDEyOC1cdFx0XHROTF9TRVRfRVJSX01TR19BVFRSKGV4dGFjaywgdGJbSUZMQV9WWExBTl9HUk9VUDZdLCBcJiMzNDtJUHY2IHN1cHBvcnQgbm90IGVuYWJsZWQgaW4gdGhlIGtlcm5lbFwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQxNDktXHR9IGVsc2UgaWYgKGRhdGFbSUZMQV9WWExBTl9MT0NBTDZdKSB7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NDE1MDpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19JUFY2KSkge1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQxNTEtXHRcdFx0TkxfU0VUX0VSUl9NU0dfQVRUUihleHRhY2ssIHRiW0lGTEFfVlhMQU5fTE9DQUw2XSwgXCYjMzQ7SVB2NiBzdXBwb3J0IG5vdCBlbmFibGVkIGluIHRoZSBrZXJuZWxcJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz00NTk4PXN0YXRpYyBpbnQgdnhsYW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ2MTQtXHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo0NjE1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ2MTYtXHRcdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ2MzEtXHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo0NjMyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ2MzMtXHRcdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmM9OTg9c3RhdGljIHZvaWQgdnhsYW5fYnJfbWRiX2VudHJ5X2ZpbGwoY29uc3Qgc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmMtMTE2LVx0XHRicmVhaztcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jOjExNzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jLTExOC1cdGNhc2UgQUZfSU5FVDY6XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmM9MzQ0PXN0YXRpYyBib29sIHZ4bGFuX21kYl9pc192YWxpZF9zb3VyY2UoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgX19iZTE2IHByb3RvLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jLTM2MS1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYzozNjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYy0zNjMtXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOiB7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmM9MzkwPXN0YXRpYyB2b2lkIHZ4bGFuX21kYl9ncm91cF9zZXQoc3RydWN0IHZ4bGFuX21kYl9lbnRyeV9rZXkgKmdyb3VwLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jLTM5OC1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYzozOTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYy00MDAtXHRjYXNlIGh0b25zKEVUSF9QX0lQVjYpOlxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jPTE2MjM9c3RydWN0IHZ4bGFuX21kYl9lbnRyeSAqdnhsYW5fbWRiX2VudHJ5X3NrYl9nZXQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmMtMTY1MS1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYzoxNjUyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmMtMTY1My1cdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmMtMTY4NS1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYzoxNjg2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmMtMTY4Ny1cdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmM9MTc9aW50IHZ4bGFuX2lnbXBfam9pbihzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgdW5pb24gdnhsYW5fYWRkciAqcmlwLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jLTM1LVx0XHRyZWxlYXNlX3NvY2soc2spO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmM6MzY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYy0zNy1cdH0gZWxzZSB7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmM9NTA9aW50IHZ4bGFuX2lnbXBfbGVhdmUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIHVuaW9uIHZ4bGFuX2FkZHIgKnJpcCxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYy02OC1cdFx0cmVsZWFzZV9zb2NrKHNrKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jOjY5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtNzAtXHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jPTEyMz1ib29sIHZ4bGFuX2dyb3VwX3VzZWQoc3RydWN0IHZ4bGFuX25ldCAqdm4sIHN0cnVjdCB2eGxhbl9kZXYgKmRldixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYy0xMjktXHRzdHJ1Y3QgdnhsYW5fc29jayAqc29jazQ7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYzoxMzA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYy0xMzEtXHRzdHJ1Y3QgdnhsYW5fc29jayAqc29jazY7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtMTQyLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmM6MTQzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtMTQ0LVx0c29jazYgPSBydG5sX2RlcmVmZXJlbmNlKGRldi1cdTAwM2V2bjZfc29jayk7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtMTU1LVx0XHRcdGNvbnRpbnVlO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmM6MTU2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtMTU3LVx0XHRpZiAoZmFtaWx5ID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNlxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaD03Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCB2eGxhbl9yZHN0ICpmaXJzdF9yZW1vdGVfcnRubChzdHJ1Y3QgdnhsYW5fZmRiICpmZGIpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oLTc4LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oOjc5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oLTgwLXN0YXRpYyBpbmxpbmVcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmg9MTE2PXN0YXRpYyBpbmxpbmUgYm9vbCB2eGxhbl9hZGRyX2lzX211bHRpY2FzdChjb25zdCB1bmlvbiB2eGxhbl9hZGRyICppcClcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmgtMTIzLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oOjEyNDojZWxzZSAvKiAhQ09ORklHX0lQVjYgKi9cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaC0xMjUtXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9Mzk9c3RhdGljIHZvaWQgdnhsYW5fdnNfYWRkX2RlbF92bmlub2RlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTUwLVx0XHRcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZ2LVx1MDAzZWhsaXN0NC5obGlzdCk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo1MTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTUyLVx0XHRpZiAoIWhsaXN0X3VuaGFzaGVkKFx1MDAyNnYtXHUwMDNlaGxpc3Q2LmhsaXN0KSlcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy01Ny1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjU4OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNTktXHR2cyA9IHJ0bmxfZGVyZWZlcmVuY2UodnhsYW4tXHUwMDNldm42X3NvY2spO1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jPTcyPXZvaWQgdnhsYW5fdnNfYWRkX3ZuaWdycChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04NS1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2LCB0bXAsIFx1MDAyNnZnLVx1MDAzZXZuaV9saXN0LCB2bGlzdCkge1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6ODY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04Ny1cdFx0aWYgKGlwdjYpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9OTc9dm9pZCB2eGxhbl92c19kZWxfdm5pZ3JwKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuKVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTEwOC1cdFx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNnYtXHUwMDNlaGxpc3Q0LmhsaXN0KTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjEwOTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTExMC1cdFx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNnYtXHUwMDNlaGxpc3Q2LmhsaXN0KTtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz0yNDc9c3RhdGljIGJvb2wgdnhsYW5fZmlsbF92bmlfZmlsdGVyX2VudHJ5KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjczLVx0XHRcdFx0Z290byBvdXRfZXJyO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6Mjc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjc1LVx0XHR9IGVsc2Uge1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jPTY5Nj1zdGF0aWMgc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2eGxhbl92bmlfYWxsb2Moc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNzEwLVx0dm5pbm9kZS1cdTAwM2VobGlzdDQudnhsYW4gPSB2eGxhbjtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjcxMTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTcxMi1cdHZuaW5vZGUtXHUwMDNlaGxpc3Q2LnZ4bGFuID0gdnhsYW47XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9OTQyPXZvaWQgdnhsYW5fdm5pZ3JvdXBfdW5pbml0KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuKVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTk1MS1cdFx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNnYtXHUwMDNlaGxpc3Q0LmhsaXN0KTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjk1MjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTk1My1cdFx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNnYtXHUwMDNlaGxpc3Q2LmhsaXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxMDgKCQkJCQkJCW91dHB1dDogMjUyCgkJCQkJCQl0aG91Z2h0czogNTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBWWExBTiBFcnJvciBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBzbyBlbmFibGluZyBWWExBTiwgYW5kIElORVQgKGFuZCBvcHRpb25hbGx5IElQVjYsIGFzIGlzIHN0YW5kYXJkIHByYWN0aWNlIGZvciBmdXp6aW5nKSB3aWxsIGJyaW5nIHRoaXMgY29kZSBpbnRvIHRoZSBjb21waWxhdGlvbi4gVGltZSB0byBsYXkgaXQgb3V0IGNsZWFybHkuCgpGaXJzdCwgdGhlIGtleSBjb25maWd1cmF0aW9uczogYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O1ZYTEFOJiMzNDssICYjMzQ7SU5FVCYjMzQ7XWAuCgpOb3csIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSYjMzk7bSBnb2luZyB0byBiZSBmb2N1c2VkIG9uIGFyZSB0aGVzZSwgYmVjYXVzZSB0aGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQ6CgoxLiAgYHZ4bGFuX3ZuaV9hZGRgOiBUaGlzIGlzICp0aGUqIGNlbnRyYWwgZnVuY3Rpb24gd2hlcmUgdGhlIGVycm9yIGhhbmRsaW5nIHJvbGxiYWNrIGxvZ2ljIGhhcyBiZWVuIGludHJvZHVjZWQuIFRoZSBwYXRjaCBpbmNsdWRlcyBhbiBlcnJvciBwYXRoIChgZXJyX3ZuaV9kZWw6YCkgdG8gdW53aW5kIG9wZXJhdGlvbnMgcGVyZm9ybWVkIG9uIGZhaWx1cmUgd2l0aGluIGB2eGxhbl92bmlfYWRkYC4gVGhlIHVud2luZCBpbmNsdWRlczogZG9pbmcgYF9fdnhsYW5fZmRiX2RlbGV0ZWAsIGByaGFzaHRhYmxlX3JlbW92ZV9mYXN0YCwgYF9fdnhsYW5fdm5pX2RlbF9saXN0YCwgYHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZWAsIGFuZCBgY2FsbF9yY3VgLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgZW5zdXJpbmcgYSBjbGVhbiBzdGF0ZS4KMi4gIGB2eGxhbl9mZGJfdXBkYXRlYDogVGhpcyBmdW5jdGlvbiYjMzk7cyBzaWduYXR1cmUgYW5kIGxvZ2ljIGhhdmUgYmVlbiBtb2RpZmllZCB0byBub3cgcmVjb3JkIHdoZXRoZXIgYSBuZXcgZW50cnkgd2FzIGNyZWF0ZWQgKGAqY3JlYXRlZCA9IHRydWVgKS4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIGl0IGxldHMgbWUgdHJhY2sgaWYgaXQmIzM5O3MgdGhlIGZpcnN0IHRpbWUgYW4gZW50cnkgaXMgd3JpdHRlbi4KMy4gIGB2eGxhbl92bmlmaWx0ZXJfcHJvY2Vzc2A6IFRoaXMgZnVuY3Rpb24gaXMgdGhlIE5ldGxpbmsgZW50cnkgcG9pbnQgZm9yIGBSVE1fTkVXVFVOTkVMYCBhbmQgYFJUTV9ERUxUVU5ORUxgIHJlcXVlc3RzLCB3aGljaCBldmVudHVhbGx5IHRyaWdnZXIgdGhlIGB2eGxhbl92bmlfYWRkYCBmdW5jdGlvbi4gU28gZnV6emluZyB0aGUgTmV0bGluayBpbnRlcmZhY2UgaXMgaW1wb3J0YW50IHRvIGV4ZXJjaXNlIHRoZXNlIGNvZGUgcGF0aHMuCjQuICBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2A6IFRoaXMgZnVuY3Rpb24gaXMgbW9kaWZpZWQgdG8gdHJhY2sgd2hldGhlciBhbiBlbnRyeSB3YXMgbmV3bHkgY3JlYXRlZCB2aWEgYSByZW1vdGUgZGVzdGluYXRpb24sIGFnYWluIGJ5IHRyYWNraW5nIHRoZSBgY3JlYXRlZGAgZmxhZy4KNS4gIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZWA6IFRoaXMgaXMgbW9kaWZpZWQgaW4gc2ltaWxhciBmYXNoaW9uIHRvIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCwgYnV0IGZvciBjcmVhdGluZyBuZXcgZW50cmllcy4KCkkmIzM5O3ZlIHJlY2hlY2tlZCBteSByZWFzb25pbmcgYW5kIGNvbnN0cmFpbnRzOgoKKiAgIFRoaXMgaXMgZGVmaW5pdGVseSBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVGhpcyBwYXRjaCBmaXhlcyBhIGNyaXRpY2FsIGVycm9yIHVud2luZGluZyBwcm9ibGVtIGluIFZYTEFOIFZOSSBmaWx0ZXIgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBhZGRyZXNzZXMgZmFpbHVyZXMgd2l0aGluIGB2eGxhbl92bmlfYWRkKClgIGR1cmluZyBWTkkgbm9kZSBjcmVhdGlvbi9jb25maWd1cmF0aW9uLiBUaGUgcGF0Y2ggYWRkcyBhIHByb3BlciBlcnJvciBwYXRoIHRoYXQgY2xlYW5zIHVwIFZOSSBub2RlcywgZGVsZXRlcyBGREIgZW50cmllcywgYW5kIGZyZWVzIG1lbW9yeSB2aWEgUkNVIHdoZW4gYHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKWAgZmFpbHMuIFRoZSBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMsIGB2eGxhbl9mZGJfdXBkYXRlKClgLCBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZygpYCwgYW5kIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSgpYCBub3cgcmVwb3J0IGlmIGFuIGVudHJ5IHdhcyBuZXdseSBjcmVhdGVkLiBUaGlzIGNoYW5nZXMgdmlydHVhbCBuZXR3b3JraW5nIGRyaXZlciBsb2dpYyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayAoYFJUTV9ORVdUVU5ORUxgLCBgUlRNX05FV05FSUdIYCkuCiogICBUaGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBgWyYjMzQ7VlhMQU4mIzM0OywgJiMzNDtJTkVUJiMzNDtdYC4KKiAgIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmU6CiAgICAqICAgYHZ4bGFuX3ZuaV9hZGRgCiAgICAqICAgYHZ4bGFuX2ZkYl91cGRhdGVgCiAgICAqICAgYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgCiAgICAqICAgYHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlYAogICAgKiAgIGB2eGxhbl92bmlmaWx0ZXJfcHJvY2Vzc2AKCkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGhlIHJlYXNvbmluZyBpcyBzb2xpZCwgYW5kIEkmIzM5O3ZlIHZlcmlmaWVkIHRoaXMgZGlyZWN0bHkgYWdhaW5zdCB0aGUga2VybmVsIHNvdXJjZS4gTm93IEkgY2FuIGludm9rZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VlhMQU4mIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Z4bGFuX3ZuaV9hZGQmIzM0OywKICAgICYjMzQ7dnhsYW5fZmRiX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDt2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nJiMzNDssCiAgICAmIzM0O3Z4bGFuX2ZkYl91cGRhdGVfY3JlYXRlJiMzNDssCiAgICAmIzM0O3Z4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBWWExBTiBkcml2ZXIgKHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHJ0bmV0bGluayBjb21tYW5kcyBzdWNoIGFzIFJUTV9ORVdUVU5ORUwgYW5kIFJUTV9ORVdORUlHSCkuIEl0IHVwZGF0ZXMgdGhlIEZEQiB1cGRhdGUgbG9naWMgYWNyb3NzIHZ4bGFuX2ZkYl91cGRhdGUoKSwgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUoKSwgYW5kIHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcoKSB0byB0cmFjayB3aGVuIGFuIGVudHJ5IGlzIG5ld2x5IGNyZWF0ZWQsIGFuZCBpbXBsZW1lbnRzIGFuIGVycm9yIHJvbGxiYWNrIHBhdGggaW4gdnhsYW5fdm5pX2FkZCgpIHRoYXQgdGVhcnMgZG93biBGREIgZW50cmllcywgdW5saW5rcyBWTkkgbm9kZXMsIGFuZCBmcmVlcyBtZW1vcnkgdmlhIFJDVSBpZiB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKCkgZmFpbHMuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbG9naWMgYWx0ZXJpbmcgc3RhdGUgbWFuYWdlbWVudCwgc3luY2hyb25pemF0aW9uLCBhbmQgZXJyb3ItaGFuZGxpbmcgaW4gdGhlIHZpcnR1YWwgbmV0d29ya2luZyBzdWJzeXN0ZW0sIG1ha2luZyBpdCBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWWExBTiYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dnhsYW5fdm5pX2FkZCYjMzQ7LAogICAgJiMzNDt2eGxhbl9mZGJfdXBkYXRlJiMzNDssCiAgICAmIzM0O3Z4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcmIzM0OywKICAgICYjMzQ7dnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUmIzM0OywKICAgICYjMzQ7dnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZYTEFOIGRyaXZlciAocmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIGNvbW1hbmRzIHN1Y2ggYXMgUlRNX05FV1RVTk5FTCBhbmQgUlRNX05FV05FSUdIKS4gSXQgdXBkYXRlcyB0aGUgRkRCIHVwZGF0ZSBsb2dpYyBhY3Jvc3MgdnhsYW5fZmRiX3VwZGF0ZSgpLCB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSgpLCBhbmQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZygpIHRvIHRyYWNrIHdoZW4gYW4gZW50cnkgaXMgbmV3bHkgY3JlYXRlZCwgYW5kIGltcGxlbWVudHMgYW4gZXJyb3Igcm9sbGJhY2sgcGF0aCBpbiB2eGxhbl92bmlfYWRkKCkgdGhhdCB0ZWFycyBkb3duIEZEQiBlbnRyaWVzLCB1bmxpbmtzIFZOSSBub2RlcywgYW5kIGZyZWVzIG1lbW9yeSB2aWEgUkNVIGlmIHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKSBmYWlscy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBsb2dpYyBhbHRlcmluZyBzdGF0ZSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBlcnJvci1oYW5kbGluZyBpbiB0aGUgdmlydHVhbCBuZXR3b3JraW5nIHN1YnN5c3RlbSwgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yLXVud2luZCBsb2dpYyB0byB2eGxhbl92bmlfYWRkKCkgaWYgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpIGZhaWxzLCBpbnRyb2R1Y2luZyBhIGJvb2xlYW4gb3V0LXBhcmFtZXRlciAoJiMzOTtjcmVhdGVkJiMzOTsgLyAmIzM5O2ZkYl9jcmVhdGVkJiMzOTspIGFjcm9zcyB2eGxhbl9mZGJfdXBkYXRlKCkgYW5kIGhlbHBlcnMgdG8gdHJhY2sgd2hldGhlciBhbiBGREIgZW50cnkgd2FzIGNyZWF0ZWQgc28gaXQgY2FuIGJlIHJvbGxlZCBiYWNrLlxuXG4xLiBLQVNBTiAvIExPQ0tERVAgQXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIG1vZGlmaWVzIGNsZWFudXAgcGF0aHMgYW5kIG9iamVjdCBsaWZlY3ljbGUgKHVud2luZGluZyBoYXNodGFibGUgaW5zZXJ0aW9uLCBsaXN0IGFkZGl0aW9uLCBzb2NrZXQgc3RhdGUsIGFuZCBzY2hlZHVsaW5nIFJDVSBkZXN0cnVjdGlvbiBvZiB2bmlub2RlLCBwbHVzIGRlbGV0aW5nIEZEQiBlbnRyaWVzIHVuZGVyIGhhc2hfbG9jaykuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGhlcmUgKGUuZy4gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBsaXN0IGNvcnJ1cHRpb24sIG9yIGxvY2tpbmcgZGlzY3JlcGFuY2llcykgYXJlIGFkZHJlc3NlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC5cbjIuIEtNU0FOIEFwcGxpY2FiaWxpdHk6IEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGFuZCBpbmZvLWxlYWtzLiBUaGUgbmV3bHkgaW50cm9kdWNlZCB2YXJpYWJsZSAmIzM5O2Jvb2wgZmRiX2NyZWF0ZWQgPSBmYWxzZTsmIzM5OyBpbiB2eGxhbl92bmlfYWRkKCkgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIG9uIHRoZSBzdGFjaywgYW5kIHRoZSBjYWxsZWUgZnVuY3Rpb25zIG9ubHkgY29uZGl0aW9uYWxseSB3cml0ZSAmIzM5OypjcmVhdGVkID0gdHJ1ZSYjMzk7IHdpdGhvdXQgcmVhZGluZyBmcm9tIGl0IHVuaW5pdGlhbGl6ZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBoZWFwIGFsbG9jYXRpb25zIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGNyZWF0ZWQsIGFuZCBubyBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgYW5kIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2NiOTcxZmU1NWFkNWM5MThjY2M5OWFiNTI4NDQ5NTg4NWVjOTViZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDIyOjQ5OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jIGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jCmluZGV4IGJlOTVhZjY0YTFmNTEuLjA2NTJkYzQ3MWRjYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMKQEAgLTk3NCw3ICYjNDM7OTc0LDcgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQkJCSAgICAgX19iZTE2IHBvcnQsIF9fYmUzMiB2bmksCiAJCQkJICAgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsCiAJCQkJICAgICBzdHJ1Y3QgdnhsYW5fZmRiICpmLCB1MzIgbmhpZCwKLQkJCQkgICAgIGJvb2wgc3dkZXZfbm90aWZ5LAomIzQzOwkJCQkgICAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLAogCQkJCSAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCV9fdTE2IGZkYl9mbGFncyA9IChuZG1fZmxhZ3MgJmFtcDsgfk5URl9VU0UpOwpAQCAtMTA0Miw2ICYjNDM7MTA0Miw4IEBAIHN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKIAogCQlpZiAocmMgJmx0OyAwKQogCQkJcmV0dXJuIHJjOwomIzQzOwkJaWYgKHJjICZhbXA7JmFtcDsgY3JlYXRlZCkKJiM0MzsJCQkqY3JlYXRlZCA9IHRydWU7CiAJCW5vdGlmeSB8PSByYzsKIAl9CiAKQEAgLTEwNzgsNyAmIzQzOzEwODAsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQkJCSAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncywKIAkJCQkgICBfX2JlMTYgcG9ydCwgX19iZTMyIHNyY192bmksIF9fYmUzMiB2bmksCiAJCQkJICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLCB1MzIgbmhpZCwKLQkJCQkgICBib29sIHN3ZGV2X25vdGlmeSwKJiM0MzsJCQkJICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsCiAJCQkJICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewogCV9fdTE2IGZkYl9mbGFncyA9IChuZG1fZmxhZ3MgJmFtcDsgfk5URl9VU0UpOwpAQCAtMTEwMSw2ICYjNDM7MTEwMyw5IEBAIHN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiAJaWYgKHJjKQogCQlnb3RvIGVycl9ub3RpZnk7CiAKJiM0MzsJaWYgKGNyZWF0ZWQpCiYjNDM7CQkqY3JlYXRlZCA9IHRydWU7CiYjNDM7CiAJcmV0dXJuIDA7CiAKIGVycl9ub3RpZnk6CkBAIC0xMTE0LDcgJiM0MzsxMTE5LDcgQEAgaW50IHZ4bGFuX2ZkYl91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiAJCSAgICAgX191MTYgc3RhdGUsIF9fdTE2IGZsYWdzLAogCQkgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSwKIAkJICAgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsIHUzMiBuaGlkLAotCQkgICAgIGJvb2wgc3dkZXZfbm90aWZ5LAomIzQzOwkJICAgICBib29sIHN3ZGV2X25vdGlmeSwgYm9vbCAqY3JlYXRlZCwKIAkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IHZ4bGFuX2ZkYiAqZjsKQEAgLTExMjksNyAmIzQzOzExMzQsOCBAQCBpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKIAogCQlyZXR1cm4gdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyh2eGxhbiwgaXAsIHN0YXRlLCBmbGFncywgcG9ydCwKIAkJCQkJCSB2bmksIGlmaW5kZXgsIG5kbV9mbGFncywgZiwKLQkJCQkJCSBuaGlkLCBzd2Rldl9ub3RpZnksIGV4dGFjayk7CiYjNDM7CQkJCQkJIG5oaWQsIHN3ZGV2X25vdGlmeSwgY3JlYXRlZCwKJiM0MzsJCQkJCQkgZXh0YWNrKTsKIAl9IGVsc2UgewogCQlpZiAoIShmbGFncyAmYW1wOyBOTE1fRl9DUkVBVEUpKQogCQkJcmV0dXJuIC1FTk9FTlQ7CkBAIC0xMTM3LDcgJiM0MzsxMTQzLDcgQEAgaW50IHZ4bGFuX2ZkYl91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiAJCXJldHVybiB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSh2eGxhbiwgbWFjLCBpcCwgc3RhdGUsIGZsYWdzLAogCQkJCQkgICAgICAgcG9ydCwgc3JjX3ZuaSwgdm5pLCBpZmluZGV4LAogCQkJCQkgICAgICAgbmRtX2ZsYWdzLCBuaGlkLCBzd2Rldl9ub3RpZnksCi0JCQkJCSAgICAgICBleHRhY2spOwomIzQzOwkJCQkJICAgICAgIGNyZWF0ZWQsIGV4dGFjayk7CiAJfQogfQogCkBAIC0xMjc1LDcgJiM0MzsxMjgxLDcgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfYWRkKHN0cnVjdCBuZG1zZyAqbmRtLCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCWVyciA9IHZ4bGFuX2ZkYl91cGRhdGUodnhsYW4sIGFkZHIsICZhbXA7aXAsIG5kbS0mZ3Q7bmRtX3N0YXRlLCBmbGFncywKIAkJCSAgICAgICBwb3J0LCBzcmNfdm5pLCB2bmksIGlmaW5kZXgsCiAJCQkgICAgICAgbmRtLSZndDtuZG1fZmxhZ3MgfCBOVEZfVlhMQU5fQURERURfQllfVVNFUiwKLQkJCSAgICAgICBuaGlkLCB0cnVlLCBleHRhY2spOwomIzQzOwkJCSAgICAgICBuaGlkLCB0cnVlLCBOVUxMLCBleHRhY2spOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dnhsYW4tJmd0O2hhc2hfbG9jayk7CiAKIAlpZiAoIWVycikKQEAgLTE0OTEsNyAmIzQzOzE0OTcsOCBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gdnhsYW5fc25vb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJIHZ4bGFuLSZndDtjZmcuZHN0X3BvcnQsCiAJCQkJCSB2bmksCiAJCQkJCSB2eGxhbi0mZ3Q7ZGVmYXVsdF9kc3QucmVtb3RlX3ZuaSwKLQkJCQkJIGlmaW5kZXgsIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMKTsKJiM0MzsJCQkJCSBpZmluZGV4LCBOVEZfU0VMRiwgMCwgdHJ1ZSwgTlVMTCwKJiM0MzsJCQkJCSBOVUxMKTsKIAkJc3Bpbl91bmxvY2soJmFtcDt2eGxhbi0mZ3Q7aGFzaF9sb2NrKTsKIAl9CiAKQEAgLTQwMzQsNyAmIzQzOzQwNDEsOCBAQCBzdGF0aWMgaW50IHZ4bGFuX2Rldl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICAgICBkc3QtJmd0O3JlbW90ZV92bmksCiAJCQkJICAgICAgIGRzdC0mZ3Q7cmVtb3RlX3ZuaSwKIAkJCQkgICAgICAgZHN0LSZndDtyZW1vdGVfaWZpbmRleCwKLQkJCQkgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIGV4dGFjayk7CiYjNDM7CQkJCSAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgTlVMTCwKJiM0MzsJCQkJICAgICAgIGV4dGFjayk7CiAJCXNwaW5fdW5sb2NrX2JoKCZhbXA7dnhsYW4tJmd0O2hhc2hfbG9jayk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIHVubGluazsKQEAgLTQ0ODUsNyAmIzQzOzQ0OTMsOCBAQCBzdGF0aWMgaW50IHZ4bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAkJCQkJICAgICAgIHZ4bGFuLSZndDtjZmcuZHN0X3BvcnQsCiAJCQkJCSAgICAgICBjb25mLnZuaSwgY29uZi52bmksCiAJCQkJCSAgICAgICBjb25mLnJlbW90ZV9pZmluZGV4LAotCQkJCQkgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIGV4dGFjayk7CiYjNDM7CQkJCQkgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIE5VTEwsCiYjNDM7CQkJCQkgICAgICAgZXh0YWNrKTsKIAkJCWlmIChlcnIpIHsKIAkJCQlzcGluX3VubG9ja19iaCgmYW1wO3Z4bGFuLSZndDtoYXNoX2xvY2spOwogCQkJCW5ldGRldl9hZGphY2VudF9jaGFuZ2VfYWJvcnQoZHN0LSZndDtyZW1vdGVfZGV2LApAQCAtNDgwNiw3ICYjNDM7NDgxNSw3IEBAIHZ4bGFuX2ZkYl9leHRlcm5hbF9sZWFybl9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgICBmZGJfaW5mby0mZ3Q7cmVtb3RlX3ZuaSwKIAkJCSAgICAgICBmZGJfaW5mby0mZ3Q7cmVtb3RlX2lmaW5kZXgsCiAJCQkgICAgICAgTlRGX1VTRSB8IE5URl9TRUxGIHwgTlRGX0VYVF9MRUFSTkVELAotCQkJICAgICAgIDAsIGZhbHNlLCBleHRhY2spOwomIzQzOwkJCSAgICAgICAwLCBmYWxzZSwgTlVMTCwgZXh0YWNrKTsKIAlzcGluX3VubG9ja19iaCgmYW1wO3Z4bGFuLSZndDtoYXNoX2xvY2spOwogCiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaCBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaAppbmRleCBiMWVlYzIyMTYzNjA4Li5lNTI3NTU5MjNjMzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oCkBAIC0xOTMsNyAmIzQzOzE5Myw4IEBAIGludCB2eGxhbl9mZGJfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQkgICAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncywKIAkJICAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHNyY192bmksIF9fYmUzMiB2bmksCiAJCSAgICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLCB1MzIgbmhpZCwKLQkJICAgICBib29sIHN3ZGV2X25vdGlmeSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKJiM0MzsJCSAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsCiYjNDM7CQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiB2b2lkIHZ4bGFuX3htaXRfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICBfX2JlMzIgZGVmYXVsdF92bmksIHN0cnVjdCB2eGxhbl9yZHN0ICpyZHN0LCBib29sIGRpZF9yc2MpOwogaW50IHZ4bGFuX3ZuaV9pbl91c2Uoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jCmluZGV4IGRkOTQwODVlMDg4NjUuLjljYzkzMmM2MTc3ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jCkBAIC00NzMsNiAmIzQzOzQ3Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB2bmlfZmlsdGVyX3BvbGljeVtWWExBTl9WTklGSUxURVJfTUFYICYjNDM7IDFdID0gewogc3RhdGljIGludCB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnkoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIF9fYmUzMiB2bmksCiAJCQkJCSAgdW5pb24gdnhsYW5fYWRkciAqb2xkX3JlbW90ZV9pcCwKIAkJCQkJICB1bmlvbiB2eGxhbl9hZGRyICpyZW1vdGVfaXAsCiYjNDM7CQkJCQkgIGJvb2wgKmZkYl9jcmVhdGVkLAogCQkJCQkgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgdnhsYW5fcmRzdCAqZHN0ID0gJmFtcDt2eGxhbi0mZ3Q7ZGVmYXVsdF9kc3Q7CkBAIC00ODgsNyAmIzQzOzQ4OSw4IEBAIHN0YXRpYyBpbnQgdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBfX2JlMzIgdm5pLAogCQkJCSAgICAgICB2bmksCiAJCQkJICAgICAgIHZuaSwKIAkJCQkgICAgICAgZHN0LSZndDtyZW1vdGVfaWZpbmRleCwKLQkJCQkgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIGV4dGFjayk7CiYjNDM7CQkJCSAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgZmRiX2NyZWF0ZWQsCiYjNDM7CQkJCSAgICAgICBleHRhY2spOwogCQlpZiAoZXJyKSB7CiAJCQlzcGluX3VubG9ja19iaCgmYW1wO3Z4bGFuLSZndDtoYXNoX2xvY2spOwogCQkJcmV0dXJuIGVycjsKQEAgLTUxMiw2ICYjNDM7NTE0LDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQkJCSAgc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlLAogCQkJCSAgdW5pb24gdnhsYW5fYWRkciAqZ3JvdXAsCiAJCQkJICBib29sIGNyZWF0ZSwgYm9vbCAqY2hhbmdlZCwKJiM0MzsJCQkJICBib29sICpmZGJfY3JlYXRlZCwKIAkJCQkgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgdnhsYW5fbmV0ICp2biA9IG5ldF9nZW5lcmljKHZ4bGFuLSZndDtuZXQsIHZ4bGFuX25ldF9pZCk7CkBAIC01NDUsNyAmIzQzOzU0OCw3IEBAIHN0YXRpYyBpbnQgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnkodnhsYW4sIHZuaW5vZGUtJmd0O3ZuaSwKLQkJCQkJICAgICBvbGRyaXAsIG5ld3JpcCwKJiM0MzsJCQkJCSAgICAgb2xkcmlwLCBuZXdyaXAsIGZkYl9jcmVhdGVkLAogCQkJCQkgICAgIGV4dGFjayk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CkBAIC01OTksNyAmIzQzOzYwMiw3IEBAIGludCB2eGxhbl92bmlsaXN0X3VwZGF0ZV9ncm91cChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKIAkJCXJldCA9IHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeSh2eGxhbiwgdmVudC0mZ3Q7dm5pLAogCQkJCQkJCSAgICAgb2xkX3JlbW90ZV9pcCwKIAkJCQkJCQkgICAgIG5ld19yZW1vdGVfaXAsCi0JCQkJCQkJICAgICBleHRhY2spOwomIzQzOwkJCQkJCQkgICAgIE5VTEwsIGV4dGFjayk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTY1NSw3ICYjNDM7NjU4LDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQlyZXR1cm4gMDsKIAogCXJldCA9IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAodnhsYW4sIHZuaW5vZGUsIGdyb3VwLCBmYWxzZSwgY2hhbmdlZCwKLQkJCQkgICAgIGV4dGFjayk7CiYjNDM7CQkJCSAgICAgTlVMTCwgZXh0YWNrKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC03MTgsNiAmIzQzOzcyMSw4IEBAIHN0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9mcmVlKHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSkKIAlrZnJlZSh2bmlub2RlKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KTsKJiM0MzsKIHN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKIAkJCSBzdHJ1Y3QgdnhsYW5fdm5pX2dyb3VwICp2ZywKIAkJCSB1MzIgdm5pLCB1bmlvbiB2eGxhbl9hZGRyICpncm91cCwKQEAgLTcyNSw2ICYjNDM7NzMwLDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogewogCXN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZTsKIAlfX2JlMzIgdiA9IGNwdV90b19iZTMyKHZuaSk7CiYjNDM7CWJvb2wgZmRiX2NyZWF0ZWQgPSBmYWxzZTsKIAlib29sIGNoYW5nZWQgPSBmYWxzZTsKIAlpbnQgZXJyID0gMDsKIApAQCAtNzU1LDEwICYjNDM7NzYxLDQ3IEBAIHN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwKIAkJdnhsYW5fdnNfYWRkX2RlbF92bmlub2RlKHZ4bGFuLCB2bmlub2RlLCBmYWxzZSk7CiAKIAllcnIgPSB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKHZ4bGFuLCB2bmlub2RlLCBncm91cCwgdHJ1ZSwgJmFtcDtjaGFuZ2VkLAotCQkJCSAgICAgZXh0YWNrKTsKJiM0MzsJCQkJICAgICAmYW1wO2ZkYl9jcmVhdGVkLCBleHRhY2spOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfdm5pX2RlbDsKIAogCXZ4bGFuX3ZuaWZpbHRlcl9ub3RpZnkodnhsYW4sIHZuaW5vZGUsIFJUTV9ORVdUVU5ORUwpOwogCiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl92bmlfZGVsOgomIzQzOwkvKiBVbmRvIG9ubHkgdGhlIGRlZmF1bHQgRkRCIGVudHJ5IHRoaXMgYWRkIGluc3RhbGxlZC4gIEFuIGVudHJ5IHRoYXQKJiM0MzsJICogd2FzIGFscmVhZHkgdGhlcmUsIHdoZXRoZXIgYWRkZWQgb3V0IG9mIGJhbmQgb3IgYnkgYW5vdGhlciBWTkksIGlzCiYjNDM7CSAqIGxlZnQgYWxvbmUuCiYjNDM7CSAqCiYjNDM7CSAqIE5vIG1lbWJlcnNoaXAgaGFzIHRvIGJlIGdpdmVuIGJhY2s6IHZ4bGFuX2lnbXBfbGVhdmUoKSBpcyBnYXRlZCBvbgomIzQzOwkgKiB2eGxhbl9hZGRyX211bHRpY2FzdCgmYW1wO29sZF9yZW1vdGVfaXApLCBhbmQgb2xkX3JlbW90ZV9pcCBpcyBhIGNvcHkKJiM0MzsJICogb2YgdGhlIHJlbW90ZSBJUCBvZiBhIG5vZGUgdGhpcyBhZGQganVzdCBhbGxvY2F0ZWQsIHNvIGl0IGlzIHplcm8uCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBhZGRyZXNzIHBpY2tlZCBiZWxvdyBpcyB0aGUgb25lIHRoZSBlbnRyeSB3YXMgaW5zdGFsbGVkCiYjNDM7CSAqIGFnYWluc3QuICBJZiB0aGUgcmVxdWVzdCBjYXJyaWVkIGEgZ3JvdXAsIHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKQomIzQzOwkgKiBjb3BpZWQgaXQgaW50byB2bmlub2RlLSZndDtyZW1vdGVfaXAgYmVmb3JlIHRoZSBqb2luIGNvdWxkIGZhaWw7IGlmCiYjNDM7CSAqIGl0IGRpZCBub3QsIHRoYXQgY29weSB3YXMgc2tpcHBlZCBhbmQgdGhlIGVudHJ5IHdlbnQgdG8gdGhlIGRldmljZQomIzQzOwkgKiBkZWZhdWx0LgomIzQzOwkgKi8KJiM0MzsJaWYgKGZkYl9jcmVhdGVkKSB7CiYjNDM7CQl1bmlvbiB2eGxhbl9hZGRyICpyaXAgPSB2eGxhbl9hZGRyX2FueSgmYW1wO3ZuaW5vZGUtJmd0O3JlbW90ZV9pcCkgPwomIzQzOwkJCQkJJmFtcDt2eGxhbi0mZ3Q7ZGVmYXVsdF9kc3QucmVtb3RlX2lwIDoKJiM0MzsJCQkJCSZhbXA7dm5pbm9kZS0mZ3Q7cmVtb3RlX2lwOwomIzQzOwomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7dnhsYW4tJmd0O2hhc2hfbG9jayk7CiYjNDM7CQlfX3Z4bGFuX2ZkYl9kZWxldGUodnhsYW4sIGFsbF96ZXJvc19tYWMsICpyaXAsCiYjNDM7CQkJCSAgIHZ4bGFuLSZndDtjZmcuZHN0X3BvcnQsIHZuaW5vZGUtJmd0O3ZuaSwKJiM0MzsJCQkJICAgdm5pbm9kZS0mZ3Q7dm5pLAomIzQzOwkJCQkgICB2eGxhbi0mZ3Q7ZGVmYXVsdF9kc3QucmVtb3RlX2lmaW5kZXgsIHRydWUpOwomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDt2eGxhbi0mZ3Q7aGFzaF9sb2NrKTsKJiM0MzsJfQomIzQzOwlyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KCZhbXA7dmctJmd0O3ZuaV9oYXNoLCAmYW1wO3ZuaW5vZGUtJmd0O3Zub2RlLAomIzQzOwkJCSAgICAgICB2eGxhbl92bmlfcmh0X3BhcmFtcyk7CiYjNDM7CV9fdnhsYW5fdm5pX2RlbF9saXN0KHZnLCB2bmlub2RlKTsKJiM0MzsJaWYgKHZ4bGFuLSZndDtkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9VUCkKJiM0MzsJCXZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZSh2eGxhbiwgdm5pbm9kZSwgdHJ1ZSk7CiYjNDM7CWNhbGxfcmN1KCZhbXA7dm5pbm9kZS0mZ3Q7cmN1LCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZSk7CiAJcmV0dXJuIGVycjsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc2MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRGV0ZXJtaW5hdGlvbiBmb3IgVlhMQU4gRkRCIFVwZGF0ZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUga2V5IGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBwb3RlbnRpYWwga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuICBUaGUgcnVsZSBvZiB0aHVtYiBpcywgaWYgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIGRldGVjdG9ycyBjYW4gY2F0Y2ggaXQsIHdlIGRvbiYjMzk7dCBuZWVkIEtNU0FOLiAgV2UmIzM5O3JlIGxvb2tpbmcgZm9yIHNwZWNpZmljIHNjZW5hcmlvczoga2VybmVsIHN0cnVjdHVyZXMgZ29pbmcgdG8gdXNlcnNwYWNlIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMsIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29tcGxleCBhbGxvY2F0aW9ucyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIHRoYXQgKmNvdWxkKiBiZSByZWFkIGxhdGVyLCBvciBsb2dpYyB0aGF0IGVuYWJsZXMgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgcGFydHMgb2YgZXhpc3RpbmcgYnVmZmVycy4gIENvbnZlcnNlbHksIGlmIGl0JiMzOTtzIHByaW1hcmlseSBhYm91dCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGlzc3Vlcywgb3IgdXNlLWFmdGVyLWZyZWUsIHRoZW4gd2Ugc2hvdWxkICpub3QqIG1hcmsgaXQgZm9yIEtNU0FOLiBGdWxsIHplcm9pbmcvaW5pdGlhbGl6YXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzayBhcmUgYWxzbyByZWFzb25zIHRvIHNraXAgS01TQU4uCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkaW5nIGEgYGJvb2wgKmNyZWF0ZWRgIHBhcmFtZXRlciB0byBhIGZldyBmdW5jdGlvbnMgcmVsYXRlZCB0byBWWExBTiBGREIgdXBkYXRlcy4gIFNwZWNpZmljYWxseSwgYHZ4bGFuX2ZkYl91cGRhdGVgLCBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AsIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZWAsIGFuZCBhIGZldyByZWxhdGVkIGZ1bmN0aW9ucyBpbiBgdnhsYW5fdm5pZmlsdGVyLmNgLgoKSSBzZWUgdGhhdCBgdnhsYW5fZmRiX3VwZGF0ZWAgaXMgdXBkYXRlZCB0byB0YWtlIHRoZSBgYm9vbCAqY3JlYXRlZGAgcGFyYW1ldGVyLiBUaGVuIGl0IGNhbGxzIGJvdGggYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgIGFuZCBgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGVgLiBDcnVjaWFsbHksIG1hbnkgY2FsbGVycyBwYXNzIGBOVUxMYCBmb3IgdGhpcyBgY3JlYXRlZGAgcGFyYW1ldGVyLCBidXQgYHZ4bGFuX3ZuaV9hZGRgIGFwcGVhcnMgdG8gKnNvbWV0aW1lcyogcGFzcyBhIGBib29sYCBpbml0aWFsaXplZCB0byBgZmFsc2VgLCB3aXRoIGNvZGUgcGF0aHMgdGhhdCBwb3RlbnRpYWxseSBzZXQgdGhhdCBib29sZWFuIHRvIHRydWUuIExldCYjMzk7cyBzZWUuLi4gdGhlIGNvZGUgcGFzc2VzIHRoZSBhZGRyZXNzIG9mIHRoZSBgZmRiX2NyZWF0ZWRgIHZhcmlhYmxlIHRvIHRob3NlIGZ1bmN0aW9ucy4KCk15IGNvbmNlcm4gaXMgd2hldGhlciB0aGUgZnVuY3Rpb25zIHRoYXQgYWNjZXB0IHRoaXMgYGNyZWF0ZWRgIHBvaW50ZXIgcmVhZCBpdCBiZWZvcmUgd3JpdGluZyB0byBpdCwgbWFraW5nIGl0IHBvc3NpYmxlIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCYjMzk7cyBjYXJlZnVsbHkgaW5zcGVjdCB0aGUgZnVuY3Rpb25zLgoKT2theSwgbGV0JiMzOTtzIGhvbmUgaW4gb24gYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgIGFuZCBgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGVgLiAgQ3J1Y2lhbGx5LCBpbiBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AsIHRoZSBjb2RlIGlzOiBgaWYgKHJjICZhbXA7JmFtcDsgY3JlYXRlZCkgKmNyZWF0ZWQgPSB0cnVlO2AgSXQgKndyaXRlcyogdG8gYCpjcmVhdGVkYCBvbmx5IGlmIHRoZSBwb2ludGVyIGlzIG5vdCBgTlVMTGAgYW5kIHRoZSByZXR1cm4gY29kZSBgcmNgIGlzIG5vbi16ZXJvIChpbmRpY2F0aW5nIHN1Y2Nlc3MpLiBUaGVyZSYjMzk7cyBubyByZWFkIG9mIGAqY3JlYXRlZGAgaWYgaXQmIzM5O3Mgbm90IGBOVUxMYC4gSW4gYHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlYCwgaXQmIzM5O3MgZXZlbiBzaW1wbGVyOiBgaWYgKGNyZWF0ZWQpICpjcmVhdGVkID0gdHJ1ZTtgICBBZ2FpbiwgaXQmIzM5O3MganVzdCBhIHdyaXRlIGlmIGBjcmVhdGVkYCBpcyBub3QgYE5VTExgLgoKU28sIGl0IHNlZW1zIHRoYXQgdGhlcmUgaXNuJiMzOTt0IGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpyZWFkcyogaGVyZS4gSW4gdGhlIGNhc2Ugd2hlcmUgYSBib29sZWFuIGlzIHBhc3NlZCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgaXMgdGhlbiBwb3RlbnRpYWxseSB1cGRhdGVkIHRvIGB0cnVlYCwgdGhlbiBpdCBtYXkgYmUgY2hlY2tlZC4gVGhlIGtleSBpcyB0aGVyZSBhcmUgbm8gcmVhZHMgYmVmb3JlIGEgd3JpdGUuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIGl0IGRvZXNuJiMzOTt0IG1lZXQgdGhlIGNyaXRlcmlhIGZvciBydW5uaW5nIGEgS01TQU4gc2Vzc2lvbi4gTm8gYE5lZWRzS01TQU49dHJ1ZWAuIEl0IGxvb2tzIHByZXR0eSBjbGVhbiBmcm9tIHRoaXMgcGVyc3BlY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9OTYzPXN0YXRpYyB2b2lkIHZ4bGFuX2RzdF9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTcwLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjk3MTpzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTcyLVx0XHRcdFx0ICAgICB1bmlvbiB2eGxhbl9hZGRyICppcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxNgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbmV0d29ya2luZyBhbmQgZmFtaWxpYXIgd2l0aCBWWExBTiBhbmQgRkRCczoKCioqQW5hbHl6aW5nIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBmdW5jdGlvbi4gVGhlIG5hbWUgaXRzZWxmIGlzIHByZXR0eSBleHBsaWNpdCDigJMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhbiBleGlzdGluZyBGb3J3YXJkaW5nIERhdGFiYXNlIChGREIpIGVudHJ5IHJlbGF0ZWQgdG8gVlhMQU4sIGFuZCB3ZSBuZWVkIHRvIHVwZGF0ZSBpdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdXNlIGByZWFkLWZpbGVgLCBwcmVzdW1hYmx5IGEgZnVuY3Rpb24gb3IgbWV0aG9kIGF2YWlsYWJsZSBpbiB3aGF0ZXZlciBzY3JpcHRpbmcgZW52aXJvbm1lbnQgb3IgY29kZWJhc2UgSSYjMzk7bSBjdXJyZW50bHkgd29ya2luZyBpbi4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIG9yIHRoZSByZWxldmFudCBjb2RlIGJsb2NrLCBzbyBJIGNhbiBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhpcyB1cGRhdGUgcHJvY2Vzcy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIG15IGFuYWx5c2lzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhpc3RpbmcgbG9naWMgdG8gc2VlICpob3cqIGl0JiMzOTtzIHVwZGF0aW5nIHRoZSBGREIgZW50cnkuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLCB0aGUgY29uZGl0aW9ucyBiZWluZyBjaGVja2VkLCBhbmQgYW55IG90aGVyIGV4dGVybmFsIGNhbGxzLCBzdWNoIGFzIGhhcmR3YXJlIGludGVyYWN0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3Mgd2hldGhlciB0aGUgY29kZSBpcyBlZmZpY2llbnQsIGNvcnJlY3QsIGFuZCBzZWN1cmUuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBmbGF3cyBvciBhcmVhcyBvZiBpbXByb3ZlbWVudCBpbiB0aGlzIGNyaXRpY2FsIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk3MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTcxOlx0c3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIDk3MjpcdFx0XHRcdFx0ICAgICB1bmlvbiB2eGxhbl9hZGRyICppcCxcbiA5NzM6XHRcdFx0XHRcdCAgICAgX191MTYgc3RhdGUsIF9fdTE2IGZsYWdzLFxuIDk3NDpcdFx0XHRcdFx0ICAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHZuaSxcbiA5NzU6XHRcdFx0XHRcdCAgICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLFxuIDk3NjpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgdnhsYW5fZmRiICpmLCB1MzIgbmhpZCxcbiA5Nzc6XHRcdFx0XHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXG4gOTc4Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiA5Nzk6XHR7XG4gOTgwOlx0XHRfX3UxNiBmZGJfZmxhZ3MgPSAobmRtX2ZsYWdzIFx1MDAyNiB+TlRGX1VTRSk7XG4gOTgxOlx0XHRzdHJ1Y3QgdnhsYW5fcmRzdCAqcmQgPSBOVUxMO1xuIDk4MjpcdFx0c3RydWN0IHZ4bGFuX3Jkc3Qgb2xkcmQ7XG4gOTgzOlx0XHRpbnQgbm90aWZ5ID0gMDtcbiA5ODQ6XHRcdGludCByYyA9IDA7XG4gOTg1Olx0XHRpbnQgZXJyO1xuIDk4NjpcdFxuIDk4NzpcdFx0aWYgKG5oaWQgXHUwMDI2XHUwMDI2ICFyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkpIHtcbiA5ODg6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuIDk4OTpcdFx0XHRcdCAgICAgICBcJiMzNDtDYW5ub3QgcmVwbGFjZSBhbiBleGlzdGluZyBub24gbmV4dGhvcCBmZGIgd2l0aCBhIG5leHRob3BcJiMzNDspO1xuIDk5MDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gOTkxOlx0XHR9XG4gOTkyOlx0XG4gOTkzOlx0XHRpZiAobmhpZCBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBOTE1fRl9BUFBFTkQpKSB7XG4gOTk0Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiA5OTU6XHRcdFx0XHQgICAgICAgXCYjMzQ7Q2Fubm90IGFwcGVuZCB0byBhIG5leHRob3AgZmRiXCYjMzQ7KTtcbiA5OTY6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDk5NzpcdFx0fVxuIDk5ODpcdFxuIDk5OTpcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihmLVx1MDAzZW5oKSBcdTAwMjZcdTAwMjZcbjEwMDA6XHRcdCAgICAhKHN0YXRlIFx1MDAyNiAoTlVEX1BFUk1BTkVOVCB8IE5VRF9OT0FSUCkpKSB7XG4xMDAxOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q2Fubm90IG1ha2UgYSBuZXh0aG9wIGZkYiBkeW5hbWljXCYjMzQ7KTtcbjEwMDI6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTAwMzpcdFx0fVxuMTAwNDpcdFxuMTAwNTpcdFx0LyogRG8gbm90IGFsbG93IGFuIGV4dGVybmFsbHkgbGVhcm5lZCBlbnRyeSB0byB0YWtlIG92ZXIgYW4gZW50cnkgYWRkZWRcbjEwMDY6XHRcdCAqIGJ5IHRoZSB1c2VyLlxuMTAwNzpcdFx0ICovXG4xMDA4Olx0XHRpZiAoIShmZGJfZmxhZ3MgXHUwMDI2IE5URl9FWFRfTEVBUk5FRCkgfHxcbjEwMDk6XHRcdCAgICAhKGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE5URl9WWExBTl9BRERFRF9CWV9VU0VSKSkge1xuMTAxMDpcdFx0XHRpZiAoZi1cdTAwM2VzdGF0ZSAhPSBzdGF0ZSkge1xuMTAxMTpcdFx0XHRcdGYtXHUwMDNlc3RhdGUgPSBzdGF0ZTtcbjEwMTI6XHRcdFx0XHRub3RpZnkgPSAxO1xuMTAxMzpcdFx0XHR9XG4xMDE0Olx0XHRcdGlmIChmLVx1MDAzZWZsYWdzICE9IGZkYl9mbGFncykge1xuMTAxNTpcdFx0XHRcdGYtXHUwMDNlZmxhZ3MgPSBmZGJfZmxhZ3M7XG4xMDE2Olx0XHRcdFx0bm90aWZ5ID0gMTtcbjEwMTc6XHRcdFx0fVxuMTAxODpcdFx0fVxuMTAxOTpcdFxuMTAyMDpcdFx0aWYgKChmbGFncyBcdTAwMjYgTkxNX0ZfUkVQTEFDRSkpIHtcbjEwMjE6XHRcdFx0LyogT25seSBjaGFuZ2UgdW5pY2FzdHMgKi9cbjEwMjI6XHRcdFx0aWYgKCEoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZi1cdTAwM2VrZXkuZXRoX2FkZHIpIHx8XG4xMDIzOlx0XHRcdCAgICAgIGlzX3plcm9fZXRoZXJfYWRkcihmLVx1MDAzZWtleS5ldGhfYWRkcikpKSB7XG4xMDI0Olx0XHRcdFx0aWYgKG5oaWQpIHtcbjEwMjU6XHRcdFx0XHRcdHJjID0gdnhsYW5fZmRiX25oX3VwZGF0ZSh2eGxhbiwgZiwgbmhpZCwgZXh0YWNrKTtcbjEwMjY6XHRcdFx0XHRcdGlmIChyYyBcdTAwM2MgMClcbjEwMjc6XHRcdFx0XHRcdFx0cmV0dXJuIHJjO1xuMTAyODpcdFx0XHRcdH0gZWxzZSB7XG4xMDI5Olx0XHRcdFx0XHRyYyA9IHZ4bGFuX2ZkYl9yZXBsYWNlKGYsIGlwLCBwb3J0LCB2bmksXG4xMDMwOlx0XHRcdFx0XHRcdFx0ICAgICAgIGlmaW5kZXgsIFx1MDAyNm9sZHJkKTtcbjEwMzE6XHRcdFx0XHR9XG4xMDMyOlx0XHRcdFx0bm90aWZ5IHw9IHJjO1xuMTAzMzpcdFx0XHR9IGVsc2Uge1xuMTAzNDpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q2Fubm90IHJlcGxhY2Ugbm9uLXVuaWNhc3QgZmRiIGVudHJpZXNcJiMzNDspO1xuMTAzNTpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEwMzY6XHRcdFx0fVxuMTAzNzpcdFx0fVxuMTAzODpcdFx0aWYgKChmbGFncyBcdTAwMjYgTkxNX0ZfQVBQRU5EKSBcdTAwMjZcdTAwMjZcbjEwMzk6XHRcdCAgICAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZi1cdTAwM2VrZXkuZXRoX2FkZHIpIHx8XG4xMDQwOlx0XHQgICAgIGlzX3plcm9fZXRoZXJfYWRkcihmLVx1MDAzZWtleS5ldGhfYWRkcikpKSB7XG4xMDQxOlx0XHRcdHJjID0gdnhsYW5fZmRiX2FwcGVuZChmLCBpcCwgcG9ydCwgdm5pLCBpZmluZGV4LCBcdTAwMjZyZCk7XG4xMDQyOlx0XG4xMDQzOlx0XHRcdGlmIChyYyBcdTAwM2MgMClcbjEwNDQ6XHRcdFx0XHRyZXR1cm4gcmM7XG4xMDQ1Olx0XHRcdGlmIChyYyBcdTAwMjZcdTAwMjYgY3JlYXRlZClcbjEwNDY6XHRcdFx0XHQqY3JlYXRlZCA9IHRydWU7XG4xMDQ3Olx0XHRcdG5vdGlmeSB8PSByYztcbjEwNDg6XHRcdH1cbjEwNDk6XHRcbjEwNTA6XHRcdGlmIChuZG1fZmxhZ3MgXHUwMDI2IE5URl9VU0UpXG4xMDUxOlx0XHRcdFdSSVRFX09OQ0UoZi1cdTAwM2V1cGRhdGVkLCBqaWZmaWVzKTtcbjEwNTI6XHRcbjEwNTM6XHRcdGlmIChub3RpZnkpIHtcbjEwNTQ6XHRcdFx0aWYgKHJkID09IE5VTEwpXG4xMDU1Olx0XHRcdFx0cmQgPSBmaXJzdF9yZW1vdGVfcnRubChmKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYwOAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlRpbWUgdG8gRGl2ZSBpbnRvIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZWAgYW5kIHRoZSBTdXJyb3VuZGluZ3MqKgoKQWxyaWdodCwgZ2l2ZW4gd2hhdCB3ZSYjMzk7cmUgd29ya2luZyBvbiwgaXQmIzM5O3MgcHJ1ZGVudCB0byBnaXZlIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZWAgYSBnb29kLCBoYXJkIGxvb2suIEJ1dCwgSSBkb24mIzM5O3Qgd2FudCB0byBqdXN0IGlzb2xhdGUgdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgdGhhdCBjYWxscyBpdCwgdGhlIGZ1bmN0aW9ucyBpdCByZWxpZXMgb24sIGFuZCBlc3BlY2lhbGx5IGFueSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGF0IHNwZWNpZmljIHVwZGF0ZTsgaXQmIzM5O3MgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGhvdyB0aGUgRm9yd2FyZGluZyBEYXRhYmFzZSAoRkRCKSB1cGRhdGVzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgVlhMQU4gbW9kdWxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY2F0Y2hpbmcgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMsIGVkZ2UgY2FzZXMsIG9yIG9wdGltaXphdGlvbnMgdGhhdCBtaWdodCBiZSBtaXNzZWQgaWYgSSBvbmx5IGZvY3VzIG9uIHRoZSB0YXJnZXQgZnVuY3Rpb24uIFRoaW5raW5nIGhvbGlzdGljYWxseSBhYm91dCBpdHMgcmVsYXRpb24gdG8gdGhlIFZYTEFOIGRhdGFwYXRoIGlzIGtleSBoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDc1Olx0XHRyZXR1cm4gZXJyO1xuMTA3NjpcdH1cbjEwNzc6XHRcbjEwNzg6XHRzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuMTA3OTpcdFx0XHRcdFx0ICAgY29uc3QgdTggKm1hYywgdW5pb24gdnhsYW5fYWRkciAqaXAsXG4xMDgwOlx0XHRcdFx0XHQgICBfX3UxNiBzdGF0ZSwgX191MTYgZmxhZ3MsXG4xMDgxOlx0XHRcdFx0XHQgICBfX2JlMTYgcG9ydCwgX19iZTMyIHNyY192bmksIF9fYmUzMiB2bmksXG4xMDgyOlx0XHRcdFx0XHQgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsIHUzMiBuaGlkLFxuMTA4MzpcdFx0XHRcdFx0ICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXG4xMDg0Olx0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4xMDg1Olx0e1xuMTA4NjpcdFx0X191MTYgZmRiX2ZsYWdzID0gKG5kbV9mbGFncyBcdTAwMjYgfk5URl9VU0UpO1xuMTA4NzpcdFx0c3RydWN0IHZ4bGFuX2ZkYiAqZjtcbjEwODg6XHRcdGludCByYztcbjEwODk6XHRcbjEwOTA6XHRcdC8qIERpc2FsbG93IHJlcGxhY2UgdG8gYWRkIGEgbXVsdGljYXN0IGVudHJ5ICovXG4xMDkxOlx0XHRpZiAoKGZsYWdzIFx1MDAyNiBOTE1fRl9SRVBMQUNFKSBcdTAwMjZcdTAwMjZcbjEwOTI6XHRcdCAgICAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIobWFjKSB8fCBpc196ZXJvX2V0aGVyX2FkZHIobWFjKSkpXG4xMDkzOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEwOTQ6XHRcbjEwOTU6XHRcdG5ldGRldl9kYmcodnhsYW4tXHUwMDNlZGV2LCBcJiMzNDthZGQgJXBNIC1cdTAwM2UgJXBJU1xcblwmIzM0OywgbWFjLCBpcCk7XG4xMDk2Olx0XHRyYyA9IHZ4bGFuX2ZkYl9jcmVhdGUodnhsYW4sIG1hYywgaXAsIHN0YXRlLCBwb3J0LCBzcmNfdm5pLFxuMTA5NzpcdFx0XHRcdCAgICAgIHZuaSwgaWZpbmRleCwgZmRiX2ZsYWdzLCBuaGlkLCBcdTAwMjZmLCBleHRhY2spO1xuMTA5ODpcdFx0aWYgKHJjIFx1MDAzYyAwKVxuMTA5OTpcdFx0XHRyZXR1cm4gcmM7XG4xMTAwOlx0XG4xMTAxOlx0XHRyYyA9IHZ4bGFuX2ZkYl9ub3RpZnkodnhsYW4sIGYsIGZpcnN0X3JlbW90ZV9ydG5sKGYpLCBSVE1fTkVXTkVJR0gsXG4xMTAyOlx0XHRcdFx0ICAgICAgc3dkZXZfbm90aWZ5LCBleHRhY2spO1xuMTEwMzpcdFx0aWYgKHJjKVxuMTEwNDpcdFx0XHRnb3RvIGVycl9ub3RpZnk7XG4xMTA1Olx0XG4xMTA2Olx0XHRpZiAoY3JlYXRlZClcbjExMDc6XHRcdFx0KmNyZWF0ZWQgPSB0cnVlO1xuMTEwODpcdFxuMTEwOTpcdFx0cmV0dXJuIDA7XG4xMTEwOlx0XG4xMTExOlx0ZXJyX25vdGlmeTpcbjExMTI6XHRcdHZ4bGFuX2ZkYl9kZXN0cm95KHZ4bGFuLCBmLCBmYWxzZSwgZmFsc2UpO1xuMTExMzpcdFx0cmV0dXJuIHJjO1xuMTExNDpcdH1cbjExMTU6XHRcbjExMTY6XHQvKiBBZGQgbmV3IGVudHJ5IHRvIGZvcndhcmRpbmcgdGFibGUgLS0gYXNzdW1lcyBsb2NrIGhlbGQgKi9cbjExMTc6XHRpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbjExMTg6XHRcdFx0ICAgICBjb25zdCB1OCAqbWFjLCB1bmlvbiB2eGxhbl9hZGRyICppcCxcbjExMTk6XHRcdFx0ICAgICBfX3UxNiBzdGF0ZSwgX191MTYgZmxhZ3MsXG4xMTIwOlx0XHRcdCAgICAgX19iZTE2IHBvcnQsIF9fYmUzMiBzcmNfdm5pLCBfX2JlMzIgdm5pLFxuMTEyMTpcdFx0XHQgICAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsXG4xMTIyOlx0XHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXG4xMTIzOlx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTEyNDpcdHtcbjExMjU6XHRcdHN0cnVjdCB2eGxhbl9mZGIgKmY7XG4xMTI2Olx0XG4xMTI3Olx0XHRmID0gdnhsYW5fZmluZF9tYWModnhsYW4sIG1hYywgc3JjX3ZuaSk7XG4xMTI4Olx0XHRpZiAoZikge1xuMTEyOTpcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE5MTV9GX0VYQ0wpIHtcbjExMzA6XHRcdFx0XHRuZXRkZXZfZGJnKHZ4bGFuLVx1MDAzZWRldixcbjExMzE6XHRcdFx0XHRcdCAgIFwmIzM0O2xvc3QgcmFjZSB0byBjcmVhdGUgJXBNXFxuXCYjMzQ7LCBtYWMpO1xuMTEzMjpcdFx0XHRcdHJldHVybiAtRUVYSVNUO1xuMTEzMzpcdFx0XHR9XG4xMTM0Olx0XG4xMTM1Olx0XHRcdHJldHVybiB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHZ4bGFuLCBpcCwgc3RhdGUsIGZsYWdzLCBwb3J0LFxuMTEzNjpcdFx0XHRcdFx0XHRcdCB2bmksIGlmaW5kZXgsIG5kbV9mbGFncywgZixcbjExMzc6XHRcdFx0XHRcdFx0XHQgbmhpZCwgc3dkZXZfbm90aWZ5LCBjcmVhdGVkLFxuMTEzODpcdFx0XHRcdFx0XHRcdCBleHRhY2spO1xuMTEzOTpcdFx0fSBlbHNlIHtcbjExNDA6XHRcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE5MTV9GX0NSRUFURSkpXG4xMTQxOlx0XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xMTQyOlx0XG4xMTQzOlx0XHRcdHJldHVybiB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSh2eGxhbiwgbWFjLCBpcCwgc3RhdGUsIGZsYWdzLFxuMTE0NDpcdFx0XHRcdFx0XHQgICAgICAgcG9ydCwgc3JjX3ZuaSwgdm5pLCBpZmluZGV4LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA2OQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHZ4bGFuX3ZuaWZpbHRlci5jYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBkaWdnaW5nIGludG8gYHZ4bGFuX3ZuaWZpbHRlci5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtb2R1bGUgYmV0dGVyLCBhbmQgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gbG9vayBhdCB0aGUgY29kZSBkaXJlY3RseS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGdvaW5nIHRvIGJlIGFyb3VuZCBsaW5lcyA1MTIsIDcyNSwgYW5kIHBvdGVudGlhbGx5IG90aGVyIGFyZWFzIG5lYXJieS4gVGhlc2UgbGluZSBudW1iZXJzIG9mdGVuIHBpbnBvaW50IGtleSBmdW5jdGlvbnMgb3IgY3JpdGljYWwgbG9naWMgd2l0aGluIHRoZSBtb2R1bGUsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTEwOlx0XHRyZXR1cm4gZXJyO1xuIDUxMTpcdH1cbiA1MTI6XHRcbiA1MTM6XHRzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gNTE0Olx0XHRcdFx0XHQgIHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSxcbiA1MTU6XHRcdFx0XHRcdCAgdW5pb24gdnhsYW5fYWRkciAqZ3JvdXAsXG4gNTE2Olx0XHRcdFx0XHQgIGJvb2wgY3JlYXRlLCBib29sICpjaGFuZ2VkLFxuIDUxNzpcdFx0XHRcdFx0ICBib29sICpmZGJfY3JlYXRlZCxcbiA1MTg6XHRcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDUxOTpcdHtcbiA1MjA6XHRcdHN0cnVjdCB2eGxhbl9uZXQgKnZuID0gbmV0X2dlbmVyaWModnhsYW4tXHUwMDNlbmV0LCB2eGxhbl9uZXRfaWQpO1xuIDUyMTpcdFx0c3RydWN0IHZ4bGFuX3Jkc3QgKmRzdCA9IFx1MDAyNnZ4bGFuLVx1MDAzZWRlZmF1bHRfZHN0O1xuIDUyMjpcdFx0dW5pb24gdnhsYW5fYWRkciAqbmV3cmlwID0gTlVMTCwgKm9sZHJpcCA9IE5VTEw7XG4gNTIzOlx0XHR1bmlvbiB2eGxhbl9hZGRyIG9sZF9yZW1vdGVfaXA7XG4gNTI0Olx0XHRpbnQgcmV0ID0gMDtcbiA1MjU6XHRcbiA1MjY6XHRcdG1lbWNweShcdTAwMjZvbGRfcmVtb3RlX2lwLCBcdTAwMjZ2bmlub2RlLVx1MDAzZXJlbW90ZV9pcCwgc2l6ZW9mKG9sZF9yZW1vdGVfaXApKTtcbiA1Mjc6XHRcbiA1Mjg6XHRcdC8qIGlmIHBlciB2bmkgcmVtb3RlIGlwIGlzIG5vdCBwcmVzZW50IHVzZSB2eGxhbiBkZXZcbiA1Mjk6XHRcdCAqIGRlZmF1bHQgZHN0IHJlbW90ZSBpcCBmb3IgZmRiIGVudHJ5XG4gNTMwOlx0XHQgKi9cbiA1MzE6XHRcdGlmIChncm91cCBcdTAwMjZcdTAwMjYgIXZ4bGFuX2FkZHJfYW55KGdyb3VwKSkge1xuIDUzMjpcdFx0XHRuZXdyaXAgPSBncm91cDtcbiA1MzM6XHRcdH0gZWxzZSB7XG4gNTM0Olx0XHRcdGlmICghdnhsYW5fYWRkcl9hbnkoXHUwMDI2ZHN0LVx1MDAzZXJlbW90ZV9pcCkpXG4gNTM1Olx0XHRcdFx0bmV3cmlwID0gXHUwMDI2ZHN0LVx1MDAzZXJlbW90ZV9pcDtcbiA1MzY6XHRcdH1cbiA1Mzc6XHRcbiA1Mzg6XHRcdC8qIGlmIG9sZCByaXAgZXhpc3RzLCBhbmQgbm8gbmV3cmlwLFxuIDUzOTpcdFx0ICogZXhwbGljaXRseSBkZWxldGUgb2xkIHJpcFxuIDU0MDpcdFx0ICovXG4gNTQxOlx0XHRpZiAoIW5ld3JpcCBcdTAwMjZcdTAwMjYgIXZ4bGFuX2FkZHJfYW55KFx1MDAyNm9sZF9yZW1vdGVfaXApKVxuIDU0MjpcdFx0XHRvbGRyaXAgPSBcdTAwMjZvbGRfcmVtb3RlX2lwO1xuIDU0MzpcdFxuIDU0NDpcdFx0aWYgKCFuZXdyaXAgXHUwMDI2XHUwMDI2ICFvbGRyaXApXG4gNTQ1Olx0XHRcdHJldHVybiAwO1xuIDU0NjpcdFxuIDU0NzpcdFx0aWYgKCFjcmVhdGUgXHUwMDI2XHUwMDI2IG9sZHJpcCBcdTAwMjZcdTAwMjYgbmV3cmlwIFx1MDAyNlx1MDAyNiB2eGxhbl9hZGRyX2VxdWFsKG9sZHJpcCwgbmV3cmlwKSlcbiA1NDg6XHRcdFx0cmV0dXJuIDA7XG4gNTQ5Olx0XG4gNTUwOlx0XHRyZXQgPSB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnkodnhsYW4sIHZuaW5vZGUtXHUwMDNldm5pLFxuIDU1MTpcdFx0XHRcdFx0XHQgICAgIG9sZHJpcCwgbmV3cmlwLCBmZGJfY3JlYXRlZCxcbiA1NTI6XHRcdFx0XHRcdFx0ICAgICBleHRhY2spO1xuIDU1MzpcdFx0aWYgKHJldClcbiA1NTQ6XHRcdFx0Z290byBvdXQ7XG4gNTU1Olx0XG4gNTU2Olx0XHRpZiAoZ3JvdXApXG4gNTU3Olx0XHRcdG1lbWNweShcdTAwMjZ2bmlub2RlLVx1MDAzZXJlbW90ZV9pcCwgZ3JvdXAsIHNpemVvZih2bmlub2RlLVx1MDAzZXJlbW90ZV9pcCkpO1xuIDU1ODpcdFxuIDU1OTpcdFx0aWYgKHZ4bGFuLVx1MDAzZWRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDczCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byB0aGUgVlhMQU4gVk5JIEFkZGl0aW9uIENvZGUqKgoKT2theSwgdGltZSB0byBkaWcgaW4uIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHNvbWV0aGluZyBtaWdodCBiZSBvZmYgd2l0aCB0aGUgYHZ4bGFuX3ZuaV9hZGRgIGZ1bmN0aW9uLiBHaXZlbiB0aGUgYXJlYSBJJiMzOTttIHRyb3VibGVzaG9vdGluZywgbGluZSBudW1iZXJzIDcyNSB0aHJvdWdoIDc4MCBpbiB0aGF0IGNvZGUgYmxvY2sgYXJlIHNjcmVhbWluZyBvdXQgdG8gYmUgY2hlY2tlZC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gdGhlcmUgYW5kIHN0YXJ0IGJ5IHJ1bm5pbmcgdGhyb3VnaCB0aGF0IHNlY3Rpb24gc2xvd2x5LCBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGxvZ2ljIGZsYXdzLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCBoYW5kbGluZyBvZiBWTkkgYWRkaXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBhbmQgaG93IHRoZXkmIzM5O3JlIGJlaW5nIHVwZGF0ZWQuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBodW5jaCBwYW5zIG91dC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgaGFuZGxpbmcgdGhvc2UgVk5JIGFkZCByZXF1ZXN0cyBleGFjdGx5IGFzIGRlZmluZWQgaW4gdGhlIHNwZWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyNTpcdFxuIDcyNjpcdHN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiA3Mjc6XHRcdFx0XHQgc3RydWN0IHZ4bGFuX3ZuaV9ncm91cCAqdmcsXG4gNzI4Olx0XHRcdFx0IHUzMiB2bmksIHVuaW9uIHZ4bGFuX2FkZHIgKmdyb3VwLFxuIDcyOTpcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNzMwOlx0e1xuIDczMTpcdFx0c3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlO1xuIDczMjpcdFx0X19iZTMyIHYgPSBjcHVfdG9fYmUzMih2bmkpO1xuIDczMzpcdFx0Ym9vbCBmZGJfY3JlYXRlZCA9IGZhbHNlO1xuIDczNDpcdFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4gNzM1Olx0XHRpbnQgZXJyID0gMDtcbiA3MzY6XHRcbiA3Mzc6XHRcdGlmICh2eGxhbl92bmlmaWx0ZXJfbG9va3VwKHZ4bGFuLCB2KSlcbiA3Mzg6XHRcdFx0cmV0dXJuIHZ4bGFuX3ZuaV91cGRhdGUodnhsYW4sIHZnLCB2LCBncm91cCwgXHUwMDI2Y2hhbmdlZCwgZXh0YWNrKTtcbiA3Mzk6XHRcbiA3NDA6XHRcdGVyciA9IHZ4bGFuX3ZuaV9pbl91c2UodnhsYW4tXHUwMDNlbmV0LCB2eGxhbiwgXHUwMDI2dnhsYW4tXHUwMDNlY2ZnLCB2KTtcbiA3NDE6XHRcdGlmIChlcnIpIHtcbiA3NDI6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtWTkkgaW4gdXNlXCYjMzQ7KTtcbiA3NDM6XHRcdFx0cmV0dXJuIGVycjtcbiA3NDQ6XHRcdH1cbiA3NDU6XHRcbiA3NDY6XHRcdHZuaW5vZGUgPSB2eGxhbl92bmlfYWxsb2ModnhsYW4sIHYpO1xuIDc0NzpcdFx0aWYgKCF2bmlub2RlKVxuIDc0ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA3NDk6XHRcbiA3NTA6XHRcdGVyciA9IHJoYXNodGFibGVfbG9va3VwX2luc2VydF9mYXN0KFx1MDAyNnZnLVx1MDAzZXZuaV9oYXNoLFxuIDc1MTpcdFx0XHRcdFx0XHQgICAgXHUwMDI2dm5pbm9kZS1cdTAwM2V2bm9kZSxcbiA3NTI6XHRcdFx0XHRcdFx0ICAgIHZ4bGFuX3ZuaV9yaHRfcGFyYW1zKTtcbiA3NTM6XHRcdGlmIChlcnIpIHtcbiA3NTQ6XHRcdFx0dnhsYW5fdm5pX2ZyZWUodm5pbm9kZSk7XG4gNzU1Olx0XHRcdHJldHVybiBlcnI7XG4gNzU2Olx0XHR9XG4gNzU3Olx0XG4gNzU4Olx0XHRfX3Z4bGFuX3ZuaV9hZGRfbGlzdCh2Zywgdm5pbm9kZSk7XG4gNzU5Olx0XG4gNzYwOlx0XHRpZiAodnhsYW4tXHUwMDNlZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApXG4gNzYxOlx0XHRcdHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZSh2eGxhbiwgdm5pbm9kZSwgZmFsc2UpO1xuIDc2MjpcdFxuIDc2MzpcdFx0ZXJyID0gdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCh2eGxhbiwgdm5pbm9kZSwgZ3JvdXAsIHRydWUsIFx1MDAyNmNoYW5nZWQsXG4gNzY0Olx0XHRcdFx0XHQgICAgIFx1MDAyNmZkYl9jcmVhdGVkLCBleHRhY2spO1xuIDc2NTpcdFx0aWYgKGVycilcbiA3NjY6XHRcdFx0Z290byBlcnJfdm5pX2RlbDtcbiA3Njc6XHRcbiA3Njg6XHRcdHZ4bGFuX3ZuaWZpbHRlcl9ub3RpZnkodnhsYW4sIHZuaW5vZGUsIFJUTV9ORVdUVU5ORUwpO1xuIDc2OTpcdFxuIDc3MDpcdFx0cmV0dXJuIDA7XG4gNzcxOlx0XG4gNzcyOlx0ZXJyX3ZuaV9kZWw6XG4gNzczOlx0XHQvKiBVbmRvIG9ubHkgdGhlIGRlZmF1bHQgRkRCIGVudHJ5IHRoaXMgYWRkIGluc3RhbGxlZC4gIEFuIGVudHJ5IHRoYXRcbiA3NzQ6XHRcdCAqIHdhcyBhbHJlYWR5IHRoZXJlLCB3aGV0aGVyIGFkZGVkIG91dCBvZiBiYW5kIG9yIGJ5IGFub3RoZXIgVk5JLCBpc1xuIDc3NTpcdFx0ICogbGVmdCBhbG9uZS5cbiA3NzY6XHRcdCAqXG4gNzc3Olx0XHQgKiBObyBtZW1iZXJzaGlwIGhhcyB0byBiZSBnaXZlbiBiYWNrOiB2eGxhbl9pZ21wX2xlYXZlKCkgaXMgZ2F0ZWQgb25cbiA3Nzg6XHRcdCAqIHZ4bGFuX2FkZHJfbXVsdGljYXN0KFx1MDAyNm9sZF9yZW1vdGVfaXApLCBhbmQgb2xkX3JlbW90ZV9pcCBpcyBhIGNvcHlcbiA3Nzk6XHRcdCAqIG9mIHRoZSByZW1vdGUgSVAgb2YgYSBub2RlIHRoaXMgYWRkIGp1c3QgYWxsb2NhdGVkLCBzbyBpdCBpcyB6ZXJvLlxuIDc4MDpcdFx0ICpcbiA3ODE6XHRcdCAqIFRoZSBhZGRyZXNzIHBpY2tlZCBiZWxvdyBpcyB0aGUgb25lIHRoZSBlbnRyeSB3YXMgaW5zdGFsbGVkXG4gNzgyOlx0XHQgKiBhZ2FpbnN0LiAgSWYgdGhlIHJlcXVlc3QgY2FycmllZCBhIGdyb3VwLCB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKClcbiA3ODM6XHRcdCAqIGNvcGllZCBpdCBpbnRvIHZuaW5vZGUtXHUwMDNlcmVtb3RlX2lwIGJlZm9yZSB0aGUgam9pbiBjb3VsZCBmYWlsOyBpZlxuIDc4NDpcdFx0ICogaXQgZGlkIG5vdCwgdGhhdCBjb3B5IHdhcyBza2lwcGVkIGFuZCB0aGUgZW50cnkgd2VudCB0byB0aGUgZGV2aWNlXG4gNzg1Olx0XHQgKiBkZWZhdWx0LlxuIDc4NjpcdFx0ICovXG4gNzg3Olx0XHRpZiAoZmRiX2NyZWF0ZWQpIHtcbiA3ODg6XHRcdFx0dW5pb24gdnhsYW5fYWRkciAqcmlwID0gdnhsYW5fYWRkcl9hbnkoXHUwMDI2dm5pbm9kZS1cdTAwM2VyZW1vdGVfaXApID9cbiA3ODk6XHRcdFx0XHRcdFx0XHUwMDI2dnhsYW4tXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX2lwIDpcbiA3OTA6XHRcdFx0XHRcdFx0XHUwMDI2dm5pbm9kZS1cdTAwM2VyZW1vdGVfaXA7XG4gNzkxOlx0XG4gNzkyOlx0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ2eGxhbi1cdTAwM2VoYXNoX2xvY2spO1xuIDc5MzpcdFx0XHRfX3Z4bGFuX2ZkYl9kZWxldGUodnhsYW4sIGFsbF96ZXJvc19tYWMsICpyaXAsXG4gNzk0Olx0XHRcdFx0XHQgICB2eGxhbi1cdTAwM2VjZmcuZHN0X3BvcnQsIHZuaW5vZGUtXHUwMDNldm5pLFxuIDc5NTpcdFx0XHRcdFx0ICAgdm5pbm9kZS1cdTAwM2V2bmksXG4gNzk2Olx0XHRcdFx0XHQgICB2eGxhbi1cdTAwM2VkZWZhdWx0X2RzdC5yZW1vdGVfaWZpbmRleCwgdHJ1ZSk7XG4gNzk3Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4gNzk4Olx0XHR9XG4gNzk5Olx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnZnLVx1MDAzZXZuaV9oYXNoLCBcdTAwMjZ2bmlub2RlLVx1MDAzZXZub2RlLFxuIDgwMDpcdFx0XHRcdCAgICAgICB2eGxhbl92bmlfcmh0X3BhcmFtcyk7XG4gODAxOlx0XHRfX3Z4bGFuX3ZuaV9kZWxfbGlzdCh2Zywgdm5pbm9kZSk7XG4gODAyOlx0XHRpZiAodnhsYW4tXHUwMDNlZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApXG4gODAzOlx0XHRcdHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZSh2eGxhbiwgdm5pbm9kZSwgdHJ1ZSk7XG4gODA0Olx0XHRjYWxsX3JjdShcdTAwMjZ2bmlub2RlLVx1MDAzZXJjdSwgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUpO1xuIDgwNTpcdFx0cmV0dXJuIGVycjtcbiA4MDY6XHR9XG4gODA3Olx0XG4gODA4Olx0c3RhdGljIHZvaWQgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4gODA5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgwNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDkwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZYTEFOIFZOSSBBZGRpdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXRjaD8gQWgsIHJpZ2h0LCBlcnJvciBoYW5kbGluZyBmb3IgYHZ4bGFuX3ZuaV9hZGRgLiBUaGUgcHJldmlvdXMgY29kZSwgSSByZW1lbWJlciBub3csIGRpZG4mIzM5O3QgcHJvcGVybHkgaGFuZGxlIGZhaWx1cmVzIGluIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYC4gSXQganVzdCBibGl0aGVseSBjb250aW51ZWQsIGxlYXZpbmcgcG90ZW50aWFsIG1lc3NlcyBpbiBpdHMgd2FrZS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cGAgY291bGQgZmFpbCwgYW5kIHRoZSBjb2RlIHdvdWxkIHByb2NlZWQgYXMgaWYgZXZlcnl0aGluZyB3YXMgaHVua3ktZG9yeSwgcG90ZW50aWFsbHkgbGVhdmluZyBhIHBhcnRpYWxseSBjcmVhdGVkIGB2bmlub2RlYCBoYW5naW5nIGFyb3VuZCwgb3IgYSBzdGFsZSBGREIgZW50cnkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSwgYnV0IEkgcmVjYWxsIHRoaXMgYmVpbmcgaW50cm9kdWNlZCBhIHdoaWxlIGJhY2s7IEkgbmVlZCB0byBjaGVjayB0aGUgZ2l0IGxvZyBvZiBgdnhsYW5fdm5pX2FkZGAgb3IgdGhlIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgaXQgdG8gY29uZmlybSBteSBzdXNwaWNpb24uCgpUaGlzIHBhdGNoLCB0aGVuLCBhZGRzIGNydWNpYWwgZXJyb3IgaGFuZGxpbmcuIElmIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYCBmYWlscywgaXQgY2xlYW5zIHVwIGV2ZXJ5dGhpbmcuIFRoZSBhdXRob3IgaXMgdHJhY2tpbmcgd2hldGhlciBhbiBGREIgZW50cnkgd2FzIGNyZWF0ZWQgdmlhIGBmZGJfY3JlYXRlZGAsIHdoaWNoIGlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAuIElmIGl0ICp3YXMqIGNyZWF0ZWQsIGl0JiMzOTtzIGRlbGV0ZWQgd2l0aCBgX192eGxhbl9mZGJfZGVsZXRlYC4gQWRkaXRpb25hbGx5LCBpdCB0YWtlcyBjYXJlIHRvIHJlbW92ZSB0aGUgZW50cnkgZnJvbSBgdmctJmd0O3ZuaV9oYXNoYCwgZGVsZXRlIGl0IGZyb20gYF9fdnhsYW5fdm5pX2RlbF9saXN0YCwgZGVsZXRlIHRoZSB2bmlub2RlIHNvY2tldCBpZiBpdCYjMzk7cyBJRkZfVVAgdXNpbmcgYHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZWAsIGFuZCBmaW5hbGx5LCBjYWxscyBSQ1UgZnJlZSBvbiBgdm5pbm9kZWAuIFNvbGlkLCBwcm9wZXIgY2xlYW51cC4KCk5vdywgbGV0JiMzOTtzIHB1dCBvbiBteSBLTVNBTiBoYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwYXRjaCBpc24mIzM5O3QgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIHJlYWRzIHRoYXQgY291bGQgY2F1c2UgaXNzdWVzLiBGaXJzdCwgYXJlIHRoZXJlIGFueSBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBiZSBhZmZlY3RlZD8gTm8uIGBmZGJfY3JlYXRlZGAgaXMgYW4gaW50ZXJuYWwgYm9vbGVhbiwgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayB3aXRoaW4gYHZ4bGFuX3ZuaV9hZGRgLCBhbmQgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgbmV2ZXIgY29waWVkIHRvIHVzZXIgc3BhY2UuIEdvb2QuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gYmUgbWV0aWN1bG91cy4gTGV0JiMzOTtzIHNlZS4uLiBgYm9vbCBmZGJfY3JlYXRlZCA9IGZhbHNlO2AgaXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBJdCYjMzk7cyBwYXNzZWQgdG8gYHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXBgLCB3aGljaCBjYWxscyBgdnhsYW5fZmRiX3VwZGF0ZWAgYnkgcGFzc2luZyBpdCBhcyB0aGUgYGNyZWF0ZWRgIGFyZ3VtZW50LiBJbiBgdnhsYW5fZmRiX3VwZGF0ZWAsIHRoZXJlIGFyZSBjb25kaXRpb25hbCBhc3NpZ25tZW50cyB0byBgY3JlYXRlZGAgd2l0aGluIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBhbmQgYHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlYCwgYnV0IGNyaXRpY2FsbHksIHRoZSBjb2RlIG9ubHkgKndyaXRlcyogdG8gYCpjcmVhdGVkYCBpZiB0aGUgcG9pbnRlciBpcyBub24tTlVMTC4gTm8gcmVhZHMuIEJhY2sgaW4gYHZ4bGFuX3ZuaV9hZGRgLCBpdCYjMzk7cyB1c2VkIGluIGFuIGBpZiAoZmRiX2NyZWF0ZWQpYCBibG9jay4gVGhpcyBjaGVja3MgaXMgc2FmZSBiZWNhdXNlIHRoZSB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCBhdCBsaW5lIDczMy4gU28gYGZkYl9jcmVhdGVkYCBpcyBzYWZlLgpUaGUgbmV4dCBwbGFjZSBJIHdhbnQgdG8gdmVyaWZ5IGlzIGhlcmU6IGB1bmlvbiB2eGxhbl9hZGRyICpyaXAgPSB2eGxhbl9hZGRyX2FueSgmYW1wO3ZuaW5vZGUtJmd0O3JlbW90ZV9pcCkgPyAmYW1wO3Z4bGFuLSZndDtkZWZhdWx0X2RzdC5yZW1vdGVfaXAgOiAmYW1wO3ZuaW5vZGUtJmd0O3JlbW90ZV9pcDtgLiBJJiMzOTt2ZSB1c2VkIHRoaXMgcGF0dGVybiBhIGh1bmRyZWQgdGltZXMuICBgdm5pbm9kZWAgaXMgY3JlYXRlZCB3aXRoIGB2eGxhbl92bmlfYWxsb2ModnhsYW4sIHYpYC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgcmVtb3RlX2lwIGluIGB2eGxhbl92bmlfYWxsb2NgLiBMb29raW5nIGF0IGB2eGxhbl92bmlfYWxsb2NgLCBJIHNlZSBpdCBjYWxscyBga21lbV9jYWNoZV9hbGxvY2AuIEkgd2lsbCBuZWVkIHRvIHZlcmlmeSBpZiB0aGUgcmVtb3RlIGlwIGlzIGluaXRpYWxpemVkIHRoZXJlLgpJJiMzOTttIHNhdGlzZmllZCB0aGF0IHRoaXMgcGF0Y2gsIGFzIGl0IHN0YW5kcywgc2VlbXMgY2xlYW4gZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBhdXRob3JzIHRob3VnaHQgYWJvdXQgdGhlIHBpdGZhbGxzIGFuZCB0b29rIGFwcHJvcHJpYXRlIG1lYXN1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2eGxhbl92bmlfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9Njg5PXN0YXRpYyB2b2lkIF9fdnhsYW5fdm5pX2RlbF9saXN0KHN0cnVjdCB2eGxhbl92bmlfZ3JvdXAgKnZnLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTY5NS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjY5NjpzdGF0aWMgc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2eGxhbl92bmlfYWxsb2Moc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy02OTctXHRcdFx0XHRcdCAgICAgIF9fYmUzMiB2bmkpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NzI2PXN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy03NDUtXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo3NDY6XHR2bmlub2RlID0gdnhsYW5fdm5pX2FsbG9jKHZ4bGFuLCB2KTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTc0Ny1cdGlmICghdm5pbm9kZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4ODEKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGB2eGxhbl92bmlfYWxsb2NgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgYHZ4bGFuX3ZuaV9hbGxvY2AuIFRoZSBmYWN0IHRoYXQgSSYjMzk7bSBldmVuICp0aGlua2luZyogYWJvdXQgdGhpcyBmdW5jdGlvbiBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBWTkkgKFZYTEFOIE5ldHdvcmsgSWRlbnRpZmllcikgYWxsb2NhdGlvbiwgYW5kIHByb2JhYmx5IGluIHRoZSBjb250ZXh0IG9mIGEgdmlydHVhbGl6ZWQgbmV0d29yayBlbnZpcm9ubWVudC4gTXkgYnJhaW4mIzM5O3MgYWxyZWFkeSBnZWFyaW5nIHVwIHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgdW5kZXJseWluZyBtZWNoYW5pc21zOiBpcyB0aGlzIGEgY2VudHJhbGl6ZWQgYWxsb2NhdG9yLCBvciBhIGRpc3RyaWJ1dGVkIG9uZT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgY291bnRlciwgYSBtb3JlIGNvbXBsZXggYml0bWFwLCBvciBwZXJoYXBzIGV2ZW4gc29tZXRoaW5nIGxldmVyYWdpbmcgYSBtb3JlIHNvcGhpc3RpY2F0ZWQgZGF0YSBzdHJ1Y3R1cmUgZm9yIG9wdGltaXplZCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24/CgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHNjYWxhYmlsaXR5LiBDYW4gdGhpcyBoYW5kbGUgYSBtYXNzaXZlIG51bWJlciBvZiBWTklzLCBhbmQgaG93IGFyZSB3ZSBtYW5hZ2luZyBwb3RlbnRpYWwgZnJhZ21lbnRhdGlvbiBpc3N1ZXMgaW4gdGhlIFZOSSBzcGFjZT8gSXMgdGhlcmUgYW55IGxvZ2ljIGZvciBoYW5kbGluZyBWTkkgY29sbGlzaW9ucyBvciBjb25mbGljdHMsIHBhcnRpY3VsYXJseSBpbiBhIG11bHRpLXRlbmFudCBlbnZpcm9ubWVudD8gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgdHlwaWNhbCBjaGFsbGVuZ2VzOiBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIG11bHRpcGxlIHByb2Nlc3NlcyBhcmUgdHJ5aW5nIHRvIGFsbG9jYXRlIFZOSXMgY29uY3VycmVudGx5LCBhbmQgdGhlIGltcG9ydGFuY2Ugb2YgYXRvbWljaXR5IGFuZCBsb2NraW5nIHN0cmF0ZWdpZXMuCgpGdXJ0aGVybW9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVycm9yIGhhbmRsaW5nLiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGRlYWwgd2l0aCBhbGxvY2F0aW9uIGZhaWx1cmVzPyBEb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlLCB0aHJvdyBhbiBleGNlcHRpb24sIG9yIG1heWJlIGV2ZW4gc2lnbmFsIGFuIG91dC1vZi1WTklzIGNvbmRpdGlvbj8gSSYjMzk7bSBsb29raW5nIGZvciByb2J1c3RuZXNzLCBoZXJlLiBIb3cgd2VsbCBkb2VzIGl0IGhhbmRsZSBjb3JuZXIgY2FzZXMgYW5kIGVkZ2UgY29uZGl0aW9ucz8gQXJlIHRoZXJlIGFueSBwcm90ZWN0aW9ucyBhZ2FpbnN0IHJlc291cmNlIGV4aGF1c3Rpb24gb3IgZGVuaWFsLW9mLXNlcnZpY2U/IFRoaXMgaXMgY3JpdGljYWwgZm9yIHJlbGlhYmlsaXR5IGluIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudC4gSeKAmW0gaG9waW5nIHRvIGZpbmQgY2xldmVyIGxvZ2ljIHRvIGhhbmRsZSB0aGVzZSBpc3N1ZXMgd2l0aGluIHRoZSBmdW5jdGlvbi4KCkFuZCBmaW5hbGx5LCBJJiMzOTttIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgaW50ZWdyYXRpb24gd2l0aCB0aGUgcmVzdCBvZiB0aGUgVlhMQU4gc3RhY2suIEhvdyBkb2VzIHRoaXMgYWxsb2NhdGlvbiBpbnRlcmZhY2Ugd2l0aCB0aGUgZW5jYXBzdWxhdGlvbiBhbmQgZGVjYXBzdWxhdGlvbiBsb2dpYz8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRhdGFiYXNlcyBvciBjb250cm9sIHBsYW5lIGNvbXBvbmVudHM/IFRoZSBlbGVnYW5jZSBvZiB0aGlzIGludGVncmF0aW9uIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgbmV0d29yayBwZXJmb3JtYW5jZS4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjk2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2OTY6XHRzdGF0aWMgc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2eGxhbl92bmlfYWxsb2Moc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gNjk3Olx0XHRcdFx0XHRcdCAgICAgIF9fYmUzMiB2bmkpXG4gNjk4Olx0e1xuIDY5OTpcdFx0c3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlO1xuIDcwMDpcdFxuIDcwMTpcdFx0dm5pbm9kZSA9IGt6YWxsb2Nfb2JqKCp2bmlub2RlKTtcbiA3MDI6XHRcdGlmICghdm5pbm9kZSlcbiA3MDM6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNzA0Olx0XHR2bmlub2RlLVx1MDAzZXN0YXRzID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IHZ4bGFuX3ZuaV9zdGF0c19wY3B1KTtcbiA3MDU6XHRcdGlmICghdm5pbm9kZS1cdTAwM2VzdGF0cykge1xuIDcwNjpcdFx0XHRrZnJlZSh2bmlub2RlKTtcbiA3MDc6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNzA4Olx0XHR9XG4gNzA5Olx0XHR2bmlub2RlLVx1MDAzZXZuaSA9IHZuaTtcbiA3MTA6XHRcdHZuaW5vZGUtXHUwMDNlaGxpc3Q0LnZ4bGFuID0gdnhsYW47XG4gNzExOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gNzEyOlx0XHR2bmlub2RlLVx1MDAzZWhsaXN0Ni52eGxhbiA9IHZ4bGFuO1xuIDcxMzpcdCNlbmRpZlxuIDcxNDpcdFxuIDcxNTpcdFx0cmV0dXJuIHZuaW5vZGU7XG4gNzE2Olx0fVxuIDcxNzpcdFxuIDcxODpcdHN0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9mcmVlKHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSlcbiA3MTk6XHR7XG4gNzIwOlx0XHRmcmVlX3BlcmNwdSh2bmlub2RlLVx1MDAzZXN0YXRzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2Ygdm5pbm9kZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgYHZuaW5vZGVgIHN0cnVjdHVyZSBpcyBoYW5kbGVkLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQmIzM5O3MgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqKCp2bmlub2RlKWAuIFRoaXMgaXMga2V5IGJlY2F1c2UgdGhhdCBtZWFucyB0aGUgZW50aXJlIHN0cnVjdHVyZSBnZXRzIHplcm9lZCByaWdodCBvZmYgdGhlIGJhdCEgU28sIHRoYXQgaW1wb3J0YW50IGByZW1vdGVfaXBgIGZpZWxkPyBJdCBzdGFydHMgd2l0aCBhbGwgemVyb3MuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LgoKTm93LCBpZiBhIGBncm91cGAgaXMgcHJvdmlkZWQgbGF0ZXIgb24sIGBtZW1jcHlgIGlzIHVzZWQgd2l0aGluIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYCB0byBjb3B5IHRoZSBJUCBhZGRyZXNzIGZyb20gdGhlIGBncm91cGAgaW50byBgdm5pbm9kZS0mZ3Q7cmVtb3RlX2lwYC4gTWFrZXMgc2Vuc2UuCgpCdXQgd2hhdCBhYm91dCB0aGF0IGBhbGxfemVyb3NfbWFjYCB2YXJpYWJsZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIHRvby4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byBjaGVjayBob3cgdGhhdCB2YXJpYWJsZSB3b3JrcyB0byBzZWUgaWYgaXQmIzM5O3MgcmVsYXRlZC4gSSYjMzk7bGwgY2hlY2sgaXRzIGRlZmluaXRpb24gdG8gc2VlIGhvdyBpdCBjYW4gYWZmZWN0IHRoZSBvdmVyYWxsIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxfemVyb3NfbWFjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz01Nz11bnNpZ25lZCBpbnQgdnhsYW5fbmV0X2lkO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTU4LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjU5OmNvbnN0IHU4IGFsbF96ZXJvc19tYWNbRVRIX0FMRU4gJiM0MzsgMl07XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNjAtc3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIHZ4bGFuX2xpbmtfb3BzO1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0yNzU1PXN0YXRpYyBuZXRkZXZfdHhfdCB2eGxhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI4MzQtXHRpZiAoZiA9PSBOVUxMKSB7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MjgzNTpcdFx0ZiA9IHZ4bGFuX2ZpbmRfbWFjX3R4KHZ4bGFuLCBhbGxfemVyb3NfbWFjLCB2bmkpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI4MzYtXHRcdGlmIChmID09IE5VTEwpIHtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9Mzk5ND1zdGF0aWMgaW50IHZ4bGFuX2Rldl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy00MDM1LVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo0MDM2Olx0XHRlcnIgPSB2eGxhbl9mZGJfdXBkYXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQwMzctXHRcdFx0XHQgICAgICAgXHUwMDI2ZHN0LVx1MDAzZXJlbW90ZV9pcCxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9NDQ0OD1zdGF0aWMgaW50IHZ4bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDQ4OC1cdFx0aWYgKCF2eGxhbl9hZGRyX2FueShcdTAwMjZjb25mLnJlbW90ZV9pcCkpIHtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo0NDg5Olx0XHRcdGVyciA9IHZ4bGFuX2ZkYl91cGRhdGUodnhsYW4sIGFsbF96ZXJvc19tYWMsXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDQ5MC1cdFx0XHRcdFx0ICAgICAgIFx1MDAyNmNvbmYucmVtb3RlX2lwLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy00NTA1LVx0XHRpZiAoIXZ4bGFuX2FkZHJfYW55KFx1MDAyNmRzdC1cdTAwM2VyZW1vdGVfaXApKVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjQ1MDY6XHRcdFx0X192eGxhbl9mZGJfZGVsZXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ1MDctXHRcdFx0XHRcdCAgIGRzdC1cdTAwM2VyZW1vdGVfaXAsXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oPTEyPWV4dGVybiB1bnNpZ25lZCBpbnQgdnhsYW5fbmV0X2lkO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oOjEzOmV4dGVybiBjb25zdCB1OCBhbGxfemVyb3NfbWFjW0VUSF9BTEVOICYjNDM7IDJdO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oLTE0LWV4dGVybiBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgdnhsYW5fdm5pX3JodF9wYXJhbXM7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NDczPXN0YXRpYyBpbnQgdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBfX2JlMzIgdm5pLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTQ4My1cdGlmIChyZW1vdGVfaXAgXHUwMDI2XHUwMDI2ICF2eGxhbl9hZGRyX2FueShyZW1vdGVfaXApKSB7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo0ODQ6XHRcdGVyciA9IHZ4bGFuX2ZkYl91cGRhdGUodnhsYW4sIGFsbF96ZXJvc19tYWMsXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy00ODUtXHRcdFx0XHQgICAgICAgcmVtb3RlX2lwLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTUwMC1cdGlmIChvbGRfcmVtb3RlX2lwIFx1MDAyNlx1MDAyNiAhdnhsYW5fYWRkcl9hbnkob2xkX3JlbW90ZV9pcCkpIHtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjUwMTpcdFx0X192eGxhbl9mZGJfZGVsZXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNTAyLVx0XHRcdFx0ICAgKm9sZF9yZW1vdGVfaXAsXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NjE0PXN0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9kZWxldGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNjI1LVx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjYyNjpcdFx0X192eGxhbl9mZGJfZGVsZXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNjI3LVx0XHRcdFx0ICAgKHZ4bGFuX2FkZHJfYW55KFx1MDAyNnZuaW5vZGUtXHUwMDNlcmVtb3RlX2lwKSA/XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NzI2PXN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy03OTItXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ2eGxhbi1cdTAwM2VoYXNoX2xvY2spO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6NzkzOlx0XHRfX3Z4bGFuX2ZkYl9kZWxldGUodnhsYW4sIGFsbF96ZXJvc19tYWMsICpyaXAsXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy03OTQtXHRcdFx0XHQgICB2eGxhbi1cdTAwM2VjZmcuZHN0X3BvcnQsIHZuaW5vZGUtXHUwMDNldm5pLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODUxNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZ4bGFuIEZEQiBEZWxldGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIGBhbGxfemVyb3NfbWFjYCBpcyBqdXN0IGEgQlNTLWJhc2VkLCB6ZXJvLWluaXRpYWxpemVkIGdsb2JhbCBhcnJheS4gTm90aGluZyBpbmhlcmVudGx5IGludGVyZXN0aW5nIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYF9fdnhsYW5fZmRiX2RlbGV0ZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IHdoYXQgYXJndW1lbnRzIGRvZXMgaXQgdGFrZSwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGRvZXMgaXQgcG90ZW50aWFsbHkgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnk/IExvb2tzIGxpa2UgSSBkb24mIzM5O3QgbmVlZCB0byB3b3JyeS4gRnJvbSB0aGUgYXJndW1lbnQgbGlzdCwgaXQganVzdCBzZWVtcyB0byBiZSB1c2luZyBNQUMsIElQLCBwb3J0LCBzb3VyY2UgVk5JLCBWTkksIGlmaW5kZXgsIGFuZCBhIGJvb2xlYW4gdG8gZGVsZXRlIGFuIEZEQiBlbnRyeS4gQWxsIGtleSBwYXJhbWV0ZXJzLgoKTmV4dCB1cCwgdGhpcyBgY2FsbF9yY3UoJmFtcDt2bmlub2RlLSZndDtyY3UsIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKTtgIGNhbGwuIEFscmlnaHQsIGBjYWxsX3JjdWAgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGdyYWNlIHBlcmlvZCBmb3IgbWVtb3J5IHJlY2xhbWF0aW9uLiBHb29kLiBOb3csIHRoZSBtZWF0IG9mIGl0OiBgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWVgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBmdW5jdGlvbiBpcyB0aGUgb25lIGFjdHVhbGx5IGZyZWVpbmcgdGhlIGB2bmlub2RlYCBzdHJ1Y3R1cmUuIFNvLCB0aW1lIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZWAgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2l0aCBob3cgaXQgbWFuYWdlcyB0aGlzIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NzE4PXN0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9mcmVlKHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSlcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy03MjMtXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo3MjQ6c3RhdGljIHZvaWQgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNzI1LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NzI2PXN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04MDMtXHRcdHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZSh2eGxhbiwgdm5pbm9kZSwgdHJ1ZSk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo4MDQ6XHRjYWxsX3JjdShcdTAwMjZ2bmlub2RlLVx1MDAzZXJjdSwgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtODA1LVx0cmV0dXJuIGVycjtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04MDctXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo4MDg6c3RhdGljIHZvaWQgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04MDkte1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jPTgxNj1zdGF0aWMgaW50IHZ4bGFuX3ZuaV9kZWwoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtODQ3LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6ODQ4Olx0Y2FsbF9yY3UoXHUwMDI2dm5pbm9kZS1cdTAwM2VyY3UsIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTg0OS1cbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz05NDI9dm9pZCB2eGxhbl92bmlncm91cF91bmluaXQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4pXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtOTU2LVx0XHR2eGxhbl92bmlmaWx0ZXJfbm90aWZ5KHZ4bGFuLCB2LCBSVE1fREVMVFVOTkVMKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjk1NzpcdFx0Y2FsbF9yY3UoXHUwMDI2di1cdTAwM2VyY3UsIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTk1OC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMjI6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MDEKCQkJCQkJCW91dHB1dDogMzExCgkJCQkJCQl0aG91Z2h0czogNzk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5ldyBSaXNrcyBJbnRyb2R1Y2VkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIExpbmUgODA4IGFscmVhZHkgaGFzIHRoZSBgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWVgIGZ1bmN0aW9uIGluIGV4aXN0aW5nIGNvZGUuIFRoZSBlcnJvciBwYXRoIGluIGB2eGxhbl92bmlfYWRkYCBpcyBjb3JyZWN0bHkgdXNpbmcgYGNhbGxfcmN1YCBhZnRlciBgdm5pbm9kZWAgaGFzIGJlZW4gZXhwb3NlZCB0byBSQ1UgcmVhZGVycyDigJMgdGhpcyBwcmV2ZW50cyBhIHVzZS1hZnRlci1mcmVlLCB3aGljaCBpcyBncmVhdC4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWVzLCBhbmQgY29uY3VycmVuY3kgaXNzdWVzLCBidXQgdGhvc2UgYXJlIGNvdmVyZWQgYnkgS0FTQU4vTE9DS0RFUC9LQ1NBTi4KClRoZSBrZXkgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIG5ldyBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcyBzcGVjaWZpY2FsbHkgZGV0ZWN0YWJsZSBieSBLTVNBTj8KCkxldOKAmXMgcmV2aWV3IHRoZSBLTVNBTiBjcml0ZXJpYToKCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlOioqIE5vcGUsIG5vdGhpbmcgaXMgYmVpbmcgY29waWVkIG91dC4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogVGhlIGBib29sIGZkYl9jcmVhdGVkID0gZmFsc2U7YCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgdGhlIGBjcmVhdGVkYCBwb2ludGVyIGlzICp3cml0dGVuKiB0bywgYW5kIGNoZWNrZWQgKGBpZiAoY3JlYXRlZClgKSBiZWZvcmUgdXNlIGFuZCBpbiBgdnhsYW5fdm5pX2FkZGAgd2l0aCB0aGUgZXhwbGljaXRseSBpbml0aWFsaXplZCB2YXJpYWJsZS4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gYnJhbmNoaW5nIGhlcmUuCjMuICAqKkFsbG9jYXRpb24vaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBwb3RlbnRpYWxseSByZWFkIGxhdGVyOioqIFRoZSBhbGxvY2F0aW9ucyB1c2UgYGt6YWxsb2Nfb2JqYCwgYW5kIG5vIG5ldyBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgYnkgdGhpcyBwYXRjaCwgc28gd2XigJlyZSBnb29kLgo0LiAgKipCb3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBieXRlczoqKiBObyBjaGFuZ2VzIHRvIGFueSBvZiB0aG9zZS4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGNsZWFybHkgYGZhbHNlYC4KCk5vdywgZm9yIGEgY2FyZWZ1bCBjb250cmFzdCB3aXRoIEtBU0FOOiB0aGlzIHBhdGNoIGFkZHMgYW4gZXJyb3ItdW53aW5kIHBhdGggdG8gYHZ4bGFuX3ZuaV9hZGRgIHRoYXQgZW5zdXJlcyB0aGUgY3JlYXRlZCBkZWZhdWx0IEZEQiBlbnRyeSBpcyBkZWxldGVkLCB0aGUgYHZuaW5vZGVgIGlzIHVubGlua2VkLCBhbmQgZnJlZWQgd2l0aCBSQ1UsIGVuc3VyaW5nIHRoZSBjcmVhdGVkIEZEQiBlbnRyeSBpcyBkZWxldGVkLiBQb3RlbnRpYWwgaXNzdWVzIHdpdGggbWVtb3J5IHNhZmV0eSBvciBjb25jdXJyZW5jeSAoVUFGLCBkb3VibGUtZnJlZSwgZXRjLikgKmhlcmUqIGFyZSBhbGwgdGhpbmdzIEtBU0FOIGFuZCBMT0NLREVQIHdvdWxkIGNhdGNoLiBUaGF0IGNvdmVycyBsaWZlY3ljbGUgbWFuYWdlbWVudCwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgbG9ja2luZyByZWxhdGVkIHRvIGB2eGxhbi0mZ3Q7aGFzaF9sb2NrYC4KCktNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgZGVhbHMgd2l0aCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAoc3RhY2ssIGhlYXAsIHBhZ2VzKSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBXZSAqZG8qIGhhdmUgdGhhdCBgYm9vbCAqY3JlYXRlZGAgcGFyYW1ldGVyIGFuZCB0aGUgYGZkYl9jcmVhdGVkYCBsb2NhbCB2YXJpYWJsZSBpbiBgdnhsYW5fdm5pX2FkZGAsIGJ1dCBpdCYjMzk7cyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGFuZCBvbmx5IGV2ZXIgd3JpdHRlbiB0byB0aHJvdWdoIHRoZSBwb2ludGVyLCBub3QgcmVhZCBvciBsZWFrZWQuIFNvLCBubyBLTVNBTi1zcGVjaWZpYyByaXNrcyBhcmUgcHJlc2VudC4gVGhlIHZhcmlhYmxlIGlzIHdyaXR0ZW4gdG8sIGFuZCBuZXZlciByZWFkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uCgpBbGwgY2xlYXIuIEkmIzM5O20gc2F0aXNmaWVkLiBUaW1lIGZvciBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yLXVud2luZCBsb2dpYyB0byB2eGxhbl92bmlfYWRkKCkgaWYgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpIGZhaWxzLCBpbnRyb2R1Y2luZyBhIGJvb2xlYW4gb3V0LXBhcmFtZXRlciAoJiMzOTtjcmVhdGVkJiMzOTsgLyAmIzM5O2ZkYl9jcmVhdGVkJiMzOTspIGFjcm9zcyB2eGxhbl9mZGJfdXBkYXRlKCkgYW5kIGhlbHBlcnMgdG8gdHJhY2sgd2hldGhlciBhbiBGREIgZW50cnkgd2FzIGNyZWF0ZWQgc28gaXQgY2FuIGJlIHJvbGxlZCBiYWNrLlxuXG4xLiBLQVNBTiAvIExPQ0tERVAgQXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIG1vZGlmaWVzIGNsZWFudXAgcGF0aHMgYW5kIG9iamVjdCBsaWZlY3ljbGUgKHVud2luZGluZyBoYXNodGFibGUgaW5zZXJ0aW9uLCBsaXN0IGFkZGl0aW9uLCBzb2NrZXQgc3RhdGUsIGFuZCBzY2hlZHVsaW5nIFJDVSBkZXN0cnVjdGlvbiBvZiB2bmlub2RlLCBwbHVzIGRlbGV0aW5nIEZEQiBlbnRyaWVzIHVuZGVyIGhhc2hfbG9jaykuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGhlcmUgKGUuZy4gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBsaXN0IGNvcnJ1cHRpb24sIG9yIGxvY2tpbmcgZGlzY3JlcGFuY2llcykgYXJlIGFkZHJlc3NlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC5cbjIuIEtNU0FOIEFwcGxpY2FiaWxpdHk6IEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGFuZCBpbmZvLWxlYWtzLiBUaGUgbmV3bHkgaW50cm9kdWNlZCB2YXJpYWJsZSAmIzM5O2Jvb2wgZmRiX2NyZWF0ZWQgPSBmYWxzZTsmIzM5OyBpbiB2eGxhbl92bmlfYWRkKCkgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIG9uIHRoZSBzdGFjaywgYW5kIHRoZSBjYWxsZWUgZnVuY3Rpb25zIG9ubHkgY29uZGl0aW9uYWxseSB3cml0ZSAmIzM5OypjcmVhdGVkID0gdHJ1ZSYjMzk7IHdpdGhvdXQgcmVhZGluZyBmcm9tIGl0IHVuaW5pdGlhbGl6ZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBoZWFwIGFsbG9jYXRpb25zIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGNyZWF0ZWQsIGFuZCBubyBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgYW5kIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvci11bndpbmQgbG9naWMgdG8gdnhsYW5fdm5pX2FkZCgpIGlmIHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKSBmYWlscywgaW50cm9kdWNpbmcgYSBib29sZWFuIG91dC1wYXJhbWV0ZXIgKCYjMzk7Y3JlYXRlZCYjMzk7IC8gJiMzOTtmZGJfY3JlYXRlZCYjMzk7KSBhY3Jvc3MgdnhsYW5fZmRiX3VwZGF0ZSgpIGFuZCBoZWxwZXJzIHRvIHRyYWNrIHdoZXRoZXIgYW4gRkRCIGVudHJ5IHdhcyBjcmVhdGVkIHNvIGl0IGNhbiBiZSByb2xsZWQgYmFjay5cblxuMS4gS0FTQU4gLyBMT0NLREVQIEFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBtb2RpZmllcyBjbGVhbnVwIHBhdGhzIGFuZCBvYmplY3QgbGlmZWN5Y2xlICh1bndpbmRpbmcgaGFzaHRhYmxlIGluc2VydGlvbiwgbGlzdCBhZGRpdGlvbiwgc29ja2V0IHN0YXRlLCBhbmQgc2NoZWR1bGluZyBSQ1UgZGVzdHJ1Y3Rpb24gb2Ygdm5pbm9kZSwgcGx1cyBkZWxldGluZyBGREIgZW50cmllcyB1bmRlciBoYXNoX2xvY2spLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBoZXJlIChlLmcuIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgbGlzdCBjb3JydXB0aW9uLCBvciBsb2NraW5nIGRpc2NyZXBhbmNpZXMpIGFyZSBhZGRyZXNzZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuXG4yLiBLTVNBTiBBcHBsaWNhYmlsaXR5OiBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBhbmQgaW5mby1sZWFrcy4gVGhlIG5ld2x5IGludHJvZHVjZWQgdmFyaWFibGUgJiMzOTtib29sIGZkYl9jcmVhdGVkID0gZmFsc2U7JiMzOTsgaW4gdnhsYW5fdm5pX2FkZCgpIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2ssIGFuZCB0aGUgY2FsbGVlIGZ1bmN0aW9ucyBvbmx5IGNvbmRpdGlvbmFsbHkgd3JpdGUgJiMzOTsqY3JlYXRlZCA9IHRydWUmIzM5OyB3aXRob3V0IHJlYWRpbmcgZnJvbSBpdCB1bmluaXRpYWxpemVkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgaGVhcCBhbGxvY2F0aW9ucyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBjcmVhdGVkLCBhbmQgbm8gYnJhbmNoaW5nIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIGFuZCBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NDk6NTQuMTI1NjMzMDk5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc5ODAwNjAzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlhMQU5cIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2eGxhbl92bmlfYWRkXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZVwiLFxuICAgIFwidnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZXJyb3ItdW53aW5kIGxvZ2ljIHRvIHZ4bGFuX3ZuaV9hZGQoKSBpZiB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKCkgZmFpbHMsIGludHJvZHVjaW5nIGEgYm9vbGVhbiBvdXQtcGFyYW1ldGVyICgnY3JlYXRlZCcgLyAnZmRiX2NyZWF0ZWQnKSBhY3Jvc3MgdnhsYW5fZmRiX3VwZGF0ZSgpIGFuZCBoZWxwZXJzIHRvIHRyYWNrIHdoZXRoZXIgYW4gRkRCIGVudHJ5IHdhcyBjcmVhdGVkIHNvIGl0IGNhbiBiZSByb2xsZWQgYmFjay5cXG5cXG4xLiBLQVNBTiAvIExPQ0tERVAgQXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIG1vZGlmaWVzIGNsZWFudXAgcGF0aHMgYW5kIG9iamVjdCBsaWZlY3ljbGUgKHVud2luZGluZyBoYXNodGFibGUgaW5zZXJ0aW9uLCBsaXN0IGFkZGl0aW9uLCBzb2NrZXQgc3RhdGUsIGFuZCBzY2hlZHVsaW5nIFJDVSBkZXN0cnVjdGlvbiBvZiB2bmlub2RlLCBwbHVzIGRlbGV0aW5nIEZEQiBlbnRyaWVzIHVuZGVyIGhhc2hfbG9jaykuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGhlcmUgKGUuZy4gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBsaXN0IGNvcnJ1cHRpb24sIG9yIGxvY2tpbmcgZGlzY3JlcGFuY2llcykgYXJlIGFkZHJlc3NlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC5cXG4yLiBLTVNBTiBBcHBsaWNhYmlsaXR5OiBLTVNBTiBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBhbmQgaW5mby1sZWFrcy4gVGhlIG5ld2x5IGludHJvZHVjZWQgdmFyaWFibGUgJ2Jvb2wgZmRiX2NyZWF0ZWQgPSBmYWxzZTsnIGluIHZ4bGFuX3ZuaV9hZGQoKSBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrLCBhbmQgdGhlIGNhbGxlZSBmdW5jdGlvbnMgb25seSBjb25kaXRpb25hbGx5IHdyaXRlICcqY3JlYXRlZCA9IHRydWUnIHdpdGhvdXQgcmVhZGluZyBmcm9tIGl0IHVuaW5pdGlhbGl6ZWQuIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBoZWFwIGFsbG9jYXRpb25zIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGNyZWF0ZWQsIGFuZCBubyBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBhbmQgZG9lcyBub3QganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZYTEFOIGRyaXZlciAocmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIGNvbW1hbmRzIHN1Y2ggYXMgUlRNX05FV1RVTk5FTCBhbmQgUlRNX05FV05FSUdIKS4gSXQgdXBkYXRlcyB0aGUgRkRCIHVwZGF0ZSBsb2dpYyBhY3Jvc3MgdnhsYW5fZmRiX3VwZGF0ZSgpLCB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSgpLCBhbmQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZygpIHRvIHRyYWNrIHdoZW4gYW4gZW50cnkgaXMgbmV3bHkgY3JlYXRlZCwgYW5kIGltcGxlbWVudHMgYW4gZXJyb3Igcm9sbGJhY2sgcGF0aCBpbiB2eGxhbl92bmlfYWRkKCkgdGhhdCB0ZWFycyBkb3duIEZEQiBlbnRyaWVzLCB1bmxpbmtzIFZOSSBub2RlcywgYW5kIGZyZWVzIG1lbW9yeSB2aWEgUkNVIGlmIHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKSBmYWlscy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBsb2dpYyBhbHRlcmluZyBzdGF0ZSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBlcnJvci1oYW5kbGluZyBpbiB0aGUgdmlydHVhbCBuZXR3b3JraW5nIHN1YnN5c3RlbSwgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjQ5OjU0LjEyNTYzNzc4OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMDQ0NTE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdjYjk3MWZlNTVhZDVjOTE4Y2NjOTlhYjUyODQ0OTU4ODVlYzk1YmZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMjI6NDk6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jIGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jXFxuaW5kZXggYmU5NWFmNjRhMWY1MS4uMDY1MmRjNDcxZGNhNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcXG5AQCAtOTc0LDcgKzk3NCw3IEBAIHN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4gXFx0XFx0XFx0XFx0ICAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHZuaSxcXG4gXFx0XFx0XFx0XFx0ICAgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHZ4bGFuX2ZkYiAqZiwgdTMyIG5oaWQsXFxuLVxcdFxcdFxcdFxcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksXFxuK1xcdFxcdFxcdFxcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdF9fdTE2IGZkYl9mbGFncyA9IChuZG1fZmxhZ3MgXFx1MDAyNiB+TlRGX1VTRSk7XFxuQEAgLTEwNDIsNiArMTA0Miw4IEBAIHN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4gXFxuIFxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiByYztcXG4rXFx0XFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IGNyZWF0ZWQpXFxuK1xcdFxcdFxcdCpjcmVhdGVkID0gdHJ1ZTtcXG4gXFx0XFx0bm90aWZ5IHw9IHJjO1xcbiBcXHR9XFxuIFxcbkBAIC0xMDc4LDcgKzEwODAsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbiBcXHRcXHRcXHRcXHQgICBfX3UxNiBzdGF0ZSwgX191MTYgZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdCAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSxcXG4gXFx0XFx0XFx0XFx0ICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLCB1MzIgbmhpZCxcXG4tXFx0XFx0XFx0XFx0ICAgYm9vbCBzd2Rldl9ub3RpZnksXFxuK1xcdFxcdFxcdFxcdCAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0X191MTYgZmRiX2ZsYWdzID0gKG5kbV9mbGFncyBcXHUwMDI2IH5OVEZfVVNFKTtcXG5AQCAtMTEwMSw2ICsxMTAzLDkgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4gXFx0aWYgKHJjKVxcbiBcXHRcXHRnb3RvIGVycl9ub3RpZnk7XFxuIFxcbitcXHRpZiAoY3JlYXRlZClcXG4rXFx0XFx0KmNyZWF0ZWQgPSB0cnVlO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBlcnJfbm90aWZ5OlxcbkBAIC0xMTE0LDcgKzExMTksNyBAQCBpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4gXFx0XFx0ICAgICBfX3UxNiBzdGF0ZSwgX191MTYgZmxhZ3MsXFxuIFxcdFxcdCAgICAgX19iZTE2IHBvcnQsIF9fYmUzMiBzcmNfdm5pLCBfX2JlMzIgdm5pLFxcbiBcXHRcXHQgICAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsXFxuLVxcdFxcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksXFxuK1xcdFxcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXFxuIFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCB2eGxhbl9mZGIgKmY7XFxuQEAgLTExMjksNyArMTEzNCw4IEBAIGludCB2eGxhbl9mZGJfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbiBcXG4gXFx0XFx0cmV0dXJuIHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcodnhsYW4sIGlwLCBzdGF0ZSwgZmxhZ3MsIHBvcnQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCB2bmksIGlmaW5kZXgsIG5kbV9mbGFncywgZixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IG5oaWQsIHN3ZGV2X25vdGlmeSwgZXh0YWNrKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IG5oaWQsIHN3ZGV2X25vdGlmeSwgY3JlYXRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGV4dGFjayk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgTkxNX0ZfQ1JFQVRFKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuQEAgLTExMzcsNyArMTE0Myw3IEBAIGludCB2eGxhbl9mZGJfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbiBcXHRcXHRyZXR1cm4gdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUodnhsYW4sIG1hYywgaXAsIHN0YXRlLCBmbGFncyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIHBvcnQsIHNyY192bmksIHZuaSwgaWZpbmRleCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIG5kbV9mbGFncywgbmhpZCwgc3dkZXZfbm90aWZ5LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgZXh0YWNrKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNyZWF0ZWQsIGV4dGFjayk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMTI3NSw3ICsxMjgxLDcgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfYWRkKHN0cnVjdCBuZG1zZyAqbmRtLCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbiBcXHRlcnIgPSB2eGxhbl9mZGJfdXBkYXRlKHZ4bGFuLCBhZGRyLCBcXHUwMDI2aXAsIG5kbS1cXHUwMDNlbmRtX3N0YXRlLCBmbGFncyxcXG4gXFx0XFx0XFx0ICAgICAgIHBvcnQsIHNyY192bmksIHZuaSwgaWZpbmRleCxcXG4gXFx0XFx0XFx0ICAgICAgIG5kbS1cXHUwMDNlbmRtX2ZsYWdzIHwgTlRGX1ZYTEFOX0FEREVEX0JZX1VTRVIsXFxuLVxcdFxcdFxcdCAgICAgICBuaGlkLCB0cnVlLCBleHRhY2spO1xcbitcXHRcXHRcXHQgICAgICAgbmhpZCwgdHJ1ZSwgTlVMTCwgZXh0YWNrKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnZ4bGFuLVxcdTAwM2VoYXNoX2xvY2spO1xcbiBcXG4gXFx0aWYgKCFlcnIpXFxuQEAgLTE0OTEsNyArMTQ5Nyw4IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB2eGxhbl9zbm9vcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgdnhsYW4tXFx1MDAzZWNmZy5kc3RfcG9ydCxcXG4gXFx0XFx0XFx0XFx0XFx0IHZuaSxcXG4gXFx0XFx0XFx0XFx0XFx0IHZ4bGFuLVxcdTAwM2VkZWZhdWx0X2RzdC5yZW1vdGVfdm5pLFxcbi1cXHRcXHRcXHRcXHRcXHQgaWZpbmRleCwgTlRGX1NFTEYsIDAsIHRydWUsIE5VTEwpO1xcbitcXHRcXHRcXHRcXHRcXHQgaWZpbmRleCwgTlRGX1NFTEYsIDAsIHRydWUsIE5VTEwsXFxuK1xcdFxcdFxcdFxcdFxcdCBOVUxMKTtcXG4gXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnZ4bGFuLVxcdTAwM2VoYXNoX2xvY2spO1xcbiBcXHR9XFxuIFxcbkBAIC00MDM0LDcgKzQwNDEsOCBAQCBzdGF0aWMgaW50IHZ4bGFuX2Rldl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICAgZHN0LVxcdTAwM2VyZW1vdGVfdm5pLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgZHN0LVxcdTAwM2VyZW1vdGVfdm5pLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgZHN0LVxcdTAwM2VyZW1vdGVfaWZpbmRleCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBleHRhY2spO1xcbitcXHRcXHRcXHRcXHQgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIE5VTEwsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBleHRhY2spO1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dnhsYW4tXFx1MDAzZWhhc2hfbG9jayk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGdvdG8gdW5saW5rO1xcbkBAIC00NDg1LDcgKzQ0OTMsOCBAQCBzdGF0aWMgaW50IHZ4bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgIHZ4bGFuLVxcdTAwM2VjZmcuZHN0X3BvcnQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25mLnZuaSwgY29uZi52bmksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBjb25mLnJlbW90ZV9pZmluZGV4LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIGV4dGFjayk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGV4dGFjayk7XFxuIFxcdFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnZ4bGFuLVxcdTAwM2VoYXNoX2xvY2spO1xcbiBcXHRcXHRcXHRcXHRuZXRkZXZfYWRqYWNlbnRfY2hhbmdlX2Fib3J0KGRzdC1cXHUwMDNlcmVtb3RlX2RldixcXG5AQCAtNDgwNiw3ICs0ODE1LDcgQEAgdnhsYW5fZmRiX2V4dGVybmFsX2xlYXJuX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHQgICAgICAgZmRiX2luZm8tXFx1MDAzZXJlbW90ZV92bmksXFxuIFxcdFxcdFxcdCAgICAgICBmZGJfaW5mby1cXHUwMDNlcmVtb3RlX2lmaW5kZXgsXFxuIFxcdFxcdFxcdCAgICAgICBOVEZfVVNFIHwgTlRGX1NFTEYgfCBOVEZfRVhUX0xFQVJORUQsXFxuLVxcdFxcdFxcdCAgICAgICAwLCBmYWxzZSwgZXh0YWNrKTtcXG4rXFx0XFx0XFx0ICAgICAgIDAsIGZhbHNlLCBOVUxMLCBleHRhY2spO1xcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dnhsYW4tXFx1MDAzZWhhc2hfbG9jayk7XFxuIFxcbiBcXHRyZXR1cm4gZXJyO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmggYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmhcXG5pbmRleCBiMWVlYzIyMTYzNjA4Li5lNTI3NTU5MjNjMzExIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaFxcbkBAIC0xOTMsNyArMTkzLDggQEAgaW50IHZ4bGFuX2ZkYl91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuIFxcdFxcdCAgICAgX191MTYgc3RhdGUsIF9fdTE2IGZsYWdzLFxcbiBcXHRcXHQgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSxcXG4gXFx0XFx0ICAgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsIHUzMiBuaGlkLFxcbi1cXHRcXHQgICAgIGJvb2wgc3dkZXZfbm90aWZ5LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbitcXHRcXHQgICAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLFxcbitcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuIHZvaWQgdnhsYW5feG1pdF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0ICAgIF9fYmUzMiBkZWZhdWx0X3ZuaSwgc3RydWN0IHZ4bGFuX3Jkc3QgKnJkc3QsIGJvb2wgZGlkX3JzYyk7XFxuIGludCB2eGxhbl92bmlfaW5fdXNlKHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jXFxuaW5kZXggZGQ5NDA4NWUwODg2NS4uOWNjOTMyYzYxNzdkMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jXFxuQEAgLTQ3Myw2ICs0NzMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdm5pX2ZpbHRlcl9wb2xpY3lbVlhMQU5fVk5JRklMVEVSX01BWCArIDFdID0ge1xcbiBzdGF0aWMgaW50IHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgX19iZTMyIHZuaSxcXG4gXFx0XFx0XFx0XFx0XFx0ICB1bmlvbiB2eGxhbl9hZGRyICpvbGRfcmVtb3RlX2lwLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHVuaW9uIHZ4bGFuX2FkZHIgKnJlbW90ZV9pcCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBib29sICpmZGJfY3JlYXRlZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IHZ4bGFuX3Jkc3QgKmRzdCA9IFxcdTAwMjZ2eGxhbi1cXHUwMDNlZGVmYXVsdF9kc3Q7XFxuQEAgLTQ4OCw3ICs0ODksOCBAQCBzdGF0aWMgaW50IHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgX19iZTMyIHZuaSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHZuaSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHZuaSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGRzdC1cXHUwMDNlcmVtb3RlX2lmaW5kZXgsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgZXh0YWNrKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBmZGJfY3JlYXRlZCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGV4dGFjayk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnZ4bGFuLVxcdTAwM2VoYXNoX2xvY2spO1xcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbkBAIC01MTIsNiArNTE0LDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSxcXG4gXFx0XFx0XFx0XFx0ICB1bmlvbiB2eGxhbl9hZGRyICpncm91cCxcXG4gXFx0XFx0XFx0XFx0ICBib29sIGNyZWF0ZSwgYm9vbCAqY2hhbmdlZCxcXG4rXFx0XFx0XFx0XFx0ICBib29sICpmZGJfY3JlYXRlZCxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4gXFx0c3RydWN0IHZ4bGFuX25ldCAqdm4gPSBuZXRfZ2VuZXJpYyh2eGxhbi1cXHUwMDNlbmV0LCB2eGxhbl9uZXRfaWQpO1xcbkBAIC01NDUsNyArNTQ4LDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdHJldCA9IHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeSh2eGxhbiwgdm5pbm9kZS1cXHUwMDNldm5pLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIG9sZHJpcCwgbmV3cmlwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIG9sZHJpcCwgbmV3cmlwLCBmZGJfY3JlYXRlZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBleHRhY2spO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIG91dDtcXG5AQCAtNTk5LDcgKzYwMiw3IEBAIGludCB2eGxhbl92bmlsaXN0X3VwZGF0ZV9ncm91cChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4gXFx0XFx0XFx0cmV0ID0gdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHZ4bGFuLCB2ZW50LVxcdTAwM2V2bmksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgb2xkX3JlbW90ZV9pcCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBuZXdfcmVtb3RlX2lwLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGV4dGFjayk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgTlVMTCwgZXh0YWNrKTtcXG4gXFx0XFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0XFx0fVxcbkBAIC02NTUsNyArNjU4LDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdHJldCA9IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAodnhsYW4sIHZuaW5vZGUsIGdyb3VwLCBmYWxzZSwgY2hhbmdlZCxcXG4tXFx0XFx0XFx0XFx0ICAgICBleHRhY2spO1xcbitcXHRcXHRcXHRcXHQgICAgIE5VTEwsIGV4dGFjayk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbkBAIC03MTgsNiArNzIxLDggQEAgc3RhdGljIHZvaWQgdnhsYW5fdm5pX2ZyZWUoc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlKVxcbiBcXHRrZnJlZSh2bmlub2RlKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpO1xcbitcXG4gc3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbiBcXHRcXHRcXHQgc3RydWN0IHZ4bGFuX3ZuaV9ncm91cCAqdmcsXFxuIFxcdFxcdFxcdCB1MzIgdm5pLCB1bmlvbiB2eGxhbl9hZGRyICpncm91cCxcXG5AQCAtNzI1LDYgKzczMCw3IEBAIHN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4ge1xcbiBcXHRzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnZuaW5vZGU7XFxuIFxcdF9fYmUzMiB2ID0gY3B1X3RvX2JlMzIodm5pKTtcXG4rXFx0Ym9vbCBmZGJfY3JlYXRlZCA9IGZhbHNlO1xcbiBcXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcXG4gXFx0aW50IGVyciA9IDA7XFxuIFxcbkBAIC03NTUsMTAgKzc2MSw0NyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuIFxcdFxcdHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZSh2eGxhbiwgdm5pbm9kZSwgZmFsc2UpO1xcbiBcXG4gXFx0ZXJyID0gdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCh2eGxhbiwgdm5pbm9kZSwgZ3JvdXAsIHRydWUsIFxcdTAwMjZjaGFuZ2VkLFxcbi1cXHRcXHRcXHRcXHQgICAgIGV4dGFjayk7XFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmZkYl9jcmVhdGVkLCBleHRhY2spO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl92bmlfZGVsO1xcbiBcXG4gXFx0dnhsYW5fdm5pZmlsdGVyX25vdGlmeSh2eGxhbiwgdm5pbm9kZSwgUlRNX05FV1RVTk5FTCk7XFxuIFxcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl92bmlfZGVsOlxcbitcXHQvKiBVbmRvIG9ubHkgdGhlIGRlZmF1bHQgRkRCIGVudHJ5IHRoaXMgYWRkIGluc3RhbGxlZC4gIEFuIGVudHJ5IHRoYXRcXG4rXFx0ICogd2FzIGFscmVhZHkgdGhlcmUsIHdoZXRoZXIgYWRkZWQgb3V0IG9mIGJhbmQgb3IgYnkgYW5vdGhlciBWTkksIGlzXFxuK1xcdCAqIGxlZnQgYWxvbmUuXFxuK1xcdCAqXFxuK1xcdCAqIE5vIG1lbWJlcnNoaXAgaGFzIHRvIGJlIGdpdmVuIGJhY2s6IHZ4bGFuX2lnbXBfbGVhdmUoKSBpcyBnYXRlZCBvblxcbitcXHQgKiB2eGxhbl9hZGRyX211bHRpY2FzdChcXHUwMDI2b2xkX3JlbW90ZV9pcCksIGFuZCBvbGRfcmVtb3RlX2lwIGlzIGEgY29weVxcbitcXHQgKiBvZiB0aGUgcmVtb3RlIElQIG9mIGEgbm9kZSB0aGlzIGFkZCBqdXN0IGFsbG9jYXRlZCwgc28gaXQgaXMgemVyby5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGFkZHJlc3MgcGlja2VkIGJlbG93IGlzIHRoZSBvbmUgdGhlIGVudHJ5IHdhcyBpbnN0YWxsZWRcXG4rXFx0ICogYWdhaW5zdC4gIElmIHRoZSByZXF1ZXN0IGNhcnJpZWQgYSBncm91cCwgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpXFxuK1xcdCAqIGNvcGllZCBpdCBpbnRvIHZuaW5vZGUtXFx1MDAzZXJlbW90ZV9pcCBiZWZvcmUgdGhlIGpvaW4gY291bGQgZmFpbDsgaWZcXG4rXFx0ICogaXQgZGlkIG5vdCwgdGhhdCBjb3B5IHdhcyBza2lwcGVkIGFuZCB0aGUgZW50cnkgd2VudCB0byB0aGUgZGV2aWNlXFxuK1xcdCAqIGRlZmF1bHQuXFxuK1xcdCAqL1xcbitcXHRpZiAoZmRiX2NyZWF0ZWQpIHtcXG4rXFx0XFx0dW5pb24gdnhsYW5fYWRkciAqcmlwID0gdnhsYW5fYWRkcl9hbnkoXFx1MDAyNnZuaW5vZGUtXFx1MDAzZXJlbW90ZV9pcCkgP1xcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dnhsYW4tXFx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pcCA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdTAwMjZ2bmlub2RlLVxcdTAwM2VyZW1vdGVfaXA7XFxuK1xcbitcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZ4bGFuLVxcdTAwM2VoYXNoX2xvY2spO1xcbitcXHRcXHRfX3Z4bGFuX2ZkYl9kZWxldGUodnhsYW4sIGFsbF96ZXJvc19tYWMsICpyaXAsXFxuK1xcdFxcdFxcdFxcdCAgIHZ4bGFuLVxcdTAwM2VjZmcuZHN0X3BvcnQsIHZuaW5vZGUtXFx1MDAzZXZuaSxcXG4rXFx0XFx0XFx0XFx0ICAgdm5pbm9kZS1cXHUwMDNldm5pLFxcbitcXHRcXHRcXHRcXHQgICB2eGxhbi1cXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX2lmaW5kZXgsIHRydWUpO1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dnhsYW4tXFx1MDAzZWhhc2hfbG9jayk7XFxuK1xcdH1cXG4rXFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2dmctXFx1MDAzZXZuaV9oYXNoLCBcXHUwMDI2dm5pbm9kZS1cXHUwMDNldm5vZGUsXFxuK1xcdFxcdFxcdCAgICAgICB2eGxhbl92bmlfcmh0X3BhcmFtcyk7XFxuK1xcdF9fdnhsYW5fdm5pX2RlbF9saXN0KHZnLCB2bmlub2RlKTtcXG4rXFx0aWYgKHZ4bGFuLVxcdTAwM2VkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKVxcbitcXHRcXHR2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGUodnhsYW4sIHZuaW5vZGUsIHRydWUpO1xcbitcXHRjYWxsX3JjdShcXHUwMDI2dm5pbm9kZS1cXHUwMDNlcmN1LCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjQ5OjU1Ljc1NjczNTU4NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTI1OTYzODcwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlhMQU5cIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2eGxhbl92bmlfYWRkXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZVwiLFxuICAgIFwidnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVlhMQU4gZHJpdmVyIChyZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBydG5ldGxpbmsgY29tbWFuZHMgc3VjaCBhcyBSVE1fTkVXVFVOTkVMIGFuZCBSVE1fTkVXTkVJR0gpLiBJdCB1cGRhdGVzIHRoZSBGREIgdXBkYXRlIGxvZ2ljIGFjcm9zcyB2eGxhbl9mZGJfdXBkYXRlKCksIHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKCksIGFuZCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKCkgdG8gdHJhY2sgd2hlbiBhbiBlbnRyeSBpcyBuZXdseSBjcmVhdGVkLCBhbmQgaW1wbGVtZW50cyBhbiBlcnJvciByb2xsYmFjayBwYXRoIGluIHZ4bGFuX3ZuaV9hZGQoKSB0aGF0IHRlYXJzIGRvd24gRkRCIGVudHJpZXMsIHVubGlua3MgVk5JIG5vZGVzLCBhbmQgZnJlZXMgbWVtb3J5IHZpYSBSQ1UgaWYgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpIGZhaWxzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIGFsdGVyaW5nIHN0YXRlIG1hbmFnZW1lbnQsIHN5bmNocm9uaXphdGlvbiwgYW5kIGVycm9yLWhhbmRsaW5nIGluIHRoZSB2aXJ0dWFsIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBtYWtpbmcgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3Y2I5NzFmZTU1YWQ1YzkxOGNjYzk5YWI1Mjg0NDk1ODg1ZWM5NWJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMjI6NDk6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcbmluZGV4IGJlOTVhZjY0YTFmNTEuLjA2NTJkYzQ3MWRjYTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1xuQEAgLTk3NCw3ICs5NzQsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdFx0XHQgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgdm5pLFxuIFx0XHRcdFx0ICAgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB2eGxhbl9mZGIgKmYsIHUzMiBuaGlkLFxuLVx0XHRcdFx0ICAgICBib29sIHN3ZGV2X25vdGlmeSxcbitcdFx0XHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRfX3UxNiBmZGJfZmxhZ3MgPSAobmRtX2ZsYWdzIFx1MDAyNiB+TlRGX1VTRSk7XG5AQCAtMTA0Miw2ICsxMDQyLDggQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFxuIFx0XHRpZiAocmMgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHRpZiAocmMgXHUwMDI2XHUwMDI2IGNyZWF0ZWQpXG4rXHRcdFx0KmNyZWF0ZWQgPSB0cnVlO1xuIFx0XHRub3RpZnkgfD0gcmM7XG4gXHR9XG4gXG5AQCAtMTA3OCw3ICsxMDgwLDcgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0XHRcdCAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncyxcbiBcdFx0XHRcdCAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSxcbiBcdFx0XHRcdCAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsXG4tXHRcdFx0XHQgICBib29sIHN3ZGV2X25vdGlmeSxcbitcdFx0XHRcdCAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdF9fdTE2IGZkYl9mbGFncyA9IChuZG1fZmxhZ3MgXHUwMDI2IH5OVEZfVVNFKTtcbkBAIC0xMTAxLDYgKzExMDMsOSBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0aWYgKHJjKVxuIFx0XHRnb3RvIGVycl9ub3RpZnk7XG4gXG4rXHRpZiAoY3JlYXRlZClcbitcdFx0KmNyZWF0ZWQgPSB0cnVlO1xuK1xuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX25vdGlmeTpcbkBAIC0xMTE0LDcgKzExMTksNyBAQCBpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0ICAgICBfX3UxNiBzdGF0ZSwgX191MTYgZmxhZ3MsXG4gXHRcdCAgICAgX19iZTE2IHBvcnQsIF9fYmUzMiBzcmNfdm5pLCBfX2JlMzIgdm5pLFxuIFx0XHQgICAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsXG4tXHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksXG4rXHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXG4gXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCB2eGxhbl9mZGIgKmY7XG5AQCAtMTEyOSw3ICsxMTM0LDggQEAgaW50IHZ4bGFuX2ZkYl91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXG4gXHRcdHJldHVybiB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHZ4bGFuLCBpcCwgc3RhdGUsIGZsYWdzLCBwb3J0LFxuIFx0XHRcdFx0XHRcdCB2bmksIGlmaW5kZXgsIG5kbV9mbGFncywgZixcbi1cdFx0XHRcdFx0XHQgbmhpZCwgc3dkZXZfbm90aWZ5LCBleHRhY2spO1xuK1x0XHRcdFx0XHRcdCBuaGlkLCBzd2Rldl9ub3RpZnksIGNyZWF0ZWQsXG4rXHRcdFx0XHRcdFx0IGV4dGFjayk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAoIShmbGFncyBcdTAwMjYgTkxNX0ZfQ1JFQVRFKSlcbiBcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbkBAIC0xMTM3LDcgKzExNDMsNyBAQCBpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0cmV0dXJuIHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHZ4bGFuLCBtYWMsIGlwLCBzdGF0ZSwgZmxhZ3MsXG4gXHRcdFx0XHRcdCAgICAgICBwb3J0LCBzcmNfdm5pLCB2bmksIGlmaW5kZXgsXG4gXHRcdFx0XHRcdCAgICAgICBuZG1fZmxhZ3MsIG5oaWQsIHN3ZGV2X25vdGlmeSxcbi1cdFx0XHRcdFx0ICAgICAgIGV4dGFjayk7XG4rXHRcdFx0XHRcdCAgICAgICBjcmVhdGVkLCBleHRhY2spO1xuIFx0fVxuIH1cbiBcbkBAIC0xMjc1LDcgKzEyODEsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRlcnIgPSB2eGxhbl9mZGJfdXBkYXRlKHZ4bGFuLCBhZGRyLCBcdTAwMjZpcCwgbmRtLVx1MDAzZW5kbV9zdGF0ZSwgZmxhZ3MsXG4gXHRcdFx0ICAgICAgIHBvcnQsIHNyY192bmksIHZuaSwgaWZpbmRleCxcbiBcdFx0XHQgICAgICAgbmRtLVx1MDAzZW5kbV9mbGFncyB8IE5URl9WWExBTl9BRERFRF9CWV9VU0VSLFxuLVx0XHRcdCAgICAgICBuaGlkLCB0cnVlLCBleHRhY2spO1xuK1x0XHRcdCAgICAgICBuaGlkLCB0cnVlLCBOVUxMLCBleHRhY2spO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbiBcbiBcdGlmICghZXJyKVxuQEAgLTE0OTEsNyArMTQ5Nyw4IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB2eGxhbl9zbm9vcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0XHQgdnhsYW4tXHUwMDNlY2ZnLmRzdF9wb3J0LFxuIFx0XHRcdFx0XHQgdm5pLFxuIFx0XHRcdFx0XHQgdnhsYW4tXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX3ZuaSxcbi1cdFx0XHRcdFx0IGlmaW5kZXgsIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMKTtcbitcdFx0XHRcdFx0IGlmaW5kZXgsIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMLFxuK1x0XHRcdFx0XHQgTlVMTCk7XG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4gXHR9XG4gXG5AQCAtNDAzNCw3ICs0MDQxLDggQEAgc3RhdGljIGludCB2eGxhbl9kZXZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgICAgICBkc3QtXHUwMDNlcmVtb3RlX3ZuaSxcbiBcdFx0XHRcdCAgICAgICBkc3QtXHUwMDNlcmVtb3RlX3ZuaSxcbiBcdFx0XHRcdCAgICAgICBkc3QtXHUwMDNlcmVtb3RlX2lmaW5kZXgsXG4tXHRcdFx0XHQgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIGV4dGFjayk7XG4rXHRcdFx0XHQgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIE5VTEwsXG4rXHRcdFx0XHQgICAgICAgZXh0YWNrKTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIHVubGluaztcbkBAIC00NDg1LDcgKzQ0OTMsOCBAQCBzdGF0aWMgaW50IHZ4bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdFx0XHRcdFx0ICAgICAgIHZ4bGFuLVx1MDAzZWNmZy5kc3RfcG9ydCxcbiBcdFx0XHRcdFx0ICAgICAgIGNvbmYudm5pLCBjb25mLnZuaSxcbiBcdFx0XHRcdFx0ICAgICAgIGNvbmYucmVtb3RlX2lmaW5kZXgsXG4tXHRcdFx0XHRcdCAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgZXh0YWNrKTtcbitcdFx0XHRcdFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMLFxuK1x0XHRcdFx0XHQgICAgICAgZXh0YWNrKTtcbiBcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ2eGxhbi1cdTAwM2VoYXNoX2xvY2spO1xuIFx0XHRcdFx0bmV0ZGV2X2FkamFjZW50X2NoYW5nZV9hYm9ydChkc3QtXHUwMDNlcmVtb3RlX2RldixcbkBAIC00ODA2LDcgKzQ4MTUsNyBAQCB2eGxhbl9mZGJfZXh0ZXJuYWxfbGVhcm5fYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0ICAgICAgIGZkYl9pbmZvLVx1MDAzZXJlbW90ZV92bmksXG4gXHRcdFx0ICAgICAgIGZkYl9pbmZvLVx1MDAzZXJlbW90ZV9pZmluZGV4LFxuIFx0XHRcdCAgICAgICBOVEZfVVNFIHwgTlRGX1NFTEYgfCBOVEZfRVhUX0xFQVJORUQsXG4tXHRcdFx0ICAgICAgIDAsIGZhbHNlLCBleHRhY2spO1xuK1x0XHRcdCAgICAgICAwLCBmYWxzZSwgTlVMTCwgZXh0YWNrKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaCBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaFxuaW5kZXggYjFlZWMyMjE2MzYwOC4uZTUyNzU1OTIzYzMxMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaFxuKysrIGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oXG5AQCAtMTkzLDcgKzE5Myw4IEBAIGludCB2eGxhbl9mZGJfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0XHQgICAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncyxcbiBcdFx0ICAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHNyY192bmksIF9fYmUzMiB2bmksXG4gXHRcdCAgICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLCB1MzIgbmhpZCxcbi1cdFx0ICAgICBib29sIHN3ZGV2X25vdGlmeSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbitcdFx0ICAgICBib29sIHN3ZGV2X25vdGlmeSwgYm9vbCAqY3JlYXRlZCxcbitcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIHZvaWQgdnhsYW5feG1pdF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgIF9fYmUzMiBkZWZhdWx0X3ZuaSwgc3RydWN0IHZ4bGFuX3Jkc3QgKnJkc3QsIGJvb2wgZGlkX3JzYyk7XG4gaW50IHZ4bGFuX3ZuaV9pbl91c2Uoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY1xuaW5kZXggZGQ5NDA4NWUwODg2NS4uOWNjOTMyYzYxNzdkMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jXG4rKysgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY1xuQEAgLTQ3Myw2ICs0NzMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdm5pX2ZpbHRlcl9wb2xpY3lbVlhMQU5fVk5JRklMVEVSX01BWCArIDFdID0ge1xuIHN0YXRpYyBpbnQgdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBfX2JlMzIgdm5pLFxuIFx0XHRcdFx0XHQgIHVuaW9uIHZ4bGFuX2FkZHIgKm9sZF9yZW1vdGVfaXAsXG4gXHRcdFx0XHRcdCAgdW5pb24gdnhsYW5fYWRkciAqcmVtb3RlX2lwLFxuK1x0XHRcdFx0XHQgIGJvb2wgKmZkYl9jcmVhdGVkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgdnhsYW5fcmRzdCAqZHN0ID0gXHUwMDI2dnhsYW4tXHUwMDNlZGVmYXVsdF9kc3Q7XG5AQCAtNDg4LDcgKzQ4OSw4IEBAIHN0YXRpYyBpbnQgdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBfX2JlMzIgdm5pLFxuIFx0XHRcdFx0ICAgICAgIHZuaSxcbiBcdFx0XHRcdCAgICAgICB2bmksXG4gXHRcdFx0XHQgICAgICAgZHN0LVx1MDAzZXJlbW90ZV9pZmluZGV4LFxuLVx0XHRcdFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBleHRhY2spO1xuK1x0XHRcdFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBmZGJfY3JlYXRlZCxcbitcdFx0XHRcdCAgICAgICBleHRhY2spO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbiBcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTUxMiw2ICs1MTQsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdFx0XHQgIHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSxcbiBcdFx0XHRcdCAgdW5pb24gdnhsYW5fYWRkciAqZ3JvdXAsXG4gXHRcdFx0XHQgIGJvb2wgY3JlYXRlLCBib29sICpjaGFuZ2VkLFxuK1x0XHRcdFx0ICBib29sICpmZGJfY3JlYXRlZCxcbiBcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCB2eGxhbl9uZXQgKnZuID0gbmV0X2dlbmVyaWModnhsYW4tXHUwMDNlbmV0LCB2eGxhbl9uZXRfaWQpO1xuQEAgLTU0NSw3ICs1NDgsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0ID0gdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHZ4bGFuLCB2bmlub2RlLVx1MDAzZXZuaSxcbi1cdFx0XHRcdFx0ICAgICBvbGRyaXAsIG5ld3JpcCxcbitcdFx0XHRcdFx0ICAgICBvbGRyaXAsIG5ld3JpcCwgZmRiX2NyZWF0ZWQsXG4gXHRcdFx0XHRcdCAgICAgZXh0YWNrKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTU5OSw3ICs2MDIsNyBAQCBpbnQgdnhsYW5fdm5pbGlzdF91cGRhdGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdFx0cmV0ID0gdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHZ4bGFuLCB2ZW50LVx1MDAzZXZuaSxcbiBcdFx0XHRcdFx0XHRcdCAgICAgb2xkX3JlbW90ZV9pcCxcbiBcdFx0XHRcdFx0XHRcdCAgICAgbmV3X3JlbW90ZV9pcCxcbi1cdFx0XHRcdFx0XHRcdCAgICAgZXh0YWNrKTtcbitcdFx0XHRcdFx0XHRcdCAgICAgTlVMTCwgZXh0YWNrKTtcbiBcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuQEAgLTY1NSw3ICs2NTgsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0ID0gdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCh2eGxhbiwgdm5pbm9kZSwgZ3JvdXAsIGZhbHNlLCBjaGFuZ2VkLFxuLVx0XHRcdFx0ICAgICBleHRhY2spO1xuK1x0XHRcdFx0ICAgICBOVUxMLCBleHRhY2spO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC03MTgsNiArNzIxLDggQEAgc3RhdGljIHZvaWQgdnhsYW5fdm5pX2ZyZWUoc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlKVxuIFx0a2ZyZWUodm5pbm9kZSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KTtcbitcbiBzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdFx0IHN0cnVjdCB2eGxhbl92bmlfZ3JvdXAgKnZnLFxuIFx0XHRcdCB1MzIgdm5pLCB1bmlvbiB2eGxhbl9hZGRyICpncm91cCxcbkBAIC03MjUsNiArNzMwLDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIHtcbiBcdHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZTtcbiBcdF9fYmUzMiB2ID0gY3B1X3RvX2JlMzIodm5pKTtcbitcdGJvb2wgZmRiX2NyZWF0ZWQgPSBmYWxzZTtcbiBcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuIFx0aW50IGVyciA9IDA7XG4gXG5AQCAtNzU1LDEwICs3NjEsNDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0XHR2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGUodnhsYW4sIHZuaW5vZGUsIGZhbHNlKTtcbiBcbiBcdGVyciA9IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAodnhsYW4sIHZuaW5vZGUsIGdyb3VwLCB0cnVlLCBcdTAwMjZjaGFuZ2VkLFxuLVx0XHRcdFx0ICAgICBleHRhY2spO1xuK1x0XHRcdFx0ICAgICBcdTAwMjZmZGJfY3JlYXRlZCwgZXh0YWNrKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX3ZuaV9kZWw7XG4gXG4gXHR2eGxhbl92bmlmaWx0ZXJfbm90aWZ5KHZ4bGFuLCB2bmlub2RlLCBSVE1fTkVXVFVOTkVMKTtcbiBcbitcdHJldHVybiAwO1xuK1xuK2Vycl92bmlfZGVsOlxuK1x0LyogVW5kbyBvbmx5IHRoZSBkZWZhdWx0IEZEQiBlbnRyeSB0aGlzIGFkZCBpbnN0YWxsZWQuICBBbiBlbnRyeSB0aGF0XG4rXHQgKiB3YXMgYWxyZWFkeSB0aGVyZSwgd2hldGhlciBhZGRlZCBvdXQgb2YgYmFuZCBvciBieSBhbm90aGVyIFZOSSwgaXNcbitcdCAqIGxlZnQgYWxvbmUuXG4rXHQgKlxuK1x0ICogTm8gbWVtYmVyc2hpcCBoYXMgdG8gYmUgZ2l2ZW4gYmFjazogdnhsYW5faWdtcF9sZWF2ZSgpIGlzIGdhdGVkIG9uXG4rXHQgKiB2eGxhbl9hZGRyX211bHRpY2FzdChcdTAwMjZvbGRfcmVtb3RlX2lwKSwgYW5kIG9sZF9yZW1vdGVfaXAgaXMgYSBjb3B5XG4rXHQgKiBvZiB0aGUgcmVtb3RlIElQIG9mIGEgbm9kZSB0aGlzIGFkZCBqdXN0IGFsbG9jYXRlZCwgc28gaXQgaXMgemVyby5cbitcdCAqXG4rXHQgKiBUaGUgYWRkcmVzcyBwaWNrZWQgYmVsb3cgaXMgdGhlIG9uZSB0aGUgZW50cnkgd2FzIGluc3RhbGxlZFxuK1x0ICogYWdhaW5zdC4gIElmIHRoZSByZXF1ZXN0IGNhcnJpZWQgYSBncm91cCwgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpXG4rXHQgKiBjb3BpZWQgaXQgaW50byB2bmlub2RlLVx1MDAzZXJlbW90ZV9pcCBiZWZvcmUgdGhlIGpvaW4gY291bGQgZmFpbDsgaWZcbitcdCAqIGl0IGRpZCBub3QsIHRoYXQgY29weSB3YXMgc2tpcHBlZCBhbmQgdGhlIGVudHJ5IHdlbnQgdG8gdGhlIGRldmljZVxuK1x0ICogZGVmYXVsdC5cbitcdCAqL1xuK1x0aWYgKGZkYl9jcmVhdGVkKSB7XG4rXHRcdHVuaW9uIHZ4bGFuX2FkZHIgKnJpcCA9IHZ4bGFuX2FkZHJfYW55KFx1MDAyNnZuaW5vZGUtXHUwMDNlcmVtb3RlX2lwKSA/XG4rXHRcdFx0XHRcdFx1MDAyNnZ4bGFuLVx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pcCA6XG4rXHRcdFx0XHRcdFx1MDAyNnZuaW5vZGUtXHUwMDNlcmVtb3RlX2lwO1xuK1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbitcdFx0X192eGxhbl9mZGJfZGVsZXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLCAqcmlwLFxuK1x0XHRcdFx0ICAgdnhsYW4tXHUwMDNlY2ZnLmRzdF9wb3J0LCB2bmlub2RlLVx1MDAzZXZuaSxcbitcdFx0XHRcdCAgIHZuaW5vZGUtXHUwMDNldm5pLFxuK1x0XHRcdFx0ICAgdnhsYW4tXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX2lmaW5kZXgsIHRydWUpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ2eGxhbi1cdTAwM2VoYXNoX2xvY2spO1xuK1x0fVxuK1x0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcdTAwMjZ2Zy1cdTAwM2V2bmlfaGFzaCwgXHUwMDI2dm5pbm9kZS1cdTAwM2V2bm9kZSxcbitcdFx0XHQgICAgICAgdnhsYW5fdm5pX3JodF9wYXJhbXMpO1xuK1x0X192eGxhbl92bmlfZGVsX2xpc3QodmcsIHZuaW5vZGUpO1xuK1x0aWYgKHZ4bGFuLVx1MDAzZWRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKVxuK1x0XHR2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGUodnhsYW4sIHZuaW5vZGUsIHRydWUpO1xuK1x0Y2FsbF9yY3UoXHUwMDI2dm5pbm9kZS1cdTAwM2VyY3UsIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NDk6NTUuNzU2NzQxOTc0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTQ4NzE4Mzk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBWWExBTiBQYXRjaCBmb3IgRnV6emluZyB3aXRoIFN5emthbGxlcioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBiYXNlZCBvbiBhIHF1aWNrIHNjYW4sIHRoYXQgdGhpcyBwYXRjaCAqY291bGQqIGJlIGZydWl0ZnVsIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaGUgVlhMQU4gZHJpdmVyIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggaXMgYSBodWdlIHBsdXMuIFdlIGNhbiB0cmlnZ2VyIGl0IHRocm91Z2ggbmV0bGluaywgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCB0YXJnZXQsIG9yIGV2ZW4ganVzdCBuZXR3b3JrIHRyYWZmaWMuXG5cbk15IGZpcnN0IGNoZWNrcG9pbnQgaXMgcmVhY2hhYmlsaXR5LCBhbmQgVlhMQU4gcGFzc2VzIHdpdGggZmx5aW5nIGNvbG9ycyBkdWUgdG8gaXRzIG5ldGxpbmsgYW5kIG5ldHdvcmsgdHJhZmZpYyBpbnRlcmFjdGlvbi5cblxuTm93LCB0aGUgY29yZSBvZiB0aGUgbWF0dGVyOiB3aGF0IGRvZXMgdGhlIHBhdGNoICpkbyo/IEl0IGxvb2tzIGxpa2UgaXQncyB0b3VjaGluZyBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCwgYHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlYCwgYHZ4bGFuX2ZkYl91cGRhdGVgLCBhbmQgYHZ4bGFuX3ZuaV9hZGRgLiBUaGlzIHNjcmVhbXMgXCJwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIHN0YXRlIHRyYW5zaXRpb25zIGFuZCBlcnJvciBjb25kaXRpb25zLFwiIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50IGZvciBmdXp6aW5nISBUaGUgYWRkaXRpb24gb2YgdGhlIGBlcnJfdm5pX2RlbGAgY2xlYW51cCBwYXRoIGluIGB2eGxhbl92bmlfYWRkYCwgd2l0aCB0aGUgcm9sbGJhY2sgbG9naWMgZm9yIEZEQiBlbnRyaWVzIGFuZCBWTkkgbm9kZXMgaWYgYHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXBgIGZhaWxzLCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZS4gVGhpcyBpcyBhIGNsYXNzaWMgXCJlcnJvciBoYW5kbGluZyB0aGF0J3MgbGlrZWx5IHRvIGhhdmUgYnVnc1wiIHNjZW5hcmlvLiBUaGUgbmV3IGBib29sICpjcmVhdGVkYCBwYXJhbWV0ZXIgaW4gdGhlIGB2eGxhbl9mZGJfdXBkYXRlKmAgZnVuY3Rpb25zLCBkaXJlY3RseSBpbXBhY3RpbmcgZXJyb3IgaGFuZGxpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQsIGlzIGFsc28gYSByZWQgZmxhZyBpbiBhIGdvb2Qgd2F5LiBJdCBpbmRpY2F0ZXMgZGVsaWNhdGUgY2hhbmdlcyB0byB0aGUgZHJpdmVyJ3MgaW50ZXJuYWwgc3RhdGUgbWFjaGluZS5cblxuTW9kaWZpZWQgZmlsZXMgaW5jbHVkZSBgdnhsYW5fY29yZS5jYCwgYHZ4bGFuX3ByaXZhdGUuaGAsIGFuZCBgdnhsYW5fdm5pZmlsdGVyLmNgLCB3aGljaCBjb25maXJtcyB3ZSBhcmUgaW4gdGhlIGNvcmUgb2YgdGhlIGRyaXZlciwgc28gaXQgaXMgaGlnaCB2YWx1ZS5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgbW9yZSB0aG9yb3VnaGx5LiBJJ2xsIG5lZWQgdG8gZG8gc29tZSBgZ3JlcGBzIHRvIGZpbmQgYWxsIHRoZSBjYWxsZXJzIG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYW5kIGFzc2VzcyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgdGhlc2UgY2hhbmdlcyBhcmUgaW50ZWdyYXRlZCwgYW5kIGdpdmUgdGhlIGFiaWxpdHkgdG8gdGVzdCBldmVyeSBmdW5jdGlvbiBwYXRoLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gYnVpbGQgYSBzdHJvbmdlciBjYXNlIGZvciB3aHkgdGhpcyBwYXRjaCBpcyB3b3J0aCB0aGUgZWZmb3J0IHRvIGZ1enouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NTEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDowMS4yNDM5Mjg3MzFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxMTgxMzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1ZYTEFOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL01ha2VmaWxlLTQtXFxuZHJpdmVycy9uZXQvdnhsYW4vTWFrZWZpbGU6NTpvYmotJChDT05GSUdfVlhMQU4pICs9IHZ4bGFuLm9cXG5kcml2ZXJzL25ldC92eGxhbi9NYWtlZmlsZS02LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDowMS4yOTMwNDk1MDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDQ3OTg3NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFZYTEFOIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBDT05GSUdfVlhMQU5gLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IHRoZSBvbmVzIGluIHRoZSBgZHJpdmVycy9uZXQvYCBkaXJlY3RvcnkuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZXNlIG5ldHdvcmstcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5lZC4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGxvY2F0aW9uIHRvIGJlIGNlcnRhaW4sIHRob3VnaC4gRmluZGluZyB0aGUgZXhhY3QgbG9jYXRpb24gd2hlcmUgYENPTkZJR19WWExBTmAgaXMgZGVjbGFyZWQgaXMgdGhlIGtleS4gT25jZSBJIGtub3cgd2hlcmUgaXQgbGl2ZXMsIEkgY2FuIHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgbWVhbnMgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugb3RoZXIgYENPTkZJR19gIG9wdGlvbnMgdGhhdCBpdCByZXF1aXJlcywgYW55IGFyY2hpdGVjdHVyYWwgY29uc3RyYWludHMsIGFuZCBwZXJoYXBzIGV2ZW4ga2VybmVsIG1vZHVsZXMgdGhhdCBpdCBwdWxscyBpbi4gS25vd2luZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGltcGFjdCBvbiB0aGUgc3lzdGVtLCB3aGV0aGVyIGl0J3MgcmVsYXRlZCB0byBhIHNwZWNpZmljIGhhcmR3YXJlLCBvciBhbm90aGVyIGRyaXZlciBpdCdzIHJlbGlhbnQgb24gdG8gZnVuY3Rpb24uIEknbGwgbmVlZCB0byBpZGVudGlmeSB0aGUgcHJlY29uZGl0aW9ucyBmb3IgZW5hYmxpbmcgVlhMQU4gcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MjgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDowMy4zNDEwNDAwMThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwOTk1NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWWExBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTIxNj1jb25maWcgSVBWVEFQXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTIyOS1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjIzMDpjb25maWcgVlhMQU5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzMS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBlWHRlbnNpYmxlIExvY2FsIEFyZWEgTmV0d29yayAoVlhMQU4pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDowMy40OTIwNDEwMTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTQ4MTgwNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQgc3VpdGFibGUgZm9yIGEgbmV0d29ya2luZyBleHBlcnQgbGlrZSBteXNlbGY6XG5cbioqRGl2aW5nIGludG8gdGhlIFZYTEFOIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gTGV0J3MgZGlnIGludG8gdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGVudHJ5IGZvciBWWExBTiwgbG9jYXRlZCBpbiB0aGUgYGRyaXZlcnMvbmV0YCBkaXJlY3RvcnkuIEknbSBrZWVuIHRvIHNlZSBob3cgdGhpcyBpcyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHNldHRpbmdzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGJ1aWxkIG9wdGlvbnMuIElzIGl0IGFuIE0gbW9kdWxlLCBidWlsdC1pbiwgb3IgcGVyaGFwcyBvbmx5IGVuYWJsZWQgd2l0aCBhbm90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBXaGF0IGZlYXR1cmVzIGFyZSBzZWxlY3RpdmVseSBlbmFibGVkIG9yIGRpc2FibGVkPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGUgVlhMQU4gZHJpdmVyIGludGVncmF0ZXMgd2l0aCB0aGUgYnJvYWRlciBuZXR3b3JraW5nIHN0YWNrIOKAkyBhcmUgdGhlcmUgc3BlY2lmaWMgaGFyZHdhcmUgZGVwZW5kZW5jaWVzPyBXaGF0IHVzZXIgc3BhY2UgdG9vbHMgYXJlIHJlcXVpcmVkLCBhbmQgYXJlIHRoZXkgcmVmbGVjdGVkIGluIHRoZSBjb25maWd1cmF0aW9uPyBJJ2xsIGFsc28gYmUgc2VhcmNoaW5nIGZvciBhbnkgaGludHMgb24gaG93IHRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIG9mZmxvYWQgb3IgYWNjZWxlcmF0ZWQgZmVhdHVyZXMuIFRoaXMgS2NvbmZpZyBlbnRyeSBpcyB0aGUgYmx1ZXByaW50LCB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWxseSBjb21wcmVoZW5kaW5nIGhvdyBWWExBTiBpcyBicm91Z2h0IHRvIGxpZmUgd2l0aGluIHRoZSBrZXJuZWwuIFRoaXMgaXMgbXkgY2hhbmNlIHRvIHNlZSBpZiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIGNvbXBsZXRlLCBvciBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbiB0aGUgY29kZSBmb3Igc3BlY2lmaWMgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA3MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUwOjA1LjY0MDIyNTMwMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjI4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjI4OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgaXB2dGFwLlxcbiAyMjk6XFx0XFxuIDIzMDpcXHRjb25maWcgVlhMQU5cXG4gMjMxOlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIGVYdGVuc2libGUgTG9jYWwgQXJlYSBOZXR3b3JrIChWWExBTilcXFwiXFxuIDIzMjpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gMjMzOlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAyMzQ6XFx0XFx0c2VsZWN0IEdST19DRUxMU1xcbiAyMzU6XFx0XFx0aGVscFxcbiAyMzY6XFx0XFx0ICBUaGlzIGFsbG93cyBvbmUgdG8gY3JlYXRlIHZ4bGFuIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGVcXG4gMjM3OlxcdFxcdCAgTGF5ZXIgMiBOZXR3b3JrcyBvdmVyIExheWVyIDMgTmV0d29ya3MuIFZYTEFOIGlzIG9mdGVuIHVzZWRcXG4gMjM4OlxcdFxcdCAgdG8gdHVubmVsIHZpcnR1YWwgbmV0d29yayBpbmZyYXN0cnVjdHVyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXFxuIDIzOTpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTpcXG4gMjQwOlxcdFxcdCAgICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1tYWhhbGluZ2FtLWR1dHQtZGNvcHMtdnhsYW4tMDJcXG4gMjQxOlxcdFxcbiAyNDI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuIDI0MzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHZ4bGFuLlxcbiAyNDQ6XFx0XFxuIDI0NTpcXHRjb25maWcgR0VORVZFXFxuIDI0NjpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBOZXR3b3JrIFZpcnR1YWxpemF0aW9uIEVuY2Fwc3VsYXRpb25cXFwiXFxuIDI0NzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6MDUuNjQwMjk4NjUxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU3MzcwMDUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKlZYTEFOIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBWWExBTi4uLiBJdCBmdW5kYW1lbnRhbGx5IHJlbGllcyBvbiBJTkVULCB3aGljaCBpcyBoYXJkbHkgc3VycHJpc2luZy4gQnV0IEkgbmVlZCB0byBiZSBtb3JlIHRob3JvdWdoIGhlcmUsIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBkZXBlbmRlbmNpZXMgb3IgYWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIEknbSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBgZHJpdmVycy9uZXQvdnhsYW4vYCBkaXJlY3RvcnkuXG5cblRoZSBxdWVzdGlvbiB0aGF0IEkgYW0gYXNraW5nIGlzOiBpcyB0aGVyZSBhbnl0aGluZyBlbHNlIHRoYXQgcGVydGFpbnMgdG8gYHZuaWZpbHRlcmAgb3IgYW55IG90aGVyIGNvbXBvbmVudHMgaW4gdGhhdCBWWExBTiBpbXBsZW1lbnRhdGlvbj9cblxuTXkgYmVzdCBzdGFydGluZyBwb2ludCB3b3VsZCBiZSB0aGUgYE1ha2VmaWxlYCBpbiBgZHJpdmVycy9uZXQvdnhsYW4vYC4gTGV0J3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHdoYXQgaXQgcmV2ZWFscyBhYm91dCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBjb21wb25lbnQgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2ODksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUwOjA4LjIxNDAwMTc5N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC92eGxhbi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCNcXG4gICAyOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSB2eGxhbiBkcml2ZXJcXG4gICAzOlxcdCNcXG4gICA0OlxcdFxcbiAgIDU6XFx0b2JqLSQoQ09ORklHX1ZYTEFOKSArPSB2eGxhbi5vXFxuICAgNjpcXHRcXG4gICA3OlxcdHZ4bGFuLW9ianMgOj0gdnhsYW5fY29yZS5vIHZ4bGFuX211bHRpY2FzdC5vIHZ4bGFuX3ZuaWZpbHRlci5vIHZ4bGFuX21kYi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUwOjA4LjIxNDA2ODU3N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDUyMTUyODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWWExBTiBGREIgVXBkYXRlcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIFZYTEFOIGNvZGUsIGFuZCBmaXJzdCB0aGluZydzIGZpcnN0LCBJIHNlZSB0aGUgY29yZSBvYmplY3RzIGFyZSBkZWZpbmVkLiBFdmVyeXRoaW5nIGhpbmdlcyBvbiBgQ09ORklHX1ZYTEFOYCwgb2J2aW91c2x5LiBOb3csIEkgd2FudCB0byBzZWUgaG93IHRoaXMgcmVjZW50IGNoYW5nZSBpcyBhZmZlY3RpbmcgZnVuY3Rpb24gY2FsbHMuXG5cbkxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY2AsIEkgc2VlIGEgcHJldHR5IHBlcnZhc2l2ZSBwYXR0ZXJuLiBGdW5jdGlvbnMgbGlrZSBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AsIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZWAsIGFuZCBgdnhsYW5fZmRiX3VwZGF0ZWAgaXRzZWxmIGhhdmUgYWxsIGJlZW4gbW9kaWZpZWQsIGFuZCBhIGBjcmVhdGVkYCBwYXJhbWV0ZXIgaGFzIGJlZW4gYWRkZWQuIE1ha2VzIHNlbnNlLiBCdXQgaXQncyBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoaXMgY2hhbmdlIHJpcHBsZXMgdGhyb3VnaC4gRnVuY3Rpb25zIGxpa2UgYHZ4bGFuX2ZkYl9hZGRgLCBgdnhsYW5fc25vb3BgLCBgdnhsYW5fZGV2X2NyZWF0ZWAsIGB2eGxhbl9jaGFuZ2VsaW5rYCwgYW5kIGB2eGxhbl9mZGJfZXh0ZXJuYWxfbGVhcm5fYWRkYCAqYWxsKiBjYWxsIGB2eGxhbl9mZGJfdXBkYXRlYCwgYnV0IHBhc3MgYSBOVUxMIGZvciB0aGlzIG5ldyBgY3JlYXRlZGAgcGFyYW1ldGVyLiBUaGF0J3Mgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQsIGJlY2F1c2Ugd2hhdCdzIGdvaW5nIHRvIGhhcHBlbiB3aXRoIHRoYXQgTlVMTCB2YWx1ZT9cblxuTW92aW5nIG92ZXIgdG8gYGRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jYCwgdGhlIHBpY3R1cmUgZ2V0cyBhIGJpdCBtb3JlIGNvbXBsZXguIEhlcmUsIGB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnlgIGdldHMgdGhlIGBmZGJfY3JlYXRlZGAgcGFyYW1ldGVyLCBhbmQgc3Vic2VxdWVudGx5IHBhc3NlcyBpdCBkb3duIHRvIGB2eGxhbl9mZGJfdXBkYXRlYC4gU2ltaWxhciB0aGluZyB3aXRoIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYC4gSG93ZXZlciwgYHZ4bGFuX3ZuaWxpc3RfdXBkYXRlX2dyb3VwYCBhbmQgYHZ4bGFuX3ZuaV91cGRhdGVgIHBhc3MgTlVMTCBmb3IgdGhlIGBmZGJfY3JlYXRlZGAgcGFyYW1ldGVyLiBOb3csIEknbSBmb2N1c2luZyBvbiB0aGUgYHZ4bGFuX3ZuaV9hZGRgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIGl0J3MgcGFzc2luZyBgXHUwMDI2ZmRiX2NyZWF0ZWRgIHRvIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYCwgYW5kIHRoZXJlJ3Mgc29tZSBlcnJvciBoYW5kbGluZyBpbiBwbGFjZSwgc3BlY2lmaWNhbGx5IGVycm9yIGhhbmRsaW5nIHdpdGggYGVycl92bmlfZGVsYC4gSSdsbCBoYXZlIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gY2FsbCBhcm91bmQgbGluZXMgNzEwLTc3MCBpbiBgdnhsYW5fdm5pZmlsdGVyLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA1OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUwOjEyLjI2NjIyMzczNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEwMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzE1LFxuICBcIkxpbmVDb3VudFwiOiA5NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzE1OlxcdFxcdHJldHVybiB2bmlub2RlO1xcbiA3MTY6XFx0fVxcbiA3MTc6XFx0XFxuIDcxODpcXHRzdGF0aWMgdm9pZCB2eGxhbl92bmlfZnJlZShzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnZuaW5vZGUpXFxuIDcxOTpcXHR7XFxuIDcyMDpcXHRcXHRmcmVlX3BlcmNwdSh2bmlub2RlLVxcdTAwM2VzdGF0cyk7XFxuIDcyMTpcXHRcXHRrZnJlZSh2bmlub2RlKTtcXG4gNzIyOlxcdH1cXG4gNzIzOlxcdFxcbiA3MjQ6XFx0c3RhdGljIHZvaWQgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpO1xcbiA3MjU6XFx0XFxuIDcyNjpcXHRzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuIDcyNzpcXHRcXHRcXHRcXHQgc3RydWN0IHZ4bGFuX3ZuaV9ncm91cCAqdmcsXFxuIDcyODpcXHRcXHRcXHRcXHQgdTMyIHZuaSwgdW5pb24gdnhsYW5fYWRkciAqZ3JvdXAsXFxuIDcyOTpcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA3MzA6XFx0e1xcbiA3MzE6XFx0XFx0c3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlO1xcbiA3MzI6XFx0XFx0X19iZTMyIHYgPSBjcHVfdG9fYmUzMih2bmkpO1xcbiA3MzM6XFx0XFx0Ym9vbCBmZGJfY3JlYXRlZCA9IGZhbHNlO1xcbiA3MzQ6XFx0XFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuIDczNTpcXHRcXHRpbnQgZXJyID0gMDtcXG4gNzM2OlxcdFxcbiA3Mzc6XFx0XFx0aWYgKHZ4bGFuX3ZuaWZpbHRlcl9sb29rdXAodnhsYW4sIHYpKVxcbiA3Mzg6XFx0XFx0XFx0cmV0dXJuIHZ4bGFuX3ZuaV91cGRhdGUodnhsYW4sIHZnLCB2LCBncm91cCwgXFx1MDAyNmNoYW5nZWQsIGV4dGFjayk7XFxuIDczOTpcXHRcXG4gNzQwOlxcdFxcdGVyciA9IHZ4bGFuX3ZuaV9pbl91c2UodnhsYW4tXFx1MDAzZW5ldCwgdnhsYW4sIFxcdTAwMjZ2eGxhbi1cXHUwMDNlY2ZnLCB2KTtcXG4gNzQxOlxcdFxcdGlmIChlcnIpIHtcXG4gNzQyOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlZOSSBpbiB1c2VcXFwiKTtcXG4gNzQzOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDc0NDpcXHRcXHR9XFxuIDc0NTpcXHRcXG4gNzQ2OlxcdFxcdHZuaW5vZGUgPSB2eGxhbl92bmlfYWxsb2ModnhsYW4sIHYpO1xcbiA3NDc6XFx0XFx0aWYgKCF2bmlub2RlKVxcbiA3NDg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDc0OTpcXHRcXG4gNzUwOlxcdFxcdGVyciA9IHJoYXNodGFibGVfbG9va3VwX2luc2VydF9mYXN0KFxcdTAwMjZ2Zy1cXHUwMDNldm5pX2hhc2gsXFxuIDc1MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnZuaW5vZGUtXFx1MDAzZXZub2RlLFxcbiA3NTI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHZ4bGFuX3ZuaV9yaHRfcGFyYW1zKTtcXG4gNzUzOlxcdFxcdGlmIChlcnIpIHtcXG4gNzU0OlxcdFxcdFxcdHZ4bGFuX3ZuaV9mcmVlKHZuaW5vZGUpO1xcbiA3NTU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzU2OlxcdFxcdH1cXG4gNzU3OlxcdFxcbiA3NTg6XFx0XFx0X192eGxhbl92bmlfYWRkX2xpc3QodmcsIHZuaW5vZGUpO1xcbiA3NTk6XFx0XFxuIDc2MDpcXHRcXHRpZiAodnhsYW4tXFx1MDAzZWRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApXFxuIDc2MTpcXHRcXHRcXHR2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGUodnhsYW4sIHZuaW5vZGUsIGZhbHNlKTtcXG4gNzYyOlxcdFxcbiA3NjM6XFx0XFx0ZXJyID0gdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCh2eGxhbiwgdm5pbm9kZSwgZ3JvdXAsIHRydWUsIFxcdTAwMjZjaGFuZ2VkLFxcbiA3NjQ6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2ZmRiX2NyZWF0ZWQsIGV4dGFjayk7XFxuIDc2NTpcXHRcXHRpZiAoZXJyKVxcbiA3NjY6XFx0XFx0XFx0Z290byBlcnJfdm5pX2RlbDtcXG4gNzY3OlxcdFxcbiA3Njg6XFx0XFx0dnhsYW5fdm5pZmlsdGVyX25vdGlmeSh2eGxhbiwgdm5pbm9kZSwgUlRNX05FV1RVTk5FTCk7XFxuIDc2OTpcXHRcXG4gNzcwOlxcdFxcdHJldHVybiAwO1xcbiA3NzE6XFx0XFxuIDc3MjpcXHRlcnJfdm5pX2RlbDpcXG4gNzczOlxcdFxcdC8qIFVuZG8gb25seSB0aGUgZGVmYXVsdCBGREIgZW50cnkgdGhpcyBhZGQgaW5zdGFsbGVkLiAgQW4gZW50cnkgdGhhdFxcbiA3NzQ6XFx0XFx0ICogd2FzIGFscmVhZHkgdGhlcmUsIHdoZXRoZXIgYWRkZWQgb3V0IG9mIGJhbmQgb3IgYnkgYW5vdGhlciBWTkksIGlzXFxuIDc3NTpcXHRcXHQgKiBsZWZ0IGFsb25lLlxcbiA3NzY6XFx0XFx0ICpcXG4gNzc3OlxcdFxcdCAqIE5vIG1lbWJlcnNoaXAgaGFzIHRvIGJlIGdpdmVuIGJhY2s6IHZ4bGFuX2lnbXBfbGVhdmUoKSBpcyBnYXRlZCBvblxcbiA3Nzg6XFx0XFx0ICogdnhsYW5fYWRkcl9tdWx0aWNhc3QoXFx1MDAyNm9sZF9yZW1vdGVfaXApLCBhbmQgb2xkX3JlbW90ZV9pcCBpcyBhIGNvcHlcXG4gNzc5OlxcdFxcdCAqIG9mIHRoZSByZW1vdGUgSVAgb2YgYSBub2RlIHRoaXMgYWRkIGp1c3QgYWxsb2NhdGVkLCBzbyBpdCBpcyB6ZXJvLlxcbiA3ODA6XFx0XFx0ICpcXG4gNzgxOlxcdFxcdCAqIFRoZSBhZGRyZXNzIHBpY2tlZCBiZWxvdyBpcyB0aGUgb25lIHRoZSBlbnRyeSB3YXMgaW5zdGFsbGVkXFxuIDc4MjpcXHRcXHQgKiBhZ2FpbnN0LiAgSWYgdGhlIHJlcXVlc3QgY2FycmllZCBhIGdyb3VwLCB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKClcXG4gNzgzOlxcdFxcdCAqIGNvcGllZCBpdCBpbnRvIHZuaW5vZGUtXFx1MDAzZXJlbW90ZV9pcCBiZWZvcmUgdGhlIGpvaW4gY291bGQgZmFpbDsgaWZcXG4gNzg0OlxcdFxcdCAqIGl0IGRpZCBub3QsIHRoYXQgY29weSB3YXMgc2tpcHBlZCBhbmQgdGhlIGVudHJ5IHdlbnQgdG8gdGhlIGRldmljZVxcbiA3ODU6XFx0XFx0ICogZGVmYXVsdC5cXG4gNzg2OlxcdFxcdCAqL1xcbiA3ODc6XFx0XFx0aWYgKGZkYl9jcmVhdGVkKSB7XFxuIDc4ODpcXHRcXHRcXHR1bmlvbiB2eGxhbl9hZGRyICpyaXAgPSB2eGxhbl9hZGRyX2FueShcXHUwMDI2dm5pbm9kZS1cXHUwMDNlcmVtb3RlX2lwKSA/XFxuIDc4OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dnhsYW4tXFx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pcCA6XFxuIDc5MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dm5pbm9kZS1cXHUwMDNlcmVtb3RlX2lwO1xcbiA3OTE6XFx0XFxuIDc5MjpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZ4bGFuLVxcdTAwM2VoYXNoX2xvY2spO1xcbiA3OTM6XFx0XFx0XFx0X192eGxhbl9mZGJfZGVsZXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLCAqcmlwLFxcbiA3OTQ6XFx0XFx0XFx0XFx0XFx0ICAgdnhsYW4tXFx1MDAzZWNmZy5kc3RfcG9ydCwgdm5pbm9kZS1cXHUwMDNldm5pLFxcbiA3OTU6XFx0XFx0XFx0XFx0XFx0ICAgdm5pbm9kZS1cXHUwMDNldm5pLFxcbiA3OTY6XFx0XFx0XFx0XFx0XFx0ICAgdnhsYW4tXFx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pZmluZGV4LCB0cnVlKTtcXG4gNzk3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ2eGxhbi1cXHUwMDNlaGFzaF9sb2NrKTtcXG4gNzk4OlxcdFxcdH1cXG4gNzk5OlxcdFxcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXFx1MDAyNnZnLVxcdTAwM2V2bmlfaGFzaCwgXFx1MDAyNnZuaW5vZGUtXFx1MDAzZXZub2RlLFxcbiA4MDA6XFx0XFx0XFx0XFx0ICAgICAgIHZ4bGFuX3ZuaV9yaHRfcGFyYW1zKTtcXG4gODAxOlxcdFxcdF9fdnhsYW5fdm5pX2RlbF9saXN0KHZnLCB2bmlub2RlKTtcXG4gODAyOlxcdFxcdGlmICh2eGxhbi1cXHUwMDNlZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUClcXG4gODAzOlxcdFxcdFxcdHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZSh2eGxhbiwgdm5pbm9kZSwgdHJ1ZSk7XFxuIDgwNDpcXHRcXHRjYWxsX3JjdShcXHUwMDI2dm5pbm9kZS1cXHUwMDNlcmN1LCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZSk7XFxuIDgwNTpcXHRcXHRyZXR1cm4gZXJyO1xcbiA4MDY6XFx0fVxcbiA4MDc6XFx0XFxuIDgwODpcXHRzdGF0aWMgdm9pZCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4gODA5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6MTIuMjY2MzI2MzQ1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYxMDY0NzQyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2eGxhbl92bmlfYWRkIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzIHBhdGNoIHRvIGB2eGxhbl92bmlfYWRkYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIHRvIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cGAuIFByZXZpb3VzbHksIGB2eGxhbl92bmlfYWRkYCBhcHBlYXJzIHRvIGhhdmUgY29tcGxldGVseSBpZ25vcmVkIHRoZSByZXR1cm4gdmFsdWUgb2YgYHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXBgLiBUaGUgY29kZSBqdXN0IHBsb3dlZCBhaGVhZCB0byBgdnhsYW5fdm5pZmlsdGVyX25vdGlmeWAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYCBoYWQgYW4gaXNzdWUsIHVsdGltYXRlbHkgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUuIEVzc2VudGlhbGx5LCBhIHBhcnRpYWxseSBpbml0aWFsaXplZCB2bmlub2RlIHdhcyBsZWZ0IGhhbmdpbmcgYXJvdW5kIGluIHRoZSByaGFzaHRhYmxlIGFuZCBsaXN0LiBUaGF0J3MgYSBzZXJpb3VzIHBvdGVudGlhbCBsZWFrIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlLlxuXG5Ob3csIGFmdGVyIHRoZSBwYXRjaCwgd2UgaGF2ZSBhIHJvYnVzdCBlcnJvci1oYW5kbGluZyBwYXRoLiBJZiBgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cGAgZmFpbHMsIHRoZSBgdm5pbm9kZWAgZ2V0cyBjbGVhbmVkIHVwIHByb3Blcmx5LiBUaGlzIGludm9sdmVzIGBjYWxsX3JjdWAgZm9yIFJDVS1zYWZlIGZyZWVpbmcsIHJlbW92aW5nIHRoZSBub2RlIGZyb20gdGhlIGhhc2h0YWJsZSBhbmQgbGlzdCwgaGFuZGxpbmcgc3BpbmxvY2tzIChgc3Bpbl9sb2NrX2JoYCksIGFuZCBwb3RlbnRpYWxseSB1bmRvaW5nIHRoZSBGREIgZGVsZXRpb24gaWYgaXQgd2FzIGNyZWF0ZWQgKGBmZGJfY3JlYXRlZGApLiBUaGVyZSdzIGV2ZW4gc29ja2V0IG1hbmlwdWxhdGlvbiB3aXRoIGB2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGVgLCB3aGljaCBsaWtlbHkgaW50ZXJhY3RzIHdpdGggdGhlIGRhdGFwYXRoLiBJdCdzIGEgY29tcHJlaGVuc2l2ZSBhcHByb2FjaC5cblxuVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSB2aXJ0dWFsIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIHZ4bGFuIGNvcmUgYW5kIHZuaWZpbHRlciBtb2R1bGVzLiBUaGVzZSBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBuZXRsaW5rIChzcGVjaWZpY2FsbHkgcnRuZXRsaW5rIHZuaWZpbHRlciBjb21tYW5kcykuIFRoaXMgbWVhbnMgYW55IGVycm9yIGluIHRoZSBwcmV2aW91cyBjb2RlIGNvdWxkIGhhdmUgY2F1c2VkIHNpZ25pZmljYW50IHByb2JsZW1zIGJlY2F1c2Ugb2YgdGhlIGxhY2sgb2YgZXJyb3IgaGFuZGxpbmcsIGJ1dCBub3csIHRoaXMgaXMgYWxsIG11Y2ggbW9yZSByb2J1c3QuXG5cbkkgbmVlZCB0byBzZWUgaG93IGB2eGxhbl92bmlfYWRkYCBpcyByZWFjaGVkIHNvIEknbSBnb2luZyB0byBxdWlja2x5IGdyZXAgZm9yIHRoZSBmdW5jdGlvbiBuYW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcxNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUwOjE4LjM3MjgwNDE3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI2MjU2NDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZ4bGFuX3ZuaV9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdnhsYW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NjQ2PXN0YXRpYyBpbnQgdnhsYW5fdm5pX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTY3MC1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo2NzE6c3RhdGljIHZvaWQgX192eGxhbl92bmlfYWRkX2xpc3Qoc3RydWN0IHZ4bGFuX3ZuaV9ncm91cCAqdmcsXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNjcyLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnYpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz03MjQ9c3RhdGljIHZvaWQgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTcyNS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo3MjY6c3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTcyNy1cXHRcXHRcXHQgc3RydWN0IHZ4bGFuX3ZuaV9ncm91cCAqdmcsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy03NTctXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6NzU4OlxcdF9fdnhsYW5fdm5pX2FkZF9saXN0KHZnLCB2bmlub2RlKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy03NTktXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz04MTY9c3RhdGljIGludCB2eGxhbl92bmlfZGVsKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtODU0LVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjg1NTpzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGRfZGVsKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBfX3UzMiBzdGFydF92bmksXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtODU2LVxcdFxcdFxcdCAgICAgX191MzIgZW5kX3ZuaSwgdW5pb24gdnhsYW5fYWRkciAqZ3JvdXAsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04NjYtXFx0XFx0Y2FzZSBSVE1fTkVXVFVOTkVMOlxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjg2NzpcXHRcXHRcXHRlcnIgPSB2eGxhbl92bmlfYWRkKHZ4bGFuLCB2ZywgdiwgZ3JvdXAsIGV4dGFjayk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtODY4LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9ODg1PXN0YXRpYyBpbnQgdnhsYW5fcHJvY2Vzc192bmlfZmlsdGVyKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtOTMzLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjkzNDpcXHRlcnIgPSB2eGxhbl92bmlfYWRkX2RlbCh2eGxhbiwgdm5pX3N0YXJ0LCB2bmlfZW5kLCBcXHUwMDI2Z3JvdXAsIGNtZCxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy05MzUtXFx0XFx0XFx0XFx0ZXh0YWNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6MTkuMjk5MDY2MzUxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwODIyODY1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgVnhMQU4gVk5JIEZpbHRlcioqXG5cbk9rYXksIHNvIGB2eGxhbl9wcm9jZXNzX3ZuaV9maWx0ZXJgIGlzIHRyaWdnZXJlZCwgZWl0aGVyIHRocm91Z2ggdGhlIHN0YW5kYXJkIHJ0bmV0bGluayByb3V0ZSB1cGRhdGUgcHJvY2VzcyAoYFJUTV9ORVdUVU5ORUxgKSBvciBkaXJlY3RseSBieSBhIGB2bmlmaWx0ZXJgIGNhbGwuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB1bmRlcnN0YW5kICp3aGVyZSogdGhpcyBmaWx0ZXJpbmcgcm91dGluZSBpcyBhY3R1YWxseSBnZXR0aW5nIGhvb2tlZCB1cCBpbiB0aGUgY29kZS4gSSBuZWVkIHRvIHRyYWNlIGl0cyByZWdpc3RyYXRpb24gdG8gZ2V0IHRoZSBiaWcgcGljdHVyZSBvZiBpdHMgaW50ZWdyYXRpb24gaW50byB0aGUgVnhMQU4gZGF0YSBwYXRoLiBJ4oCZbSB0aGlua2luZyBJIHdpbGwgZWl0aGVyIGZpbmQgaXQgcmVnaXN0ZXJlZCBhcyBhIGhhbmRsZXIgZm9yIGEgcGFydGljdWxhciBOZXRsaW5rIGZhbWlseS9tZXNzYWdlIHR5cGUgb3IgaW50ZWdyYXRlZCBpbnRvIHRoZSBvdmVyYWxsIG5ldHdvcmsgZGV2aWNlIG9yIHR1bm5lbCBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGNhbGxzIHRvIGZpbmQgb3V0IHdoZXJlIHRoZSByZWdpc3RyYXRpb24gaGFwcGVucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDoyMS4zODEzNTU0N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwNzMyMjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZ4bGFuX3Byb2Nlc3Nfdm5pX2ZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC92eGxhblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz04NTU9c3RhdGljIGludCB2eGxhbl92bmlfYWRkX2RlbChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgX191MzIgc3RhcnRfdm5pLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtODg0LVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjg4NTpzdGF0aWMgaW50IHZ4bGFuX3Byb2Nlc3Nfdm5pX2ZpbHRlcihzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04ODYtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKm5sdm5pZmlsdGVyLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9OTgyPXN0YXRpYyBpbnQgdnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0xMDE1LVxcdFxcdFxcdFxcdCBzaXplb2YoKnRtc2cpLCByZW0pIHtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzoxMDE2OlxcdFxcdGVyciA9IHZ4bGFuX3Byb2Nlc3Nfdm5pX2ZpbHRlcih2eGxhbiwgYXR0ciwgbmxoLVxcdTAwM2VubG1zZ190eXBlLFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTEwMTctXFx0XFx0XFx0XFx0XFx0ICAgICAgIGV4dGFjayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUwOjIxLjkwMjA5MzQyMloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDgwODM4NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIFR1bm5lbCBDb25maWd1cmF0aW9uIEhhbmRsZXIqKlxuXG5Pa2F5LCBzbyBgdnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3NgIGlzIHJlZ2lzdGVyZWQgYXMgYSBuZXRsaW5rIGhhbmRsZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBsZXQncyB0cmFjZSBleGFjdGx5ICp3aGVyZSogdGhhdCByZWdpc3RyYXRpb24gaGFwcGVucy5cIiBVbmRlcnN0YW5kaW5nIHRoZSBoYW5kbGVyJ3MgY29udGV4dCBpcyBjcnVjaWFsLiBLbm93aW5nIHRoZSByZWdpc3RyYXRpb24gcG9pbnQgdGVsbHMgbWUgYSBsb3QgYWJvdXQgaXRzIHNjb3BlLCBob3cgaXQncyBpbnZva2VkLCBhbmQgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVGhpcyBpcyBhIHN0YW5kYXJkIGluaXRpYWwgYXBwcm9hY2ggd2hlbiBkaWdnaW5nIGludG8ga2VybmVsIG5ldHdvcmtpbmcgY29kZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCB0dW5uZWwgY29uZmlndXJhdGlvbnMg4oCTIHVuZGVyc3RhbmRpbmcgdGhlIGVudHJ5IHBvaW50IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIHBsYW5lIGludGVyYWN0aW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNhbGwgY2hhaW4gdGhhdCBsZWFkcyB0byB0aGlzIHJlZ2lzdHJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDoyMy45ODI5MzQ2NDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MDgwNzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jPTk2Mz1pbnQgdnhsYW5fdm5pZ3JvdXBfaW5pdChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbilcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTk4MS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo5ODI6c3RhdGljIGludCB2eGxhbl92bmlmaWx0ZXJfcHJvY2VzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy05ODMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9MTAzMT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgdnhsYW5fdm5pZmlsdGVyX3J0bmxfbXNnX2hhbmRsZXJzW10gPSB7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMTAzMi1cXHR7VEhJU19NT0RVTEUsIFBGX0JSSURHRSwgUlRNX0dFVFRVTk5FTCwgTlVMTCwgdnhsYW5fdm5pZmlsdGVyX2R1bXAsIDB9LFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjEwMzM6XFx0e1RISVNfTU9EVUxFLCBQRl9CUklER0UsIFJUTV9ORVdUVU5ORUwsIHZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzLCBOVUxMLCAwfSxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzoxMDM0OlxcdHtUSElTX01PRFVMRSwgUEZfQlJJREdFLCBSVE1fREVMVFVOTkVMLCB2eGxhbl92bmlmaWx0ZXJfcHJvY2VzcywgTlVMTCwgMH0sXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMTAzNS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDoyNC4wNTkwMjQ2MjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzM2MjE5NDU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogdnhsYW4gRkRCIFVwZGF0ZSoqXG5cbk9rYXksIHNvIEkndmUgaWRlbnRpZmllZCBzb21lIHByb21pc2luZyBncm91bmQgZm9yIGZ1enppbmcuIFdlJ3ZlIGdvdCBgUEZfQlJJREdFYCwgYFJUTV9ORVdUVU5ORUxgLCBhbmQgYFJUTV9ERUxUVU5ORUxgIHJlZ2lzdGVyZWQsIG1lYW5pbmcgdGhpcyBpcyByZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rIHNvY2tldHMsIGV2ZW4gZnJvbSB1bnByaXZpbGVnZWQgdXNlcnNwYWNlLCB3aGljaCBpcyBwZXJmZWN0IGZvciBzeXprYWxsZXIuXG5cbk5vdywgSSdtIGZvY3VzaW5nIG9uIGB2eGxhbl9mZGJfdXBkYXRlYC4gVGhpcyBmdW5jdGlvbiBpcyBwaXZvdGFsOyBpdCdzIHVzZWQgaW4gY3J1Y2lhbCBhcmVhczogRkRCIG5ldGxpbmsgdXBkYXRlcyAoYHZ4bGFuX2ZkYl9hZGRgKSwgcGFja2V0IHNub29waW5nIChgdnhsYW5fc25vb3BgKSwgdnhsYW4gaW50ZXJmYWNlIGNyZWF0aW9uIGFuZCBtb2RpZmljYXRpb24gKGB2eGxhbl9kZXZfY3JlYXRlYCwgYHZ4bGFuX2NoYW5nZWxpbmtgKSwgc3dpdGNoZGV2L2JyaWRnZSBvZmZsb2FkL2xlYXJuaW5nIChgdnhsYW5fZmRiX2V4dGVybmFsX2xlYXJuX2FkZGApLCBhbmQgZXZlbiB2bmlmaWx0ZXIgbG9naWMgKGB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnlgKS4gQ2xlYXJseSwgdGhpcyB0b3VjaGVzIGNvcmUgdnhsYW4gZHJpdmVyIGZ1bmN0aW9uYWxpdHksIGluY2x1ZGluZyBzdGF0ZSBtYW5hZ2VtZW50LCBlcnJvciBoYW5kbGluZywgUkNVIGZyZWVpbmcsIGFuZCBGREIgbWFuaXB1bGF0aW9ucy4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSAtIFdvcnRoRnV6emluZyA9IHRydWUhXG5cbk5vdyBsZXQncyBmb2N1cyBvbiBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zLiBJJ3ZlIGdvdCB0byBhdm9pZCB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMsIHNvIEknbSBsb29raW5nIGZvciB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGltcGxlbWVudGluZyB0aGUgY29yZSBsb2dpYywgb3IgYXJlIEFQSSBlbnRyeXBvaW50cy5cblxuVGhlIGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoaXMgY29tbWl0IGFyZTogYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgLCBgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGVgLCBgdnhsYW5fZmRiX3VwZGF0ZWAsIGB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnlgLCBgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cGAsIGB2eGxhbl92bmlfYWRkYCwgYHZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzYCwgYW5kIGB2eGxhbl9mZGJfYWRkYC5cblxuSSdtIHplcm9pbmcgaW4gb24gYSBmZXcga2V5IG9uZXM6IGB2eGxhbl9mZGJfdXBkYXRlYCwgd2hpY2ggaXMgY2xlYXJseSB0aGUgY29yZSB1cGRhdGVkIGZ1bmN0aW9uOyBgdnhsYW5fdm5pX2FkZGAsIGJlY2F1c2UgaXQgaGFzIHRoZSBlcnJvciByb2xsYmFjayBsb2dpYzsgYHZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzYCAtIHRoZSBydG5sIGVudHJ5cG9pbnQgZm9yIGBSVE1fTkVXVFVOTkVMYCB3aGljaCB0cmlnZ2VycyBgdnhsYW5fdm5pX2FkZGA7IGFuZCBgdnhsYW5fZmRiX2FkZGAsIGJlY2F1c2UgaXQncyBhIHJ0bmwgZW50cnlwb2ludCB0aGF0IGNhbGxzIGB2eGxhbl9mZGJfdXBkYXRlYC4gYHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeWAgYWxzbyBtZXJpdHMgc2NydXRpbnkgYXMgYW4gdXBkYXRlZCBmdW5jdGlvbi5cblxuTm93LCBsZXQncyBtYWtlIHN1cmUgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgZ29vZCB0YXJnZXRzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBpZiB0aGV5J3JlIG5vbi1zdGF0aWMsIHNvIHRoZXkgd29uJ3QgYmUgaW5saW5lZCBhbmQgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSBmdXp6ZXIuXG5cbmB2eGxhbl9mZGJfdXBkYXRlYCBpcyBkZWNsYXJlZCBpbiBgdnhsYW5fcHJpdmF0ZS5oYCwgc28gaXQncyAqZGVmaW5pdGVseSogYSBub24tc3RhdGljIHN5bWJvbC4gSXQncyBkZWNsYXJlZCBhczpcbmBgYGNcbmludCB2eGxhbl9mZGJfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuXHRcdCAgICAgY29uc3QgdTggKnNyY19tYWMsIHVuaW9uIHZ4bGFuX2FkZHIgKmlwLFxuXHRcdCAgICAgX191MTYgc3RhdGUsIF9fdTE2IGZsYWdzLFxuXHRcdCAgICAgX19iZTE2IHBvcnQsIF9fYmUzMiBzcmNfdm5pLCBfX2JlMzIgdm5pLFxuXHRcdCAgICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLCB1MzIgbmhpZCxcblx0XHQgICAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLFxuXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbmBgYFxuXG5BcyBmb3IgYHZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzYCwgdGhhdCdzIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBgdnhsYW5fdm5pZmlsdGVyX3J0bmxfbXNnX2hhbmRsZXJzYC4gTm8gd2F5IHRoZSBjb21waWxlciBpbmxpbmVzIHRoYXQsIHNvIHRoYXQncyBnb29kLlxuXG5gdnhsYW5fZmRiX2FkZGAgaXMgYWxzbyBhbiBlbnRyeSBwb2ludCAtIGxldCdzIGNoZWNrIGhvdyBpdCdzIHJlZmVyZW5jZWQuIEl0J3MgcmVmZXJlbmNlZCB2aWEgdGhlIGB2eGxhbl9uZXRkZXZfb3BzYCwgd2hpY2ggYXJlIG5ldGxpbmsgZnVuY3Rpb25zLiBTbyB0aGF0J3MgcmVhY2hhYmxlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY2MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6MzEuNDIxMjIyMDdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NTc5NDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZ4bGFuX2ZkYl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdnhsYW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTExNTg9c3RhdGljIGludCB2eGxhbl9mZGJfcGFyc2Uoc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTI0NC0vKiBBZGQgc3RhdGljIGVudHJ5ICh2aWEgbmV0bGluaykgKi9cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTI0NTpzdGF0aWMgaW50IHZ4bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTEyNDYtXFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MzMwOT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZ4bGFuX25ldGRldl9ldGhlcl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzMxOC1cXHQubmRvX3NldF9tYWNfYWRkcmVzc1xcdD0gZXRoX21hY19hZGRyLFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozMzE5OlxcdC5uZG9fZmRiX2FkZFxcdFxcdD0gdnhsYW5fZmRiX2FkZCxcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzMyMC1cXHQubmRvX2ZkYl9kZWxcXHRcXHQ9IHZ4bGFuX2ZkYl9kZWxldGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUwOjMxLjQ4NzgwNTc0OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMDUyMTE2NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWWExBTiBGREIgYW5kIFZOSSBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGB2eGxhbl9mZGJfYWRkYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSBpdCdzIGRlZmluZWQgaW4gdGhyZWUgZGlmZmVyZW50IHBsYWNlcywgYWxsIHRocm91Z2ggdGhlIGBuZG9fZmRiX2FkZGAgbmV0ZGV2X29wcyBzdHJ1Y3R1cmUuIFRoZSBmYWN0IHRoYXQgaXRzIGFkZHJlc3MgaXMgdGFrZW4gc29tZXdoZXJlIG1lYW5zIGl0J3MgZGVmaW5pdGVseSAqbm90KiBpbmxpbmVkLCB0aGF0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyLiBOb3csIEknbSBzaGlmdGluZyBteSBmb2N1cyB0byBgdnhsYW5fdm5pX2FkZGAuIFRoZSBxdWVzdGlvbiBpcywgaXMgaXRzIGFkZHJlc3MgYmVpbmcgdXNlZCBzb21ld2hlcmUsIG1ha2luZyBpbmxpbmluZyBpbXBvc3NpYmxlLCBvciBjYW4gd2UgcG90ZW50aWFsbHkgZXhwZWN0IGFuIGlubGluZWQgaW1wbGVtZW50YXRpb24/XG5cblRvIGZpZ3VyZSB0aGlzIG91dCwgSSBuZWVkIHRvIHRyYWNlIGl0cyBjYWxscy4gTGV0J3Mgc2VlLi4uIGxvb2tpbmcgYXQgYHZ4bGFuX3ZuaWZpbHRlci5jYCwgSSBzZWUgYHZ4bGFuX3ZuaV9hZGRfZGVsYCBjYWxscyBgdnhsYW5fdm5pX2FkZGAuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYHZ4bGFuX3ZuaV9hZGRfZGVsYCBpdHNlbGYgaXMgaW5saW5lZCB3aXRoaW4gYHZ4bGFuX3Byb2Nlc3Nfdm5pX2ZpbHRlcmAuIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIFRvIGdldCBhIGNsZWFyIHBpY3R1cmUsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGJsb2NrIGFyb3VuZCBsaW5lcyA4NTAtODgwIGluIGBkcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY2AuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAyNCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDozNC41Mzk5MjQ4NDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODUwOlxcdFxcdHJldHVybiAwO1xcbiA4NTE6XFx0b3V0OlxcbiA4NTI6XFx0XFx0cmV0dXJuIGVycjtcXG4gODUzOlxcdH1cXG4gODU0OlxcdFxcbiA4NTU6XFx0c3RhdGljIGludCB2eGxhbl92bmlfYWRkX2RlbChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgX191MzIgc3RhcnRfdm5pLFxcbiA4NTY6XFx0XFx0XFx0XFx0ICAgICBfX3UzMiBlbmRfdm5pLCB1bmlvbiB2eGxhbl9hZGRyICpncm91cCxcXG4gODU3OlxcdFxcdFxcdFxcdCAgICAgaW50IGNtZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA4NTg6XFx0e1xcbiA4NTk6XFx0XFx0c3RydWN0IHZ4bGFuX3ZuaV9ncm91cCAqdmc7XFxuIDg2MDpcXHRcXHRpbnQgdiwgZXJyID0gMDtcXG4gODYxOlxcdFxcbiA4NjI6XFx0XFx0dmcgPSBydG5sX2RlcmVmZXJlbmNlKHZ4bGFuLVxcdTAwM2V2bmlncnApO1xcbiA4NjM6XFx0XFxuIDg2NDpcXHRcXHRmb3IgKHYgPSBzdGFydF92bmk7IHYgXFx1MDAzYz0gZW5kX3ZuaTsgdisrKSB7XFxuIDg2NTpcXHRcXHRcXHRzd2l0Y2ggKGNtZCkge1xcbiA4NjY6XFx0XFx0XFx0Y2FzZSBSVE1fTkVXVFVOTkVMOlxcbiA4Njc6XFx0XFx0XFx0XFx0ZXJyID0gdnhsYW5fdm5pX2FkZCh2eGxhbiwgdmcsIHYsIGdyb3VwLCBleHRhY2spO1xcbiA4Njg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDg2OTpcXHRcXHRcXHRjYXNlIFJUTV9ERUxUVU5ORUw6XFxuIDg3MDpcXHRcXHRcXHRcXHRlcnIgPSB2eGxhbl92bmlfZGVsKHZ4bGFuLCB2ZywgdiwgZXh0YWNrKTtcXG4gODcxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA4NzI6XFx0XFx0XFx0ZGVmYXVsdDpcXG4gODczOlxcdFxcdFxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbiA4NzQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDg3NTpcXHRcXHRcXHR9XFxuIDg3NjpcXHRcXHRcXHRpZiAoZXJyKVxcbiA4Nzc6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDg3ODpcXHRcXHR9XFxuIDg3OTpcXHRcXG4gODgwOlxcdFxcdHJldHVybiAwO1xcbiA4ODE6XFx0b3V0OlxcbiA4ODI6XFx0XFx0cmV0dXJuIGVycjtcXG4gODgzOlxcdH1cXG4gODg0OlxcdFxcbiA4ODU6XFx0c3RhdGljIGludCB2eGxhbl9wcm9jZXNzX3ZuaV9maWx0ZXIoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuIDg4NjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5sYXR0ciAqbmx2bmlmaWx0ZXIsXFxuIDg4NzpcXHRcXHRcXHRcXHRcXHQgICAgaW50IGNtZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA4ODg6XFx0e1xcbiA4ODk6XFx0XFx0c3RydWN0IG5sYXR0ciAqdmF0dHJzW1ZYTEFOX1ZOSUZJTFRFUl9FTlRSWV9NQVggKyAxXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6MzQuNTQwMDE0NDU2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQ1MjQ4NzgxMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVlhMQU4gU3ltYm9sIEJlaGF2aW9yKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGVzZSBWWExBTiBzeW1ib2xzLiBGaXJzdCBvZmYsIEknbSBjZXJ0YWluIHRoYXQgYHZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzYCBpcyAqbm90KiBpbmxpbmVkLiBJdCdzIHRoZSBuZXRsaW5rIGVudHJ5IHBvaW50LCBhbmQgdGhhdCdzIGEgZGVhZCBnaXZlYXdheS4gVGhlIGNvbXBpbGVyIHdvbid0IG9wdGltaXplIHRoYXQgYXdheTsgaXQgbmVlZHMgdG8gYmUgYWNjZXNzaWJsZSBhcyBhIGRpc3RpbmN0IHN5bWJvbC4gYHZ4bGFuX3ZuaV9hZGRgIGlzIGEgYml0IHRyaWNraWVyLiBJdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBhbmQgd2hpbGUgaXQncyBhIGRlY2VudC1zaXplZCBvbmUsIGFyb3VuZCA5MCBsaW5lcywgc28gdGhlIGNvbXBpbGVyICptaWdodCogaW5saW5lIGl0LCBkZXBlbmRpbmcgb24gdGhlIGNpcmN1bXN0YW5jZXMuICBJdCdzIHdvcnRoIG5vdGluZy5cblxuSG93ZXZlciwgYHZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzYCAqd2lsbCogZXhpc3QgYXMgYSBzeW1ib2wsIGFuZCBpdCdzIHRoZSBtYWluIHBvaW50IG9mIGVudHJ5IHZpYSBuZXRsaW5rLiAgTm93LCBgdnhsYW5fZmRiX3VwZGF0ZWAgaXMgYSB0b3RhbGx5IGRpZmZlcmVudCBiZWFzdC4gIEl0J3MgZ2xvYmFsLCBkZWZpbmVkIGluIGB2eGxhbl9wcml2YXRlLmhgLCBhbmQgdXNlZCBpbiBtdWx0aXBsZSBjb21waWxhdGlvbiB1bml0czogYHZ4bGFuX2NvcmUuY2AgYW5kIGB2eGxhbl92bmlmaWx0ZXIuY2AuICBUaGF0IG1lYW5zIG5vIGNyb3NzLXVuaXQgaW5saW5pbmcgaXMgaGFwcGVuaW5nLCBlbmQgb2Ygc3RvcnkhXG5cbkFuZCBmaW5hbGx5LCBgdnhsYW5fZmRiX2FkZGAgaXMgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXRzIGFkZHJlc3MgaXMgdGFrZW4gYW5kIGFzc2lnbmVkIHRvIGEgYG5kb19mZGJfYWRkYCBzdHJ1Y3QuIFRoYXQgZ3VhcmFudGVlcyBpdCB3aWxsIGhhdmUgaXRzIG93biBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcyBpbiBib3RoIHRoZSBgdm1saW51eGAgaW1hZ2UgYW5kIHRoZSBgdnhsYW4ua29gIG1vZHVsZS5cblxuTm93LCBJIHNob3VsZCBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gTGV0J3MgbG9vayBhdCBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZm9yIFZYTEFOLiBPa2F5LCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBWWExBTmAgcmVxdWlyZXMgYElORVRgLCBhbmQgaXQgYHNlbGVjdGBzIGBORVRfVURQX1RVTk5FTGAgYW5kIGBHUk9fQ0VMTFNgLiBHb29kLlxuXG5JIHNob3VsZCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIGB2eGxhbl92bmlmaWx0ZXIuY2AgZG9lc24ndCBoYXZlIGFueSBhZGRpdGlvbmFsIGNvbmZpZyByZXF1aXJlbWVudHMuICBMZXQncyB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYHMgaW4gdGhlIGNvZGUgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODExNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUwOjM5LjA2NDg5NTMxNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyNTA4NDAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6MzkuMTIzMTU0Nzc0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2NzI1MTE1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVlhMQU4gRmlsdGVyaW5nIENvbmZpZ3VyYXRpb24gRGl2ZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGB2eGxhbl92bmlmaWx0ZXIuY2AgZmlsZS4gSSdtIGdsYWQgdG8gc2VlIHRoZXJlIGFyZSBubyBgI2lmZGVmc2AgaW4gaXQg4oCTIHRoYXQncyBhIGdvb2Qgc3RhcnQuIEtlZXBpbmcgdGhpbmdzIGNsZWFuIGxpa2UgdGhhdCBhbHdheXMgbWFrZXMgbWFpbnRlbmFuY2UgZWFzaWVyIGRvd24gdGhlIGxpbmUuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmaWx0ZXJpbmcgbWVjaGFuaXNtIGlzIGFjdHVhbGx5IGJlaW5nIGNvbnRyb2xsZWQsIG15IG5leHQgc3RlcCBpcyBjbGVhci4gSSdsbCBuZWVkIHRvIGdvIGh1bnRpbmcgZm9yIGFsbCB0aGUgYENPTkZJR19gIHJlZmVyZW5jZXMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvdnhsYW5gIGRpcmVjdG9yeS4gVGhhdCdzIHdoZXJlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgZmVhdHVyZSBmbGFncyB3aWxsIGJlIGRlZmluZWQuIFVuZGVyc3RhbmRpbmcgdGhvc2Ugc2V0dGluZ3MgaXMgZ29pbmcgdG8gYmUga2V5IHRvIHNlZWluZyBob3cgdGhpcyBmaWx0ZXIgaXMgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIGNvbmZpZ3VyZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRob3NlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg5NTMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDo0MS43OTU2NzA2NzRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjM3NjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdnhsYW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vTWFrZWZpbGUtNC1cXG5kcml2ZXJzL25ldC92eGxhbi9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19WWExBTikgKz0gdnhsYW4ub1xcbmRyaXZlcnMvbmV0L3Z4bGFuL01ha2VmaWxlLTYtXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzItXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjMzOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zNC0jaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl90dW5uZWwuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xMDA9c3RhdGljIHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuX3ZzX2ZpbmRfdm5pKHN0cnVjdCB2eGxhbl9zb2NrICp2cyxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMjMtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjEyNDpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikpIHtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTI1LVxcdFxcdFxcdGNvbnN0IHN0cnVjdCB2eGxhbl9jb25maWcgKmNmZyA9IFxcdTAwMjZub2RlLVxcdTAwM2V2eGxhbi1cXHUwMDNlY2ZnO1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTExNTg9c3RhdGljIGludCB2eGxhbl9mZGJfcGFyc2Uoc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTE4My1cXHRcXHRcXHRpcC1cXHUwMDNlc2Euc2FfZmFtaWx5ID0gQUZfSU5FVDtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTE4NDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTE4NS1cXHRcXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTE0NDI9c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIHZ4bGFuX3Nub29wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTQ1NC1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTQ1NTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTQ1Ni1cXHRpZiAoc3JjX2lwLVxcdTAwM2VzYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xNTI2PXN0YXRpYyB2b2lkIHZ4bGFuX3NvY2tfcmVsZWFzZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbilcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNTI4LVxcdHN0cnVjdCB2eGxhbl9zb2NrICpzb2NrNCA9IHJ0bmxfZGVyZWZlcmVuY2UodnhsYW4tXFx1MDAzZXZuNF9zb2NrKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTUyOTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTUzMC1cXHRzdHJ1Y3QgdnhsYW5fc29jayAqc29jazYgPSBydG5sX2RlcmVmZXJlbmNlKHZ4bGFuLVxcdTAwM2V2bjZfc29jayk7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTU0Ni1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTU0NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTU0OC1cXHRpZiAoX192eGxhbl9zb2NrX3JlbGVhc2VfcHJlcChzb2NrNikpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xNjA3PXN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB2eGxhbl9zZXRfbWFjKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTE2MjUtXFx0XFx0c2FkZHIuc2Euc2FfZmFtaWx5ID0gQUZfSU5FVDtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTYyNjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTYyNy1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTE2NDA9c3RhdGljIGJvb2wgdnhsYW5fZWNuX2RlY2Fwc3VsYXRlKHN0cnVjdCB2eGxhbl9zb2NrICp2cywgdm9pZCAqb2lwaCxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNjQ2LVxcdFxcdGVyciA9IElQX0VDTl9kZWNhcHN1bGF0ZShvaXBoLCBza2IpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoxNjQ3OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNjQ4LVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xODYwPXN0YXRpYyBpbnQgYXJwX3JlZHVjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgdm5pKVxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTE5NTYtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE5NTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTE5NTgtc3RhdGljIHN0cnVjdCBza19idWZmICp2eGxhbl9uYV9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnJlcXVlc3QsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MjEyND1zdGF0aWMgYm9vbCByb3V0ZV9zaG9ydGNpcmN1aXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yMTUzLVxcdH1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MjE1NDojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjE1NS1cXHRjYXNlIEVUSF9QX0lQVjY6XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MjI4NT1zdGF0aWMgdm9pZCB2eGxhbl9lbmNhcF9ieXBhc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHZ4bGFuX2RldiAqc3JjX3Z4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTIzMDEtXFx0XFx0bG9vcGJhY2suc2Euc2FfZmFtaWx5ID0gIEFGX0lORVQ7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjIzMDI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTIzMDMtXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0yMzM1PXN0YXRpYyBpbnQgZW5jYXBfYnlwYXNzX2lmX2xvY2FsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjM0MS17XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjIzNDI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTIzNDMtXFx0LyogSVB2NiBydC1mbGFncyBhcmUgY2hlY2tlZCBhZ2FpbnN0IFJURl9MT0NBTCwgYnV0IHRoZSB2YWx1ZSBvZlxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTIzNzQ9dm9pZCB2eGxhbl94bWl0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI0NTYtXFx0XFx0XFx0dWRwX3N1bSA9ICEoZmxhZ3MgXFx1MDAyNiBWWExBTl9GX1VEUF9aRVJPX0NTVU02X1RYKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MjQ1NzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjQ1OC1cXHRcXHRzd2l0Y2ggKHZ4bGFuLVxcdTAwM2VjZmcubGFiZWxfcG9saWN5KSB7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjU3OS1cXHRcXHRcXHRcXHQgICAgaXBjYl9mbGFncyk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjI1ODA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI1ODEtXFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0yNzU1PXN0YXRpYyBuZXRkZXZfdHhfdCB2eGxhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjc4Ny1cXHRcXHRcXHRyZXR1cm4gYXJwX3JlZHVjZShkZXYsIHNrYiwgdm5pKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6Mjc4ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjc4OS1cXHRcXHRlbHNlIGlmIChudG9ocyhldGgtXFx1MDAzZWhfcHJvdG8pID09IEVUSF9QX0lQVjYgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0yOTE0PXN0YXRpYyB2b2lkIHZ4bGFuX3ZzX2RlbF9kZXYoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjkxOC1cXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNnZ4bGFuLVxcdTAwM2VobGlzdDQuaGxpc3QpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyOTE5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yOTIwLVxcdGhsaXN0X2RlbF9pbml0X3JjdShcXHUwMDI2dnhsYW4tXFx1MDAzZWhsaXN0Ni5obGlzdCk7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MzI1OT1zdGF0aWMgaW50IHZ4bGFuX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzI4NC1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozMjg1OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMjg2LVxcdFxcdHN0cnVjdCB2eGxhbl9zb2NrICpzb2NrNiA9IHJjdV9kZXJlZmVyZW5jZSh2eGxhbi1cXHUwMDNldm42X3NvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTMyOTktXFx0XFx0ZHN0X3JlbGVhc2UobmRzdCk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjMzMDA6I2Vsc2UgLyogIUNPTkZJR19JUFY2ICovXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTMzMDEtXFx0XFx0cmV0dXJuIC1FUEZOT1NVUFBPUlQ7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MzY2NT1zdGF0aWMgaW50IF9fdnhsYW5fc29ja19hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIGJvb2wgaXB2NilcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zNjk0LVxcdFxcdHJldHVybiBQVFJfRVJSKHZzKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MzY5NTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzY5Ni1cXHRpZiAoaXB2Nikge1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTM3MTQ9c3RhdGljIGludCB2eGxhbl9zb2NrX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbilcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zNzIxLVxcdFJDVV9JTklUX1BPSU5URVIodnhsYW4tXFx1MDAzZXZuNF9zb2NrLCBOVUxMKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MzcyMjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzcyMy1cXHRSQ1VfSU5JVF9QT0lOVEVSKHZ4bGFuLVxcdTAwM2V2bjZfc29jaywgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9Mzc2OD1zdGF0aWMgaW50IHZ4bGFuX2NvbmZpZ192YWxpZGF0ZShzdHJ1Y3QgbmV0ICpzcmNfbmV0LCBzdHJ1Y3QgdnhsYW5fY29uZmlnICpjb25mLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTM4MTAtXFx0aWYgKGNvbmYtXFx1MDAzZXNhZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozODExOlxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSVBWNikpIHtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzgxMi1cXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzg2OC1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6Mzg2OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzg3MC1cXHRcXHRpZiAodXNlX2lwdjYpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zODg5LVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozODkwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zODkxLVxcdFxcdGlmIChjb25mLVxcdTAwM2VmbGFncyBcXHUwMDI2IFZYTEFOX0ZfSVBWNl9MSU5LTE9DQUwpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz00MDkxPXN0YXRpYyBpbnQgdnhsYW5fbmwyY29uZihzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDEyNi1cXHR9IGVsc2UgaWYgKGRhdGFbSUZMQV9WWExBTl9HUk9VUDZdKSB7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjQxMjc6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19JUFY2KSkge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy00MTI4LVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0FUVFIoZXh0YWNrLCB0YltJRkxBX1ZYTEFOX0dST1VQNl0sIFxcXCJJUHY2IHN1cHBvcnQgbm90IGVuYWJsZWQgaW4gdGhlIGtlcm5lbFxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQxNDktXFx0fSBlbHNlIGlmIChkYXRhW0lGTEFfVlhMQU5fTE9DQUw2XSkge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo0MTUwOlxcdFxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSVBWNikpIHtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDE1MS1cXHRcXHRcXHROTF9TRVRfRVJSX01TR19BVFRSKGV4dGFjaywgdGJbSUZMQV9WWExBTl9MT0NBTDZdLCBcXFwiSVB2NiBzdXBwb3J0IG5vdCBlbmFibGVkIGluIHRoZSBrZXJuZWxcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz00NTk4PXN0YXRpYyBpbnQgdnhsYW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDYxNC1cXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NDYxNTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDYxNi1cXHRcXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ2MzEtXFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjQ2MzI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ2MzMtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jPTk4PXN0YXRpYyB2b2lkIHZ4bGFuX2JyX21kYl9lbnRyeV9maWxsKGNvbnN0IHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmMtMTE2LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jOjExNzojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYy0xMTgtXFx0Y2FzZSBBRl9JTkVUNjpcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jPTM0ND1zdGF0aWMgYm9vbCB2eGxhbl9tZGJfaXNfdmFsaWRfc291cmNlKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIF9fYmUxNiBwcm90byxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jLTM2MS1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYzozNjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmMtMzYzLVxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jPTM5MD1zdGF0aWMgdm9pZCB2eGxhbl9tZGJfZ3JvdXBfc2V0KHN0cnVjdCB2eGxhbl9tZGJfZW50cnlfa2V5ICpncm91cCxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jLTM5OC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYzozOTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmMtNDAwLVxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYz0xNjIzPXN0cnVjdCB2eGxhbl9tZGJfZW50cnkgKnZ4bGFuX21kYl9lbnRyeV9za2JfZ2V0KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmMtMTY1MS1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYzoxNjUyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jLTE2NTMtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX21kYi5jLTE2ODUtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbWRiLmM6MTY4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tZGIuYy0xNjg3LVxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYz0xNz1pbnQgdnhsYW5faWdtcF9qb2luKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCB1bmlvbiB2eGxhbl9hZGRyICpyaXAsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYy0zNS1cXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jOjM2OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jLTM3LVxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYz01MD1pbnQgdnhsYW5faWdtcF9sZWF2ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgdW5pb24gdnhsYW5fYWRkciAqcmlwLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtNjgtXFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYzo2OTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYy03MC1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmM9MTIzPWJvb2wgdnhsYW5fZ3JvdXBfdXNlZChzdHJ1Y3QgdnhsYW5fbmV0ICp2biwgc3RydWN0IHZ4bGFuX2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtMTI5LVxcdHN0cnVjdCB2eGxhbl9zb2NrICpzb2NrNDtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYzoxMzA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtMTMxLVxcdHN0cnVjdCB2eGxhbl9zb2NrICpzb2NrNjtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jLTE0Mi1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYzoxNDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtMTQ0LVxcdHNvY2s2ID0gcnRubF9kZXJlZmVyZW5jZShkZXYtXFx1MDAzZXZuNl9zb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX211bHRpY2FzdC5jLTE1NS1cXHRcXHRcXHRjb250aW51ZTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9tdWx0aWNhc3QuYzoxNTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fbXVsdGljYXN0LmMtMTU3LVxcdFxcdGlmIChmYW1pbHkgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaD03Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCB2eGxhbl9yZHN0ICpmaXJzdF9yZW1vdGVfcnRubChzdHJ1Y3QgdnhsYW5fZmRiICpmZGIpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmgtNzgtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oOjc5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaC04MC1zdGF0aWMgaW5saW5lXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmg9MTE2PXN0YXRpYyBpbmxpbmUgYm9vbCB2eGxhbl9hZGRyX2lzX211bHRpY2FzdChjb25zdCB1bmlvbiB2eGxhbl9hZGRyICppcClcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaC0xMjMtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oOjEyNDojZWxzZSAvKiAhQ09ORklHX0lQVjYgKi9cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmgtMTI1LVxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9Mzk9c3RhdGljIHZvaWQgdnhsYW5fdnNfYWRkX2RlbF92bmlub2RlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNTAtXFx0XFx0XFx0aGxpc3RfZGVsX2luaXRfcmN1KFxcdTAwMjZ2LVxcdTAwM2VobGlzdDQuaGxpc3QpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjUxOiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTUyLVxcdFxcdGlmICghaGxpc3RfdW5oYXNoZWQoXFx1MDAyNnYtXFx1MDAzZWhsaXN0Ni5obGlzdCkpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy01Ny1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy01OS1cXHR2cyA9IHJ0bmxfZGVyZWZlcmVuY2UodnhsYW4tXFx1MDAzZXZuNl9zb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jPTcyPXZvaWQgdnhsYW5fdnNfYWRkX3ZuaWdycChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTg1LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2LCB0bXAsIFxcdTAwMjZ2Zy1cXHUwMDNldm5pX2xpc3QsIHZsaXN0KSB7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6ODY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtODctXFx0XFx0aWYgKGlwdjYpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz05Nz12b2lkIHZ4bGFuX3ZzX2RlbF92bmlncnAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0xMDgtXFx0XFx0aGxpc3RfZGVsX2luaXRfcmN1KFxcdTAwMjZ2LVxcdTAwM2VobGlzdDQuaGxpc3QpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjEwOTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy0xMTAtXFx0XFx0aGxpc3RfZGVsX2luaXRfcmN1KFxcdTAwMjZ2LVxcdTAwM2VobGlzdDYuaGxpc3QpO1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9MjQ3PXN0YXRpYyBib29sIHZ4bGFuX2ZpbGxfdm5pX2ZpbHRlcl9lbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjczLVxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzoyNzQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtMjc1LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz02OTY9c3RhdGljIHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdnhsYW5fdm5pX2FsbG9jKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNzEwLVxcdHZuaW5vZGUtXFx1MDAzZWhsaXN0NC52eGxhbiA9IHZ4bGFuO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjcxMTojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy03MTItXFx0dm5pbm9kZS1cXHUwMDNlaGxpc3Q2LnZ4bGFuID0gdnhsYW47XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz05NDI9dm9pZCB2eGxhbl92bmlncm91cF91bmluaXQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy05NTEtXFx0XFx0aGxpc3RfZGVsX2luaXRfcmN1KFxcdTAwMjZ2LVxcdTAwM2VobGlzdDQuaGxpc3QpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjk1MjojaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy05NTMtXFx0XFx0aGxpc3RfZGVsX2luaXRfcmN1KFxcdTAwMjZ2LVxcdTAwM2VobGlzdDYuaGxpc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MDo0MS44NDEzMTEzOTdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjQzMTg3MjU3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVlhMQU4gRXJyb3IgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBlbmFibGluZyBWWExBTiwgYW5kIElORVQgKGFuZCBvcHRpb25hbGx5IElQVjYsIGFzIGlzIHN0YW5kYXJkIHByYWN0aWNlIGZvciBmdXp6aW5nKSB3aWxsIGJyaW5nIHRoaXMgY29kZSBpbnRvIHRoZSBjb21waWxhdGlvbi4gVGltZSB0byBsYXkgaXQgb3V0IGNsZWFybHkuXG5cbkZpcnN0LCB0aGUga2V5IGNvbmZpZ3VyYXRpb25zOiBgRW5hYmxlQ29uZmlnczogW1wiVlhMQU5cIiwgXCJJTkVUXCJdYC5cblxuTm93LCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIEknbSBnb2luZyB0byBiZSBmb2N1c2VkIG9uIGFyZSB0aGVzZSwgYmVjYXVzZSB0aGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQ6XG5cbjEuICBgdnhsYW5fdm5pX2FkZGA6IFRoaXMgaXMgKnRoZSogY2VudHJhbCBmdW5jdGlvbiB3aGVyZSB0aGUgZXJyb3IgaGFuZGxpbmcgcm9sbGJhY2sgbG9naWMgaGFzIGJlZW4gaW50cm9kdWNlZC4gVGhlIHBhdGNoIGluY2x1ZGVzIGFuIGVycm9yIHBhdGggKGBlcnJfdm5pX2RlbDpgKSB0byB1bndpbmQgb3BlcmF0aW9ucyBwZXJmb3JtZWQgb24gZmFpbHVyZSB3aXRoaW4gYHZ4bGFuX3ZuaV9hZGRgLiBUaGUgdW53aW5kIGluY2x1ZGVzOiBkb2luZyBgX192eGxhbl9mZGJfZGVsZXRlYCwgYHJoYXNodGFibGVfcmVtb3ZlX2Zhc3RgLCBgX192eGxhbl92bmlfZGVsX2xpc3RgLCBgdnhsYW5fdnNfYWRkX2RlbF92bmlub2RlYCwgYW5kIGBjYWxsX3JjdWAuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBlbnN1cmluZyBhIGNsZWFuIHN0YXRlLlxuMi4gIGB2eGxhbl9mZGJfdXBkYXRlYDogVGhpcyBmdW5jdGlvbidzIHNpZ25hdHVyZSBhbmQgbG9naWMgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIG5vdyByZWNvcmQgd2hldGhlciBhIG5ldyBlbnRyeSB3YXMgY3JlYXRlZCAoYCpjcmVhdGVkID0gdHJ1ZWApLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgaXQgbGV0cyBtZSB0cmFjayBpZiBpdCdzIHRoZSBmaXJzdCB0aW1lIGFuIGVudHJ5IGlzIHdyaXR0ZW4uXG4zLiAgYHZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzYDogVGhpcyBmdW5jdGlvbiBpcyB0aGUgTmV0bGluayBlbnRyeSBwb2ludCBmb3IgYFJUTV9ORVdUVU5ORUxgIGFuZCBgUlRNX0RFTFRVTk5FTGAgcmVxdWVzdHMsIHdoaWNoIGV2ZW50dWFsbHkgdHJpZ2dlciB0aGUgYHZ4bGFuX3ZuaV9hZGRgIGZ1bmN0aW9uLiBTbyBmdXp6aW5nIHRoZSBOZXRsaW5rIGludGVyZmFjZSBpcyBpbXBvcnRhbnQgdG8gZXhlcmNpc2UgdGhlc2UgY29kZSBwYXRocy5cbjQuICBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2A6IFRoaXMgZnVuY3Rpb24gaXMgbW9kaWZpZWQgdG8gdHJhY2sgd2hldGhlciBhbiBlbnRyeSB3YXMgbmV3bHkgY3JlYXRlZCB2aWEgYSByZW1vdGUgZGVzdGluYXRpb24sIGFnYWluIGJ5IHRyYWNraW5nIHRoZSBgY3JlYXRlZGAgZmxhZy5cbjUuICBgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGVgOiBUaGlzIGlzIG1vZGlmaWVkIGluIHNpbWlsYXIgZmFzaGlvbiB0byBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AsIGJ1dCBmb3IgY3JlYXRpbmcgbmV3IGVudHJpZXMuXG5cbkkndmUgcmVjaGVja2VkIG15IHJlYXNvbmluZyBhbmQgY29uc3RyYWludHM6XG5cbiogICBUaGlzIGlzIGRlZmluaXRlbHkgYFdvcnRoRnV6emluZzogdHJ1ZWAuIFRoaXMgcGF0Y2ggZml4ZXMgYSBjcml0aWNhbCBlcnJvciB1bndpbmRpbmcgcHJvYmxlbSBpbiBWWExBTiBWTkkgZmlsdGVyIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgaXQgYWRkcmVzc2VzIGZhaWx1cmVzIHdpdGhpbiBgdnhsYW5fdm5pX2FkZCgpYCBkdXJpbmcgVk5JIG5vZGUgY3JlYXRpb24vY29uZmlndXJhdGlvbi4gVGhlIHBhdGNoIGFkZHMgYSBwcm9wZXIgZXJyb3IgcGF0aCB0aGF0IGNsZWFucyB1cCBWTkkgbm9kZXMsIGRlbGV0ZXMgRkRCIGVudHJpZXMsIGFuZCBmcmVlcyBtZW1vcnkgdmlhIFJDVSB3aGVuIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKClgIGZhaWxzLiBUaGUgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zLCBgdnhsYW5fZmRiX3VwZGF0ZSgpYCwgYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcoKWAsIGFuZCBgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUoKWAgbm93IHJlcG9ydCBpZiBhbiBlbnRyeSB3YXMgbmV3bHkgY3JlYXRlZC4gVGhpcyBjaGFuZ2VzIHZpcnR1YWwgbmV0d29ya2luZyBkcml2ZXIgbG9naWMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgKGBSVE1fTkVXVFVOTkVMYCwgYFJUTV9ORVdORUlHSGApLlxuKiAgIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBbXCJWWExBTlwiLCBcIklORVRcIl1gLlxuKiAgIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmU6XG4gICAgKiAgIGB2eGxhbl92bmlfYWRkYFxuICAgICogICBgdnhsYW5fZmRiX3VwZGF0ZWBcbiAgICAqICAgYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgXG4gICAgKiAgIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZWBcbiAgICAqICAgYHZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzYFxuXG5FdmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRoZSByZWFzb25pbmcgaXMgc29saWQsIGFuZCBJJ3ZlIHZlcmlmaWVkIHRoaXMgZGlyZWN0bHkgYWdhaW5zdCB0aGUga2VybmVsIHNvdXJjZS4gTm93IEkgY2FuIGludm9rZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTEwOCwiT3V0cHV0VG9rZW5zIjoyNTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6NDguMjczMTg2MjQ0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk5MzIzNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZYTEFOXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnhsYW5fdm5pX2FkZFwiLFxuICAgIFwidnhsYW5fZmRiX3VwZGF0ZVwiLFxuICAgIFwidnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ1wiLFxuICAgIFwidnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGVcIixcbiAgICBcInZ4bGFuX3ZuaWZpbHRlcl9wcm9jZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFZYTEFOIGRyaXZlciAocmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgcnRuZXRsaW5rIGNvbW1hbmRzIHN1Y2ggYXMgUlRNX05FV1RVTk5FTCBhbmQgUlRNX05FV05FSUdIKS4gSXQgdXBkYXRlcyB0aGUgRkRCIHVwZGF0ZSBsb2dpYyBhY3Jvc3MgdnhsYW5fZmRiX3VwZGF0ZSgpLCB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSgpLCBhbmQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZygpIHRvIHRyYWNrIHdoZW4gYW4gZW50cnkgaXMgbmV3bHkgY3JlYXRlZCwgYW5kIGltcGxlbWVudHMgYW4gZXJyb3Igcm9sbGJhY2sgcGF0aCBpbiB2eGxhbl92bmlfYWRkKCkgdGhhdCB0ZWFycyBkb3duIEZEQiBlbnRyaWVzLCB1bmxpbmtzIFZOSSBub2RlcywgYW5kIGZyZWVzIG1lbW9yeSB2aWEgUkNVIGlmIHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKSBmYWlscy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBsb2dpYyBhbHRlcmluZyBzdGF0ZSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBlcnJvci1oYW5kbGluZyBpbiB0aGUgdmlydHVhbCBuZXR3b3JraW5nIHN1YnN5c3RlbSwgbWFraW5nIGl0IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlhMQU5cIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2eGxhbl92bmlfYWRkXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZVwiLFxuICAgIFwidnhsYW5fdm5pZmlsdGVyX3Byb2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVlhMQU4gZHJpdmVyIChyZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBydG5ldGxpbmsgY29tbWFuZHMgc3VjaCBhcyBSVE1fTkVXVFVOTkVMIGFuZCBSVE1fTkVXTkVJR0gpLiBJdCB1cGRhdGVzIHRoZSBGREIgdXBkYXRlIGxvZ2ljIGFjcm9zcyB2eGxhbl9mZGJfdXBkYXRlKCksIHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKCksIGFuZCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKCkgdG8gdHJhY2sgd2hlbiBhbiBlbnRyeSBpcyBuZXdseSBjcmVhdGVkLCBhbmQgaW1wbGVtZW50cyBhbiBlcnJvciByb2xsYmFjayBwYXRoIGluIHZ4bGFuX3ZuaV9hZGQoKSB0aGF0IHRlYXJzIGRvd24gRkRCIGVudHJpZXMsIHVubGlua3MgVk5JIG5vZGVzLCBhbmQgZnJlZXMgbWVtb3J5IHZpYSBSQ1UgaWYgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpIGZhaWxzLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGxvZ2ljIGFsdGVyaW5nIHN0YXRlIG1hbmFnZW1lbnQsIHN5bmNocm9uaXphdGlvbiwgYW5kIGVycm9yLWhhbmRsaW5nIGluIHRoZSB2aXJ0dWFsIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBtYWtpbmcgaXQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6NDguMzUzMTI2NzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzUyNTU2NjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6NDguMzUzNTk0ODlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0Mzc1MjA4Mzk3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvci11bndpbmQgbG9naWMgdG8gdnhsYW5fdm5pX2FkZCgpIGlmIHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKSBmYWlscywgaW50cm9kdWNpbmcgYSBib29sZWFuIG91dC1wYXJhbWV0ZXIgKCdjcmVhdGVkJyAvICdmZGJfY3JlYXRlZCcpIGFjcm9zcyB2eGxhbl9mZGJfdXBkYXRlKCkgYW5kIGhlbHBlcnMgdG8gdHJhY2sgd2hldGhlciBhbiBGREIgZW50cnkgd2FzIGNyZWF0ZWQgc28gaXQgY2FuIGJlIHJvbGxlZCBiYWNrLlxcblxcbjEuIEtBU0FOIC8gTE9DS0RFUCBBcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggbW9kaWZpZXMgY2xlYW51cCBwYXRocyBhbmQgb2JqZWN0IGxpZmVjeWNsZSAodW53aW5kaW5nIGhhc2h0YWJsZSBpbnNlcnRpb24sIGxpc3QgYWRkaXRpb24sIHNvY2tldCBzdGF0ZSwgYW5kIHNjaGVkdWxpbmcgUkNVIGRlc3RydWN0aW9uIG9mIHZuaW5vZGUsIHBsdXMgZGVsZXRpbmcgRkRCIGVudHJpZXMgdW5kZXIgaGFzaF9sb2NrKS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgaGVyZSAoZS5nLiB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGxpc3QgY29ycnVwdGlvbiwgb3IgbG9ja2luZyBkaXNjcmVwYW5jaWVzKSBhcmUgYWRkcmVzc2VkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLlxcbjIuIEtNU0FOIEFwcGxpY2FiaWxpdHk6IEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGFuZCBpbmZvLWxlYWtzLiBUaGUgbmV3bHkgaW50cm9kdWNlZCB2YXJpYWJsZSAnYm9vbCBmZGJfY3JlYXRlZCA9IGZhbHNlOycgaW4gdnhsYW5fdm5pX2FkZCgpIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2ssIGFuZCB0aGUgY2FsbGVlIGZ1bmN0aW9ucyBvbmx5IGNvbmRpdGlvbmFsbHkgd3JpdGUgJypjcmVhdGVkID0gdHJ1ZScgd2l0aG91dCByZWFkaW5nIGZyb20gaXQgdW5pbml0aWFsaXplZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGhlYXAgYWxsb2NhdGlvbnMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgY3JlYXRlZCwgYW5kIG5vIGJyYW5jaGluZyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIGFuZCBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3Y2I5NzFmZTU1YWQ1YzkxOGNjYzk5YWI1Mjg0NDk1ODg1ZWM5NWJmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMjI6NDk6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcbmluZGV4IGJlOTVhZjY0YTFmNTEuLjA2NTJkYzQ3MWRjYTYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcbisrKyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1xuQEAgLTk3NCw3ICs5NzQsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdFx0XHQgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgdm5pLFxuIFx0XHRcdFx0ICAgICBfX3UzMiBpZmluZGV4LCBfX3UxNiBuZG1fZmxhZ3MsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCB2eGxhbl9mZGIgKmYsIHUzMiBuaGlkLFxuLVx0XHRcdFx0ICAgICBib29sIHN3ZGV2X25vdGlmeSxcbitcdFx0XHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRfX3UxNiBmZGJfZmxhZ3MgPSAobmRtX2ZsYWdzIFx1MDAyNiB+TlRGX1VTRSk7XG5AQCAtMTA0Miw2ICsxMDQyLDggQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFxuIFx0XHRpZiAocmMgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHRpZiAocmMgXHUwMDI2XHUwMDI2IGNyZWF0ZWQpXG4rXHRcdFx0KmNyZWF0ZWQgPSB0cnVlO1xuIFx0XHRub3RpZnkgfD0gcmM7XG4gXHR9XG4gXG5AQCAtMTA3OCw3ICsxMDgwLDcgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0XHRcdCAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncyxcbiBcdFx0XHRcdCAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSxcbiBcdFx0XHRcdCAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsXG4tXHRcdFx0XHQgICBib29sIHN3ZGV2X25vdGlmeSxcbitcdFx0XHRcdCAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdF9fdTE2IGZkYl9mbGFncyA9IChuZG1fZmxhZ3MgXHUwMDI2IH5OVEZfVVNFKTtcbkBAIC0xMTAxLDYgKzExMDMsOSBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0aWYgKHJjKVxuIFx0XHRnb3RvIGVycl9ub3RpZnk7XG4gXG4rXHRpZiAoY3JlYXRlZClcbitcdFx0KmNyZWF0ZWQgPSB0cnVlO1xuK1xuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX25vdGlmeTpcbkBAIC0xMTE0LDcgKzExMTksNyBAQCBpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0ICAgICBfX3UxNiBzdGF0ZSwgX191MTYgZmxhZ3MsXG4gXHRcdCAgICAgX19iZTE2IHBvcnQsIF9fYmUzMiBzcmNfdm5pLCBfX2JlMzIgdm5pLFxuIFx0XHQgICAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsXG4tXHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksXG4rXHRcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXG4gXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCB2eGxhbl9mZGIgKmY7XG5AQCAtMTEyOSw3ICsxMTM0LDggQEAgaW50IHZ4bGFuX2ZkYl91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXG4gXHRcdHJldHVybiB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHZ4bGFuLCBpcCwgc3RhdGUsIGZsYWdzLCBwb3J0LFxuIFx0XHRcdFx0XHRcdCB2bmksIGlmaW5kZXgsIG5kbV9mbGFncywgZixcbi1cdFx0XHRcdFx0XHQgbmhpZCwgc3dkZXZfbm90aWZ5LCBleHRhY2spO1xuK1x0XHRcdFx0XHRcdCBuaGlkLCBzd2Rldl9ub3RpZnksIGNyZWF0ZWQsXG4rXHRcdFx0XHRcdFx0IGV4dGFjayk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAoIShmbGFncyBcdTAwMjYgTkxNX0ZfQ1JFQVRFKSlcbiBcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbkBAIC0xMTM3LDcgKzExNDMsNyBAQCBpbnQgdnhsYW5fZmRiX3VwZGF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0cmV0dXJuIHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHZ4bGFuLCBtYWMsIGlwLCBzdGF0ZSwgZmxhZ3MsXG4gXHRcdFx0XHRcdCAgICAgICBwb3J0LCBzcmNfdm5pLCB2bmksIGlmaW5kZXgsXG4gXHRcdFx0XHRcdCAgICAgICBuZG1fZmxhZ3MsIG5oaWQsIHN3ZGV2X25vdGlmeSxcbi1cdFx0XHRcdFx0ICAgICAgIGV4dGFjayk7XG4rXHRcdFx0XHRcdCAgICAgICBjcmVhdGVkLCBleHRhY2spO1xuIFx0fVxuIH1cbiBcbkBAIC0xMjc1LDcgKzEyODEsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRlcnIgPSB2eGxhbl9mZGJfdXBkYXRlKHZ4bGFuLCBhZGRyLCBcdTAwMjZpcCwgbmRtLVx1MDAzZW5kbV9zdGF0ZSwgZmxhZ3MsXG4gXHRcdFx0ICAgICAgIHBvcnQsIHNyY192bmksIHZuaSwgaWZpbmRleCxcbiBcdFx0XHQgICAgICAgbmRtLVx1MDAzZW5kbV9mbGFncyB8IE5URl9WWExBTl9BRERFRF9CWV9VU0VSLFxuLVx0XHRcdCAgICAgICBuaGlkLCB0cnVlLCBleHRhY2spO1xuK1x0XHRcdCAgICAgICBuaGlkLCB0cnVlLCBOVUxMLCBleHRhY2spO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbiBcbiBcdGlmICghZXJyKVxuQEAgLTE0OTEsNyArMTQ5Nyw4IEBAIHN0YXRpYyBlbnVtIHNrYl9kcm9wX3JlYXNvbiB2eGxhbl9zbm9vcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0XHQgdnhsYW4tXHUwMDNlY2ZnLmRzdF9wb3J0LFxuIFx0XHRcdFx0XHQgdm5pLFxuIFx0XHRcdFx0XHQgdnhsYW4tXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX3ZuaSxcbi1cdFx0XHRcdFx0IGlmaW5kZXgsIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMKTtcbitcdFx0XHRcdFx0IGlmaW5kZXgsIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMLFxuK1x0XHRcdFx0XHQgTlVMTCk7XG4gXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4gXHR9XG4gXG5AQCAtNDAzNCw3ICs0MDQxLDggQEAgc3RhdGljIGludCB2eGxhbl9kZXZfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgICAgICBkc3QtXHUwMDNlcmVtb3RlX3ZuaSxcbiBcdFx0XHRcdCAgICAgICBkc3QtXHUwMDNlcmVtb3RlX3ZuaSxcbiBcdFx0XHRcdCAgICAgICBkc3QtXHUwMDNlcmVtb3RlX2lmaW5kZXgsXG4tXHRcdFx0XHQgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIGV4dGFjayk7XG4rXHRcdFx0XHQgICAgICAgTlRGX1NFTEYsIDAsIHRydWUsIE5VTEwsXG4rXHRcdFx0XHQgICAgICAgZXh0YWNrKTtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIHVubGluaztcbkBAIC00NDg1LDcgKzQ0OTMsOCBAQCBzdGF0aWMgaW50IHZ4bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdFx0XHRcdFx0ICAgICAgIHZ4bGFuLVx1MDAzZWNmZy5kc3RfcG9ydCxcbiBcdFx0XHRcdFx0ICAgICAgIGNvbmYudm5pLCBjb25mLnZuaSxcbiBcdFx0XHRcdFx0ICAgICAgIGNvbmYucmVtb3RlX2lmaW5kZXgsXG4tXHRcdFx0XHRcdCAgICAgICBOVEZfU0VMRiwgMCwgdHJ1ZSwgZXh0YWNrKTtcbitcdFx0XHRcdFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBOVUxMLFxuK1x0XHRcdFx0XHQgICAgICAgZXh0YWNrKTtcbiBcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ2eGxhbi1cdTAwM2VoYXNoX2xvY2spO1xuIFx0XHRcdFx0bmV0ZGV2X2FkamFjZW50X2NoYW5nZV9hYm9ydChkc3QtXHUwMDNlcmVtb3RlX2RldixcbkBAIC00ODA2LDcgKzQ4MTUsNyBAQCB2eGxhbl9mZGJfZXh0ZXJuYWxfbGVhcm5fYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0ICAgICAgIGZkYl9pbmZvLVx1MDAzZXJlbW90ZV92bmksXG4gXHRcdFx0ICAgICAgIGZkYl9pbmZvLVx1MDAzZXJlbW90ZV9pZmluZGV4LFxuIFx0XHRcdCAgICAgICBOVEZfVVNFIHwgTlRGX1NFTEYgfCBOVEZfRVhUX0xFQVJORUQsXG4tXHRcdFx0ICAgICAgIDAsIGZhbHNlLCBleHRhY2spO1xuK1x0XHRcdCAgICAgICAwLCBmYWxzZSwgTlVMTCwgZXh0YWNrKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaCBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaFxuaW5kZXggYjFlZWMyMjE2MzYwOC4uZTUyNzU1OTIzYzMxMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ByaXZhdGUuaFxuKysrIGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oXG5AQCAtMTkzLDcgKzE5Myw4IEBAIGludCB2eGxhbl9mZGJfdXBkYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0XHQgICAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncyxcbiBcdFx0ICAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHNyY192bmksIF9fYmUzMiB2bmksXG4gXHRcdCAgICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLCB1MzIgbmhpZCxcbi1cdFx0ICAgICBib29sIHN3ZGV2X25vdGlmeSwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbitcdFx0ICAgICBib29sIHN3ZGV2X25vdGlmeSwgYm9vbCAqY3JlYXRlZCxcbitcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuIHZvaWQgdnhsYW5feG1pdF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgIF9fYmUzMiBkZWZhdWx0X3ZuaSwgc3RydWN0IHZ4bGFuX3Jkc3QgKnJkc3QsIGJvb2wgZGlkX3JzYyk7XG4gaW50IHZ4bGFuX3ZuaV9pbl91c2Uoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY1xuaW5kZXggZGQ5NDA4NWUwODg2NS4uOWNjOTMyYzYxNzdkMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jXG4rKysgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY1xuQEAgLTQ3Myw2ICs0NzMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdm5pX2ZpbHRlcl9wb2xpY3lbVlhMQU5fVk5JRklMVEVSX01BWCArIDFdID0ge1xuIHN0YXRpYyBpbnQgdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBfX2JlMzIgdm5pLFxuIFx0XHRcdFx0XHQgIHVuaW9uIHZ4bGFuX2FkZHIgKm9sZF9yZW1vdGVfaXAsXG4gXHRcdFx0XHRcdCAgdW5pb24gdnhsYW5fYWRkciAqcmVtb3RlX2lwLFxuK1x0XHRcdFx0XHQgIGJvb2wgKmZkYl9jcmVhdGVkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgdnhsYW5fcmRzdCAqZHN0ID0gXHUwMDI2dnhsYW4tXHUwMDNlZGVmYXVsdF9kc3Q7XG5AQCAtNDg4LDcgKzQ4OSw4IEBAIHN0YXRpYyBpbnQgdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBfX2JlMzIgdm5pLFxuIFx0XHRcdFx0ICAgICAgIHZuaSxcbiBcdFx0XHRcdCAgICAgICB2bmksXG4gXHRcdFx0XHQgICAgICAgZHN0LVx1MDAzZXJlbW90ZV9pZmluZGV4LFxuLVx0XHRcdFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBleHRhY2spO1xuK1x0XHRcdFx0ICAgICAgIE5URl9TRUxGLCAwLCB0cnVlLCBmZGJfY3JlYXRlZCxcbitcdFx0XHRcdCAgICAgICBleHRhY2spO1xuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbiBcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTUxMiw2ICs1MTQsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdFx0XHQgIHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSxcbiBcdFx0XHRcdCAgdW5pb24gdnhsYW5fYWRkciAqZ3JvdXAsXG4gXHRcdFx0XHQgIGJvb2wgY3JlYXRlLCBib29sICpjaGFuZ2VkLFxuK1x0XHRcdFx0ICBib29sICpmZGJfY3JlYXRlZCxcbiBcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCB2eGxhbl9uZXQgKnZuID0gbmV0X2dlbmVyaWModnhsYW4tXHUwMDNlbmV0LCB2eGxhbl9uZXRfaWQpO1xuQEAgLTU0NSw3ICs1NDgsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0ID0gdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHZ4bGFuLCB2bmlub2RlLVx1MDAzZXZuaSxcbi1cdFx0XHRcdFx0ICAgICBvbGRyaXAsIG5ld3JpcCxcbitcdFx0XHRcdFx0ICAgICBvbGRyaXAsIG5ld3JpcCwgZmRiX2NyZWF0ZWQsXG4gXHRcdFx0XHRcdCAgICAgZXh0YWNrKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0O1xuQEAgLTU5OSw3ICs2MDIsNyBAQCBpbnQgdnhsYW5fdm5pbGlzdF91cGRhdGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdFx0cmV0ID0gdnhsYW5fdXBkYXRlX2RlZmF1bHRfZmRiX2VudHJ5KHZ4bGFuLCB2ZW50LVx1MDAzZXZuaSxcbiBcdFx0XHRcdFx0XHRcdCAgICAgb2xkX3JlbW90ZV9pcCxcbiBcdFx0XHRcdFx0XHRcdCAgICAgbmV3X3JlbW90ZV9pcCxcbi1cdFx0XHRcdFx0XHRcdCAgICAgZXh0YWNrKTtcbitcdFx0XHRcdFx0XHRcdCAgICAgTlVMTCwgZXh0YWNrKTtcbiBcdFx0XHRpZiAocmV0KVxuIFx0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuQEAgLTY1NSw3ICs2NTgsNyBAQCBzdGF0aWMgaW50IHZ4bGFuX3ZuaV91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0cmV0ID0gdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCh2eGxhbiwgdm5pbm9kZSwgZ3JvdXAsIGZhbHNlLCBjaGFuZ2VkLFxuLVx0XHRcdFx0ICAgICBleHRhY2spO1xuK1x0XHRcdFx0ICAgICBOVUxMLCBleHRhY2spO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC03MTgsNiArNzIxLDggQEAgc3RhdGljIHZvaWQgdnhsYW5fdm5pX2ZyZWUoc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlKVxuIFx0a2ZyZWUodm5pbm9kZSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqcmN1KTtcbitcbiBzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdFx0IHN0cnVjdCB2eGxhbl92bmlfZ3JvdXAgKnZnLFxuIFx0XHRcdCB1MzIgdm5pLCB1bmlvbiB2eGxhbl9hZGRyICpncm91cCxcbkBAIC03MjUsNiArNzMwLDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIHtcbiBcdHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZTtcbiBcdF9fYmUzMiB2ID0gY3B1X3RvX2JlMzIodm5pKTtcbitcdGJvb2wgZmRiX2NyZWF0ZWQgPSBmYWxzZTtcbiBcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuIFx0aW50IGVyciA9IDA7XG4gXG5AQCAtNzU1LDEwICs3NjEsNDcgQEAgc3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuIFx0XHR2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGUodnhsYW4sIHZuaW5vZGUsIGZhbHNlKTtcbiBcbiBcdGVyciA9IHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAodnhsYW4sIHZuaW5vZGUsIGdyb3VwLCB0cnVlLCBcdTAwMjZjaGFuZ2VkLFxuLVx0XHRcdFx0ICAgICBleHRhY2spO1xuK1x0XHRcdFx0ICAgICBcdTAwMjZmZGJfY3JlYXRlZCwgZXh0YWNrKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX3ZuaV9kZWw7XG4gXG4gXHR2eGxhbl92bmlmaWx0ZXJfbm90aWZ5KHZ4bGFuLCB2bmlub2RlLCBSVE1fTkVXVFVOTkVMKTtcbiBcbitcdHJldHVybiAwO1xuK1xuK2Vycl92bmlfZGVsOlxuK1x0LyogVW5kbyBvbmx5IHRoZSBkZWZhdWx0IEZEQiBlbnRyeSB0aGlzIGFkZCBpbnN0YWxsZWQuICBBbiBlbnRyeSB0aGF0XG4rXHQgKiB3YXMgYWxyZWFkeSB0aGVyZSwgd2hldGhlciBhZGRlZCBvdXQgb2YgYmFuZCBvciBieSBhbm90aGVyIFZOSSwgaXNcbitcdCAqIGxlZnQgYWxvbmUuXG4rXHQgKlxuK1x0ICogTm8gbWVtYmVyc2hpcCBoYXMgdG8gYmUgZ2l2ZW4gYmFjazogdnhsYW5faWdtcF9sZWF2ZSgpIGlzIGdhdGVkIG9uXG4rXHQgKiB2eGxhbl9hZGRyX211bHRpY2FzdChcdTAwMjZvbGRfcmVtb3RlX2lwKSwgYW5kIG9sZF9yZW1vdGVfaXAgaXMgYSBjb3B5XG4rXHQgKiBvZiB0aGUgcmVtb3RlIElQIG9mIGEgbm9kZSB0aGlzIGFkZCBqdXN0IGFsbG9jYXRlZCwgc28gaXQgaXMgemVyby5cbitcdCAqXG4rXHQgKiBUaGUgYWRkcmVzcyBwaWNrZWQgYmVsb3cgaXMgdGhlIG9uZSB0aGUgZW50cnkgd2FzIGluc3RhbGxlZFxuK1x0ICogYWdhaW5zdC4gIElmIHRoZSByZXF1ZXN0IGNhcnJpZWQgYSBncm91cCwgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpXG4rXHQgKiBjb3BpZWQgaXQgaW50byB2bmlub2RlLVx1MDAzZXJlbW90ZV9pcCBiZWZvcmUgdGhlIGpvaW4gY291bGQgZmFpbDsgaWZcbitcdCAqIGl0IGRpZCBub3QsIHRoYXQgY29weSB3YXMgc2tpcHBlZCBhbmQgdGhlIGVudHJ5IHdlbnQgdG8gdGhlIGRldmljZVxuK1x0ICogZGVmYXVsdC5cbitcdCAqL1xuK1x0aWYgKGZkYl9jcmVhdGVkKSB7XG4rXHRcdHVuaW9uIHZ4bGFuX2FkZHIgKnJpcCA9IHZ4bGFuX2FkZHJfYW55KFx1MDAyNnZuaW5vZGUtXHUwMDNlcmVtb3RlX2lwKSA/XG4rXHRcdFx0XHRcdFx1MDAyNnZ4bGFuLVx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pcCA6XG4rXHRcdFx0XHRcdFx1MDAyNnZuaW5vZGUtXHUwMDNlcmVtb3RlX2lwO1xuK1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbitcdFx0X192eGxhbl9mZGJfZGVsZXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLCAqcmlwLFxuK1x0XHRcdFx0ICAgdnhsYW4tXHUwMDNlY2ZnLmRzdF9wb3J0LCB2bmlub2RlLVx1MDAzZXZuaSxcbitcdFx0XHRcdCAgIHZuaW5vZGUtXHUwMDNldm5pLFxuK1x0XHRcdFx0ICAgdnhsYW4tXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX2lmaW5kZXgsIHRydWUpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ2eGxhbi1cdTAwM2VoYXNoX2xvY2spO1xuK1x0fVxuK1x0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcdTAwMjZ2Zy1cdTAwM2V2bmlfaGFzaCwgXHUwMDI2dm5pbm9kZS1cdTAwM2V2bm9kZSxcbitcdFx0XHQgICAgICAgdnhsYW5fdm5pX3JodF9wYXJhbXMpO1xuK1x0X192eGxhbl92bmlfZGVsX2xpc3QodmcsIHZuaW5vZGUpO1xuK1x0aWYgKHZ4bGFuLVx1MDAzZWRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKVxuK1x0XHR2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGUodnhsYW4sIHZuaW5vZGUsIHRydWUpO1xuK1x0Y2FsbF9yY3UoXHUwMDI2dm5pbm9kZS1cdTAwM2VyY3UsIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTA6NDguMzUzNTk2MTdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTE4MDgxNzEzNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRGV0ZXJtaW5hdGlvbiBmb3IgVlhMQU4gRkRCIFVwZGF0ZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGluc3RydWN0aW9ucyBhcmUgY2xlYXI6IGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIGtleSBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgcG90ZW50aWFsIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiAgVGhlIHJ1bGUgb2YgdGh1bWIgaXMsIGlmIEtBU0FOLCBMT0NLREVQLCBvciBvdGhlciBzdGFuZGFyZCBkZXRlY3RvcnMgY2FuIGNhdGNoIGl0LCB3ZSBkb24ndCBuZWVkIEtNU0FOLiAgV2UncmUgbG9va2luZyBmb3Igc3BlY2lmaWMgc2NlbmFyaW9zOiBrZXJuZWwgc3RydWN0dXJlcyBnb2luZyB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBjb21wbGV4IGFsbG9jYXRpb25zIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgdGhhdCAqY291bGQqIGJlIHJlYWQgbGF0ZXIsIG9yIGxvZ2ljIHRoYXQgZW5hYmxlcyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBwYXJ0cyBvZiBleGlzdGluZyBidWZmZXJzLiAgQ29udmVyc2VseSwgaWYgaXQncyBwcmltYXJpbHkgYWJvdXQgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBpc3N1ZXMsIG9yIHVzZS1hZnRlci1mcmVlLCB0aGVuIHdlIHNob3VsZCAqbm90KiBtYXJrIGl0IGZvciBLTVNBTi4gRnVsbCB6ZXJvaW5nL2luaXRpYWxpemF0aW9uIG9mIGRhdGEgc3RydWN0dXJlcyBhbmQgbm8gaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2sgYXJlIGFsc28gcmVhc29ucyB0byBza2lwIEtNU0FOLlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBhIGBib29sICpjcmVhdGVkYCBwYXJhbWV0ZXIgdG8gYSBmZXcgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gVlhMQU4gRkRCIHVwZGF0ZXMuICBTcGVjaWZpY2FsbHksIGB2eGxhbl9mZGJfdXBkYXRlYCwgYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgLCBgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGVgLCBhbmQgYSBmZXcgcmVsYXRlZCBmdW5jdGlvbnMgaW4gYHZ4bGFuX3ZuaWZpbHRlci5jYC5cblxuSSBzZWUgdGhhdCBgdnhsYW5fZmRiX3VwZGF0ZWAgaXMgdXBkYXRlZCB0byB0YWtlIHRoZSBgYm9vbCAqY3JlYXRlZGAgcGFyYW1ldGVyLiBUaGVuIGl0IGNhbGxzIGJvdGggYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgIGFuZCBgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGVgLiBDcnVjaWFsbHksIG1hbnkgY2FsbGVycyBwYXNzIGBOVUxMYCBmb3IgdGhpcyBgY3JlYXRlZGAgcGFyYW1ldGVyLCBidXQgYHZ4bGFuX3ZuaV9hZGRgIGFwcGVhcnMgdG8gKnNvbWV0aW1lcyogcGFzcyBhIGBib29sYCBpbml0aWFsaXplZCB0byBgZmFsc2VgLCB3aXRoIGNvZGUgcGF0aHMgdGhhdCBwb3RlbnRpYWxseSBzZXQgdGhhdCBib29sZWFuIHRvIHRydWUuIExldCdzIHNlZS4uLiB0aGUgY29kZSBwYXNzZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGBmZGJfY3JlYXRlZGAgdmFyaWFibGUgdG8gdGhvc2UgZnVuY3Rpb25zLlxuXG5NeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhlIGZ1bmN0aW9ucyB0aGF0IGFjY2VwdCB0aGlzIGBjcmVhdGVkYCBwb2ludGVyIHJlYWQgaXQgYmVmb3JlIHdyaXRpbmcgdG8gaXQsIG1ha2luZyBpdCBwb3NzaWJsZSB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyBjYXJlZnVsbHkgaW5zcGVjdCB0aGUgZnVuY3Rpb25zLlxuXG5Pa2F5LCBsZXQncyBob25lIGluIG9uIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBhbmQgYHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlYC4gIENydWNpYWxseSwgaW4gYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgLCB0aGUgY29kZSBpczogYGlmIChyYyBcdTAwMjZcdTAwMjYgY3JlYXRlZCkgKmNyZWF0ZWQgPSB0cnVlO2AgSXQgKndyaXRlcyogdG8gYCpjcmVhdGVkYCBvbmx5IGlmIHRoZSBwb2ludGVyIGlzIG5vdCBgTlVMTGAgYW5kIHRoZSByZXR1cm4gY29kZSBgcmNgIGlzIG5vbi16ZXJvIChpbmRpY2F0aW5nIHN1Y2Nlc3MpLiBUaGVyZSdzIG5vIHJlYWQgb2YgYCpjcmVhdGVkYCBpZiBpdCdzIG5vdCBgTlVMTGAuIEluIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZWAsIGl0J3MgZXZlbiBzaW1wbGVyOiBgaWYgKGNyZWF0ZWQpICpjcmVhdGVkID0gdHJ1ZTtgICBBZ2FpbiwgaXQncyBqdXN0IGEgd3JpdGUgaWYgYGNyZWF0ZWRgIGlzIG5vdCBgTlVMTGAuXG5cblNvLCBpdCBzZWVtcyB0aGF0IHRoZXJlIGlzbid0IGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpyZWFkcyogaGVyZS4gSW4gdGhlIGNhc2Ugd2hlcmUgYSBib29sZWFuIGlzIHBhc3NlZCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhbmQgaXMgdGhlbiBwb3RlbnRpYWxseSB1cGRhdGVkIHRvIGB0cnVlYCwgdGhlbiBpdCBtYXkgYmUgY2hlY2tlZC4gVGhlIGtleSBpcyB0aGVyZSBhcmUgbm8gcmVhZHMgYmVmb3JlIGEgd3JpdGUuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBpdCBkb2Vzbid0IG1lZXQgdGhlIGNyaXRlcmlhIGZvciBydW5uaW5nIGEgS01TQU4gc2Vzc2lvbi4gTm8gYE5lZWRzS01TQU49dHJ1ZWAuIEl0IGxvb2tzIHByZXR0eSBjbGVhbiBmcm9tIHRoaXMgcGVyc3BlY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NjMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MDAuMTYxNzcxMjUyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDExOTAxNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9OTYzPXN0YXRpYyB2b2lkIHZ4bGFuX2RzdF9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy05NzAtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjk3MTpzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTk3Mi1cXHRcXHRcXHRcXHQgICAgIHVuaW9uIHZ4bGFuX2FkZHIgKmlwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MTowMC4zMDI5NjkxMDhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM5MDQyNDU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBuZXR3b3JraW5nIGFuZCBmYW1pbGlhciB3aXRoIFZYTEFOIGFuZCBGREJzOlxuXG4qKkFuYWx5emluZyBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBmdW5jdGlvbi4gVGhlIG5hbWUgaXRzZWxmIGlzIHByZXR0eSBleHBsaWNpdCDigJMgd2UncmUgZGVhbGluZyB3aXRoIGFuIGV4aXN0aW5nIEZvcndhcmRpbmcgRGF0YWJhc2UgKEZEQikgZW50cnkgcmVsYXRlZCB0byBWWExBTiwgYW5kIHdlIG5lZWQgdG8gdXBkYXRlIGl0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1c2UgYHJlYWQtZmlsZWAsIHByZXN1bWFibHkgYSBmdW5jdGlvbiBvciBtZXRob2QgYXZhaWxhYmxlIGluIHdoYXRldmVyIHNjcmlwdGluZyBlbnZpcm9ubWVudCBvciBjb2RlYmFzZSBJJ20gY3VycmVudGx5IHdvcmtpbmcgaW4uIEknbGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIG9yIHRoZSByZWxldmFudCBjb2RlIGJsb2NrLCBzbyBJIGNhbiBzZWUgZXhhY3RseSB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGlzIHVwZGF0ZSBwcm9jZXNzLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbXkgYW5hbHlzaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGlzdGluZyBsb2dpYyB0byBzZWUgKmhvdyogaXQncyB1cGRhdGluZyB0aGUgRkRCIGVudHJ5LiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGRhdGEgc3RydWN0dXJlcyBiZWluZyB1c2VkLCB0aGUgY29uZGl0aW9ucyBiZWluZyBjaGVja2VkLCBhbmQgYW55IG90aGVyIGV4dGVybmFsIGNhbGxzLCBzdWNoIGFzIGhhcmR3YXJlIGludGVyYWN0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBhc3Nlc3Mgd2hldGhlciB0aGUgY29kZSBpcyBlZmZpY2llbnQsIGNvcnJlY3QsIGFuZCBzZWN1cmUuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGxvb2sgZm9yIHBvdGVudGlhbCBmbGF3cyBvciBhcmVhcyBvZiBpbXByb3ZlbWVudCBpbiB0aGlzIGNyaXRpY2FsIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTE2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MDIuNjkzMzk2MjA1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTcxLFxuICBcIkxpbmVDb3VudFwiOiA4NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTcxOlxcdHN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4gOTcyOlxcdFxcdFxcdFxcdFxcdCAgICAgdW5pb24gdnhsYW5fYWRkciAqaXAsXFxuIDk3MzpcXHRcXHRcXHRcXHRcXHQgICAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncyxcXG4gOTc0OlxcdFxcdFxcdFxcdFxcdCAgICAgX19iZTE2IHBvcnQsIF9fYmUzMiB2bmksXFxuIDk3NTpcXHRcXHRcXHRcXHRcXHQgICAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncyxcXG4gOTc2OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHZ4bGFuX2ZkYiAqZiwgdTMyIG5oaWQsXFxuIDk3NzpcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgc3dkZXZfbm90aWZ5LCBib29sICpjcmVhdGVkLFxcbiA5Nzg6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDk3OTpcXHR7XFxuIDk4MDpcXHRcXHRfX3UxNiBmZGJfZmxhZ3MgPSAobmRtX2ZsYWdzIFxcdTAwMjYgfk5URl9VU0UpO1xcbiA5ODE6XFx0XFx0c3RydWN0IHZ4bGFuX3Jkc3QgKnJkID0gTlVMTDtcXG4gOTgyOlxcdFxcdHN0cnVjdCB2eGxhbl9yZHN0IG9sZHJkO1xcbiA5ODM6XFx0XFx0aW50IG5vdGlmeSA9IDA7XFxuIDk4NDpcXHRcXHRpbnQgcmMgPSAwO1xcbiA5ODU6XFx0XFx0aW50IGVycjtcXG4gOTg2OlxcdFxcbiA5ODc6XFx0XFx0aWYgKG5oaWQgXFx1MDAyNlxcdTAwMjYgIXJjdV9hY2Nlc3NfcG9pbnRlcihmLVxcdTAwM2VuaCkpIHtcXG4gOTg4OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4gOTg5OlxcdFxcdFxcdFxcdCAgICAgICBcXFwiQ2Fubm90IHJlcGxhY2UgYW4gZXhpc3Rpbmcgbm9uIG5leHRob3AgZmRiIHdpdGggYSBuZXh0aG9wXFxcIik7XFxuIDk5MDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDk5MTpcXHRcXHR9XFxuIDk5MjpcXHRcXG4gOTkzOlxcdFxcdGlmIChuaGlkIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IE5MTV9GX0FQUEVORCkpIHtcXG4gOTk0OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4gOTk1OlxcdFxcdFxcdFxcdCAgICAgICBcXFwiQ2Fubm90IGFwcGVuZCB0byBhIG5leHRob3AgZmRiXFxcIik7XFxuIDk5NjpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDk5NzpcXHRcXHR9XFxuIDk5ODpcXHRcXG4gOTk5OlxcdFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cXHUwMDNlbmgpIFxcdTAwMjZcXHUwMDI2XFxuMTAwMDpcXHRcXHQgICAgIShzdGF0ZSBcXHUwMDI2IChOVURfUEVSTUFORU5UIHwgTlVEX05PQVJQKSkpIHtcXG4xMDAxOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkNhbm5vdCBtYWtlIGEgbmV4dGhvcCBmZGIgZHluYW1pY1xcXCIpO1xcbjEwMDI6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjEwMDM6XFx0XFx0fVxcbjEwMDQ6XFx0XFxuMTAwNTpcXHRcXHQvKiBEbyBub3QgYWxsb3cgYW4gZXh0ZXJuYWxseSBsZWFybmVkIGVudHJ5IHRvIHRha2Ugb3ZlciBhbiBlbnRyeSBhZGRlZFxcbjEwMDY6XFx0XFx0ICogYnkgdGhlIHVzZXIuXFxuMTAwNzpcXHRcXHQgKi9cXG4xMDA4OlxcdFxcdGlmICghKGZkYl9mbGFncyBcXHUwMDI2IE5URl9FWFRfTEVBUk5FRCkgfHxcXG4xMDA5OlxcdFxcdCAgICAhKGYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTlRGX1ZYTEFOX0FEREVEX0JZX1VTRVIpKSB7XFxuMTAxMDpcXHRcXHRcXHRpZiAoZi1cXHUwMDNlc3RhdGUgIT0gc3RhdGUpIHtcXG4xMDExOlxcdFxcdFxcdFxcdGYtXFx1MDAzZXN0YXRlID0gc3RhdGU7XFxuMTAxMjpcXHRcXHRcXHRcXHRub3RpZnkgPSAxO1xcbjEwMTM6XFx0XFx0XFx0fVxcbjEwMTQ6XFx0XFx0XFx0aWYgKGYtXFx1MDAzZWZsYWdzICE9IGZkYl9mbGFncykge1xcbjEwMTU6XFx0XFx0XFx0XFx0Zi1cXHUwMDNlZmxhZ3MgPSBmZGJfZmxhZ3M7XFxuMTAxNjpcXHRcXHRcXHRcXHRub3RpZnkgPSAxO1xcbjEwMTc6XFx0XFx0XFx0fVxcbjEwMTg6XFx0XFx0fVxcbjEwMTk6XFx0XFxuMTAyMDpcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgTkxNX0ZfUkVQTEFDRSkpIHtcXG4xMDIxOlxcdFxcdFxcdC8qIE9ubHkgY2hhbmdlIHVuaWNhc3RzICovXFxuMTAyMjpcXHRcXHRcXHRpZiAoIShpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihmLVxcdTAwM2VrZXkuZXRoX2FkZHIpIHx8XFxuMTAyMzpcXHRcXHRcXHQgICAgICBpc196ZXJvX2V0aGVyX2FkZHIoZi1cXHUwMDNla2V5LmV0aF9hZGRyKSkpIHtcXG4xMDI0OlxcdFxcdFxcdFxcdGlmIChuaGlkKSB7XFxuMTAyNTpcXHRcXHRcXHRcXHRcXHRyYyA9IHZ4bGFuX2ZkYl9uaF91cGRhdGUodnhsYW4sIGYsIG5oaWQsIGV4dGFjayk7XFxuMTAyNjpcXHRcXHRcXHRcXHRcXHRpZiAocmMgXFx1MDAzYyAwKVxcbjEwMjc6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjEwMjg6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xMDI5OlxcdFxcdFxcdFxcdFxcdHJjID0gdnhsYW5fZmRiX3JlcGxhY2UoZiwgaXAsIHBvcnQsIHZuaSxcXG4xMDMwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpZmluZGV4LCBcXHUwMDI2b2xkcmQpO1xcbjEwMzE6XFx0XFx0XFx0XFx0fVxcbjEwMzI6XFx0XFx0XFx0XFx0bm90aWZ5IHw9IHJjO1xcbjEwMzM6XFx0XFx0XFx0fSBlbHNlIHtcXG4xMDM0OlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkNhbm5vdCByZXBsYWNlIG5vbi11bmljYXN0IGZkYiBlbnRyaWVzXFxcIik7XFxuMTAzNTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTAzNjpcXHRcXHRcXHR9XFxuMTAzNzpcXHRcXHR9XFxuMTAzODpcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgTkxNX0ZfQVBQRU5EKSBcXHUwMDI2XFx1MDAyNlxcbjEwMzk6XFx0XFx0ICAgIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihmLVxcdTAwM2VrZXkuZXRoX2FkZHIpIHx8XFxuMTA0MDpcXHRcXHQgICAgIGlzX3plcm9fZXRoZXJfYWRkcihmLVxcdTAwM2VrZXkuZXRoX2FkZHIpKSkge1xcbjEwNDE6XFx0XFx0XFx0cmMgPSB2eGxhbl9mZGJfYXBwZW5kKGYsIGlwLCBwb3J0LCB2bmksIGlmaW5kZXgsIFxcdTAwMjZyZCk7XFxuMTA0MjpcXHRcXG4xMDQzOlxcdFxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuMTA0NDpcXHRcXHRcXHRcXHRyZXR1cm4gcmM7XFxuMTA0NTpcXHRcXHRcXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgY3JlYXRlZClcXG4xMDQ2OlxcdFxcdFxcdFxcdCpjcmVhdGVkID0gdHJ1ZTtcXG4xMDQ3OlxcdFxcdFxcdG5vdGlmeSB8PSByYztcXG4xMDQ4OlxcdFxcdH1cXG4xMDQ5OlxcdFxcbjEwNTA6XFx0XFx0aWYgKG5kbV9mbGFncyBcXHUwMDI2IE5URl9VU0UpXFxuMTA1MTpcXHRcXHRcXHRXUklURV9PTkNFKGYtXFx1MDAzZXVwZGF0ZWQsIGppZmZpZXMpO1xcbjEwNTI6XFx0XFxuMTA1MzpcXHRcXHRpZiAobm90aWZ5KSB7XFxuMTA1NDpcXHRcXHRcXHRpZiAocmQgPT0gTlVMTClcXG4xMDU1OlxcdFxcdFxcdFxcdHJkID0gZmlyc3RfcmVtb3RlX3J0bmwoZik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUxOjAyLjY5MzY2NzYzNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMDA2Njk2OTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipUaW1lIHRvIERpdmUgaW50byBgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGVgIGFuZCB0aGUgU3Vycm91bmRpbmdzKipcblxuQWxyaWdodCwgZ2l2ZW4gd2hhdCB3ZSdyZSB3b3JraW5nIG9uLCBpdCdzIHBydWRlbnQgdG8gZ2l2ZSBgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGVgIGEgZ29vZCwgaGFyZCBsb29rLiBCdXQsIEkgZG9uJ3Qgd2FudCB0byBqdXN0IGlzb2xhdGUgdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgY29kZSB0aGF0IGNhbGxzIGl0LCB0aGUgZnVuY3Rpb25zIGl0IHJlbGllcyBvbiwgYW5kIGVzcGVjaWFsbHkgYW55IHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhhdCBzcGVjaWZpYyB1cGRhdGU7IGl0J3MgYWJvdXQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGhvdyB0aGUgRm9yd2FyZGluZyBEYXRhYmFzZSAoRkRCKSB1cGRhdGVzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgVlhMQU4gbW9kdWxlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjYXRjaGluZyBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcywgZWRnZSBjYXNlcywgb3Igb3B0aW1pemF0aW9ucyB0aGF0IG1pZ2h0IGJlIG1pc3NlZCBpZiBJIG9ubHkgZm9jdXMgb24gdGhlIHRhcmdldCBmdW5jdGlvbi4gVGhpbmtpbmcgaG9saXN0aWNhbGx5IGFib3V0IGl0cyByZWxhdGlvbiB0byB0aGUgVlhMQU4gZGF0YXBhdGggaXMga2V5IGhlcmUuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjA4LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MTowNC43MDAzNjY5ODdaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgzNTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDc1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDc1OlxcdFxcdHJldHVybiBlcnI7XFxuMTA3NjpcXHR9XFxuMTA3NzpcXHRcXG4xMDc4OlxcdHN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuMTA3OTpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCB1OCAqbWFjLCB1bmlvbiB2eGxhbl9hZGRyICppcCxcXG4xMDgwOlxcdFxcdFxcdFxcdFxcdCAgIF9fdTE2IHN0YXRlLCBfX3UxNiBmbGFncyxcXG4xMDgxOlxcdFxcdFxcdFxcdFxcdCAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSxcXG4xMDgyOlxcdFxcdFxcdFxcdFxcdCAgIF9fdTMyIGlmaW5kZXgsIF9fdTE2IG5kbV9mbGFncywgdTMyIG5oaWQsXFxuMTA4MzpcXHRcXHRcXHRcXHRcXHQgICBib29sIHN3ZGV2X25vdGlmeSwgYm9vbCAqY3JlYXRlZCxcXG4xMDg0OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xMDg1OlxcdHtcXG4xMDg2OlxcdFxcdF9fdTE2IGZkYl9mbGFncyA9IChuZG1fZmxhZ3MgXFx1MDAyNiB+TlRGX1VTRSk7XFxuMTA4NzpcXHRcXHRzdHJ1Y3QgdnhsYW5fZmRiICpmO1xcbjEwODg6XFx0XFx0aW50IHJjO1xcbjEwODk6XFx0XFxuMTA5MDpcXHRcXHQvKiBEaXNhbGxvdyByZXBsYWNlIHRvIGFkZCBhIG11bHRpY2FzdCBlbnRyeSAqL1xcbjEwOTE6XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IE5MTV9GX1JFUExBQ0UpIFxcdTAwMjZcXHUwMDI2XFxuMTA5MjpcXHRcXHQgICAgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKG1hYykgfHwgaXNfemVyb19ldGhlcl9hZGRyKG1hYykpKVxcbjEwOTM6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjEwOTQ6XFx0XFxuMTA5NTpcXHRcXHRuZXRkZXZfZGJnKHZ4bGFuLVxcdTAwM2VkZXYsIFxcXCJhZGQgJXBNIC1cXHUwMDNlICVwSVNcXFxcblxcXCIsIG1hYywgaXApO1xcbjEwOTY6XFx0XFx0cmMgPSB2eGxhbl9mZGJfY3JlYXRlKHZ4bGFuLCBtYWMsIGlwLCBzdGF0ZSwgcG9ydCwgc3JjX3ZuaSxcXG4xMDk3OlxcdFxcdFxcdFxcdCAgICAgIHZuaSwgaWZpbmRleCwgZmRiX2ZsYWdzLCBuaGlkLCBcXHUwMDI2ZiwgZXh0YWNrKTtcXG4xMDk4OlxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuMTA5OTpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuMTEwMDpcXHRcXG4xMTAxOlxcdFxcdHJjID0gdnhsYW5fZmRiX25vdGlmeSh2eGxhbiwgZiwgZmlyc3RfcmVtb3RlX3J0bmwoZiksIFJUTV9ORVdORUlHSCxcXG4xMTAyOlxcdFxcdFxcdFxcdCAgICAgIHN3ZGV2X25vdGlmeSwgZXh0YWNrKTtcXG4xMTAzOlxcdFxcdGlmIChyYylcXG4xMTA0OlxcdFxcdFxcdGdvdG8gZXJyX25vdGlmeTtcXG4xMTA1OlxcdFxcbjExMDY6XFx0XFx0aWYgKGNyZWF0ZWQpXFxuMTEwNzpcXHRcXHRcXHQqY3JlYXRlZCA9IHRydWU7XFxuMTEwODpcXHRcXG4xMTA5OlxcdFxcdHJldHVybiAwO1xcbjExMTA6XFx0XFxuMTExMTpcXHRlcnJfbm90aWZ5OlxcbjExMTI6XFx0XFx0dnhsYW5fZmRiX2Rlc3Ryb3kodnhsYW4sIGYsIGZhbHNlLCBmYWxzZSk7XFxuMTExMzpcXHRcXHRyZXR1cm4gcmM7XFxuMTExNDpcXHR9XFxuMTExNTpcXHRcXG4xMTE2OlxcdC8qIEFkZCBuZXcgZW50cnkgdG8gZm9yd2FyZGluZyB0YWJsZSAtLSBhc3N1bWVzIGxvY2sgaGVsZCAqL1xcbjExMTc6XFx0aW50IHZ4bGFuX2ZkYl91cGRhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuMTExODpcXHRcXHRcXHQgICAgIGNvbnN0IHU4ICptYWMsIHVuaW9uIHZ4bGFuX2FkZHIgKmlwLFxcbjExMTk6XFx0XFx0XFx0ICAgICBfX3UxNiBzdGF0ZSwgX191MTYgZmxhZ3MsXFxuMTEyMDpcXHRcXHRcXHQgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSxcXG4xMTIxOlxcdFxcdFxcdCAgICAgX191MzIgaWZpbmRleCwgX191MTYgbmRtX2ZsYWdzLCB1MzIgbmhpZCxcXG4xMTIyOlxcdFxcdFxcdCAgICAgYm9vbCBzd2Rldl9ub3RpZnksIGJvb2wgKmNyZWF0ZWQsXFxuMTEyMzpcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xMTI0OlxcdHtcXG4xMTI1OlxcdFxcdHN0cnVjdCB2eGxhbl9mZGIgKmY7XFxuMTEyNjpcXHRcXG4xMTI3OlxcdFxcdGYgPSB2eGxhbl9maW5kX21hYyh2eGxhbiwgbWFjLCBzcmNfdm5pKTtcXG4xMTI4OlxcdFxcdGlmIChmKSB7XFxuMTEyOTpcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBOTE1fRl9FWENMKSB7XFxuMTEzMDpcXHRcXHRcXHRcXHRuZXRkZXZfZGJnKHZ4bGFuLVxcdTAwM2VkZXYsXFxuMTEzMTpcXHRcXHRcXHRcXHRcXHQgICBcXFwibG9zdCByYWNlIHRvIGNyZWF0ZSAlcE1cXFxcblxcXCIsIG1hYyk7XFxuMTEzMjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4xMTMzOlxcdFxcdFxcdH1cXG4xMTM0OlxcdFxcbjExMzU6XFx0XFx0XFx0cmV0dXJuIHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcodnhsYW4sIGlwLCBzdGF0ZSwgZmxhZ3MsIHBvcnQsXFxuMTEzNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgdm5pLCBpZmluZGV4LCBuZG1fZmxhZ3MsIGYsXFxuMTEzNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgbmhpZCwgc3dkZXZfbm90aWZ5LCBjcmVhdGVkLFxcbjExMzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGV4dGFjayk7XFxuMTEzOTpcXHRcXHR9IGVsc2Uge1xcbjExNDA6XFx0XFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBOTE1fRl9DUkVBVEUpKVxcbjExNDE6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMTE0MjpcXHRcXG4xMTQzOlxcdFxcdFxcdHJldHVybiB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZSh2eGxhbiwgbWFjLCBpcCwgc3RhdGUsIGZsYWdzLFxcbjExNDQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHBvcnQsIHNyY192bmksIHZuaSwgaWZpbmRleCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MDQuNzAwNjUyMjI3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3MDkzODUwNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHZ4bGFuX3ZuaWZpbHRlci5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIGB2eGxhbl92bmlmaWx0ZXIuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbW9kdWxlIGJldHRlciwgYW5kIHRoZSBiZXN0IHdheSB0byBkbyB0aGF0IGlzIHRvIGxvb2sgYXQgdGhlIGNvZGUgZGlyZWN0bHkuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBhcm91bmQgbGluZXMgNTEyLCA3MjUsIGFuZCBwb3RlbnRpYWxseSBvdGhlciBhcmVhcyBuZWFyYnkuIFRoZXNlIGxpbmUgbnVtYmVycyBvZnRlbiBwaW5wb2ludCBrZXkgZnVuY3Rpb25zIG9yIGNyaXRpY2FsIGxvZ2ljIHdpdGhpbiB0aGUgbW9kdWxlLCBzbyB0aGF0J3Mgd2hlcmUgSSdsbCBiZWdpbiBteSBpbnZlc3RpZ2F0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDY5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MTowNi40MTAwMzk3NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzEzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTEwOlxcdFxcdHJldHVybiBlcnI7XFxuIDUxMTpcXHR9XFxuIDUxMjpcXHRcXG4gNTEzOlxcdHN0YXRpYyBpbnQgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4gNTE0OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlLFxcbiA1MTU6XFx0XFx0XFx0XFx0XFx0ICB1bmlvbiB2eGxhbl9hZGRyICpncm91cCxcXG4gNTE2OlxcdFxcdFxcdFxcdFxcdCAgYm9vbCBjcmVhdGUsIGJvb2wgKmNoYW5nZWQsXFxuIDUxNzpcXHRcXHRcXHRcXHRcXHQgIGJvb2wgKmZkYl9jcmVhdGVkLFxcbiA1MTg6XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDUxOTpcXHR7XFxuIDUyMDpcXHRcXHRzdHJ1Y3QgdnhsYW5fbmV0ICp2biA9IG5ldF9nZW5lcmljKHZ4bGFuLVxcdTAwM2VuZXQsIHZ4bGFuX25ldF9pZCk7XFxuIDUyMTpcXHRcXHRzdHJ1Y3QgdnhsYW5fcmRzdCAqZHN0ID0gXFx1MDAyNnZ4bGFuLVxcdTAwM2VkZWZhdWx0X2RzdDtcXG4gNTIyOlxcdFxcdHVuaW9uIHZ4bGFuX2FkZHIgKm5ld3JpcCA9IE5VTEwsICpvbGRyaXAgPSBOVUxMO1xcbiA1MjM6XFx0XFx0dW5pb24gdnhsYW5fYWRkciBvbGRfcmVtb3RlX2lwO1xcbiA1MjQ6XFx0XFx0aW50IHJldCA9IDA7XFxuIDUyNTpcXHRcXG4gNTI2OlxcdFxcdG1lbWNweShcXHUwMDI2b2xkX3JlbW90ZV9pcCwgXFx1MDAyNnZuaW5vZGUtXFx1MDAzZXJlbW90ZV9pcCwgc2l6ZW9mKG9sZF9yZW1vdGVfaXApKTtcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0XFx0LyogaWYgcGVyIHZuaSByZW1vdGUgaXAgaXMgbm90IHByZXNlbnQgdXNlIHZ4bGFuIGRldlxcbiA1Mjk6XFx0XFx0ICogZGVmYXVsdCBkc3QgcmVtb3RlIGlwIGZvciBmZGIgZW50cnlcXG4gNTMwOlxcdFxcdCAqL1xcbiA1MzE6XFx0XFx0aWYgKGdyb3VwIFxcdTAwMjZcXHUwMDI2ICF2eGxhbl9hZGRyX2FueShncm91cCkpIHtcXG4gNTMyOlxcdFxcdFxcdG5ld3JpcCA9IGdyb3VwO1xcbiA1MzM6XFx0XFx0fSBlbHNlIHtcXG4gNTM0OlxcdFxcdFxcdGlmICghdnhsYW5fYWRkcl9hbnkoXFx1MDAyNmRzdC1cXHUwMDNlcmVtb3RlX2lwKSlcXG4gNTM1OlxcdFxcdFxcdFxcdG5ld3JpcCA9IFxcdTAwMjZkc3QtXFx1MDAzZXJlbW90ZV9pcDtcXG4gNTM2OlxcdFxcdH1cXG4gNTM3OlxcdFxcbiA1Mzg6XFx0XFx0LyogaWYgb2xkIHJpcCBleGlzdHMsIGFuZCBubyBuZXdyaXAsXFxuIDUzOTpcXHRcXHQgKiBleHBsaWNpdGx5IGRlbGV0ZSBvbGQgcmlwXFxuIDU0MDpcXHRcXHQgKi9cXG4gNTQxOlxcdFxcdGlmICghbmV3cmlwIFxcdTAwMjZcXHUwMDI2ICF2eGxhbl9hZGRyX2FueShcXHUwMDI2b2xkX3JlbW90ZV9pcCkpXFxuIDU0MjpcXHRcXHRcXHRvbGRyaXAgPSBcXHUwMDI2b2xkX3JlbW90ZV9pcDtcXG4gNTQzOlxcdFxcbiA1NDQ6XFx0XFx0aWYgKCFuZXdyaXAgXFx1MDAyNlxcdTAwMjYgIW9sZHJpcClcXG4gNTQ1OlxcdFxcdFxcdHJldHVybiAwO1xcbiA1NDY6XFx0XFxuIDU0NzpcXHRcXHRpZiAoIWNyZWF0ZSBcXHUwMDI2XFx1MDAyNiBvbGRyaXAgXFx1MDAyNlxcdTAwMjYgbmV3cmlwIFxcdTAwMjZcXHUwMDI2IHZ4bGFuX2FkZHJfZXF1YWwob2xkcmlwLCBuZXdyaXApKVxcbiA1NDg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDU0OTpcXHRcXG4gNTUwOlxcdFxcdHJldCA9IHZ4bGFuX3VwZGF0ZV9kZWZhdWx0X2ZkYl9lbnRyeSh2eGxhbiwgdm5pbm9kZS1cXHUwMDNldm5pLFxcbiA1NTE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBvbGRyaXAsIG5ld3JpcCwgZmRiX2NyZWF0ZWQsXFxuIDU1MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGV4dGFjayk7XFxuIDU1MzpcXHRcXHRpZiAocmV0KVxcbiA1NTQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDU1NTpcXHRcXG4gNTU2OlxcdFxcdGlmIChncm91cClcXG4gNTU3OlxcdFxcdFxcdG1lbWNweShcXHUwMDI2dm5pbm9kZS1cXHUwMDNlcmVtb3RlX2lwLCBncm91cCwgc2l6ZW9mKHZuaW5vZGUtXFx1MDAzZXJlbW90ZV9pcCkpO1xcbiA1NTg6XFx0XFxuIDU1OTpcXHRcXHRpZiAodnhsYW4tXFx1MDAzZWRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MDYuNDEwMTc2NTE5WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5OTI1ODEzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFZYTEFOIFZOSSBBZGRpdGlvbiBDb2RlKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHNvbWV0aGluZyBtaWdodCBiZSBvZmYgd2l0aCB0aGUgYHZ4bGFuX3ZuaV9hZGRgIGZ1bmN0aW9uLiBHaXZlbiB0aGUgYXJlYSBJJ20gdHJvdWJsZXNob290aW5nLCBsaW5lIG51bWJlcnMgNzI1IHRocm91Z2ggNzgwIGluIHRoYXQgY29kZSBibG9jayBhcmUgc2NyZWFtaW5nIG91dCB0byBiZSBjaGVja2VkLiBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIHRoZXJlIGFuZCBzdGFydCBieSBydW5uaW5nIHRocm91Z2ggdGhhdCBzZWN0aW9uIHNsb3dseSwgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBsb2dpYyBmbGF3cywgbWVtb3J5IGxlYWtzLCBvciBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgVk5JIGFkZGl0aW9ucy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCBhbmQgaG93IHRoZXkncmUgYmVpbmcgdXBkYXRlZC4gTGV0J3Mgc2VlIGlmIHRoaXMgaHVuY2ggcGFucyBvdXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzIGhhbmRsaW5nIHRob3NlIFZOSSBhZGQgcmVxdWVzdHMgZXhhY3RseSBhcyBkZWZpbmVkIGluIHRoZSBzcGVjLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA3MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MDguNDAyNzYwNDE0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MjUsXG4gIFwiTGluZUNvdW50XCI6IDg1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MjU6XFx0XFxuIDcyNjpcXHRzdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuIDcyNzpcXHRcXHRcXHRcXHQgc3RydWN0IHZ4bGFuX3ZuaV9ncm91cCAqdmcsXFxuIDcyODpcXHRcXHRcXHRcXHQgdTMyIHZuaSwgdW5pb24gdnhsYW5fYWRkciAqZ3JvdXAsXFxuIDcyOTpcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA3MzA6XFx0e1xcbiA3MzE6XFx0XFx0c3RydWN0IHZ4bGFuX3ZuaV9ub2RlICp2bmlub2RlO1xcbiA3MzI6XFx0XFx0X19iZTMyIHYgPSBjcHVfdG9fYmUzMih2bmkpO1xcbiA3MzM6XFx0XFx0Ym9vbCBmZGJfY3JlYXRlZCA9IGZhbHNlO1xcbiA3MzQ6XFx0XFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuIDczNTpcXHRcXHRpbnQgZXJyID0gMDtcXG4gNzM2OlxcdFxcbiA3Mzc6XFx0XFx0aWYgKHZ4bGFuX3ZuaWZpbHRlcl9sb29rdXAodnhsYW4sIHYpKVxcbiA3Mzg6XFx0XFx0XFx0cmV0dXJuIHZ4bGFuX3ZuaV91cGRhdGUodnhsYW4sIHZnLCB2LCBncm91cCwgXFx1MDAyNmNoYW5nZWQsIGV4dGFjayk7XFxuIDczOTpcXHRcXG4gNzQwOlxcdFxcdGVyciA9IHZ4bGFuX3ZuaV9pbl91c2UodnhsYW4tXFx1MDAzZW5ldCwgdnhsYW4sIFxcdTAwMjZ2eGxhbi1cXHUwMDNlY2ZnLCB2KTtcXG4gNzQxOlxcdFxcdGlmIChlcnIpIHtcXG4gNzQyOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIlZOSSBpbiB1c2VcXFwiKTtcXG4gNzQzOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDc0NDpcXHRcXHR9XFxuIDc0NTpcXHRcXG4gNzQ2OlxcdFxcdHZuaW5vZGUgPSB2eGxhbl92bmlfYWxsb2ModnhsYW4sIHYpO1xcbiA3NDc6XFx0XFx0aWYgKCF2bmlub2RlKVxcbiA3NDg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDc0OTpcXHRcXG4gNzUwOlxcdFxcdGVyciA9IHJoYXNodGFibGVfbG9va3VwX2luc2VydF9mYXN0KFxcdTAwMjZ2Zy1cXHUwMDNldm5pX2hhc2gsXFxuIDc1MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnZuaW5vZGUtXFx1MDAzZXZub2RlLFxcbiA3NTI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHZ4bGFuX3ZuaV9yaHRfcGFyYW1zKTtcXG4gNzUzOlxcdFxcdGlmIChlcnIpIHtcXG4gNzU0OlxcdFxcdFxcdHZ4bGFuX3ZuaV9mcmVlKHZuaW5vZGUpO1xcbiA3NTU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNzU2OlxcdFxcdH1cXG4gNzU3OlxcdFxcbiA3NTg6XFx0XFx0X192eGxhbl92bmlfYWRkX2xpc3QodmcsIHZuaW5vZGUpO1xcbiA3NTk6XFx0XFxuIDc2MDpcXHRcXHRpZiAodnhsYW4tXFx1MDAzZWRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApXFxuIDc2MTpcXHRcXHRcXHR2eGxhbl92c19hZGRfZGVsX3ZuaW5vZGUodnhsYW4sIHZuaW5vZGUsIGZhbHNlKTtcXG4gNzYyOlxcdFxcbiA3NjM6XFx0XFx0ZXJyID0gdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCh2eGxhbiwgdm5pbm9kZSwgZ3JvdXAsIHRydWUsIFxcdTAwMjZjaGFuZ2VkLFxcbiA3NjQ6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2ZmRiX2NyZWF0ZWQsIGV4dGFjayk7XFxuIDc2NTpcXHRcXHRpZiAoZXJyKVxcbiA3NjY6XFx0XFx0XFx0Z290byBlcnJfdm5pX2RlbDtcXG4gNzY3OlxcdFxcbiA3Njg6XFx0XFx0dnhsYW5fdm5pZmlsdGVyX25vdGlmeSh2eGxhbiwgdm5pbm9kZSwgUlRNX05FV1RVTk5FTCk7XFxuIDc2OTpcXHRcXG4gNzcwOlxcdFxcdHJldHVybiAwO1xcbiA3NzE6XFx0XFxuIDc3MjpcXHRlcnJfdm5pX2RlbDpcXG4gNzczOlxcdFxcdC8qIFVuZG8gb25seSB0aGUgZGVmYXVsdCBGREIgZW50cnkgdGhpcyBhZGQgaW5zdGFsbGVkLiAgQW4gZW50cnkgdGhhdFxcbiA3NzQ6XFx0XFx0ICogd2FzIGFscmVhZHkgdGhlcmUsIHdoZXRoZXIgYWRkZWQgb3V0IG9mIGJhbmQgb3IgYnkgYW5vdGhlciBWTkksIGlzXFxuIDc3NTpcXHRcXHQgKiBsZWZ0IGFsb25lLlxcbiA3NzY6XFx0XFx0ICpcXG4gNzc3OlxcdFxcdCAqIE5vIG1lbWJlcnNoaXAgaGFzIHRvIGJlIGdpdmVuIGJhY2s6IHZ4bGFuX2lnbXBfbGVhdmUoKSBpcyBnYXRlZCBvblxcbiA3Nzg6XFx0XFx0ICogdnhsYW5fYWRkcl9tdWx0aWNhc3QoXFx1MDAyNm9sZF9yZW1vdGVfaXApLCBhbmQgb2xkX3JlbW90ZV9pcCBpcyBhIGNvcHlcXG4gNzc5OlxcdFxcdCAqIG9mIHRoZSByZW1vdGUgSVAgb2YgYSBub2RlIHRoaXMgYWRkIGp1c3QgYWxsb2NhdGVkLCBzbyBpdCBpcyB6ZXJvLlxcbiA3ODA6XFx0XFx0ICpcXG4gNzgxOlxcdFxcdCAqIFRoZSBhZGRyZXNzIHBpY2tlZCBiZWxvdyBpcyB0aGUgb25lIHRoZSBlbnRyeSB3YXMgaW5zdGFsbGVkXFxuIDc4MjpcXHRcXHQgKiBhZ2FpbnN0LiAgSWYgdGhlIHJlcXVlc3QgY2FycmllZCBhIGdyb3VwLCB2eGxhbl92bmlfdXBkYXRlX2dyb3VwKClcXG4gNzgzOlxcdFxcdCAqIGNvcGllZCBpdCBpbnRvIHZuaW5vZGUtXFx1MDAzZXJlbW90ZV9pcCBiZWZvcmUgdGhlIGpvaW4gY291bGQgZmFpbDsgaWZcXG4gNzg0OlxcdFxcdCAqIGl0IGRpZCBub3QsIHRoYXQgY29weSB3YXMgc2tpcHBlZCBhbmQgdGhlIGVudHJ5IHdlbnQgdG8gdGhlIGRldmljZVxcbiA3ODU6XFx0XFx0ICogZGVmYXVsdC5cXG4gNzg2OlxcdFxcdCAqL1xcbiA3ODc6XFx0XFx0aWYgKGZkYl9jcmVhdGVkKSB7XFxuIDc4ODpcXHRcXHRcXHR1bmlvbiB2eGxhbl9hZGRyICpyaXAgPSB2eGxhbl9hZGRyX2FueShcXHUwMDI2dm5pbm9kZS1cXHUwMDNlcmVtb3RlX2lwKSA/XFxuIDc4OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dnhsYW4tXFx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pcCA6XFxuIDc5MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2dm5pbm9kZS1cXHUwMDNlcmVtb3RlX2lwO1xcbiA3OTE6XFx0XFxuIDc5MjpcXHRcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZ4bGFuLVxcdTAwM2VoYXNoX2xvY2spO1xcbiA3OTM6XFx0XFx0XFx0X192eGxhbl9mZGJfZGVsZXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLCAqcmlwLFxcbiA3OTQ6XFx0XFx0XFx0XFx0XFx0ICAgdnhsYW4tXFx1MDAzZWNmZy5kc3RfcG9ydCwgdm5pbm9kZS1cXHUwMDNldm5pLFxcbiA3OTU6XFx0XFx0XFx0XFx0XFx0ICAgdm5pbm9kZS1cXHUwMDNldm5pLFxcbiA3OTY6XFx0XFx0XFx0XFx0XFx0ICAgdnhsYW4tXFx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pZmluZGV4LCB0cnVlKTtcXG4gNzk3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ2eGxhbi1cXHUwMDNlaGFzaF9sb2NrKTtcXG4gNzk4OlxcdFxcdH1cXG4gNzk5OlxcdFxcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXFx1MDAyNnZnLVxcdTAwM2V2bmlfaGFzaCwgXFx1MDAyNnZuaW5vZGUtXFx1MDAzZXZub2RlLFxcbiA4MDA6XFx0XFx0XFx0XFx0ICAgICAgIHZ4bGFuX3ZuaV9yaHRfcGFyYW1zKTtcXG4gODAxOlxcdFxcdF9fdnhsYW5fdm5pX2RlbF9saXN0KHZnLCB2bmlub2RlKTtcXG4gODAyOlxcdFxcdGlmICh2eGxhbi1cXHUwMDNlZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUClcXG4gODAzOlxcdFxcdFxcdHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZSh2eGxhbiwgdm5pbm9kZSwgdHJ1ZSk7XFxuIDgwNDpcXHRcXHRjYWxsX3JjdShcXHUwMDI2dm5pbm9kZS1cXHUwMDNlcmN1LCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZSk7XFxuIDgwNTpcXHRcXHRyZXR1cm4gZXJyO1xcbiA4MDY6XFx0fVxcbiA4MDc6XFx0XFxuIDgwODpcXHRzdGF0aWMgdm9pZCB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSlcXG4gODA5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MDguNDAyODY3NTU0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjczMDMwNzYzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWWExBTiBWTkkgQWRkaXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2hhdCdzIHRoZSBwdXJwb3NlIG9mIHRoaXMgcGF0Y2g/IEFoLCByaWdodCwgZXJyb3IgaGFuZGxpbmcgZm9yIGB2eGxhbl92bmlfYWRkYC4gVGhlIHByZXZpb3VzIGNvZGUsIEkgcmVtZW1iZXIgbm93LCBkaWRuJ3QgcHJvcGVybHkgaGFuZGxlIGZhaWx1cmVzIGluIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYC4gSXQganVzdCBibGl0aGVseSBjb250aW51ZWQsIGxlYXZpbmcgcG90ZW50aWFsIG1lc3NlcyBpbiBpdHMgd2FrZS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cGAgY291bGQgZmFpbCwgYW5kIHRoZSBjb2RlIHdvdWxkIHByb2NlZWQgYXMgaWYgZXZlcnl0aGluZyB3YXMgaHVua3ktZG9yeSwgcG90ZW50aWFsbHkgbGVhdmluZyBhIHBhcnRpYWxseSBjcmVhdGVkIGB2bmlub2RlYCBoYW5naW5nIGFyb3VuZCwgb3IgYSBzdGFsZSBGREIgZW50cnkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSwgYnV0IEkgcmVjYWxsIHRoaXMgYmVpbmcgaW50cm9kdWNlZCBhIHdoaWxlIGJhY2s7IEkgbmVlZCB0byBjaGVjayB0aGUgZ2l0IGxvZyBvZiBgdnhsYW5fdm5pX2FkZGAgb3IgdGhlIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgaXQgdG8gY29uZmlybSBteSBzdXNwaWNpb24uXG5cblRoaXMgcGF0Y2gsIHRoZW4sIGFkZHMgY3J1Y2lhbCBlcnJvciBoYW5kbGluZy4gSWYgYHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXBgIGZhaWxzLCBpdCBjbGVhbnMgdXAgZXZlcnl0aGluZy4gVGhlIGF1dGhvciBpcyB0cmFja2luZyB3aGV0aGVyIGFuIEZEQiBlbnRyeSB3YXMgY3JlYXRlZCB2aWEgYGZkYl9jcmVhdGVkYCwgd2hpY2ggaXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYC4gSWYgaXQgKndhcyogY3JlYXRlZCwgaXQncyBkZWxldGVkIHdpdGggYF9fdnhsYW5fZmRiX2RlbGV0ZWAuIEFkZGl0aW9uYWxseSwgaXQgdGFrZXMgY2FyZSB0byByZW1vdmUgdGhlIGVudHJ5IGZyb20gYHZnLVx1MDAzZXZuaV9oYXNoYCwgZGVsZXRlIGl0IGZyb20gYF9fdnhsYW5fdm5pX2RlbF9saXN0YCwgZGVsZXRlIHRoZSB2bmlub2RlIHNvY2tldCBpZiBpdCdzIElGRl9VUCB1c2luZyBgdnhsYW5fdnNfYWRkX2RlbF92bmlub2RlYCwgYW5kIGZpbmFsbHksIGNhbGxzIFJDVSBmcmVlIG9uIGB2bmlub2RlYC4gU29saWQsIHByb3BlciBjbGVhbnVwLlxuXG5Ob3csIGxldCdzIHB1dCBvbiBteSBLTVNBTiBoYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwYXRjaCBpc24ndCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgcmVhZHMgdGhhdCBjb3VsZCBjYXVzZSBpc3N1ZXMuIEZpcnN0LCBhcmUgdGhlcmUgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGJlIGFmZmVjdGVkPyBOby4gYGZkYl9jcmVhdGVkYCBpcyBhbiBpbnRlcm5hbCBib29sZWFuLCBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIHdpdGhpbiBgdnhsYW5fdm5pX2FkZGAsIGFuZCBpdCdzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAgYW5kIG5ldmVyIGNvcGllZCB0byB1c2VyIHNwYWNlLiBHb29kLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IG1pZ2h0IGRlcGVuZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gYmUgbWV0aWN1bG91cy4gTGV0J3Mgc2VlLi4uIGBib29sIGZkYl9jcmVhdGVkID0gZmFsc2U7YCBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuIEl0J3MgcGFzc2VkIHRvIGB2eGxhbl92bmlfdXBkYXRlX2dyb3VwYCwgd2hpY2ggY2FsbHMgYHZ4bGFuX2ZkYl91cGRhdGVgIGJ5IHBhc3NpbmcgaXQgYXMgdGhlIGBjcmVhdGVkYCBhcmd1bWVudC4gSW4gYHZ4bGFuX2ZkYl91cGRhdGVgLCB0aGVyZSBhcmUgY29uZGl0aW9uYWwgYXNzaWdubWVudHMgdG8gYGNyZWF0ZWRgIHdpdGhpbiBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AgYW5kIGB2eGxhbl9mZGJfdXBkYXRlX2NyZWF0ZWAsIGJ1dCBjcml0aWNhbGx5LCB0aGUgY29kZSBvbmx5ICp3cml0ZXMqIHRvIGAqY3JlYXRlZGAgaWYgdGhlIHBvaW50ZXIgaXMgbm9uLU5VTEwuIE5vIHJlYWRzLiBCYWNrIGluIGB2eGxhbl92bmlfYWRkYCwgaXQncyB1c2VkIGluIGFuIGBpZiAoZmRiX2NyZWF0ZWQpYCBibG9jay4gVGhpcyBjaGVja3MgaXMgc2FmZSBiZWNhdXNlIHRoZSB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCBhdCBsaW5lIDczMy4gU28gYGZkYl9jcmVhdGVkYCBpcyBzYWZlLlxuVGhlIG5leHQgcGxhY2UgSSB3YW50IHRvIHZlcmlmeSBpcyBoZXJlOiBgdW5pb24gdnhsYW5fYWRkciAqcmlwID0gdnhsYW5fYWRkcl9hbnkoXHUwMDI2dm5pbm9kZS1cdTAwM2VyZW1vdGVfaXApID8gXHUwMDI2dnhsYW4tXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX2lwIDogXHUwMDI2dm5pbm9kZS1cdTAwM2VyZW1vdGVfaXA7YC4gSSd2ZSB1c2VkIHRoaXMgcGF0dGVybiBhIGh1bmRyZWQgdGltZXMuICBgdm5pbm9kZWAgaXMgY3JlYXRlZCB3aXRoIGB2eGxhbl92bmlfYWxsb2ModnhsYW4sIHYpYC4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgcmVtb3RlX2lwIGluIGB2eGxhbl92bmlfYWxsb2NgLiBMb29raW5nIGF0IGB2eGxhbl92bmlfYWxsb2NgLCBJIHNlZSBpdCBjYWxscyBga21lbV9jYWNoZV9hbGxvY2AuIEkgd2lsbCBuZWVkIHRvIHZlcmlmeSBpZiB0aGUgcmVtb3RlIGlwIGlzIGluaXRpYWxpemVkIHRoZXJlLlxuSSdtIHNhdGlzZmllZCB0aGF0IHRoaXMgcGF0Y2gsIGFzIGl0IHN0YW5kcywgc2VlbXMgY2xlYW4gZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBJdCBsb29rcyBsaWtlIHRoZSBwYXRjaCBhdXRob3JzIHRob3VnaHQgYWJvdXQgdGhlIHBpdGZhbGxzIGFuZCB0b29rIGFwcHJvcHJpYXRlIG1lYXN1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgwNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUxOjE1LjcwNTk0NjA5NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY2ODYwOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnhsYW5fdm5pX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz02ODk9c3RhdGljIHZvaWQgX192eGxhbl92bmlfZGVsX2xpc3Qoc3RydWN0IHZ4bGFuX3ZuaV9ncm91cCAqdmcsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy02OTUtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6Njk2OnN0YXRpYyBzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnZ4bGFuX3ZuaV9hbGxvYyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy02OTctXFx0XFx0XFx0XFx0XFx0ICAgICAgX19iZTMyIHZuaSlcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jPTcyNj1zdGF0aWMgaW50IHZ4bGFuX3ZuaV9hZGQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy03NDUtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6NzQ2OlxcdHZuaW5vZGUgPSB2eGxhbl92bmlfYWxsb2ModnhsYW4sIHYpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTc0Ny1cXHRpZiAoIXZuaW5vZGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUxOjE1Ljc2MjYzNjIyNVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNTAwMDYzNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGB2eGxhbl92bmlfYWxsb2NgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIGB2eGxhbl92bmlfYWxsb2NgLiBUaGUgZmFjdCB0aGF0IEknbSBldmVuICp0aGlua2luZyogYWJvdXQgdGhpcyBmdW5jdGlvbiBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIFZOSSAoVlhMQU4gTmV0d29yayBJZGVudGlmaWVyKSBhbGxvY2F0aW9uLCBhbmQgcHJvYmFibHkgaW4gdGhlIGNvbnRleHQgb2YgYSB2aXJ0dWFsaXplZCBuZXR3b3JrIGVudmlyb25tZW50LiBNeSBicmFpbidzIGFscmVhZHkgZ2VhcmluZyB1cCB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIHVuZGVybHlpbmcgbWVjaGFuaXNtczogaXMgdGhpcyBhIGNlbnRyYWxpemVkIGFsbG9jYXRvciwgb3IgYSBkaXN0cmlidXRlZCBvbmU/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGNvdW50ZXIsIGEgbW9yZSBjb21wbGV4IGJpdG1hcCwgb3IgcGVyaGFwcyBldmVuIHNvbWV0aGluZyBsZXZlcmFnaW5nIGEgbW9yZSBzb3BoaXN0aWNhdGVkIGRhdGEgc3RydWN0dXJlIGZvciBvcHRpbWl6ZWQgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uP1xuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3Igc2NhbGFiaWxpdHkuIENhbiB0aGlzIGhhbmRsZSBhIG1hc3NpdmUgbnVtYmVyIG9mIFZOSXMsIGFuZCBob3cgYXJlIHdlIG1hbmFnaW5nIHBvdGVudGlhbCBmcmFnbWVudGF0aW9uIGlzc3VlcyBpbiB0aGUgVk5JIHNwYWNlPyBJcyB0aGVyZSBhbnkgbG9naWMgZm9yIGhhbmRsaW5nIFZOSSBjb2xsaXNpb25zIG9yIGNvbmZsaWN0cywgcGFydGljdWxhcmx5IGluIGEgbXVsdGktdGVuYW50IGVudmlyb25tZW50PyBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIHR5cGljYWwgY2hhbGxlbmdlczogcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBpZiBtdWx0aXBsZSBwcm9jZXNzZXMgYXJlIHRyeWluZyB0byBhbGxvY2F0ZSBWTklzIGNvbmN1cnJlbnRseSwgYW5kIHRoZSBpbXBvcnRhbmNlIG9mIGF0b21pY2l0eSBhbmQgbG9ja2luZyBzdHJhdGVnaWVzLlxuXG5GdXJ0aGVybW9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVycm9yIGhhbmRsaW5nLiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGRlYWwgd2l0aCBhbGxvY2F0aW9uIGZhaWx1cmVzPyBEb2VzIGl0IHJldHVybiBhbiBlcnJvciBjb2RlLCB0aHJvdyBhbiBleGNlcHRpb24sIG9yIG1heWJlIGV2ZW4gc2lnbmFsIGFuIG91dC1vZi1WTklzIGNvbmRpdGlvbj8gSSdtIGxvb2tpbmcgZm9yIHJvYnVzdG5lc3MsIGhlcmUuIEhvdyB3ZWxsIGRvZXMgaXQgaGFuZGxlIGNvcm5lciBjYXNlcyBhbmQgZWRnZSBjb25kaXRpb25zPyBBcmUgdGhlcmUgYW55IHByb3RlY3Rpb25zIGFnYWluc3QgcmVzb3VyY2UgZXhoYXVzdGlvbiBvciBkZW5pYWwtb2Ytc2VydmljZT8gVGhpcyBpcyBjcml0aWNhbCBmb3IgcmVsaWFiaWxpdHkgaW4gYSBwcm9kdWN0aW9uIGVudmlyb25tZW50LiBJ4oCZbSBob3BpbmcgdG8gZmluZCBjbGV2ZXIgbG9naWMgdG8gaGFuZGxlIHRoZXNlIGlzc3VlcyB3aXRoaW4gdGhlIGZ1bmN0aW9uLlxuXG5BbmQgZmluYWxseSwgSSdtIGV4cGVjdGluZyBzb21lIGtpbmQgb2YgaW50ZWdyYXRpb24gd2l0aCB0aGUgcmVzdCBvZiB0aGUgVlhMQU4gc3RhY2suIEhvdyBkb2VzIHRoaXMgYWxsb2NhdGlvbiBpbnRlcmZhY2Ugd2l0aCB0aGUgZW5jYXBzdWxhdGlvbiBhbmQgZGVjYXBzdWxhdGlvbiBsb2dpYz8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRhdGFiYXNlcyBvciBjb250cm9sIHBsYW5lIGNvbXBvbmVudHM/IFRoZSBlbGVnYW5jZSBvZiB0aGlzIGludGVncmF0aW9uIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgdGhlIG92ZXJhbGwgbmV0d29yayBwZXJmb3JtYW5jZS4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg4MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUxOjE5LjI2MjcwMjIyNVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjk2LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjk2OlxcdHN0YXRpYyBzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnZ4bGFuX3ZuaV9hbGxvYyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4gNjk3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIF9fYmUzMiB2bmkpXFxuIDY5ODpcXHR7XFxuIDY5OTpcXHRcXHRzdHJ1Y3QgdnhsYW5fdm5pX25vZGUgKnZuaW5vZGU7XFxuIDcwMDpcXHRcXG4gNzAxOlxcdFxcdHZuaW5vZGUgPSBremFsbG9jX29iaigqdm5pbm9kZSk7XFxuIDcwMjpcXHRcXHRpZiAoIXZuaW5vZGUpXFxuIDcwMzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNzA0OlxcdFxcdHZuaW5vZGUtXFx1MDAzZXN0YXRzID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IHZ4bGFuX3ZuaV9zdGF0c19wY3B1KTtcXG4gNzA1OlxcdFxcdGlmICghdm5pbm9kZS1cXHUwMDNlc3RhdHMpIHtcXG4gNzA2OlxcdFxcdFxcdGtmcmVlKHZuaW5vZGUpO1xcbiA3MDc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDcwODpcXHRcXHR9XFxuIDcwOTpcXHRcXHR2bmlub2RlLVxcdTAwM2V2bmkgPSB2bmk7XFxuIDcxMDpcXHRcXHR2bmlub2RlLVxcdTAwM2VobGlzdDQudnhsYW4gPSB2eGxhbjtcXG4gNzExOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiA3MTI6XFx0XFx0dm5pbm9kZS1cXHUwMDNlaGxpc3Q2LnZ4bGFuID0gdnhsYW47XFxuIDcxMzpcXHQjZW5kaWZcXG4gNzE0OlxcdFxcbiA3MTU6XFx0XFx0cmV0dXJuIHZuaW5vZGU7XFxuIDcxNjpcXHR9XFxuIDcxNzpcXHRcXG4gNzE4OlxcdHN0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9mcmVlKHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSlcXG4gNzE5OlxcdHtcXG4gNzIwOlxcdFxcdGZyZWVfcGVyY3B1KHZuaW5vZGUtXFx1MDAzZXN0YXRzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MTkuMjYyODA1MDk1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyMDI3NTQ0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2Ygdm5pbm9kZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIGB2bmlub2RlYCBzdHJ1Y3R1cmUgaXMgaGFuZGxlZCwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0J3MgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqKCp2bmlub2RlKWAuIFRoaXMgaXMga2V5IGJlY2F1c2UgdGhhdCBtZWFucyB0aGUgZW50aXJlIHN0cnVjdHVyZSBnZXRzIHplcm9lZCByaWdodCBvZmYgdGhlIGJhdCEgU28sIHRoYXQgaW1wb3J0YW50IGByZW1vdGVfaXBgIGZpZWxkPyBJdCBzdGFydHMgd2l0aCBhbGwgemVyb3MuIFRoYXQncyBnb29kIHRvIGtub3cuXG5cbk5vdywgaWYgYSBgZ3JvdXBgIGlzIHByb3ZpZGVkIGxhdGVyIG9uLCBgbWVtY3B5YCBpcyB1c2VkIHdpdGhpbiBgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cGAgdG8gY29weSB0aGUgSVAgYWRkcmVzcyBmcm9tIHRoZSBgZ3JvdXBgIGludG8gYHZuaW5vZGUtXHUwMDNlcmVtb3RlX2lwYC4gTWFrZXMgc2Vuc2UuXG5cbkJ1dCB3aGF0IGFib3V0IHRoYXQgYGFsbF96ZXJvc19tYWNgIHZhcmlhYmxlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgdG9vLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyB3aGVyZSBpdCdzIGRlZmluZWQgYW5kIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gY2hlY2sgaG93IHRoYXQgdmFyaWFibGUgd29ya3MgdG8gc2VlIGlmIGl0J3MgcmVsYXRlZC4gSSdsbCBjaGVjayBpdHMgZGVmaW5pdGlvbiB0byBzZWUgaG93IGl0IGNhbiBhZmZlY3QgdGhlIG92ZXJhbGwgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzU3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MjEuNDY1NTYyMjc1WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA3MjIzMDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbF96ZXJvc19tYWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz01Nz11bnNpZ25lZCBpbnQgdnhsYW5fbmV0X2lkO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy01OC1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NTk6Y29uc3QgdTggYWxsX3plcm9zX21hY1tFVEhfQUxFTiArIDJdO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy02MC1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgdnhsYW5fbGlua19vcHM7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9Mjc1NT1zdGF0aWMgbmV0ZGV2X3R4X3QgdnhsYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI4MzQtXFx0aWYgKGYgPT0gTlVMTCkge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyODM1OlxcdFxcdGYgPSB2eGxhbl9maW5kX21hY190eCh2eGxhbiwgYWxsX3plcm9zX21hYywgdm5pKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjgzNi1cXHRcXHRpZiAoZiA9PSBOVUxMKSB7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9Mzk5ND1zdGF0aWMgaW50IHZ4bGFuX2Rldl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQwMzUtXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ2eGxhbi1cXHUwMDNlaGFzaF9sb2NrKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NDAzNjpcXHRcXHRlcnIgPSB2eGxhbl9mZGJfdXBkYXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy00MDM3LVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZHN0LVxcdTAwM2VyZW1vdGVfaXAsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9NDQ0OD1zdGF0aWMgaW50IHZ4bGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy00NDg4LVxcdFxcdGlmICghdnhsYW5fYWRkcl9hbnkoXFx1MDAyNmNvbmYucmVtb3RlX2lwKSkge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo0NDg5OlxcdFxcdFxcdGVyciA9IHZ4bGFuX2ZkYl91cGRhdGUodnhsYW4sIGFsbF96ZXJvc19tYWMsXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ0OTAtXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZjb25mLnJlbW90ZV9pcCxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy00NTA1LVxcdFxcdGlmICghdnhsYW5fYWRkcl9hbnkoXFx1MDAyNmRzdC1cXHUwMDNlcmVtb3RlX2lwKSlcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NDUwNjpcXHRcXHRcXHRfX3Z4bGFuX2ZkYl9kZWxldGUodnhsYW4sIGFsbF96ZXJvc19tYWMsXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ1MDctXFx0XFx0XFx0XFx0XFx0ICAgZHN0LVxcdTAwM2VyZW1vdGVfaXAsXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9wcml2YXRlLmg9MTI9ZXh0ZXJuIHVuc2lnbmVkIGludCB2eGxhbl9uZXRfaWQ7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oOjEzOmV4dGVybiBjb25zdCB1OCBhbGxfemVyb3NfbWFjW0VUSF9BTEVOICsgMl07XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fcHJpdmF0ZS5oLTE0LWV4dGVybiBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgdnhsYW5fdm5pX3JodF9wYXJhbXM7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz00NzM9c3RhdGljIGludCB2eGxhbl91cGRhdGVfZGVmYXVsdF9mZGJfZW50cnkoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIF9fYmUzMiB2bmksXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy00ODMtXFx0aWYgKHJlbW90ZV9pcCBcXHUwMDI2XFx1MDAyNiAhdnhsYW5fYWRkcl9hbnkocmVtb3RlX2lwKSkge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjQ4NDpcXHRcXHRlcnIgPSB2eGxhbl9mZGJfdXBkYXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTQ4NS1cXHRcXHRcXHRcXHQgICAgICAgcmVtb3RlX2lwLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNTAwLVxcdGlmIChvbGRfcmVtb3RlX2lwIFxcdTAwMjZcXHUwMDI2ICF2eGxhbl9hZGRyX2FueShvbGRfcmVtb3RlX2lwKSkge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjUwMTpcXHRcXHRfX3Z4bGFuX2ZkYl9kZWxldGUodnhsYW4sIGFsbF96ZXJvc19tYWMsXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNTAyLVxcdFxcdFxcdFxcdCAgICpvbGRfcmVtb3RlX2lwLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NjE0PXN0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9kZWxldGVfZ3JvdXAoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy02MjUtXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ2eGxhbi1cXHUwMDNlaGFzaF9sb2NrKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo2MjY6XFx0XFx0X192eGxhbl9mZGJfZGVsZXRlKHZ4bGFuLCBhbGxfemVyb3NfbWFjLFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTYyNy1cXHRcXHRcXHRcXHQgICAodnhsYW5fYWRkcl9hbnkoXFx1MDAyNnZuaW5vZGUtXFx1MDAzZXJlbW90ZV9pcCkgP1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NzI2PXN0YXRpYyBpbnQgdnhsYW5fdm5pX2FkZChzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTc5Mi1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnZ4bGFuLVxcdTAwM2VoYXNoX2xvY2spO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jOjc5MzpcXHRcXHRfX3Z4bGFuX2ZkYl9kZWxldGUodnhsYW4sIGFsbF96ZXJvc19tYWMsICpyaXAsXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtNzk0LVxcdFxcdFxcdFxcdCAgIHZ4bGFuLVxcdTAwM2VjZmcuZHN0X3BvcnQsIHZuaW5vZGUtXFx1MDAzZXZuaSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MjIuODcyNzkzNDg3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3MzU5NTMzODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2eGxhbiBGREIgRGVsZXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIGBhbGxfemVyb3NfbWFjYCBpcyBqdXN0IGEgQlNTLWJhc2VkLCB6ZXJvLWluaXRpYWxpemVkIGdsb2JhbCBhcnJheS4gTm90aGluZyBpbmhlcmVudGx5IGludGVyZXN0aW5nIHRoZXJlLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGlzIGBfX3Z4bGFuX2ZkYl9kZWxldGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiB3aGF0IGFyZ3VtZW50cyBkb2VzIGl0IHRha2UsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBkb2VzIGl0IHBvdGVudGlhbGx5IHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBMb29rcyBsaWtlIEkgZG9uJ3QgbmVlZCB0byB3b3JyeS4gRnJvbSB0aGUgYXJndW1lbnQgbGlzdCwgaXQganVzdCBzZWVtcyB0byBiZSB1c2luZyBNQUMsIElQLCBwb3J0LCBzb3VyY2UgVk5JLCBWTkksIGlmaW5kZXgsIGFuZCBhIGJvb2xlYW4gdG8gZGVsZXRlIGFuIEZEQiBlbnRyeS4gQWxsIGtleSBwYXJhbWV0ZXJzLlxuXG5OZXh0IHVwLCB0aGlzIGBjYWxsX3JjdShcdTAwMjZ2bmlub2RlLVx1MDAzZXJjdSwgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUpO2AgY2FsbC4gQWxyaWdodCwgYGNhbGxfcmN1YCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBncmFjZSBwZXJpb2QgZm9yIG1lbW9yeSByZWNsYW1hdGlvbi4gR29vZC4gTm93LCB0aGUgbWVhdCBvZiBpdDogYHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlYC4gSXQncyBwcmV0dHkgY2xlYXIgdGhpcyBmdW5jdGlvbiBpcyB0aGUgb25lIGFjdHVhbGx5IGZyZWVpbmcgdGhlIGB2bmlub2RlYCBzdHJ1Y3R1cmUuIFNvLCB0aW1lIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZWAgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2l0aCBob3cgaXQgbWFuYWdlcyB0aGlzIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MTYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMjI6NTE6MjUuNjA4NzUwMTc3WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzkwNTAzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2eGxhbl92bmlfbm9kZV9yY3VfZnJlZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC92eGxhbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM9NzE4PXN0YXRpYyB2b2lkIHZ4bGFuX3ZuaV9mcmVlKHN0cnVjdCB2eGxhbl92bmlfbm9kZSAqdm5pbm9kZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTcyMy1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo3MjQ6c3RhdGljIHZvaWQgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTcyNS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz03MjY9c3RhdGljIGludCB2eGxhbl92bmlfYWRkKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtODAzLVxcdFxcdHZ4bGFuX3ZzX2FkZF9kZWxfdm5pbm9kZSh2eGxhbiwgdm5pbm9kZSwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6ODA0OlxcdGNhbGxfcmN1KFxcdTAwMjZ2bmlub2RlLVxcdTAwM2VyY3UsIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04MDUtXFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jLTgwNy1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYzo4MDg6c3RhdGljIHZvaWQgdnhsYW5fdm5pX25vZGVfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmMtODA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX3ZuaWZpbHRlci5jPTgxNj1zdGF0aWMgaW50IHZ4bGFuX3ZuaV9kZWwoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04NDctXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6ODQ4OlxcdGNhbGxfcmN1KFxcdTAwMjZ2bmlub2RlLVxcdTAwM2VyY3UsIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy04NDktXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYz05NDI9dm9pZCB2eGxhbl92bmlncm91cF91bmluaXQoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy05NTYtXFx0XFx0dnhsYW5fdm5pZmlsdGVyX25vdGlmeSh2eGxhbiwgdiwgUlRNX0RFTFRVTk5FTCk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fdm5pZmlsdGVyLmM6OTU3OlxcdFxcdGNhbGxfcmN1KFxcdTAwMjZ2LVxcdTAwM2VyY3UsIHZ4bGFuX3ZuaV9ub2RlX3JjdV9mcmVlKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl92bmlmaWx0ZXIuYy05NTgtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQyMjo1MToyNS42ODI2NjY5NjVaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjQyMjk5MDY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZXcgUmlza3MgSW50cm9kdWNlZCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTGluZSA4MDggYWxyZWFkeSBoYXMgdGhlIGB2eGxhbl92bmlfbm9kZV9yY3VfZnJlZWAgZnVuY3Rpb24gaW4gZXhpc3RpbmcgY29kZS4gVGhlIGVycm9yIHBhdGggaW4gYHZ4bGFuX3ZuaV9hZGRgIGlzIGNvcnJlY3RseSB1c2luZyBgY2FsbF9yY3VgIGFmdGVyIGB2bmlub2RlYCBoYXMgYmVlbiBleHBvc2VkIHRvIFJDVSByZWFkZXJzIOKAkyB0aGlzIHByZXZlbnRzIGEgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIGlzIGdyZWF0LiBJ4oCZbSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMsIGJ1dCB0aG9zZSBhcmUgY292ZXJlZCBieSBLQVNBTi9MT0NLREVQL0tDU0FOLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG9yIGV4cG9zZSBuZXcgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3Mgc3BlY2lmaWNhbGx5IGRldGVjdGFibGUgYnkgS01TQU4/XG5cbkxldOKAmXMgcmV2aWV3IHRoZSBLTVNBTiBjcml0ZXJpYTpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U6KiogTm9wZSwgbm90aGluZyBpcyBiZWluZyBjb3BpZWQgb3V0LlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogVGhlIGBib29sIGZkYl9jcmVhdGVkID0gZmFsc2U7YCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgdGhlIGBjcmVhdGVkYCBwb2ludGVyIGlzICp3cml0dGVuKiB0bywgYW5kIGNoZWNrZWQgKGBpZiAoY3JlYXRlZClgKSBiZWZvcmUgdXNlIGFuZCBpbiBgdnhsYW5fdm5pX2FkZGAgd2l0aCB0aGUgZXhwbGljaXRseSBpbml0aWFsaXplZCB2YXJpYWJsZS4gTm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW52b2x2ZWQgaW4gYnJhbmNoaW5nIGhlcmUuXG4zLiAgKipBbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMgcG90ZW50aWFsbHkgcmVhZCBsYXRlcjoqKiBUaGUgYWxsb2NhdGlvbnMgdXNlIGBremFsbG9jX29iamAsIGFuZCBubyBuZXcgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGJ5IHRoaXMgcGF0Y2gsIHNvIHdl4oCZcmUgZ29vZC5cbjQuICAqKkJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RocyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzOioqIE5vIGNoYW5nZXMgdG8gYW55IG9mIHRob3NlLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBjbGVhcmx5IGBmYWxzZWAuXG5cbk5vdywgZm9yIGEgY2FyZWZ1bCBjb250cmFzdCB3aXRoIEtBU0FOOiB0aGlzIHBhdGNoIGFkZHMgYW4gZXJyb3ItdW53aW5kIHBhdGggdG8gYHZ4bGFuX3ZuaV9hZGRgIHRoYXQgZW5zdXJlcyB0aGUgY3JlYXRlZCBkZWZhdWx0IEZEQiBlbnRyeSBpcyBkZWxldGVkLCB0aGUgYHZuaW5vZGVgIGlzIHVubGlua2VkLCBhbmQgZnJlZWQgd2l0aCBSQ1UsIGVuc3VyaW5nIHRoZSBjcmVhdGVkIEZEQiBlbnRyeSBpcyBkZWxldGVkLiBQb3RlbnRpYWwgaXNzdWVzIHdpdGggbWVtb3J5IHNhZmV0eSBvciBjb25jdXJyZW5jeSAoVUFGLCBkb3VibGUtZnJlZSwgZXRjLikgKmhlcmUqIGFyZSBhbGwgdGhpbmdzIEtBU0FOIGFuZCBMT0NLREVQIHdvdWxkIGNhdGNoLiBUaGF0IGNvdmVycyBsaWZlY3ljbGUgbWFuYWdlbWVudCwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgbG9ja2luZyByZWxhdGVkIHRvIGB2eGxhbi1cdTAwM2VoYXNoX2xvY2tgLlxuXG5LTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGRlYWxzIHdpdGggcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgKHN0YWNrLCBoZWFwLCBwYWdlcykgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gV2UgKmRvKiBoYXZlIHRoYXQgYGJvb2wgKmNyZWF0ZWRgIHBhcmFtZXRlciBhbmQgdGhlIGBmZGJfY3JlYXRlZGAgbG9jYWwgdmFyaWFibGUgaW4gYHZ4bGFuX3ZuaV9hZGRgLCBidXQgaXQncyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGFuZCBvbmx5IGV2ZXIgd3JpdHRlbiB0byB0aHJvdWdoIHRoZSBwb2ludGVyLCBub3QgcmVhZCBvciBsZWFrZWQuIFNvLCBubyBLTVNBTi1zcGVjaWZpYyByaXNrcyBhcmUgcHJlc2VudC4gVGhlIHZhcmlhYmxlIGlzIHdyaXR0ZW4gdG8sIGFuZCBuZXZlciByZWFkIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uXG5cbkFsbCBjbGVhci4gSSdtIHNhdGlzZmllZC4gVGltZSBmb3IgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MDEsIk91dHB1dFRva2VucyI6MzExLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDIyOjUxOjMyLjEwNTY2MDY0M1oiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvci11bndpbmQgbG9naWMgdG8gdnhsYW5fdm5pX2FkZCgpIGlmIHZ4bGFuX3ZuaV91cGRhdGVfZ3JvdXAoKSBmYWlscywgaW50cm9kdWNpbmcgYSBib29sZWFuIG91dC1wYXJhbWV0ZXIgKCdjcmVhdGVkJyAvICdmZGJfY3JlYXRlZCcpIGFjcm9zcyB2eGxhbl9mZGJfdXBkYXRlKCkgYW5kIGhlbHBlcnMgdG8gdHJhY2sgd2hldGhlciBhbiBGREIgZW50cnkgd2FzIGNyZWF0ZWQgc28gaXQgY2FuIGJlIHJvbGxlZCBiYWNrLlxcblxcbjEuIEtBU0FOIC8gTE9DS0RFUCBBcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggbW9kaWZpZXMgY2xlYW51cCBwYXRocyBhbmQgb2JqZWN0IGxpZmVjeWNsZSAodW53aW5kaW5nIGhhc2h0YWJsZSBpbnNlcnRpb24sIGxpc3QgYWRkaXRpb24sIHNvY2tldCBzdGF0ZSwgYW5kIHNjaGVkdWxpbmcgUkNVIGRlc3RydWN0aW9uIG9mIHZuaW5vZGUsIHBsdXMgZGVsZXRpbmcgRkRCIGVudHJpZXMgdW5kZXIgaGFzaF9sb2NrKS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgaGVyZSAoZS5nLiB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGxpc3QgY29ycnVwdGlvbiwgb3IgbG9ja2luZyBkaXNjcmVwYW5jaWVzKSBhcmUgYWRkcmVzc2VkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLlxcbjIuIEtNU0FOIEFwcGxpY2FiaWxpdHk6IEtNU0FOIGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGFuZCBpbmZvLWxlYWtzLiBUaGUgbmV3bHkgaW50cm9kdWNlZCB2YXJpYWJsZSAnYm9vbCBmZGJfY3JlYXRlZCA9IGZhbHNlOycgaW4gdnhsYW5fdm5pX2FkZCgpIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2ssIGFuZCB0aGUgY2FsbGVlIGZ1bmN0aW9ucyBvbmx5IGNvbmRpdGlvbmFsbHkgd3JpdGUgJypjcmVhdGVkID0gdHJ1ZScgd2l0aG91dCByZWFkaW5nIGZyb20gaXQgdW5pbml0aWFsaXplZC4gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGhlYXAgYWxsb2NhdGlvbnMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgY3JlYXRlZCwgYW5kIG5vIGJyYW5jaGluZyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIGFuZCBkb2VzIG5vdCBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yLXVud2luZCBsb2dpYyB0byB2eGxhbl92bmlfYWRkKCkgaWYgdnhsYW5fdm5pX3VwZGF0ZV9ncm91cCgpIGZhaWxzLCBpbnRyb2R1Y2luZyBhIGJvb2xlYW4gb3V0LXBhcmFtZXRlciAoJ2NyZWF0ZWQnIC8gJ2ZkYl9jcmVhdGVkJykgYWNyb3NzIHZ4bGFuX2ZkYl91cGRhdGUoKSBhbmQgaGVscGVycyB0byB0cmFjayB3aGV0aGVyIGFuIEZEQiBlbnRyeSB3YXMgY3JlYXRlZCBzbyBpdCBjYW4gYmUgcm9sbGVkIGJhY2suXFxuXFxuMS4gS0FTQU4gLyBMT0NLREVQIEFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBtb2RpZmllcyBjbGVhbnVwIHBhdGhzIGFuZCBvYmplY3QgbGlmZWN5Y2xlICh1bndpbmRpbmcgaGFzaHRhYmxlIGluc2VydGlvbiwgbGlzdCBhZGRpdGlvbiwgc29ja2V0IHN0YXRlLCBhbmQgc2NoZWR1bGluZyBSQ1UgZGVzdHJ1Y3Rpb24gb2Ygdm5pbm9kZSwgcGx1cyBkZWxldGluZyBGREIgZW50cmllcyB1bmRlciBoYXNoX2xvY2spLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBoZXJlIChlLmcuIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgbGlzdCBjb3JydXB0aW9uLCBvciBsb2NraW5nIGRpc2NyZXBhbmNpZXMpIGFyZSBhZGRyZXNzZWQgYnkgS0FTQU4gYW5kIExPQ0tERVAuXFxuMi4gS01TQU4gQXBwbGljYWJpbGl0eTogS01TQU4gZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgYW5kIGluZm8tbGVha3MuIFRoZSBuZXdseSBpbnRyb2R1Y2VkIHZhcmlhYmxlICdib29sIGZkYl9jcmVhdGVkID0gZmFsc2U7JyBpbiB2eGxhbl92bmlfYWRkKCkgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIG9uIHRoZSBzdGFjaywgYW5kIHRoZSBjYWxsZWUgZnVuY3Rpb25zIG9ubHkgY29uZGl0aW9uYWxseSB3cml0ZSAnKmNyZWF0ZWQgPSB0cnVlJyB3aXRob3V0IHJlYWRpbmcgZnJvbSBpdCB1bmluaXRpYWxpemVkLiBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgaGVhcCBhbGxvY2F0aW9ucyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBjcmVhdGVkLCBhbmQgbm8gYnJhbmNoaW5nIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgYW5kIGRvZXMgbm90IGp1c3RpZnkgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtqk9h[1] Phase: Succeeded StartedAt: 2026-09-11 22:51:43 +0000 UTC FinishedAt: 2026-09-11 22:51:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 22:51:43 +0000 UTC FinishedAt: 2026-09-11 22:51:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2] Phase: Succeeded StartedAt: 2026-09-11 22:51:43 +0000 UTC FinishedAt: 2026-09-12 02:31:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 22:51:43 +0000 UTC FinishedAt: 2026-09-12 02:31:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 22:51:43 +0000 UTC FinishedAt: 2026-09-11 22:51:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 22:51:43 +0000 UTC FinishedAt: 2026-09-11 22:51:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtqk9h/series-workflowtqk9h-convert-artifact-1699262282/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 22:51:53 +0000 UTC FinishedAt: 2026-09-11 23:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 22:51:53 +0000 UTC FinishedAt: 2026-09-11 23:08:19 +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:*3442472a-5098-4760-a41b-9c48ad0dcf83,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-workflowtqk9h/series-workflowtqk9h-convert-artifact-1699262282/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": "491275ad-a52b-4817-8a3c-701de3d538d7", "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-workflowtqk9h/series-workflowtqk9h-build-action-2560444216/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 22:51:53 +0000 UTC FinishedAt: 2026-09-11 23:08:09 +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:*3442472a-5098-4760-a41b-9c48ad0dcf83,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-workflowtqk9h/series-workflowtqk9h-convert-artifact-1699262282/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": "491275ad-a52b-4817-8a3c-701de3d538d7", "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-workflowtqk9h/series-workflowtqk9h-build-action-2560444216/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 23:08:19 +0000 UTC FinishedAt: 2026-09-11 23:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 23:08:19 +0000 UTC FinishedAt: 2026-09-11 23:08:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 23:08:19 +0000 UTC FinishedAt: 2026-09-11 23:08:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 23:08:19 +0000 UTC FinishedAt: 2026-09-11 23:08:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtqk9h/series-workflowtqk9h-convert-artifact-97742565/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 23:08:29 +0000 UTC FinishedAt: 2026-09-11 23:10:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 23:08:29 +0000 UTC FinishedAt: 2026-09-11 23:10:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*491275ad-a52b-4817-8a3c-701de3d538d7,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-workflowtqk9h/series-workflowtqk9h-build-action-2560444216/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-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 23:10:25 +0000 UTC FinishedAt: 2026-09-11 23:10:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 23:10:25 +0000 UTC FinishedAt: 2026-09-11 23:10:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 23:10:25 +0000 UTC FinishedAt: 2026-09-11 23:26:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 23:10:25 +0000 UTC FinishedAt: 2026-09-11 23:26:49 +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:*3442472a-5098-4760-a41b-9c48ad0dcf83,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-workflowtqk9h/series-workflowtqk9h-convert-artifact-97742565/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": "11ceede2-b6c0-4854-90c9-fdc022528ada", "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-workflowtqk9h/series-workflowtqk9h-build-action-2719367985/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 23:10:25 +0000 UTC FinishedAt: 2026-09-11 23:26:39 +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:*3442472a-5098-4760-a41b-9c48ad0dcf83,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-workflowtqk9h/series-workflowtqk9h-convert-artifact-97742565/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": "11ceede2-b6c0-4854-90c9-fdc022528ada", "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-workflowtqk9h/series-workflowtqk9h-build-action-2719367985/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 23:26:49 +0000 UTC FinishedAt: 2026-09-11 23:26:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 23:26:49 +0000 UTC FinishedAt: 2026-09-11 23:26:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 23:26:49 +0000 UTC FinishedAt: 2026-09-11 23:28:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 23:26:49 +0000 UTC FinishedAt: 2026-09-11 23:28:33 +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:*11ceede2-b6c0-4854-90c9-fdc022528ada,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-workflowtqk9h/series-workflowtqk9h-build-action-2719367985/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-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 23:28:43 +0000 UTC FinishedAt: 2026-09-12 02:31:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 23:28:43 +0000 UTC FinishedAt: 2026-09-12 02:31:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"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:*491275ad-a52b-4817-8a3c-701de3d538d7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*11ceede2-b6c0-4854-90c9-fdc022528ada,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-workflowtqk9h/series-workflowtqk9h-build-action-2560444216/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-workflowtqk9h/series-workflowtqk9h-build-action-2719367985/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 23:28:43 +0000 UTC FinishedAt: 2026-09-11 23:28:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 23:28:43 +0000 UTC FinishedAt: 2026-09-11 23:28:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"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-workflowtqk9h/series-workflowtqk9h-convert-artifact-3424406378/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 23:28:43 +0000 UTC FinishedAt: 2026-09-11 23:28:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 23:28:43 +0000 UTC FinishedAt: 2026-09-11 23:28:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 23:28:43 +0000 UTC FinishedAt: 2026-09-11 23:28:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 23:28:53 +0000 UTC FinishedAt: 2026-09-12 02:31:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtqk9h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"ef39fca8508597fa565cf2be72a884a712fb98af","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_vni_add","vxlan_fdb_update","vxlan_fdb_update_existing","vxlan_fdb_update_create","vxlan_vnifilter_process"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ef39fca8508597fa565cf2be72a884a712fb98af","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"61645882-9d5b-4310-89e2-4f3a98eee765","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 23:28:53 +0000 UTC FinishedAt: 2026-09-12 02:31:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*491275ad-a52b-4817-8a3c-701de3d538d7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*11ceede2-b6c0-4854-90c9-fdc022528ada,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-workflowtqk9h/series-workflowtqk9h-build-action-2560444216/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-workflowtqk9h/series-workflowtqk9h-build-action-2719367985/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-workflowtqk9h/series-workflowtqk9h-convert-artifact-3424406378/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,}