Name: series-workflowgjkj5 Phase: Succeeded StartedAt: 2026-09-12 03:19:00 +0000 UTC FinishedAt: 2026-09-12 08:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[0] Phase: Succeeded StartedAt: 2026-09-12 03:19:00 +0000 UTC FinishedAt: 2026-09-12 04:05:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[0].run-triage Phase: Succeeded StartedAt: 2026-09-12 03:19:00 +0000 UTC FinishedAt: 2026-09-12 04:05:37 +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": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX" ], "series_id": "c5dee797-982c-4f00-82a9-ac00e8b3b8bb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__unix_walk_scc", "unix_scc_dead", "unix_walk_scc_fast", "unix_walk_scc", "unix_gc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "78445023439506ebd83b86d40b1e428a3b309d4a", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3VuaXhfd2Fsa19zY2MmIzM0OywKICAgICYjMzQ7dW5peF9zY2NfZGVhZCYjMzQ7LAogICAgJiMzNDt1bml4X3dhbGtfc2NjX2Zhc3QmIzM0OywKICAgICYjMzQ7dW5peF93YWxrX3NjYyYjMzQ7LAogICAgJiMzNDt1bml4X2djJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBBRl9VTklYIGdhcmJhZ2UgY29sbGVjdG9yJiMzOTtzIFRhcmphbiBTdHJvbmdseSBDb25uZWN0ZWQgQ29tcG9uZW50IChTQ0MpIGFsZ29yaXRobSBpbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gSXQgbW92ZXMgdGhlIG9mZi1zdGFjayBtYXJraW5nIChgdi1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXhgKSBhbmQgU0NDIElEIGFzc2lnbm1lbnQgKGB2LVx1MDAzZXNjY19pbmRleCA9IHZlcnRleC1cdTAwM2VzY2NfaW5kZXhgKSBmb3IgU0NDIHZlcnRpY2VzIGZyb20gYHVuaXhfc2NjX2RlYWQoKWAgaW50byBgX191bml4X3dhbGtfc2NjKClgLCBzaW1wbGlmaWVzIGB1bml4X3NjY19kZWFkKClgIGJ5IHJlbW92aW5nIHRoZSBgZmFzdGAgcGFyYW1ldGVyLCBhbmQgYWRkcyBhIHJlZ3Jlc3Npb24gdGVzdCBpbiBrc2VsZnRlc3RzLlxuXG5UaGlzIGNoYW5nZSB0b3VjaGVzIHB1cmVseSBpbnRlcm5hbCBncmFwaCBib29ra2VlcGluZyBmaWVsZHMgb24gYHN0cnVjdCB1bml4X3ZlcnRleGAgb2JqZWN0cyB0aGF0IGFyZSBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgYW55IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZ3JhcGggdHJhdmVyc2FsLCBsaXN0IG1hbmlwdWxhdGlvbiwgb3Igc29ja2V0IGxpZmV0aW1lcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb25zKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIGZhY2lsaXRpZXMgKGUuZy4sIENPTkZJR19ERUJVR19MSVNUKS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudHMgKFNDQykgVGFyamFuLWJhc2VkIGN5Y2xlIGRldGVjdGlvbiBhbGdvcml0aG0gaW4gVU5JWCBkb21haW4gc29ja2V0IGdhcmJhZ2UgY29sbGVjdGlvbiAobmV0L3VuaXgvZ2FyYmFnZS5jKS4gU3BlY2lmaWNhbGx5LCBpdCB1cGRhdGVzIF9fdW5peF93YWxrX3NjYyB0byBhc3NpZ24gdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCBhbmQgdXBkYXRlIHNjY19pbmRleCBhY3Jvc3MgdGhlIGVudGlyZSBTQ0MgcHJpb3IgdG8gY2FsbGluZyB1bml4X3NjY19kZWFkLCBhbmQgcmVtb3ZlcyB0aGUgZmFzdCBwYXJhbWV0ZXIgYW5kIG9mZi1zdGFjayBtYXJraW5nIGZyb20gdW5peF9zY2NfZGVhZC4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgZGlyZWN0bHkgZXhlcmNpc2VkIHdoZW4gcGFzc2luZyBmaWxlIGRlc2NyaXB0b3JzIGFjcm9zcyBVTklYIHNvY2tldHMgdmlhIFNDTV9SSUdIVFMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNDIyNmQwMTZkMGFlZDY0YWM0YWNmNDUyZjA2NWZiMjA1NzFiNjU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMDQ6MDQ6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvZ2FyYmFnZS5jIGIvbmV0L3VuaXgvZ2FyYmFnZS5jXG5pbmRleCA5ZmNhYWY1NWNiYTVkLi5kYTc3NGY1NmNhNjQ4IDEwMDY0NFxuLS0tIGEvbmV0L3VuaXgvZ2FyYmFnZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdW5peC9nYXJiYWdlLmNcbkBAIC0zNzQsNyAmIzQzOzM3NCw3IEBAIHN0YXRpYyBib29sIHVuaXhfdmVydGV4X2RlYWQoc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgpXG4gc3RhdGljIExJU1RfSEVBRCh1bml4X3Zpc2l0ZWRfdmVydGljZXMpO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMjtcbiBcbi1zdGF0aWMgYm9vbCB1bml4X3NjY19kZWFkKHN0cnVjdCBsaXN0X2hlYWQgKnNjYywgYm9vbCBmYXN0KVxuJiM0MztzdGF0aWMgYm9vbCB1bml4X3NjY19kZWFkKHN0cnVjdCBsaXN0X2hlYWQgKnNjYylcbiB7XG4gXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcbiBcdGJvb2wgc2NjX2RlYWQgPSB0cnVlO1xuQEAgLTM4NiwxMCAmIzQzOzM4Niw2IEBAIHN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBib29sIGZhc3QpXG4gXHRcdC8qIERvbiYjMzk7dCByZXN0YXJ0IERGUyBmcm9tIHRoaXMgdmVydGV4LiAqL1xuIFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZ2ZXJ0ZXgtXHUwMDNlZW50cnksIFx1MDAyNnVuaXhfdmlzaXRlZF92ZXJ0aWNlcyk7XG4gXG4tXHRcdC8qIE1hcmsgdmVydGV4IGFzIG9mZi1zdGFjayBmb3IgX191bml4X3dhbGtfc2NjKCkuICovXG4tXHRcdGlmICghZmFzdClcbi1cdFx0XHR2ZXJ0ZXgtXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xuLVxuIFx0XHRpZiAoc2NjX2RlYWQpXG4gXHRcdFx0c2NjX2RlYWQgPSB1bml4X3ZlcnRleF9kZWFkKHZlcnRleCk7XG4gXHR9XG5AQCAtNTIxLDYgJiM0Mzs1MTcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3VuaXhfd2Fsa19zY2Moc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgsXG4gXHR9XG4gXG4gXHRpZiAodmVydGV4LVx1MDAzZWluZGV4ID09IHZlcnRleC1cdTAwM2VzY2NfaW5kZXgpIHtcbiYjNDM7XHRcdHN0cnVjdCB1bml4X3ZlcnRleCAqdjtcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCBzY2M7XG4gXG4gXHRcdC8qIFNDQyBmaW5hbGlzZWQuXG5AQCAtNTMwLDcgJiM0Mzs1MjcsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX191bml4X3dhbGtfc2NjKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LFxuIFx0XHQgKi9cbiBcdFx0X19saXN0X2N1dF9wb3NpdGlvbihcdTAwMjZzY2MsIFx1MDAyNnZlcnRleF9zdGFjaywgXHUwMDI2dmVydGV4LVx1MDAzZXNjY19lbnRyeSk7XG4gXG4tXHRcdGlmICh1bml4X3NjY19kZWFkKFx1MDAyNnNjYywgZmFsc2UpKSB7XG4mIzQzO1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UodiwgXHUwMDI2c2NjLCBzY2NfZW50cnkpIHtcbiYjNDM7XHRcdFx0LyogTWFyayB2ZXJ0ZXggYXMgb2ZmLXN0YWNrIGFuZCBhc3NpZ24gYSB1bmlxdWUgSUQuICovXG4mIzQzO1x0XHRcdHYtXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xuJiM0MztcdFx0XHR2LVx1MDAzZXNjY19pbmRleCA9IHZlcnRleC1cdTAwM2VzY2NfaW5kZXg7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHVuaXhfc2NjX2RlYWQoXHUwMDI2c2NjKSkge1xuIFx0XHRcdHVuaXhfY29sbGVjdF9za2IoXHUwMDI2c2NjLCBoaXRsaXN0KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRpZiAodW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCBcdTAwM2MgdmVydGV4LVx1MDAzZXNjY19pbmRleClcbkBAIC01ODgsNyAmIzQzOzU5MSw3IEBAIHN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2NfZmFzdChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxuIFx0XHR2ZXJ0ZXggPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzLCB0eXBlb2YoKnZlcnRleCksIGVudHJ5KTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2c2NjLCBcdTAwMjZ2ZXJ0ZXgtXHUwMDNlc2NjX2VudHJ5KTtcbiBcbi1cdFx0aWYgKHVuaXhfc2NjX2RlYWQoXHUwMDI2c2NjLCB0cnVlKSkge1xuJiM0MztcdFx0aWYgKHVuaXhfc2NjX2RlYWQoXHUwMDI2c2NjKSkge1xuIFx0XHRcdGN5Y2xpY19zY2NzLS07XG4gXHRcdFx0dW5peF9jb2xsZWN0X3NrYihcdTAwMjZzY2MsIGhpdGxpc3QpO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jXG5pbmRleCBkODJhNzljMjFjMTc5Li5jMTY1ZjI1MDIyMGE0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmNcbkBAIC0zNzgsNCAmIzQzOzM3OCwyMSBAQCBURVNUX0Yoc2NtX3JpZ2h0cywgYmFja3RyYWNrX2Zyb21fc2NjKVxuIFx0Y2xvc2Vfc29ja2V0cygxMCk7XG4gfVxuIFxuJiM0MztURVNUX0Yoc2NtX3JpZ2h0cywgbWl4ZWRfbG93cG9pbnQpXG4mIzQzO3tcbiYjNDM7XHRjcmVhdGVfc29ja2V0cyg2KTtcbiYjNDM7XG4mIzQzO1x0c2VuZF9mZCgwLCAxKTtcbiYjNDM7XHRzZW5kX2ZkKDEsIDIpO1xuJiM0MztcdHNlbmRfZmQoMiwgMSk7XG4mIzQzO1x0c2VuZF9mZCgxLCAwKTtcbiYjNDM7XG4mIzQzO1x0c2VuZF9mZCgzLCA0KTtcbiYjNDM7XHRzZW5kX2ZkKDQsIDUpO1xuJiM0MztcdHNlbmRfZmQoNSwgNCk7XG4mIzQzO1x0c2VuZF9mZCg0LCAzKTtcbiYjNDM7XG4mIzQzO1x0Y2xvc2Vfc29ja2V0cyg2KTtcbiYjNDM7fVxuJiM0MztcbiBURVNUX0hBUk5FU1NfTUFJTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3VuaXhfd2Fsa19zY2MmIzM0OywKICAgICYjMzQ7dW5peF9zY2NfZGVhZCYjMzQ7LAogICAgJiMzNDt1bml4X3dhbGtfc2NjX2Zhc3QmIzM0OywKICAgICYjMzQ7dW5peF93YWxrX3NjYyYjMzQ7LAogICAgJiMzNDt1bml4X2djJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50cyAoU0NDKSBUYXJqYW4tYmFzZWQgY3ljbGUgZGV0ZWN0aW9uIGFsZ29yaXRobSBpbiBVTklYIGRvbWFpbiBzb2NrZXQgZ2FyYmFnZSBjb2xsZWN0aW9uIChuZXQvdW5peC9nYXJiYWdlLmMpLiBTcGVjaWZpY2FsbHksIGl0IHVwZGF0ZXMgX191bml4X3dhbGtfc2NjIHRvIGFzc2lnbiB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4IGFuZCB1cGRhdGUgc2NjX2luZGV4IGFjcm9zcyB0aGUgZW50aXJlIFNDQyBwcmlvciB0byBjYWxsaW5nIHVuaXhfc2NjX2RlYWQsIGFuZCByZW1vdmVzIHRoZSBmYXN0IHBhcmFtZXRlciBhbmQgb2ZmLXN0YWNrIG1hcmtpbmcgZnJvbSB1bml4X3NjY19kZWFkLiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpcyBkaXJlY3RseSBleGVyY2lzZWQgd2hlbiBwYXNzaW5nIGZpbGUgZGVzY3JpcHRvcnMgYWNyb3NzIFVOSVggc29ja2V0cyB2aWEgU0NNX1JJR0hUUy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0MjI2ZDAxNmQwYWVkNjRhYzRhY2Y0NTJmMDY1ZmIyMDU3MWI2NTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAwNDowNDowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC91bml4L2dhcmJhZ2UuYyBiL25ldC91bml4L2dhcmJhZ2UuYwppbmRleCA5ZmNhYWY1NWNiYTVkLi5kYTc3NGY1NmNhNjQ4IDEwMDY0NAotLS0gYS9uZXQvdW5peC9nYXJiYWdlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3VuaXgvZ2FyYmFnZS5jCkBAIC0zNzQsNyAmIzQzOzM3NCw3IEBAIHN0YXRpYyBib29sIHVuaXhfdmVydGV4X2RlYWQoc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgpCiBzdGF0aWMgTElTVF9IRUFEKHVuaXhfdmlzaXRlZF92ZXJ0aWNlcyk7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfTUFSSzI7CiAKLXN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBib29sIGZhc3QpCiYjNDM7c3RhdGljIGJvb2wgdW5peF9zY2NfZGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpzY2MpCiB7CiAJc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7CiAJYm9vbCBzY2NfZGVhZCA9IHRydWU7CkBAIC0zODYsMTAgJiM0MzszODYsNiBAQCBzdGF0aWMgYm9vbCB1bml4X3NjY19kZWFkKHN0cnVjdCBsaXN0X2hlYWQgKnNjYywgYm9vbCBmYXN0KQogCQkvKiBEb24mIzM5O3QgcmVzdGFydCBERlMgZnJvbSB0aGlzIHZlcnRleC4gKi8KIAkJbGlzdF9tb3ZlX3RhaWwoJmFtcDt2ZXJ0ZXgtJmd0O2VudHJ5LCAmYW1wO3VuaXhfdmlzaXRlZF92ZXJ0aWNlcyk7CiAKLQkJLyogTWFyayB2ZXJ0ZXggYXMgb2ZmLXN0YWNrIGZvciBfX3VuaXhfd2Fsa19zY2MoKS4gKi8KLQkJaWYgKCFmYXN0KQotCQkJdmVydGV4LSZndDtpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXg7Ci0KIAkJaWYgKHNjY19kZWFkKQogCQkJc2NjX2RlYWQgPSB1bml4X3ZlcnRleF9kZWFkKHZlcnRleCk7CiAJfQpAQCAtNTIxLDYgJiM0Mzs1MTcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3VuaXhfd2Fsa19zY2Moc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgsCiAJfQogCiAJaWYgKHZlcnRleC0mZ3Q7aW5kZXggPT0gdmVydGV4LSZndDtzY2NfaW5kZXgpIHsKJiM0MzsJCXN0cnVjdCB1bml4X3ZlcnRleCAqdjsKIAkJc3RydWN0IGxpc3RfaGVhZCBzY2M7CiAKIAkJLyogU0NDIGZpbmFsaXNlZC4KQEAgLTUzMCw3ICYjNDM7NTI3LDEzIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdW5peF93YWxrX3NjYyhzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleCwKIAkJICovCiAJCV9fbGlzdF9jdXRfcG9zaXRpb24oJmFtcDtzY2MsICZhbXA7dmVydGV4X3N0YWNrLCAmYW1wO3ZlcnRleC0mZ3Q7c2NjX2VudHJ5KTsKIAotCQlpZiAodW5peF9zY2NfZGVhZCgmYW1wO3NjYywgZmFsc2UpKSB7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UodiwgJmFtcDtzY2MsIHNjY19lbnRyeSkgewomIzQzOwkJCS8qIE1hcmsgdmVydGV4IGFzIG9mZi1zdGFjayBhbmQgYXNzaWduIGEgdW5pcXVlIElELiAqLwomIzQzOwkJCXYtJmd0O2luZGV4ID0gdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleDsKJiM0MzsJCQl2LSZndDtzY2NfaW5kZXggPSB2ZXJ0ZXgtJmd0O3NjY19pbmRleDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICh1bml4X3NjY19kZWFkKCZhbXA7c2NjKSkgewogCQkJdW5peF9jb2xsZWN0X3NrYigmYW1wO3NjYywgaGl0bGlzdCk7CiAJCX0gZWxzZSB7CiAJCQlpZiAodW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCAmbHQ7IHZlcnRleC0mZ3Q7c2NjX2luZGV4KQpAQCAtNTg4LDcgJiM0Mzs1OTEsNyBAQCBzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjX2Zhc3Qoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdCkKIAkJdmVydGV4ID0gbGlzdF9maXJzdF9lbnRyeSgmYW1wO3VuaXhfdW52aXNpdGVkX3ZlcnRpY2VzLCB0eXBlb2YoKnZlcnRleCksIGVudHJ5KTsKIAkJbGlzdF9hZGQoJmFtcDtzY2MsICZhbXA7dmVydGV4LSZndDtzY2NfZW50cnkpOwogCi0JCWlmICh1bml4X3NjY19kZWFkKCZhbXA7c2NjLCB0cnVlKSkgewomIzQzOwkJaWYgKHVuaXhfc2NjX2RlYWQoJmFtcDtzY2MpKSB7CiAJCQljeWNsaWNfc2Njcy0tOwogCQkJdW5peF9jb2xsZWN0X3NrYigmYW1wO3NjYywgaGl0bGlzdCk7CiAJCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuYwppbmRleCBkODJhNzljMjFjMTc5Li5jMTY1ZjI1MDIyMGE0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jCkBAIC0zNzgsNCAmIzQzOzM3OCwyMSBAQCBURVNUX0Yoc2NtX3JpZ2h0cywgYmFja3RyYWNrX2Zyb21fc2NjKQogCWNsb3NlX3NvY2tldHMoMTApOwogfQogCiYjNDM7VEVTVF9GKHNjbV9yaWdodHMsIG1peGVkX2xvd3BvaW50KQomIzQzO3sKJiM0MzsJY3JlYXRlX3NvY2tldHMoNik7CiYjNDM7CiYjNDM7CXNlbmRfZmQoMCwgMSk7CiYjNDM7CXNlbmRfZmQoMSwgMik7CiYjNDM7CXNlbmRfZmQoMiwgMSk7CiYjNDM7CXNlbmRfZmQoMSwgMCk7CiYjNDM7CiYjNDM7CXNlbmRfZmQoMywgNCk7CiYjNDM7CXNlbmRfZmQoNCwgNSk7CiYjNDM7CXNlbmRfZmQoNSwgNCk7CiYjNDM7CXNlbmRfZmQoNCwgMyk7CiYjNDM7CiYjNDM7CWNsb3NlX3NvY2tldHMoNik7CiYjNDM7fQomIzQzOwogVEVTVF9IQVJORVNTX01BSU4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc4NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVOSVggRG9tYWluIFNvY2tldCBHYXJiYWdlIENvbGxlY3Rpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGUgY2hhbmdlcyB0b3VjaCBgbmV0L3VuaXgvZ2FyYmFnZS5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuY2AuIEkgaW1tZWRpYXRlbHkgemVybyBpbiBvbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcy4gRnJvbSBleHBlcmllbmNlLCBJIGtub3cgdGhpcyBpcyB0aGUgVU5JWCBkb21haW4gc29ja2V0IGdhcmJhZ2UgY29sbGVjdGlvbiBjb2RlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIFRhcmphbiYjMzk7cyBhbGdvcml0aG0sIHVzZWQgdG8gZGV0ZWN0IGN5Y2xpYyBmaWxlIGRlc2NyaXB0b3IgcmVmZXJlbmNlcyBhbmQgaGFuZGxlIFNDTV9SSUdIVFMgZ2FyYmFnZS4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBuZXQvdW5peC9nYXJiYWdlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgcGF0Y2guIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGljaCBjb25maWd1cmF0aW9ucyBlbmFibGUgdGhpcyBnYXJiYWdlIGNvbGxlY3Rpb24gYW5kIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIGltcGFjdGVkIG9yIG1vZGlmaWVkLiBXaGF0IGFyZSB0aGUgcmVsZXZhbnQgaG9va3M/IFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvbiB0aGUgZXhpc3RpbmcgY3ljbGUgZGV0ZWN0aW9uPyBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY2hhbmdlcyYjMzk7IGltcGxpY2F0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L2dhcmJhZ2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzcwOlx0XG4gMzcxOlx0XHRyZXR1cm4gdHJ1ZTtcbiAzNzI6XHR9XG4gMzczOlx0XG4gMzc0Olx0c3RhdGljIExJU1RfSEVBRCh1bml4X3Zpc2l0ZWRfdmVydGljZXMpO1xuIDM3NTpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMjtcbiAzNzY6XHRcbiAzNzc6XHRzdGF0aWMgYm9vbCB1bml4X3NjY19kZWFkKHN0cnVjdCBsaXN0X2hlYWQgKnNjYylcbiAzNzg6XHR7XG4gMzc5Olx0XHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcbiAzODA6XHRcdGJvb2wgc2NjX2RlYWQgPSB0cnVlO1xuIDM4MTpcdFx0dW5zaWduZWQgaW50IHNlcTtcbiAzODI6XHRcbiAzODM6XHRcdHNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2dW5peF9wZWVrX3NlcSk7XG4gMzg0Olx0XG4gMzg1Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UodmVydGV4LCBzY2MsIHNjY19lbnRyeSkge1xuIDM4NjpcdFx0XHQvKiBEb24mIzM5O3QgcmVzdGFydCBERlMgZnJvbSB0aGlzIHZlcnRleC4gKi9cbiAzODc6XHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2dmVydGV4LVx1MDAzZWVudHJ5LCBcdTAwMjZ1bml4X3Zpc2l0ZWRfdmVydGljZXMpO1xuIDM4ODpcdFxuIDM4OTpcdFx0XHRpZiAoc2NjX2RlYWQpXG4gMzkwOlx0XHRcdFx0c2NjX2RlYWQgPSB1bml4X3ZlcnRleF9kZWFkKHZlcnRleCk7XG4gMzkxOlx0XHR9XG4gMzkyOlx0XG4gMzkzOlx0XHQvKiBJZiBNU0dfUEVFSyBpbnRlcnZlbmVkLCBkZWZlciB0aGlzIFNDQyB0byB0aGUgbmV4dCByb3VuZC4gKi9cbiAzOTQ6XHRcdGlmIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNnVuaXhfcGVla19zZXEsIHNlcSkpXG4gMzk1Olx0XHRcdHJldHVybiBmYWxzZTtcbiAzOTY6XHRcbiAzOTc6XHRcdHJldHVybiBzY2NfZGVhZDtcbiAzOTg6XHR9XG4gMzk5Olx0XG4gNDAwOlx0c3RhdGljIHZvaWQgdW5peF9jb2xsZWN0X3NrYihzdHJ1Y3QgbGlzdF9oZWFkICpzY2MsIHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXG4gNDAxOlx0e1xuIDQwMjpcdFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XG4gNDAzOlx0XG4gNDA0Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UodmVydGV4LCBzY2MsIHNjY19lbnRyeSkge1xuIDQwNTpcdFx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZTtcbiA0MDY6XHRcdFx0c3RydWN0IHVuaXhfZWRnZSAqZWRnZTtcbiA0MDc6XHRcdFx0c3RydWN0IHVuaXhfc29jayAqdTtcbiA0MDg6XHRcbiA0MDk6XHRcdFx0ZWRnZSA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2dmVydGV4LVx1MDAzZWVkZ2VzLCB0eXBlb2YoKmVkZ2UpLCB2ZXJ0ZXhfZW50cnkpO1xuIDQxMDpcdFx0XHR1ID0gZWRnZS1cdTAwM2VwcmVkZWNlc3NvcjtcbiA0MTE6XHRcdFx0cXVldWUgPSBcdTAwMjZ1LVx1MDAzZXNrLnNrX3JlY2VpdmVfcXVldWU7XG4gNDEyOlx0XG4gNDEzOlx0XHRcdHNwaW5fbG9jayhcdTAwMjZxdWV1ZS1cdTAwM2Vsb2NrKTtcbiA0MTQ6XHRcbiA0MTU6XHRcdFx0aWYgKHUtXHUwMDNlc2suc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xuIDQxNjpcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gNDE3Olx0XG4gNDE4Olx0XHRcdFx0c2tiX3F1ZXVlX3dhbGsocXVldWUsIHNrYikge1xuIDQxOTpcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqZW1icnlvX3F1ZXVlID0gXHUwMDI2c2tiLVx1MDAzZXNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBuZXQvdW5peC9nYXJiYWdlLmNgIChMaW5lcyA1MDAtNjAwKSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIGxpbmVzIDUwMCB0aHJvdWdoIDYwMC4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGJlIGhhbmRsaW5nIGNsZWFudXAgb3IgcGVyaGFwcyBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHRvIFVuaXggZG9tYWluIHNvY2tldHMsIGdpdmVuIHRoZSBmaWxlbmFtZS4gSSYjMzk7bSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBwYXR0ZXJuczsgYXJlIHdlIGRlYWxpbmcgd2l0aCBkZWFsbG9jYXRpb24gb2Ygc29ja2V0IHN0cnVjdHVyZXMsIHJlZmVyZW5jZSBjb3VudGluZywgZXJyb3IgaGFuZGxpbmcsIG9yIHBlcmhhcHMgc29tZSBraW5kIG9mIGdhcmJhZ2UgY29sbGVjdGlvbiBtZWNoYW5pc20/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgaGVyZS4gSSYjMzk7bGwgYmUgd2F0Y2hpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG9yIGRvdWJsZS1mcmVlcy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVzZSBhcmVhcyBhcmUgb2Z0ZW4gdHJpY2t5IGluIGxvdy1sZXZlbCBuZXR3b3JrIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIGNvbm5lY3Rpb24gc3RhdGVzIGFuZCByZXNvdXJjZSBleGhhdXN0aW9uIHNpdHVhdGlvbnMgZHVyaW5nIHRoZSByZWxlYXNlIG9mIHJlc291cmNlcy4gSeKAmWxsIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgY29kZSBpbnRlcmFjdHMgd2l0aCBhbnkgYXNzb2NpYXRlZCB3b3JrcXVldWVzIG9yIGtlcm5lbCB0aHJlYWRzLiBUaGlzIHNlY3Rpb24gbWlnaHQgaW52b2x2ZSBmcmVlaW5nIGJ1ZmZlcnMsIHJlbGVhc2luZyBsb2NrcywgYW5kIHBvc3NpYmx5IHNpZ25hbGluZyBvdGhlciBwcm9jZXNzZXMuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNhbGxzIHRvIG1lbW9yeSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBmdW5jdGlvbnMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGFzc29jaWF0ZWQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGZlZWwgZm9yIGhvdyByb2J1c3QgYW5kIHJlbGlhYmxlIHRoaXMgY2xlYW51cCBwcm9jZXNzIGlzOyBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgbnVhbmNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L2dhcmJhZ2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwMDpcdFxuIDUwMTpcdFx0XHRcdC8qIElmIHRoZSBzdWNjZXNzb3IgaGFzIGEgc21hbGxlciBzY2NfaW5kZXgsIHR3byB2ZXJ0aWNlc1xuIDUwMjpcdFx0XHRcdCAqIGFyZSBpbiB0aGUgc2FtZSBTQ0MsIHNvIHByb3BhZ2F0ZSB0aGUgc21hbGxlciBzY2NfaW5kZXhcbiA1MDM6XHRcdFx0XHQgKiB0byBza2lwIFNDQyBmaW5hbGlzYXRpb24uXG4gNTA0Olx0XHRcdFx0ICovXG4gNTA1Olx0XHRcdFx0dmVydGV4LVx1MDAzZXNjY19pbmRleCA9IG1pbih2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4LCBuZXh0X3ZlcnRleC1cdTAwM2VzY2NfaW5kZXgpO1xuIDUwNjpcdFx0XHR9IGVsc2UgaWYgKG5leHRfdmVydGV4LVx1MDAzZWluZGV4ICE9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXgpIHtcbiA1MDc6XHRcdFx0XHQvKiBMb29wIGRldGVjdGVkIGJ5IGEgYmFjay9jcm9zcyBlZGdlLlxuIDUwODpcdFx0XHRcdCAqXG4gNTA5Olx0XHRcdFx0ICogVGhlIHN1Y2Nlc3NvciBpcyBvbiB2ZXJ0ZXhfc3RhY2ssIHNvIHR3byB2ZXJ0aWNlcyBhcmUgaW5cbiA1MTA6XHRcdFx0XHQgKiB0aGUgc2FtZSBTQ0MuICBJZiB0aGUgc3VjY2Vzc29yIGhhcyBhIHNtYWxsZXIgKnNjY19pbmRleCosXG4gNTExOlx0XHRcdFx0ICogcHJvcGFnYXRlIGl0IHRvIHNraXAgU0NDIGZpbmFsaXNhdGlvbi5cbiA1MTI6XHRcdFx0XHQgKi9cbiA1MTM6XHRcdFx0XHR2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4ID0gbWluKHZlcnRleC1cdTAwM2VzY2NfaW5kZXgsIG5leHRfdmVydGV4LVx1MDAzZXNjY19pbmRleCk7XG4gNTE0Olx0XHRcdH0gZWxzZSB7XG4gNTE1Olx0XHRcdFx0LyogVGhlIHN1Y2Nlc3NvciB3YXMgYWxyZWFkeSBncm91cGVkIGFzIGFub3RoZXIgU0NDICovXG4gNTE2Olx0XHRcdH1cbiA1MTc6XHRcdH1cbiA1MTg6XHRcbiA1MTk6XHRcdGlmICh2ZXJ0ZXgtXHUwMDNlaW5kZXggPT0gdmVydGV4LVx1MDAzZXNjY19pbmRleCkge1xuIDUyMDpcdFx0XHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnY7XG4gNTIxOlx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgc2NjO1xuIDUyMjpcdFxuIDUyMzpcdFx0XHQvKiBTQ0MgZmluYWxpc2VkLlxuIDUyNDpcdFx0XHQgKlxuIDUyNTpcdFx0XHQgKiBJZiB0aGUgc2NjX2luZGV4IHdhcyBub3QgdXBkYXRlZCwgYWxsIHRoZSB2ZXJ0aWNlcyBhYm92ZSBvblxuIDUyNjpcdFx0XHQgKiB2ZXJ0ZXhfc3RhY2sgYXJlIGluIHRoZSBzYW1lIFNDQy4gIEdyb3VwIHRoZW0gdXNpbmcgc2NjX2VudHJ5LlxuIDUyNzpcdFx0XHQgKi9cbiA1Mjg6XHRcdFx0X19saXN0X2N1dF9wb3NpdGlvbihcdTAwMjZzY2MsIFx1MDAyNnZlcnRleF9zdGFjaywgXHUwMDI2dmVydGV4LVx1MDAzZXNjY19lbnRyeSk7XG4gNTI5Olx0XG4gNTMwOlx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZSh2LCBcdTAwMjZzY2MsIHNjY19lbnRyeSkge1xuIDUzMTpcdFx0XHRcdC8qIE1hcmsgdmVydGV4IGFzIG9mZi1zdGFjayBhbmQgYXNzaWduIGEgdW5pcXVlIElELiAqL1xuIDUzMjpcdFx0XHRcdHYtXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xuIDUzMzpcdFx0XHRcdHYtXHUwMDNlc2NjX2luZGV4ID0gdmVydGV4LVx1MDAzZXNjY19pbmRleDtcbiA1MzQ6XHRcdFx0fVxuIDUzNTpcdFxuIDUzNjpcdFx0XHRpZiAodW5peF9zY2NfZGVhZChcdTAwMjZzY2MpKSB7XG4gNTM3Olx0XHRcdFx0dW5peF9jb2xsZWN0X3NrYihcdTAwMjZzY2MsIGhpdGxpc3QpO1xuIDUzODpcdFx0XHR9IGVsc2Uge1xuIDUzOTpcdFx0XHRcdGlmICh1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4IFx1MDAzYyB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4KVxuIDU0MDpcdFx0XHRcdFx0dW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCA9IHZlcnRleC1cdTAwM2VzY2NfaW5kZXg7XG4gNTQxOlx0XG4gNTQyOlx0XHRcdFx0aWYgKHVuaXhfc2NjX2N5Y2xpYyhcdTAwMjZzY2MpKVxuIDU0MzpcdFx0XHRcdFx0Y3ljbGljX3NjY3MmIzQzOyYjNDM7O1xuIDU0NDpcdFx0XHR9XG4gNTQ1Olx0XG4gNTQ2Olx0XHRcdGxpc3RfZGVsKFx1MDAyNnNjYyk7XG4gNTQ3Olx0XHR9XG4gNTQ4Olx0XG4gNTQ5Olx0XHQvKiBOZWVkIGJhY2t0cmFja2luZyA/ICovXG4gNTUwOlx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZWRnZV9zdGFjaykpXG4gNTUxOlx0XHRcdGdvdG8gcHJldl92ZXJ0ZXg7XG4gNTUyOlx0XG4gNTUzOlx0XHRyZXR1cm4gY3ljbGljX3NjY3M7XG4gNTU0Olx0fVxuIDU1NTpcdFxuIDU1NjpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfZ3JhcGhfY3ljbGljX3NjY3M7XG4gNTU3Olx0XG4gNTU4Olx0c3RhdGljIHZvaWQgdW5peF93YWxrX3NjYyhzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxuIDU1OTpcdHtcbiA1NjA6XHRcdHVuc2lnbmVkIGxvbmcgbGFzdF9pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX1NUQVJUO1xuIDU2MTpcdFx0dW5zaWduZWQgbG9uZyBjeWNsaWNfc2NjcyA9IDA7XG4gNTYyOlx0XG4gNTYzOlx0XHR1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfU1RBUlQ7XG4gNTY0Olx0XG4gNTY1Olx0XHQvKiBWaXNpdCBldmVyeSB2ZXJ0ZXggZXhhY3RseSBvbmNlLlxuIDU2NjpcdFx0ICogX191bml4X3dhbGtfc2NjKCkgbW92ZXMgdmlzaXRlZCB2ZXJ0aWNlcyB0byB1bml4X3Zpc2l0ZWRfdmVydGljZXMuXG4gNTY3Olx0XHQgKi9cbiA1Njg6XHRcdHdoaWxlICghbGlzdF9lbXB0eShcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcykpIHtcbiA1Njk6XHRcdFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XG4gNTcwOlx0XG4gNTcxOlx0XHRcdHZlcnRleCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMsIHR5cGVvZigqdmVydGV4KSwgZW50cnkpO1xuIDU3MjpcdFx0XHRjeWNsaWNfc2NjcyAmIzQzOz0gX191bml4X3dhbGtfc2NjKHZlcnRleCwgXHUwMDI2bGFzdF9pbmRleCwgaGl0bGlzdCk7XG4gNTczOlx0XHR9XG4gNTc0Olx0XG4gNTc1Olx0XHRsaXN0X3JlcGxhY2VfaW5pdChcdTAwMjZ1bml4X3Zpc2l0ZWRfdmVydGljZXMsIFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzKTtcbiA1NzY6XHRcdHN3YXAodW5peF92ZXJ0ZXhfdW52aXNpdGVkX2luZGV4LCB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4KTtcbiA1Nzc6XHRcbiA1Nzg6XHRcdFdSSVRFX09OQ0UodW5peF9ncmFwaF9jeWNsaWNfc2NjcywgY3ljbGljX3NjY3MpO1xuIDU3OTpcdFx0V1JJVEVfT05DRSh1bml4X2dyYXBoX3N0YXRlLFxuIDU4MDpcdFx0XHQgICBjeWNsaWNfc2NjcyA/IFVOSVhfR1JBUEhfQ1lDTElDIDogVU5JWF9HUkFQSF9OT1RfQ1lDTElDKTtcbiA1ODE6XHR9XG4gNTgyOlx0XG4gNTgzOlx0c3RhdGljIHZvaWQgdW5peF93YWxrX3NjY19mYXN0KHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXG4gNTg0Olx0e1xuIDU4NTpcdFx0dW5zaWduZWQgbG9uZyBjeWNsaWNfc2NjcyA9IHVuaXhfZ3JhcGhfY3ljbGljX3NjY3M7XG4gNTg2Olx0XG4gNTg3Olx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpKSB7XG4gNTg4Olx0XHRcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4O1xuIDU4OTpcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkIHNjYztcbiA1OTA6XHRcbiA1OTE6XHRcdFx0dmVydGV4ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcywgdHlwZW9mKCp2ZXJ0ZXgpLCBlbnRyeSk7XG4gNTkyOlx0XHRcdGxpc3RfYWRkKFx1MDAyNnNjYywgXHUwMDI2dmVydGV4LVx1MDAzZXNjY19lbnRyeSk7XG4gNTkzOlx0XG4gNTk0Olx0XHRcdGlmICh1bml4X3NjY19kZWFkKFx1MDAyNnNjYykpIHtcbiA1OTU6XHRcdFx0XHRjeWNsaWNfc2Njcy0tO1xuIDU5NjpcdFx0XHRcdHVuaXhfY29sbGVjdF9za2IoXHUwMDI2c2NjLCBoaXRsaXN0KTtcbiA1OTc6XHRcdFx0fVxuIDU5ODpcdFxuIDU5OTpcdFx0XHRsaXN0X2RlbChcdTAwMjZzY2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MDEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBQYXRjaCB3aXRoIEdpdCBMb2cqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgaGlzdG9yeS4gVGhlIGJlc3QgdG9vbCBmb3IgdGhpcywgYXMgYWx3YXlzLCBpcyBgZ2l0IGxvZ2AuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqd2hhdCogYW5kIHRoZSAqd2h5KiBvZiB0aGUgY2hhbmdlcy4gSSBuZWVkIHRvIHNlZSB0aGUgY29tbWl0IG1lc3NhZ2VzLCB0aGUgYXV0aG9yLCB0aGUgY29udGV4dCwgYW5kIHByZWZlcmFibHkgYSBjbGVhciBuYXJyYXRpdmUgb2YgdGhlIGV2b2x1dGlvbiBvZiB0aGlzIGNvZGUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBwYXRjaCDigJMgdGhlIHByb2JsZW0gaXQmIzM5O3Mgc29sdmluZywgdGhlIGRlc2lnbiBjaG9pY2VzIG1hZGUsIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBjb25zaWRlcmVkLiBgZ2l0IGxvZ2Agc2hvdWxkIHByb3ZpZGUgdGhlIGZvdW5kYXRpb24gZm9yIHRoYXQgdW5kZXJzdGFuZGluZy4gSXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50IGJlZm9yZSBJIGV2ZW4gbG9vayBhdCB0aGUgZGlmZnMgaW4gZGV0YWlsOyB1bmRlcnN0YW5kaW5nIHRoZSBzdG9yeSBoZWxwcyBmcmFtZSB0aGUgaW5kaXZpZHVhbCBjaGFuZ2VzLiBUaGlzIGlzIHRoZSBiZXN0IGZpcnN0IHN0ZXAgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaXhlZF9sb3dwb2ludCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmM9MzYyPVRFU1RfRihzY21fcmlnaHRzLCBiYWNrdHJhY2tfZnJvbV9zY2MpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jLTM4MC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuYzozODE6VEVTVF9GKHNjbV9yaWdodHMsIG1peGVkX2xvd3BvaW50KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jLTM4Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE2NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdpdCBDb21taXQgYW5kIFJlbGF0ZWQgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGdldCB0aGUgY29udGV4dCBvZiB0aGlzIGNvbW1pdCwgYnV0IEkgZG9uJiMzOTt0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byBhIHN0YW5kYXJkIGBnaXQgbG9nYC4gSG93ZXZlciwgdGhlIHByb21wdCBoZWxwZnVsbHkgcHJvdmlkZXMgdGhlIGF1dGhvciBhbmQgbGlrZWx5IHNvbWUgcmVsZXZhbnQgaW5mb3JtYXRpb24g4oCTIGBBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDtgLiBUaGF0JiMzOTtzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGNvbnRleHR1YWxpemluZyB0aGUgaXNzdWUgY3JlYXRlZCBieSB0aGUgc3l6a2FsbGVyIGhhcm5lc3MuCgpOb3csIG15IGluaXRpYWwgaW5zdGluY3RzIGFyZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEdpdmVuIHRoZSBhcHBhcmVudCBmb2N1cyBvbiBnYXJiYWdlIGNvbGxlY3Rpb24sIG15IGltbWVkaWF0ZSB0YXJnZXRzIGFyZSBgX191bml4X3dhbGtfc2NjYCBhbmQgYHVuaXhfd2Fsa19zY2NgLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGJyb2FkZXIgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbXMsIHBhcnRpY3VsYXJseSBgdW5peF9nY2AuCgpNeSBmb2N1cyB3aWxsIHRoZW4gYmUgdG8gaWRlbnRpZnkgY2FsbGVycyBvZiBgdW5peF93YWxrX3NjY2AuIEkmIzM5O2xsIHNwZWNpZmljYWxseSBsb29rIGZvciB0aGVzZSB3aXRoaW4gYG5ldC91bml4L2dhcmJhZ2UuY2AuIExvY2F0aW5nIHRoZSBjYWxsZXJzIHdpbGwgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0cyBpbnRvIHdoZXJlIGFuZCBob3cgdGhpcyBTQ0Mgd2FsayBpcyBiZWluZyB1dGlsaXplZC4gVGhpcyBhcHByb2FjaCBzaG91bGQgaGVscCBtZSBidWlsZCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHBhcnQgb2YgZ2FyYmFnZSBjb2xsZWN0aW9uIHRoZSBoYXJuZXNzIHVuY292ZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5peF93YWxrX3NjYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4L2dhcmJhZ2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9nYXJiYWdlLmM9NDMzPXN0YXRpYyBib29sIHVuaXhfc2NjX2N5Y2xpYyhzdHJ1Y3QgbGlzdF9oZWFkICpzY2MpXG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ1Mi1cbm5ldC91bml4L2dhcmJhZ2UuYzo0NTM6c3RhdGljIHVuc2lnbmVkIGxvbmcgX191bml4X3dhbGtfc2NjKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ1NC1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9pbmRleCxcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9NTU2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfZ3JhcGhfY3ljbGljX3NjY3M7XG5uZXQvdW5peC9nYXJiYWdlLmMtNTU3LVxubmV0L3VuaXgvZ2FyYmFnZS5jOjU1ODpzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjKHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXG5uZXQvdW5peC9nYXJiYWdlLmMtNTU5LXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNTY1LVx0LyogVmlzaXQgZXZlcnkgdmVydGV4IGV4YWN0bHkgb25jZS5cbm5ldC91bml4L2dhcmJhZ2UuYzo1NjY6XHQgKiBfX3VuaXhfd2Fsa19zY2MoKSBtb3ZlcyB2aXNpdGVkIHZlcnRpY2VzIHRvIHVuaXhfdmlzaXRlZF92ZXJ0aWNlcy5cbm5ldC91bml4L2dhcmJhZ2UuYy01NjctXHQgKi9cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNTcxLVx0XHR2ZXJ0ZXggPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzLCB0eXBlb2YoKnZlcnRleCksIGVudHJ5KTtcbm5ldC91bml4L2dhcmJhZ2UuYzo1NzI6XHRcdGN5Y2xpY19zY2NzICYjNDM7PSBfX3VuaXhfd2Fsa19zY2ModmVydGV4LCBcdTAwMjZsYXN0X2luZGV4LCBoaXRsaXN0KTtcbm5ldC91bml4L2dhcmJhZ2UuYy01NzMtXHR9XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTU4Mi1cbm5ldC91bml4L2dhcmJhZ2UuYzo1ODM6c3RhdGljIHZvaWQgdW5peF93YWxrX3NjY19mYXN0KHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXG5uZXQvdW5peC9nYXJiYWdlLmMtNTg0LXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9NjA5PXN0YXRpYyB2b2lkIHVuaXhfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYy02MjUtXHRpZiAodW5peF9ncmFwaF9zdGF0ZSA9PSBVTklYX0dSQVBIX0NZQ0xJQylcbm5ldC91bml4L2dhcmJhZ2UuYzo2MjY6XHRcdHVuaXhfd2Fsa19zY2NfZmFzdChcdTAwMjZoaXRsaXN0KTtcbm5ldC91bml4L2dhcmJhZ2UuYy02MjctXHRlbHNlXG5uZXQvdW5peC9nYXJiYWdlLmM6NjI4Olx0XHR1bml4X3dhbGtfc2NjKFx1MDAyNmhpdGxpc3QpO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTYyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEyNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgVW5peCBTb2NrZXQgR2FyYmFnZSBDb2xsZWN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gcHJvY2VzcyB3aXRoaW4gdGhlIFVuaXggc29ja2V0IHN1YnN5c3RlbS4gTXkgc3RhcnRpbmcgcG9pbnQgaXMgYHVuaXhfZ2NgLCB3aGljaCBJIGtub3cgaXMgdGhlIGNvcmUgd29ya3F1ZXVlIGZ1bmN0aW9uIGRlZmluZWQgaW4gYG5ldC91bml4L2dhcmJhZ2UuY2AuIE5vdywgdGhlIGtleSBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp0cmlnZ2VyZWQqLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gYHVuaXhfZ2NgIG9yLCBtb3JlIGltcG9ydGFudGx5LCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgKnNjaGVkdWxlZCogdG8gcnVuLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBsb2dpYyBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5peF9nYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmMtMzMtICpcdFx0XHRcdFx0b2xkIGFwcHMgYW5kIGl0IHdpbGwgYXZvaWQgaHVnZSBhbW91bnRcbm5ldC91bml4L2FmX3VuaXguYzozNDogKlx0XHRcdFx0XHRvZiBzb2NrcyBoYXNoZWQgKHRoaXMgZm9yIHVuaXhfZ2MoKVxubmV0L3VuaXgvYWZfdW5peC5jLTM1LSAqXHRcdFx0XHRcdHBlcmZvcm1hbmNlcyByZWFzb25zKS5cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNDQtICpcdFx0c3VjaCBzb2NrZXQgYW5kIGNsb3NlZCBpdCAoZGVzY3JpcHRvcikuIFRoYXQgd291bGQgaGFwcGVuIG9uXG5uZXQvdW5peC9nYXJiYWdlLmM6NDU6ICpcdFx0ZWFjaCB1bml4X2djKCkgdW50aWwgdGhlIGFjY2VwdCgpLiBTaW5jZSB0aGUgc3RydWN0IGZpbGUgaW5cbm5ldC91bml4L2dhcmJhZ2UuYy00Ni0gKlx0XHRxdWVzdGlvbiB3b3VsZCBnbyB0byB0aGUgZnJlZSBsaXN0IGFuZCBtaWdodCBiZSByZXVzZWQuLi5cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9MTkzPXN0YXRpYyB2b2lkIHVuaXhfZnJlZV92ZXJ0aWNlcyhzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbClcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMjAyLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjIwMzpzdGF0aWMgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NQSU5MT0NLKHVuaXhfZ2NfbG9jayk7XG5uZXQvdW5peC9nYXJiYWdlLmMtMjA0LVxubmV0L3VuaXgvZ2FyYmFnZS5jPTIwNT12b2lkIHVuaXhfYWRkX2VkZ2VzKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsLCBzdHJ1Y3QgdW5peF9zb2NrICpyZWNlaXZlcilcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMjA4LVxubmV0L3VuaXgvZ2FyYmFnZS5jOjIwOTpcdHNwaW5fbG9jayhcdTAwMjZ1bml4X2djX2xvY2spO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTIxMC1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMjMxLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjIzMjpcdHNwaW5fdW5sb2NrKFx1MDAyNnVuaXhfZ2NfbG9jayk7XG5uZXQvdW5peC9nYXJiYWdlLmMtMjMzLVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYz0yMzk9dm9pZCB1bml4X2RlbF9lZGdlcyhzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbClcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMjQzLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjI0NDpcdHNwaW5fbG9jayhcdTAwMjZ1bml4X2djX2xvY2spO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTI0NS1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMjYxLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjI2MjpcdHNwaW5fdW5sb2NrKFx1MDAyNnVuaXhfZ2NfbG9jayk7XG5uZXQvdW5peC9nYXJiYWdlLmMtMjYzLVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYz0yNjc9dm9pZCB1bml4X3VwZGF0ZV9lZGdlcyhzdHJ1Y3QgdW5peF9zb2NrICpyZWNlaXZlcilcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMjc1LVx0fSBlbHNlIHtcbm5ldC91bml4L2dhcmJhZ2UuYzoyNzY6XHRcdHNwaW5fbG9jayhcdTAwMjZ1bml4X2djX2xvY2spO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTI3Ny1cdFx0dW5peF91cGRhdGVfZ3JhcGgodW5peF9zayhyZWNlaXZlci1cdTAwM2VsaXN0ZW5lciktXHUwMDNldmVydGV4KTtcbm5ldC91bml4L2dhcmJhZ2UuYy0yNzgtXHRcdHJlY2VpdmVyLVx1MDAzZWxpc3RlbmVyID0gTlVMTDtcbm5ldC91bml4L2dhcmJhZ2UuYzoyNzk6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnVuaXhfZ2NfbG9jayk7XG5uZXQvdW5peC9nYXJiYWdlLmMtMjgwLVx0fVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYz01ODM9c3RhdGljIHZvaWQgdW5peF93YWxrX3NjY19mYXN0KHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTYwOC1cbm5ldC91bml4L2dhcmJhZ2UuYzo2MDk6c3RhdGljIHZvaWQgdW5peF9nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvdW5peC9nYXJiYWdlLmMtNjEwLXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNjE1LVxubmV0L3VuaXgvZ2FyYmFnZS5jOjYxNjpcdHNwaW5fbG9jayhcdTAwMjZ1bml4X2djX2xvY2spO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTYxNy1cbm5ldC91bml4L2dhcmJhZ2UuYy02MTgtXHRpZiAodW5peF9ncmFwaF9zdGF0ZSA9PSBVTklYX0dSQVBIX05PVF9DWUNMSUMpIHtcbm5ldC91bml4L2dhcmJhZ2UuYzo2MTk6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnVuaXhfZ2NfbG9jayk7XG5uZXQvdW5peC9nYXJiYWdlLmMtNjIwLVx0XHRnb3RvIHNraXBfZ2M7XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTYyOS1cbm5ldC91bml4L2dhcmJhZ2UuYzo2MzA6XHRzcGluX3VubG9jayhcdTAwMjZ1bml4X2djX2xvY2spO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTYzMS1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNjQxLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjY0MjpzdGF0aWMgREVDTEFSRV9XT1JLKHVuaXhfZ2Nfd29yaywgdW5peF9nYyk7XG5uZXQvdW5peC9nYXJiYWdlLmMtNjQzLVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYz02NDY9dm9pZCB1bml4X3NjaGVkdWxlX2djKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcilcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNjU4LVx0aWYgKCFSRUFEX09OQ0UoZ2NfaW5fcHJvZ3Jlc3MpKVxubmV0L3VuaXgvZ2FyYmFnZS5jOjY1OTpcdFx0cXVldWVfd29yayhzeXN0ZW1fZGZsX3dxLCBcdTAwMjZ1bml4X2djX3dvcmspO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTY2MC1cbm5ldC91bml4L2dhcmJhZ2UuYy02NjEtXHRpZiAodXNlciBcdTAwMjZcdTAwMjYgUkVBRF9PTkNFKHVuaXhfZ3JhcGhfY3ljbGljX3NjY3MpKVxubmV0L3VuaXgvZ2FyYmFnZS5jOjY2MjpcdFx0Zmx1c2hfd29yayhcdTAwMjZ1bml4X2djX3dvcmspO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTY2My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NDAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBOZXQvVW5peCBCdWlsZCBQcm9jZXNzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgbmV0L3VuaXgvZ2FyYmFnZS5jYCBnZXRzIGJ1aWx0LiBGaXJzdCBpbnN0aW5jdDogS2NvbmZpZy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSYjMzk7cyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udHJvbHMgaXRzIGluY2x1c2lvbi4gQWgsIHJpZ2h0LCB0aGF0JiMzOTtzIHdoZXJlIHRoZSAqYWN0dWFsKiBidWlsZCBydWxlcyBhcmUsIG5vdCB1c3VhbGx5IGluIEtjb25maWcuIE5leHQgc3RlcDogZGl2ZSBpbnRvIHRoZSBgbmV0L3VuaXgvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkaXJlY3QgYW5zd2VyLCBvciBhdCBsZWFzdCBwb2ludCBtZSB0byB0aGUgcmVsZXZhbnQgdmFyaWFibGVzIGFuZCBkZXBlbmRlbmNpZXMuIEdvdHRhIHRyYWNrIGRvd24gdGhvc2UgYnVpbGQgaW5zdHJ1Y3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggdW5peCBkb21haW4gc29ja2V0IGxheWVyLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfVU5JWClcdCYjNDM7PSB1bml4Lm9cbiAgIDc6XHRcbiAgIDg6XHR1bml4LXlcdFx0XHQ6PSBhZl91bml4Lm8gZ2FyYmFnZS5vXG4gICA5Olx0dW5peC0kKENPTkZJR19TWVNDVEwpXHQmIzQzOz0gc3lzY3RsX25ldF91bml4Lm9cbiAgMTA6XHR1bml4LSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdW5peF9icGYub1xuICAxMTpcdFxuICAxMjpcdG9iai0kKENPTkZJR19VTklYX0RJQUcpXHQmIzQzOz0gdW5peF9kaWFnLm9cbiAgMTM6XHR1bml4X2RpYWcteVx0XHQ6PSBkaWFnLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkxOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgVU5JWCBEb21haW4gU29ja2V0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYENPTkZJR19VTklYYCDigJMgdGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgZm9yIFVOSVggZG9tYWluIHNvY2tldHMsIHJpZ2h0PyBKdXN0IG1ha2luZyBhYnNvbHV0ZWx5IGNlcnRhaW4gaGVyZS4gQmVzdCBwcmFjdGljZSBkaWN0YXRlcyB0aGF0IEkgdmVyaWZ5IHRoaXMgaW4gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZS4gSSYjMzk7bGwgb3BlbiB1cCBgbmV0L3VuaXgvS2NvbmZpZ2AgYW5kIHRha2UgYSBxdWljayBsb29rIGp1c3QgdG8gY29uZmlybSBteSBpbml0aWFsIGFzc3VtcHRpb24uIEJldHRlciB0byBiZSB0aG9yb3VnaCBhbmQgYXZvaWQgYW55IHBvdGVudGlhbCBnb3RjaGFzIGRvd24gdGhlIGxpbmUuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjaywgc28gaXQmIzM5O3Mgd29ydGggdGhlIHF1aWNrIGRvdWJsZS1jaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdW5peC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVW5peCBEb21haW4gU29ja2V0c1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgVU5JWFxuICAgNzpcdFx0Ym9vbCBcJiMzNDtVbml4IGRvbWFpbiBzb2NrZXRzXCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBpbmNsdWRlIHN1cHBvcnQgZm9yIFVuaXggZG9tYWluIHNvY2tldHM7XG4gIDEwOlx0XHQgIHNvY2tldHMgYXJlIHRoZSBzdGFuZGFyZCBVbml4IG1lY2hhbmlzbSBmb3IgZXN0YWJsaXNoaW5nIGFuZFxuICAxMTpcdFx0ICBhY2Nlc3NpbmcgbmV0d29yayBjb25uZWN0aW9ucy4gIE1hbnkgY29tbW9ubHkgdXNlZCBwcm9ncmFtcyBzdWNoIGFzXG4gIDEyOlx0XHQgIHRoZSBYIFdpbmRvdyBzeXN0ZW0gYW5kIHN5c2xvZyB1c2UgdGhlc2Ugc29ja2V0cyBldmVuIGlmIHlvdXJcbiAgMTM6XHRcdCAgbWFjaGluZSBpcyBub3QgY29ubmVjdGVkIHRvIGFueSBuZXR3b3JrLiAgVW5sZXNzIHlvdSBhcmUgd29ya2luZyBvblxuICAxNDpcdFx0ICBhbiBlbWJlZGRlZCBzeXN0ZW0gb3Igc29tZXRoaW5nIHNpbWlsYXIsIHlvdSB0aGVyZWZvcmUgZGVmaW5pdGVseVxuICAxNTpcdFx0ICB3YW50IHRvIHNheSBZIGhlcmUuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIFNheSBZIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnXHRBRl9VTklYX09PQlxuICAyMDpcdFx0Ym9vbCBcJiMzNDtVTklYOiBvdXQtb2YtYm91bmQgbWVzc2FnZXNcJiMzNDtcbiAgMjE6XHRcdGRlcGVuZHMgb24gVU5JWFxuICAyMjpcdFx0ZGVmYXVsdCB5XG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFN1cHBvcnQgZm9yIE1TR19PT0IgaW4gVU5JWCBkb21haW4gc29ja2V0cy4gSWYgdW5zdXJlLCBzYXkgWS5cbiAgMjU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MjMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENyaXRpY2FsIE5ldHdvcmsgR2FyYmFnZSBDb2xsZWN0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIGNvZGUgaW4gZnJvbnQgb2YgbWUsIHBhcnQgb2YgdGhlIGNvcmUgbmV0d29ya2luZyYjMzk7cyBVbml4IGRvbWFpbiBzb2NrZXRzIGdhcmJhZ2UgY29sbGVjdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBTQ0MgZGV0ZWN0aW9uIGFsZ29yaXRobS4gIEkgc2VlIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBmdW5jdGlvbnMgbGlrZSBgX191bml4X3dhbGtfc2NjYCwgYHVuaXhfc2NjX2RlYWRgLCBhbmQgYHVuaXhfd2Fsa19zY2NfZmFzdGAuICBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBmdXp6YWJpbGl0eS4gIEdpdmVuIHRoZSBuYXR1cmUgb2YgVW5peCBkb21haW4gc29ja2V0cywgYW5kIGhvdyBlYXN5IGl0IGlzIHRvIGNyZWF0ZSB0aGVtLCBwYXNzIGZpbGUgZGVzY3JpcHRvcnMgYXJvdW5kICh1c2luZyBgc2NtX3JpZ2h0c2ApLCBjbG9zZSBzb2NrZXRzIHRvIHRyaWdnZXIgZ2FyYmFnZSBjb2xsZWN0aW9uLCBpdCBsb29rcyBsaWtlIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIGNvdWxkIGFic29sdXRlbHkgcmVhY2ggdGhpcyBjb2RlLiAgU3l6a2FsbGVyLCBmb3IgaW5zdGFuY2UsIGhhcyBmdWxsIGRlc2NyaXB0aW9ucyBhbmQgYWN0aXZlbHkgdGVzdHMgdGhpcy4gIEhpc3RvcmljYWxseSwgdGhpcyBHQyBjb2RlIGhhcyBiZWVuIGEgaG90YmVkIGZvciBuYXN0eSBidWdzLCByYWNlcywgbWVtb3J5IGxlYWtzLCBhbmQgVUFGcy4gU28sIHRoaXMgZGVmaW5pdGVseSBncmFicyBteSBhdHRlbnRpb24uCgpOb3csIGxldCYjMzk7cyBkaXNzZWN0IHRoZSBwYXRjaCBpdHNlbGYuIEkmIzM5O20gZm9jdXNpbmcgb24gd2hhdCYjMzk7cyBjaGFuZ2VkIGluIGB1bml4X3NjY19kZWFkYC4gIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIGBmYXN0YCBmbGFnLCBhbmQgc29tZSBsb2dpYyB0byBtYXJrIHZlcnRpY2VzIGFzICYjMzQ7b2ZmLXN0YWNrJiMzNDsgd2l0aGluIHRoYXQgZnVuY3Rpb24uICBOb3csIHRoZSBgZmFzdGAgcGFyYW1ldGVyIGlzIGdvbmUsIGFuZCB0aGUgbWFya2luZyBsb2dpYyBoYXMgbW92ZWQuICBJbnN0ZWFkLCBpbiBgX191bml4X3dhbGtfc2NjYCwgYWZ0ZXIgdGhlIFNDQyBpcyBkZXRlcm1pbmVkIHVzaW5nIGBfX2xpc3RfY3V0X3Bvc2l0aW9uYCwgYSBsb29wIGl0ZXJhdGVzICpiYWNrd2FyZHMqIHRocm91Z2ggdGhlIHZlcnRpY2VzLiBJdCBub3cgc2V0cyBib3RoIGB2LSZndDtpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXhgIGFuZCBgdi0mZ3Q7c2NjX2luZGV4ID0gdmVydGV4LSZndDtzY2NfaW5kZXg7YC4gIFRoYXQgYHYtJmd0O3NjY19pbmRleGAgYXNzaWdubWVudCBpcyB0aGUga2V5IGRpZmZlcmVuY2UuCgpUaGlzIGlzIGltbWVkaWF0ZWx5IHJhaXNpbmcgYSBmbGFnLiAgSW4gVGFyamFuJiMzOTtzIFNDQyBhbGdvcml0aG0sIGxpa2UgdGhlIG9uZSB1c2VkIGhlcmUsIHZlcnRpY2VzIGluIGFuIFNDQyBjYW4gaGF2ZSBkaWZmZXJlbnQgbG93cG9pbnRzICh3aGljaCBhcmUgcmVwcmVzZW50ZWQgYnkgc2NjX2luZGV4KSwgaWYgbm90IHVuaWZpZWQuIEFsc28sIG9mZi1zdGFjayBoYW5kbGluZyBjYW4gaGF2ZSBpc3N1ZXMuIFRoZSBjaGFuZ2UgaXMgc2V0dGluZyBgdi0mZ3Q7aW5kZXhgIGFuZCBgdi0mZ3Q7c2NjX2luZGV4YCAqYmVmb3JlKiB0aGUgYHVuaXhfc2NjX2RlYWRgIGZ1bmN0aW9uIHJ1bnMuIFRoaXMgaXMgY2hhbmdpbmcgd2hlbiBhbmQgaG93IHZlcnRpY2VzIGFyZSBtYXJrZWQgYW5kIHRoZWlyIGBzY2NfaW5kZXhgLiAgVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiBjb3JlIGxvZ2ljLgoKU28sIHRoaXMgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpbiBjb3JlIG5ldHdvcmtpbmcgKGBuZXQvdW5peC9nYXJiYWdlLmNgKS4gIElzIHRoaXMgd29ydGggZnV6emluZz8gIEFic29sdXRlbHksIHBlciB0aGUgZ3VpZGVsaW5lcyEgIEl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVW5peCBkb21haW4gc29ja2V0cyBpbiBRRU1VL0dDRSwgaXQmIzM5O3MgYSBtb2RpZmljYXRpb24gb2YgcmVhY2hhYmxlIGNvZGUsIGl0JiMzOTtzIGluIGEgY29yZSBzdWJzeXN0ZW0gKGNvcmUgbmV0d29ya2luZyksIHNvIGl0JiMzOTtzIFdvcnRoRnV6emluZy4KCk5vdywgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBpbXBvcnRhbnQgc3ltYm9scyBmb3IgZnV6emluZy4gIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYF9fdW5peF93YWxrX3NjY2AsIGB1bml4X3NjY19kZWFkYCwgYHVuaXhfd2Fsa19zY2NfZmFzdGAsIGB1bml4X3dhbGtfc2NjYCBhbmQgYHVuaXhfZ2NgLiBOZXh0LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXNlIGFyZSBzdGF0aWMgb3IgZ2xvYmFsLCBhbmQgaG93IHRoZXkgYXJlIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KHZvaWR8Ym9vbHx1bnNpZ25lZCBsb25nfGludCkgLipcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdW5peC9nYXJiYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3VuaXgvZ2FyYmFnZS5jPTEzMD1zdGF0aWMgdW5zaWduZWQgY2hhciB1bml4X2dyYXBoX3N0YXRlO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTEzMS1cbm5ldC91bml4L2dhcmJhZ2UuYzoxMzI6c3RhdGljIHZvaWQgdW5peF91cGRhdGVfZ3JhcGgoc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgpXG5uZXQvdW5peC9nYXJiYWdlLmMtMTMzLXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9MTUyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X21heF9zY2NfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9TVEFSVDtcbm5ldC91bml4L2dhcmJhZ2UuYy0xNTMtXG5uZXQvdW5peC9nYXJiYWdlLmM6MTU0OnN0YXRpYyB2b2lkIHVuaXhfYWRkX2VkZ2Uoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwsIHN0cnVjdCB1bml4X2VkZ2UgKmVkZ2UpXG5uZXQvdW5peC9nYXJiYWdlLmMtMTU1LXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMTc1LVxubmV0L3VuaXgvZ2FyYmFnZS5jOjE3NjpzdGF0aWMgdm9pZCB1bml4X2RlbF9lZGdlKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsLCBzdHJ1Y3QgdW5peF9lZGdlICplZGdlKVxubmV0L3VuaXgvZ2FyYmFnZS5jLTE3Ny17XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTE5Mi1cbm5ldC91bml4L2dhcmJhZ2UuYzoxOTM6c3RhdGljIHZvaWQgdW5peF9mcmVlX3ZlcnRpY2VzKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKVxubmV0L3VuaXgvZ2FyYmFnZS5jLTE5NC17XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jPTIwMz1zdGF0aWMgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NQSU5MT0NLKHVuaXhfZ2NfbG9jayk7XG5uZXQvdW5peC9nYXJiYWdlLmMtMjA0LVxubmV0L3VuaXgvZ2FyYmFnZS5jOjIwNTp2b2lkIHVuaXhfYWRkX2VkZ2VzKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsLCBzdHJ1Y3QgdW5peF9zb2NrICpyZWNlaXZlcilcbm5ldC91bml4L2dhcmJhZ2UuYy0yMDYte1xuLS1cbm5ldC91bml4L2dhcmJhZ2UuYy0yMzgtXG5uZXQvdW5peC9nYXJiYWdlLmM6MjM5OnZvaWQgdW5peF9kZWxfZWRnZXMoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXG5uZXQvdW5peC9nYXJiYWdlLmMtMjQwLXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMjY2LVxubmV0L3VuaXgvZ2FyYmFnZS5jOjI2Nzp2b2lkIHVuaXhfdXBkYXRlX2VkZ2VzKHN0cnVjdCB1bml4X3NvY2sgKnJlY2VpdmVyKVxubmV0L3VuaXgvZ2FyYmFnZS5jLTI2OC17XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTI4Mi1cbm5ldC91bml4L2dhcmJhZ2UuYzoyODM6aW50IHVuaXhfcHJlcGFyZV9mcGwoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXG5uZXQvdW5peC9nYXJiYWdlLmMtMjg0LXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMzEyLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjMxMzp2b2lkIHVuaXhfZGVzdHJveV9mcGwoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXG5uZXQvdW5peC9nYXJiYWdlLmMtMzE0LXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9MzIzPXN0YXRpYyBzZXFjb3VudF90IHVuaXhfcGVla19zZXEgPSBTRVFDTlRfWkVSTyh1bml4X3BlZWtfc2VxKTtcbm5ldC91bml4L2dhcmJhZ2UuYy0zMjQtXG5uZXQvdW5peC9nYXJiYWdlLmM6MzI1OnZvaWQgdW5peF9wZWVrX2ZwbChzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbClcbm5ldC91bml4L2dhcmJhZ2UuYy0zMjYte1xuLS1cbm5ldC91bml4L2dhcmJhZ2UuYy0zNDAtXG5uZXQvdW5peC9nYXJiYWdlLmM6MzQxOnN0YXRpYyBib29sIHVuaXhfdmVydGV4X2RlYWQoc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgpXG5uZXQvdW5peC9nYXJiYWdlLmMtMzQyLXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9Mzc1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMjtcbm5ldC91bml4L2dhcmJhZ2UuYy0zNzYtXG5uZXQvdW5peC9nYXJiYWdlLmM6Mzc3OnN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjKVxubmV0L3VuaXgvZ2FyYmFnZS5jLTM3OC17XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTM5OS1cbm5ldC91bml4L2dhcmJhZ2UuYzo0MDA6c3RhdGljIHZvaWQgdW5peF9jb2xsZWN0X3NrYihzdHJ1Y3QgbGlzdF9oZWFkICpzY2MsIHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXG5uZXQvdW5peC9nYXJiYWdlLmMtNDAxLXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNDMyLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjQzMzpzdGF0aWMgYm9vbCB1bml4X3NjY19jeWNsaWMoc3RydWN0IGxpc3RfaGVhZCAqc2NjKVxubmV0L3VuaXgvZ2FyYmFnZS5jLTQzNC17XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ1Mi1cbm5ldC91bml4L2dhcmJhZ2UuYzo0NTM6c3RhdGljIHVuc2lnbmVkIGxvbmcgX191bml4X3dhbGtfc2NjKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ1NC1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9pbmRleCxcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9NTU2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfZ3JhcGhfY3ljbGljX3NjY3M7XG5uZXQvdW5peC9nYXJiYWdlLmMtNTU3LVxubmV0L3VuaXgvZ2FyYmFnZS5jOjU1ODpzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjKHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXG5uZXQvdW5peC9nYXJiYWdlLmMtNTU5LXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNTgyLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjU4MzpzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjX2Zhc3Qoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcbm5ldC91bml4L2dhcmJhZ2UuYy01ODQte1xuLS1cbm5ldC91bml4L2dhcmJhZ2UuYy02MDgtXG5uZXQvdW5peC9nYXJiYWdlLmM6NjA5OnN0YXRpYyB2b2lkIHVuaXhfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L3VuaXgvZ2FyYmFnZS5jLTYxMC17XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jPTY0Mj1zdGF0aWMgREVDTEFSRV9XT1JLKHVuaXhfZ2Nfd29yaywgdW5peF9nYyk7XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTY0NS1cbm5ldC91bml4L2dhcmJhZ2UuYzo2NDY6dm9pZCB1bml4X3NjaGVkdWxlX2djKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcilcbm5ldC91bml4L2dhcmJhZ2UuYy02NDcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA5OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gSGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcgYXMgSSBhcHByb2FjaCB0aGlzIGB1bml4X3NjaGVkdWxlX2djYCBmdW5jdGlvbi4KCioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGB1bml4X3NjaGVkdWxlX2djYCoqCgpSaWdodCwgc28gdGhlIGZpcnN0IHN0ZXAsIGFzIGFsd2F5cyB3aGVuIEkgZW5jb3VudGVyIGEgZnVuY3Rpb24gSSBkb24mIzM5O3QgaW5zdGFudGx5IHJlY29nbml6ZSwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoZXJlKiB0aGlzIGB1bml4X3NjaGVkdWxlX2djYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gV2hhdCBwYXJ0cyBvZiB0aGUgc3lzdGVtIHJlbHkgb24gaXQ/IFdoYXQgYXJlIHRoZSBjYWxsaW5nIHNlcXVlbmNlcz8gSXMgaXQgY2FsbGVkIGZyb20gYSBjcml0aWNhbCBwYXRoLCBvciBzb21ldGhpbmcgbW9yZSBhbmNpbGxhcnk/IEtub3dpbmcgdGhpcyB3aWxsIGltbWVkaWF0ZWx5IGluZm9ybSBtZSBhYm91dCBpdHMgbGlrZWx5IGltcG9ydGFuY2UsIHB1cnBvc2UsIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBjb2RlLCBpZGVhbGx5IHVzaW5nIG15IGRlYnVnZ2VyIG9yIGNvZGUgYnJvd3NpbmcgdG9vbHMgdG8gbGlzdCB0aGUgY2FsbGVycy4gSSBuZWVkIHRvIHNlZSB0aGUgc3RhY2sgdHJhY2VzIHRoYXQgd291bGQgdWx0aW1hdGVseSBsZWFkIHRvIGB1bml4X3NjaGVkdWxlX2djYC4gSG9wZWZ1bGx5LCB0aGUgY2FsbCBzaXRlcyBoYXZlIGhlbHBmdWwgY29tbWVudHMsIGJ1dCBJJiMzOTttIHByZXBhcmVkIHRvIGRvIHNvbWUgZGlnZ2luZy4gTXkgZ29hbCBpcyB0byBwYWludCBhIG1lbnRhbCBwaWN0dXJlIG9mIHRoZSBlbnZpcm9ubWVudCB0aGF0IHRyaWdnZXJzIGB1bml4X3NjaGVkdWxlX2djYC4gSSYjMzk7bGwgcGF5IGF0dGVudGlvbiB0byBhbnkgYXJndW1lbnRzIGJlaW5nIHBhc3NlZCwgYXMgdGhvc2UgYXJlIGNydWNpYWwgY2x1ZXMuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIHJlYXNvbiBhYm91dCAqd2h5KiBpdCYjMzk7cyBiZWluZyBjYWxsZWQsIGFuZCAqd2hhdCogaXQmIzM5O3MgYWN0dWFsbHkgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VuaXhfc2NoZWR1bGVfZ2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3VuaXgvYWZfdW5peC5jPTY2NT1zdGF0aWMgdm9pZCB1bml4X3JlbGVhc2Vfc29jayhzdHJ1Y3Qgc29jayAqc2ssIGludCBlbWJyaW9uKVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy03MzUtXG5uZXQvdW5peC9hZl91bml4LmM6NzM2Olx0dW5peF9zY2hlZHVsZV9nYyhOVUxMKTtcbm5ldC91bml4L2FmX3VuaXguYy03MzctfVxuLS1cbm5ldC91bml4L2FmX3VuaXguaD0zMj12b2lkIHVuaXhfcGVla19mcGwoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpO1xubmV0L3VuaXgvYWZfdW5peC5oOjMzOnZvaWQgdW5peF9zY2hlZHVsZV9nYyhzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpO1xubmV0L3VuaXgvYWZfdW5peC5oLTM0LVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYz0yODM9aW50IHVuaXhfcHJlcGFyZV9mcGwoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTMwMy1cbm5ldC91bml4L2dhcmJhZ2UuYzozMDQ6XHR1bml4X3NjaGVkdWxlX2djKGZwbC1cdTAwM2V1c2VyKTtcbm5ldC91bml4L2dhcmJhZ2UuYy0zMDUtXG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jPTY0Mj1zdGF0aWMgREVDTEFSRV9XT1JLKHVuaXhfZ2Nfd29yaywgdW5peF9nYyk7XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTY0NS1cbm5ldC91bml4L2dhcmJhZ2UuYzo2NDY6dm9pZCB1bml4X3NjaGVkdWxlX2djKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcilcbm5ldC91bml4L2dhcmJhZ2UuYy02NDcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc0OQoJCQkJCQkJb3V0cHV0OiAxOTEKCQkJCQkJCXRob3VnaHRzOiA0OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFVOSVggRG9tYWluIFNvY2tldCBHYXJiYWdlIENvbGxlY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBzY29wZSBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gVGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbXBhY3RlZCBhcmUgYF9fdW5peF93YWxrX3NjY2AsIGB1bml4X3NjY19kZWFkYCwgYW5kIGB1bml4X3dhbGtfc2NjX2Zhc3RgLiBUaGVzZSBmdW5jdGlvbnMsIGFsb25nIHdpdGggcmVsYXRlZCBlbnRyeXBvaW50cyBgdW5peF93YWxrX3NjY2AgYW5kIGB1bml4X2djYCwgaW1tZWRpYXRlbHkgc2lnbmFsIHRoYXQgdGhpcyBwYXRjaCBpcyB0aWdodGx5IGNvdXBsZWQgd2l0aCBVTklYIGRvbWFpbiBzb2NrZXQgZ2FyYmFnZSBjb2xsZWN0aW9uLiBJdCYjMzk7cyBub3QgYSBnZW5lcmljIGNoYW5nZTsgaXQmIzM5O3MgZm9jdXNlZC4gVGhleSBhcmUgc3RyaWN0bHkgbGltaXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgVU5JWCBkb21haW4gc29ja2V0cywgcGFydGljdWxhcmx5IHRoZSBjbGVhbnVwIGFmdGVyIGZpbGUgZGVzY3JpcHRvciBwYXNzaW5nIG9yIHNvY2tldCBjbG9zdXJlLgoKU2luY2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBuaWNoZSwgbGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgZm9yIHViaXF1aXR5LiBOb3BlLCB0aGV5JiMzOTtyZSBhbGwgc3BlY2lmaWNhbGx5IHBhcnQgb2YgdGhlIFVuaXggc29ja2V0IGdhcmJhZ2UgY29sbGVjdGlvbiBtZWNoYW5pc20uIEV4Y2VsbGVudCwgdGhhdCBjbGFyaWZpZXMgdGhpbmdzLgoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGUgY29kZSB1c2VzIGBDT05GSUdfVU5JWGAuIEEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBgbmV0L3VuaXgvS2NvbmZpZ2AgZGVmaW5lcyBgQ09ORklHX1VOSVhgIGFzIGEgYm9vbGVhbiBvcHRpb24sIGFuZCBpdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gaGF2ZSBhbnkgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMsIGl0IGlzIG9ubHkgYSBib29sZWFuIGFuZCB0aGUgc291cmNlIGlzIGluIGBuZXQvS2NvbmZpZ2AuIFRoaXMgbWVhbnMgdGhlIHJlbGV2YW50IGNvZGUgd2lsbCBiZSBidWlsdCBvbmx5IGlmIGBDT05GSUdfVU5JWGAgaXMgZW5hYmxlZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLgoKVGltZSB0byBhcnRpY3VsYXRlIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIEkmIzM5O2xsIGZsYWcgYFdvcnRoRnV6emluZ2AgYXMgYHRydWVgIGdpdmVuIHRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGNvZGUgZGVhbGluZyB3aXRoIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1VOSVggc29ja2V0cy4gVGhlIGBSZWFzb25pbmdgIHdpbGwgZGVzY3JpYmUgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnQgKFNDQykgYWxnb3JpdGhtIGZvciBVTklYIGRvbWFpbiBzb2NrZXQgZ2FyYmFnZSBjb2xsZWN0aW9uIChgbmV0L3VuaXgvZ2FyYmFnZS5jYCkuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyB3aGVuIHZlcnRpY2VzIGFyZSBtYXJrZWQgb2ZmLXN0YWNrIGFuZCBob3cgYHNjY19pbmRleGAgaXMgYXNzaWduZWQgdG8gdmVydGljZXMgd2l0aGluIGZpbmFsaXplZCBTQ0NzIChgX191bml4X3dhbGtfc2NjYCBhbmQgYHVuaXhfc2NjX2RlYWRgKS4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgY29kZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1VOSVggc29ja2V0cyBhbmQgU0NNX1JJR0hUUyBmaWxlIGRlc2NyaXB0b3IgcGFzc2luZy4gVGhlIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmU6IGBfX3VuaXhfd2Fsa19zY2NgLCBgdW5peF9zY2NfZGVhZGAsIGB1bml4X3dhbGtfc2NjX2Zhc3RgLCBgdW5peF93YWxrX3NjY2AsIGFuZCBgdW5peF9nY2AuIFRoZSBgRW5hYmxlQ29uZmlnc2Agd2lsbCBqdXN0IGluY2x1ZGUgYFVOSVhgLgoKRXZlcnl0aGluZyBsb29rcyBnb29kLiBObyByZWQgZmxhZ3MuIFJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3VuaXhfd2Fsa19zY2MmIzM0OywKICAgICYjMzQ7dW5peF9zY2NfZGVhZCYjMzQ7LAogICAgJiMzNDt1bml4X3dhbGtfc2NjX2Zhc3QmIzM0OywKICAgICYjMzQ7dW5peF93YWxrX3NjYyYjMzQ7LAogICAgJiMzNDt1bml4X2djJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50cyAoU0NDKSBUYXJqYW4tYmFzZWQgY3ljbGUgZGV0ZWN0aW9uIGFsZ29yaXRobSBpbiBVTklYIGRvbWFpbiBzb2NrZXQgZ2FyYmFnZSBjb2xsZWN0aW9uIChuZXQvdW5peC9nYXJiYWdlLmMpLiBTcGVjaWZpY2FsbHksIGl0IHVwZGF0ZXMgX191bml4X3dhbGtfc2NjIHRvIGFzc2lnbiB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4IGFuZCB1cGRhdGUgc2NjX2luZGV4IGFjcm9zcyB0aGUgZW50aXJlIFNDQyBwcmlvciB0byBjYWxsaW5nIHVuaXhfc2NjX2RlYWQsIGFuZCByZW1vdmVzIHRoZSBmYXN0IHBhcmFtZXRlciBhbmQgb2ZmLXN0YWNrIG1hcmtpbmcgZnJvbSB1bml4X3NjY19kZWFkLiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpcyBkaXJlY3RseSBleGVyY2lzZWQgd2hlbiBwYXNzaW5nIGZpbGUgZGVzY3JpcHRvcnMgYWNyb3NzIFVOSVggc29ja2V0cyB2aWEgU0NNX1JJR0hUUy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VU5JWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdW5peF93YWxrX3NjYyYjMzQ7LAogICAgJiMzNDt1bml4X3NjY19kZWFkJiMzNDssCiAgICAmIzM0O3VuaXhfd2Fsa19zY2NfZmFzdCYjMzQ7LAogICAgJiMzNDt1bml4X3dhbGtfc2NjJiMzNDssCiAgICAmIzM0O3VuaXhfZ2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIChTQ0MpIFRhcmphbi1iYXNlZCBjeWNsZSBkZXRlY3Rpb24gYWxnb3JpdGhtIGluIFVOSVggZG9tYWluIHNvY2tldCBnYXJiYWdlIGNvbGxlY3Rpb24gKG5ldC91bml4L2dhcmJhZ2UuYykuIFNwZWNpZmljYWxseSwgaXQgdXBkYXRlcyBfX3VuaXhfd2Fsa19zY2MgdG8gYXNzaWduIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggYW5kIHVwZGF0ZSBzY2NfaW5kZXggYWNyb3NzIHRoZSBlbnRpcmUgU0NDIHByaW9yIHRvIGNhbGxpbmcgdW5peF9zY2NfZGVhZCwgYW5kIHJlbW92ZXMgdGhlIGZhc3QgcGFyYW1ldGVyIGFuZCBvZmYtc3RhY2sgbWFya2luZyBmcm9tIHVuaXhfc2NjX2RlYWQuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIGRpcmVjdGx5IGV4ZXJjaXNlZCB3aGVuIHBhc3NpbmcgZmlsZSBkZXNjcmlwdG9ycyBhY3Jvc3MgVU5JWCBzb2NrZXRzIHZpYSBTQ01fUklHSFRTLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBBRl9VTklYIGdhcmJhZ2UgY29sbGVjdG9yJiMzOTtzIFRhcmphbiBTdHJvbmdseSBDb25uZWN0ZWQgQ29tcG9uZW50IChTQ0MpIGFsZ29yaXRobSBpbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gSXQgbW92ZXMgdGhlIG9mZi1zdGFjayBtYXJraW5nIChgdi1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXhgKSBhbmQgU0NDIElEIGFzc2lnbm1lbnQgKGB2LVx1MDAzZXNjY19pbmRleCA9IHZlcnRleC1cdTAwM2VzY2NfaW5kZXhgKSBmb3IgU0NDIHZlcnRpY2VzIGZyb20gYHVuaXhfc2NjX2RlYWQoKWAgaW50byBgX191bml4X3dhbGtfc2NjKClgLCBzaW1wbGlmaWVzIGB1bml4X3NjY19kZWFkKClgIGJ5IHJlbW92aW5nIHRoZSBgZmFzdGAgcGFyYW1ldGVyLCBhbmQgYWRkcyBhIHJlZ3Jlc3Npb24gdGVzdCBpbiBrc2VsZnRlc3RzLlxuXG5UaGlzIGNoYW5nZSB0b3VjaGVzIHB1cmVseSBpbnRlcm5hbCBncmFwaCBib29ra2VlcGluZyBmaWVsZHMgb24gYHN0cnVjdCB1bml4X3ZlcnRleGAgb2JqZWN0cyB0aGF0IGFyZSBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgYW55IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZ3JhcGggdHJhdmVyc2FsLCBsaXN0IG1hbmlwdWxhdGlvbiwgb3Igc29ja2V0IGxpZmV0aW1lcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb25zKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIGZhY2lsaXRpZXMgKGUuZy4sIENPTkZJR19ERUJVR19MSVNUKS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjQyMjZkMDE2ZDBhZWQ2NGFjNGFjZjQ1MmYwNjVmYjIwNTcxYjY1NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDA0OjA0OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3VuaXgvZ2FyYmFnZS5jIGIvbmV0L3VuaXgvZ2FyYmFnZS5jCmluZGV4IDlmY2FhZjU1Y2JhNWQuLmRhNzc0ZjU2Y2E2NDggMTAwNjQ0Ci0tLSBhL25ldC91bml4L2dhcmJhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdW5peC9nYXJiYWdlLmMKQEAgLTM3NCw3ICYjNDM7Mzc0LDcgQEAgc3RhdGljIGJvb2wgdW5peF92ZXJ0ZXhfZGVhZChzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleCkKIHN0YXRpYyBMSVNUX0hFQUQodW5peF92aXNpdGVkX3ZlcnRpY2VzKTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMjsKIAotc3RhdGljIGJvb2wgdW5peF9zY2NfZGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpzY2MsIGJvb2wgZmFzdCkKJiM0MztzdGF0aWMgYm9vbCB1bml4X3NjY19kZWFkKHN0cnVjdCBsaXN0X2hlYWQgKnNjYykKIHsKIAlzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDsKIAlib29sIHNjY19kZWFkID0gdHJ1ZTsKQEAgLTM4NiwxMCAmIzQzOzM4Niw2IEBAIHN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBib29sIGZhc3QpCiAJCS8qIERvbiYjMzk7dCByZXN0YXJ0IERGUyBmcm9tIHRoaXMgdmVydGV4LiAqLwogCQlsaXN0X21vdmVfdGFpbCgmYW1wO3ZlcnRleC0mZ3Q7ZW50cnksICZhbXA7dW5peF92aXNpdGVkX3ZlcnRpY2VzKTsKIAotCQkvKiBNYXJrIHZlcnRleCBhcyBvZmYtc3RhY2sgZm9yIF9fdW5peF93YWxrX3NjYygpLiAqLwotCQlpZiAoIWZhc3QpCi0JCQl2ZXJ0ZXgtJmd0O2luZGV4ID0gdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleDsKLQogCQlpZiAoc2NjX2RlYWQpCiAJCQlzY2NfZGVhZCA9IHVuaXhfdmVydGV4X2RlYWQodmVydGV4KTsKIAl9CkBAIC01MjEsNiAmIzQzOzUxNyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdW5peF93YWxrX3NjYyhzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleCwKIAl9CiAKIAlpZiAodmVydGV4LSZndDtpbmRleCA9PSB2ZXJ0ZXgtJmd0O3NjY19pbmRleCkgewomIzQzOwkJc3RydWN0IHVuaXhfdmVydGV4ICp2OwogCQlzdHJ1Y3QgbGlzdF9oZWFkIHNjYzsKIAogCQkvKiBTQ0MgZmluYWxpc2VkLgpAQCAtNTMwLDcgJiM0Mzs1MjcsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX191bml4X3dhbGtfc2NjKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LAogCQkgKi8KIAkJX19saXN0X2N1dF9wb3NpdGlvbigmYW1wO3NjYywgJmFtcDt2ZXJ0ZXhfc3RhY2ssICZhbXA7dmVydGV4LSZndDtzY2NfZW50cnkpOwogCi0JCWlmICh1bml4X3NjY19kZWFkKCZhbXA7c2NjLCBmYWxzZSkpIHsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZSh2LCAmYW1wO3NjYywgc2NjX2VudHJ5KSB7CiYjNDM7CQkJLyogTWFyayB2ZXJ0ZXggYXMgb2ZmLXN0YWNrIGFuZCBhc3NpZ24gYSB1bmlxdWUgSUQuICovCiYjNDM7CQkJdi0mZ3Q7aW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4OwomIzQzOwkJCXYtJmd0O3NjY19pbmRleCA9IHZlcnRleC0mZ3Q7c2NjX2luZGV4OwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHVuaXhfc2NjX2RlYWQoJmFtcDtzY2MpKSB7CiAJCQl1bml4X2NvbGxlY3Rfc2tiKCZhbXA7c2NjLCBoaXRsaXN0KTsKIAkJfSBlbHNlIHsKIAkJCWlmICh1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4ICZsdDsgdmVydGV4LSZndDtzY2NfaW5kZXgpCkBAIC01ODgsNyAmIzQzOzU5MSw3IEBAIHN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2NfZmFzdChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KQogCQl2ZXJ0ZXggPSBsaXN0X2ZpcnN0X2VudHJ5KCZhbXA7dW5peF91bnZpc2l0ZWRfdmVydGljZXMsIHR5cGVvZigqdmVydGV4KSwgZW50cnkpOwogCQlsaXN0X2FkZCgmYW1wO3NjYywgJmFtcDt2ZXJ0ZXgtJmd0O3NjY19lbnRyeSk7CiAKLQkJaWYgKHVuaXhfc2NjX2RlYWQoJmFtcDtzY2MsIHRydWUpKSB7CiYjNDM7CQlpZiAodW5peF9zY2NfZGVhZCgmYW1wO3NjYykpIHsKIAkJCWN5Y2xpY19zY2NzLS07CiAJCQl1bml4X2NvbGxlY3Rfc2tiKCZhbXA7c2NjLCBoaXRsaXN0KTsKIAkJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jCmluZGV4IGQ4MmE3OWMyMWMxNzkuLmMxNjVmMjUwMjIwYTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmMKQEAgLTM3OCw0ICYjNDM7Mzc4LDIxIEBAIFRFU1RfRihzY21fcmlnaHRzLCBiYWNrdHJhY2tfZnJvbV9zY2MpCiAJY2xvc2Vfc29ja2V0cygxMCk7CiB9CiAKJiM0MztURVNUX0Yoc2NtX3JpZ2h0cywgbWl4ZWRfbG93cG9pbnQpCiYjNDM7ewomIzQzOwljcmVhdGVfc29ja2V0cyg2KTsKJiM0MzsKJiM0MzsJc2VuZF9mZCgwLCAxKTsKJiM0MzsJc2VuZF9mZCgxLCAyKTsKJiM0MzsJc2VuZF9mZCgyLCAxKTsKJiM0MzsJc2VuZF9mZCgxLCAwKTsKJiM0MzsKJiM0MzsJc2VuZF9mZCgzLCA0KTsKJiM0MzsJc2VuZF9mZCg0LCA1KTsKJiM0MzsJc2VuZF9mZCg1LCA0KTsKJiM0MzsJc2VuZF9mZCg0LCAzKTsKJiM0MzsKJiM0MzsJY2xvc2Vfc29ja2V0cyg2KTsKJiM0Mzt9CiYjNDM7CiBURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdXNlciB3YW50cyB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBqdXN0aWZpZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBpbiBhZGRpdGlvbiB0byBvdXIgc3RhbmRhcmQgS0FTQU4gZWZmb3J0cy4gVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHNvIHRoYXQmIzM5O3MgdGhlIGNvbnRleHQuIEZpcnN0LCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgd2h5LgoKTG9va2luZyBhdCB0aGUgZGlmZiBpbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYCwgaXQgc2VlbXMgdGhlIG1haW4gZm9jdXMgaXMgYXJvdW5kIHRoZSBgdW5peF9zY2NfZGVhZCgpYCBhbmQgYF9fdW5peF93YWxrX3NjYygpYCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYSBgYm9vbCBmYXN0YCBwYXJhbWV0ZXIgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGB1bml4X3NjY19kZWFkKClgLiBUaGF0IGNvbmRpdGlvbmFsIHRoYXQgY2hlY2tlZCB0aGlzIHZhbHVlIGhhcyBiZWVuIG1vdmVkIHRvIGBfX3VuaXhfd2Fsa19zY2MoKWAgYW5kIGl0IGludm9sdmVzIHNvbWUgc29ydCBvZiBsaXN0IHRyYXZlcnNhbCwgdGhlIGV4YWN0IGZ1bmN0aW9uIGl0IGlzIG9wZXJhdGluZyBvbiBpcyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cy4gVGhlIGB1bml4X3dhbGtfc2NjX2Zhc3QoKWAgZnVuY3Rpb24gbm93IHNpbXBseSBjYWxscyBgdW5peF9zY2NfZGVhZCgmYW1wO3NjYylgLCBzbyBpdCBpcyBhIGRpcmVjdCBjYWxsIGluc3RlYWQgb2YgYW4gZWFybGllciBjb25kaXRpb25hbC4gVGhlcmUmIzM5O3MgYWxzbyBhIG5ldyB0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmNgIHdoaWNoLCBvbiBpdHMgb3duLCBtZWFucyBuZXh0IHRvIG5vdGhpbmcsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCB0cmFjayBvZi4KCkkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gYG5ldC91bml4L2dhcmJhZ2UuY2AgYW5kIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBwaWN0dXJlLiBJIHdhbnQgdG8gZ3JvayB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQgYnkgdGhlc2UgZnVuY3Rpb25zLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjaGFuZ2VzIGFsdGVyIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiB0aGUgYHNjY2AgKHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnQpIHJlbGF0ZWQgb3BlcmF0aW9ucy4gSXMgdGhlIHBhdGNoIGNoYW5naW5nIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBmcmVlZCwgb3IgYWNjZXNzZWQgaW4gYSB3YXkgdGhhdCBtaWdodCBleHBvc2UgbmV3IEtNU0FOLWRldGVjdGFibGUgaXNzdWVzPyBVbmRlcnN0YW5kaW5nIHRoZSByb2xlIG9mIGB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4YCBhbmQgYHNjY19pbmRleGAgaXMgZXNzZW50aWFsLiBPbmx5IHRoZW4gY2FuIEkgZGV0ZXJtaW5lIGlmIHRoZXJlJiMzOTtzIGEgaGVpZ2h0ZW5lZCByaXNrIHByb2ZpbGUgdGhhdCB3YXJyYW50cyB0aGUgZXh0cmEgZWZmb3J0IG9mIGEgS01TQU4gc2Vzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdW5peC9nYXJiYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM3MDpcdFxuIDM3MTpcdFx0cmV0dXJuIHRydWU7XG4gMzcyOlx0fVxuIDM3MzpcdFxuIDM3NDpcdHN0YXRpYyBMSVNUX0hFQUQodW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcbiAzNzU6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfTUFSSzI7XG4gMzc2Olx0XG4gMzc3Olx0c3RhdGljIGJvb2wgdW5peF9zY2NfZGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpzY2MpXG4gMzc4Olx0e1xuIDM3OTpcdFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XG4gMzgwOlx0XHRib29sIHNjY19kZWFkID0gdHJ1ZTtcbiAzODE6XHRcdHVuc2lnbmVkIGludCBzZXE7XG4gMzgyOlx0XG4gMzgzOlx0XHRzZXEgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNnVuaXhfcGVla19zZXEpO1xuIDM4NDpcdFxuIDM4NTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHZlcnRleCwgc2NjLCBzY2NfZW50cnkpIHtcbiAzODY6XHRcdFx0LyogRG9uJiMzOTt0IHJlc3RhcnQgREZTIGZyb20gdGhpcyB2ZXJ0ZXguICovXG4gMzg3Olx0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNnZlcnRleC1cdTAwM2VlbnRyeSwgXHUwMDI2dW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcbiAzODg6XHRcbiAzODk6XHRcdFx0aWYgKHNjY19kZWFkKVxuIDM5MDpcdFx0XHRcdHNjY19kZWFkID0gdW5peF92ZXJ0ZXhfZGVhZCh2ZXJ0ZXgpO1xuIDM5MTpcdFx0fVxuIDM5MjpcdFxuIDM5MzpcdFx0LyogSWYgTVNHX1BFRUsgaW50ZXJ2ZW5lZCwgZGVmZXIgdGhpcyBTQ0MgdG8gdGhlIG5leHQgcm91bmQuICovXG4gMzk0Olx0XHRpZiAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZ1bml4X3BlZWtfc2VxLCBzZXEpKVxuIDM5NTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMzk2Olx0XG4gMzk3Olx0XHRyZXR1cm4gc2NjX2RlYWQ7XG4gMzk4Olx0fVxuIDM5OTpcdFxuIDQwMDpcdHN0YXRpYyB2b2lkIHVuaXhfY29sbGVjdF9za2Ioc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxuIDQwMTpcdHtcbiA0MDI6XHRcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4O1xuIDQwMzpcdFxuIDQwNDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHZlcnRleCwgc2NjLCBzY2NfZW50cnkpIHtcbiA0MDU6XHRcdFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWU7XG4gNDA2Olx0XHRcdHN0cnVjdCB1bml4X2VkZ2UgKmVkZ2U7XG4gNDA3Olx0XHRcdHN0cnVjdCB1bml4X3NvY2sgKnU7XG4gNDA4Olx0XG4gNDA5Olx0XHRcdGVkZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNnZlcnRleC1cdTAwM2VlZGdlcywgdHlwZW9mKCplZGdlKSwgdmVydGV4X2VudHJ5KTtcbiA0MTA6XHRcdFx0dSA9IGVkZ2UtXHUwMDNlcHJlZGVjZXNzb3I7XG4gNDExOlx0XHRcdHF1ZXVlID0gXHUwMDI2dS1cdTAwM2Vzay5za19yZWNlaXZlX3F1ZXVlO1xuIDQxMjpcdFxuIDQxMzpcdFx0XHRzcGluX2xvY2soXHUwMDI2cXVldWUtXHUwMDNlbG9jayk7XG4gNDE0Olx0XG4gNDE1Olx0XHRcdGlmICh1LVx1MDAzZXNrLnNrX3N0YXRlID09IFRDUF9MSVNURU4pIHtcbiA0MTY6XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDQxNzpcdFxuIDQxODpcdFx0XHRcdHNrYl9xdWV1ZV93YWxrKHF1ZXVlLCBza2IpIHtcbiA0MTk6XHRcdFx0XHRcdHN0cnVjdCBza19idWZmX2hlYWQgKmVtYnJ5b19xdWV1ZSA9IFx1MDAyNnNrYi1cdTAwM2Vzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTIzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc3ViamVjdCwgdGhpbmtpbmcgYWxvdWQsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG5ldC91bml4L2dhcmJhZ2UuY2AqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBgbmV0L3VuaXgvZ2FyYmFnZS5jYCBhZ2Fpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFyb3VuZCB0aGUgYF9fdW5peF93YWxrX3NjY2AgYW5kIGB1bml4X3dhbGtfc2NjX2Zhc3RgIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIGNyaXRpY2FsIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtIHdvcmtzIHdpdGhpbiB0aGUgVW5peCBkb21haW4gc29ja2V0IHN1YnN5c3RlbSwgZXNwZWNpYWxseSBob3cgaXQgaGFuZGxlcyBjeWNsZSBkZXRlY3Rpb24uIEkgcmVjYWxsIHRoZXJlIHdlcmUgc29tZSBpbnRlcmVzdGluZyBudWFuY2VzIGluIGhvdyBpdCBoYW5kbGVzIHNoYXJlZCBtZW1vcnkgYW5kIGNpcmN1bGFyIHJlZmVyZW5jZXMuIExldCYjMzk7cyBzZWUgaWYgdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgcG90ZW50aWFsIGltcHJvdmVtZW50cyBJJiMzOTt2ZSBiZWVuIGNvbnNpZGVyaW5nLiBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGZhc3QgcGF0aCBpbiBgdW5peF93YWxrX3NjY19mYXN0YCB0byBqdWRnZSBpZiBteSBwcm9wb3NlZCBvcHRpbWl6YXRpb25zIGFyZSBhY3R1YWxseSBmZWFzaWJsZSBhbmQgd29uJiMzOTt0IGludHJvZHVjZSBuZXcgcHJvYmxlbXMuIFJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgcmVhZGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdW5peC9nYXJiYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0OTA6XHRcbiA0OTE6XHRcdFx0XHQvKiAgIDIuIFBvcCB0aGUgZWRnZSBkaXJlY3RlZCB0byB0aGUgY3VycmVudCB2ZXJ0ZXhcbiA0OTI6XHRcdFx0XHQgKiAgICAgIGFuZCByZXN0b3JlIHRoZSBhbmNlc3RvciBmb3IgYmFja3RyYWNraW5nLlxuIDQ5MzpcdFx0XHRcdCAqL1xuIDQ5NDpcdHByZXZfdmVydGV4OlxuIDQ5NTpcdFx0XHRcdGVkZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNmVkZ2Vfc3RhY2ssIHR5cGVvZigqZWRnZSksIHN0YWNrX2VudHJ5KTtcbiA0OTY6XHRcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmVkZ2UtXHUwMDNlc3RhY2tfZW50cnkpO1xuIDQ5NzpcdFxuIDQ5ODpcdFx0XHRcdG5leHRfdmVydGV4ID0gdmVydGV4O1xuIDQ5OTpcdFx0XHRcdHZlcnRleCA9IGVkZ2UtXHUwMDNlcHJlZGVjZXNzb3ItXHUwMDNldmVydGV4O1xuIDUwMDpcdFxuIDUwMTpcdFx0XHRcdC8qIElmIHRoZSBzdWNjZXNzb3IgaGFzIGEgc21hbGxlciBzY2NfaW5kZXgsIHR3byB2ZXJ0aWNlc1xuIDUwMjpcdFx0XHRcdCAqIGFyZSBpbiB0aGUgc2FtZSBTQ0MsIHNvIHByb3BhZ2F0ZSB0aGUgc21hbGxlciBzY2NfaW5kZXhcbiA1MDM6XHRcdFx0XHQgKiB0byBza2lwIFNDQyBmaW5hbGlzYXRpb24uXG4gNTA0Olx0XHRcdFx0ICovXG4gNTA1Olx0XHRcdFx0dmVydGV4LVx1MDAzZXNjY19pbmRleCA9IG1pbih2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4LCBuZXh0X3ZlcnRleC1cdTAwM2VzY2NfaW5kZXgpO1xuIDUwNjpcdFx0XHR9IGVsc2UgaWYgKG5leHRfdmVydGV4LVx1MDAzZWluZGV4ICE9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXgpIHtcbiA1MDc6XHRcdFx0XHQvKiBMb29wIGRldGVjdGVkIGJ5IGEgYmFjay9jcm9zcyBlZGdlLlxuIDUwODpcdFx0XHRcdCAqXG4gNTA5Olx0XHRcdFx0ICogVGhlIHN1Y2Nlc3NvciBpcyBvbiB2ZXJ0ZXhfc3RhY2ssIHNvIHR3byB2ZXJ0aWNlcyBhcmUgaW5cbiA1MTA6XHRcdFx0XHQgKiB0aGUgc2FtZSBTQ0MuICBJZiB0aGUgc3VjY2Vzc29yIGhhcyBhIHNtYWxsZXIgKnNjY19pbmRleCosXG4gNTExOlx0XHRcdFx0ICogcHJvcGFnYXRlIGl0IHRvIHNraXAgU0NDIGZpbmFsaXNhdGlvbi5cbiA1MTI6XHRcdFx0XHQgKi9cbiA1MTM6XHRcdFx0XHR2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4ID0gbWluKHZlcnRleC1cdTAwM2VzY2NfaW5kZXgsIG5leHRfdmVydGV4LVx1MDAzZXNjY19pbmRleCk7XG4gNTE0Olx0XHRcdH0gZWxzZSB7XG4gNTE1Olx0XHRcdFx0LyogVGhlIHN1Y2Nlc3NvciB3YXMgYWxyZWFkeSBncm91cGVkIGFzIGFub3RoZXIgU0NDICovXG4gNTE2Olx0XHRcdH1cbiA1MTc6XHRcdH1cbiA1MTg6XHRcbiA1MTk6XHRcdGlmICh2ZXJ0ZXgtXHUwMDNlaW5kZXggPT0gdmVydGV4LVx1MDAzZXNjY19pbmRleCkge1xuIDUyMDpcdFx0XHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnY7XG4gNTIxOlx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgc2NjO1xuIDUyMjpcdFxuIDUyMzpcdFx0XHQvKiBTQ0MgZmluYWxpc2VkLlxuIDUyNDpcdFx0XHQgKlxuIDUyNTpcdFx0XHQgKiBJZiB0aGUgc2NjX2luZGV4IHdhcyBub3QgdXBkYXRlZCwgYWxsIHRoZSB2ZXJ0aWNlcyBhYm92ZSBvblxuIDUyNjpcdFx0XHQgKiB2ZXJ0ZXhfc3RhY2sgYXJlIGluIHRoZSBzYW1lIFNDQy4gIEdyb3VwIHRoZW0gdXNpbmcgc2NjX2VudHJ5LlxuIDUyNzpcdFx0XHQgKi9cbiA1Mjg6XHRcdFx0X19saXN0X2N1dF9wb3NpdGlvbihcdTAwMjZzY2MsIFx1MDAyNnZlcnRleF9zdGFjaywgXHUwMDI2dmVydGV4LVx1MDAzZXNjY19lbnRyeSk7XG4gNTI5Olx0XG4gNTMwOlx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZSh2LCBcdTAwMjZzY2MsIHNjY19lbnRyeSkge1xuIDUzMTpcdFx0XHRcdC8qIE1hcmsgdmVydGV4IGFzIG9mZi1zdGFjayBhbmQgYXNzaWduIGEgdW5pcXVlIElELiAqL1xuIDUzMjpcdFx0XHRcdHYtXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xuIDUzMzpcdFx0XHRcdHYtXHUwMDNlc2NjX2luZGV4ID0gdmVydGV4LVx1MDAzZXNjY19pbmRleDtcbiA1MzQ6XHRcdFx0fVxuIDUzNTpcdFxuIDUzNjpcdFx0XHRpZiAodW5peF9zY2NfZGVhZChcdTAwMjZzY2MpKSB7XG4gNTM3Olx0XHRcdFx0dW5peF9jb2xsZWN0X3NrYihcdTAwMjZzY2MsIGhpdGxpc3QpO1xuIDUzODpcdFx0XHR9IGVsc2Uge1xuIDUzOTpcdFx0XHRcdGlmICh1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4IFx1MDAzYyB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4KVxuIDU0MDpcdFx0XHRcdFx0dW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCA9IHZlcnRleC1cdTAwM2VzY2NfaW5kZXg7XG4gNTQxOlx0XG4gNTQyOlx0XHRcdFx0aWYgKHVuaXhfc2NjX2N5Y2xpYyhcdTAwMjZzY2MpKVxuIDU0MzpcdFx0XHRcdFx0Y3ljbGljX3NjY3MmIzQzOyYjNDM7O1xuIDU0NDpcdFx0XHR9XG4gNTQ1Olx0XG4gNTQ2Olx0XHRcdGxpc3RfZGVsKFx1MDAyNnNjYyk7XG4gNTQ3Olx0XHR9XG4gNTQ4Olx0XG4gNTQ5Olx0XHQvKiBOZWVkIGJhY2t0cmFja2luZyA/ICovXG4gNTUwOlx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZWRnZV9zdGFjaykpXG4gNTUxOlx0XHRcdGdvdG8gcHJldl92ZXJ0ZXg7XG4gNTUyOlx0XG4gNTUzOlx0XHRyZXR1cm4gY3ljbGljX3NjY3M7XG4gNTU0Olx0fVxuIDU1NTpcdFxuIDU1NjpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfZ3JhcGhfY3ljbGljX3NjY3M7XG4gNTU3Olx0XG4gNTU4Olx0c3RhdGljIHZvaWQgdW5peF93YWxrX3NjYyhzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxuIDU1OTpcdHtcbiA1NjA6XHRcdHVuc2lnbmVkIGxvbmcgbGFzdF9pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX1NUQVJUO1xuIDU2MTpcdFx0dW5zaWduZWQgbG9uZyBjeWNsaWNfc2NjcyA9IDA7XG4gNTYyOlx0XG4gNTYzOlx0XHR1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfU1RBUlQ7XG4gNTY0Olx0XG4gNTY1Olx0XHQvKiBWaXNpdCBldmVyeSB2ZXJ0ZXggZXhhY3RseSBvbmNlLlxuIDU2NjpcdFx0ICogX191bml4X3dhbGtfc2NjKCkgbW92ZXMgdmlzaXRlZCB2ZXJ0aWNlcyB0byB1bml4X3Zpc2l0ZWRfdmVydGljZXMuXG4gNTY3Olx0XHQgKi9cbiA1Njg6XHRcdHdoaWxlICghbGlzdF9lbXB0eShcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcykpIHtcbiA1Njk6XHRcdFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XG4gNTcwOlx0XG4gNTcxOlx0XHRcdHZlcnRleCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMsIHR5cGVvZigqdmVydGV4KSwgZW50cnkpO1xuIDU3MjpcdFx0XHRjeWNsaWNfc2NjcyAmIzQzOz0gX191bml4X3dhbGtfc2NjKHZlcnRleCwgXHUwMDI2bGFzdF9pbmRleCwgaGl0bGlzdCk7XG4gNTczOlx0XHR9XG4gNTc0Olx0XG4gNTc1Olx0XHRsaXN0X3JlcGxhY2VfaW5pdChcdTAwMjZ1bml4X3Zpc2l0ZWRfdmVydGljZXMsIFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzKTtcbiA1NzY6XHRcdHN3YXAodW5peF92ZXJ0ZXhfdW52aXNpdGVkX2luZGV4LCB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4KTtcbiA1Nzc6XHRcbiA1Nzg6XHRcdFdSSVRFX09OQ0UodW5peF9ncmFwaF9jeWNsaWNfc2NjcywgY3ljbGljX3NjY3MpO1xuIDU3OTpcdFx0V1JJVEVfT05DRSh1bml4X2dyYXBoX3N0YXRlLFxuIDU4MDpcdFx0XHQgICBjeWNsaWNfc2NjcyA/IFVOSVhfR1JBUEhfQ1lDTElDIDogVU5JWF9HUkFQSF9OT1RfQ1lDTElDKTtcbiA1ODE6XHR9XG4gNTgyOlx0XG4gNTgzOlx0c3RhdGljIHZvaWQgdW5peF93YWxrX3NjY19mYXN0KHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXG4gNTg0Olx0e1xuIDU4NTpcdFx0dW5zaWduZWQgbG9uZyBjeWNsaWNfc2NjcyA9IHVuaXhfZ3JhcGhfY3ljbGljX3NjY3M7XG4gNTg2Olx0XG4gNTg3Olx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpKSB7XG4gNTg4Olx0XHRcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4O1xuIDU4OTpcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkIHNjYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM0NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgYHVuaXhfd2Fsa19zY2NfZmFzdGAgd29ya3MsIGFuZCB0byBkbyB0aGF0LCBJIG5lZWQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFNvLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpczoKCioqR3JhYmJpbmcgdGhlIEJpZyBQaWN0dXJlOiBgdW5peF93YWxrX3NjY19mYXN0YCoqCgpJIG5lZWQgdG8gc2VlIHRoZSAqcmVzdCogb2YgdGhlIGZ1bmN0aW9uLiAgSSBjYW4mIzM5O3QgdHJ1bHkgYW5hbHl6ZSBgdW5peF93YWxrX3NjY19mYXN0YCBpbiBpc29sYXRpb24uIFVuZGVyc3RhbmRpbmcgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGJyb2FkZXIgY29kZSBhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBvdmVyYWxsIGFsZ29yaXRobSBpcyBjcml0aWNhbC4gV2hhdCYjMzk7cyBpdCBjYWxsaW5nPyBXaGF0IGNhbGxzIGl0PyBXaGF0JiMzOTtzIGl0cyBnb2FsIGluIHRoZSBsYXJnZXIgc2NoZW1lIG9mIHRoaW5ncz8gVGhlIG90aGVyIGxpbmVzIG9mIGNvZGUgd2lsbCBvZmZlciB0aGUgaW1wb3J0YW50IGNvbnRleHQgSSBuZWVkIHRvIGdhaW4gZXhwZXJ0aXNlIG9uIHRoaXMgZnVuY3Rpb24uIFRoaXMgaXMgaG93IEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIGl0cyBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L2dhcmJhZ2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTgwOlx0XHRcdCAgIGN5Y2xpY19zY2NzID8gVU5JWF9HUkFQSF9DWUNMSUMgOiBVTklYX0dSQVBIX05PVF9DWUNMSUMpO1xuIDU4MTpcdH1cbiA1ODI6XHRcbiA1ODM6XHRzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjX2Zhc3Qoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcbiA1ODQ6XHR7XG4gNTg1Olx0XHR1bnNpZ25lZCBsb25nIGN5Y2xpY19zY2NzID0gdW5peF9ncmFwaF9jeWNsaWNfc2NjcztcbiA1ODY6XHRcbiA1ODc6XHRcdHdoaWxlICghbGlzdF9lbXB0eShcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcykpIHtcbiA1ODg6XHRcdFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XG4gNTg5Olx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgc2NjO1xuIDU5MDpcdFxuIDU5MTpcdFx0XHR2ZXJ0ZXggPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzLCB0eXBlb2YoKnZlcnRleCksIGVudHJ5KTtcbiA1OTI6XHRcdFx0bGlzdF9hZGQoXHUwMDI2c2NjLCBcdTAwMjZ2ZXJ0ZXgtXHUwMDNlc2NjX2VudHJ5KTtcbiA1OTM6XHRcbiA1OTQ6XHRcdFx0aWYgKHVuaXhfc2NjX2RlYWQoXHUwMDI2c2NjKSkge1xuIDU5NTpcdFx0XHRcdGN5Y2xpY19zY2NzLS07XG4gNTk2Olx0XHRcdFx0dW5peF9jb2xsZWN0X3NrYihcdTAwMjZzY2MsIGhpdGxpc3QpO1xuIDU5NzpcdFx0XHR9XG4gNTk4Olx0XG4gNTk5Olx0XHRcdGxpc3RfZGVsKFx1MDAyNnNjYyk7XG4gNjAwOlx0XHR9XG4gNjAxOlx0XG4gNjAyOlx0XHRsaXN0X3JlcGxhY2VfaW5pdChcdTAwMjZ1bml4X3Zpc2l0ZWRfdmVydGljZXMsIFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzKTtcbiA2MDM6XHRcbiA2MDQ6XHRcdFdSSVRFX09OQ0UodW5peF9ncmFwaF9jeWNsaWNfc2NjcywgY3ljbGljX3NjY3MpO1xuIDYwNTpcdFx0V1JJVEVfT05DRSh1bml4X2dyYXBoX3N0YXRlLFxuIDYwNjpcdFx0XHQgICBjeWNsaWNfc2NjcyA/IFVOSVhfR1JBUEhfQ1lDTElDIDogVU5JWF9HUkFQSF9OT1RfQ1lDTElDKTtcbiA2MDc6XHR9XG4gNjA4Olx0XG4gNjA5Olx0c3RhdGljIHZvaWQgdW5peF9nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gNjEwOlx0e1xuIDYxMTpcdFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBoaXRsaXN0O1xuIDYxMjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA2MTM6XHRcbiA2MTQ6XHRcdFdSSVRFX09OQ0UoZ2NfaW5fcHJvZ3Jlc3MsIHRydWUpO1xuIDYxNTpcdFxuIDYxNjpcdFx0c3Bpbl9sb2NrKFx1MDAyNnVuaXhfZ2NfbG9jayk7XG4gNjE3Olx0XG4gNjE4Olx0XHRpZiAodW5peF9ncmFwaF9zdGF0ZSA9PSBVTklYX0dSQVBIX05PVF9DWUNMSUMpIHtcbiA2MTk6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2dW5peF9nY19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE4NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgaWYgdGhleSBhcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb21taXQgSGlzdG9yeSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGlzIHBhcnRpY3VsYXIgY29tbWl0LiBNeSBmaXJzdCBpbmNsaW5hdGlvbiBpcyBhbHdheXMgdG8gZGl2ZSBpbnRvIHRoZSBgZ2l0IGxvZ2AuIElmIHRoZSBlbnZpcm9ubWVudCBhbGxvd3MgaXQsIEkmIzM5O2xsIGV4ZWN1dGUgYGdpdCBsb2dgIHRvIGdldCBhIGZ1bGwgdmlldyBvZiB0aGUgY29tbWl0IGhpc3RvcnksIG1heWJlIGZpbHRlcmluZyBpdCBpZiB0aGVyZSYjMzk7cyBhIGxvdCBvZiBub2lzZS4gSWYgYGdpdCBsb2dgIGlzbiYjMzk7dCBpbW1lZGlhdGVseSBhY2Nlc3NpYmxlLCBvciBJJiMzOTttIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBzcGVjaWZpYyBxdWlja2x5LCBJJiMzOTtsbCB0dXJuIHRvIGEgZ3JlcHBlciBvciBzaW1pbGFyIHRvb2wgdG8gc2VhcmNoIHRoZSBsb2cgb3V0cHV0LiBBbHRlcm5hdGl2ZWx5LCBpZiBJICpjYW4qIHJ1biBgZ2l0IGxvZ2Agb24gdGhpcyBzcGVjaWZpYyBjb21taXQgSSB3aWxsOyB0aGlzIG1pZ2h0IGJlIHRoZSBxdWlja2VzdCByb3V0ZS4gSSBjYW4gYWxzbyBjaGVjayB0aGUgY29tbWl0IG1lc3NhZ2UgZGlyZWN0bHkuIFVuZGVyc3RhbmRpbmcgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUgaXMgY3J1Y2lhbC4gVGhpcyBoZWxwcyBtZSBnZXQgYSBoYW5kbGUgb24gd2hhdCBtaWdodCBoYXZlIGJlZW4gaW50ZW5kZWQgYnkgdGhlIGF1dGhvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4L2dhcmJhZ2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9nYXJiYWdlLmM9Mzc0PXN0YXRpYyBMSVNUX0hFQUQodW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcbm5ldC91bml4L2dhcmJhZ2UuYzozNzU6c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX01BUksyO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTM3Ni1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9NDUzPXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdW5peF93YWxrX3NjYyhzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleCxcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNTA1LVx0XHRcdHZlcnRleC1cdTAwM2VzY2NfaW5kZXggPSBtaW4odmVydGV4LVx1MDAzZXNjY19pbmRleCwgbmV4dF92ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4KTtcbm5ldC91bml4L2dhcmJhZ2UuYzo1MDY6XHRcdH0gZWxzZSBpZiAobmV4dF92ZXJ0ZXgtXHUwMDNlaW5kZXggIT0gdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCkge1xubmV0L3VuaXgvZ2FyYmFnZS5jLTUwNy1cdFx0XHQvKiBMb29wIGRldGVjdGVkIGJ5IGEgYmFjay9jcm9zcyBlZGdlLlxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYy01MzEtXHRcdFx0LyogTWFyayB2ZXJ0ZXggYXMgb2ZmLXN0YWNrIGFuZCBhc3NpZ24gYSB1bmlxdWUgSUQuICovXG5uZXQvdW5peC9nYXJiYWdlLmM6NTMyOlx0XHRcdHYtXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xubmV0L3VuaXgvZ2FyYmFnZS5jLTUzMy1cdFx0XHR2LVx1MDAzZXNjY19pbmRleCA9IHZlcnRleC1cdTAwM2VzY2NfaW5kZXg7XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jPTU1OD1zdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjKHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTU3NS1cdGxpc3RfcmVwbGFjZV9pbml0KFx1MDAyNnVuaXhfdmlzaXRlZF92ZXJ0aWNlcywgXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpO1xubmV0L3VuaXgvZ2FyYmFnZS5jOjU3NjpcdHN3YXAodW5peF92ZXJ0ZXhfdW52aXNpdGVkX2luZGV4LCB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4KTtcbm5ldC91bml4L2dhcmJhZ2UuYy01NzctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVW5peCBTb2NrZXQgR2FyYmFnZSBDb2xsZWN0aW9uIE9wdGltaXphdGlvbiBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgaXQgc2VlbXMgbGlrZSBhIGNoYW5nZSB3YXMgbWFkZSBpbiBgZ2FyYmFnZS5jYCB0aGF0IG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBUYXJqYW4mIzM5O3MgU3Ryb25nbHkgQ29ubmVjdGVkIENvbXBvbmVudHMgKFNDQykgYWxnb3JpdGhtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIFVuaXggc29ja2V0IGdhcmJhZ2UgY29sbGVjdGlvbi4gIFByZXZpb3VzbHksIGB1bml4X3NjY19kZWFkKClgIGhhbmRsZWQgbWFya2luZyBub2RlcyBpbiBhbiBTQ0MgYXMgJiMzNDtvZmYtc3RhY2smIzM0OyBieSBzZXR0aW5nIHRoZWlyIGBpbmRleGAgZmllbGQuIE5vdywgdGhhdCYjMzk7cyBiZWVuIG1vdmVkLiAgSW5zdGVhZCBvZiBgdW5peF9zY2NfZGVhZGAsIHdlIG5vdyBoYXZlIGBfX3VuaXhfd2Fsa19zY2MoKWAgc2V0dGluZyBgdi0mZ3Q7aW5kZXhgIGFuZCBgdi0mZ3Q7c2NjX2luZGV4YCAqYmVmb3JlKiBjYWxsaW5nIGB1bml4X3NjY19kZWFkKClgLCB3aXRoaW4gdGhlIGxvb3AgaXRlcmF0aW5nIHRocm91Z2ggU0NDIG1lbWJlcnMuICBgdW5peF93YWxrX3NjY19mYXN0KClgIGp1c3QgY2FsbHMgYHVuaXhfc2NjX2RlYWQoKWAuCgpUaGUgaW1wb3J0YW50IHBvaW50IGlzICp3aHkqIHRoaXMgY2hhbmdlLiBJdCBzZWVtcyB0aGUgcHJpb3IgbWV0aG9kIGhhZCBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBtaXNzZWQgYXNzaWdubWVudCBvZiBgc2NjX2luZGV4YC4gIFRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBoYWQgYSBwcm9ibGVtIHJlbGF0ZWQgdG8gd2hlbiBhIG5vZGUgd2FzIHBhcnQgb2YgYW4gU0NDIGFuZCB0aGF0IFNDQyBoYWQgYWxyZWFkeSBiZWVuIGZpbmFsaXplZCBhbmQgcG9wcGVkIG9mZiB0aGUgc3RhY2ssIGFuZCB0aGUgYXNzb2NpYXRlZCBpbmRleCB2YWx1ZSB3YXNuJiMzOTt0IGFzc2lnbmVkIGNvcnJlY3RseS4gTm93LCBzZXR0aW5nIGB2LSZndDtzY2NfaW5kZXggPSB2ZXJ0ZXgtJmd0O3NjY19pbmRleGAgZXhwbGljaXRseSBhc3NpZ25zIHRoZSBTQ0MgKnJvb3QmIzM5O3MqIGluZGV4IHRvIGFsbCB2ZXJ0aWNlcywgd2hpY2ggZW5zdXJlcyBjb25zaXN0ZW5jeSBhbmQgYXZvaWRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvdGhlciBpbmRpY2VzLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgYG1peGVkX2xvd3BvaW50YCB0ZXN0IGluIGBzY21fcmlnaHRzLmNgLiAgU28sIHRoaXMgb3B0aW1pemF0aW9uIGFwcGVhcnMgdG8gYmUgZml4aW5nIGEgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgY3JpdGljYWwsIGJ1ZyB0aGF0IGNvdWxkIGxlYWQgdG8gbWlzaWRlbnRpZmljYXRpb24gb2YgU0NDcyBhbmQsIGNvbnNlcXVlbnRseSwgaW5jb3JyZWN0IGdhcmJhZ2UgY29sbGVjdGlvbi4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGNoYW5nZSByZXF1aXJlIGEgS01TQU4gY2hlY2s/IExldCYjMzk7cyByZWZyZXNoIHRoZSBydWxlczogS01TQU4gaXMgZm9yIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAqc3BlY2lmaWNhbGx5KiBpbiB0aGUga2VybmVsIGFuZCBwcmV2ZW50aW5nIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLiAgV2Ugb25seSBuZWVkIGl0IGlmIHRoZSBjb2RlIGNoYW5nZXMgdG91Y2ggYXJlYXMgd2hlcmUgc3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiwgTE9DS0RFUCwgb3Igb3RoZXIgZGVidWdnZXJzIHdvbiYjMzk7dCBjYXRjaCB0aGUgcHJvYmxlbS4KClRoZSBydWxlcyBzcGVjaWZ5IHRoYXQgd2Ugc2hvdWxkIHNldCBgTmVlZHNLTVNBTj10cnVlYCBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBjaGFuZ2VzIHRvIGtlcm5lbCBzdHJ1Y3R1cmVzICpzZW50IHRvIHVzZXIgc3BhY2UqLCBjb25kaXRpb25hbCBsb2dpYyBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHRoZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGxlYWRpbmcgdG8gdW5pbml0aWFsaXplZCByZWFkcyBsYXRlciwgb3IgdGhlIHdheXMgYm91bmRzIGNoZWNrcy9sZW5ndGhzIGFyZSBwZXJmb3JtZWQgcG90ZW50aWFsbHkgbGVhZGluZyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuCgpDb252ZXJzZWx5LCBpZiB0aGUgcGF0Y2ggcHJpbWFyaWx5IGludm9sdmVzIHRoaW5ncyBhbHJlYWR5IGhhbmRsZWQgYnkgS0FTQU4vTE9DS0RFUCwgb3IgaWYgYW55IHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCwgdGhlbiBgTmVlZHNLTVNBTj1mYWxzZWAuCgpMZXQmIzM5O3MgYXBwbHkgdGhlc2UgcnVsZXMgdG8gdGhpcyBwYXRjaC4KCjEuICoqRG9lcyB0aGlzIHBhdGNoIHRvdWNoIGFueXRoaW5nIGNvcGllZCB0byB1c2Vyc3BhY2U/KiogTm8uIEl0JiMzOTtzIGNvbmZpbmVkIHRvIHRoZSBVbml4IHNvY2tldCBnYXJiYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtLiAgVGhpcyBpcyBhIGdvb2Qgc2lnbi4KMi4gKipEb2VzIGl0IGludHJvZHVjZSBvciB0b3VjaCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBBIG5ldyBsb29wIGl0ZXJhdG9yLCBgdmAsIGlzIGludHJvZHVjZWQuIEhvd2V2ZXIsIGB2YCBpcyBwb3B1bGF0ZWQgYnkgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZWAsIHNvIGl0JiMzOTtzIGluaXRpYWxpemVkIGR1cmluZyBpdGVyYXRpb24uIFRoZW4sIHRoZSBwYXRjaCB3cml0ZXMgdGhlIGZpZWxkcyBgaW5kZXhgIGFuZCBgc2NjX2luZGV4YC4gVGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyBhYm91dCB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCB1bml4X3ZlcnRleGAuCgpTbywgdGhlIGNyaXRpY2FsIGNoZWNrIGlzIG9uIHRoZSBmaWVsZHMgYGluZGV4YCBhbmQgYHNjY19pbmRleGAsIGFuZCB0aGUgYHN0cnVjdCB1bml4X3ZlcnRleGAgaXRzZWxmLiBJJiMzOTttIHJlYXNvbmFibHkgY29uZmlkZW50IGluIHRoaXMgY2FzZSB0aGF0IHRoZSBgc3RydWN0IHVuaXhfdmVydGV4YCBpcyBhbGxvY2F0ZWQgYW5kICppbml0aWFsaXplZCogZWxzZXdoZXJlIGJlY2F1c2Ugd2UmIzM5O3JlIGxvb2tpbmcgYXQgZ2FyYmFnZSBjb2xsZWN0aW9uLCBhbmQgdGhlc2Ugc3RydWN0dXJlcyBhcmUgKm1hbmFnZWQqIGFuZCBtb2RpZmllZCwgbm90IGNyZWF0ZWQgd2hvbGVzYWxlIGluIHRoaXMgY29kZS4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGNoYW5nZSBwcmltYXJpbHkgaW52b2x2ZXMgY29ycmVjdGx5IHVwZGF0aW5nIGV4aXN0aW5nIHN0cnVjdHVyZXMgd2l0aGluIGFuIFNDQywgYW5kIGRvZXNuJiMzOTt0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgKipJIHdvdWxkIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guKiogIEl0JiMzOTtzIGxpa2VseSB0aGF0IGFueSBpc3N1ZXMgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyBkdWUgdG8gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlIGFuZCB0aGUgZXhpc3RpbmcgbGlmZWN5Y2xlIG9mIHRoZXNlIHZlcnRleCBzdHJ1Y3R1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1bml4X3ZlcnRleCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4L2dhcmJhZ2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9nYXJiYWdlLmMtNzYtXG5uZXQvdW5peC9nYXJiYWdlLmM6Nzc6c3RydWN0IHVuaXhfdmVydGV4IHtcbm5ldC91bml4L2dhcmJhZ2UuYy03OC1cdHN0cnVjdCBsaXN0X2hlYWQgZWRnZXM7XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jPTkzPXN0cnVjdCB1bml4X3NvY2sgKnVuaXhfZ2V0X3NvY2tldChzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMTEyLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjExMzpzdGF0aWMgc3RydWN0IHVuaXhfdmVydGV4ICp1bml4X2VkZ2Vfc3VjY2Vzc29yKHN0cnVjdCB1bml4X2VkZ2UgKmVkZ2UpXG5uZXQvdW5peC9nYXJiYWdlLmMtMTE0LXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9MTMwPXN0YXRpYyB1bnNpZ25lZCBjaGFyIHVuaXhfZ3JhcGhfc3RhdGU7XG5uZXQvdW5peC9nYXJiYWdlLmMtMTMxLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjEzMjpzdGF0aWMgdm9pZCB1bml4X3VwZGF0ZV9ncmFwaChzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleClcbm5ldC91bml4L2dhcmJhZ2UuYy0xMzMte1xuLS1cbm5ldC91bml4L2dhcmJhZ2UuYz0xNDM9c3RhdGljIExJU1RfSEVBRCh1bml4X3VudmlzaXRlZF92ZXJ0aWNlcyk7XG5uZXQvdW5peC9nYXJiYWdlLmMtMTQ0LVxubmV0L3VuaXgvZ2FyYmFnZS5jOjE0NTplbnVtIHVuaXhfdmVydGV4X2luZGV4IHtcbm5ldC91bml4L2dhcmJhZ2UuYy0xNDYtXHRVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMSxcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMTUwLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjE1MTpzdGF0aWMgdW5zaWduZWQgbG9uZyB1bml4X3ZlcnRleF91bnZpc2l0ZWRfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMTtcbm5ldC91bml4L2dhcmJhZ2UuYzoxNTI6c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX1NUQVJUO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTE1My1cbm5ldC91bml4L2dhcmJhZ2UuYz0xNTQ9c3RhdGljIHZvaWQgdW5peF9hZGRfZWRnZShzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbCwgc3RydWN0IHVuaXhfZWRnZSAqZWRnZSlcbm5ldC91bml4L2dhcmJhZ2UuYy0xNTUte1xubmV0L3VuaXgvZ2FyYmFnZS5jOjE1NjpcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4ID0gZWRnZS1cdTAwM2VwcmVkZWNlc3Nvci1cdTAwM2V2ZXJ0ZXg7XG5uZXQvdW5peC9nYXJiYWdlLmMtMTU3LVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYy0xNTktXHRcdHZlcnRleCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2ZnBsLVx1MDAzZXZlcnRpY2VzLCB0eXBlb2YoKnZlcnRleCksIGVudHJ5KTtcbm5ldC91bml4L2dhcmJhZ2UuYzoxNjA6XHRcdHZlcnRleC1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X3VudmlzaXRlZF9pbmRleDtcbm5ldC91bml4L2dhcmJhZ2UuYzoxNjE6XHRcdHZlcnRleC1cdTAwM2VzY2NfaW5kZXggPSAmIzQzOyYjNDM7dW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleDtcbm5ldC91bml4L2dhcmJhZ2UuYy0xNjItXHRcdHZlcnRleC1cdTAwM2VvdXRfZGVncmVlID0gMDtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9MTc2PXN0YXRpYyB2b2lkIHVuaXhfZGVsX2VkZ2Uoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwsIHN0cnVjdCB1bml4X2VkZ2UgKmVkZ2UpXG5uZXQvdW5peC9nYXJiYWdlLmMtMTc3LXtcbm5ldC91bml4L2dhcmJhZ2UuYzoxNzg6XHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleCA9IGVkZ2UtXHUwMDNlcHJlZGVjZXNzb3ItXHUwMDNldmVydGV4O1xubmV0L3VuaXgvZ2FyYmFnZS5jLTE3OS1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9MTkzPXN0YXRpYyB2b2lkIHVuaXhfZnJlZV92ZXJ0aWNlcyhzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbClcbm5ldC91bml4L2dhcmJhZ2UuYy0xOTQte1xubmV0L3VuaXgvZ2FyYmFnZS5jOjE5NTpcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LCAqbmV4dF92ZXJ0ZXg7XG5uZXQvdW5peC9nYXJiYWdlLmMtMTk2LVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYz0yODM9aW50IHVuaXhfcHJlcGFyZV9mcGwoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXG5uZXQvdW5peC9nYXJiYWdlLmMtMjg0LXtcbm5ldC91bml4L2dhcmJhZ2UuYzoyODU6XHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcbm5ldC91bml4L2dhcmJhZ2UuYy0yODYtXHRpbnQgaTtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9MzI1PXZvaWQgdW5peF9wZWVrX2ZwbChzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbClcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMzM0LVxubmV0L3VuaXgvZ2FyYmFnZS5jOjMzNTpcdC8qIEludmFsaWRhdGUgdGhlIGZpbmFsIHJlZmNudCBjaGVjayBpbiB1bml4X3ZlcnRleF9kZWFkKCkuICovXG5uZXQvdW5peC9nYXJiYWdlLmMtMzM2LVx0c3Bpbl9sb2NrKFx1MDAyNnVuaXhfcGVla19sb2NrKTtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMzQwLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjM0MTpzdGF0aWMgYm9vbCB1bml4X3ZlcnRleF9kZWFkKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4KVxubmV0L3VuaXgvZ2FyYmFnZS5jLTM0Mi17XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTM0Ny1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZWRnZSwgXHUwMDI2dmVydGV4LVx1MDAzZWVkZ2VzLCB2ZXJ0ZXhfZW50cnkpIHtcbm5ldC91bml4L2dhcmJhZ2UuYzozNDg6XHRcdHN0cnVjdCB1bml4X3ZlcnRleCAqbmV4dF92ZXJ0ZXggPSB1bml4X2VkZ2Vfc3VjY2Vzc29yKGVkZ2UpO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTM0OS1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9Mzc0PXN0YXRpYyBMSVNUX0hFQUQodW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcbm5ldC91bml4L2dhcmJhZ2UuYzozNzU6c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX01BUksyO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTM3Ni1cbm5ldC91bml4L2dhcmJhZ2UuYz0zNzc9c3RhdGljIGJvb2wgdW5peF9zY2NfZGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpzY2MpXG5uZXQvdW5peC9nYXJiYWdlLmMtMzc4LXtcbm5ldC91bml4L2dhcmJhZ2UuYzozNzk6XHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcbm5ldC91bml4L2dhcmJhZ2UuYy0zODAtXHRib29sIHNjY19kZWFkID0gdHJ1ZTtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMzg5LVx0XHRpZiAoc2NjX2RlYWQpXG5uZXQvdW5peC9nYXJiYWdlLmM6MzkwOlx0XHRcdHNjY19kZWFkID0gdW5peF92ZXJ0ZXhfZGVhZCh2ZXJ0ZXgpO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTM5MS1cdH1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9NDAwPXN0YXRpYyB2b2lkIHVuaXhfY29sbGVjdF9za2Ioc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxubmV0L3VuaXgvZ2FyYmFnZS5jLTQwMS17XG5uZXQvdW5peC9nYXJiYWdlLmM6NDAyOlx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XG5uZXQvdW5peC9nYXJiYWdlLmMtNDAzLVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYz00MzM9c3RhdGljIGJvb2wgdW5peF9zY2NfY3ljbGljKHN0cnVjdCBsaXN0X2hlYWQgKnNjYylcbm5ldC91bml4L2dhcmJhZ2UuYy00MzQte1xubmV0L3VuaXgvZ2FyYmFnZS5jOjQzNTpcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4O1xubmV0L3VuaXgvZ2FyYmFnZS5jLTQzNi1cdHN0cnVjdCB1bml4X2VkZ2UgKmVkZ2U7XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ1Mi1cbm5ldC91bml4L2dhcmJhZ2UuYzo0NTM6c3RhdGljIHVuc2lnbmVkIGxvbmcgX191bml4X3dhbGtfc2NjKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ1NC1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9pbmRleCxcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNDc0LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShlZGdlLCBcdTAwMjZ2ZXJ0ZXgtXHUwMDNlZWRnZXMsIHZlcnRleF9lbnRyeSkge1xubmV0L3VuaXgvZ2FyYmFnZS5jOjQ3NTpcdFx0c3RydWN0IHVuaXhfdmVydGV4ICpuZXh0X3ZlcnRleCA9IHVuaXhfZWRnZV9zdWNjZXNzb3IoZWRnZSk7XG5uZXQvdW5peC9nYXJiYWdlLmMtNDc2LVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYy00NzktXG5uZXQvdW5peC9nYXJiYWdlLmM6NDgwOlx0XHRpZiAobmV4dF92ZXJ0ZXgtXHUwMDNlaW5kZXggPT0gdW5peF92ZXJ0ZXhfdW52aXNpdGVkX2luZGV4KSB7XG5uZXQvdW5peC9nYXJiYWdlLmMtNDgxLVx0XHRcdC8qIEl0ZXJhdGl2ZSBkZWVwZW5pbmcgZGVwdGggZmlyc3Qgc2VhcmNoXG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTUwNS1cdFx0XHR2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4ID0gbWluKHZlcnRleC1cdTAwM2VzY2NfaW5kZXgsIG5leHRfdmVydGV4LVx1MDAzZXNjY19pbmRleCk7XG5uZXQvdW5peC9nYXJiYWdlLmM6NTA2Olx0XHR9IGVsc2UgaWYgKG5leHRfdmVydGV4LVx1MDAzZWluZGV4ICE9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXgpIHtcbm5ldC91bml4L2dhcmJhZ2UuYy01MDctXHRcdFx0LyogTG9vcCBkZXRlY3RlZCBieSBhIGJhY2svY3Jvc3MgZWRnZS5cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNTE5LVx0aWYgKHZlcnRleC1cdTAwM2VpbmRleCA9PSB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4KSB7XG5uZXQvdW5peC9nYXJiYWdlLmM6NTIwOlx0XHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnY7XG5uZXQvdW5peC9nYXJiYWdlLmMtNTIxLVx0XHRzdHJ1Y3QgbGlzdF9oZWFkIHNjYztcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNTMxLVx0XHRcdC8qIE1hcmsgdmVydGV4IGFzIG9mZi1zdGFjayBhbmQgYXNzaWduIGEgdW5pcXVlIElELiAqL1xubmV0L3VuaXgvZ2FyYmFnZS5jOjUzMjpcdFx0XHR2LVx1MDAzZWluZGV4ID0gdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleDtcbm5ldC91bml4L2dhcmJhZ2UuYy01MzMtXHRcdFx0di1cdTAwM2VzY2NfaW5kZXggPSB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4O1xuLS1cbm5ldC91bml4L2dhcmJhZ2UuYy01MzgtXHRcdH0gZWxzZSB7XG5uZXQvdW5peC9nYXJiYWdlLmM6NTM5Olx0XHRcdGlmICh1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4IFx1MDAzYyB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4KVxubmV0L3VuaXgvZ2FyYmFnZS5jOjU0MDpcdFx0XHRcdHVuaXhfdmVydGV4X21heF9zY2NfaW5kZXggPSB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4O1xubmV0L3VuaXgvZ2FyYmFnZS5jLTU0MS1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9NTU4PXN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2Moc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNTYyLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjU2MzpcdHVuaXhfdmVydGV4X21heF9zY2NfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9TVEFSVDtcbm5ldC91bml4L2dhcmJhZ2UuYy01NjQtXG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTU2OC1cdHdoaWxlICghbGlzdF9lbXB0eShcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcykpIHtcbm5ldC91bml4L2dhcmJhZ2UuYzo1Njk6XHRcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4O1xubmV0L3VuaXgvZ2FyYmFnZS5jLTU3MC1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNTc1LVx0bGlzdF9yZXBsYWNlX2luaXQoXHUwMDI2dW5peF92aXNpdGVkX3ZlcnRpY2VzLCBcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcyk7XG5uZXQvdW5peC9nYXJiYWdlLmM6NTc2Olx0c3dhcCh1bml4X3ZlcnRleF91bnZpc2l0ZWRfaW5kZXgsIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXgpO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTU3Ny1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9NTgzPXN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2NfZmFzdChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYy01ODctXHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpKSB7XG5uZXQvdW5peC9nYXJiYWdlLmM6NTg4Olx0XHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcbm5ldC91bml4L2dhcmJhZ2UuYy01ODktXHRcdHN0cnVjdCBsaXN0X2hlYWQgc2NjO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQzOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBgbmV0L3VuaXhgIEdhcmJhZ2UgQ29sbGVjdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYHVuaXhfcHJlcGFyZV9mcGxgIGhhbmRsZXMgaXRzIHZlcnRleCBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgYG5ldC91bml4L2dhcmJhZ2UuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byByZWNhbGwgKmhvdyogdGhlIGB1bml4X3ZlcnRleGAgc3RydWN0IGdldHMgYWxsb2NhdGVkLCBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCBpbnZvbHZlcyBga3phbGxvY2AsIGBrY2FsbG9jYCwgb3IgcG9zc2libHkganVzdCBga21hbGxvY2AsIGRlcGVuZGluZyBvbiBjZXJ0YWluIGNvbmRpdGlvbnMuCgpUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBsaW5lcyAyODAgdGhyb3VnaCAzMTAgaW4gYG5ldC91bml4L2dhcmJhZ2UuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGV4YWN0IGFsbG9jYXRpb24gbG9naWMgYW5kIHJlbWluZCBtZSBvZiBhbnkgbnVhbmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBvZiB0aG9zZSB1bml4IGRvbWFpbiBzb2NrZXRzLiBJdCYjMzk7cyB0aW1lIHRvIHJlZnJlc2ggdGhlIHNwZWNpZmljcyBvbiBob3cgdGhpcyBwYXJ0IGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3VuaXgvZ2FyYmFnZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODA6XHRcdH1cbiAyODE6XHR9XG4gMjgyOlx0XG4gMjgzOlx0aW50IHVuaXhfcHJlcGFyZV9mcGwoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXG4gMjg0Olx0e1xuIDI4NTpcdFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XG4gMjg2Olx0XHRpbnQgaTtcbiAyODc6XHRcbiAyODg6XHRcdGlmICghZnBsLVx1MDAzZWNvdW50X3VuaXgpXG4gMjg5Olx0XHRcdHJldHVybiAwO1xuIDI5MDpcdFxuIDI5MTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZnBsLVx1MDAzZWNvdW50X3VuaXg7IGkmIzQzOyYjNDM7KSB7XG4gMjkyOlx0XHRcdHZlcnRleCA9IGttYWxsb2Nfb2JqKCp2ZXJ0ZXgpO1xuIDI5MzpcdFx0XHRpZiAoIXZlcnRleClcbiAyOTQ6XHRcdFx0XHRnb3RvIGVycjtcbiAyOTU6XHRcbiAyOTY6XHRcdFx0bGlzdF9hZGQoXHUwMDI2dmVydGV4LVx1MDAzZWVudHJ5LCBcdTAwMjZmcGwtXHUwMDNldmVydGljZXMpO1xuIDI5NzpcdFx0fVxuIDI5ODpcdFxuIDI5OTpcdFx0ZnBsLVx1MDAzZWVkZ2VzID0ga3ZtYWxsb2Nfb2JqcygqZnBsLVx1MDAzZWVkZ2VzLCBmcGwtXHUwMDNlY291bnRfdW5peCxcbiAzMDA6XHRcdFx0XHRcdCAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gMzAxOlx0XHRpZiAoIWZwbC1cdTAwM2VlZGdlcylcbiAzMDI6XHRcdFx0Z290byBlcnI7XG4gMzAzOlx0XG4gMzA0Olx0XHR1bml4X3NjaGVkdWxlX2djKGZwbC1cdTAwM2V1c2VyKTtcbiAzMDU6XHRcbiAzMDY6XHRcdHJldHVybiAwO1xuIDMwNzpcdFxuIDMwODpcdGVycjpcbiAzMDk6XHRcdHVuaXhfZnJlZV92ZXJ0aWNlcyhmcGwpO1xuIDMxMDpcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzExOlx0fVxuIDMxMjpcdFxuIDMxMzpcdHZvaWQgdW5peF9kZXN0cm95X2ZwbChzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbClcbiAzMTQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTgwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgVmVydGV4IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGhvdyB0aGVzZSBgdmVydGV4YCBmaWVsZHMgYXJlIGdldHRpbmcgaW5pdGlhbGl6ZWQuIExldCYjMzk7cyBzdGFydCB3aXRoIGB1bml4X2FkZF9lZGdlYCwgc291bmRzIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIGxvb2sgZm9yIGVkZ2UgY3JlYXRpb24sIGFuZCBieSBleHRlbnNpb24sIHBvdGVudGlhbGx5IHZlcnRleCBzZXR1cC4gQWxyaWdodCwgbGV0JiMzOTtzIHpvb20gaW4gb24gbGluZXMgMTUwIHRocm91Z2ggMTgwLiBUaGF0JiMzOTtzIGEgZm9jdXNlZCByYW5nZTsgaG9wZWZ1bGx5LCBpdCBjb250YWlucyB0aGUganVpY3kgYml0cyBvZiBpbml0aWFsaXphdGlvbiBvciBhdCBsZWFzdCBwb2ludHMgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4gVGltZSB0byByZWFkIGFuZCBzZWUgd2hhdCB3ZSBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L2dhcmJhZ2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUwOlx0XG4gMTUxOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfdW52aXNpdGVkX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfTUFSSzE7XG4gMTUyOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX1NUQVJUO1xuIDE1MzpcdFxuIDE1NDpcdHN0YXRpYyB2b2lkIHVuaXhfYWRkX2VkZ2Uoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwsIHN0cnVjdCB1bml4X2VkZ2UgKmVkZ2UpXG4gMTU1Olx0e1xuIDE1NjpcdFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXggPSBlZGdlLVx1MDAzZXByZWRlY2Vzc29yLVx1MDAzZXZlcnRleDtcbiAxNTc6XHRcbiAxNTg6XHRcdGlmICghdmVydGV4KSB7XG4gMTU5Olx0XHRcdHZlcnRleCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2ZnBsLVx1MDAzZXZlcnRpY2VzLCB0eXBlb2YoKnZlcnRleCksIGVudHJ5KTtcbiAxNjA6XHRcdFx0dmVydGV4LVx1MDAzZWluZGV4ID0gdW5peF92ZXJ0ZXhfdW52aXNpdGVkX2luZGV4O1xuIDE2MTpcdFx0XHR2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4ID0gJiM0MzsmIzQzO3VuaXhfdmVydGV4X21heF9zY2NfaW5kZXg7XG4gMTYyOlx0XHRcdHZlcnRleC1cdTAwM2VvdXRfZGVncmVlID0gMDtcbiAxNjM6XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dmVydGV4LVx1MDAzZWVkZ2VzKTtcbiAxNjQ6XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dmVydGV4LVx1MDAzZXNjY19lbnRyeSk7XG4gMTY1Olx0XG4gMTY2Olx0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNnZlcnRleC1cdTAwM2VlbnRyeSwgXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpO1xuIDE2NzpcdFx0XHRlZGdlLVx1MDAzZXByZWRlY2Vzc29yLVx1MDAzZXZlcnRleCA9IHZlcnRleDtcbiAxNjg6XHRcdH1cbiAxNjk6XHRcbiAxNzA6XHRcdHZlcnRleC1cdTAwM2VvdXRfZGVncmVlJiM0MzsmIzQzOztcbiAxNzE6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZWRnZS1cdTAwM2V2ZXJ0ZXhfZW50cnksIFx1MDAyNnZlcnRleC1cdTAwM2VlZGdlcyk7XG4gMTcyOlx0XG4gMTczOlx0XHR1bml4X3VwZGF0ZV9ncmFwaCh1bml4X2VkZ2Vfc3VjY2Vzc29yKGVkZ2UpKTtcbiAxNzQ6XHR9XG4gMTc1Olx0XG4gMTc2Olx0c3RhdGljIHZvaWQgdW5peF9kZWxfZWRnZShzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbCwgc3RydWN0IHVuaXhfZWRnZSAqZWRnZSlcbiAxNzc6XHR7XG4gMTc4Olx0XHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleCA9IGVkZ2UtXHUwMDNlcHJlZGVjZXNzb3ItXHUwMDNldmVydGV4O1xuIDE3OTpcdFxuIDE4MDpcdFx0aWYgKCFmcGwtXHUwMDNlZGVhZClcbiAxODE6XHRcdFx0dW5peF91cGRhdGVfZ3JhcGgodW5peF9lZGdlX3N1Y2Nlc3NvcihlZGdlKSk7XG4gMTgyOlx0XG4gMTgzOlx0XHRsaXN0X2RlbChcdTAwMjZlZGdlLVx1MDAzZXZlcnRleF9lbnRyeSk7XG4gMTg0Olx0XHR2ZXJ0ZXgtXHUwMDNlb3V0X2RlZ3JlZS0tO1xuIDE4NTpcdFxuIDE4NjpcdFx0aWYgKCF2ZXJ0ZXgtXHUwMDNlb3V0X2RlZ3JlZSkge1xuIDE4NzpcdFx0XHRlZGdlLVx1MDAzZXByZWRlY2Vzc29yLVx1MDAzZXZlcnRleCA9IE5VTEw7XG4gMTg4Olx0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNnZlcnRleC1cdTAwM2VlbnRyeSwgXHUwMDI2ZnBsLVx1MDAzZXZlcnRpY2VzKTtcbiAxODk6XHRcdFx0bGlzdF9kZWwoXHUwMDI2dmVydGV4LVx1MDAzZXNjY19lbnRyeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDM0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBzdHJ1Y3QgdW5peF92ZXJ0ZXhgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc3RydWN0IHVuaXhfdmVydGV4YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZGlzc2VjdCBpdHMgbWVtYmVycyB0byB1bmRlcnN0YW5kIGhvdyBpdCByZXByZXNlbnRzIGEgdmVydGV4IGluIHRoaXMgVW5peC1iYXNlZCBzeXN0ZW0sIGxpa2VseSB3aXRoaW4gYSBncmFwaCBzdHJ1Y3R1cmUsIG9yIHBvc3NpYmx5IHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gbWV0YWRhdGEgcmVwcmVzZW50YXRpb24uIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaXRzIGNvbm5lY3Rpb25zLCBpZiBhbnkuIEkgYW50aWNpcGF0ZSBmaWVsZHMgdGhhdCBlbmNvZGUgdGhpbmdzIGxpa2UgaW5vZGUgbnVtYmVycywgZGV2aWNlIGlkZW50aWZpZXJzLCBwb3RlbnRpYWxseSBmaWxlIHBlcm1pc3Npb25zIG9yIGFjY2VzcyB0aW1lcyAoaWYgdGhpcyBwZXJ0YWlucyB0byBhIGZpbGUgc3lzdGVtIGdyYXBoKSwgYW5kIG1heWJlIGV2ZW4gbmV0d29yayBhZGRyZXNzZXMgaWYgdGhpcyBzeXN0ZW0gaW50ZWdyYXRlcyBuZXR3b3JrIHNlcnZpY2VzLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbjoKCiogICAqKkNvbm5lY3Rpdml0eSoqOiBEb2VzIHRoaXMgc3RydWN0dXJlIGRpcmVjdGx5IGhvbGQgcG9pbnRlcnMgb3IgaW5kaWNlcyB0byBhZGphY2VudCB2ZXJ0aWNlcywgYWxsb3dpbmcgZ3JhcGggdHJhdmVyc2FsPwoqICAgKipBdHRyaWJ1dGVzKio6IFdoYXQgbWV0YWRhdGEgaXMgc3RvcmVkPyBJcyBpdCBiYXNpYywgbGlrZSBpbm9kZSBhbmQgZGV2aWNlIG51bWJlcnMsIG9yIGFyZSB0aGVyZSByaWNoZXIgYXR0cmlidXRlcz8KKiAgICoqUHVycG9zZSoqOiBXaGF0IGlzIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbT8gSXMgaXQgZXhjbHVzaXZlbHkgZm9yIHRoZSBmaWxlIHN5c3RlbSwgb3IgZG9lcyBpdCByZXByZXNlbnQgb3RoZXIga2luZHMgb2YgVW5peCByZXNvdXJjZXMgKHByb2Nlc3NlcywgbmV0d29yayBlbmRwb2ludHMsIGV0Yy4pPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBoaW50cyBpbiB0aGUgY29udGV4dCB3aGVyZSBgdW5peF92ZXJ0ZXhgIGlzIGRlY2xhcmVkIGFuZCB1c2VkLgoqICAgKipPcHRpbWl6YXRpb24qKjogV2hhdCBhcmUgdGhlIGRlc2lnbiBjaG9pY2VzPyBBbnkgYml0ZmllbGRzLCBhbGlnbm1lbnQgc3RyYXRlZ2llcywgb3IgcG90ZW50aWFsIGZvciBjYWNoaW5nL2xhenkgbG9hZGluZz8KClRoaXMgaW5mb3JtYXRpb24gd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBgdW5peF92ZXJ0ZXhgIHJlcHJlc2VudHMgYSBjb21wb25lbnQgb2YgdGhlIHN5c3RlbSBpdCBkZXNjcmliZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3VuaXgvZ2FyYmFnZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3MDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gIDcxOlx0I2luY2x1ZGUgXHUwMDNjbmV0L2FmX3VuaXguaFx1MDAzZVxuICA3MjpcdCNpbmNsdWRlIFx1MDAzY25ldC9zY20uaFx1MDAzZVxuICA3MzpcdCNpbmNsdWRlIFx1MDAzY25ldC90Y3Bfc3RhdGVzLmhcdTAwM2VcbiAgNzQ6XHRcbiAgNzU6XHQjaW5jbHVkZSBcJiMzNDthZl91bml4LmhcJiMzNDtcbiAgNzY6XHRcbiAgNzc6XHRzdHJ1Y3QgdW5peF92ZXJ0ZXgge1xuICA3ODpcdFx0c3RydWN0IGxpc3RfaGVhZCBlZGdlcztcbiAgNzk6XHRcdHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7XG4gIDgwOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkIHNjY19lbnRyeTtcbiAgODE6XHRcdHVuc2lnbmVkIGxvbmcgb3V0X2RlZ3JlZTtcbiAgODI6XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4gIDgzOlx0XHR1bnNpZ25lZCBsb25nIHNjY19pbmRleDtcbiAgODQ6XHR9O1xuICA4NTpcdFxuICA4NjpcdHN0cnVjdCB1bml4X2VkZ2Uge1xuICA4NzpcdFx0c3RydWN0IHVuaXhfc29jayAqcHJlZGVjZXNzb3I7XG4gIDg4Olx0XHRzdHJ1Y3QgdW5peF9zb2NrICpzdWNjZXNzb3I7XG4gIDg5Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIHZlcnRleF9lbnRyeTtcbiAgOTA6XHRcdHN0cnVjdCBsaXN0X2hlYWQgc3RhY2tfZW50cnk7XG4gIDkxOlx0fTtcbiAgOTI6XHRcbiAgOTM6XHRzdHJ1Y3QgdW5peF9zb2NrICp1bml4X2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKmZpbHApXG4gIDk0Olx0e1xuICA5NTpcdFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XG4gIDk2Olx0XG4gIDk3Olx0XHQvKiBTb2NrZXQgPyAqL1xuICA5ODpcdFx0aWYgKFNfSVNTT0NLKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2ICEoZmlscC1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1BBVEgpKSB7XG4gIDk5Olx0XHRcdHN0cnVjdCBzb2NrZXQgKnNvY2sgPSBTT0NLRVRfSShpbm9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Nzg3CgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDk3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBBRl9VTklYIEdhcmJhZ2UgQ29sbGVjdGlvbiBPcHRpbWl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBmb2N1c2VzIG9uIG9wdGltaXppbmcgdGhlIEFGX1VOSVggZ2FyYmFnZSBjb2xsZWN0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC91bml4L2dhcmJhZ2UuY2AuIEkgc2VlIHRoZXkmIzM5O3JlIG1vdmluZyB0aGUgYXNzaWdubWVudCBvZiBgaW5kZXhgIChtYXJraW5nIHZlcnRpY2VzIGFzIG9mZi1zdGFjaykgYW5kIHRoZSB1cGRhdGUgb2YgYHNjY19pbmRleGAgZnJvbSB0aGUgYHVuaXhfc2NjX2RlYWQoKWAgZnVuY3Rpb24gaW50byBgX191bml4X3dhbGtfc2NjKClgLiBUaGV5JiMzOTt2ZSBhbHNvIHJlbW92ZWQgdGhlIGBmYXN0YCBwYXJhbWV0ZXIgZnJvbSBgdW5peF9zY2NfZGVhZCgpYCBhbmQgYWRkZWQgYSBzZWxmdGVzdC4gVGhpcyBjbGVhcmx5IGFpbXMgdG8gc3RyZWFtbGluZSB0aGUgc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudCAoU0NDKSBwcm9jZXNzaW5nLgoKTXkgZmlyc3QgY2hlY2sgaXMgYWx3YXlzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEkgY29uZmlybSB0aGF0IGFsbCB0aGUgZmllbGRzIG9mIGB1bml4X3ZlcnRleGAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYHVuaXhfYWRkX2VkZ2VgOiBgZWRnZXNgLCBgZW50cnlgLCBgc2NjX2VudHJ5YCwgYG91dF9kZWdyZWVgLCBgaW5kZXhgLCBhbmQgYHNjY19pbmRleGAuIFRoZSBjcnVjaWFsIGNoYW5nZSBpcyB0aGF0IHRoZSBhc3NpZ25tZW50IG9mIGBpbmRleGAgYW5kIGBzY2NfaW5kZXhgIHRvIHRoZSB2ZXJ0aWNlcyB3aXRoaW4gYW4gU0NDIGlzIG5vdyBkb25lIGRpcmVjdGx5IHdpdGhpbiB0aGUgbGlzdCB0cmF2ZXJzYWwgaW4gYF9fdW5peF93YWxrX3NjY2AuIEkmIzM5O20gdmVyaWZ5aW5nIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbm90aW5nIHRoYXQgdGhlIGxvb3AgdmFyaWFibGUgYHZgIGlzIGNvcnJlY3RseSBhIGxvb3AgdmFyaWFibGUgb3ZlciB0aGUgbGlzdCwgYW5kIHRoYXQgYHYtJmd0O2luZGV4YCBhbmQgYHYtJmd0O3NjY19pbmRleGAgYXJlIHRoZW4gYXNzaWduZWQga25vd24sIGluaXRpYWxpemVkIHZhbHVlcy4gVGhlIHJlbW92YWwgb2YgdGhlIGBmYXN0YCBhcmd1bWVudCBmcm9tIGB1bml4X3NjY19kZWFkKClgIGxvb2tzIGxpa2UgYSBjbGVhbi11cCwgcmVtb3ZpbmcgZGVhZCBjb2RlIOKAkyBubyBpbW1lZGlhdGUgcmVkIGZsYWdzIHRoZXJlLgoKTmV4dCwgSSBhc3Nlc3MgZm9yIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gSSByZWNvZ25pemUgdGhhdCBhbnkgZ3JhcGggdHJhdmVyc2FsIGJ1Z3Mgb3IgbGlzdCBjb3JydXB0aW9uIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBsaXN0IGRlYnVnZ2luZy4gU2luY2UgS01TQU4gZm9jdXNlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgdGhpcyBpc24mIzM5O3QgbXkgcHJpbWFyeSBjb25jZXJuIGhlcmUsIGdpdmVuIHRoZSBleGlzdGluZyBwcm90ZWN0aW9uLgoKTm93LCBsZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgTmVlZHNLTVNBTiBjcml0ZXJpYToKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZT8gTm9wZS4gTm8gZGF0YSB0cmFuc2Zlci4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBCb3RoIGBpbmRleGAgYW5kIGBzY2NfaW5kZXhgIGFyZSB3ZWxsLWluaXRpYWxpemVkIHN0cnVjdCBtZW1iZXJzLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcyByZWFkIGxhdGVyPyBOb3BlLiBObyBkYXRhIHN0cnVjdHVyZSBsYXlvdXQgY2hhbmdlcywgYW5kIG5vIG5ldyBhbGxvY2F0aW9ucy4KNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGJ5dGVzIGJlaW5nIGFjY2Vzc2VkPyBOb3BlLiBObyBidWZmZXJzLCBsZW5ndGhzLCBvciBzaXplcyBhZmZlY3RlZC4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuCgpJJiMzOTttIGNvbmZpZGVudCBpbiBjb25jbHVkaW5nIHRoYXQgS01TQU4gaXNuJiMzOTt0IHdhcnJhbnRlZCBoZXJlLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGNoYW5nZXMgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdGlvbi4gSXQgb3B0aW1pemVzIHRoZSBwcm9jZXNzIGJ5IG1vdmluZyB0aGUgdXBkYXRlcyBvZiBgaW5kZXhgIGFuZCBgc2NjX2luZGV4YCBpbnRvIGBfX3VuaXhfd2Fsa19zY2MoKWAsIHNpbXBsaWZpZXMgdGhlIGNvZGUgYnkgcmVtb3ZpbmcgdGhlIG5vdy11bm5lY2Vzc2FyeSBgZmFzdGAgcGFyYW1ldGVyIGZyb20gYHVuaXhfc2NjX2RlYWQoKWAsIGFuZCBhZGRzIGEgbmV3IHRlc3QuIFRoaXMgZG9lc24mIzM5O3QgaW52b2x2ZSBhbnkgb2YgdGhlIGNsYXNzaWMgS01TQU4gcGl0ZmFsbHM6IG5vIHVuaW5pdGlhbGl6ZWQgYWxsb2NhdGlvbnMsIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSwgbm8gdHJhbnNmZXIgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29uZGl0aW9uYWwgcmVhZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBleGlzdGluZyBrZXJuZWwgZGVidWdnZXJzIGFyZSBtb3JlIHRoYW4gYWRlcXVhdGUgdG8gaGFuZGxlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyBhcmlzaW5nIGZyb20gZ3JhcGggdHJhdmVyc2FsLCBsaXN0IGNvcnJ1cHRpb24sIG9yIHNpbWlsYXIgYnVncy4gVGhlcmUmIzM5O3Mgbm8ganVzdGlmaWNhdGlvbiBmb3IgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBBRl9VTklYIGdhcmJhZ2UgY29sbGVjdG9yJiMzOTtzIFRhcmphbiBTdHJvbmdseSBDb25uZWN0ZWQgQ29tcG9uZW50IChTQ0MpIGFsZ29yaXRobSBpbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gSXQgbW92ZXMgdGhlIG9mZi1zdGFjayBtYXJraW5nIChgdi1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXhgKSBhbmQgU0NDIElEIGFzc2lnbm1lbnQgKGB2LVx1MDAzZXNjY19pbmRleCA9IHZlcnRleC1cdTAwM2VzY2NfaW5kZXhgKSBmb3IgU0NDIHZlcnRpY2VzIGZyb20gYHVuaXhfc2NjX2RlYWQoKWAgaW50byBgX191bml4X3dhbGtfc2NjKClgLCBzaW1wbGlmaWVzIGB1bml4X3NjY19kZWFkKClgIGJ5IHJlbW92aW5nIHRoZSBgZmFzdGAgcGFyYW1ldGVyLCBhbmQgYWRkcyBhIHJlZ3Jlc3Npb24gdGVzdCBpbiBrc2VsZnRlc3RzLlxuXG5UaGlzIGNoYW5nZSB0b3VjaGVzIHB1cmVseSBpbnRlcm5hbCBncmFwaCBib29ra2VlcGluZyBmaWVsZHMgb24gYHN0cnVjdCB1bml4X3ZlcnRleGAgb2JqZWN0cyB0aGF0IGFyZSBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgYW55IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZ3JhcGggdHJhdmVyc2FsLCBsaXN0IG1hbmlwdWxhdGlvbiwgb3Igc29ja2V0IGxpZmV0aW1lcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb25zKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIGZhY2lsaXRpZXMgKGUuZy4sIENPTkZJR19ERUJVR19MSVNUKS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBBRl9VTklYIGdhcmJhZ2UgY29sbGVjdG9yJiMzOTtzIFRhcmphbiBTdHJvbmdseSBDb25uZWN0ZWQgQ29tcG9uZW50IChTQ0MpIGFsZ29yaXRobSBpbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gSXQgbW92ZXMgdGhlIG9mZi1zdGFjayBtYXJraW5nIChgdi1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXhgKSBhbmQgU0NDIElEIGFzc2lnbm1lbnQgKGB2LVx1MDAzZXNjY19pbmRleCA9IHZlcnRleC1cdTAwM2VzY2NfaW5kZXhgKSBmb3IgU0NDIHZlcnRpY2VzIGZyb20gYHVuaXhfc2NjX2RlYWQoKWAgaW50byBgX191bml4X3dhbGtfc2NjKClgLCBzaW1wbGlmaWVzIGB1bml4X3NjY19kZWFkKClgIGJ5IHJlbW92aW5nIHRoZSBgZmFzdGAgcGFyYW1ldGVyLCBhbmQgYWRkcyBhIHJlZ3Jlc3Npb24gdGVzdCBpbiBrc2VsZnRlc3RzLlxuXG5UaGlzIGNoYW5nZSB0b3VjaGVzIHB1cmVseSBpbnRlcm5hbCBncmFwaCBib29ra2VlcGluZyBmaWVsZHMgb24gYHN0cnVjdCB1bml4X3ZlcnRleGAgb2JqZWN0cyB0aGF0IGFyZSBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgYW55IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZ3JhcGggdHJhdmVyc2FsLCBsaXN0IG1hbmlwdWxhdGlvbiwgb3Igc29ja2V0IGxpZmV0aW1lcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb25zKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIGZhY2lsaXRpZXMgKGUuZy4sIENPTkZJR19ERUJVR19MSVNUKS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDowOS4xNDAwNzgzMTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njk2NTM5NzU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191bml4X3dhbGtfc2NjXCIsXG4gICAgXCJ1bml4X3NjY19kZWFkXCIsXG4gICAgXCJ1bml4X3dhbGtfc2NjX2Zhc3RcIixcbiAgICBcInVuaXhfd2Fsa19zY2NcIixcbiAgICBcInVuaXhfZ2NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgQUZfVU5JWCBnYXJiYWdlIGNvbGxlY3RvcidzIFRhcmphbiBTdHJvbmdseSBDb25uZWN0ZWQgQ29tcG9uZW50IChTQ0MpIGFsZ29yaXRobSBpbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gSXQgbW92ZXMgdGhlIG9mZi1zdGFjayBtYXJraW5nIChgdi1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4YCkgYW5kIFNDQyBJRCBhc3NpZ25tZW50IChgdi1cXHUwMDNlc2NjX2luZGV4ID0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXhgKSBmb3IgU0NDIHZlcnRpY2VzIGZyb20gYHVuaXhfc2NjX2RlYWQoKWAgaW50byBgX191bml4X3dhbGtfc2NjKClgLCBzaW1wbGlmaWVzIGB1bml4X3NjY19kZWFkKClgIGJ5IHJlbW92aW5nIHRoZSBgZmFzdGAgcGFyYW1ldGVyLCBhbmQgYWRkcyBhIHJlZ3Jlc3Npb24gdGVzdCBpbiBrc2VsZnRlc3RzLlxcblxcblRoaXMgY2hhbmdlIHRvdWNoZXMgcHVyZWx5IGludGVybmFsIGdyYXBoIGJvb2trZWVwaW5nIGZpZWxkcyBvbiBgc3RydWN0IHVuaXhfdmVydGV4YCBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBhbnkgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBncmFwaCB0cmF2ZXJzYWwsIGxpc3QgbWFuaXB1bGF0aW9uLCBvciBzb2NrZXQgbGlmZXRpbWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbnMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgZmFjaWxpdGllcyAoZS5nLiwgQ09ORklHX0RFQlVHX0xJU1QpLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIChTQ0MpIFRhcmphbi1iYXNlZCBjeWNsZSBkZXRlY3Rpb24gYWxnb3JpdGhtIGluIFVOSVggZG9tYWluIHNvY2tldCBnYXJiYWdlIGNvbGxlY3Rpb24gKG5ldC91bml4L2dhcmJhZ2UuYykuIFNwZWNpZmljYWxseSwgaXQgdXBkYXRlcyBfX3VuaXhfd2Fsa19zY2MgdG8gYXNzaWduIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggYW5kIHVwZGF0ZSBzY2NfaW5kZXggYWNyb3NzIHRoZSBlbnRpcmUgU0NDIHByaW9yIHRvIGNhbGxpbmcgdW5peF9zY2NfZGVhZCwgYW5kIHJlbW92ZXMgdGhlIGZhc3QgcGFyYW1ldGVyIGFuZCBvZmYtc3RhY2sgbWFya2luZyBmcm9tIHVuaXhfc2NjX2RlYWQuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIGRpcmVjdGx5IGV4ZXJjaXNlZCB3aGVuIHBhc3NpbmcgZmlsZSBkZXNjcmlwdG9ycyBhY3Jvc3MgVU5JWCBzb2NrZXRzIHZpYSBTQ01fUklHSFRTLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDowOS4xNDAwODI3NjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTI2NTE0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmNDIyNmQwMTZkMGFlZDY0YWM0YWNmNDUyZjA2NWZiMjA1NzFiNjU3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDEyIDA0OjA0OjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC91bml4L2dhcmJhZ2UuYyBiL25ldC91bml4L2dhcmJhZ2UuY1xcbmluZGV4IDlmY2FhZjU1Y2JhNWQuLmRhNzc0ZjU2Y2E2NDggMTAwNjQ0XFxuLS0tIGEvbmV0L3VuaXgvZ2FyYmFnZS5jXFxuKysrIGIvbmV0L3VuaXgvZ2FyYmFnZS5jXFxuQEAgLTM3NCw3ICszNzQsNyBAQCBzdGF0aWMgYm9vbCB1bml4X3ZlcnRleF9kZWFkKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4KVxcbiBzdGF0aWMgTElTVF9IRUFEKHVuaXhfdmlzaXRlZF92ZXJ0aWNlcyk7XFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMjtcXG4gXFxuLXN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBib29sIGZhc3QpXFxuK3N0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjKVxcbiB7XFxuIFxcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4O1xcbiBcXHRib29sIHNjY19kZWFkID0gdHJ1ZTtcXG5AQCAtMzg2LDEwICszODYsNiBAQCBzdGF0aWMgYm9vbCB1bml4X3NjY19kZWFkKHN0cnVjdCBsaXN0X2hlYWQgKnNjYywgYm9vbCBmYXN0KVxcbiBcXHRcXHQvKiBEb24ndCByZXN0YXJ0IERGUyBmcm9tIHRoaXMgdmVydGV4LiAqL1xcbiBcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2dmVydGV4LVxcdTAwM2VlbnRyeSwgXFx1MDAyNnVuaXhfdmlzaXRlZF92ZXJ0aWNlcyk7XFxuIFxcbi1cXHRcXHQvKiBNYXJrIHZlcnRleCBhcyBvZmYtc3RhY2sgZm9yIF9fdW5peF93YWxrX3NjYygpLiAqL1xcbi1cXHRcXHRpZiAoIWZhc3QpXFxuLVxcdFxcdFxcdHZlcnRleC1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xcbi1cXG4gXFx0XFx0aWYgKHNjY19kZWFkKVxcbiBcXHRcXHRcXHRzY2NfZGVhZCA9IHVuaXhfdmVydGV4X2RlYWQodmVydGV4KTtcXG4gXFx0fVxcbkBAIC01MjEsNiArNTE3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX191bml4X3dhbGtfc2NjKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAodmVydGV4LVxcdTAwM2VpbmRleCA9PSB2ZXJ0ZXgtXFx1MDAzZXNjY19pbmRleCkge1xcbitcXHRcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnY7XFxuIFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgc2NjO1xcbiBcXG4gXFx0XFx0LyogU0NDIGZpbmFsaXNlZC5cXG5AQCAtNTMwLDcgKzUyNywxMyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3VuaXhfd2Fsa19zY2Moc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgsXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRfX2xpc3RfY3V0X3Bvc2l0aW9uKFxcdTAwMjZzY2MsIFxcdTAwMjZ2ZXJ0ZXhfc3RhY2ssIFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZXNjY19lbnRyeSk7XFxuIFxcbi1cXHRcXHRpZiAodW5peF9zY2NfZGVhZChcXHUwMDI2c2NjLCBmYWxzZSkpIHtcXG4rXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHYsIFxcdTAwMjZzY2MsIHNjY19lbnRyeSkge1xcbitcXHRcXHRcXHQvKiBNYXJrIHZlcnRleCBhcyBvZmYtc3RhY2sgYW5kIGFzc2lnbiBhIHVuaXF1ZSBJRC4gKi9cXG4rXFx0XFx0XFx0di1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xcbitcXHRcXHRcXHR2LVxcdTAwM2VzY2NfaW5kZXggPSB2ZXJ0ZXgtXFx1MDAzZXNjY19pbmRleDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHVuaXhfc2NjX2RlYWQoXFx1MDAyNnNjYykpIHtcXG4gXFx0XFx0XFx0dW5peF9jb2xsZWN0X3NrYihcXHUwMDI2c2NjLCBoaXRsaXN0KTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0aWYgKHVuaXhfdmVydGV4X21heF9zY2NfaW5kZXggXFx1MDAzYyB2ZXJ0ZXgtXFx1MDAzZXNjY19pbmRleClcXG5AQCAtNTg4LDcgKzU5MSw3IEBAIHN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2NfZmFzdChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxcbiBcXHRcXHR2ZXJ0ZXggPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcywgdHlwZW9mKCp2ZXJ0ZXgpLCBlbnRyeSk7XFxuIFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZzY2MsIFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZXNjY19lbnRyeSk7XFxuIFxcbi1cXHRcXHRpZiAodW5peF9zY2NfZGVhZChcXHUwMDI2c2NjLCB0cnVlKSkge1xcbitcXHRcXHRpZiAodW5peF9zY2NfZGVhZChcXHUwMDI2c2NjKSkge1xcbiBcXHRcXHRcXHRjeWNsaWNfc2Njcy0tO1xcbiBcXHRcXHRcXHR1bml4X2NvbGxlY3Rfc2tiKFxcdTAwMjZzY2MsIGhpdGxpc3QpO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuY1xcbmluZGV4IGQ4MmE3OWMyMWMxNzkuLmMxNjVmMjUwMjIwYTQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jXFxuQEAgLTM3OCw0ICszNzgsMjEgQEAgVEVTVF9GKHNjbV9yaWdodHMsIGJhY2t0cmFja19mcm9tX3NjYylcXG4gXFx0Y2xvc2Vfc29ja2V0cygxMCk7XFxuIH1cXG4gXFxuK1RFU1RfRihzY21fcmlnaHRzLCBtaXhlZF9sb3dwb2ludClcXG4re1xcbitcXHRjcmVhdGVfc29ja2V0cyg2KTtcXG4rXFxuK1xcdHNlbmRfZmQoMCwgMSk7XFxuK1xcdHNlbmRfZmQoMSwgMik7XFxuK1xcdHNlbmRfZmQoMiwgMSk7XFxuK1xcdHNlbmRfZmQoMSwgMCk7XFxuK1xcbitcXHRzZW5kX2ZkKDMsIDQpO1xcbitcXHRzZW5kX2ZkKDQsIDUpO1xcbitcXHRzZW5kX2ZkKDUsIDQpO1xcbitcXHRzZW5kX2ZkKDQsIDMpO1xcbitcXG4rXFx0Y2xvc2Vfc29ja2V0cyg2KTtcXG4rfVxcbitcXG4gVEVTVF9IQVJORVNTX01BSU5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6MTAuNzUzMjg0NzE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MDQ3ODY3NDU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191bml4X3dhbGtfc2NjXCIsXG4gICAgXCJ1bml4X3NjY19kZWFkXCIsXG4gICAgXCJ1bml4X3dhbGtfc2NjX2Zhc3RcIixcbiAgICBcInVuaXhfd2Fsa19zY2NcIixcbiAgICBcInVuaXhfZ2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudHMgKFNDQykgVGFyamFuLWJhc2VkIGN5Y2xlIGRldGVjdGlvbiBhbGdvcml0aG0gaW4gVU5JWCBkb21haW4gc29ja2V0IGdhcmJhZ2UgY29sbGVjdGlvbiAobmV0L3VuaXgvZ2FyYmFnZS5jKS4gU3BlY2lmaWNhbGx5LCBpdCB1cGRhdGVzIF9fdW5peF93YWxrX3NjYyB0byBhc3NpZ24gdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCBhbmQgdXBkYXRlIHNjY19pbmRleCBhY3Jvc3MgdGhlIGVudGlyZSBTQ0MgcHJpb3IgdG8gY2FsbGluZyB1bml4X3NjY19kZWFkLCBhbmQgcmVtb3ZlcyB0aGUgZmFzdCBwYXJhbWV0ZXIgYW5kIG9mZi1zdGFjayBtYXJraW5nIGZyb20gdW5peF9zY2NfZGVhZC4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgZGlyZWN0bHkgZXhlcmNpc2VkIHdoZW4gcGFzc2luZyBmaWxlIGRlc2NyaXB0b3JzIGFjcm9zcyBVTklYIHNvY2tldHMgdmlhIFNDTV9SSUdIVFMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjQyMjZkMDE2ZDBhZWQ2NGFjNGFjZjQ1MmYwNjVmYjIwNTcxYjY1N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDA0OjA0OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvZ2FyYmFnZS5jIGIvbmV0L3VuaXgvZ2FyYmFnZS5jXG5pbmRleCA5ZmNhYWY1NWNiYTVkLi5kYTc3NGY1NmNhNjQ4IDEwMDY0NFxuLS0tIGEvbmV0L3VuaXgvZ2FyYmFnZS5jXG4rKysgYi9uZXQvdW5peC9nYXJiYWdlLmNcbkBAIC0zNzQsNyArMzc0LDcgQEAgc3RhdGljIGJvb2wgdW5peF92ZXJ0ZXhfZGVhZChzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleClcbiBzdGF0aWMgTElTVF9IRUFEKHVuaXhfdmlzaXRlZF92ZXJ0aWNlcyk7XG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX01BUksyO1xuIFxuLXN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBib29sIGZhc3QpXG4rc3RhdGljIGJvb2wgdW5peF9zY2NfZGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpzY2MpXG4ge1xuIFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XG4gXHRib29sIHNjY19kZWFkID0gdHJ1ZTtcbkBAIC0zODYsMTAgKzM4Niw2IEBAIHN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBib29sIGZhc3QpXG4gXHRcdC8qIERvbid0IHJlc3RhcnQgREZTIGZyb20gdGhpcyB2ZXJ0ZXguICovXG4gXHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNnZlcnRleC1cdTAwM2VlbnRyeSwgXHUwMDI2dW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcbiBcbi1cdFx0LyogTWFyayB2ZXJ0ZXggYXMgb2ZmLXN0YWNrIGZvciBfX3VuaXhfd2Fsa19zY2MoKS4gKi9cbi1cdFx0aWYgKCFmYXN0KVxuLVx0XHRcdHZlcnRleC1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXg7XG4tXG4gXHRcdGlmIChzY2NfZGVhZClcbiBcdFx0XHRzY2NfZGVhZCA9IHVuaXhfdmVydGV4X2RlYWQodmVydGV4KTtcbiBcdH1cbkBAIC01MjEsNiArNTE3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX191bml4X3dhbGtfc2NjKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LFxuIFx0fVxuIFxuIFx0aWYgKHZlcnRleC1cdTAwM2VpbmRleCA9PSB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4KSB7XG4rXHRcdHN0cnVjdCB1bml4X3ZlcnRleCAqdjtcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCBzY2M7XG4gXG4gXHRcdC8qIFNDQyBmaW5hbGlzZWQuXG5AQCAtNTMwLDcgKzUyNywxMyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3VuaXhfd2Fsa19zY2Moc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgsXG4gXHRcdCAqL1xuIFx0XHRfX2xpc3RfY3V0X3Bvc2l0aW9uKFx1MDAyNnNjYywgXHUwMDI2dmVydGV4X3N0YWNrLCBcdTAwMjZ2ZXJ0ZXgtXHUwMDNlc2NjX2VudHJ5KTtcbiBcbi1cdFx0aWYgKHVuaXhfc2NjX2RlYWQoXHUwMDI2c2NjLCBmYWxzZSkpIHtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHYsIFx1MDAyNnNjYywgc2NjX2VudHJ5KSB7XG4rXHRcdFx0LyogTWFyayB2ZXJ0ZXggYXMgb2ZmLXN0YWNrIGFuZCBhc3NpZ24gYSB1bmlxdWUgSUQuICovXG4rXHRcdFx0di1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXg7XG4rXHRcdFx0di1cdTAwM2VzY2NfaW5kZXggPSB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4O1xuK1x0XHR9XG4rXG4rXHRcdGlmICh1bml4X3NjY19kZWFkKFx1MDAyNnNjYykpIHtcbiBcdFx0XHR1bml4X2NvbGxlY3Rfc2tiKFx1MDAyNnNjYywgaGl0bGlzdCk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0aWYgKHVuaXhfdmVydGV4X21heF9zY2NfaW5kZXggXHUwMDNjIHZlcnRleC1cdTAwM2VzY2NfaW5kZXgpXG5AQCAtNTg4LDcgKzU5MSw3IEBAIHN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2NfZmFzdChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxuIFx0XHR2ZXJ0ZXggPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzLCB0eXBlb2YoKnZlcnRleCksIGVudHJ5KTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2c2NjLCBcdTAwMjZ2ZXJ0ZXgtXHUwMDNlc2NjX2VudHJ5KTtcbiBcbi1cdFx0aWYgKHVuaXhfc2NjX2RlYWQoXHUwMDI2c2NjLCB0cnVlKSkge1xuK1x0XHRpZiAodW5peF9zY2NfZGVhZChcdTAwMjZzY2MpKSB7XG4gXHRcdFx0Y3ljbGljX3NjY3MtLTtcbiBcdFx0XHR1bml4X2NvbGxlY3Rfc2tiKFx1MDAyNnNjYywgaGl0bGlzdCk7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmNcbmluZGV4IGQ4MmE3OWMyMWMxNzkuLmMxNjVmMjUwMjIwYTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuY1xuQEAgLTM3OCw0ICszNzgsMjEgQEAgVEVTVF9GKHNjbV9yaWdodHMsIGJhY2t0cmFja19mcm9tX3NjYylcbiBcdGNsb3NlX3NvY2tldHMoMTApO1xuIH1cbiBcbitURVNUX0Yoc2NtX3JpZ2h0cywgbWl4ZWRfbG93cG9pbnQpXG4re1xuK1x0Y3JlYXRlX3NvY2tldHMoNik7XG4rXG4rXHRzZW5kX2ZkKDAsIDEpO1xuK1x0c2VuZF9mZCgxLCAyKTtcbitcdHNlbmRfZmQoMiwgMSk7XG4rXHRzZW5kX2ZkKDEsIDApO1xuK1xuK1x0c2VuZF9mZCgzLCA0KTtcbitcdHNlbmRfZmQoNCwgNSk7XG4rXHRzZW5kX2ZkKDUsIDQpO1xuK1x0c2VuZF9mZCg0LCAzKTtcbitcbitcdGNsb3NlX3NvY2tldHMoNik7XG4rfVxuK1xuIFRFU1RfSEFSTkVTU19NQUlOXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDoxMC43NTMyOTA3MDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0ODg0Mzk2MzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVU5JWCBEb21haW4gU29ja2V0IEdhcmJhZ2UgQ29sbGVjdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gdGhlIGNoYW5nZXMgdG91Y2ggYG5ldC91bml4L2dhcmJhZ2UuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmNgLiBJIGltbWVkaWF0ZWx5IHplcm8gaW4gb24gYG5ldC91bml4L2dhcmJhZ2UuY2AgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcy4gRnJvbSBleHBlcmllbmNlLCBJIGtub3cgdGhpcyBpcyB0aGUgVU5JWCBkb21haW4gc29ja2V0IGdhcmJhZ2UgY29sbGVjdGlvbiBjb2RlLiBTcGVjaWZpY2FsbHksIGl0J3MgVGFyamFuJ3MgYWxnb3JpdGhtLCB1c2VkIHRvIGRldGVjdCBjeWNsaWMgZmlsZSBkZXNjcmlwdG9yIHJlZmVyZW5jZXMgYW5kIGhhbmRsZSBTQ01fUklHSFRTIGdhcmJhZ2UuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBuZXQvdW5peC9nYXJiYWdlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgcGF0Y2guIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGljaCBjb25maWd1cmF0aW9ucyBlbmFibGUgdGhpcyBnYXJiYWdlIGNvbGxlY3Rpb24gYW5kIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIGltcGFjdGVkIG9yIG1vZGlmaWVkLiBXaGF0IGFyZSB0aGUgcmVsZXZhbnQgaG9va3M/IFdoYXQncyB0aGUgaW1wYWN0IG9uIHRoZSBleGlzdGluZyBjeWNsZSBkZXRlY3Rpb24/IElzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjaGFuZ2VzJyBpbXBsaWNhdGlvbnMuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA0OjA0OjE1LjYzNzY4OTQ4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3VuaXgvZ2FyYmFnZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3MDpcXHRcXG4gMzcxOlxcdFxcdHJldHVybiB0cnVlO1xcbiAzNzI6XFx0fVxcbiAzNzM6XFx0XFxuIDM3NDpcXHRzdGF0aWMgTElTVF9IRUFEKHVuaXhfdmlzaXRlZF92ZXJ0aWNlcyk7XFxuIDM3NTpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfTUFSSzI7XFxuIDM3NjpcXHRcXG4gMzc3OlxcdHN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjKVxcbiAzNzg6XFx0e1xcbiAzNzk6XFx0XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XFxuIDM4MDpcXHRcXHRib29sIHNjY19kZWFkID0gdHJ1ZTtcXG4gMzgxOlxcdFxcdHVuc2lnbmVkIGludCBzZXE7XFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdHNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNnVuaXhfcGVla19zZXEpO1xcbiAzODQ6XFx0XFxuIDM4NTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UodmVydGV4LCBzY2MsIHNjY19lbnRyeSkge1xcbiAzODY6XFx0XFx0XFx0LyogRG9uJ3QgcmVzdGFydCBERlMgZnJvbSB0aGlzIHZlcnRleC4gKi9cXG4gMzg3OlxcdFxcdFxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZWVudHJ5LCBcXHUwMDI2dW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcXG4gMzg4OlxcdFxcbiAzODk6XFx0XFx0XFx0aWYgKHNjY19kZWFkKVxcbiAzOTA6XFx0XFx0XFx0XFx0c2NjX2RlYWQgPSB1bml4X3ZlcnRleF9kZWFkKHZlcnRleCk7XFxuIDM5MTpcXHRcXHR9XFxuIDM5MjpcXHRcXG4gMzkzOlxcdFxcdC8qIElmIE1TR19QRUVLIGludGVydmVuZWQsIGRlZmVyIHRoaXMgU0NDIHRvIHRoZSBuZXh0IHJvdW5kLiAqL1xcbiAzOTQ6XFx0XFx0aWYgKHJlYWRfc2VxY291bnRfcmV0cnkoXFx1MDAyNnVuaXhfcGVla19zZXEsIHNlcSkpXFxuIDM5NTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDM5NjpcXHRcXG4gMzk3OlxcdFxcdHJldHVybiBzY2NfZGVhZDtcXG4gMzk4OlxcdH1cXG4gMzk5OlxcdFxcbiA0MDA6XFx0c3RhdGljIHZvaWQgdW5peF9jb2xsZWN0X3NrYihzdHJ1Y3QgbGlzdF9oZWFkICpzY2MsIHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXFxuIDQwMTpcXHR7XFxuIDQwMjpcXHRcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHZlcnRleCwgc2NjLCBzY2NfZW50cnkpIHtcXG4gNDA1OlxcdFxcdFxcdHN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlO1xcbiA0MDY6XFx0XFx0XFx0c3RydWN0IHVuaXhfZWRnZSAqZWRnZTtcXG4gNDA3OlxcdFxcdFxcdHN0cnVjdCB1bml4X3NvY2sgKnU7XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdFxcdGVkZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZWVkZ2VzLCB0eXBlb2YoKmVkZ2UpLCB2ZXJ0ZXhfZW50cnkpO1xcbiA0MTA6XFx0XFx0XFx0dSA9IGVkZ2UtXFx1MDAzZXByZWRlY2Vzc29yO1xcbiA0MTE6XFx0XFx0XFx0cXVldWUgPSBcXHUwMDI2dS1cXHUwMDNlc2suc2tfcmVjZWl2ZV9xdWV1ZTtcXG4gNDEyOlxcdFxcbiA0MTM6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZxdWV1ZS1cXHUwMDNlbG9jayk7XFxuIDQxNDpcXHRcXG4gNDE1OlxcdFxcdFxcdGlmICh1LVxcdTAwM2Vzay5za19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7XFxuIDQxNjpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiA0MTc6XFx0XFxuIDQxODpcXHRcXHRcXHRcXHRza2JfcXVldWVfd2FsayhxdWV1ZSwgc2tiKSB7XFxuIDQxOTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICplbWJyeW9fcXVldWUgPSBcXHUwMDI2c2tiLVxcdTAwM2Vzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6MTUuNjM3NzY3NzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDI2Njg2MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbmV0L3VuaXgvZ2FyYmFnZS5jYCAoTGluZXMgNTAwLTYwMCkqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gbGluZXMgNTAwIHRocm91Z2ggNjAwLiBJIGV4cGVjdCB0aGlzIHNlY3Rpb24gdG8gYmUgaGFuZGxpbmcgY2xlYW51cCBvciBwZXJoYXBzIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gVW5peCBkb21haW4gc29ja2V0cywgZ2l2ZW4gdGhlIGZpbGVuYW1lLiBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgcGF0dGVybnM7IGFyZSB3ZSBkZWFsaW5nIHdpdGggZGVhbGxvY2F0aW9uIG9mIHNvY2tldCBzdHJ1Y3R1cmVzLCByZWZlcmVuY2UgY291bnRpbmcsIGVycm9yIGhhbmRsaW5nLCBvciBwZXJoYXBzIHNvbWUga2luZCBvZiBnYXJiYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIGhlcmUuIEknbGwgYmUgd2F0Y2hpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG9yIGRvdWJsZS1mcmVlcy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVzZSBhcmVhcyBhcmUgb2Z0ZW4gdHJpY2t5IGluIGxvdy1sZXZlbCBuZXR3b3JrIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIGNvbm5lY3Rpb24gc3RhdGVzIGFuZCByZXNvdXJjZSBleGhhdXN0aW9uIHNpdHVhdGlvbnMgZHVyaW5nIHRoZSByZWxlYXNlIG9mIHJlc291cmNlcy4gSeKAmWxsIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgY29kZSBpbnRlcmFjdHMgd2l0aCBhbnkgYXNzb2NpYXRlZCB3b3JrcXVldWVzIG9yIGtlcm5lbCB0aHJlYWRzLiBUaGlzIHNlY3Rpb24gbWlnaHQgaW52b2x2ZSBmcmVlaW5nIGJ1ZmZlcnMsIHJlbGVhc2luZyBsb2NrcywgYW5kIHBvc3NpYmx5IHNpZ25hbGluZyBvdGhlciBwcm9jZXNzZXMuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgY2FsbHMgdG8gbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGZ1bmN0aW9ucywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgYXNzb2NpYXRlZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gSSdtIHRyeWluZyB0byBnZXQgYSBmZWVsIGZvciBob3cgcm9idXN0IGFuZCByZWxpYWJsZSB0aGlzIGNsZWFudXAgcHJvY2VzcyBpczsgSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgbnVhbmNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg5NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6MTguMDY0NDU2MTc5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC91bml4L2dhcmJhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdFxcbiA1MDE6XFx0XFx0XFx0XFx0LyogSWYgdGhlIHN1Y2Nlc3NvciBoYXMgYSBzbWFsbGVyIHNjY19pbmRleCwgdHdvIHZlcnRpY2VzXFxuIDUwMjpcXHRcXHRcXHRcXHQgKiBhcmUgaW4gdGhlIHNhbWUgU0NDLCBzbyBwcm9wYWdhdGUgdGhlIHNtYWxsZXIgc2NjX2luZGV4XFxuIDUwMzpcXHRcXHRcXHRcXHQgKiB0byBza2lwIFNDQyBmaW5hbGlzYXRpb24uXFxuIDUwNDpcXHRcXHRcXHRcXHQgKi9cXG4gNTA1OlxcdFxcdFxcdFxcdHZlcnRleC1cXHUwMDNlc2NjX2luZGV4ID0gbWluKHZlcnRleC1cXHUwMDNlc2NjX2luZGV4LCBuZXh0X3ZlcnRleC1cXHUwMDNlc2NjX2luZGV4KTtcXG4gNTA2OlxcdFxcdFxcdH0gZWxzZSBpZiAobmV4dF92ZXJ0ZXgtXFx1MDAzZWluZGV4ICE9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXgpIHtcXG4gNTA3OlxcdFxcdFxcdFxcdC8qIExvb3AgZGV0ZWN0ZWQgYnkgYSBiYWNrL2Nyb3NzIGVkZ2UuXFxuIDUwODpcXHRcXHRcXHRcXHQgKlxcbiA1MDk6XFx0XFx0XFx0XFx0ICogVGhlIHN1Y2Nlc3NvciBpcyBvbiB2ZXJ0ZXhfc3RhY2ssIHNvIHR3byB2ZXJ0aWNlcyBhcmUgaW5cXG4gNTEwOlxcdFxcdFxcdFxcdCAqIHRoZSBzYW1lIFNDQy4gIElmIHRoZSBzdWNjZXNzb3IgaGFzIGEgc21hbGxlciAqc2NjX2luZGV4KixcXG4gNTExOlxcdFxcdFxcdFxcdCAqIHByb3BhZ2F0ZSBpdCB0byBza2lwIFNDQyBmaW5hbGlzYXRpb24uXFxuIDUxMjpcXHRcXHRcXHRcXHQgKi9cXG4gNTEzOlxcdFxcdFxcdFxcdHZlcnRleC1cXHUwMDNlc2NjX2luZGV4ID0gbWluKHZlcnRleC1cXHUwMDNlc2NjX2luZGV4LCBuZXh0X3ZlcnRleC1cXHUwMDNlc2NjX2luZGV4KTtcXG4gNTE0OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDUxNTpcXHRcXHRcXHRcXHQvKiBUaGUgc3VjY2Vzc29yIHdhcyBhbHJlYWR5IGdyb3VwZWQgYXMgYW5vdGhlciBTQ0MgKi9cXG4gNTE2OlxcdFxcdFxcdH1cXG4gNTE3OlxcdFxcdH1cXG4gNTE4OlxcdFxcbiA1MTk6XFx0XFx0aWYgKHZlcnRleC1cXHUwMDNlaW5kZXggPT0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXgpIHtcXG4gNTIwOlxcdFxcdFxcdHN0cnVjdCB1bml4X3ZlcnRleCAqdjtcXG4gNTIxOlxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgc2NjO1xcbiA1MjI6XFx0XFxuIDUyMzpcXHRcXHRcXHQvKiBTQ0MgZmluYWxpc2VkLlxcbiA1MjQ6XFx0XFx0XFx0ICpcXG4gNTI1OlxcdFxcdFxcdCAqIElmIHRoZSBzY2NfaW5kZXggd2FzIG5vdCB1cGRhdGVkLCBhbGwgdGhlIHZlcnRpY2VzIGFib3ZlIG9uXFxuIDUyNjpcXHRcXHRcXHQgKiB2ZXJ0ZXhfc3RhY2sgYXJlIGluIHRoZSBzYW1lIFNDQy4gIEdyb3VwIHRoZW0gdXNpbmcgc2NjX2VudHJ5LlxcbiA1Mjc6XFx0XFx0XFx0ICovXFxuIDUyODpcXHRcXHRcXHRfX2xpc3RfY3V0X3Bvc2l0aW9uKFxcdTAwMjZzY2MsIFxcdTAwMjZ2ZXJ0ZXhfc3RhY2ssIFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZXNjY19lbnRyeSk7XFxuIDUyOTpcXHRcXG4gNTMwOlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZSh2LCBcXHUwMDI2c2NjLCBzY2NfZW50cnkpIHtcXG4gNTMxOlxcdFxcdFxcdFxcdC8qIE1hcmsgdmVydGV4IGFzIG9mZi1zdGFjayBhbmQgYXNzaWduIGEgdW5pcXVlIElELiAqL1xcbiA1MzI6XFx0XFx0XFx0XFx0di1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xcbiA1MzM6XFx0XFx0XFx0XFx0di1cXHUwMDNlc2NjX2luZGV4ID0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXg7XFxuIDUzNDpcXHRcXHRcXHR9XFxuIDUzNTpcXHRcXG4gNTM2OlxcdFxcdFxcdGlmICh1bml4X3NjY19kZWFkKFxcdTAwMjZzY2MpKSB7XFxuIDUzNzpcXHRcXHRcXHRcXHR1bml4X2NvbGxlY3Rfc2tiKFxcdTAwMjZzY2MsIGhpdGxpc3QpO1xcbiA1Mzg6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNTM5OlxcdFxcdFxcdFxcdGlmICh1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4IFxcdTAwM2MgdmVydGV4LVxcdTAwM2VzY2NfaW5kZXgpXFxuIDU0MDpcXHRcXHRcXHRcXHRcXHR1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4ID0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXg7XFxuIDU0MTpcXHRcXG4gNTQyOlxcdFxcdFxcdFxcdGlmICh1bml4X3NjY19jeWNsaWMoXFx1MDAyNnNjYykpXFxuIDU0MzpcXHRcXHRcXHRcXHRcXHRjeWNsaWNfc2NjcysrO1xcbiA1NDQ6XFx0XFx0XFx0fVxcbiA1NDU6XFx0XFxuIDU0NjpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2c2NjKTtcXG4gNTQ3OlxcdFxcdH1cXG4gNTQ4OlxcdFxcbiA1NDk6XFx0XFx0LyogTmVlZCBiYWNrdHJhY2tpbmcgPyAqL1xcbiA1NTA6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZlZGdlX3N0YWNrKSlcXG4gNTUxOlxcdFxcdFxcdGdvdG8gcHJldl92ZXJ0ZXg7XFxuIDU1MjpcXHRcXG4gNTUzOlxcdFxcdHJldHVybiBjeWNsaWNfc2NjcztcXG4gNTU0OlxcdH1cXG4gNTU1OlxcdFxcbiA1NTY6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF9ncmFwaF9jeWNsaWNfc2NjcztcXG4gNTU3OlxcdFxcbiA1NTg6XFx0c3RhdGljIHZvaWQgdW5peF93YWxrX3NjYyhzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxcbiA1NTk6XFx0e1xcbiA1NjA6XFx0XFx0dW5zaWduZWQgbG9uZyBsYXN0X2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfU1RBUlQ7XFxuIDU2MTpcXHRcXHR1bnNpZ25lZCBsb25nIGN5Y2xpY19zY2NzID0gMDtcXG4gNTYyOlxcdFxcbiA1NjM6XFx0XFx0dW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX1NUQVJUO1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHQvKiBWaXNpdCBldmVyeSB2ZXJ0ZXggZXhhY3RseSBvbmNlLlxcbiA1NjY6XFx0XFx0ICogX191bml4X3dhbGtfc2NjKCkgbW92ZXMgdmlzaXRlZCB2ZXJ0aWNlcyB0byB1bml4X3Zpc2l0ZWRfdmVydGljZXMuXFxuIDU2NzpcXHRcXHQgKi9cXG4gNTY4OlxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShcXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpKSB7XFxuIDU2OTpcXHRcXHRcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcXG4gNTcwOlxcdFxcbiA1NzE6XFx0XFx0XFx0dmVydGV4ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMsIHR5cGVvZigqdmVydGV4KSwgZW50cnkpO1xcbiA1NzI6XFx0XFx0XFx0Y3ljbGljX3NjY3MgKz0gX191bml4X3dhbGtfc2NjKHZlcnRleCwgXFx1MDAyNmxhc3RfaW5kZXgsIGhpdGxpc3QpO1xcbiA1NzM6XFx0XFx0fVxcbiA1NzQ6XFx0XFxuIDU3NTpcXHRcXHRsaXN0X3JlcGxhY2VfaW5pdChcXHUwMDI2dW5peF92aXNpdGVkX3ZlcnRpY2VzLCBcXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpO1xcbiA1NzY6XFx0XFx0c3dhcCh1bml4X3ZlcnRleF91bnZpc2l0ZWRfaW5kZXgsIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXgpO1xcbiA1Nzc6XFx0XFxuIDU3ODpcXHRcXHRXUklURV9PTkNFKHVuaXhfZ3JhcGhfY3ljbGljX3NjY3MsIGN5Y2xpY19zY2NzKTtcXG4gNTc5OlxcdFxcdFdSSVRFX09OQ0UodW5peF9ncmFwaF9zdGF0ZSxcXG4gNTgwOlxcdFxcdFxcdCAgIGN5Y2xpY19zY2NzID8gVU5JWF9HUkFQSF9DWUNMSUMgOiBVTklYX0dSQVBIX05PVF9DWUNMSUMpO1xcbiA1ODE6XFx0fVxcbiA1ODI6XFx0XFxuIDU4MzpcXHRzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjX2Zhc3Qoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcXG4gNTg0OlxcdHtcXG4gNTg1OlxcdFxcdHVuc2lnbmVkIGxvbmcgY3ljbGljX3NjY3MgPSB1bml4X2dyYXBoX2N5Y2xpY19zY2NzO1xcbiA1ODY6XFx0XFxuIDU4NzpcXHRcXHR3aGlsZSAoIWxpc3RfZW1wdHkoXFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzKSkge1xcbiA1ODg6XFx0XFx0XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XFxuIDU4OTpcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIHNjYztcXG4gNTkwOlxcdFxcbiA1OTE6XFx0XFx0XFx0dmVydGV4ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMsIHR5cGVvZigqdmVydGV4KSwgZW50cnkpO1xcbiA1OTI6XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNnNjYywgXFx1MDAyNnZlcnRleC1cXHUwMDNlc2NjX2VudHJ5KTtcXG4gNTkzOlxcdFxcbiA1OTQ6XFx0XFx0XFx0aWYgKHVuaXhfc2NjX2RlYWQoXFx1MDAyNnNjYykpIHtcXG4gNTk1OlxcdFxcdFxcdFxcdGN5Y2xpY19zY2NzLS07XFxuIDU5NjpcXHRcXHRcXHRcXHR1bml4X2NvbGxlY3Rfc2tiKFxcdTAwMjZzY2MsIGhpdGxpc3QpO1xcbiA1OTc6XFx0XFx0XFx0fVxcbiA1OTg6XFx0XFxuIDU5OTpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2c2NjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6MTguMDY0NjE1Mzk5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg1MTI2MDIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgUGF0Y2ggd2l0aCBHaXQgTG9nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBoaXN0b3J5LiBUaGUgYmVzdCB0b29sIGZvciB0aGlzLCBhcyBhbHdheXMsIGlzIGBnaXQgbG9nYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICp3aGF0KiBhbmQgdGhlICp3aHkqIG9mIHRoZSBjaGFuZ2VzLiBJIG5lZWQgdG8gc2VlIHRoZSBjb21taXQgbWVzc2FnZXMsIHRoZSBhdXRob3IsIHRoZSBjb250ZXh0LCBhbmQgcHJlZmVyYWJseSBhIGNsZWFyIG5hcnJhdGl2ZSBvZiB0aGUgZXZvbHV0aW9uIG9mIHRoaXMgY29kZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGF0Y2gg4oCTIHRoZSBwcm9ibGVtIGl0J3Mgc29sdmluZywgdGhlIGRlc2lnbiBjaG9pY2VzIG1hZGUsIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBjb25zaWRlcmVkLiBgZ2l0IGxvZ2Agc2hvdWxkIHByb3ZpZGUgdGhlIGZvdW5kYXRpb24gZm9yIHRoYXQgdW5kZXJzdGFuZGluZy4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgYmVmb3JlIEkgZXZlbiBsb29rIGF0IHRoZSBkaWZmcyBpbiBkZXRhaWw7IHVuZGVyc3RhbmRpbmcgdGhlIHN0b3J5IGhlbHBzIGZyYW1lIHRoZSBpbmRpdmlkdWFsIGNoYW5nZXMuIFRoaXMgaXMgdGhlIGJlc3QgZmlyc3Qgc3RlcCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODAxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDoxOS45MTU4Nzk5MzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxOTMxMTg1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaXhlZF9sb3dwb2ludFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmM9MzYyPVRFU1RfRihzY21fcmlnaHRzLCBiYWNrdHJhY2tfZnJvbV9zY2MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmMtMzgwLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuYzozODE6VEVTVF9GKHNjbV9yaWdodHMsIG1peGVkX2xvd3BvaW50KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuYy0zODIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDoyMi4xMzUyMDQxODRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNzI4NjI4NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR2l0IENvbW1pdCBhbmQgUmVsYXRlZCBDb2RlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGdldCB0aGUgY29udGV4dCBvZiB0aGlzIGNvbW1pdCwgYnV0IEkgZG9uJ3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIGEgc3RhbmRhcmQgYGdpdCBsb2dgLiBIb3dldmVyLCB0aGUgcHJvbXB0IGhlbHBmdWxseSBwcm92aWRlcyB0aGUgYXV0aG9yIGFuZCBsaWtlbHkgc29tZSByZWxldmFudCBpbmZvcm1hdGlvbiDigJMgYEF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VgLiBUaGF0J3MgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgY29udGV4dHVhbGl6aW5nIHRoZSBpc3N1ZSBjcmVhdGVkIGJ5IHRoZSBzeXprYWxsZXIgaGFybmVzcy5cblxuTm93LCBteSBpbml0aWFsIGluc3RpbmN0cyBhcmUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBHaXZlbiB0aGUgYXBwYXJlbnQgZm9jdXMgb24gZ2FyYmFnZSBjb2xsZWN0aW9uLCBteSBpbW1lZGlhdGUgdGFyZ2V0cyBhcmUgYF9fdW5peF93YWxrX3NjY2AgYW5kIGB1bml4X3dhbGtfc2NjYC4gSSdsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGJyb2FkZXIgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbXMsIHBhcnRpY3VsYXJseSBgdW5peF9nY2AuXG5cbk15IGZvY3VzIHdpbGwgdGhlbiBiZSB0byBpZGVudGlmeSBjYWxsZXJzIG9mIGB1bml4X3dhbGtfc2NjYC4gSSdsbCBzcGVjaWZpY2FsbHkgbG9vayBmb3IgdGhlc2Ugd2l0aGluIGBuZXQvdW5peC9nYXJiYWdlLmNgLiBMb2NhdGluZyB0aGUgY2FsbGVycyB3aWxsIHByb3ZpZGUgdmFsdWFibGUgaW5zaWdodHMgaW50byB3aGVyZSBhbmQgaG93IHRoaXMgU0NDIHdhbGsgaXMgYmVpbmcgdXRpbGl6ZWQuIFRoaXMgYXBwcm9hY2ggc2hvdWxkIGhlbHAgbWUgYnVpbGQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBwYXJ0IG9mIGdhcmJhZ2UgY29sbGVjdGlvbiB0aGUgaGFybmVzcyB1bmNvdmVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6MjUuODYzODM1MjQ0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODU0OTEyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bml4X3dhbGtfc2NjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC91bml4L2dhcmJhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdW5peC9nYXJiYWdlLmM9NDMzPXN0YXRpYyBib29sIHVuaXhfc2NjX2N5Y2xpYyhzdHJ1Y3QgbGlzdF9oZWFkICpzY2MpXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNDUyLVxcbm5ldC91bml4L2dhcmJhZ2UuYzo0NTM6c3RhdGljIHVuc2lnbmVkIGxvbmcgX191bml4X3dhbGtfc2NjKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LFxcbm5ldC91bml4L2dhcmJhZ2UuYy00NTQtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpsYXN0X2luZGV4LFxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTU1Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyB1bml4X2dyYXBoX2N5Y2xpY19zY2NzO1xcbm5ldC91bml4L2dhcmJhZ2UuYy01NTctXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjU1ODpzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjKHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTU1OS17XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNTY1LVxcdC8qIFZpc2l0IGV2ZXJ5IHZlcnRleCBleGFjdGx5IG9uY2UuXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjU2NjpcXHQgKiBfX3VuaXhfd2Fsa19zY2MoKSBtb3ZlcyB2aXNpdGVkIHZlcnRpY2VzIHRvIHVuaXhfdmlzaXRlZF92ZXJ0aWNlcy5cXG5uZXQvdW5peC9nYXJiYWdlLmMtNTY3LVxcdCAqL1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTU3MS1cXHRcXHR2ZXJ0ZXggPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcywgdHlwZW9mKCp2ZXJ0ZXgpLCBlbnRyeSk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjU3MjpcXHRcXHRjeWNsaWNfc2NjcyArPSBfX3VuaXhfd2Fsa19zY2ModmVydGV4LCBcXHUwMDI2bGFzdF9pbmRleCwgaGl0bGlzdCk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTU3My1cXHR9XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNTgyLVxcbm5ldC91bml4L2dhcmJhZ2UuYzo1ODM6c3RhdGljIHZvaWQgdW5peF93YWxrX3NjY19mYXN0KHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTU4NC17XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9NjA5PXN0YXRpYyB2b2lkIHVuaXhfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTYyNS1cXHRpZiAodW5peF9ncmFwaF9zdGF0ZSA9PSBVTklYX0dSQVBIX0NZQ0xJQylcXG5uZXQvdW5peC9nYXJiYWdlLmM6NjI2OlxcdFxcdHVuaXhfd2Fsa19zY2NfZmFzdChcXHUwMDI2aGl0bGlzdCk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTYyNy1cXHRlbHNlXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjYyODpcXHRcXHR1bml4X3dhbGtfc2NjKFxcdTAwMjZoaXRsaXN0KTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNjI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDoyNS45NDIzOTE1NzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTk5NTg5MTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFVuaXggU29ja2V0IEdhcmJhZ2UgQ29sbGVjdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gcHJvY2VzcyB3aXRoaW4gdGhlIFVuaXggc29ja2V0IHN1YnN5c3RlbS4gTXkgc3RhcnRpbmcgcG9pbnQgaXMgYHVuaXhfZ2NgLCB3aGljaCBJIGtub3cgaXMgdGhlIGNvcmUgd29ya3F1ZXVlIGZ1bmN0aW9uIGRlZmluZWQgaW4gYG5ldC91bml4L2dhcmJhZ2UuY2AuIE5vdywgdGhlIGtleSBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp0cmlnZ2VyZWQqLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gYHVuaXhfZ2NgIG9yLCBtb3JlIGltcG9ydGFudGx5LCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgKnNjaGVkdWxlZCogdG8gcnVuLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBsb2dpYyBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEyNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA0OjA0OjI3LjkzODI4NDczMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNDIwMDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVuaXhfZ2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3VuaXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC91bml4L2FmX3VuaXguYy0zMy0gKlxcdFxcdFxcdFxcdFxcdG9sZCBhcHBzIGFuZCBpdCB3aWxsIGF2b2lkIGh1Z2UgYW1vdW50XFxubmV0L3VuaXgvYWZfdW5peC5jOjM0OiAqXFx0XFx0XFx0XFx0XFx0b2Ygc29ja3MgaGFzaGVkICh0aGlzIGZvciB1bml4X2djKClcXG5uZXQvdW5peC9hZl91bml4LmMtMzUtICpcXHRcXHRcXHRcXHRcXHRwZXJmb3JtYW5jZXMgcmVhc29ucykuXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNDQtICpcXHRcXHRzdWNoIHNvY2tldCBhbmQgY2xvc2VkIGl0IChkZXNjcmlwdG9yKS4gVGhhdCB3b3VsZCBoYXBwZW4gb25cXG5uZXQvdW5peC9nYXJiYWdlLmM6NDU6ICpcXHRcXHRlYWNoIHVuaXhfZ2MoKSB1bnRpbCB0aGUgYWNjZXB0KCkuIFNpbmNlIHRoZSBzdHJ1Y3QgZmlsZSBpblxcbm5ldC91bml4L2dhcmJhZ2UuYy00Ni0gKlxcdFxcdHF1ZXN0aW9uIHdvdWxkIGdvIHRvIHRoZSBmcmVlIGxpc3QgYW5kIG1pZ2h0IGJlIHJldXNlZC4uLlxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTE5Mz1zdGF0aWMgdm9pZCB1bml4X2ZyZWVfdmVydGljZXMoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtMjAyLVxcbm5ldC91bml4L2dhcmJhZ2UuYzoyMDM6c3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyh1bml4X2djX2xvY2spO1xcbm5ldC91bml4L2dhcmJhZ2UuYy0yMDQtXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTIwNT12b2lkIHVuaXhfYWRkX2VkZ2VzKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsLCBzdHJ1Y3QgdW5peF9zb2NrICpyZWNlaXZlcilcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy0yMDgtXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjIwOTpcXHRzcGluX2xvY2soXFx1MDAyNnVuaXhfZ2NfbG9jayk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTIxMC1cXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy0yMzEtXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjIzMjpcXHRzcGluX3VubG9jayhcXHUwMDI2dW5peF9nY19sb2NrKTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMjMzLVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTIzOT12b2lkIHVuaXhfZGVsX2VkZ2VzKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTI0My1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MjQ0OlxcdHNwaW5fbG9jayhcXHUwMDI2dW5peF9nY19sb2NrKTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMjQ1LVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTI2MS1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MjYyOlxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ1bml4X2djX2xvY2spO1xcbm5ldC91bml4L2dhcmJhZ2UuYy0yNjMtXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9MjY3PXZvaWQgdW5peF91cGRhdGVfZWRnZXMoc3RydWN0IHVuaXhfc29jayAqcmVjZWl2ZXIpXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtMjc1LVxcdH0gZWxzZSB7XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjI3NjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnVuaXhfZ2NfbG9jayk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTI3Ny1cXHRcXHR1bml4X3VwZGF0ZV9ncmFwaCh1bml4X3NrKHJlY2VpdmVyLVxcdTAwM2VsaXN0ZW5lciktXFx1MDAzZXZlcnRleCk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTI3OC1cXHRcXHRyZWNlaXZlci1cXHUwMDNlbGlzdGVuZXIgPSBOVUxMO1xcbm5ldC91bml4L2dhcmJhZ2UuYzoyNzk6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnVuaXhfZ2NfbG9jayk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTI4MC1cXHR9XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9NTgzPXN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2NfZmFzdChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTYwOC1cXG5uZXQvdW5peC9nYXJiYWdlLmM6NjA5OnN0YXRpYyB2b2lkIHVuaXhfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC91bml4L2dhcmJhZ2UuYy02MTAte1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTYxNS1cXG5uZXQvdW5peC9nYXJiYWdlLmM6NjE2OlxcdHNwaW5fbG9jayhcXHUwMDI2dW5peF9nY19sb2NrKTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNjE3LVxcbm5ldC91bml4L2dhcmJhZ2UuYy02MTgtXFx0aWYgKHVuaXhfZ3JhcGhfc3RhdGUgPT0gVU5JWF9HUkFQSF9OT1RfQ1lDTElDKSB7XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjYxOTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dW5peF9nY19sb2NrKTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNjIwLVxcdFxcdGdvdG8gc2tpcF9nYztcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy02MjktXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjYzMDpcXHRzcGluX3VubG9jayhcXHUwMDI2dW5peF9nY19sb2NrKTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNjMxLVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTY0MS1cXG5uZXQvdW5peC9nYXJiYWdlLmM6NjQyOnN0YXRpYyBERUNMQVJFX1dPUksodW5peF9nY193b3JrLCB1bml4X2djKTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNjQzLVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTY0Nj12b2lkIHVuaXhfc2NoZWR1bGVfZ2Moc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTY1OC1cXHRpZiAoIVJFQURfT05DRShnY19pbl9wcm9ncmVzcykpXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjY1OTpcXHRcXHRxdWV1ZV93b3JrKHN5c3RlbV9kZmxfd3EsIFxcdTAwMjZ1bml4X2djX3dvcmspO1xcbm5ldC91bml4L2dhcmJhZ2UuYy02NjAtXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTY2MS1cXHRpZiAodXNlciBcXHUwMDI2XFx1MDAyNiBSRUFEX09OQ0UodW5peF9ncmFwaF9jeWNsaWNfc2NjcykpXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjY2MjpcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZ1bml4X2djX3dvcmspO1xcbm5ldC91bml4L2dhcmJhZ2UuYy02NjMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDoyOC4wNDA3MTAyNDRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI1NDYyMDY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOYXZpZ2F0aW5nIHRoZSBOZXQvVW5peCBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBuZXQvdW5peC9nYXJiYWdlLmNgIGdldHMgYnVpbHQuIEZpcnN0IGluc3RpbmN0OiBLY29uZmlnLiBMZXQncyBzZWUgaWYgdGhlcmUncyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udHJvbHMgaXRzIGluY2x1c2lvbi4gQWgsIHJpZ2h0LCB0aGF0J3Mgd2hlcmUgdGhlICphY3R1YWwqIGJ1aWxkIHJ1bGVzIGFyZSwgbm90IHVzdWFsbHkgaW4gS2NvbmZpZy4gTmV4dCBzdGVwOiBkaXZlIGludG8gdGhlIGBuZXQvdW5peC9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRpcmVjdCBhbnN3ZXIsIG9yIGF0IGxlYXN0IHBvaW50IG1lIHRvIHRoZSByZWxldmFudCB2YXJpYWJsZXMgYW5kIGRlcGVuZGVuY2llcy4gR290dGEgdHJhY2sgZG93biB0aG9zZSBidWlsZCBpbnN0cnVjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NDAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDozMC4yOTUzMzM0ODFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC91bml4L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IHVuaXggZG9tYWluIHNvY2tldCBsYXllci5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX1VOSVgpXFx0Kz0gdW5peC5vXFxuICAgNzpcXHRcXG4gICA4OlxcdHVuaXgteVxcdFxcdFxcdDo9IGFmX3VuaXgubyBnYXJiYWdlLm9cXG4gICA5OlxcdHVuaXgtJChDT05GSUdfU1lTQ1RMKVxcdCs9IHN5c2N0bF9uZXRfdW5peC5vXFxuICAxMDpcXHR1bml4LSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB1bml4X2JwZi5vXFxuICAxMTpcXHRcXG4gIDEyOlxcdG9iai0kKENPTkZJR19VTklYX0RJQUcpXFx0Kz0gdW5peF9kaWFnLm9cXG4gIDEzOlxcdHVuaXhfZGlhZy15XFx0XFx0Oj0gZGlhZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA0OjA0OjMwLjI5NTQzODY5MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjc5NDQyNDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgVU5JWCBEb21haW4gU29ja2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgQ09ORklHX1VOSVhgIOKAkyB0aGF0J3MgdGhlIHN0YW5kYXJkIGZvciBVTklYIGRvbWFpbiBzb2NrZXRzLCByaWdodD8gSnVzdCBtYWtpbmcgYWJzb2x1dGVseSBjZXJ0YWluIGhlcmUuIEJlc3QgcHJhY3RpY2UgZGljdGF0ZXMgdGhhdCBJIHZlcmlmeSB0aGlzIGluIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUuIEknbGwgb3BlbiB1cCBgbmV0L3VuaXgvS2NvbmZpZ2AgYW5kIHRha2UgYSBxdWljayBsb29rIGp1c3QgdG8gY29uZmlybSBteSBpbml0aWFsIGFzc3VtcHRpb24uIEJldHRlciB0byBiZSB0aG9yb3VnaCBhbmQgYXZvaWQgYW55IHBvdGVudGlhbCBnb3RjaGFzIGRvd24gdGhlIGxpbmUuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBzbyBpdCdzIHdvcnRoIHRoZSBxdWljayBkb3VibGUtY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA0OjA0OjMyLjU3NDg4MzgwNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFVuaXggRG9tYWluIFNvY2tldHNcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFVOSVhcXG4gICA3OlxcdFxcdGJvb2wgXFxcIlVuaXggZG9tYWluIHNvY2tldHNcXFwiXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBpbmNsdWRlIHN1cHBvcnQgZm9yIFVuaXggZG9tYWluIHNvY2tldHM7XFxuICAxMDpcXHRcXHQgIHNvY2tldHMgYXJlIHRoZSBzdGFuZGFyZCBVbml4IG1lY2hhbmlzbSBmb3IgZXN0YWJsaXNoaW5nIGFuZFxcbiAgMTE6XFx0XFx0ICBhY2Nlc3NpbmcgbmV0d29yayBjb25uZWN0aW9ucy4gIE1hbnkgY29tbW9ubHkgdXNlZCBwcm9ncmFtcyBzdWNoIGFzXFxuICAxMjpcXHRcXHQgIHRoZSBYIFdpbmRvdyBzeXN0ZW0gYW5kIHN5c2xvZyB1c2UgdGhlc2Ugc29ja2V0cyBldmVuIGlmIHlvdXJcXG4gIDEzOlxcdFxcdCAgbWFjaGluZSBpcyBub3QgY29ubmVjdGVkIHRvIGFueSBuZXR3b3JrLiAgVW5sZXNzIHlvdSBhcmUgd29ya2luZyBvblxcbiAgMTQ6XFx0XFx0ICBhbiBlbWJlZGRlZCBzeXN0ZW0gb3Igc29tZXRoaW5nIHNpbWlsYXIsIHlvdSB0aGVyZWZvcmUgZGVmaW5pdGVseVxcbiAgMTU6XFx0XFx0ICB3YW50IHRvIHNheSBZIGhlcmUuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgU2F5IFkgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0Y29uZmlnXFx0QUZfVU5JWF9PT0JcXG4gIDIwOlxcdFxcdGJvb2wgXFxcIlVOSVg6IG91dC1vZi1ib3VuZCBtZXNzYWdlc1xcXCJcXG4gIDIxOlxcdFxcdGRlcGVuZHMgb24gVU5JWFxcbiAgMjI6XFx0XFx0ZGVmYXVsdCB5XFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFN1cHBvcnQgZm9yIE1TR19PT0IgaW4gVU5JWCBkb21haW4gc29ja2V0cy4gSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDI1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDozMi41NzQ5ODAwNDVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzkwNDA2NTA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDcml0aWNhbCBOZXR3b3JrIEdhcmJhZ2UgQ29sbGVjdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgY29kZSBpbiBmcm9udCBvZiBtZSwgcGFydCBvZiB0aGUgY29yZSBuZXR3b3JraW5nJ3MgVW5peCBkb21haW4gc29ja2V0cyBnYXJiYWdlIGNvbGxlY3Rpb24sIHNwZWNpZmljYWxseSB0aGUgU0NDIGRldGVjdGlvbiBhbGdvcml0aG0uICBJIHNlZSBpdCdzIGRlYWxpbmcgd2l0aCBmdW5jdGlvbnMgbGlrZSBgX191bml4X3dhbGtfc2NjYCwgYHVuaXhfc2NjX2RlYWRgLCBhbmQgYHVuaXhfd2Fsa19zY2NfZmFzdGAuICBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IGZ1enphYmlsaXR5LiAgR2l2ZW4gdGhlIG5hdHVyZSBvZiBVbml4IGRvbWFpbiBzb2NrZXRzLCBhbmQgaG93IGVhc3kgaXQgaXMgdG8gY3JlYXRlIHRoZW0sIHBhc3MgZmlsZSBkZXNjcmlwdG9ycyBhcm91bmQgKHVzaW5nIGBzY21fcmlnaHRzYCksIGNsb3NlIHNvY2tldHMgdG8gdHJpZ2dlciBnYXJiYWdlIGNvbGxlY3Rpb24sIGl0IGxvb2tzIGxpa2Ugc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgY291bGQgYWJzb2x1dGVseSByZWFjaCB0aGlzIGNvZGUuICBTeXprYWxsZXIsIGZvciBpbnN0YW5jZSwgaGFzIGZ1bGwgZGVzY3JpcHRpb25zIGFuZCBhY3RpdmVseSB0ZXN0cyB0aGlzLiAgSGlzdG9yaWNhbGx5LCB0aGlzIEdDIGNvZGUgaGFzIGJlZW4gYSBob3RiZWQgZm9yIG5hc3R5IGJ1Z3MsIHJhY2VzLCBtZW1vcnkgbGVha3MsIGFuZCBVQUZzLiBTbywgdGhpcyBkZWZpbml0ZWx5IGdyYWJzIG15IGF0dGVudGlvbi5cblxuTm93LCBsZXQncyBkaXNzZWN0IHRoZSBwYXRjaCBpdHNlbGYuIEknbSBmb2N1c2luZyBvbiB3aGF0J3MgY2hhbmdlZCBpbiBgdW5peF9zY2NfZGVhZGAuICBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSBgZmFzdGAgZmxhZywgYW5kIHNvbWUgbG9naWMgdG8gbWFyayB2ZXJ0aWNlcyBhcyBcIm9mZi1zdGFja1wiIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiAgTm93LCB0aGUgYGZhc3RgIHBhcmFtZXRlciBpcyBnb25lLCBhbmQgdGhlIG1hcmtpbmcgbG9naWMgaGFzIG1vdmVkLiAgSW5zdGVhZCwgaW4gYF9fdW5peF93YWxrX3NjY2AsIGFmdGVyIHRoZSBTQ0MgaXMgZGV0ZXJtaW5lZCB1c2luZyBgX19saXN0X2N1dF9wb3NpdGlvbmAsIGEgbG9vcCBpdGVyYXRlcyAqYmFja3dhcmRzKiB0aHJvdWdoIHRoZSB2ZXJ0aWNlcy4gSXQgbm93IHNldHMgYm90aCBgdi1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXhgIGFuZCBgdi1cdTAwM2VzY2NfaW5kZXggPSB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4O2AuICBUaGF0IGB2LVx1MDAzZXNjY19pbmRleGAgYXNzaWdubWVudCBpcyB0aGUga2V5IGRpZmZlcmVuY2UuXG5cblRoaXMgaXMgaW1tZWRpYXRlbHkgcmFpc2luZyBhIGZsYWcuICBJbiBUYXJqYW4ncyBTQ0MgYWxnb3JpdGhtLCBsaWtlIHRoZSBvbmUgdXNlZCBoZXJlLCB2ZXJ0aWNlcyBpbiBhbiBTQ0MgY2FuIGhhdmUgZGlmZmVyZW50IGxvd3BvaW50cyAod2hpY2ggYXJlIHJlcHJlc2VudGVkIGJ5IHNjY19pbmRleCksIGlmIG5vdCB1bmlmaWVkLiBBbHNvLCBvZmYtc3RhY2sgaGFuZGxpbmcgY2FuIGhhdmUgaXNzdWVzLiBUaGUgY2hhbmdlIGlzIHNldHRpbmcgYHYtXHUwMDNlaW5kZXhgIGFuZCBgdi1cdTAwM2VzY2NfaW5kZXhgICpiZWZvcmUqIHRoZSBgdW5peF9zY2NfZGVhZGAgZnVuY3Rpb24gcnVucy4gVGhpcyBpcyBjaGFuZ2luZyB3aGVuIGFuZCBob3cgdmVydGljZXMgYXJlIG1hcmtlZCBhbmQgdGhlaXIgYHNjY19pbmRleGAuICBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGluIGNvcmUgbG9naWMuXG5cblNvLCB0aGlzIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gY29yZSBuZXR3b3JraW5nIChgbmV0L3VuaXgvZ2FyYmFnZS5jYCkuICBJcyB0aGlzIHdvcnRoIGZ1enppbmc/ICBBYnNvbHV0ZWx5LCBwZXIgdGhlIGd1aWRlbGluZXMhICBJdCdzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVW5peCBkb21haW4gc29ja2V0cyBpbiBRRU1VL0dDRSwgaXQncyBhIG1vZGlmaWNhdGlvbiBvZiByZWFjaGFibGUgY29kZSwgaXQncyBpbiBhIGNvcmUgc3Vic3lzdGVtIChjb3JlIG5ldHdvcmtpbmcpLCBzbyBpdCdzIFdvcnRoRnV6emluZy5cblxuTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGltcG9ydGFudCBzeW1ib2xzIGZvciBmdXp6aW5nLiAgSSdtIGZvY3VzaW5nIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBfX3VuaXhfd2Fsa19zY2NgLCBgdW5peF9zY2NfZGVhZGAsIGB1bml4X3dhbGtfc2NjX2Zhc3RgLCBgdW5peF93YWxrX3NjY2AgYW5kIGB1bml4X2djYC4gTmV4dCwgSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXNlIGFyZSBzdGF0aWMgb3IgZ2xvYmFsLCBhbmQgaG93IHRoZXkgYXJlIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDIzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA0OjA0OjQwLjQ3OTA0OTQ0NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4MzI0MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KHZvaWR8Ym9vbHx1bnNpZ25lZCBsb25nfGludCkgLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdW5peC9nYXJiYWdlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3VuaXgvZ2FyYmFnZS5jPTEzMD1zdGF0aWMgdW5zaWduZWQgY2hhciB1bml4X2dyYXBoX3N0YXRlO1xcbm5ldC91bml4L2dhcmJhZ2UuYy0xMzEtXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjEzMjpzdGF0aWMgdm9pZCB1bml4X3VwZGF0ZV9ncmFwaChzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleClcXG5uZXQvdW5peC9nYXJiYWdlLmMtMTMzLXtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYz0xNTI9c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX1NUQVJUO1xcbm5ldC91bml4L2dhcmJhZ2UuYy0xNTMtXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjE1NDpzdGF0aWMgdm9pZCB1bml4X2FkZF9lZGdlKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsLCBzdHJ1Y3QgdW5peF9lZGdlICplZGdlKVxcbm5ldC91bml4L2dhcmJhZ2UuYy0xNTUte1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTE3NS1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MTc2OnN0YXRpYyB2b2lkIHVuaXhfZGVsX2VkZ2Uoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwsIHN0cnVjdCB1bml4X2VkZ2UgKmVkZ2UpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTE3Ny17XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtMTkyLVxcbm5ldC91bml4L2dhcmJhZ2UuYzoxOTM6c3RhdGljIHZvaWQgdW5peF9mcmVlX3ZlcnRpY2VzKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKVxcbm5ldC91bml4L2dhcmJhZ2UuYy0xOTQte1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTIwMz1zdGF0aWMgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NQSU5MT0NLKHVuaXhfZ2NfbG9jayk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTIwNC1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MjA1OnZvaWQgdW5peF9hZGRfZWRnZXMoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwsIHN0cnVjdCB1bml4X3NvY2sgKnJlY2VpdmVyKVxcbm5ldC91bml4L2dhcmJhZ2UuYy0yMDYte1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTIzOC1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MjM5OnZvaWQgdW5peF9kZWxfZWRnZXMoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTI0MC17XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtMjY2LVxcbm5ldC91bml4L2dhcmJhZ2UuYzoyNjc6dm9pZCB1bml4X3VwZGF0ZV9lZGdlcyhzdHJ1Y3QgdW5peF9zb2NrICpyZWNlaXZlcilcXG5uZXQvdW5peC9nYXJiYWdlLmMtMjY4LXtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy0yODItXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjI4MzppbnQgdW5peF9wcmVwYXJlX2ZwbChzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbClcXG5uZXQvdW5peC9nYXJiYWdlLmMtMjg0LXtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy0zMTItXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjMxMzp2b2lkIHVuaXhfZGVzdHJveV9mcGwoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTMxNC17XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9MzIzPXN0YXRpYyBzZXFjb3VudF90IHVuaXhfcGVla19zZXEgPSBTRVFDTlRfWkVSTyh1bml4X3BlZWtfc2VxKTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMzI0LVxcbm5ldC91bml4L2dhcmJhZ2UuYzozMjU6dm9pZCB1bml4X3BlZWtfZnBsKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKVxcbm5ldC91bml4L2dhcmJhZ2UuYy0zMjYte1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTM0MC1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MzQxOnN0YXRpYyBib29sIHVuaXhfdmVydGV4X2RlYWQoc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTM0Mi17XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9Mzc1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMjtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMzc2LVxcbm5ldC91bml4L2dhcmJhZ2UuYzozNzc6c3RhdGljIGJvb2wgdW5peF9zY2NfZGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpzY2MpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTM3OC17XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtMzk5LVxcbm5ldC91bml4L2dhcmJhZ2UuYzo0MDA6c3RhdGljIHZvaWQgdW5peF9jb2xsZWN0X3NrYihzdHJ1Y3QgbGlzdF9oZWFkICpzY2MsIHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQwMS17XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNDMyLVxcbm5ldC91bml4L2dhcmJhZ2UuYzo0MzM6c3RhdGljIGJvb2wgdW5peF9zY2NfY3ljbGljKHN0cnVjdCBsaXN0X2hlYWQgKnNjYylcXG5uZXQvdW5peC9nYXJiYWdlLmMtNDM0LXtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy00NTItXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjQ1MzpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3VuaXhfd2Fsa19zY2Moc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgsXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ1NC1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKmxhc3RfaW5kZXgsXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9NTU2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfZ3JhcGhfY3ljbGljX3NjY3M7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTU1Ny1cXG5uZXQvdW5peC9nYXJiYWdlLmM6NTU4OnN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2Moc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcXG5uZXQvdW5peC9nYXJiYWdlLmMtNTU5LXtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy01ODItXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjU4MzpzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjX2Zhc3Qoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcXG5uZXQvdW5peC9nYXJiYWdlLmMtNTg0LXtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy02MDgtXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjYwOTpzdGF0aWMgdm9pZCB1bml4X2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvdW5peC9nYXJiYWdlLmMtNjEwLXtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYz02NDI9c3RhdGljIERFQ0xBUkVfV09SSyh1bml4X2djX3dvcmssIHVuaXhfZ2MpO1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTY0NS1cXG5uZXQvdW5peC9nYXJiYWdlLmM6NjQ2OnZvaWQgdW5peF9zY2hlZHVsZV9nYyhzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTY0Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA0OjA0OjQwLjU5NzM4NTczNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODE5NTY1Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLiBIZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcgYXMgSSBhcHByb2FjaCB0aGlzIGB1bml4X3NjaGVkdWxlX2djYCBmdW5jdGlvbi5cblxuKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYHVuaXhfc2NoZWR1bGVfZ2NgKipcblxuUmlnaHQsIHNvIHRoZSBmaXJzdCBzdGVwLCBhcyBhbHdheXMgd2hlbiBJIGVuY291bnRlciBhIGZ1bmN0aW9uIEkgZG9uJ3QgaW5zdGFudGx5IHJlY29nbml6ZSwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoZXJlKiB0aGlzIGB1bml4X3NjaGVkdWxlX2djYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gV2hhdCBwYXJ0cyBvZiB0aGUgc3lzdGVtIHJlbHkgb24gaXQ/IFdoYXQgYXJlIHRoZSBjYWxsaW5nIHNlcXVlbmNlcz8gSXMgaXQgY2FsbGVkIGZyb20gYSBjcml0aWNhbCBwYXRoLCBvciBzb21ldGhpbmcgbW9yZSBhbmNpbGxhcnk/IEtub3dpbmcgdGhpcyB3aWxsIGltbWVkaWF0ZWx5IGluZm9ybSBtZSBhYm91dCBpdHMgbGlrZWx5IGltcG9ydGFuY2UsIHB1cnBvc2UsIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBjb2RlLCBpZGVhbGx5IHVzaW5nIG15IGRlYnVnZ2VyIG9yIGNvZGUgYnJvd3NpbmcgdG9vbHMgdG8gbGlzdCB0aGUgY2FsbGVycy4gSSBuZWVkIHRvIHNlZSB0aGUgc3RhY2sgdHJhY2VzIHRoYXQgd291bGQgdWx0aW1hdGVseSBsZWFkIHRvIGB1bml4X3NjaGVkdWxlX2djYC4gSG9wZWZ1bGx5LCB0aGUgY2FsbCBzaXRlcyBoYXZlIGhlbHBmdWwgY29tbWVudHMsIGJ1dCBJJ20gcHJlcGFyZWQgdG8gZG8gc29tZSBkaWdnaW5nLiBNeSBnb2FsIGlzIHRvIHBhaW50IGEgbWVudGFsIHBpY3R1cmUgb2YgdGhlIGVudmlyb25tZW50IHRoYXQgdHJpZ2dlcnMgYHVuaXhfc2NoZWR1bGVfZ2NgLiBJJ2xsIHBheSBhdHRlbnRpb24gdG8gYW55IGFyZ3VtZW50cyBiZWluZyBwYXNzZWQsIGFzIHRob3NlIGFyZSBjcnVjaWFsIGNsdWVzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byByZWFzb24gYWJvdXQgKndoeSogaXQncyBiZWluZyBjYWxsZWQsIGFuZCAqd2hhdCogaXQncyBhY3R1YWxseSBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwOTksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDo0My40MTY5NzIxNjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTQ3Mjg4MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5peF9zY2hlZHVsZV9nY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdW5peC9hZl91bml4LmM9NjY1PXN0YXRpYyB2b2lkIHVuaXhfcmVsZWFzZV9zb2NrKHN0cnVjdCBzb2NrICpzaywgaW50IGVtYnJpb24pXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtNzM1LVxcbm5ldC91bml4L2FmX3VuaXguYzo3MzY6XFx0dW5peF9zY2hlZHVsZV9nYyhOVUxMKTtcXG5uZXQvdW5peC9hZl91bml4LmMtNzM3LX1cXG4tLVxcbm5ldC91bml4L2FmX3VuaXguaD0zMj12b2lkIHVuaXhfcGVla19mcGwoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpO1xcbm5ldC91bml4L2FmX3VuaXguaDozMzp2b2lkIHVuaXhfc2NoZWR1bGVfZ2Moc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKTtcXG5uZXQvdW5peC9hZl91bml4LmgtMzQtXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9MjgzPWludCB1bml4X3ByZXBhcmVfZnBsKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTMwMy1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MzA0OlxcdHVuaXhfc2NoZWR1bGVfZ2MoZnBsLVxcdTAwM2V1c2VyKTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMzA1LVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTY0Mj1zdGF0aWMgREVDTEFSRV9XT1JLKHVuaXhfZ2Nfd29yaywgdW5peF9nYyk7XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNjQ1LVxcbm5ldC91bml4L2dhcmJhZ2UuYzo2NDY6dm9pZCB1bml4X3NjaGVkdWxlX2djKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcilcXG5uZXQvdW5peC9nYXJiYWdlLmMtNjQ3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6NDUuNzMxNzA4MDg5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUzODE0NDU4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IFVOSVggRG9tYWluIFNvY2tldCBHYXJiYWdlIENvbGxlY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgc2NvcGUgb2YgdGhlIG1vZGlmaWNhdGlvbnMuIFRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgaW1wYWN0ZWQgYXJlIGBfX3VuaXhfd2Fsa19zY2NgLCBgdW5peF9zY2NfZGVhZGAsIGFuZCBgdW5peF93YWxrX3NjY19mYXN0YC4gVGhlc2UgZnVuY3Rpb25zLCBhbG9uZyB3aXRoIHJlbGF0ZWQgZW50cnlwb2ludHMgYHVuaXhfd2Fsa19zY2NgIGFuZCBgdW5peF9nY2AsIGltbWVkaWF0ZWx5IHNpZ25hbCB0aGF0IHRoaXMgcGF0Y2ggaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggVU5JWCBkb21haW4gc29ja2V0IGdhcmJhZ2UgY29sbGVjdGlvbi4gSXQncyBub3QgYSBnZW5lcmljIGNoYW5nZTsgaXQncyBmb2N1c2VkLiBUaGV5IGFyZSBzdHJpY3RseSBsaW1pdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBVTklYIGRvbWFpbiBzb2NrZXRzLCBwYXJ0aWN1bGFybHkgdGhlIGNsZWFudXAgYWZ0ZXIgZmlsZSBkZXNjcmlwdG9yIHBhc3Npbmcgb3Igc29ja2V0IGNsb3N1cmUuXG5cblNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbmljaGUsIGxldCdzIHF1aWNrbHkgY2hlY2sgZm9yIHViaXF1aXR5LiBOb3BlLCB0aGV5J3JlIGFsbCBzcGVjaWZpY2FsbHkgcGFydCBvZiB0aGUgVW5peCBzb2NrZXQgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbS4gRXhjZWxsZW50LCB0aGF0IGNsYXJpZmllcyB0aGluZ3MuXG5cbk5vdywgbGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGUgY29kZSB1c2VzIGBDT05GSUdfVU5JWGAuIEEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBgbmV0L3VuaXgvS2NvbmZpZ2AgZGVmaW5lcyBgQ09ORklHX1VOSVhgIGFzIGEgYm9vbGVhbiBvcHRpb24sIGFuZCBpdCBkb2Vzbid0IGFwcGVhciB0byBoYXZlIGFueSBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcywgaXQgaXMgb25seSBhIGJvb2xlYW4gYW5kIHRoZSBzb3VyY2UgaXMgaW4gYG5ldC9LY29uZmlnYC4gVGhpcyBtZWFucyB0aGUgcmVsZXZhbnQgY29kZSB3aWxsIGJlIGJ1aWx0IG9ubHkgaWYgYENPTkZJR19VTklYYCBpcyBlbmFibGVkLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuXG5cblRpbWUgdG8gYXJ0aWN1bGF0ZSB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJJ2xsIGZsYWcgYFdvcnRoRnV6emluZ2AgYXMgYHRydWVgIGdpdmVuIHRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGNvZGUgZGVhbGluZyB3aXRoIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1VOSVggc29ja2V0cy4gVGhlIGBSZWFzb25pbmdgIHdpbGwgZGVzY3JpYmUgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnQgKFNDQykgYWxnb3JpdGhtIGZvciBVTklYIGRvbWFpbiBzb2NrZXQgZ2FyYmFnZSBjb2xsZWN0aW9uIChgbmV0L3VuaXgvZ2FyYmFnZS5jYCkuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyB3aGVuIHZlcnRpY2VzIGFyZSBtYXJrZWQgb2ZmLXN0YWNrIGFuZCBob3cgYHNjY19pbmRleGAgaXMgYXNzaWduZWQgdG8gdmVydGljZXMgd2l0aGluIGZpbmFsaXplZCBTQ0NzIChgX191bml4X3dhbGtfc2NjYCBhbmQgYHVuaXhfc2NjX2RlYWRgKS4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgY29kZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1VOSVggc29ja2V0cyBhbmQgU0NNX1JJR0hUUyBmaWxlIGRlc2NyaXB0b3IgcGFzc2luZy4gVGhlIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmU6IGBfX3VuaXhfd2Fsa19zY2NgLCBgdW5peF9zY2NfZGVhZGAsIGB1bml4X3dhbGtfc2NjX2Zhc3RgLCBgdW5peF93YWxrX3NjY2AsIGFuZCBgdW5peF9nY2AuIFRoZSBgRW5hYmxlQ29uZmlnc2Agd2lsbCBqdXN0IGluY2x1ZGUgYFVOSVhgLlxuXG5FdmVyeXRoaW5nIGxvb2tzIGdvb2QuIE5vIHJlZCBmbGFncy4gUmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc0OSwiT3V0cHV0VG9rZW5zIjoxOTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6NTEuMTEzMTU3NjMzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4Nzk3MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191bml4X3dhbGtfc2NjXCIsXG4gICAgXCJ1bml4X3NjY19kZWFkXCIsXG4gICAgXCJ1bml4X3dhbGtfc2NjX2Zhc3RcIixcbiAgICBcInVuaXhfd2Fsa19zY2NcIixcbiAgICBcInVuaXhfZ2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudHMgKFNDQykgVGFyamFuLWJhc2VkIGN5Y2xlIGRldGVjdGlvbiBhbGdvcml0aG0gaW4gVU5JWCBkb21haW4gc29ja2V0IGdhcmJhZ2UgY29sbGVjdGlvbiAobmV0L3VuaXgvZ2FyYmFnZS5jKS4gU3BlY2lmaWNhbGx5LCBpdCB1cGRhdGVzIF9fdW5peF93YWxrX3NjYyB0byBhc3NpZ24gdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCBhbmQgdXBkYXRlIHNjY19pbmRleCBhY3Jvc3MgdGhlIGVudGlyZSBTQ0MgcHJpb3IgdG8gY2FsbGluZyB1bml4X3NjY19kZWFkLCBhbmQgcmVtb3ZlcyB0aGUgZmFzdCBwYXJhbWV0ZXIgYW5kIG9mZi1zdGFjayBtYXJraW5nIGZyb20gdW5peF9zY2NfZGVhZC4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgZGlyZWN0bHkgZXhlcmNpc2VkIHdoZW4gcGFzc2luZyBmaWxlIGRlc2NyaXB0b3JzIGFjcm9zcyBVTklYIHNvY2tldHMgdmlhIFNDTV9SSUdIVFMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVU5JWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdW5peF93YWxrX3NjY1wiLFxuICAgIFwidW5peF9zY2NfZGVhZFwiLFxuICAgIFwidW5peF93YWxrX3NjY19mYXN0XCIsXG4gICAgXCJ1bml4X3dhbGtfc2NjXCIsXG4gICAgXCJ1bml4X2djXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIChTQ0MpIFRhcmphbi1iYXNlZCBjeWNsZSBkZXRlY3Rpb24gYWxnb3JpdGhtIGluIFVOSVggZG9tYWluIHNvY2tldCBnYXJiYWdlIGNvbGxlY3Rpb24gKG5ldC91bml4L2dhcmJhZ2UuYykuIFNwZWNpZmljYWxseSwgaXQgdXBkYXRlcyBfX3VuaXhfd2Fsa19zY2MgdG8gYXNzaWduIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggYW5kIHVwZGF0ZSBzY2NfaW5kZXggYWNyb3NzIHRoZSBlbnRpcmUgU0NDIHByaW9yIHRvIGNhbGxpbmcgdW5peF9zY2NfZGVhZCwgYW5kIHJlbW92ZXMgdGhlIGZhc3QgcGFyYW1ldGVyIGFuZCBvZmYtc3RhY2sgbWFya2luZyBmcm9tIHVuaXhfc2NjX2RlYWQuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIGRpcmVjdGx5IGV4ZXJjaXNlZCB3aGVuIHBhc3NpbmcgZmlsZSBkZXNjcmlwdG9ycyBhY3Jvc3MgVU5JWCBzb2NrZXRzIHZpYSBTQ01fUklHSFRTLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDo1MS4yMzE5NjMxOTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODczNTAwNzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6NTEuMjMyNDAwMDI0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ4NzMwNTg0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgQUZfVU5JWCBnYXJiYWdlIGNvbGxlY3RvcidzIFRhcmphbiBTdHJvbmdseSBDb25uZWN0ZWQgQ29tcG9uZW50IChTQ0MpIGFsZ29yaXRobSBpbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gSXQgbW92ZXMgdGhlIG9mZi1zdGFjayBtYXJraW5nIChgdi1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4YCkgYW5kIFNDQyBJRCBhc3NpZ25tZW50IChgdi1cXHUwMDNlc2NjX2luZGV4ID0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXhgKSBmb3IgU0NDIHZlcnRpY2VzIGZyb20gYHVuaXhfc2NjX2RlYWQoKWAgaW50byBgX191bml4X3dhbGtfc2NjKClgLCBzaW1wbGlmaWVzIGB1bml4X3NjY19kZWFkKClgIGJ5IHJlbW92aW5nIHRoZSBgZmFzdGAgcGFyYW1ldGVyLCBhbmQgYWRkcyBhIHJlZ3Jlc3Npb24gdGVzdCBpbiBrc2VsZnRlc3RzLlxcblxcblRoaXMgY2hhbmdlIHRvdWNoZXMgcHVyZWx5IGludGVybmFsIGdyYXBoIGJvb2trZWVwaW5nIGZpZWxkcyBvbiBgc3RydWN0IHVuaXhfdmVydGV4YCBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBhbnkgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBncmFwaCB0cmF2ZXJzYWwsIGxpc3QgbWFuaXB1bGF0aW9uLCBvciBzb2NrZXQgbGlmZXRpbWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbnMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgZmFjaWxpdGllcyAoZS5nLiwgQ09ORklHX0RFQlVHX0xJU1QpLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjQyMjZkMDE2ZDBhZWQ2NGFjNGFjZjQ1MmYwNjVmYjIwNTcxYjY1N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDA0OjA0OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvZ2FyYmFnZS5jIGIvbmV0L3VuaXgvZ2FyYmFnZS5jXG5pbmRleCA5ZmNhYWY1NWNiYTVkLi5kYTc3NGY1NmNhNjQ4IDEwMDY0NFxuLS0tIGEvbmV0L3VuaXgvZ2FyYmFnZS5jXG4rKysgYi9uZXQvdW5peC9nYXJiYWdlLmNcbkBAIC0zNzQsNyArMzc0LDcgQEAgc3RhdGljIGJvb2wgdW5peF92ZXJ0ZXhfZGVhZChzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleClcbiBzdGF0aWMgTElTVF9IRUFEKHVuaXhfdmlzaXRlZF92ZXJ0aWNlcyk7XG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX01BUksyO1xuIFxuLXN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBib29sIGZhc3QpXG4rc3RhdGljIGJvb2wgdW5peF9zY2NfZGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpzY2MpXG4ge1xuIFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XG4gXHRib29sIHNjY19kZWFkID0gdHJ1ZTtcbkBAIC0zODYsMTAgKzM4Niw2IEBAIHN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBib29sIGZhc3QpXG4gXHRcdC8qIERvbid0IHJlc3RhcnQgREZTIGZyb20gdGhpcyB2ZXJ0ZXguICovXG4gXHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNnZlcnRleC1cdTAwM2VlbnRyeSwgXHUwMDI2dW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcbiBcbi1cdFx0LyogTWFyayB2ZXJ0ZXggYXMgb2ZmLXN0YWNrIGZvciBfX3VuaXhfd2Fsa19zY2MoKS4gKi9cbi1cdFx0aWYgKCFmYXN0KVxuLVx0XHRcdHZlcnRleC1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXg7XG4tXG4gXHRcdGlmIChzY2NfZGVhZClcbiBcdFx0XHRzY2NfZGVhZCA9IHVuaXhfdmVydGV4X2RlYWQodmVydGV4KTtcbiBcdH1cbkBAIC01MjEsNiArNTE3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX191bml4X3dhbGtfc2NjKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LFxuIFx0fVxuIFxuIFx0aWYgKHZlcnRleC1cdTAwM2VpbmRleCA9PSB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4KSB7XG4rXHRcdHN0cnVjdCB1bml4X3ZlcnRleCAqdjtcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCBzY2M7XG4gXG4gXHRcdC8qIFNDQyBmaW5hbGlzZWQuXG5AQCAtNTMwLDcgKzUyNywxMyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3VuaXhfd2Fsa19zY2Moc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgsXG4gXHRcdCAqL1xuIFx0XHRfX2xpc3RfY3V0X3Bvc2l0aW9uKFx1MDAyNnNjYywgXHUwMDI2dmVydGV4X3N0YWNrLCBcdTAwMjZ2ZXJ0ZXgtXHUwMDNlc2NjX2VudHJ5KTtcbiBcbi1cdFx0aWYgKHVuaXhfc2NjX2RlYWQoXHUwMDI2c2NjLCBmYWxzZSkpIHtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHYsIFx1MDAyNnNjYywgc2NjX2VudHJ5KSB7XG4rXHRcdFx0LyogTWFyayB2ZXJ0ZXggYXMgb2ZmLXN0YWNrIGFuZCBhc3NpZ24gYSB1bmlxdWUgSUQuICovXG4rXHRcdFx0di1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXg7XG4rXHRcdFx0di1cdTAwM2VzY2NfaW5kZXggPSB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4O1xuK1x0XHR9XG4rXG4rXHRcdGlmICh1bml4X3NjY19kZWFkKFx1MDAyNnNjYykpIHtcbiBcdFx0XHR1bml4X2NvbGxlY3Rfc2tiKFx1MDAyNnNjYywgaGl0bGlzdCk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0aWYgKHVuaXhfdmVydGV4X21heF9zY2NfaW5kZXggXHUwMDNjIHZlcnRleC1cdTAwM2VzY2NfaW5kZXgpXG5AQCAtNTg4LDcgKzU5MSw3IEBAIHN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2NfZmFzdChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxuIFx0XHR2ZXJ0ZXggPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzLCB0eXBlb2YoKnZlcnRleCksIGVudHJ5KTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2c2NjLCBcdTAwMjZ2ZXJ0ZXgtXHUwMDNlc2NjX2VudHJ5KTtcbiBcbi1cdFx0aWYgKHVuaXhfc2NjX2RlYWQoXHUwMDI2c2NjLCB0cnVlKSkge1xuK1x0XHRpZiAodW5peF9zY2NfZGVhZChcdTAwMjZzY2MpKSB7XG4gXHRcdFx0Y3ljbGljX3NjY3MtLTtcbiBcdFx0XHR1bml4X2NvbGxlY3Rfc2tiKFx1MDAyNnNjYywgaGl0bGlzdCk7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmNcbmluZGV4IGQ4MmE3OWMyMWMxNzkuLmMxNjVmMjUwMjIwYTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuY1xuQEAgLTM3OCw0ICszNzgsMjEgQEAgVEVTVF9GKHNjbV9yaWdodHMsIGJhY2t0cmFja19mcm9tX3NjYylcbiBcdGNsb3NlX3NvY2tldHMoMTApO1xuIH1cbiBcbitURVNUX0Yoc2NtX3JpZ2h0cywgbWl4ZWRfbG93cG9pbnQpXG4re1xuK1x0Y3JlYXRlX3NvY2tldHMoNik7XG4rXG4rXHRzZW5kX2ZkKDAsIDEpO1xuK1x0c2VuZF9mZCgxLCAyKTtcbitcdHNlbmRfZmQoMiwgMSk7XG4rXHRzZW5kX2ZkKDEsIDApO1xuK1xuK1x0c2VuZF9mZCgzLCA0KTtcbitcdHNlbmRfZmQoNCwgNSk7XG4rXHRzZW5kX2ZkKDUsIDQpO1xuK1x0c2VuZF9mZCg0LCAzKTtcbitcbitcdGNsb3NlX3NvY2tldHMoNik7XG4rfVxuK1xuIFRFU1RfSEFSTkVTU19NQUlOXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDo1MS4yMzI0MDA5MTRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDExNzgzNzc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHVzZXIgd2FudHMgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2gganVzdGlmaWVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgaW4gYWRkaXRpb24gdG8gb3VyIHN0YW5kYXJkIEtBU0FOIGVmZm9ydHMuIFRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCBzbyB0aGF0J3MgdGhlIGNvbnRleHQuIEZpcnN0LCBJIG5lZWQgdG8gc2VlIHdoYXQncyBjaGFuZ2VkIGFuZCB3aHkuXG5cbkxvb2tpbmcgYXQgdGhlIGRpZmYgaW4gYG5ldC91bml4L2dhcmJhZ2UuY2AsIGl0IHNlZW1zIHRoZSBtYWluIGZvY3VzIGlzIGFyb3VuZCB0aGUgYHVuaXhfc2NjX2RlYWQoKWAgYW5kIGBfX3VuaXhfd2Fsa19zY2MoKWAgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGEgYGJvb2wgZmFzdGAgcGFyYW1ldGVyIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBgdW5peF9zY2NfZGVhZCgpYC4gVGhhdCBjb25kaXRpb25hbCB0aGF0IGNoZWNrZWQgdGhpcyB2YWx1ZSBoYXMgYmVlbiBtb3ZlZCB0byBgX191bml4X3dhbGtfc2NjKClgIGFuZCBpdCBpbnZvbHZlcyBzb21lIHNvcnQgb2YgbGlzdCB0cmF2ZXJzYWwsIHRoZSBleGFjdCBmdW5jdGlvbiBpdCBpcyBvcGVyYXRpbmcgb24gaXMgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuIFRoZSBgdW5peF93YWxrX3NjY19mYXN0KClgIGZ1bmN0aW9uIG5vdyBzaW1wbHkgY2FsbHMgYHVuaXhfc2NjX2RlYWQoXHUwMDI2c2NjKWAsIHNvIGl0IGlzIGEgZGlyZWN0IGNhbGwgaW5zdGVhZCBvZiBhbiBlYXJsaWVyIGNvbmRpdGlvbmFsLiBUaGVyZSdzIGFsc28gYSBuZXcgdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jYCB3aGljaCwgb24gaXRzIG93biwgbWVhbnMgbmV4dCB0byBub3RoaW5nLCBidXQgaXQncyBpbXBvcnRhbnQgdG8ga2VlcCB0cmFjayBvZi5cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBgbmV0L3VuaXgvZ2FyYmFnZS5jYCBhbmQgdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIHBpY3R1cmUuIEkgd2FudCB0byBncm9rIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBtYW5pcHVsYXRlZCBieSB0aGVzZSBmdW5jdGlvbnMuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNoYW5nZXMgYWx0ZXIgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBgc2NjYCAoc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudCkgcmVsYXRlZCBvcGVyYXRpb25zLiBJcyB0aGUgcGF0Y2ggY2hhbmdpbmcgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQsIGZyZWVkLCBvciBhY2Nlc3NlZCBpbiBhIHdheSB0aGF0IG1pZ2h0IGV4cG9zZSBuZXcgS01TQU4tZGV0ZWN0YWJsZSBpc3N1ZXM/IFVuZGVyc3RhbmRpbmcgdGhlIHJvbGUgb2YgYHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXhgIGFuZCBgc2NjX2luZGV4YCBpcyBlc3NlbnRpYWwuIE9ubHkgdGhlbiBjYW4gSSBkZXRlcm1pbmUgaWYgdGhlcmUncyBhIGhlaWdodGVuZWQgcmlzayBwcm9maWxlIHRoYXQgd2FycmFudHMgdGhlIGV4dHJhIGVmZm9ydCBvZiBhIEtNU0FOIHNlc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDo1NS4zNTAyNDEyMjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQzOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3VuaXgvZ2FyYmFnZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3MDpcXHRcXG4gMzcxOlxcdFxcdHJldHVybiB0cnVlO1xcbiAzNzI6XFx0fVxcbiAzNzM6XFx0XFxuIDM3NDpcXHRzdGF0aWMgTElTVF9IRUFEKHVuaXhfdmlzaXRlZF92ZXJ0aWNlcyk7XFxuIDM3NTpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfTUFSSzI7XFxuIDM3NjpcXHRcXG4gMzc3OlxcdHN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjKVxcbiAzNzg6XFx0e1xcbiAzNzk6XFx0XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XFxuIDM4MDpcXHRcXHRib29sIHNjY19kZWFkID0gdHJ1ZTtcXG4gMzgxOlxcdFxcdHVuc2lnbmVkIGludCBzZXE7XFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdHNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNnVuaXhfcGVla19zZXEpO1xcbiAzODQ6XFx0XFxuIDM4NTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UodmVydGV4LCBzY2MsIHNjY19lbnRyeSkge1xcbiAzODY6XFx0XFx0XFx0LyogRG9uJ3QgcmVzdGFydCBERlMgZnJvbSB0aGlzIHZlcnRleC4gKi9cXG4gMzg3OlxcdFxcdFxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZWVudHJ5LCBcXHUwMDI2dW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcXG4gMzg4OlxcdFxcbiAzODk6XFx0XFx0XFx0aWYgKHNjY19kZWFkKVxcbiAzOTA6XFx0XFx0XFx0XFx0c2NjX2RlYWQgPSB1bml4X3ZlcnRleF9kZWFkKHZlcnRleCk7XFxuIDM5MTpcXHRcXHR9XFxuIDM5MjpcXHRcXG4gMzkzOlxcdFxcdC8qIElmIE1TR19QRUVLIGludGVydmVuZWQsIGRlZmVyIHRoaXMgU0NDIHRvIHRoZSBuZXh0IHJvdW5kLiAqL1xcbiAzOTQ6XFx0XFx0aWYgKHJlYWRfc2VxY291bnRfcmV0cnkoXFx1MDAyNnVuaXhfcGVla19zZXEsIHNlcSkpXFxuIDM5NTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDM5NjpcXHRcXG4gMzk3OlxcdFxcdHJldHVybiBzY2NfZGVhZDtcXG4gMzk4OlxcdH1cXG4gMzk5OlxcdFxcbiA0MDA6XFx0c3RhdGljIHZvaWQgdW5peF9jb2xsZWN0X3NrYihzdHJ1Y3QgbGlzdF9oZWFkICpzY2MsIHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXFxuIDQwMTpcXHR7XFxuIDQwMjpcXHRcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHZlcnRleCwgc2NjLCBzY2NfZW50cnkpIHtcXG4gNDA1OlxcdFxcdFxcdHN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlO1xcbiA0MDY6XFx0XFx0XFx0c3RydWN0IHVuaXhfZWRnZSAqZWRnZTtcXG4gNDA3OlxcdFxcdFxcdHN0cnVjdCB1bml4X3NvY2sgKnU7XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdFxcdGVkZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZWVkZ2VzLCB0eXBlb2YoKmVkZ2UpLCB2ZXJ0ZXhfZW50cnkpO1xcbiA0MTA6XFx0XFx0XFx0dSA9IGVkZ2UtXFx1MDAzZXByZWRlY2Vzc29yO1xcbiA0MTE6XFx0XFx0XFx0cXVldWUgPSBcXHUwMDI2dS1cXHUwMDNlc2suc2tfcmVjZWl2ZV9xdWV1ZTtcXG4gNDEyOlxcdFxcbiA0MTM6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZxdWV1ZS1cXHUwMDNlbG9jayk7XFxuIDQxNDpcXHRcXG4gNDE1OlxcdFxcdFxcdGlmICh1LVxcdTAwM2Vzay5za19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7XFxuIDQxNjpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiA0MTc6XFx0XFxuIDQxODpcXHRcXHRcXHRcXHRza2JfcXVldWVfd2FsayhxdWV1ZSwgc2tiKSB7XFxuIDQxOTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICplbWJyeW9fcXVldWUgPSBcXHUwMDI2c2tiLVxcdTAwM2Vzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6NTUuMzUwMzI3NjYxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwMzE2OTg1NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzdWJqZWN0LCB0aGlua2luZyBhbG91ZCwgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBuZXQvdW5peC9nYXJiYWdlLmNgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBgbmV0L3VuaXgvZ2FyYmFnZS5jYCBhZ2Fpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFyb3VuZCB0aGUgYF9fdW5peF93YWxrX3NjY2AgYW5kIGB1bml4X3dhbGtfc2NjX2Zhc3RgIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIGNyaXRpY2FsIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtIHdvcmtzIHdpdGhpbiB0aGUgVW5peCBkb21haW4gc29ja2V0IHN1YnN5c3RlbSwgZXNwZWNpYWxseSBob3cgaXQgaGFuZGxlcyBjeWNsZSBkZXRlY3Rpb24uIEkgcmVjYWxsIHRoZXJlIHdlcmUgc29tZSBpbnRlcmVzdGluZyBudWFuY2VzIGluIGhvdyBpdCBoYW5kbGVzIHNoYXJlZCBtZW1vcnkgYW5kIGNpcmN1bGFyIHJlZmVyZW5jZXMuIExldCdzIHNlZSBpZiB0aG9zZSBzcGVjaWZpYyBmdW5jdGlvbnMgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBwb3RlbnRpYWwgaW1wcm92ZW1lbnRzIEkndmUgYmVlbiBjb25zaWRlcmluZy4gSSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBmYXN0IHBhdGggaW4gYHVuaXhfd2Fsa19zY2NfZmFzdGAgdG8ganVkZ2UgaWYgbXkgcHJvcG9zZWQgb3B0aW1pemF0aW9ucyBhcmUgYWN0dWFsbHkgZmVhc2libGUgYW5kIHdvbid0IGludHJvZHVjZSBuZXcgcHJvYmxlbXMuIFJpZ2h0LCBsZXQncyBzdGFydCByZWFkaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTIzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDo1Ny4zODIwMzA4ODRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC91bml4L2dhcmJhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0OTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDkwOlxcdFxcbiA0OTE6XFx0XFx0XFx0XFx0LyogICAyLiBQb3AgdGhlIGVkZ2UgZGlyZWN0ZWQgdG8gdGhlIGN1cnJlbnQgdmVydGV4XFxuIDQ5MjpcXHRcXHRcXHRcXHQgKiAgICAgIGFuZCByZXN0b3JlIHRoZSBhbmNlc3RvciBmb3IgYmFja3RyYWNraW5nLlxcbiA0OTM6XFx0XFx0XFx0XFx0ICovXFxuIDQ5NDpcXHRwcmV2X3ZlcnRleDpcXG4gNDk1OlxcdFxcdFxcdFxcdGVkZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZlZGdlX3N0YWNrLCB0eXBlb2YoKmVkZ2UpLCBzdGFja19lbnRyeSk7XFxuIDQ5NjpcXHRcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZlZGdlLVxcdTAwM2VzdGFja19lbnRyeSk7XFxuIDQ5NzpcXHRcXG4gNDk4OlxcdFxcdFxcdFxcdG5leHRfdmVydGV4ID0gdmVydGV4O1xcbiA0OTk6XFx0XFx0XFx0XFx0dmVydGV4ID0gZWRnZS1cXHUwMDNlcHJlZGVjZXNzb3ItXFx1MDAzZXZlcnRleDtcXG4gNTAwOlxcdFxcbiA1MDE6XFx0XFx0XFx0XFx0LyogSWYgdGhlIHN1Y2Nlc3NvciBoYXMgYSBzbWFsbGVyIHNjY19pbmRleCwgdHdvIHZlcnRpY2VzXFxuIDUwMjpcXHRcXHRcXHRcXHQgKiBhcmUgaW4gdGhlIHNhbWUgU0NDLCBzbyBwcm9wYWdhdGUgdGhlIHNtYWxsZXIgc2NjX2luZGV4XFxuIDUwMzpcXHRcXHRcXHRcXHQgKiB0byBza2lwIFNDQyBmaW5hbGlzYXRpb24uXFxuIDUwNDpcXHRcXHRcXHRcXHQgKi9cXG4gNTA1OlxcdFxcdFxcdFxcdHZlcnRleC1cXHUwMDNlc2NjX2luZGV4ID0gbWluKHZlcnRleC1cXHUwMDNlc2NjX2luZGV4LCBuZXh0X3ZlcnRleC1cXHUwMDNlc2NjX2luZGV4KTtcXG4gNTA2OlxcdFxcdFxcdH0gZWxzZSBpZiAobmV4dF92ZXJ0ZXgtXFx1MDAzZWluZGV4ICE9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXgpIHtcXG4gNTA3OlxcdFxcdFxcdFxcdC8qIExvb3AgZGV0ZWN0ZWQgYnkgYSBiYWNrL2Nyb3NzIGVkZ2UuXFxuIDUwODpcXHRcXHRcXHRcXHQgKlxcbiA1MDk6XFx0XFx0XFx0XFx0ICogVGhlIHN1Y2Nlc3NvciBpcyBvbiB2ZXJ0ZXhfc3RhY2ssIHNvIHR3byB2ZXJ0aWNlcyBhcmUgaW5cXG4gNTEwOlxcdFxcdFxcdFxcdCAqIHRoZSBzYW1lIFNDQy4gIElmIHRoZSBzdWNjZXNzb3IgaGFzIGEgc21hbGxlciAqc2NjX2luZGV4KixcXG4gNTExOlxcdFxcdFxcdFxcdCAqIHByb3BhZ2F0ZSBpdCB0byBza2lwIFNDQyBmaW5hbGlzYXRpb24uXFxuIDUxMjpcXHRcXHRcXHRcXHQgKi9cXG4gNTEzOlxcdFxcdFxcdFxcdHZlcnRleC1cXHUwMDNlc2NjX2luZGV4ID0gbWluKHZlcnRleC1cXHUwMDNlc2NjX2luZGV4LCBuZXh0X3ZlcnRleC1cXHUwMDNlc2NjX2luZGV4KTtcXG4gNTE0OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDUxNTpcXHRcXHRcXHRcXHQvKiBUaGUgc3VjY2Vzc29yIHdhcyBhbHJlYWR5IGdyb3VwZWQgYXMgYW5vdGhlciBTQ0MgKi9cXG4gNTE2OlxcdFxcdFxcdH1cXG4gNTE3OlxcdFxcdH1cXG4gNTE4OlxcdFxcbiA1MTk6XFx0XFx0aWYgKHZlcnRleC1cXHUwMDNlaW5kZXggPT0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXgpIHtcXG4gNTIwOlxcdFxcdFxcdHN0cnVjdCB1bml4X3ZlcnRleCAqdjtcXG4gNTIxOlxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgc2NjO1xcbiA1MjI6XFx0XFxuIDUyMzpcXHRcXHRcXHQvKiBTQ0MgZmluYWxpc2VkLlxcbiA1MjQ6XFx0XFx0XFx0ICpcXG4gNTI1OlxcdFxcdFxcdCAqIElmIHRoZSBzY2NfaW5kZXggd2FzIG5vdCB1cGRhdGVkLCBhbGwgdGhlIHZlcnRpY2VzIGFib3ZlIG9uXFxuIDUyNjpcXHRcXHRcXHQgKiB2ZXJ0ZXhfc3RhY2sgYXJlIGluIHRoZSBzYW1lIFNDQy4gIEdyb3VwIHRoZW0gdXNpbmcgc2NjX2VudHJ5LlxcbiA1Mjc6XFx0XFx0XFx0ICovXFxuIDUyODpcXHRcXHRcXHRfX2xpc3RfY3V0X3Bvc2l0aW9uKFxcdTAwMjZzY2MsIFxcdTAwMjZ2ZXJ0ZXhfc3RhY2ssIFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZXNjY19lbnRyeSk7XFxuIDUyOTpcXHRcXG4gNTMwOlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZSh2LCBcXHUwMDI2c2NjLCBzY2NfZW50cnkpIHtcXG4gNTMxOlxcdFxcdFxcdFxcdC8qIE1hcmsgdmVydGV4IGFzIG9mZi1zdGFjayBhbmQgYXNzaWduIGEgdW5pcXVlIElELiAqL1xcbiA1MzI6XFx0XFx0XFx0XFx0di1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xcbiA1MzM6XFx0XFx0XFx0XFx0di1cXHUwMDNlc2NjX2luZGV4ID0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXg7XFxuIDUzNDpcXHRcXHRcXHR9XFxuIDUzNTpcXHRcXG4gNTM2OlxcdFxcdFxcdGlmICh1bml4X3NjY19kZWFkKFxcdTAwMjZzY2MpKSB7XFxuIDUzNzpcXHRcXHRcXHRcXHR1bml4X2NvbGxlY3Rfc2tiKFxcdTAwMjZzY2MsIGhpdGxpc3QpO1xcbiA1Mzg6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNTM5OlxcdFxcdFxcdFxcdGlmICh1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4IFxcdTAwM2MgdmVydGV4LVxcdTAwM2VzY2NfaW5kZXgpXFxuIDU0MDpcXHRcXHRcXHRcXHRcXHR1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4ID0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXg7XFxuIDU0MTpcXHRcXG4gNTQyOlxcdFxcdFxcdFxcdGlmICh1bml4X3NjY19jeWNsaWMoXFx1MDAyNnNjYykpXFxuIDU0MzpcXHRcXHRcXHRcXHRcXHRjeWNsaWNfc2NjcysrO1xcbiA1NDQ6XFx0XFx0XFx0fVxcbiA1NDU6XFx0XFxuIDU0NjpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2c2NjKTtcXG4gNTQ3OlxcdFxcdH1cXG4gNTQ4OlxcdFxcbiA1NDk6XFx0XFx0LyogTmVlZCBiYWNrdHJhY2tpbmcgPyAqL1xcbiA1NTA6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZlZGdlX3N0YWNrKSlcXG4gNTUxOlxcdFxcdFxcdGdvdG8gcHJldl92ZXJ0ZXg7XFxuIDU1MjpcXHRcXG4gNTUzOlxcdFxcdHJldHVybiBjeWNsaWNfc2NjcztcXG4gNTU0OlxcdH1cXG4gNTU1OlxcdFxcbiA1NTY6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF9ncmFwaF9jeWNsaWNfc2NjcztcXG4gNTU3OlxcdFxcbiA1NTg6XFx0c3RhdGljIHZvaWQgdW5peF93YWxrX3NjYyhzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxcbiA1NTk6XFx0e1xcbiA1NjA6XFx0XFx0dW5zaWduZWQgbG9uZyBsYXN0X2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfU1RBUlQ7XFxuIDU2MTpcXHRcXHR1bnNpZ25lZCBsb25nIGN5Y2xpY19zY2NzID0gMDtcXG4gNTYyOlxcdFxcbiA1NjM6XFx0XFx0dW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX1NUQVJUO1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHQvKiBWaXNpdCBldmVyeSB2ZXJ0ZXggZXhhY3RseSBvbmNlLlxcbiA1NjY6XFx0XFx0ICogX191bml4X3dhbGtfc2NjKCkgbW92ZXMgdmlzaXRlZCB2ZXJ0aWNlcyB0byB1bml4X3Zpc2l0ZWRfdmVydGljZXMuXFxuIDU2NzpcXHRcXHQgKi9cXG4gNTY4OlxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShcXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpKSB7XFxuIDU2OTpcXHRcXHRcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcXG4gNTcwOlxcdFxcbiA1NzE6XFx0XFx0XFx0dmVydGV4ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMsIHR5cGVvZigqdmVydGV4KSwgZW50cnkpO1xcbiA1NzI6XFx0XFx0XFx0Y3ljbGljX3NjY3MgKz0gX191bml4X3dhbGtfc2NjKHZlcnRleCwgXFx1MDAyNmxhc3RfaW5kZXgsIGhpdGxpc3QpO1xcbiA1NzM6XFx0XFx0fVxcbiA1NzQ6XFx0XFxuIDU3NTpcXHRcXHRsaXN0X3JlcGxhY2VfaW5pdChcXHUwMDI2dW5peF92aXNpdGVkX3ZlcnRpY2VzLCBcXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpO1xcbiA1NzY6XFx0XFx0c3dhcCh1bml4X3ZlcnRleF91bnZpc2l0ZWRfaW5kZXgsIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXgpO1xcbiA1Nzc6XFx0XFxuIDU3ODpcXHRcXHRXUklURV9PTkNFKHVuaXhfZ3JhcGhfY3ljbGljX3NjY3MsIGN5Y2xpY19zY2NzKTtcXG4gNTc5OlxcdFxcdFdSSVRFX09OQ0UodW5peF9ncmFwaF9zdGF0ZSxcXG4gNTgwOlxcdFxcdFxcdCAgIGN5Y2xpY19zY2NzID8gVU5JWF9HUkFQSF9DWUNMSUMgOiBVTklYX0dSQVBIX05PVF9DWUNMSUMpO1xcbiA1ODE6XFx0fVxcbiA1ODI6XFx0XFxuIDU4MzpcXHRzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjX2Zhc3Qoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcXG4gNTg0OlxcdHtcXG4gNTg1OlxcdFxcdHVuc2lnbmVkIGxvbmcgY3ljbGljX3NjY3MgPSB1bml4X2dyYXBoX2N5Y2xpY19zY2NzO1xcbiA1ODY6XFx0XFxuIDU4NzpcXHRcXHR3aGlsZSAoIWxpc3RfZW1wdHkoXFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzKSkge1xcbiA1ODg6XFx0XFx0XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XFxuIDU4OTpcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIHNjYztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6NTcuMzgyMjEwMTY0WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxMzA5MzEwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGB1bml4X3dhbGtfc2NjX2Zhc3RgIHdvcmtzLCBhbmQgdG8gZG8gdGhhdCwgSSBuZWVkIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBTbywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXM6XG5cbioqR3JhYmJpbmcgdGhlIEJpZyBQaWN0dXJlOiBgdW5peF93YWxrX3NjY19mYXN0YCoqXG5cbkkgbmVlZCB0byBzZWUgdGhlICpyZXN0KiBvZiB0aGUgZnVuY3Rpb24uICBJIGNhbid0IHRydWx5IGFuYWx5emUgYHVuaXhfd2Fsa19zY2NfZmFzdGAgaW4gaXNvbGF0aW9uLiBVbmRlcnN0YW5kaW5nIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBicm9hZGVyIGNvZGUgYW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgb3ZlcmFsbCBhbGdvcml0aG0gaXMgY3JpdGljYWwuIFdoYXQncyBpdCBjYWxsaW5nPyBXaGF0IGNhbGxzIGl0PyBXaGF0J3MgaXRzIGdvYWwgaW4gdGhlIGxhcmdlciBzY2hlbWUgb2YgdGhpbmdzPyBUaGUgb3RoZXIgbGluZXMgb2YgY29kZSB3aWxsIG9mZmVyIHRoZSBpbXBvcnRhbnQgY29udGV4dCBJIG5lZWQgdG8gZ2FpbiBleHBlcnRpc2Ugb24gdGhpcyBmdW5jdGlvbi4gVGhpcyBpcyBob3cgSSdtIGdvaW5nIHRvIGRldGVybWluZSBpdHMgcHVycG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM0NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6NTkuNTEzMTQ1MDYyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9nYXJiYWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTgwOlxcdFxcdFxcdCAgIGN5Y2xpY19zY2NzID8gVU5JWF9HUkFQSF9DWUNMSUMgOiBVTklYX0dSQVBIX05PVF9DWUNMSUMpO1xcbiA1ODE6XFx0fVxcbiA1ODI6XFx0XFxuIDU4MzpcXHRzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjX2Zhc3Qoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcXG4gNTg0OlxcdHtcXG4gNTg1OlxcdFxcdHVuc2lnbmVkIGxvbmcgY3ljbGljX3NjY3MgPSB1bml4X2dyYXBoX2N5Y2xpY19zY2NzO1xcbiA1ODY6XFx0XFxuIDU4NzpcXHRcXHR3aGlsZSAoIWxpc3RfZW1wdHkoXFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzKSkge1xcbiA1ODg6XFx0XFx0XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XFxuIDU4OTpcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIHNjYztcXG4gNTkwOlxcdFxcbiA1OTE6XFx0XFx0XFx0dmVydGV4ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMsIHR5cGVvZigqdmVydGV4KSwgZW50cnkpO1xcbiA1OTI6XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNnNjYywgXFx1MDAyNnZlcnRleC1cXHUwMDNlc2NjX2VudHJ5KTtcXG4gNTkzOlxcdFxcbiA1OTQ6XFx0XFx0XFx0aWYgKHVuaXhfc2NjX2RlYWQoXFx1MDAyNnNjYykpIHtcXG4gNTk1OlxcdFxcdFxcdFxcdGN5Y2xpY19zY2NzLS07XFxuIDU5NjpcXHRcXHRcXHRcXHR1bml4X2NvbGxlY3Rfc2tiKFxcdTAwMjZzY2MsIGhpdGxpc3QpO1xcbiA1OTc6XFx0XFx0XFx0fVxcbiA1OTg6XFx0XFxuIDU5OTpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2c2NjKTtcXG4gNjAwOlxcdFxcdH1cXG4gNjAxOlxcdFxcbiA2MDI6XFx0XFx0bGlzdF9yZXBsYWNlX2luaXQoXFx1MDAyNnVuaXhfdmlzaXRlZF92ZXJ0aWNlcywgXFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzKTtcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0XFx0V1JJVEVfT05DRSh1bml4X2dyYXBoX2N5Y2xpY19zY2NzLCBjeWNsaWNfc2Njcyk7XFxuIDYwNTpcXHRcXHRXUklURV9PTkNFKHVuaXhfZ3JhcGhfc3RhdGUsXFxuIDYwNjpcXHRcXHRcXHQgICBjeWNsaWNfc2NjcyA/IFVOSVhfR1JBUEhfQ1lDTElDIDogVU5JWF9HUkFQSF9OT1RfQ1lDTElDKTtcXG4gNjA3OlxcdH1cXG4gNjA4OlxcdFxcbiA2MDk6XFx0c3RhdGljIHZvaWQgdW5peF9nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDYxMDpcXHR7XFxuIDYxMTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGhpdGxpc3Q7XFxuIDYxMjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiA2MTM6XFx0XFxuIDYxNDpcXHRcXHRXUklURV9PTkNFKGdjX2luX3Byb2dyZXNzLCB0cnVlKTtcXG4gNjE1OlxcdFxcbiA2MTY6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ1bml4X2djX2xvY2spO1xcbiA2MTc6XFx0XFxuIDYxODpcXHRcXHRpZiAodW5peF9ncmFwaF9zdGF0ZSA9PSBVTklYX0dSQVBIX05PVF9DWUNMSUMpIHtcXG4gNjE5OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ1bml4X2djX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDo1OS41MTMzMTM5MjFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAwMzg3MDg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgaWYgdGhleSBhcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbW1pdCBIaXN0b3J5KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhpcyBwYXJ0aWN1bGFyIGNvbW1pdC4gTXkgZmlyc3QgaW5jbGluYXRpb24gaXMgYWx3YXlzIHRvIGRpdmUgaW50byB0aGUgYGdpdCBsb2dgLiBJZiB0aGUgZW52aXJvbm1lbnQgYWxsb3dzIGl0LCBJJ2xsIGV4ZWN1dGUgYGdpdCBsb2dgIHRvIGdldCBhIGZ1bGwgdmlldyBvZiB0aGUgY29tbWl0IGhpc3RvcnksIG1heWJlIGZpbHRlcmluZyBpdCBpZiB0aGVyZSdzIGEgbG90IG9mIG5vaXNlLiBJZiBgZ2l0IGxvZ2AgaXNuJ3QgaW1tZWRpYXRlbHkgYWNjZXNzaWJsZSwgb3IgSSdtIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBzcGVjaWZpYyBxdWlja2x5LCBJJ2xsIHR1cm4gdG8gYSBncmVwcGVyIG9yIHNpbWlsYXIgdG9vbCB0byBzZWFyY2ggdGhlIGxvZyBvdXRwdXQuIEFsdGVybmF0aXZlbHksIGlmIEkgKmNhbiogcnVuIGBnaXQgbG9nYCBvbiB0aGlzIHNwZWNpZmljIGNvbW1pdCBJIHdpbGw7IHRoaXMgbWlnaHQgYmUgdGhlIHF1aWNrZXN0IHJvdXRlLiBJIGNhbiBhbHNvIGNoZWNrIHRoZSBjb21taXQgbWVzc2FnZSBkaXJlY3RseS4gVW5kZXJzdGFuZGluZyAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZSBpcyBjcnVjaWFsLiBUaGlzIGhlbHBzIG1lIGdldCBhIGhhbmRsZSBvbiB3aGF0IG1pZ2h0IGhhdmUgYmVlbiBpbnRlbmRlZCBieSB0aGUgYXV0aG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTg1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNTowMS41MTcxODc0NTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTU2NDI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC91bml4L2dhcmJhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdW5peC9nYXJiYWdlLmM9Mzc0PXN0YXRpYyBMSVNUX0hFQUQodW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcXG5uZXQvdW5peC9nYXJiYWdlLmM6Mzc1OnN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMjtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMzc2LVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTQ1Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX3VuaXhfd2Fsa19zY2Moc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgsXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNTA1LVxcdFxcdFxcdHZlcnRleC1cXHUwMDNlc2NjX2luZGV4ID0gbWluKHZlcnRleC1cXHUwMDNlc2NjX2luZGV4LCBuZXh0X3ZlcnRleC1cXHUwMDNlc2NjX2luZGV4KTtcXG5uZXQvdW5peC9nYXJiYWdlLmM6NTA2OlxcdFxcdH0gZWxzZSBpZiAobmV4dF92ZXJ0ZXgtXFx1MDAzZWluZGV4ICE9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXgpIHtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNTA3LVxcdFxcdFxcdC8qIExvb3AgZGV0ZWN0ZWQgYnkgYSBiYWNrL2Nyb3NzIGVkZ2UuXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNTMxLVxcdFxcdFxcdC8qIE1hcmsgdmVydGV4IGFzIG9mZi1zdGFjayBhbmQgYXNzaWduIGEgdW5pcXVlIElELiAqL1xcbm5ldC91bml4L2dhcmJhZ2UuYzo1MzI6XFx0XFx0XFx0di1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xcbm5ldC91bml4L2dhcmJhZ2UuYy01MzMtXFx0XFx0XFx0di1cXHUwMDNlc2NjX2luZGV4ID0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXg7XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9NTU4PXN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2Moc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy01NzUtXFx0bGlzdF9yZXBsYWNlX2luaXQoXFx1MDAyNnVuaXhfdmlzaXRlZF92ZXJ0aWNlcywgXFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzKTtcXG5uZXQvdW5peC9nYXJiYWdlLmM6NTc2OlxcdHN3YXAodW5peF92ZXJ0ZXhfdW52aXNpdGVkX2luZGV4LCB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4KTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNTc3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNTowMS42Mzg3NTcxOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3OTEyNTQyNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVW5peCBTb2NrZXQgR2FyYmFnZSBDb2xsZWN0aW9uIE9wdGltaXphdGlvbiBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGl0IHNlZW1zIGxpa2UgYSBjaGFuZ2Ugd2FzIG1hZGUgaW4gYGdhcmJhZ2UuY2AgdGhhdCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgVGFyamFuJ3MgU3Ryb25nbHkgQ29ubmVjdGVkIENvbXBvbmVudHMgKFNDQykgYWxnb3JpdGhtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIFVuaXggc29ja2V0IGdhcmJhZ2UgY29sbGVjdGlvbi4gIFByZXZpb3VzbHksIGB1bml4X3NjY19kZWFkKClgIGhhbmRsZWQgbWFya2luZyBub2RlcyBpbiBhbiBTQ0MgYXMgXCJvZmYtc3RhY2tcIiBieSBzZXR0aW5nIHRoZWlyIGBpbmRleGAgZmllbGQuIE5vdywgdGhhdCdzIGJlZW4gbW92ZWQuICBJbnN0ZWFkIG9mIGB1bml4X3NjY19kZWFkYCwgd2Ugbm93IGhhdmUgYF9fdW5peF93YWxrX3NjYygpYCBzZXR0aW5nIGB2LVx1MDAzZWluZGV4YCBhbmQgYHYtXHUwMDNlc2NjX2luZGV4YCAqYmVmb3JlKiBjYWxsaW5nIGB1bml4X3NjY19kZWFkKClgLCB3aXRoaW4gdGhlIGxvb3AgaXRlcmF0aW5nIHRocm91Z2ggU0NDIG1lbWJlcnMuICBgdW5peF93YWxrX3NjY19mYXN0KClgIGp1c3QgY2FsbHMgYHVuaXhfc2NjX2RlYWQoKWAuXG5cblRoZSBpbXBvcnRhbnQgcG9pbnQgaXMgKndoeSogdGhpcyBjaGFuZ2UuIEl0IHNlZW1zIHRoZSBwcmlvciBtZXRob2QgaGFkIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIG1pc3NlZCBhc3NpZ25tZW50IG9mIGBzY2NfaW5kZXhgLiAgVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGhhZCBhIHByb2JsZW0gcmVsYXRlZCB0byB3aGVuIGEgbm9kZSB3YXMgcGFydCBvZiBhbiBTQ0MgYW5kIHRoYXQgU0NDIGhhZCBhbHJlYWR5IGJlZW4gZmluYWxpemVkIGFuZCBwb3BwZWQgb2ZmIHRoZSBzdGFjaywgYW5kIHRoZSBhc3NvY2lhdGVkIGluZGV4IHZhbHVlIHdhc24ndCBhc3NpZ25lZCBjb3JyZWN0bHkuIE5vdywgc2V0dGluZyBgdi1cdTAwM2VzY2NfaW5kZXggPSB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4YCBleHBsaWNpdGx5IGFzc2lnbnMgdGhlIFNDQyAqcm9vdCdzKiBpbmRleCB0byBhbGwgdmVydGljZXMsIHdoaWNoIGVuc3VyZXMgY29uc2lzdGVuY3kgYW5kIGF2b2lkcyBwb3RlbnRpYWwgaXNzdWVzIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb3RoZXIgaW5kaWNlcywgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGBtaXhlZF9sb3dwb2ludGAgdGVzdCBpbiBgc2NtX3JpZ2h0cy5jYC4gIFNvLCB0aGlzIG9wdGltaXphdGlvbiBhcHBlYXJzIHRvIGJlIGZpeGluZyBhIHN1YnRsZSwgYnV0IHBvdGVudGlhbGx5IGNyaXRpY2FsLCBidWcgdGhhdCBjb3VsZCBsZWFkIHRvIG1pc2lkZW50aWZpY2F0aW9uIG9mIFNDQ3MgYW5kLCBjb25zZXF1ZW50bHksIGluY29ycmVjdCBnYXJiYWdlIGNvbGxlY3Rpb24uXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGNoYW5nZSByZXF1aXJlIGEgS01TQU4gY2hlY2s/IExldCdzIHJlZnJlc2ggdGhlIHJ1bGVzOiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpzcGVjaWZpY2FsbHkqIGluIHRoZSBrZXJuZWwgYW5kIHByZXZlbnRpbmcga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuICBXZSBvbmx5IG5lZWQgaXQgaWYgdGhlIGNvZGUgY2hhbmdlcyB0b3VjaCBhcmVhcyB3aGVyZSBzdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOLCBMT0NLREVQLCBvciBvdGhlciBkZWJ1Z2dlcnMgd29uJ3QgY2F0Y2ggdGhlIHByb2JsZW0uXG5cblRoZSBydWxlcyBzcGVjaWZ5IHRoYXQgd2Ugc2hvdWxkIHNldCBgTmVlZHNLTVNBTj10cnVlYCBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBjaGFuZ2VzIHRvIGtlcm5lbCBzdHJ1Y3R1cmVzICpzZW50IHRvIHVzZXIgc3BhY2UqLCBjb25kaXRpb25hbCBsb2dpYyBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHRoZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGxlYWRpbmcgdG8gdW5pbml0aWFsaXplZCByZWFkcyBsYXRlciwgb3IgdGhlIHdheXMgYm91bmRzIGNoZWNrcy9sZW5ndGhzIGFyZSBwZXJmb3JtZWQgcG90ZW50aWFsbHkgbGVhZGluZyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuXG5cbkNvbnZlcnNlbHksIGlmIHRoZSBwYXRjaCBwcmltYXJpbHkgaW52b2x2ZXMgdGhpbmdzIGFscmVhZHkgaGFuZGxlZCBieSBLQVNBTi9MT0NLREVQLCBvciBpZiBhbnkgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkLCB0aGVuIGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuTGV0J3MgYXBwbHkgdGhlc2UgcnVsZXMgdG8gdGhpcyBwYXRjaC5cblxuMS4gKipEb2VzIHRoaXMgcGF0Y2ggdG91Y2ggYW55dGhpbmcgY29waWVkIHRvIHVzZXJzcGFjZT8qKiBOby4gSXQncyBjb25maW5lZCB0byB0aGUgVW5peCBzb2NrZXQgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbS4gIFRoaXMgaXMgYSBnb29kIHNpZ24uXG4yLiAqKkRvZXMgaXQgaW50cm9kdWNlIG9yIHRvdWNoIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIEEgbmV3IGxvb3AgaXRlcmF0b3IsIGB2YCwgaXMgaW50cm9kdWNlZC4gSG93ZXZlciwgYHZgIGlzIHBvcHVsYXRlZCBieSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlYCwgc28gaXQncyBpbml0aWFsaXplZCBkdXJpbmcgaXRlcmF0aW9uLiBUaGVuLCB0aGUgcGF0Y2ggd3JpdGVzIHRoZSBmaWVsZHMgYGluZGV4YCBhbmQgYHNjY19pbmRleGAuIFRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgYWJvdXQgdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIGBzdHJ1Y3QgdW5peF92ZXJ0ZXhgLlxuXG5TbywgdGhlIGNyaXRpY2FsIGNoZWNrIGlzIG9uIHRoZSBmaWVsZHMgYGluZGV4YCBhbmQgYHNjY19pbmRleGAsIGFuZCB0aGUgYHN0cnVjdCB1bml4X3ZlcnRleGAgaXRzZWxmLiBJJ20gcmVhc29uYWJseSBjb25maWRlbnQgaW4gdGhpcyBjYXNlIHRoYXQgdGhlIGBzdHJ1Y3QgdW5peF92ZXJ0ZXhgIGlzIGFsbG9jYXRlZCBhbmQgKmluaXRpYWxpemVkKiBlbHNld2hlcmUgYmVjYXVzZSB3ZSdyZSBsb29raW5nIGF0IGdhcmJhZ2UgY29sbGVjdGlvbiwgYW5kIHRoZXNlIHN0cnVjdHVyZXMgYXJlICptYW5hZ2VkKiBhbmQgbW9kaWZpZWQsIG5vdCBjcmVhdGVkIHdob2xlc2FsZSBpbiB0aGlzIGNvZGUuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGNoYW5nZSBwcmltYXJpbHkgaW52b2x2ZXMgY29ycmVjdGx5IHVwZGF0aW5nIGV4aXN0aW5nIHN0cnVjdHVyZXMgd2l0aGluIGFuIFNDQywgYW5kIGRvZXNuJ3Qgc2VlbSB0byBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCAqKkkgd291bGQgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcyBwYXRjaC4qKiAgSXQncyBsaWtlbHkgdGhhdCBhbnkgaXNzdWVzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgZHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSBhbmQgdGhlIGV4aXN0aW5nIGxpZmVjeWNsZSBvZiB0aGVzZSB2ZXJ0ZXggc3RydWN0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg1NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDU6MDkuNTUxMzAxODk3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc0MDg4NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVuaXhfdmVydGV4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC91bml4L2dhcmJhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdW5peC9nYXJiYWdlLmMtNzYtXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjc3OnN0cnVjdCB1bml4X3ZlcnRleCB7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTc4LVxcdHN0cnVjdCBsaXN0X2hlYWQgZWRnZXM7XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9OTM9c3RydWN0IHVuaXhfc29jayAqdW5peF9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTExMi1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MTEzOnN0YXRpYyBzdHJ1Y3QgdW5peF92ZXJ0ZXggKnVuaXhfZWRnZV9zdWNjZXNzb3Ioc3RydWN0IHVuaXhfZWRnZSAqZWRnZSlcXG5uZXQvdW5peC9nYXJiYWdlLmMtMTE0LXtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYz0xMzA9c3RhdGljIHVuc2lnbmVkIGNoYXIgdW5peF9ncmFwaF9zdGF0ZTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMTMxLVxcbm5ldC91bml4L2dhcmJhZ2UuYzoxMzI6c3RhdGljIHZvaWQgdW5peF91cGRhdGVfZ3JhcGgoc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTEzMy17XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9MTQzPXN0YXRpYyBMSVNUX0hFQUQodW5peF91bnZpc2l0ZWRfdmVydGljZXMpO1xcbm5ldC91bml4L2dhcmJhZ2UuYy0xNDQtXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjE0NTplbnVtIHVuaXhfdmVydGV4X2luZGV4IHtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMTQ2LVxcdFVOSVhfVkVSVEVYX0lOREVYX01BUksxLFxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTE1MC1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MTUxOnN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X3VudmlzaXRlZF9pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX01BUksxO1xcbm5ldC91bml4L2dhcmJhZ2UuYzoxNTI6c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX1NUQVJUO1xcbm5ldC91bml4L2dhcmJhZ2UuYy0xNTMtXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTE1ND1zdGF0aWMgdm9pZCB1bml4X2FkZF9lZGdlKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsLCBzdHJ1Y3QgdW5peF9lZGdlICplZGdlKVxcbm5ldC91bml4L2dhcmJhZ2UuYy0xNTUte1xcbm5ldC91bml4L2dhcmJhZ2UuYzoxNTY6XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXggPSBlZGdlLVxcdTAwM2VwcmVkZWNlc3Nvci1cXHUwMDNldmVydGV4O1xcbm5ldC91bml4L2dhcmJhZ2UuYy0xNTctXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtMTU5LVxcdFxcdHZlcnRleCA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNmZwbC1cXHUwMDNldmVydGljZXMsIHR5cGVvZigqdmVydGV4KSwgZW50cnkpO1xcbm5ldC91bml4L2dhcmJhZ2UuYzoxNjA6XFx0XFx0dmVydGV4LVxcdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X3VudmlzaXRlZF9pbmRleDtcXG5uZXQvdW5peC9nYXJiYWdlLmM6MTYxOlxcdFxcdHZlcnRleC1cXHUwMDNlc2NjX2luZGV4ID0gKyt1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4O1xcbm5ldC91bml4L2dhcmJhZ2UuYy0xNjItXFx0XFx0dmVydGV4LVxcdTAwM2VvdXRfZGVncmVlID0gMDtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYz0xNzY9c3RhdGljIHZvaWQgdW5peF9kZWxfZWRnZShzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbCwgc3RydWN0IHVuaXhfZWRnZSAqZWRnZSlcXG5uZXQvdW5peC9nYXJiYWdlLmMtMTc3LXtcXG5uZXQvdW5peC9nYXJiYWdlLmM6MTc4OlxcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4ID0gZWRnZS1cXHUwMDNlcHJlZGVjZXNzb3ItXFx1MDAzZXZlcnRleDtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMTc5LVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTE5Mz1zdGF0aWMgdm9pZCB1bml4X2ZyZWVfdmVydGljZXMoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTE5NC17XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjE5NTpcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleCwgKm5leHRfdmVydGV4O1xcbm5ldC91bml4L2dhcmJhZ2UuYy0xOTYtXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9MjgzPWludCB1bml4X3ByZXBhcmVfZnBsKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKVxcbm5ldC91bml4L2dhcmJhZ2UuYy0yODQte1xcbm5ldC91bml4L2dhcmJhZ2UuYzoyODU6XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTI4Ni1cXHRpbnQgaTtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYz0zMjU9dm9pZCB1bml4X3BlZWtfZnBsKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTMzNC1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MzM1OlxcdC8qIEludmFsaWRhdGUgdGhlIGZpbmFsIHJlZmNudCBjaGVjayBpbiB1bml4X3ZlcnRleF9kZWFkKCkuICovXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTMzNi1cXHRzcGluX2xvY2soXFx1MDAyNnVuaXhfcGVla19sb2NrKTtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy0zNDAtXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjM0MTpzdGF0aWMgYm9vbCB1bml4X3ZlcnRleF9kZWFkKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4KVxcbm5ldC91bml4L2dhcmJhZ2UuYy0zNDIte1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTM0Ny1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVkZ2UsIFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZWVkZ2VzLCB2ZXJ0ZXhfZW50cnkpIHtcXG5uZXQvdW5peC9nYXJiYWdlLmM6MzQ4OlxcdFxcdHN0cnVjdCB1bml4X3ZlcnRleCAqbmV4dF92ZXJ0ZXggPSB1bml4X2VkZ2Vfc3VjY2Vzc29yKGVkZ2UpO1xcbm5ldC91bml4L2dhcmJhZ2UuYy0zNDktXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9Mzc0PXN0YXRpYyBMSVNUX0hFQUQodW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcXG5uZXQvdW5peC9nYXJiYWdlLmM6Mzc1OnN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMjtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMzc2LVxcbm5ldC91bml4L2dhcmJhZ2UuYz0zNzc9c3RhdGljIGJvb2wgdW5peF9zY2NfZGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpzY2MpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTM3OC17XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjM3OTpcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMzgwLVxcdGJvb2wgc2NjX2RlYWQgPSB0cnVlO1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTM4OS1cXHRcXHRpZiAoc2NjX2RlYWQpXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjM5MDpcXHRcXHRcXHRzY2NfZGVhZCA9IHVuaXhfdmVydGV4X2RlYWQodmVydGV4KTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMzkxLVxcdH1cXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYz00MDA9c3RhdGljIHZvaWQgdW5peF9jb2xsZWN0X3NrYihzdHJ1Y3QgbGlzdF9oZWFkICpzY2MsIHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQwMS17XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjQwMjpcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNDAzLVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTQzMz1zdGF0aWMgYm9vbCB1bml4X3NjY19jeWNsaWMoc3RydWN0IGxpc3RfaGVhZCAqc2NjKVxcbm5ldC91bml4L2dhcmJhZ2UuYy00MzQte1xcbm5ldC91bml4L2dhcmJhZ2UuYzo0MzU6XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQzNi1cXHRzdHJ1Y3QgdW5peF9lZGdlICplZGdlO1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ1Mi1cXG5uZXQvdW5peC9nYXJiYWdlLmM6NDUzOnN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdW5peF93YWxrX3NjYyhzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleCxcXG5uZXQvdW5peC9nYXJiYWdlLmMtNDU0LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9pbmRleCxcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy00NzQtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlZGdlLCBcXHUwMDI2dmVydGV4LVxcdTAwM2VlZGdlcywgdmVydGV4X2VudHJ5KSB7XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjQ3NTpcXHRcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKm5leHRfdmVydGV4ID0gdW5peF9lZGdlX3N1Y2Nlc3NvcihlZGdlKTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNDc2LVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ3OS1cXG5uZXQvdW5peC9nYXJiYWdlLmM6NDgwOlxcdFxcdGlmIChuZXh0X3ZlcnRleC1cXHUwMDNlaW5kZXggPT0gdW5peF92ZXJ0ZXhfdW52aXNpdGVkX2luZGV4KSB7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ4MS1cXHRcXHRcXHQvKiBJdGVyYXRpdmUgZGVlcGVuaW5nIGRlcHRoIGZpcnN0IHNlYXJjaFxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTUwNS1cXHRcXHRcXHR2ZXJ0ZXgtXFx1MDAzZXNjY19pbmRleCA9IG1pbih2ZXJ0ZXgtXFx1MDAzZXNjY19pbmRleCwgbmV4dF92ZXJ0ZXgtXFx1MDAzZXNjY19pbmRleCk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjUwNjpcXHRcXHR9IGVsc2UgaWYgKG5leHRfdmVydGV4LVxcdTAwM2VpbmRleCAhPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4KSB7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTUwNy1cXHRcXHRcXHQvKiBMb29wIGRldGVjdGVkIGJ5IGEgYmFjay9jcm9zcyBlZGdlLlxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTUxOS1cXHRpZiAodmVydGV4LVxcdTAwM2VpbmRleCA9PSB2ZXJ0ZXgtXFx1MDAzZXNjY19pbmRleCkge1xcbm5ldC91bml4L2dhcmJhZ2UuYzo1MjA6XFx0XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2O1xcbm5ldC91bml4L2dhcmJhZ2UuYy01MjEtXFx0XFx0c3RydWN0IGxpc3RfaGVhZCBzY2M7XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNTMxLVxcdFxcdFxcdC8qIE1hcmsgdmVydGV4IGFzIG9mZi1zdGFjayBhbmQgYXNzaWduIGEgdW5pcXVlIElELiAqL1xcbm5ldC91bml4L2dhcmJhZ2UuYzo1MzI6XFx0XFx0XFx0di1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xcbm5ldC91bml4L2dhcmJhZ2UuYy01MzMtXFx0XFx0XFx0di1cXHUwMDNlc2NjX2luZGV4ID0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXg7XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNTM4LVxcdFxcdH0gZWxzZSB7XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjUzOTpcXHRcXHRcXHRpZiAodW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCBcXHUwMDNjIHZlcnRleC1cXHUwMDNlc2NjX2luZGV4KVxcbm5ldC91bml4L2dhcmJhZ2UuYzo1NDA6XFx0XFx0XFx0XFx0dW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCA9IHZlcnRleC1cXHUwMDNlc2NjX2luZGV4O1xcbm5ldC91bml4L2dhcmJhZ2UuYy01NDEtXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9NTU4PXN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2Moc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy01NjItXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjU2MzpcXHR1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfU1RBUlQ7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTU2NC1cXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy01NjgtXFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcykpIHtcXG5uZXQvdW5peC9nYXJiYWdlLmM6NTY5OlxcdFxcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4O1xcbm5ldC91bml4L2dhcmJhZ2UuYy01NzAtXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNTc1LVxcdGxpc3RfcmVwbGFjZV9pbml0KFxcdTAwMjZ1bml4X3Zpc2l0ZWRfdmVydGljZXMsIFxcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcyk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjU3NjpcXHRzd2FwKHVuaXhfdmVydGV4X3VudmlzaXRlZF9pbmRleCwgdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTU3Ny1cXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYz01ODM9c3RhdGljIHZvaWQgdW5peF93YWxrX3NjY19mYXN0KHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNTg3LVxcdHdoaWxlICghbGlzdF9lbXB0eShcXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpKSB7XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjU4ODpcXHRcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNTg5LVxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgc2NjO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNToxMS4xMjU0MDIwMzNaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU4NDM4Nzc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIGBuZXQvdW5peGAgR2FyYmFnZSBDb2xsZWN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYHVuaXhfcHJlcGFyZV9mcGxgIGhhbmRsZXMgaXRzIHZlcnRleCBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgYG5ldC91bml4L2dhcmJhZ2UuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIHJlY2FsbCAqaG93KiB0aGUgYHVuaXhfdmVydGV4YCBzdHJ1Y3QgZ2V0cyBhbGxvY2F0ZWQsIGFuZCBJJ20gcHJldHR5IHN1cmUgaXQgaW52b2x2ZXMgYGt6YWxsb2NgLCBga2NhbGxvY2AsIG9yIHBvc3NpYmx5IGp1c3QgYGttYWxsb2NgLCBkZXBlbmRpbmcgb24gY2VydGFpbiBjb25kaXRpb25zLlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGxpbmVzIDI4MCB0aHJvdWdoIDMxMCBpbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZXhhY3QgYWxsb2NhdGlvbiBsb2dpYyBhbmQgcmVtaW5kIG1lIG9mIGFueSBudWFuY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIG9mIHRob3NlIHVuaXggZG9tYWluIHNvY2tldHMuIEl0J3MgdGltZSB0byByZWZyZXNoIHRoZSBzcGVjaWZpY3Mgb24gaG93IHRoaXMgcGFydCBpcyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQzOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA0OjA1OjEzLjcwOTc5MzAyOFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3VuaXgvZ2FyYmFnZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4MDpcXHRcXHR9XFxuIDI4MTpcXHR9XFxuIDI4MjpcXHRcXG4gMjgzOlxcdGludCB1bml4X3ByZXBhcmVfZnBsKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKVxcbiAyODQ6XFx0e1xcbiAyODU6XFx0XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XFxuIDI4NjpcXHRcXHRpbnQgaTtcXG4gMjg3OlxcdFxcbiAyODg6XFx0XFx0aWYgKCFmcGwtXFx1MDAzZWNvdW50X3VuaXgpXFxuIDI4OTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjkwOlxcdFxcbiAyOTE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZwbC1cXHUwMDNlY291bnRfdW5peDsgaSsrKSB7XFxuIDI5MjpcXHRcXHRcXHR2ZXJ0ZXggPSBrbWFsbG9jX29iaigqdmVydGV4KTtcXG4gMjkzOlxcdFxcdFxcdGlmICghdmVydGV4KVxcbiAyOTQ6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuIDI5NTpcXHRcXG4gMjk2OlxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZWVudHJ5LCBcXHUwMDI2ZnBsLVxcdTAwM2V2ZXJ0aWNlcyk7XFxuIDI5NzpcXHRcXHR9XFxuIDI5ODpcXHRcXG4gMjk5OlxcdFxcdGZwbC1cXHUwMDNlZWRnZXMgPSBrdm1hbGxvY19vYmpzKCpmcGwtXFx1MDAzZWVkZ2VzLCBmcGwtXFx1MDAzZWNvdW50X3VuaXgsXFxuIDMwMDpcXHRcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiAzMDE6XFx0XFx0aWYgKCFmcGwtXFx1MDAzZWVkZ2VzKVxcbiAzMDI6XFx0XFx0XFx0Z290byBlcnI7XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdHVuaXhfc2NoZWR1bGVfZ2MoZnBsLVxcdTAwM2V1c2VyKTtcXG4gMzA1OlxcdFxcbiAzMDY6XFx0XFx0cmV0dXJuIDA7XFxuIDMwNzpcXHRcXG4gMzA4OlxcdGVycjpcXG4gMzA5OlxcdFxcdHVuaXhfZnJlZV92ZXJ0aWNlcyhmcGwpO1xcbiAzMTA6XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMxMTpcXHR9XFxuIDMxMjpcXHRcXG4gMzEzOlxcdHZvaWQgdW5peF9kZXN0cm95X2ZwbChzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbClcXG4gMzE0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDU6MTMuNzA5OTUwOTE4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE1NTIxMDI4NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIFZlcnRleCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGhvdyB0aGVzZSBgdmVydGV4YCBmaWVsZHMgYXJlIGdldHRpbmcgaW5pdGlhbGl6ZWQuIExldCdzIHN0YXJ0IHdpdGggYHVuaXhfYWRkX2VkZ2VgLCBzb3VuZHMgbGlrZSBhIHJlYXNvbmFibGUgcGxhY2UgdG8gbG9vayBmb3IgZWRnZSBjcmVhdGlvbiwgYW5kIGJ5IGV4dGVuc2lvbiwgcG90ZW50aWFsbHkgdmVydGV4IHNldHVwLiBBbHJpZ2h0LCBsZXQncyB6b29tIGluIG9uIGxpbmVzIDE1MCB0aHJvdWdoIDE4MC4gVGhhdCdzIGEgZm9jdXNlZCByYW5nZTsgaG9wZWZ1bGx5LCBpdCBjb250YWlucyB0aGUganVpY3kgYml0cyBvZiBpbml0aWFsaXphdGlvbiBvciBhdCBsZWFzdCBwb2ludHMgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4gVGltZSB0byByZWFkIGFuZCBzZWUgd2hhdCB3ZSBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE4MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDU6MTUuMjYyMDU3OTg5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9nYXJiYWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcbiAxNTE6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfdW52aXNpdGVkX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfTUFSSzE7XFxuIDE1MjpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyB1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfU1RBUlQ7XFxuIDE1MzpcXHRcXG4gMTU0OlxcdHN0YXRpYyB2b2lkIHVuaXhfYWRkX2VkZ2Uoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwsIHN0cnVjdCB1bml4X2VkZ2UgKmVkZ2UpXFxuIDE1NTpcXHR7XFxuIDE1NjpcXHRcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleCA9IGVkZ2UtXFx1MDAzZXByZWRlY2Vzc29yLVxcdTAwM2V2ZXJ0ZXg7XFxuIDE1NzpcXHRcXG4gMTU4OlxcdFxcdGlmICghdmVydGV4KSB7XFxuIDE1OTpcXHRcXHRcXHR2ZXJ0ZXggPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZmcGwtXFx1MDAzZXZlcnRpY2VzLCB0eXBlb2YoKnZlcnRleCksIGVudHJ5KTtcXG4gMTYwOlxcdFxcdFxcdHZlcnRleC1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF91bnZpc2l0ZWRfaW5kZXg7XFxuIDE2MTpcXHRcXHRcXHR2ZXJ0ZXgtXFx1MDAzZXNjY19pbmRleCA9ICsrdW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleDtcXG4gMTYyOlxcdFxcdFxcdHZlcnRleC1cXHUwMDNlb3V0X2RlZ3JlZSA9IDA7XFxuIDE2MzpcXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dmVydGV4LVxcdTAwM2VlZGdlcyk7XFxuIDE2NDpcXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dmVydGV4LVxcdTAwM2VzY2NfZW50cnkpO1xcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2dmVydGV4LVxcdTAwM2VlbnRyeSwgXFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzKTtcXG4gMTY3OlxcdFxcdFxcdGVkZ2UtXFx1MDAzZXByZWRlY2Vzc29yLVxcdTAwM2V2ZXJ0ZXggPSB2ZXJ0ZXg7XFxuIDE2ODpcXHRcXHR9XFxuIDE2OTpcXHRcXG4gMTcwOlxcdFxcdHZlcnRleC1cXHUwMDNlb3V0X2RlZ3JlZSsrO1xcbiAxNzE6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZWRnZS1cXHUwMDNldmVydGV4X2VudHJ5LCBcXHUwMDI2dmVydGV4LVxcdTAwM2VlZGdlcyk7XFxuIDE3MjpcXHRcXG4gMTczOlxcdFxcdHVuaXhfdXBkYXRlX2dyYXBoKHVuaXhfZWRnZV9zdWNjZXNzb3IoZWRnZSkpO1xcbiAxNzQ6XFx0fVxcbiAxNzU6XFx0XFxuIDE3NjpcXHRzdGF0aWMgdm9pZCB1bml4X2RlbF9lZGdlKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsLCBzdHJ1Y3QgdW5peF9lZGdlICplZGdlKVxcbiAxNzc6XFx0e1xcbiAxNzg6XFx0XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXggPSBlZGdlLVxcdTAwM2VwcmVkZWNlc3Nvci1cXHUwMDNldmVydGV4O1xcbiAxNzk6XFx0XFxuIDE4MDpcXHRcXHRpZiAoIWZwbC1cXHUwMDNlZGVhZClcXG4gMTgxOlxcdFxcdFxcdHVuaXhfdXBkYXRlX2dyYXBoKHVuaXhfZWRnZV9zdWNjZXNzb3IoZWRnZSkpO1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRsaXN0X2RlbChcXHUwMDI2ZWRnZS1cXHUwMDNldmVydGV4X2VudHJ5KTtcXG4gMTg0OlxcdFxcdHZlcnRleC1cXHUwMDNlb3V0X2RlZ3JlZS0tO1xcbiAxODU6XFx0XFxuIDE4NjpcXHRcXHRpZiAoIXZlcnRleC1cXHUwMDNlb3V0X2RlZ3JlZSkge1xcbiAxODc6XFx0XFx0XFx0ZWRnZS1cXHUwMDNlcHJlZGVjZXNzb3ItXFx1MDAzZXZlcnRleCA9IE5VTEw7XFxuIDE4ODpcXHRcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2dmVydGV4LVxcdTAwM2VlbnRyeSwgXFx1MDAyNmZwbC1cXHUwMDNldmVydGljZXMpO1xcbiAxODk6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnZlcnRleC1cXHUwMDNlc2NjX2VudHJ5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDU6MTUuMjYyMjEzOTU5WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4ODA4MzQ3NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgc3RydWN0IHVuaXhfdmVydGV4YCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBzdHJ1Y3QgdW5peF92ZXJ0ZXhgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBkaXNzZWN0IGl0cyBtZW1iZXJzIHRvIHVuZGVyc3RhbmQgaG93IGl0IHJlcHJlc2VudHMgYSB2ZXJ0ZXggaW4gdGhpcyBVbml4LWJhc2VkIHN5c3RlbSwgbGlrZWx5IHdpdGhpbiBhIGdyYXBoIHN0cnVjdHVyZSwgb3IgcG9zc2libHkgcmVsYXRlZCB0byBmaWxlIHN5c3RlbSBtZXRhZGF0YSByZXByZXNlbnRhdGlvbi4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGl0cyBjb25uZWN0aW9ucywgaWYgYW55LiBJIGFudGljaXBhdGUgZmllbGRzIHRoYXQgZW5jb2RlIHRoaW5ncyBsaWtlIGlub2RlIG51bWJlcnMsIGRldmljZSBpZGVudGlmaWVycywgcG90ZW50aWFsbHkgZmlsZSBwZXJtaXNzaW9ucyBvciBhY2Nlc3MgdGltZXMgKGlmIHRoaXMgcGVydGFpbnMgdG8gYSBmaWxlIHN5c3RlbSBncmFwaCksIGFuZCBtYXliZSBldmVuIG5ldHdvcmsgYWRkcmVzc2VzIGlmIHRoaXMgc3lzdGVtIGludGVncmF0ZXMgbmV0d29yayBzZXJ2aWNlcy4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb246XG5cbiogICAqKkNvbm5lY3Rpdml0eSoqOiBEb2VzIHRoaXMgc3RydWN0dXJlIGRpcmVjdGx5IGhvbGQgcG9pbnRlcnMgb3IgaW5kaWNlcyB0byBhZGphY2VudCB2ZXJ0aWNlcywgYWxsb3dpbmcgZ3JhcGggdHJhdmVyc2FsP1xuKiAgICoqQXR0cmlidXRlcyoqOiBXaGF0IG1ldGFkYXRhIGlzIHN0b3JlZD8gSXMgaXQgYmFzaWMsIGxpa2UgaW5vZGUgYW5kIGRldmljZSBudW1iZXJzLCBvciBhcmUgdGhlcmUgcmljaGVyIGF0dHJpYnV0ZXM/XG4qICAgKipQdXJwb3NlKio6IFdoYXQgaXMgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtPyBJcyBpdCBleGNsdXNpdmVseSBmb3IgdGhlIGZpbGUgc3lzdGVtLCBvciBkb2VzIGl0IHJlcHJlc2VudCBvdGhlciBraW5kcyBvZiBVbml4IHJlc291cmNlcyAocHJvY2Vzc2VzLCBuZXR3b3JrIGVuZHBvaW50cywgZXRjLik/IEknbGwgYmUgbG9va2luZyBmb3IgaGludHMgaW4gdGhlIGNvbnRleHQgd2hlcmUgYHVuaXhfdmVydGV4YCBpcyBkZWNsYXJlZCBhbmQgdXNlZC5cbiogICAqKk9wdGltaXphdGlvbioqOiBXaGF0IGFyZSB0aGUgZGVzaWduIGNob2ljZXM/IEFueSBiaXRmaWVsZHMsIGFsaWdubWVudCBzdHJhdGVnaWVzLCBvciBwb3RlbnRpYWwgZm9yIGNhY2hpbmcvbGF6eSBsb2FkaW5nP1xuXG5UaGlzIGluZm9ybWF0aW9uIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgYHVuaXhfdmVydGV4YCByZXByZXNlbnRzIGEgY29tcG9uZW50IG9mIHRoZSBzeXN0ZW0gaXQgZGVzY3JpYmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAzNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDU6MTguMTQzMDUxNTY1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9nYXJiYWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAgNzE6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9hZl91bml4LmhcXHUwMDNlXFxuICA3MjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3NjbS5oXFx1MDAzZVxcbiAgNzM6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC90Y3Bfc3RhdGVzLmhcXHUwMDNlXFxuICA3NDpcXHRcXG4gIDc1OlxcdCNpbmNsdWRlIFxcXCJhZl91bml4LmhcXFwiXFxuICA3NjpcXHRcXG4gIDc3OlxcdHN0cnVjdCB1bml4X3ZlcnRleCB7XFxuICA3ODpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGVkZ2VzO1xcbiAgNzk6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBlbnRyeTtcXG4gIDgwOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgc2NjX2VudHJ5O1xcbiAgODE6XFx0XFx0dW5zaWduZWQgbG9uZyBvdXRfZGVncmVlO1xcbiAgODI6XFx0XFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG4gIDgzOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2NjX2luZGV4O1xcbiAgODQ6XFx0fTtcXG4gIDg1OlxcdFxcbiAgODY6XFx0c3RydWN0IHVuaXhfZWRnZSB7XFxuICA4NzpcXHRcXHRzdHJ1Y3QgdW5peF9zb2NrICpwcmVkZWNlc3NvcjtcXG4gIDg4OlxcdFxcdHN0cnVjdCB1bml4X3NvY2sgKnN1Y2Nlc3NvcjtcXG4gIDg5OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgdmVydGV4X2VudHJ5O1xcbiAgOTA6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBzdGFja19lbnRyeTtcXG4gIDkxOlxcdH07XFxuICA5MjpcXHRcXG4gIDkzOlxcdHN0cnVjdCB1bml4X3NvY2sgKnVuaXhfZ2V0X3NvY2tldChzdHJ1Y3QgZmlsZSAqZmlscClcXG4gIDk0OlxcdHtcXG4gIDk1OlxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApO1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHQvKiBTb2NrZXQgPyAqL1xcbiAgOTg6XFx0XFx0aWYgKFNfSVNTT0NLKGlub2RlLVxcdTAwM2VpX21vZGUpIFxcdTAwMjZcXHUwMDI2ICEoZmlscC1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfUEFUSCkpIHtcXG4gIDk5OlxcdFxcdFxcdHN0cnVjdCBzb2NrZXQgKnNvY2sgPSBTT0NLRVRfSShpbm9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA0OjA1OjE4LjE0MzE2ODUxNVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3OTYyMjUyODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IEFGX1VOSVggR2FyYmFnZSBDb2xsZWN0aW9uIE9wdGltaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBmb2N1c2VzIG9uIG9wdGltaXppbmcgdGhlIEFGX1VOSVggZ2FyYmFnZSBjb2xsZWN0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC91bml4L2dhcmJhZ2UuY2AuIEkgc2VlIHRoZXkncmUgbW92aW5nIHRoZSBhc3NpZ25tZW50IG9mIGBpbmRleGAgKG1hcmtpbmcgdmVydGljZXMgYXMgb2ZmLXN0YWNrKSBhbmQgdGhlIHVwZGF0ZSBvZiBgc2NjX2luZGV4YCBmcm9tIHRoZSBgdW5peF9zY2NfZGVhZCgpYCBmdW5jdGlvbiBpbnRvIGBfX3VuaXhfd2Fsa19zY2MoKWAuIFRoZXkndmUgYWxzbyByZW1vdmVkIHRoZSBgZmFzdGAgcGFyYW1ldGVyIGZyb20gYHVuaXhfc2NjX2RlYWQoKWAgYW5kIGFkZGVkIGEgc2VsZnRlc3QuIFRoaXMgY2xlYXJseSBhaW1zIHRvIHN0cmVhbWxpbmUgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnQgKFNDQykgcHJvY2Vzc2luZy5cblxuTXkgZmlyc3QgY2hlY2sgaXMgYWx3YXlzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEkgY29uZmlybSB0aGF0IGFsbCB0aGUgZmllbGRzIG9mIGB1bml4X3ZlcnRleGAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYHVuaXhfYWRkX2VkZ2VgOiBgZWRnZXNgLCBgZW50cnlgLCBgc2NjX2VudHJ5YCwgYG91dF9kZWdyZWVgLCBgaW5kZXhgLCBhbmQgYHNjY19pbmRleGAuIFRoZSBjcnVjaWFsIGNoYW5nZSBpcyB0aGF0IHRoZSBhc3NpZ25tZW50IG9mIGBpbmRleGAgYW5kIGBzY2NfaW5kZXhgIHRvIHRoZSB2ZXJ0aWNlcyB3aXRoaW4gYW4gU0NDIGlzIG5vdyBkb25lIGRpcmVjdGx5IHdpdGhpbiB0aGUgbGlzdCB0cmF2ZXJzYWwgaW4gYF9fdW5peF93YWxrX3NjY2AuIEknbSB2ZXJpZnlpbmcgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoYXQgdGhlIGxvb3AgdmFyaWFibGUgYHZgIGlzIGNvcnJlY3RseSBhIGxvb3AgdmFyaWFibGUgb3ZlciB0aGUgbGlzdCwgYW5kIHRoYXQgYHYtXHUwMDNlaW5kZXhgIGFuZCBgdi1cdTAwM2VzY2NfaW5kZXhgIGFyZSB0aGVuIGFzc2lnbmVkIGtub3duLCBpbml0aWFsaXplZCB2YWx1ZXMuIFRoZSByZW1vdmFsIG9mIHRoZSBgZmFzdGAgYXJndW1lbnQgZnJvbSBgdW5peF9zY2NfZGVhZCgpYCBsb29rcyBsaWtlIGEgY2xlYW4tdXAsIHJlbW92aW5nIGRlYWQgY29kZSDigJMgbm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS5cblxuTmV4dCwgSSBhc3Nlc3MgZm9yIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gSSByZWNvZ25pemUgdGhhdCBhbnkgZ3JhcGggdHJhdmVyc2FsIGJ1Z3Mgb3IgbGlzdCBjb3JydXB0aW9uIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBsaXN0IGRlYnVnZ2luZy4gU2luY2UgS01TQU4gZm9jdXNlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgdGhpcyBpc24ndCBteSBwcmltYXJ5IGNvbmNlcm4gaGVyZSwgZ2l2ZW4gdGhlIGV4aXN0aW5nIHByb3RlY3Rpb24uXG5cbk5vdywgbGV0J3MgZ28gdGhyb3VnaCB0aGUgTmVlZHNLTVNBTiBjcml0ZXJpYTpcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlPyBOb3BlLiBObyBkYXRhIHRyYW5zZmVyLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBCb3RoIGBpbmRleGAgYW5kIGBzY2NfaW5kZXhgIGFyZSB3ZWxsLWluaXRpYWxpemVkIHN0cnVjdCBtZW1iZXJzLlxuMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHMgcmVhZCBsYXRlcj8gTm9wZS4gTm8gZGF0YSBzdHJ1Y3R1cmUgbGF5b3V0IGNoYW5nZXMsIGFuZCBubyBuZXcgYWxsb2NhdGlvbnMuXG40LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgYmVpbmcgYWNjZXNzZWQ/IE5vcGUuIE5vIGJ1ZmZlcnMsIGxlbmd0aHMsIG9yIHNpemVzIGFmZmVjdGVkLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLlxuXG5JJ20gY29uZmlkZW50IGluIGNvbmNsdWRpbmcgdGhhdCBLTVNBTiBpc24ndCB3YXJyYW50ZWQgaGVyZS4gVGhlIHBhdGNoIGFkZHJlc3NlcyBjaGFuZ2VzIHRvIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24uIEl0IG9wdGltaXplcyB0aGUgcHJvY2VzcyBieSBtb3ZpbmcgdGhlIHVwZGF0ZXMgb2YgYGluZGV4YCBhbmQgYHNjY19pbmRleGAgaW50byBgX191bml4X3dhbGtfc2NjKClgLCBzaW1wbGlmaWVzIHRoZSBjb2RlIGJ5IHJlbW92aW5nIHRoZSBub3ctdW5uZWNlc3NhcnkgYGZhc3RgIHBhcmFtZXRlciBmcm9tIGB1bml4X3NjY19kZWFkKClgLCBhbmQgYWRkcyBhIG5ldyB0ZXN0LiBUaGlzIGRvZXNuJ3QgaW52b2x2ZSBhbnkgb2YgdGhlIGNsYXNzaWMgS01TQU4gcGl0ZmFsbHM6IG5vIHVuaW5pdGlhbGl6ZWQgYWxsb2NhdGlvbnMsIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSwgbm8gdHJhbnNmZXIgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29uZGl0aW9uYWwgcmVhZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBleGlzdGluZyBrZXJuZWwgZGVidWdnZXJzIGFyZSBtb3JlIHRoYW4gYWRlcXVhdGUgdG8gaGFuZGxlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyBhcmlzaW5nIGZyb20gZ3JhcGggdHJhdmVyc2FsLCBsaXN0IGNvcnJ1cHRpb24sIG9yIHNpbWlsYXIgYnVncy4gVGhlcmUncyBubyBqdXN0aWZpY2F0aW9uIGZvciBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc4NywiT3V0cHV0VG9rZW5zIjoyNTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNToyNi4xMDU0MjQ5MzVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgQUZfVU5JWCBnYXJiYWdlIGNvbGxlY3RvcidzIFRhcmphbiBTdHJvbmdseSBDb25uZWN0ZWQgQ29tcG9uZW50IChTQ0MpIGFsZ29yaXRobSBpbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gSXQgbW92ZXMgdGhlIG9mZi1zdGFjayBtYXJraW5nIChgdi1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4YCkgYW5kIFNDQyBJRCBhc3NpZ25tZW50IChgdi1cXHUwMDNlc2NjX2luZGV4ID0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXhgKSBmb3IgU0NDIHZlcnRpY2VzIGZyb20gYHVuaXhfc2NjX2RlYWQoKWAgaW50byBgX191bml4X3dhbGtfc2NjKClgLCBzaW1wbGlmaWVzIGB1bml4X3NjY19kZWFkKClgIGJ5IHJlbW92aW5nIHRoZSBgZmFzdGAgcGFyYW1ldGVyLCBhbmQgYWRkcyBhIHJlZ3Jlc3Npb24gdGVzdCBpbiBrc2VsZnRlc3RzLlxcblxcblRoaXMgY2hhbmdlIHRvdWNoZXMgcHVyZWx5IGludGVybmFsIGdyYXBoIGJvb2trZWVwaW5nIGZpZWxkcyBvbiBgc3RydWN0IHVuaXhfdmVydGV4YCBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBhbnkgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBncmFwaCB0cmF2ZXJzYWwsIGxpc3QgbWFuaXB1bGF0aW9uLCBvciBzb2NrZXQgbGlmZXRpbWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbnMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgZmFjaWxpdGllcyAoZS5nLiwgQ09ORklHX0RFQlVHX0xJU1QpLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBBRl9VTklYIGdhcmJhZ2UgY29sbGVjdG9yJ3MgVGFyamFuIFN0cm9uZ2x5IENvbm5lY3RlZCBDb21wb25lbnQgKFNDQykgYWxnb3JpdGhtIGluIGBuZXQvdW5peC9nYXJiYWdlLmNgLiBJdCBtb3ZlcyB0aGUgb2ZmLXN0YWNrIG1hcmtpbmcgKGB2LVxcdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXhgKSBhbmQgU0NDIElEIGFzc2lnbm1lbnQgKGB2LVxcdTAwM2VzY2NfaW5kZXggPSB2ZXJ0ZXgtXFx1MDAzZXNjY19pbmRleGApIGZvciBTQ0MgdmVydGljZXMgZnJvbSBgdW5peF9zY2NfZGVhZCgpYCBpbnRvIGBfX3VuaXhfd2Fsa19zY2MoKWAsIHNpbXBsaWZpZXMgYHVuaXhfc2NjX2RlYWQoKWAgYnkgcmVtb3ZpbmcgdGhlIGBmYXN0YCBwYXJhbWV0ZXIsIGFuZCBhZGRzIGEgcmVncmVzc2lvbiB0ZXN0IGluIGtzZWxmdGVzdHMuXFxuXFxuVGhpcyBjaGFuZ2UgdG91Y2hlcyBwdXJlbHkgaW50ZXJuYWwgZ3JhcGggYm9va2tlZXBpbmcgZmllbGRzIG9uIGBzdHJ1Y3QgdW5peF92ZXJ0ZXhgIG9iamVjdHMgdGhhdCBhcmUgYWxyZWFkeSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IGFueSBidWZmZXJzIG9yIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGdyYXBoIHRyYXZlcnNhbCwgbGlzdCBtYW5pcHVsYXRpb24sIG9yIHNvY2tldCBsaWZldGltZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9ucykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyBmYWNpbGl0aWVzIChlLmcuLCBDT05GSUdfREVCVUdfTElTVCkuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgjkj5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-12 03:19:00 +0000 UTC FinishedAt: 2026-09-12 04:05:27 +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": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "UNIX" ], "series_id": "c5dee797-982c-4f00-82a9-ac00e8b3b8bb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "__unix_walk_scc", "unix_scc_dead", "unix_walk_scc_fast", "unix_walk_scc", "unix_gc" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "78445023439506ebd83b86d40b1e428a3b309d4a", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3VuaXhfd2Fsa19zY2MmIzM0OywKICAgICYjMzQ7dW5peF9zY2NfZGVhZCYjMzQ7LAogICAgJiMzNDt1bml4X3dhbGtfc2NjX2Zhc3QmIzM0OywKICAgICYjMzQ7dW5peF93YWxrX3NjYyYjMzQ7LAogICAgJiMzNDt1bml4X2djJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBBRl9VTklYIGdhcmJhZ2UgY29sbGVjdG9yJiMzOTtzIFRhcmphbiBTdHJvbmdseSBDb25uZWN0ZWQgQ29tcG9uZW50IChTQ0MpIGFsZ29yaXRobSBpbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gSXQgbW92ZXMgdGhlIG9mZi1zdGFjayBtYXJraW5nIChgdi1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXhgKSBhbmQgU0NDIElEIGFzc2lnbm1lbnQgKGB2LVx1MDAzZXNjY19pbmRleCA9IHZlcnRleC1cdTAwM2VzY2NfaW5kZXhgKSBmb3IgU0NDIHZlcnRpY2VzIGZyb20gYHVuaXhfc2NjX2RlYWQoKWAgaW50byBgX191bml4X3dhbGtfc2NjKClgLCBzaW1wbGlmaWVzIGB1bml4X3NjY19kZWFkKClgIGJ5IHJlbW92aW5nIHRoZSBgZmFzdGAgcGFyYW1ldGVyLCBhbmQgYWRkcyBhIHJlZ3Jlc3Npb24gdGVzdCBpbiBrc2VsZnRlc3RzLlxuXG5UaGlzIGNoYW5nZSB0b3VjaGVzIHB1cmVseSBpbnRlcm5hbCBncmFwaCBib29ra2VlcGluZyBmaWVsZHMgb24gYHN0cnVjdCB1bml4X3ZlcnRleGAgb2JqZWN0cyB0aGF0IGFyZSBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgYW55IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZ3JhcGggdHJhdmVyc2FsLCBsaXN0IG1hbmlwdWxhdGlvbiwgb3Igc29ja2V0IGxpZmV0aW1lcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb25zKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIGZhY2lsaXRpZXMgKGUuZy4sIENPTkZJR19ERUJVR19MSVNUKS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudHMgKFNDQykgVGFyamFuLWJhc2VkIGN5Y2xlIGRldGVjdGlvbiBhbGdvcml0aG0gaW4gVU5JWCBkb21haW4gc29ja2V0IGdhcmJhZ2UgY29sbGVjdGlvbiAobmV0L3VuaXgvZ2FyYmFnZS5jKS4gU3BlY2lmaWNhbGx5LCBpdCB1cGRhdGVzIF9fdW5peF93YWxrX3NjYyB0byBhc3NpZ24gdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCBhbmQgdXBkYXRlIHNjY19pbmRleCBhY3Jvc3MgdGhlIGVudGlyZSBTQ0MgcHJpb3IgdG8gY2FsbGluZyB1bml4X3NjY19kZWFkLCBhbmQgcmVtb3ZlcyB0aGUgZmFzdCBwYXJhbWV0ZXIgYW5kIG9mZi1zdGFjayBtYXJraW5nIGZyb20gdW5peF9zY2NfZGVhZC4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgZGlyZWN0bHkgZXhlcmNpc2VkIHdoZW4gcGFzc2luZyBmaWxlIGRlc2NyaXB0b3JzIGFjcm9zcyBVTklYIHNvY2tldHMgdmlhIFNDTV9SSUdIVFMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNDIyNmQwMTZkMGFlZDY0YWM0YWNmNDUyZjA2NWZiMjA1NzFiNjU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMDQ6MDQ6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvZ2FyYmFnZS5jIGIvbmV0L3VuaXgvZ2FyYmFnZS5jXG5pbmRleCA5ZmNhYWY1NWNiYTVkLi5kYTc3NGY1NmNhNjQ4IDEwMDY0NFxuLS0tIGEvbmV0L3VuaXgvZ2FyYmFnZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdW5peC9nYXJiYWdlLmNcbkBAIC0zNzQsNyAmIzQzOzM3NCw3IEBAIHN0YXRpYyBib29sIHVuaXhfdmVydGV4X2RlYWQoc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgpXG4gc3RhdGljIExJU1RfSEVBRCh1bml4X3Zpc2l0ZWRfdmVydGljZXMpO1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMjtcbiBcbi1zdGF0aWMgYm9vbCB1bml4X3NjY19kZWFkKHN0cnVjdCBsaXN0X2hlYWQgKnNjYywgYm9vbCBmYXN0KVxuJiM0MztzdGF0aWMgYm9vbCB1bml4X3NjY19kZWFkKHN0cnVjdCBsaXN0X2hlYWQgKnNjYylcbiB7XG4gXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcbiBcdGJvb2wgc2NjX2RlYWQgPSB0cnVlO1xuQEAgLTM4NiwxMCAmIzQzOzM4Niw2IEBAIHN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBib29sIGZhc3QpXG4gXHRcdC8qIERvbiYjMzk7dCByZXN0YXJ0IERGUyBmcm9tIHRoaXMgdmVydGV4LiAqL1xuIFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZ2ZXJ0ZXgtXHUwMDNlZW50cnksIFx1MDAyNnVuaXhfdmlzaXRlZF92ZXJ0aWNlcyk7XG4gXG4tXHRcdC8qIE1hcmsgdmVydGV4IGFzIG9mZi1zdGFjayBmb3IgX191bml4X3dhbGtfc2NjKCkuICovXG4tXHRcdGlmICghZmFzdClcbi1cdFx0XHR2ZXJ0ZXgtXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xuLVxuIFx0XHRpZiAoc2NjX2RlYWQpXG4gXHRcdFx0c2NjX2RlYWQgPSB1bml4X3ZlcnRleF9kZWFkKHZlcnRleCk7XG4gXHR9XG5AQCAtNTIxLDYgJiM0Mzs1MTcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3VuaXhfd2Fsa19zY2Moc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgsXG4gXHR9XG4gXG4gXHRpZiAodmVydGV4LVx1MDAzZWluZGV4ID09IHZlcnRleC1cdTAwM2VzY2NfaW5kZXgpIHtcbiYjNDM7XHRcdHN0cnVjdCB1bml4X3ZlcnRleCAqdjtcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCBzY2M7XG4gXG4gXHRcdC8qIFNDQyBmaW5hbGlzZWQuXG5AQCAtNTMwLDcgJiM0Mzs1MjcsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX191bml4X3dhbGtfc2NjKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LFxuIFx0XHQgKi9cbiBcdFx0X19saXN0X2N1dF9wb3NpdGlvbihcdTAwMjZzY2MsIFx1MDAyNnZlcnRleF9zdGFjaywgXHUwMDI2dmVydGV4LVx1MDAzZXNjY19lbnRyeSk7XG4gXG4tXHRcdGlmICh1bml4X3NjY19kZWFkKFx1MDAyNnNjYywgZmFsc2UpKSB7XG4mIzQzO1x0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UodiwgXHUwMDI2c2NjLCBzY2NfZW50cnkpIHtcbiYjNDM7XHRcdFx0LyogTWFyayB2ZXJ0ZXggYXMgb2ZmLXN0YWNrIGFuZCBhc3NpZ24gYSB1bmlxdWUgSUQuICovXG4mIzQzO1x0XHRcdHYtXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xuJiM0MztcdFx0XHR2LVx1MDAzZXNjY19pbmRleCA9IHZlcnRleC1cdTAwM2VzY2NfaW5kZXg7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHVuaXhfc2NjX2RlYWQoXHUwMDI2c2NjKSkge1xuIFx0XHRcdHVuaXhfY29sbGVjdF9za2IoXHUwMDI2c2NjLCBoaXRsaXN0KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRpZiAodW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCBcdTAwM2MgdmVydGV4LVx1MDAzZXNjY19pbmRleClcbkBAIC01ODgsNyAmIzQzOzU5MSw3IEBAIHN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2NfZmFzdChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxuIFx0XHR2ZXJ0ZXggPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzLCB0eXBlb2YoKnZlcnRleCksIGVudHJ5KTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2c2NjLCBcdTAwMjZ2ZXJ0ZXgtXHUwMDNlc2NjX2VudHJ5KTtcbiBcbi1cdFx0aWYgKHVuaXhfc2NjX2RlYWQoXHUwMDI2c2NjLCB0cnVlKSkge1xuJiM0MztcdFx0aWYgKHVuaXhfc2NjX2RlYWQoXHUwMDI2c2NjKSkge1xuIFx0XHRcdGN5Y2xpY19zY2NzLS07XG4gXHRcdFx0dW5peF9jb2xsZWN0X3NrYihcdTAwMjZzY2MsIGhpdGxpc3QpO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jXG5pbmRleCBkODJhNzljMjFjMTc5Li5jMTY1ZjI1MDIyMGE0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmNcbkBAIC0zNzgsNCAmIzQzOzM3OCwyMSBAQCBURVNUX0Yoc2NtX3JpZ2h0cywgYmFja3RyYWNrX2Zyb21fc2NjKVxuIFx0Y2xvc2Vfc29ja2V0cygxMCk7XG4gfVxuIFxuJiM0MztURVNUX0Yoc2NtX3JpZ2h0cywgbWl4ZWRfbG93cG9pbnQpXG4mIzQzO3tcbiYjNDM7XHRjcmVhdGVfc29ja2V0cyg2KTtcbiYjNDM7XG4mIzQzO1x0c2VuZF9mZCgwLCAxKTtcbiYjNDM7XHRzZW5kX2ZkKDEsIDIpO1xuJiM0MztcdHNlbmRfZmQoMiwgMSk7XG4mIzQzO1x0c2VuZF9mZCgxLCAwKTtcbiYjNDM7XG4mIzQzO1x0c2VuZF9mZCgzLCA0KTtcbiYjNDM7XHRzZW5kX2ZkKDQsIDUpO1xuJiM0MztcdHNlbmRfZmQoNSwgNCk7XG4mIzQzO1x0c2VuZF9mZCg0LCAzKTtcbiYjNDM7XG4mIzQzO1x0Y2xvc2Vfc29ja2V0cyg2KTtcbiYjNDM7fVxuJiM0MztcbiBURVNUX0hBUk5FU1NfTUFJTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3VuaXhfd2Fsa19zY2MmIzM0OywKICAgICYjMzQ7dW5peF9zY2NfZGVhZCYjMzQ7LAogICAgJiMzNDt1bml4X3dhbGtfc2NjX2Zhc3QmIzM0OywKICAgICYjMzQ7dW5peF93YWxrX3NjYyYjMzQ7LAogICAgJiMzNDt1bml4X2djJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50cyAoU0NDKSBUYXJqYW4tYmFzZWQgY3ljbGUgZGV0ZWN0aW9uIGFsZ29yaXRobSBpbiBVTklYIGRvbWFpbiBzb2NrZXQgZ2FyYmFnZSBjb2xsZWN0aW9uIChuZXQvdW5peC9nYXJiYWdlLmMpLiBTcGVjaWZpY2FsbHksIGl0IHVwZGF0ZXMgX191bml4X3dhbGtfc2NjIHRvIGFzc2lnbiB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4IGFuZCB1cGRhdGUgc2NjX2luZGV4IGFjcm9zcyB0aGUgZW50aXJlIFNDQyBwcmlvciB0byBjYWxsaW5nIHVuaXhfc2NjX2RlYWQsIGFuZCByZW1vdmVzIHRoZSBmYXN0IHBhcmFtZXRlciBhbmQgb2ZmLXN0YWNrIG1hcmtpbmcgZnJvbSB1bml4X3NjY19kZWFkLiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpcyBkaXJlY3RseSBleGVyY2lzZWQgd2hlbiBwYXNzaW5nIGZpbGUgZGVzY3JpcHRvcnMgYWNyb3NzIFVOSVggc29ja2V0cyB2aWEgU0NNX1JJR0hUUy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0MjI2ZDAxNmQwYWVkNjRhYzRhY2Y0NTJmMDY1ZmIyMDU3MWI2NTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAwNDowNDowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC91bml4L2dhcmJhZ2UuYyBiL25ldC91bml4L2dhcmJhZ2UuYwppbmRleCA5ZmNhYWY1NWNiYTVkLi5kYTc3NGY1NmNhNjQ4IDEwMDY0NAotLS0gYS9uZXQvdW5peC9nYXJiYWdlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3VuaXgvZ2FyYmFnZS5jCkBAIC0zNzQsNyAmIzQzOzM3NCw3IEBAIHN0YXRpYyBib29sIHVuaXhfdmVydGV4X2RlYWQoc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgpCiBzdGF0aWMgTElTVF9IRUFEKHVuaXhfdmlzaXRlZF92ZXJ0aWNlcyk7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfTUFSSzI7CiAKLXN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBib29sIGZhc3QpCiYjNDM7c3RhdGljIGJvb2wgdW5peF9zY2NfZGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpzY2MpCiB7CiAJc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7CiAJYm9vbCBzY2NfZGVhZCA9IHRydWU7CkBAIC0zODYsMTAgJiM0MzszODYsNiBAQCBzdGF0aWMgYm9vbCB1bml4X3NjY19kZWFkKHN0cnVjdCBsaXN0X2hlYWQgKnNjYywgYm9vbCBmYXN0KQogCQkvKiBEb24mIzM5O3QgcmVzdGFydCBERlMgZnJvbSB0aGlzIHZlcnRleC4gKi8KIAkJbGlzdF9tb3ZlX3RhaWwoJmFtcDt2ZXJ0ZXgtJmd0O2VudHJ5LCAmYW1wO3VuaXhfdmlzaXRlZF92ZXJ0aWNlcyk7CiAKLQkJLyogTWFyayB2ZXJ0ZXggYXMgb2ZmLXN0YWNrIGZvciBfX3VuaXhfd2Fsa19zY2MoKS4gKi8KLQkJaWYgKCFmYXN0KQotCQkJdmVydGV4LSZndDtpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXg7Ci0KIAkJaWYgKHNjY19kZWFkKQogCQkJc2NjX2RlYWQgPSB1bml4X3ZlcnRleF9kZWFkKHZlcnRleCk7CiAJfQpAQCAtNTIxLDYgJiM0Mzs1MTcsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3VuaXhfd2Fsa19zY2Moc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgsCiAJfQogCiAJaWYgKHZlcnRleC0mZ3Q7aW5kZXggPT0gdmVydGV4LSZndDtzY2NfaW5kZXgpIHsKJiM0MzsJCXN0cnVjdCB1bml4X3ZlcnRleCAqdjsKIAkJc3RydWN0IGxpc3RfaGVhZCBzY2M7CiAKIAkJLyogU0NDIGZpbmFsaXNlZC4KQEAgLTUzMCw3ICYjNDM7NTI3LDEzIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdW5peF93YWxrX3NjYyhzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleCwKIAkJICovCiAJCV9fbGlzdF9jdXRfcG9zaXRpb24oJmFtcDtzY2MsICZhbXA7dmVydGV4X3N0YWNrLCAmYW1wO3ZlcnRleC0mZ3Q7c2NjX2VudHJ5KTsKIAotCQlpZiAodW5peF9zY2NfZGVhZCgmYW1wO3NjYywgZmFsc2UpKSB7CiYjNDM7CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UodiwgJmFtcDtzY2MsIHNjY19lbnRyeSkgewomIzQzOwkJCS8qIE1hcmsgdmVydGV4IGFzIG9mZi1zdGFjayBhbmQgYXNzaWduIGEgdW5pcXVlIElELiAqLwomIzQzOwkJCXYtJmd0O2luZGV4ID0gdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleDsKJiM0MzsJCQl2LSZndDtzY2NfaW5kZXggPSB2ZXJ0ZXgtJmd0O3NjY19pbmRleDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICh1bml4X3NjY19kZWFkKCZhbXA7c2NjKSkgewogCQkJdW5peF9jb2xsZWN0X3NrYigmYW1wO3NjYywgaGl0bGlzdCk7CiAJCX0gZWxzZSB7CiAJCQlpZiAodW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCAmbHQ7IHZlcnRleC0mZ3Q7c2NjX2luZGV4KQpAQCAtNTg4LDcgJiM0Mzs1OTEsNyBAQCBzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjX2Zhc3Qoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdCkKIAkJdmVydGV4ID0gbGlzdF9maXJzdF9lbnRyeSgmYW1wO3VuaXhfdW52aXNpdGVkX3ZlcnRpY2VzLCB0eXBlb2YoKnZlcnRleCksIGVudHJ5KTsKIAkJbGlzdF9hZGQoJmFtcDtzY2MsICZhbXA7dmVydGV4LSZndDtzY2NfZW50cnkpOwogCi0JCWlmICh1bml4X3NjY19kZWFkKCZhbXA7c2NjLCB0cnVlKSkgewomIzQzOwkJaWYgKHVuaXhfc2NjX2RlYWQoJmFtcDtzY2MpKSB7CiAJCQljeWNsaWNfc2Njcy0tOwogCQkJdW5peF9jb2xsZWN0X3NrYigmYW1wO3NjYywgaGl0bGlzdCk7CiAJCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuYwppbmRleCBkODJhNzljMjFjMTc5Li5jMTY1ZjI1MDIyMGE0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jCkBAIC0zNzgsNCAmIzQzOzM3OCwyMSBAQCBURVNUX0Yoc2NtX3JpZ2h0cywgYmFja3RyYWNrX2Zyb21fc2NjKQogCWNsb3NlX3NvY2tldHMoMTApOwogfQogCiYjNDM7VEVTVF9GKHNjbV9yaWdodHMsIG1peGVkX2xvd3BvaW50KQomIzQzO3sKJiM0MzsJY3JlYXRlX3NvY2tldHMoNik7CiYjNDM7CiYjNDM7CXNlbmRfZmQoMCwgMSk7CiYjNDM7CXNlbmRfZmQoMSwgMik7CiYjNDM7CXNlbmRfZmQoMiwgMSk7CiYjNDM7CXNlbmRfZmQoMSwgMCk7CiYjNDM7CiYjNDM7CXNlbmRfZmQoMywgNCk7CiYjNDM7CXNlbmRfZmQoNCwgNSk7CiYjNDM7CXNlbmRfZmQoNSwgNCk7CiYjNDM7CXNlbmRfZmQoNCwgMyk7CiYjNDM7CiYjNDM7CWNsb3NlX3NvY2tldHMoNik7CiYjNDM7fQomIzQzOwogVEVTVF9IQVJORVNTX01BSU4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc4NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVOSVggRG9tYWluIFNvY2tldCBHYXJiYWdlIENvbGxlY3Rpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGUgY2hhbmdlcyB0b3VjaCBgbmV0L3VuaXgvZ2FyYmFnZS5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuY2AuIEkgaW1tZWRpYXRlbHkgemVybyBpbiBvbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcy4gRnJvbSBleHBlcmllbmNlLCBJIGtub3cgdGhpcyBpcyB0aGUgVU5JWCBkb21haW4gc29ja2V0IGdhcmJhZ2UgY29sbGVjdGlvbiBjb2RlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIFRhcmphbiYjMzk7cyBhbGdvcml0aG0sIHVzZWQgdG8gZGV0ZWN0IGN5Y2xpYyBmaWxlIGRlc2NyaXB0b3IgcmVmZXJlbmNlcyBhbmQgaGFuZGxlIFNDTV9SSUdIVFMgZ2FyYmFnZS4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBuZXQvdW5peC9nYXJiYWdlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgcGF0Y2guIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGljaCBjb25maWd1cmF0aW9ucyBlbmFibGUgdGhpcyBnYXJiYWdlIGNvbGxlY3Rpb24gYW5kIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIGltcGFjdGVkIG9yIG1vZGlmaWVkLiBXaGF0IGFyZSB0aGUgcmVsZXZhbnQgaG9va3M/IFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvbiB0aGUgZXhpc3RpbmcgY3ljbGUgZGV0ZWN0aW9uPyBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY2hhbmdlcyYjMzk7IGltcGxpY2F0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L2dhcmJhZ2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzcwOlx0XG4gMzcxOlx0XHRyZXR1cm4gdHJ1ZTtcbiAzNzI6XHR9XG4gMzczOlx0XG4gMzc0Olx0c3RhdGljIExJU1RfSEVBRCh1bml4X3Zpc2l0ZWRfdmVydGljZXMpO1xuIDM3NTpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMjtcbiAzNzY6XHRcbiAzNzc6XHRzdGF0aWMgYm9vbCB1bml4X3NjY19kZWFkKHN0cnVjdCBsaXN0X2hlYWQgKnNjYylcbiAzNzg6XHR7XG4gMzc5Olx0XHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcbiAzODA6XHRcdGJvb2wgc2NjX2RlYWQgPSB0cnVlO1xuIDM4MTpcdFx0dW5zaWduZWQgaW50IHNlcTtcbiAzODI6XHRcbiAzODM6XHRcdHNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXHUwMDI2dW5peF9wZWVrX3NlcSk7XG4gMzg0Olx0XG4gMzg1Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UodmVydGV4LCBzY2MsIHNjY19lbnRyeSkge1xuIDM4NjpcdFx0XHQvKiBEb24mIzM5O3QgcmVzdGFydCBERlMgZnJvbSB0aGlzIHZlcnRleC4gKi9cbiAzODc6XHRcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2dmVydGV4LVx1MDAzZWVudHJ5LCBcdTAwMjZ1bml4X3Zpc2l0ZWRfdmVydGljZXMpO1xuIDM4ODpcdFxuIDM4OTpcdFx0XHRpZiAoc2NjX2RlYWQpXG4gMzkwOlx0XHRcdFx0c2NjX2RlYWQgPSB1bml4X3ZlcnRleF9kZWFkKHZlcnRleCk7XG4gMzkxOlx0XHR9XG4gMzkyOlx0XG4gMzkzOlx0XHQvKiBJZiBNU0dfUEVFSyBpbnRlcnZlbmVkLCBkZWZlciB0aGlzIFNDQyB0byB0aGUgbmV4dCByb3VuZC4gKi9cbiAzOTQ6XHRcdGlmIChyZWFkX3NlcWNvdW50X3JldHJ5KFx1MDAyNnVuaXhfcGVla19zZXEsIHNlcSkpXG4gMzk1Olx0XHRcdHJldHVybiBmYWxzZTtcbiAzOTY6XHRcbiAzOTc6XHRcdHJldHVybiBzY2NfZGVhZDtcbiAzOTg6XHR9XG4gMzk5Olx0XG4gNDAwOlx0c3RhdGljIHZvaWQgdW5peF9jb2xsZWN0X3NrYihzdHJ1Y3QgbGlzdF9oZWFkICpzY2MsIHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXG4gNDAxOlx0e1xuIDQwMjpcdFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XG4gNDAzOlx0XG4gNDA0Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UodmVydGV4LCBzY2MsIHNjY19lbnRyeSkge1xuIDQwNTpcdFx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZTtcbiA0MDY6XHRcdFx0c3RydWN0IHVuaXhfZWRnZSAqZWRnZTtcbiA0MDc6XHRcdFx0c3RydWN0IHVuaXhfc29jayAqdTtcbiA0MDg6XHRcbiA0MDk6XHRcdFx0ZWRnZSA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2dmVydGV4LVx1MDAzZWVkZ2VzLCB0eXBlb2YoKmVkZ2UpLCB2ZXJ0ZXhfZW50cnkpO1xuIDQxMDpcdFx0XHR1ID0gZWRnZS1cdTAwM2VwcmVkZWNlc3NvcjtcbiA0MTE6XHRcdFx0cXVldWUgPSBcdTAwMjZ1LVx1MDAzZXNrLnNrX3JlY2VpdmVfcXVldWU7XG4gNDEyOlx0XG4gNDEzOlx0XHRcdHNwaW5fbG9jayhcdTAwMjZxdWV1ZS1cdTAwM2Vsb2NrKTtcbiA0MTQ6XHRcbiA0MTU6XHRcdFx0aWYgKHUtXHUwMDNlc2suc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xuIDQxNjpcdFx0XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gNDE3Olx0XG4gNDE4Olx0XHRcdFx0c2tiX3F1ZXVlX3dhbGsocXVldWUsIHNrYikge1xuIDQxOTpcdFx0XHRcdFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqZW1icnlvX3F1ZXVlID0gXHUwMDI2c2tiLVx1MDAzZXNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg5NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBuZXQvdW5peC9nYXJiYWdlLmNgIChMaW5lcyA1MDAtNjAwKSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIGxpbmVzIDUwMCB0aHJvdWdoIDYwMC4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIHRvIGJlIGhhbmRsaW5nIGNsZWFudXAgb3IgcGVyaGFwcyBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIHRvIFVuaXggZG9tYWluIHNvY2tldHMsIGdpdmVuIHRoZSBmaWxlbmFtZS4gSSYjMzk7bSBpbW1lZGlhdGVseSBsb29raW5nIGZvciBwYXR0ZXJuczsgYXJlIHdlIGRlYWxpbmcgd2l0aCBkZWFsbG9jYXRpb24gb2Ygc29ja2V0IHN0cnVjdHVyZXMsIHJlZmVyZW5jZSBjb3VudGluZywgZXJyb3IgaGFuZGxpbmcsIG9yIHBlcmhhcHMgc29tZSBraW5kIG9mIGdhcmJhZ2UgY29sbGVjdGlvbiBtZWNoYW5pc20/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgaGVyZS4gSSYjMzk7bGwgYmUgd2F0Y2hpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG9yIGRvdWJsZS1mcmVlcy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVzZSBhcmVhcyBhcmUgb2Z0ZW4gdHJpY2t5IGluIGxvdy1sZXZlbCBuZXR3b3JrIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIGNvbm5lY3Rpb24gc3RhdGVzIGFuZCByZXNvdXJjZSBleGhhdXN0aW9uIHNpdHVhdGlvbnMgZHVyaW5nIHRoZSByZWxlYXNlIG9mIHJlc291cmNlcy4gSeKAmWxsIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgY29kZSBpbnRlcmFjdHMgd2l0aCBhbnkgYXNzb2NpYXRlZCB3b3JrcXVldWVzIG9yIGtlcm5lbCB0aHJlYWRzLiBUaGlzIHNlY3Rpb24gbWlnaHQgaW52b2x2ZSBmcmVlaW5nIGJ1ZmZlcnMsIHJlbGVhc2luZyBsb2NrcywgYW5kIHBvc3NpYmx5IHNpZ25hbGluZyBvdGhlciBwcm9jZXNzZXMuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNhbGxzIHRvIG1lbW9yeSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBmdW5jdGlvbnMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGFzc29jaWF0ZWQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBhIGZlZWwgZm9yIGhvdyByb2J1c3QgYW5kIHJlbGlhYmxlIHRoaXMgY2xlYW51cCBwcm9jZXNzIGlzOyBJJiMzOTttIGV4cGVjdGluZyBzb21ldGhpbmcgbnVhbmNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L2dhcmJhZ2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUwMDpcdFxuIDUwMTpcdFx0XHRcdC8qIElmIHRoZSBzdWNjZXNzb3IgaGFzIGEgc21hbGxlciBzY2NfaW5kZXgsIHR3byB2ZXJ0aWNlc1xuIDUwMjpcdFx0XHRcdCAqIGFyZSBpbiB0aGUgc2FtZSBTQ0MsIHNvIHByb3BhZ2F0ZSB0aGUgc21hbGxlciBzY2NfaW5kZXhcbiA1MDM6XHRcdFx0XHQgKiB0byBza2lwIFNDQyBmaW5hbGlzYXRpb24uXG4gNTA0Olx0XHRcdFx0ICovXG4gNTA1Olx0XHRcdFx0dmVydGV4LVx1MDAzZXNjY19pbmRleCA9IG1pbih2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4LCBuZXh0X3ZlcnRleC1cdTAwM2VzY2NfaW5kZXgpO1xuIDUwNjpcdFx0XHR9IGVsc2UgaWYgKG5leHRfdmVydGV4LVx1MDAzZWluZGV4ICE9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXgpIHtcbiA1MDc6XHRcdFx0XHQvKiBMb29wIGRldGVjdGVkIGJ5IGEgYmFjay9jcm9zcyBlZGdlLlxuIDUwODpcdFx0XHRcdCAqXG4gNTA5Olx0XHRcdFx0ICogVGhlIHN1Y2Nlc3NvciBpcyBvbiB2ZXJ0ZXhfc3RhY2ssIHNvIHR3byB2ZXJ0aWNlcyBhcmUgaW5cbiA1MTA6XHRcdFx0XHQgKiB0aGUgc2FtZSBTQ0MuICBJZiB0aGUgc3VjY2Vzc29yIGhhcyBhIHNtYWxsZXIgKnNjY19pbmRleCosXG4gNTExOlx0XHRcdFx0ICogcHJvcGFnYXRlIGl0IHRvIHNraXAgU0NDIGZpbmFsaXNhdGlvbi5cbiA1MTI6XHRcdFx0XHQgKi9cbiA1MTM6XHRcdFx0XHR2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4ID0gbWluKHZlcnRleC1cdTAwM2VzY2NfaW5kZXgsIG5leHRfdmVydGV4LVx1MDAzZXNjY19pbmRleCk7XG4gNTE0Olx0XHRcdH0gZWxzZSB7XG4gNTE1Olx0XHRcdFx0LyogVGhlIHN1Y2Nlc3NvciB3YXMgYWxyZWFkeSBncm91cGVkIGFzIGFub3RoZXIgU0NDICovXG4gNTE2Olx0XHRcdH1cbiA1MTc6XHRcdH1cbiA1MTg6XHRcbiA1MTk6XHRcdGlmICh2ZXJ0ZXgtXHUwMDNlaW5kZXggPT0gdmVydGV4LVx1MDAzZXNjY19pbmRleCkge1xuIDUyMDpcdFx0XHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnY7XG4gNTIxOlx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgc2NjO1xuIDUyMjpcdFxuIDUyMzpcdFx0XHQvKiBTQ0MgZmluYWxpc2VkLlxuIDUyNDpcdFx0XHQgKlxuIDUyNTpcdFx0XHQgKiBJZiB0aGUgc2NjX2luZGV4IHdhcyBub3QgdXBkYXRlZCwgYWxsIHRoZSB2ZXJ0aWNlcyBhYm92ZSBvblxuIDUyNjpcdFx0XHQgKiB2ZXJ0ZXhfc3RhY2sgYXJlIGluIHRoZSBzYW1lIFNDQy4gIEdyb3VwIHRoZW0gdXNpbmcgc2NjX2VudHJ5LlxuIDUyNzpcdFx0XHQgKi9cbiA1Mjg6XHRcdFx0X19saXN0X2N1dF9wb3NpdGlvbihcdTAwMjZzY2MsIFx1MDAyNnZlcnRleF9zdGFjaywgXHUwMDI2dmVydGV4LVx1MDAzZXNjY19lbnRyeSk7XG4gNTI5Olx0XG4gNTMwOlx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZSh2LCBcdTAwMjZzY2MsIHNjY19lbnRyeSkge1xuIDUzMTpcdFx0XHRcdC8qIE1hcmsgdmVydGV4IGFzIG9mZi1zdGFjayBhbmQgYXNzaWduIGEgdW5pcXVlIElELiAqL1xuIDUzMjpcdFx0XHRcdHYtXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xuIDUzMzpcdFx0XHRcdHYtXHUwMDNlc2NjX2luZGV4ID0gdmVydGV4LVx1MDAzZXNjY19pbmRleDtcbiA1MzQ6XHRcdFx0fVxuIDUzNTpcdFxuIDUzNjpcdFx0XHRpZiAodW5peF9zY2NfZGVhZChcdTAwMjZzY2MpKSB7XG4gNTM3Olx0XHRcdFx0dW5peF9jb2xsZWN0X3NrYihcdTAwMjZzY2MsIGhpdGxpc3QpO1xuIDUzODpcdFx0XHR9IGVsc2Uge1xuIDUzOTpcdFx0XHRcdGlmICh1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4IFx1MDAzYyB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4KVxuIDU0MDpcdFx0XHRcdFx0dW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCA9IHZlcnRleC1cdTAwM2VzY2NfaW5kZXg7XG4gNTQxOlx0XG4gNTQyOlx0XHRcdFx0aWYgKHVuaXhfc2NjX2N5Y2xpYyhcdTAwMjZzY2MpKVxuIDU0MzpcdFx0XHRcdFx0Y3ljbGljX3NjY3MmIzQzOyYjNDM7O1xuIDU0NDpcdFx0XHR9XG4gNTQ1Olx0XG4gNTQ2Olx0XHRcdGxpc3RfZGVsKFx1MDAyNnNjYyk7XG4gNTQ3Olx0XHR9XG4gNTQ4Olx0XG4gNTQ5Olx0XHQvKiBOZWVkIGJhY2t0cmFja2luZyA/ICovXG4gNTUwOlx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZWRnZV9zdGFjaykpXG4gNTUxOlx0XHRcdGdvdG8gcHJldl92ZXJ0ZXg7XG4gNTUyOlx0XG4gNTUzOlx0XHRyZXR1cm4gY3ljbGljX3NjY3M7XG4gNTU0Olx0fVxuIDU1NTpcdFxuIDU1NjpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfZ3JhcGhfY3ljbGljX3NjY3M7XG4gNTU3Olx0XG4gNTU4Olx0c3RhdGljIHZvaWQgdW5peF93YWxrX3NjYyhzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxuIDU1OTpcdHtcbiA1NjA6XHRcdHVuc2lnbmVkIGxvbmcgbGFzdF9pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX1NUQVJUO1xuIDU2MTpcdFx0dW5zaWduZWQgbG9uZyBjeWNsaWNfc2NjcyA9IDA7XG4gNTYyOlx0XG4gNTYzOlx0XHR1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfU1RBUlQ7XG4gNTY0Olx0XG4gNTY1Olx0XHQvKiBWaXNpdCBldmVyeSB2ZXJ0ZXggZXhhY3RseSBvbmNlLlxuIDU2NjpcdFx0ICogX191bml4X3dhbGtfc2NjKCkgbW92ZXMgdmlzaXRlZCB2ZXJ0aWNlcyB0byB1bml4X3Zpc2l0ZWRfdmVydGljZXMuXG4gNTY3Olx0XHQgKi9cbiA1Njg6XHRcdHdoaWxlICghbGlzdF9lbXB0eShcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcykpIHtcbiA1Njk6XHRcdFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XG4gNTcwOlx0XG4gNTcxOlx0XHRcdHZlcnRleCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMsIHR5cGVvZigqdmVydGV4KSwgZW50cnkpO1xuIDU3MjpcdFx0XHRjeWNsaWNfc2NjcyAmIzQzOz0gX191bml4X3dhbGtfc2NjKHZlcnRleCwgXHUwMDI2bGFzdF9pbmRleCwgaGl0bGlzdCk7XG4gNTczOlx0XHR9XG4gNTc0Olx0XG4gNTc1Olx0XHRsaXN0X3JlcGxhY2VfaW5pdChcdTAwMjZ1bml4X3Zpc2l0ZWRfdmVydGljZXMsIFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzKTtcbiA1NzY6XHRcdHN3YXAodW5peF92ZXJ0ZXhfdW52aXNpdGVkX2luZGV4LCB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4KTtcbiA1Nzc6XHRcbiA1Nzg6XHRcdFdSSVRFX09OQ0UodW5peF9ncmFwaF9jeWNsaWNfc2NjcywgY3ljbGljX3NjY3MpO1xuIDU3OTpcdFx0V1JJVEVfT05DRSh1bml4X2dyYXBoX3N0YXRlLFxuIDU4MDpcdFx0XHQgICBjeWNsaWNfc2NjcyA/IFVOSVhfR1JBUEhfQ1lDTElDIDogVU5JWF9HUkFQSF9OT1RfQ1lDTElDKTtcbiA1ODE6XHR9XG4gNTgyOlx0XG4gNTgzOlx0c3RhdGljIHZvaWQgdW5peF93YWxrX3NjY19mYXN0KHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXG4gNTg0Olx0e1xuIDU4NTpcdFx0dW5zaWduZWQgbG9uZyBjeWNsaWNfc2NjcyA9IHVuaXhfZ3JhcGhfY3ljbGljX3NjY3M7XG4gNTg2Olx0XG4gNTg3Olx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpKSB7XG4gNTg4Olx0XHRcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4O1xuIDU4OTpcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkIHNjYztcbiA1OTA6XHRcbiA1OTE6XHRcdFx0dmVydGV4ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcywgdHlwZW9mKCp2ZXJ0ZXgpLCBlbnRyeSk7XG4gNTkyOlx0XHRcdGxpc3RfYWRkKFx1MDAyNnNjYywgXHUwMDI2dmVydGV4LVx1MDAzZXNjY19lbnRyeSk7XG4gNTkzOlx0XG4gNTk0Olx0XHRcdGlmICh1bml4X3NjY19kZWFkKFx1MDAyNnNjYykpIHtcbiA1OTU6XHRcdFx0XHRjeWNsaWNfc2Njcy0tO1xuIDU5NjpcdFx0XHRcdHVuaXhfY29sbGVjdF9za2IoXHUwMDI2c2NjLCBoaXRsaXN0KTtcbiA1OTc6XHRcdFx0fVxuIDU5ODpcdFxuIDU5OTpcdFx0XHRsaXN0X2RlbChcdTAwMjZzY2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MDEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBQYXRjaCB3aXRoIEdpdCBMb2cqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgaGlzdG9yeS4gVGhlIGJlc3QgdG9vbCBmb3IgdGhpcywgYXMgYWx3YXlzLCBpcyBgZ2l0IGxvZ2AuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqd2hhdCogYW5kIHRoZSAqd2h5KiBvZiB0aGUgY2hhbmdlcy4gSSBuZWVkIHRvIHNlZSB0aGUgY29tbWl0IG1lc3NhZ2VzLCB0aGUgYXV0aG9yLCB0aGUgY29udGV4dCwgYW5kIHByZWZlcmFibHkgYSBjbGVhciBuYXJyYXRpdmUgb2YgdGhlIGV2b2x1dGlvbiBvZiB0aGlzIGNvZGUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBwYXRjaCDigJMgdGhlIHByb2JsZW0gaXQmIzM5O3Mgc29sdmluZywgdGhlIGRlc2lnbiBjaG9pY2VzIG1hZGUsIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBjb25zaWRlcmVkLiBgZ2l0IGxvZ2Agc2hvdWxkIHByb3ZpZGUgdGhlIGZvdW5kYXRpb24gZm9yIHRoYXQgdW5kZXJzdGFuZGluZy4gSXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50IGJlZm9yZSBJIGV2ZW4gbG9vayBhdCB0aGUgZGlmZnMgaW4gZGV0YWlsOyB1bmRlcnN0YW5kaW5nIHRoZSBzdG9yeSBoZWxwcyBmcmFtZSB0aGUgaW5kaXZpZHVhbCBjaGFuZ2VzLiBUaGlzIGlzIHRoZSBiZXN0IGZpcnN0IHN0ZXAgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaXhlZF9sb3dwb2ludCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmM9MzYyPVRFU1RfRihzY21fcmlnaHRzLCBiYWNrdHJhY2tfZnJvbV9zY2MpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jLTM4MC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuYzozODE6VEVTVF9GKHNjbV9yaWdodHMsIG1peGVkX2xvd3BvaW50KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jLTM4Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE2NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdpdCBDb21taXQgYW5kIFJlbGF0ZWQgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGdldCB0aGUgY29udGV4dCBvZiB0aGlzIGNvbW1pdCwgYnV0IEkgZG9uJiMzOTt0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byBhIHN0YW5kYXJkIGBnaXQgbG9nYC4gSG93ZXZlciwgdGhlIHByb21wdCBoZWxwZnVsbHkgcHJvdmlkZXMgdGhlIGF1dGhvciBhbmQgbGlrZWx5IHNvbWUgcmVsZXZhbnQgaW5mb3JtYXRpb24g4oCTIGBBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDtgLiBUaGF0JiMzOTtzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGNvbnRleHR1YWxpemluZyB0aGUgaXNzdWUgY3JlYXRlZCBieSB0aGUgc3l6a2FsbGVyIGhhcm5lc3MuCgpOb3csIG15IGluaXRpYWwgaW5zdGluY3RzIGFyZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEdpdmVuIHRoZSBhcHBhcmVudCBmb2N1cyBvbiBnYXJiYWdlIGNvbGxlY3Rpb24sIG15IGltbWVkaWF0ZSB0YXJnZXRzIGFyZSBgX191bml4X3dhbGtfc2NjYCBhbmQgYHVuaXhfd2Fsa19zY2NgLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGJyb2FkZXIgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbXMsIHBhcnRpY3VsYXJseSBgdW5peF9nY2AuCgpNeSBmb2N1cyB3aWxsIHRoZW4gYmUgdG8gaWRlbnRpZnkgY2FsbGVycyBvZiBgdW5peF93YWxrX3NjY2AuIEkmIzM5O2xsIHNwZWNpZmljYWxseSBsb29rIGZvciB0aGVzZSB3aXRoaW4gYG5ldC91bml4L2dhcmJhZ2UuY2AuIExvY2F0aW5nIHRoZSBjYWxsZXJzIHdpbGwgcHJvdmlkZSB2YWx1YWJsZSBpbnNpZ2h0cyBpbnRvIHdoZXJlIGFuZCBob3cgdGhpcyBTQ0Mgd2FsayBpcyBiZWluZyB1dGlsaXplZC4gVGhpcyBhcHByb2FjaCBzaG91bGQgaGVscCBtZSBidWlsZCBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHBhcnQgb2YgZ2FyYmFnZSBjb2xsZWN0aW9uIHRoZSBoYXJuZXNzIHVuY292ZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5peF93YWxrX3NjYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4L2dhcmJhZ2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9nYXJiYWdlLmM9NDMzPXN0YXRpYyBib29sIHVuaXhfc2NjX2N5Y2xpYyhzdHJ1Y3QgbGlzdF9oZWFkICpzY2MpXG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ1Mi1cbm5ldC91bml4L2dhcmJhZ2UuYzo0NTM6c3RhdGljIHVuc2lnbmVkIGxvbmcgX191bml4X3dhbGtfc2NjKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ1NC1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9pbmRleCxcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9NTU2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfZ3JhcGhfY3ljbGljX3NjY3M7XG5uZXQvdW5peC9nYXJiYWdlLmMtNTU3LVxubmV0L3VuaXgvZ2FyYmFnZS5jOjU1ODpzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjKHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXG5uZXQvdW5peC9nYXJiYWdlLmMtNTU5LXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNTY1LVx0LyogVmlzaXQgZXZlcnkgdmVydGV4IGV4YWN0bHkgb25jZS5cbm5ldC91bml4L2dhcmJhZ2UuYzo1NjY6XHQgKiBfX3VuaXhfd2Fsa19zY2MoKSBtb3ZlcyB2aXNpdGVkIHZlcnRpY2VzIHRvIHVuaXhfdmlzaXRlZF92ZXJ0aWNlcy5cbm5ldC91bml4L2dhcmJhZ2UuYy01NjctXHQgKi9cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNTcxLVx0XHR2ZXJ0ZXggPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzLCB0eXBlb2YoKnZlcnRleCksIGVudHJ5KTtcbm5ldC91bml4L2dhcmJhZ2UuYzo1NzI6XHRcdGN5Y2xpY19zY2NzICYjNDM7PSBfX3VuaXhfd2Fsa19zY2ModmVydGV4LCBcdTAwMjZsYXN0X2luZGV4LCBoaXRsaXN0KTtcbm5ldC91bml4L2dhcmJhZ2UuYy01NzMtXHR9XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTU4Mi1cbm5ldC91bml4L2dhcmJhZ2UuYzo1ODM6c3RhdGljIHZvaWQgdW5peF93YWxrX3NjY19mYXN0KHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXG5uZXQvdW5peC9nYXJiYWdlLmMtNTg0LXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9NjA5PXN0YXRpYyB2b2lkIHVuaXhfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYy02MjUtXHRpZiAodW5peF9ncmFwaF9zdGF0ZSA9PSBVTklYX0dSQVBIX0NZQ0xJQylcbm5ldC91bml4L2dhcmJhZ2UuYzo2MjY6XHRcdHVuaXhfd2Fsa19zY2NfZmFzdChcdTAwMjZoaXRsaXN0KTtcbm5ldC91bml4L2dhcmJhZ2UuYy02MjctXHRlbHNlXG5uZXQvdW5peC9nYXJiYWdlLmM6NjI4Olx0XHR1bml4X3dhbGtfc2NjKFx1MDAyNmhpdGxpc3QpO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTYyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEyNQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgVW5peCBTb2NrZXQgR2FyYmFnZSBDb2xsZWN0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gcHJvY2VzcyB3aXRoaW4gdGhlIFVuaXggc29ja2V0IHN1YnN5c3RlbS4gTXkgc3RhcnRpbmcgcG9pbnQgaXMgYHVuaXhfZ2NgLCB3aGljaCBJIGtub3cgaXMgdGhlIGNvcmUgd29ya3F1ZXVlIGZ1bmN0aW9uIGRlZmluZWQgaW4gYG5ldC91bml4L2dhcmJhZ2UuY2AuIE5vdywgdGhlIGtleSBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp0cmlnZ2VyZWQqLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gYHVuaXhfZ2NgIG9yLCBtb3JlIGltcG9ydGFudGx5LCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgKnNjaGVkdWxlZCogdG8gcnVuLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBsb2dpYyBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5peF9nYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9hZl91bml4LmMtMzMtICpcdFx0XHRcdFx0b2xkIGFwcHMgYW5kIGl0IHdpbGwgYXZvaWQgaHVnZSBhbW91bnRcbm5ldC91bml4L2FmX3VuaXguYzozNDogKlx0XHRcdFx0XHRvZiBzb2NrcyBoYXNoZWQgKHRoaXMgZm9yIHVuaXhfZ2MoKVxubmV0L3VuaXgvYWZfdW5peC5jLTM1LSAqXHRcdFx0XHRcdHBlcmZvcm1hbmNlcyByZWFzb25zKS5cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNDQtICpcdFx0c3VjaCBzb2NrZXQgYW5kIGNsb3NlZCBpdCAoZGVzY3JpcHRvcikuIFRoYXQgd291bGQgaGFwcGVuIG9uXG5uZXQvdW5peC9nYXJiYWdlLmM6NDU6ICpcdFx0ZWFjaCB1bml4X2djKCkgdW50aWwgdGhlIGFjY2VwdCgpLiBTaW5jZSB0aGUgc3RydWN0IGZpbGUgaW5cbm5ldC91bml4L2dhcmJhZ2UuYy00Ni0gKlx0XHRxdWVzdGlvbiB3b3VsZCBnbyB0byB0aGUgZnJlZSBsaXN0IGFuZCBtaWdodCBiZSByZXVzZWQuLi5cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9MTkzPXN0YXRpYyB2b2lkIHVuaXhfZnJlZV92ZXJ0aWNlcyhzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbClcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMjAyLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjIwMzpzdGF0aWMgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NQSU5MT0NLKHVuaXhfZ2NfbG9jayk7XG5uZXQvdW5peC9nYXJiYWdlLmMtMjA0LVxubmV0L3VuaXgvZ2FyYmFnZS5jPTIwNT12b2lkIHVuaXhfYWRkX2VkZ2VzKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsLCBzdHJ1Y3QgdW5peF9zb2NrICpyZWNlaXZlcilcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMjA4LVxubmV0L3VuaXgvZ2FyYmFnZS5jOjIwOTpcdHNwaW5fbG9jayhcdTAwMjZ1bml4X2djX2xvY2spO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTIxMC1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMjMxLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjIzMjpcdHNwaW5fdW5sb2NrKFx1MDAyNnVuaXhfZ2NfbG9jayk7XG5uZXQvdW5peC9nYXJiYWdlLmMtMjMzLVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYz0yMzk9dm9pZCB1bml4X2RlbF9lZGdlcyhzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbClcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMjQzLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjI0NDpcdHNwaW5fbG9jayhcdTAwMjZ1bml4X2djX2xvY2spO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTI0NS1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMjYxLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjI2MjpcdHNwaW5fdW5sb2NrKFx1MDAyNnVuaXhfZ2NfbG9jayk7XG5uZXQvdW5peC9nYXJiYWdlLmMtMjYzLVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYz0yNjc9dm9pZCB1bml4X3VwZGF0ZV9lZGdlcyhzdHJ1Y3QgdW5peF9zb2NrICpyZWNlaXZlcilcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMjc1LVx0fSBlbHNlIHtcbm5ldC91bml4L2dhcmJhZ2UuYzoyNzY6XHRcdHNwaW5fbG9jayhcdTAwMjZ1bml4X2djX2xvY2spO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTI3Ny1cdFx0dW5peF91cGRhdGVfZ3JhcGgodW5peF9zayhyZWNlaXZlci1cdTAwM2VsaXN0ZW5lciktXHUwMDNldmVydGV4KTtcbm5ldC91bml4L2dhcmJhZ2UuYy0yNzgtXHRcdHJlY2VpdmVyLVx1MDAzZWxpc3RlbmVyID0gTlVMTDtcbm5ldC91bml4L2dhcmJhZ2UuYzoyNzk6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnVuaXhfZ2NfbG9jayk7XG5uZXQvdW5peC9nYXJiYWdlLmMtMjgwLVx0fVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYz01ODM9c3RhdGljIHZvaWQgdW5peF93YWxrX3NjY19mYXN0KHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTYwOC1cbm5ldC91bml4L2dhcmJhZ2UuYzo2MDk6c3RhdGljIHZvaWQgdW5peF9nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvdW5peC9nYXJiYWdlLmMtNjEwLXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNjE1LVxubmV0L3VuaXgvZ2FyYmFnZS5jOjYxNjpcdHNwaW5fbG9jayhcdTAwMjZ1bml4X2djX2xvY2spO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTYxNy1cbm5ldC91bml4L2dhcmJhZ2UuYy02MTgtXHRpZiAodW5peF9ncmFwaF9zdGF0ZSA9PSBVTklYX0dSQVBIX05PVF9DWUNMSUMpIHtcbm5ldC91bml4L2dhcmJhZ2UuYzo2MTk6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnVuaXhfZ2NfbG9jayk7XG5uZXQvdW5peC9nYXJiYWdlLmMtNjIwLVx0XHRnb3RvIHNraXBfZ2M7XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTYyOS1cbm5ldC91bml4L2dhcmJhZ2UuYzo2MzA6XHRzcGluX3VubG9jayhcdTAwMjZ1bml4X2djX2xvY2spO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTYzMS1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNjQxLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjY0MjpzdGF0aWMgREVDTEFSRV9XT1JLKHVuaXhfZ2Nfd29yaywgdW5peF9nYyk7XG5uZXQvdW5peC9nYXJiYWdlLmMtNjQzLVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYz02NDY9dm9pZCB1bml4X3NjaGVkdWxlX2djKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcilcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNjU4LVx0aWYgKCFSRUFEX09OQ0UoZ2NfaW5fcHJvZ3Jlc3MpKVxubmV0L3VuaXgvZ2FyYmFnZS5jOjY1OTpcdFx0cXVldWVfd29yayhzeXN0ZW1fZGZsX3dxLCBcdTAwMjZ1bml4X2djX3dvcmspO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTY2MC1cbm5ldC91bml4L2dhcmJhZ2UuYy02NjEtXHRpZiAodXNlciBcdTAwMjZcdTAwMjYgUkVBRF9PTkNFKHVuaXhfZ3JhcGhfY3ljbGljX3NjY3MpKVxubmV0L3VuaXgvZ2FyYmFnZS5jOjY2MjpcdFx0Zmx1c2hfd29yayhcdTAwMjZ1bml4X2djX3dvcmspO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTY2My19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NDAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBOZXQvVW5peCBCdWlsZCBQcm9jZXNzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgbmV0L3VuaXgvZ2FyYmFnZS5jYCBnZXRzIGJ1aWx0LiBGaXJzdCBpbnN0aW5jdDogS2NvbmZpZy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSYjMzk7cyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udHJvbHMgaXRzIGluY2x1c2lvbi4gQWgsIHJpZ2h0LCB0aGF0JiMzOTtzIHdoZXJlIHRoZSAqYWN0dWFsKiBidWlsZCBydWxlcyBhcmUsIG5vdCB1c3VhbGx5IGluIEtjb25maWcuIE5leHQgc3RlcDogZGl2ZSBpbnRvIHRoZSBgbmV0L3VuaXgvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkaXJlY3QgYW5zd2VyLCBvciBhdCBsZWFzdCBwb2ludCBtZSB0byB0aGUgcmVsZXZhbnQgdmFyaWFibGVzIGFuZCBkZXBlbmRlbmNpZXMuIEdvdHRhIHRyYWNrIGRvd24gdGhvc2UgYnVpbGQgaW5zdHJ1Y3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggdW5peCBkb21haW4gc29ja2V0IGxheWVyLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfVU5JWClcdCYjNDM7PSB1bml4Lm9cbiAgIDc6XHRcbiAgIDg6XHR1bml4LXlcdFx0XHQ6PSBhZl91bml4Lm8gZ2FyYmFnZS5vXG4gICA5Olx0dW5peC0kKENPTkZJR19TWVNDVEwpXHQmIzQzOz0gc3lzY3RsX25ldF91bml4Lm9cbiAgMTA6XHR1bml4LSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdW5peF9icGYub1xuICAxMTpcdFxuICAxMjpcdG9iai0kKENPTkZJR19VTklYX0RJQUcpXHQmIzQzOz0gdW5peF9kaWFnLm9cbiAgMTM6XHR1bml4X2RpYWcteVx0XHQ6PSBkaWFnLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkxOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgVU5JWCBEb21haW4gU29ja2V0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYENPTkZJR19VTklYYCDigJMgdGhhdCYjMzk7cyB0aGUgc3RhbmRhcmQgZm9yIFVOSVggZG9tYWluIHNvY2tldHMsIHJpZ2h0PyBKdXN0IG1ha2luZyBhYnNvbHV0ZWx5IGNlcnRhaW4gaGVyZS4gQmVzdCBwcmFjdGljZSBkaWN0YXRlcyB0aGF0IEkgdmVyaWZ5IHRoaXMgaW4gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZS4gSSYjMzk7bGwgb3BlbiB1cCBgbmV0L3VuaXgvS2NvbmZpZ2AgYW5kIHRha2UgYSBxdWljayBsb29rIGp1c3QgdG8gY29uZmlybSBteSBpbml0aWFsIGFzc3VtcHRpb24uIEJldHRlciB0byBiZSB0aG9yb3VnaCBhbmQgYXZvaWQgYW55IHBvdGVudGlhbCBnb3RjaGFzIGRvd24gdGhlIGxpbmUuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgbmV0d29yayBzdGFjaywgc28gaXQmIzM5O3Mgd29ydGggdGhlIHF1aWNrIGRvdWJsZS1jaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdW5peC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVW5peCBEb21haW4gU29ja2V0c1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgVU5JWFxuICAgNzpcdFx0Ym9vbCBcJiMzNDtVbml4IGRvbWFpbiBzb2NrZXRzXCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBpbmNsdWRlIHN1cHBvcnQgZm9yIFVuaXggZG9tYWluIHNvY2tldHM7XG4gIDEwOlx0XHQgIHNvY2tldHMgYXJlIHRoZSBzdGFuZGFyZCBVbml4IG1lY2hhbmlzbSBmb3IgZXN0YWJsaXNoaW5nIGFuZFxuICAxMTpcdFx0ICBhY2Nlc3NpbmcgbmV0d29yayBjb25uZWN0aW9ucy4gIE1hbnkgY29tbW9ubHkgdXNlZCBwcm9ncmFtcyBzdWNoIGFzXG4gIDEyOlx0XHQgIHRoZSBYIFdpbmRvdyBzeXN0ZW0gYW5kIHN5c2xvZyB1c2UgdGhlc2Ugc29ja2V0cyBldmVuIGlmIHlvdXJcbiAgMTM6XHRcdCAgbWFjaGluZSBpcyBub3QgY29ubmVjdGVkIHRvIGFueSBuZXR3b3JrLiAgVW5sZXNzIHlvdSBhcmUgd29ya2luZyBvblxuICAxNDpcdFx0ICBhbiBlbWJlZGRlZCBzeXN0ZW0gb3Igc29tZXRoaW5nIHNpbWlsYXIsIHlvdSB0aGVyZWZvcmUgZGVmaW5pdGVseVxuICAxNTpcdFx0ICB3YW50IHRvIHNheSBZIGhlcmUuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIFNheSBZIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnXHRBRl9VTklYX09PQlxuICAyMDpcdFx0Ym9vbCBcJiMzNDtVTklYOiBvdXQtb2YtYm91bmQgbWVzc2FnZXNcJiMzNDtcbiAgMjE6XHRcdGRlcGVuZHMgb24gVU5JWFxuICAyMjpcdFx0ZGVmYXVsdCB5XG4gIDIzOlx0XHRoZWxwXG4gIDI0Olx0XHQgIFN1cHBvcnQgZm9yIE1TR19PT0IgaW4gVU5JWCBkb21haW4gc29ja2V0cy4gSWYgdW5zdXJlLCBzYXkgWS5cbiAgMjU6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MjMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxNjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENyaXRpY2FsIE5ldHdvcmsgR2FyYmFnZSBDb2xsZWN0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIGNvZGUgaW4gZnJvbnQgb2YgbWUsIHBhcnQgb2YgdGhlIGNvcmUgbmV0d29ya2luZyYjMzk7cyBVbml4IGRvbWFpbiBzb2NrZXRzIGdhcmJhZ2UgY29sbGVjdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBTQ0MgZGV0ZWN0aW9uIGFsZ29yaXRobS4gIEkgc2VlIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBmdW5jdGlvbnMgbGlrZSBgX191bml4X3dhbGtfc2NjYCwgYHVuaXhfc2NjX2RlYWRgLCBhbmQgYHVuaXhfd2Fsa19zY2NfZmFzdGAuICBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBmdXp6YWJpbGl0eS4gIEdpdmVuIHRoZSBuYXR1cmUgb2YgVW5peCBkb21haW4gc29ja2V0cywgYW5kIGhvdyBlYXN5IGl0IGlzIHRvIGNyZWF0ZSB0aGVtLCBwYXNzIGZpbGUgZGVzY3JpcHRvcnMgYXJvdW5kICh1c2luZyBgc2NtX3JpZ2h0c2ApLCBjbG9zZSBzb2NrZXRzIHRvIHRyaWdnZXIgZ2FyYmFnZSBjb2xsZWN0aW9uLCBpdCBsb29rcyBsaWtlIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzIGNvdWxkIGFic29sdXRlbHkgcmVhY2ggdGhpcyBjb2RlLiAgU3l6a2FsbGVyLCBmb3IgaW5zdGFuY2UsIGhhcyBmdWxsIGRlc2NyaXB0aW9ucyBhbmQgYWN0aXZlbHkgdGVzdHMgdGhpcy4gIEhpc3RvcmljYWxseSwgdGhpcyBHQyBjb2RlIGhhcyBiZWVuIGEgaG90YmVkIGZvciBuYXN0eSBidWdzLCByYWNlcywgbWVtb3J5IGxlYWtzLCBhbmQgVUFGcy4gU28sIHRoaXMgZGVmaW5pdGVseSBncmFicyBteSBhdHRlbnRpb24uCgpOb3csIGxldCYjMzk7cyBkaXNzZWN0IHRoZSBwYXRjaCBpdHNlbGYuIEkmIzM5O20gZm9jdXNpbmcgb24gd2hhdCYjMzk7cyBjaGFuZ2VkIGluIGB1bml4X3NjY19kZWFkYC4gIFByZXZpb3VzbHksIHRoZXJlIHdhcyBhIGBmYXN0YCBmbGFnLCBhbmQgc29tZSBsb2dpYyB0byBtYXJrIHZlcnRpY2VzIGFzICYjMzQ7b2ZmLXN0YWNrJiMzNDsgd2l0aGluIHRoYXQgZnVuY3Rpb24uICBOb3csIHRoZSBgZmFzdGAgcGFyYW1ldGVyIGlzIGdvbmUsIGFuZCB0aGUgbWFya2luZyBsb2dpYyBoYXMgbW92ZWQuICBJbnN0ZWFkLCBpbiBgX191bml4X3dhbGtfc2NjYCwgYWZ0ZXIgdGhlIFNDQyBpcyBkZXRlcm1pbmVkIHVzaW5nIGBfX2xpc3RfY3V0X3Bvc2l0aW9uYCwgYSBsb29wIGl0ZXJhdGVzICpiYWNrd2FyZHMqIHRocm91Z2ggdGhlIHZlcnRpY2VzLiBJdCBub3cgc2V0cyBib3RoIGB2LSZndDtpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXhgIGFuZCBgdi0mZ3Q7c2NjX2luZGV4ID0gdmVydGV4LSZndDtzY2NfaW5kZXg7YC4gIFRoYXQgYHYtJmd0O3NjY19pbmRleGAgYXNzaWdubWVudCBpcyB0aGUga2V5IGRpZmZlcmVuY2UuCgpUaGlzIGlzIGltbWVkaWF0ZWx5IHJhaXNpbmcgYSBmbGFnLiAgSW4gVGFyamFuJiMzOTtzIFNDQyBhbGdvcml0aG0sIGxpa2UgdGhlIG9uZSB1c2VkIGhlcmUsIHZlcnRpY2VzIGluIGFuIFNDQyBjYW4gaGF2ZSBkaWZmZXJlbnQgbG93cG9pbnRzICh3aGljaCBhcmUgcmVwcmVzZW50ZWQgYnkgc2NjX2luZGV4KSwgaWYgbm90IHVuaWZpZWQuIEFsc28sIG9mZi1zdGFjayBoYW5kbGluZyBjYW4gaGF2ZSBpc3N1ZXMuIFRoZSBjaGFuZ2UgaXMgc2V0dGluZyBgdi0mZ3Q7aW5kZXhgIGFuZCBgdi0mZ3Q7c2NjX2luZGV4YCAqYmVmb3JlKiB0aGUgYHVuaXhfc2NjX2RlYWRgIGZ1bmN0aW9uIHJ1bnMuIFRoaXMgaXMgY2hhbmdpbmcgd2hlbiBhbmQgaG93IHZlcnRpY2VzIGFyZSBtYXJrZWQgYW5kIHRoZWlyIGBzY2NfaW5kZXhgLiAgVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiBjb3JlIGxvZ2ljLgoKU28sIHRoaXMgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpbiBjb3JlIG5ldHdvcmtpbmcgKGBuZXQvdW5peC9nYXJiYWdlLmNgKS4gIElzIHRoaXMgd29ydGggZnV6emluZz8gIEFic29sdXRlbHksIHBlciB0aGUgZ3VpZGVsaW5lcyEgIEl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVW5peCBkb21haW4gc29ja2V0cyBpbiBRRU1VL0dDRSwgaXQmIzM5O3MgYSBtb2RpZmljYXRpb24gb2YgcmVhY2hhYmxlIGNvZGUsIGl0JiMzOTtzIGluIGEgY29yZSBzdWJzeXN0ZW0gKGNvcmUgbmV0d29ya2luZyksIHNvIGl0JiMzOTtzIFdvcnRoRnV6emluZy4KCk5vdywgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBpbXBvcnRhbnQgc3ltYm9scyBmb3IgZnV6emluZy4gIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYF9fdW5peF93YWxrX3NjY2AsIGB1bml4X3NjY19kZWFkYCwgYHVuaXhfd2Fsa19zY2NfZmFzdGAsIGB1bml4X3dhbGtfc2NjYCBhbmQgYHVuaXhfZ2NgLiBOZXh0LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXNlIGFyZSBzdGF0aWMgb3IgZ2xvYmFsLCBhbmQgaG93IHRoZXkgYXJlIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KHZvaWR8Ym9vbHx1bnNpZ25lZCBsb25nfGludCkgLipcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdW5peC9nYXJiYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3VuaXgvZ2FyYmFnZS5jPTEzMD1zdGF0aWMgdW5zaWduZWQgY2hhciB1bml4X2dyYXBoX3N0YXRlO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTEzMS1cbm5ldC91bml4L2dhcmJhZ2UuYzoxMzI6c3RhdGljIHZvaWQgdW5peF91cGRhdGVfZ3JhcGgoc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgpXG5uZXQvdW5peC9nYXJiYWdlLmMtMTMzLXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9MTUyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X21heF9zY2NfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9TVEFSVDtcbm5ldC91bml4L2dhcmJhZ2UuYy0xNTMtXG5uZXQvdW5peC9nYXJiYWdlLmM6MTU0OnN0YXRpYyB2b2lkIHVuaXhfYWRkX2VkZ2Uoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwsIHN0cnVjdCB1bml4X2VkZ2UgKmVkZ2UpXG5uZXQvdW5peC9nYXJiYWdlLmMtMTU1LXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMTc1LVxubmV0L3VuaXgvZ2FyYmFnZS5jOjE3NjpzdGF0aWMgdm9pZCB1bml4X2RlbF9lZGdlKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsLCBzdHJ1Y3QgdW5peF9lZGdlICplZGdlKVxubmV0L3VuaXgvZ2FyYmFnZS5jLTE3Ny17XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTE5Mi1cbm5ldC91bml4L2dhcmJhZ2UuYzoxOTM6c3RhdGljIHZvaWQgdW5peF9mcmVlX3ZlcnRpY2VzKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKVxubmV0L3VuaXgvZ2FyYmFnZS5jLTE5NC17XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jPTIwMz1zdGF0aWMgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NQSU5MT0NLKHVuaXhfZ2NfbG9jayk7XG5uZXQvdW5peC9nYXJiYWdlLmMtMjA0LVxubmV0L3VuaXgvZ2FyYmFnZS5jOjIwNTp2b2lkIHVuaXhfYWRkX2VkZ2VzKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsLCBzdHJ1Y3QgdW5peF9zb2NrICpyZWNlaXZlcilcbm5ldC91bml4L2dhcmJhZ2UuYy0yMDYte1xuLS1cbm5ldC91bml4L2dhcmJhZ2UuYy0yMzgtXG5uZXQvdW5peC9nYXJiYWdlLmM6MjM5OnZvaWQgdW5peF9kZWxfZWRnZXMoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXG5uZXQvdW5peC9nYXJiYWdlLmMtMjQwLXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMjY2LVxubmV0L3VuaXgvZ2FyYmFnZS5jOjI2Nzp2b2lkIHVuaXhfdXBkYXRlX2VkZ2VzKHN0cnVjdCB1bml4X3NvY2sgKnJlY2VpdmVyKVxubmV0L3VuaXgvZ2FyYmFnZS5jLTI2OC17XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTI4Mi1cbm5ldC91bml4L2dhcmJhZ2UuYzoyODM6aW50IHVuaXhfcHJlcGFyZV9mcGwoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXG5uZXQvdW5peC9nYXJiYWdlLmMtMjg0LXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMzEyLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjMxMzp2b2lkIHVuaXhfZGVzdHJveV9mcGwoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXG5uZXQvdW5peC9nYXJiYWdlLmMtMzE0LXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9MzIzPXN0YXRpYyBzZXFjb3VudF90IHVuaXhfcGVla19zZXEgPSBTRVFDTlRfWkVSTyh1bml4X3BlZWtfc2VxKTtcbm5ldC91bml4L2dhcmJhZ2UuYy0zMjQtXG5uZXQvdW5peC9nYXJiYWdlLmM6MzI1OnZvaWQgdW5peF9wZWVrX2ZwbChzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbClcbm5ldC91bml4L2dhcmJhZ2UuYy0zMjYte1xuLS1cbm5ldC91bml4L2dhcmJhZ2UuYy0zNDAtXG5uZXQvdW5peC9nYXJiYWdlLmM6MzQxOnN0YXRpYyBib29sIHVuaXhfdmVydGV4X2RlYWQoc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgpXG5uZXQvdW5peC9nYXJiYWdlLmMtMzQyLXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9Mzc1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMjtcbm5ldC91bml4L2dhcmJhZ2UuYy0zNzYtXG5uZXQvdW5peC9nYXJiYWdlLmM6Mzc3OnN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjKVxubmV0L3VuaXgvZ2FyYmFnZS5jLTM3OC17XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTM5OS1cbm5ldC91bml4L2dhcmJhZ2UuYzo0MDA6c3RhdGljIHZvaWQgdW5peF9jb2xsZWN0X3NrYihzdHJ1Y3QgbGlzdF9oZWFkICpzY2MsIHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXG5uZXQvdW5peC9nYXJiYWdlLmMtNDAxLXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNDMyLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjQzMzpzdGF0aWMgYm9vbCB1bml4X3NjY19jeWNsaWMoc3RydWN0IGxpc3RfaGVhZCAqc2NjKVxubmV0L3VuaXgvZ2FyYmFnZS5jLTQzNC17XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ1Mi1cbm5ldC91bml4L2dhcmJhZ2UuYzo0NTM6c3RhdGljIHVuc2lnbmVkIGxvbmcgX191bml4X3dhbGtfc2NjKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ1NC1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9pbmRleCxcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9NTU2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfZ3JhcGhfY3ljbGljX3NjY3M7XG5uZXQvdW5peC9nYXJiYWdlLmMtNTU3LVxubmV0L3VuaXgvZ2FyYmFnZS5jOjU1ODpzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjKHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXG5uZXQvdW5peC9nYXJiYWdlLmMtNTU5LXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNTgyLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjU4MzpzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjX2Zhc3Qoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcbm5ldC91bml4L2dhcmJhZ2UuYy01ODQte1xuLS1cbm5ldC91bml4L2dhcmJhZ2UuYy02MDgtXG5uZXQvdW5peC9nYXJiYWdlLmM6NjA5OnN0YXRpYyB2b2lkIHVuaXhfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L3VuaXgvZ2FyYmFnZS5jLTYxMC17XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jPTY0Mj1zdGF0aWMgREVDTEFSRV9XT1JLKHVuaXhfZ2Nfd29yaywgdW5peF9nYyk7XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTY0NS1cbm5ldC91bml4L2dhcmJhZ2UuYzo2NDY6dm9pZCB1bml4X3NjaGVkdWxlX2djKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcilcbm5ldC91bml4L2dhcmJhZ2UuYy02NDcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA5OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4gSGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcgYXMgSSBhcHByb2FjaCB0aGlzIGB1bml4X3NjaGVkdWxlX2djYCBmdW5jdGlvbi4KCioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGB1bml4X3NjaGVkdWxlX2djYCoqCgpSaWdodCwgc28gdGhlIGZpcnN0IHN0ZXAsIGFzIGFsd2F5cyB3aGVuIEkgZW5jb3VudGVyIGEgZnVuY3Rpb24gSSBkb24mIzM5O3QgaW5zdGFudGx5IHJlY29nbml6ZSwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoZXJlKiB0aGlzIGB1bml4X3NjaGVkdWxlX2djYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gV2hhdCBwYXJ0cyBvZiB0aGUgc3lzdGVtIHJlbHkgb24gaXQ/IFdoYXQgYXJlIHRoZSBjYWxsaW5nIHNlcXVlbmNlcz8gSXMgaXQgY2FsbGVkIGZyb20gYSBjcml0aWNhbCBwYXRoLCBvciBzb21ldGhpbmcgbW9yZSBhbmNpbGxhcnk/IEtub3dpbmcgdGhpcyB3aWxsIGltbWVkaWF0ZWx5IGluZm9ybSBtZSBhYm91dCBpdHMgbGlrZWx5IGltcG9ydGFuY2UsIHB1cnBvc2UsIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBjb2RlLCBpZGVhbGx5IHVzaW5nIG15IGRlYnVnZ2VyIG9yIGNvZGUgYnJvd3NpbmcgdG9vbHMgdG8gbGlzdCB0aGUgY2FsbGVycy4gSSBuZWVkIHRvIHNlZSB0aGUgc3RhY2sgdHJhY2VzIHRoYXQgd291bGQgdWx0aW1hdGVseSBsZWFkIHRvIGB1bml4X3NjaGVkdWxlX2djYC4gSG9wZWZ1bGx5LCB0aGUgY2FsbCBzaXRlcyBoYXZlIGhlbHBmdWwgY29tbWVudHMsIGJ1dCBJJiMzOTttIHByZXBhcmVkIHRvIGRvIHNvbWUgZGlnZ2luZy4gTXkgZ29hbCBpcyB0byBwYWludCBhIG1lbnRhbCBwaWN0dXJlIG9mIHRoZSBlbnZpcm9ubWVudCB0aGF0IHRyaWdnZXJzIGB1bml4X3NjaGVkdWxlX2djYC4gSSYjMzk7bGwgcGF5IGF0dGVudGlvbiB0byBhbnkgYXJndW1lbnRzIGJlaW5nIHBhc3NlZCwgYXMgdGhvc2UgYXJlIGNydWNpYWwgY2x1ZXMuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIHJlYXNvbiBhYm91dCAqd2h5KiBpdCYjMzk7cyBiZWluZyBjYWxsZWQsIGFuZCAqd2hhdCogaXQmIzM5O3MgYWN0dWFsbHkgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VuaXhfc2NoZWR1bGVfZ2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3VuaXgvYWZfdW5peC5jPTY2NT1zdGF0aWMgdm9pZCB1bml4X3JlbGVhc2Vfc29jayhzdHJ1Y3Qgc29jayAqc2ssIGludCBlbWJyaW9uKVxuLS1cbm5ldC91bml4L2FmX3VuaXguYy03MzUtXG5uZXQvdW5peC9hZl91bml4LmM6NzM2Olx0dW5peF9zY2hlZHVsZV9nYyhOVUxMKTtcbm5ldC91bml4L2FmX3VuaXguYy03MzctfVxuLS1cbm5ldC91bml4L2FmX3VuaXguaD0zMj12b2lkIHVuaXhfcGVla19mcGwoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpO1xubmV0L3VuaXgvYWZfdW5peC5oOjMzOnZvaWQgdW5peF9zY2hlZHVsZV9nYyhzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpO1xubmV0L3VuaXgvYWZfdW5peC5oLTM0LVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYz0yODM9aW50IHVuaXhfcHJlcGFyZV9mcGwoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTMwMy1cbm5ldC91bml4L2dhcmJhZ2UuYzozMDQ6XHR1bml4X3NjaGVkdWxlX2djKGZwbC1cdTAwM2V1c2VyKTtcbm5ldC91bml4L2dhcmJhZ2UuYy0zMDUtXG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jPTY0Mj1zdGF0aWMgREVDTEFSRV9XT1JLKHVuaXhfZ2Nfd29yaywgdW5peF9nYyk7XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTY0NS1cbm5ldC91bml4L2dhcmJhZ2UuYzo2NDY6dm9pZCB1bml4X3NjaGVkdWxlX2djKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcilcbm5ldC91bml4L2dhcmJhZ2UuYy02NDcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDc0OQoJCQkJCQkJb3V0cHV0OiAxOTEKCQkJCQkJCXRob3VnaHRzOiA0OTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFVOSVggRG9tYWluIFNvY2tldCBHYXJiYWdlIENvbGxlY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBzY29wZSBvZiB0aGUgbW9kaWZpY2F0aW9ucy4gVGhlIGZ1bmN0aW9ucyBkaXJlY3RseSBpbXBhY3RlZCBhcmUgYF9fdW5peF93YWxrX3NjY2AsIGB1bml4X3NjY19kZWFkYCwgYW5kIGB1bml4X3dhbGtfc2NjX2Zhc3RgLiBUaGVzZSBmdW5jdGlvbnMsIGFsb25nIHdpdGggcmVsYXRlZCBlbnRyeXBvaW50cyBgdW5peF93YWxrX3NjY2AgYW5kIGB1bml4X2djYCwgaW1tZWRpYXRlbHkgc2lnbmFsIHRoYXQgdGhpcyBwYXRjaCBpcyB0aWdodGx5IGNvdXBsZWQgd2l0aCBVTklYIGRvbWFpbiBzb2NrZXQgZ2FyYmFnZSBjb2xsZWN0aW9uLiBJdCYjMzk7cyBub3QgYSBnZW5lcmljIGNoYW5nZTsgaXQmIzM5O3MgZm9jdXNlZC4gVGhleSBhcmUgc3RyaWN0bHkgbGltaXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgVU5JWCBkb21haW4gc29ja2V0cywgcGFydGljdWxhcmx5IHRoZSBjbGVhbnVwIGFmdGVyIGZpbGUgZGVzY3JpcHRvciBwYXNzaW5nIG9yIHNvY2tldCBjbG9zdXJlLgoKU2luY2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBuaWNoZSwgbGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgZm9yIHViaXF1aXR5LiBOb3BlLCB0aGV5JiMzOTtyZSBhbGwgc3BlY2lmaWNhbGx5IHBhcnQgb2YgdGhlIFVuaXggc29ja2V0IGdhcmJhZ2UgY29sbGVjdGlvbiBtZWNoYW5pc20uIEV4Y2VsbGVudCwgdGhhdCBjbGFyaWZpZXMgdGhpbmdzLgoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGUgY29kZSB1c2VzIGBDT05GSUdfVU5JWGAuIEEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBgbmV0L3VuaXgvS2NvbmZpZ2AgZGVmaW5lcyBgQ09ORklHX1VOSVhgIGFzIGEgYm9vbGVhbiBvcHRpb24sIGFuZCBpdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gaGF2ZSBhbnkgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMsIGl0IGlzIG9ubHkgYSBib29sZWFuIGFuZCB0aGUgc291cmNlIGlzIGluIGBuZXQvS2NvbmZpZ2AuIFRoaXMgbWVhbnMgdGhlIHJlbGV2YW50IGNvZGUgd2lsbCBiZSBidWlsdCBvbmx5IGlmIGBDT05GSUdfVU5JWGAgaXMgZW5hYmxlZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLgoKVGltZSB0byBhcnRpY3VsYXRlIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIEkmIzM5O2xsIGZsYWcgYFdvcnRoRnV6emluZ2AgYXMgYHRydWVgIGdpdmVuIHRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGNvZGUgZGVhbGluZyB3aXRoIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1VOSVggc29ja2V0cy4gVGhlIGBSZWFzb25pbmdgIHdpbGwgZGVzY3JpYmUgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnQgKFNDQykgYWxnb3JpdGhtIGZvciBVTklYIGRvbWFpbiBzb2NrZXQgZ2FyYmFnZSBjb2xsZWN0aW9uIChgbmV0L3VuaXgvZ2FyYmFnZS5jYCkuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyB3aGVuIHZlcnRpY2VzIGFyZSBtYXJrZWQgb2ZmLXN0YWNrIGFuZCBob3cgYHNjY19pbmRleGAgaXMgYXNzaWduZWQgdG8gdmVydGljZXMgd2l0aGluIGZpbmFsaXplZCBTQ0NzIChgX191bml4X3dhbGtfc2NjYCBhbmQgYHVuaXhfc2NjX2RlYWRgKS4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgY29kZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1VOSVggc29ja2V0cyBhbmQgU0NNX1JJR0hUUyBmaWxlIGRlc2NyaXB0b3IgcGFzc2luZy4gVGhlIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmU6IGBfX3VuaXhfd2Fsa19zY2NgLCBgdW5peF9zY2NfZGVhZGAsIGB1bml4X3dhbGtfc2NjX2Zhc3RgLCBgdW5peF93YWxrX3NjY2AsIGFuZCBgdW5peF9nY2AuIFRoZSBgRW5hYmxlQ29uZmlnc2Agd2lsbCBqdXN0IGluY2x1ZGUgYFVOSVhgLgoKRXZlcnl0aGluZyBsb29rcyBnb29kLiBObyByZWQgZmxhZ3MuIFJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VOSVgmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3VuaXhfd2Fsa19zY2MmIzM0OywKICAgICYjMzQ7dW5peF9zY2NfZGVhZCYjMzQ7LAogICAgJiMzNDt1bml4X3dhbGtfc2NjX2Zhc3QmIzM0OywKICAgICYjMzQ7dW5peF93YWxrX3NjYyYjMzQ7LAogICAgJiMzNDt1bml4X2djJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzdHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50cyAoU0NDKSBUYXJqYW4tYmFzZWQgY3ljbGUgZGV0ZWN0aW9uIGFsZ29yaXRobSBpbiBVTklYIGRvbWFpbiBzb2NrZXQgZ2FyYmFnZSBjb2xsZWN0aW9uIChuZXQvdW5peC9nYXJiYWdlLmMpLiBTcGVjaWZpY2FsbHksIGl0IHVwZGF0ZXMgX191bml4X3dhbGtfc2NjIHRvIGFzc2lnbiB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4IGFuZCB1cGRhdGUgc2NjX2luZGV4IGFjcm9zcyB0aGUgZW50aXJlIFNDQyBwcmlvciB0byBjYWxsaW5nIHVuaXhfc2NjX2RlYWQsIGFuZCByZW1vdmVzIHRoZSBmYXN0IHBhcmFtZXRlciBhbmQgb2ZmLXN0YWNrIG1hcmtpbmcgZnJvbSB1bml4X3NjY19kZWFkLiBUaGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpcyBkaXJlY3RseSBleGVyY2lzZWQgd2hlbiBwYXNzaW5nIGZpbGUgZGVzY3JpcHRvcnMgYWNyb3NzIFVOSVggc29ja2V0cyB2aWEgU0NNX1JJR0hUUy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VU5JWCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdW5peF93YWxrX3NjYyYjMzQ7LAogICAgJiMzNDt1bml4X3NjY19kZWFkJiMzNDssCiAgICAmIzM0O3VuaXhfd2Fsa19zY2NfZmFzdCYjMzQ7LAogICAgJiMzNDt1bml4X3dhbGtfc2NjJiMzNDssCiAgICAmIzM0O3VuaXhfZ2MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIChTQ0MpIFRhcmphbi1iYXNlZCBjeWNsZSBkZXRlY3Rpb24gYWxnb3JpdGhtIGluIFVOSVggZG9tYWluIHNvY2tldCBnYXJiYWdlIGNvbGxlY3Rpb24gKG5ldC91bml4L2dhcmJhZ2UuYykuIFNwZWNpZmljYWxseSwgaXQgdXBkYXRlcyBfX3VuaXhfd2Fsa19zY2MgdG8gYXNzaWduIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggYW5kIHVwZGF0ZSBzY2NfaW5kZXggYWNyb3NzIHRoZSBlbnRpcmUgU0NDIHByaW9yIHRvIGNhbGxpbmcgdW5peF9zY2NfZGVhZCwgYW5kIHJlbW92ZXMgdGhlIGZhc3QgcGFyYW1ldGVyIGFuZCBvZmYtc3RhY2sgbWFya2luZyBmcm9tIHVuaXhfc2NjX2RlYWQuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIGRpcmVjdGx5IGV4ZXJjaXNlZCB3aGVuIHBhc3NpbmcgZmlsZSBkZXNjcmlwdG9ycyBhY3Jvc3MgVU5JWCBzb2NrZXRzIHZpYSBTQ01fUklHSFRTLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBBRl9VTklYIGdhcmJhZ2UgY29sbGVjdG9yJiMzOTtzIFRhcmphbiBTdHJvbmdseSBDb25uZWN0ZWQgQ29tcG9uZW50IChTQ0MpIGFsZ29yaXRobSBpbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gSXQgbW92ZXMgdGhlIG9mZi1zdGFjayBtYXJraW5nIChgdi1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXhgKSBhbmQgU0NDIElEIGFzc2lnbm1lbnQgKGB2LVx1MDAzZXNjY19pbmRleCA9IHZlcnRleC1cdTAwM2VzY2NfaW5kZXhgKSBmb3IgU0NDIHZlcnRpY2VzIGZyb20gYHVuaXhfc2NjX2RlYWQoKWAgaW50byBgX191bml4X3dhbGtfc2NjKClgLCBzaW1wbGlmaWVzIGB1bml4X3NjY19kZWFkKClgIGJ5IHJlbW92aW5nIHRoZSBgZmFzdGAgcGFyYW1ldGVyLCBhbmQgYWRkcyBhIHJlZ3Jlc3Npb24gdGVzdCBpbiBrc2VsZnRlc3RzLlxuXG5UaGlzIGNoYW5nZSB0b3VjaGVzIHB1cmVseSBpbnRlcm5hbCBncmFwaCBib29ra2VlcGluZyBmaWVsZHMgb24gYHN0cnVjdCB1bml4X3ZlcnRleGAgb2JqZWN0cyB0aGF0IGFyZSBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgYW55IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZ3JhcGggdHJhdmVyc2FsLCBsaXN0IG1hbmlwdWxhdGlvbiwgb3Igc29ja2V0IGxpZmV0aW1lcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb25zKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIGZhY2lsaXRpZXMgKGUuZy4sIENPTkZJR19ERUJVR19MSVNUKS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjQyMjZkMDE2ZDBhZWQ2NGFjNGFjZjQ1MmYwNjVmYjIwNTcxYjY1NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDA0OjA0OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3VuaXgvZ2FyYmFnZS5jIGIvbmV0L3VuaXgvZ2FyYmFnZS5jCmluZGV4IDlmY2FhZjU1Y2JhNWQuLmRhNzc0ZjU2Y2E2NDggMTAwNjQ0Ci0tLSBhL25ldC91bml4L2dhcmJhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdW5peC9nYXJiYWdlLmMKQEAgLTM3NCw3ICYjNDM7Mzc0LDcgQEAgc3RhdGljIGJvb2wgdW5peF92ZXJ0ZXhfZGVhZChzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleCkKIHN0YXRpYyBMSVNUX0hFQUQodW5peF92aXNpdGVkX3ZlcnRpY2VzKTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMjsKIAotc3RhdGljIGJvb2wgdW5peF9zY2NfZGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpzY2MsIGJvb2wgZmFzdCkKJiM0MztzdGF0aWMgYm9vbCB1bml4X3NjY19kZWFkKHN0cnVjdCBsaXN0X2hlYWQgKnNjYykKIHsKIAlzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDsKIAlib29sIHNjY19kZWFkID0gdHJ1ZTsKQEAgLTM4NiwxMCAmIzQzOzM4Niw2IEBAIHN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBib29sIGZhc3QpCiAJCS8qIERvbiYjMzk7dCByZXN0YXJ0IERGUyBmcm9tIHRoaXMgdmVydGV4LiAqLwogCQlsaXN0X21vdmVfdGFpbCgmYW1wO3ZlcnRleC0mZ3Q7ZW50cnksICZhbXA7dW5peF92aXNpdGVkX3ZlcnRpY2VzKTsKIAotCQkvKiBNYXJrIHZlcnRleCBhcyBvZmYtc3RhY2sgZm9yIF9fdW5peF93YWxrX3NjYygpLiAqLwotCQlpZiAoIWZhc3QpCi0JCQl2ZXJ0ZXgtJmd0O2luZGV4ID0gdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleDsKLQogCQlpZiAoc2NjX2RlYWQpCiAJCQlzY2NfZGVhZCA9IHVuaXhfdmVydGV4X2RlYWQodmVydGV4KTsKIAl9CkBAIC01MjEsNiAmIzQzOzUxNyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdW5peF93YWxrX3NjYyhzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleCwKIAl9CiAKIAlpZiAodmVydGV4LSZndDtpbmRleCA9PSB2ZXJ0ZXgtJmd0O3NjY19pbmRleCkgewomIzQzOwkJc3RydWN0IHVuaXhfdmVydGV4ICp2OwogCQlzdHJ1Y3QgbGlzdF9oZWFkIHNjYzsKIAogCQkvKiBTQ0MgZmluYWxpc2VkLgpAQCAtNTMwLDcgJiM0Mzs1MjcsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX191bml4X3dhbGtfc2NjKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LAogCQkgKi8KIAkJX19saXN0X2N1dF9wb3NpdGlvbigmYW1wO3NjYywgJmFtcDt2ZXJ0ZXhfc3RhY2ssICZhbXA7dmVydGV4LSZndDtzY2NfZW50cnkpOwogCi0JCWlmICh1bml4X3NjY19kZWFkKCZhbXA7c2NjLCBmYWxzZSkpIHsKJiM0MzsJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZSh2LCAmYW1wO3NjYywgc2NjX2VudHJ5KSB7CiYjNDM7CQkJLyogTWFyayB2ZXJ0ZXggYXMgb2ZmLXN0YWNrIGFuZCBhc3NpZ24gYSB1bmlxdWUgSUQuICovCiYjNDM7CQkJdi0mZ3Q7aW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4OwomIzQzOwkJCXYtJmd0O3NjY19pbmRleCA9IHZlcnRleC0mZ3Q7c2NjX2luZGV4OwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHVuaXhfc2NjX2RlYWQoJmFtcDtzY2MpKSB7CiAJCQl1bml4X2NvbGxlY3Rfc2tiKCZhbXA7c2NjLCBoaXRsaXN0KTsKIAkJfSBlbHNlIHsKIAkJCWlmICh1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4ICZsdDsgdmVydGV4LSZndDtzY2NfaW5kZXgpCkBAIC01ODgsNyAmIzQzOzU5MSw3IEBAIHN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2NfZmFzdChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KQogCQl2ZXJ0ZXggPSBsaXN0X2ZpcnN0X2VudHJ5KCZhbXA7dW5peF91bnZpc2l0ZWRfdmVydGljZXMsIHR5cGVvZigqdmVydGV4KSwgZW50cnkpOwogCQlsaXN0X2FkZCgmYW1wO3NjYywgJmFtcDt2ZXJ0ZXgtJmd0O3NjY19lbnRyeSk7CiAKLQkJaWYgKHVuaXhfc2NjX2RlYWQoJmFtcDtzY2MsIHRydWUpKSB7CiYjNDM7CQlpZiAodW5peF9zY2NfZGVhZCgmYW1wO3NjYykpIHsKIAkJCWN5Y2xpY19zY2NzLS07CiAJCQl1bml4X2NvbGxlY3Rfc2tiKCZhbXA7c2NjLCBoaXRsaXN0KTsKIAkJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jCmluZGV4IGQ4MmE3OWMyMWMxNzkuLmMxNjVmMjUwMjIwYTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmMKQEAgLTM3OCw0ICYjNDM7Mzc4LDIxIEBAIFRFU1RfRihzY21fcmlnaHRzLCBiYWNrdHJhY2tfZnJvbV9zY2MpCiAJY2xvc2Vfc29ja2V0cygxMCk7CiB9CiAKJiM0MztURVNUX0Yoc2NtX3JpZ2h0cywgbWl4ZWRfbG93cG9pbnQpCiYjNDM7ewomIzQzOwljcmVhdGVfc29ja2V0cyg2KTsKJiM0MzsKJiM0MzsJc2VuZF9mZCgwLCAxKTsKJiM0MzsJc2VuZF9mZCgxLCAyKTsKJiM0MzsJc2VuZF9mZCgyLCAxKTsKJiM0MzsJc2VuZF9mZCgxLCAwKTsKJiM0MzsKJiM0MzsJc2VuZF9mZCgzLCA0KTsKJiM0MzsJc2VuZF9mZCg0LCA1KTsKJiM0MzsJc2VuZF9mZCg1LCA0KTsKJiM0MzsJc2VuZF9mZCg0LCAzKTsKJiM0MzsKJiM0MzsJY2xvc2Vfc29ja2V0cyg2KTsKJiM0Mzt9CiYjNDM7CiBURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdXNlciB3YW50cyB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBqdXN0aWZpZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBpbiBhZGRpdGlvbiB0byBvdXIgc3RhbmRhcmQgS0FTQU4gZWZmb3J0cy4gVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIHNvIHRoYXQmIzM5O3MgdGhlIGNvbnRleHQuIEZpcnN0LCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgd2h5LgoKTG9va2luZyBhdCB0aGUgZGlmZiBpbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYCwgaXQgc2VlbXMgdGhlIG1haW4gZm9jdXMgaXMgYXJvdW5kIHRoZSBgdW5peF9zY2NfZGVhZCgpYCBhbmQgYF9fdW5peF93YWxrX3NjYygpYCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYSBgYm9vbCBmYXN0YCBwYXJhbWV0ZXIgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGB1bml4X3NjY19kZWFkKClgLiBUaGF0IGNvbmRpdGlvbmFsIHRoYXQgY2hlY2tlZCB0aGlzIHZhbHVlIGhhcyBiZWVuIG1vdmVkIHRvIGBfX3VuaXhfd2Fsa19zY2MoKWAgYW5kIGl0IGludm9sdmVzIHNvbWUgc29ydCBvZiBsaXN0IHRyYXZlcnNhbCwgdGhlIGV4YWN0IGZ1bmN0aW9uIGl0IGlzIG9wZXJhdGluZyBvbiBpcyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cy4gVGhlIGB1bml4X3dhbGtfc2NjX2Zhc3QoKWAgZnVuY3Rpb24gbm93IHNpbXBseSBjYWxscyBgdW5peF9zY2NfZGVhZCgmYW1wO3NjYylgLCBzbyBpdCBpcyBhIGRpcmVjdCBjYWxsIGluc3RlYWQgb2YgYW4gZWFybGllciBjb25kaXRpb25hbC4gVGhlcmUmIzM5O3MgYWxzbyBhIG5ldyB0ZXN0IGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmNgIHdoaWNoLCBvbiBpdHMgb3duLCBtZWFucyBuZXh0IHRvIG5vdGhpbmcsIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8ga2VlcCB0cmFjayBvZi4KCkkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gYG5ldC91bml4L2dhcmJhZ2UuY2AgYW5kIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBwaWN0dXJlLiBJIHdhbnQgdG8gZ3JvayB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQgYnkgdGhlc2UgZnVuY3Rpb25zLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjaGFuZ2VzIGFsdGVyIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiB0aGUgYHNjY2AgKHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnQpIHJlbGF0ZWQgb3BlcmF0aW9ucy4gSXMgdGhlIHBhdGNoIGNoYW5naW5nIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkLCBmcmVlZCwgb3IgYWNjZXNzZWQgaW4gYSB3YXkgdGhhdCBtaWdodCBleHBvc2UgbmV3IEtNU0FOLWRldGVjdGFibGUgaXNzdWVzPyBVbmRlcnN0YW5kaW5nIHRoZSByb2xlIG9mIGB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4YCBhbmQgYHNjY19pbmRleGAgaXMgZXNzZW50aWFsLiBPbmx5IHRoZW4gY2FuIEkgZGV0ZXJtaW5lIGlmIHRoZXJlJiMzOTtzIGEgaGVpZ2h0ZW5lZCByaXNrIHByb2ZpbGUgdGhhdCB3YXJyYW50cyB0aGUgZXh0cmEgZWZmb3J0IG9mIGEgS01TQU4gc2Vzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdW5peC9nYXJiYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM3MDpcdFxuIDM3MTpcdFx0cmV0dXJuIHRydWU7XG4gMzcyOlx0fVxuIDM3MzpcdFxuIDM3NDpcdHN0YXRpYyBMSVNUX0hFQUQodW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcbiAzNzU6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfTUFSSzI7XG4gMzc2Olx0XG4gMzc3Olx0c3RhdGljIGJvb2wgdW5peF9zY2NfZGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpzY2MpXG4gMzc4Olx0e1xuIDM3OTpcdFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XG4gMzgwOlx0XHRib29sIHNjY19kZWFkID0gdHJ1ZTtcbiAzODE6XHRcdHVuc2lnbmVkIGludCBzZXE7XG4gMzgyOlx0XG4gMzgzOlx0XHRzZXEgPSByZWFkX3NlcWNvdW50X2JlZ2luKFx1MDAyNnVuaXhfcGVla19zZXEpO1xuIDM4NDpcdFxuIDM4NTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHZlcnRleCwgc2NjLCBzY2NfZW50cnkpIHtcbiAzODY6XHRcdFx0LyogRG9uJiMzOTt0IHJlc3RhcnQgREZTIGZyb20gdGhpcyB2ZXJ0ZXguICovXG4gMzg3Olx0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNnZlcnRleC1cdTAwM2VlbnRyeSwgXHUwMDI2dW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcbiAzODg6XHRcbiAzODk6XHRcdFx0aWYgKHNjY19kZWFkKVxuIDM5MDpcdFx0XHRcdHNjY19kZWFkID0gdW5peF92ZXJ0ZXhfZGVhZCh2ZXJ0ZXgpO1xuIDM5MTpcdFx0fVxuIDM5MjpcdFxuIDM5MzpcdFx0LyogSWYgTVNHX1BFRUsgaW50ZXJ2ZW5lZCwgZGVmZXIgdGhpcyBTQ0MgdG8gdGhlIG5leHQgcm91bmQuICovXG4gMzk0Olx0XHRpZiAocmVhZF9zZXFjb3VudF9yZXRyeShcdTAwMjZ1bml4X3BlZWtfc2VxLCBzZXEpKVxuIDM5NTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMzk2Olx0XG4gMzk3Olx0XHRyZXR1cm4gc2NjX2RlYWQ7XG4gMzk4Olx0fVxuIDM5OTpcdFxuIDQwMDpcdHN0YXRpYyB2b2lkIHVuaXhfY29sbGVjdF9za2Ioc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxuIDQwMTpcdHtcbiA0MDI6XHRcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4O1xuIDQwMzpcdFxuIDQwNDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHZlcnRleCwgc2NjLCBzY2NfZW50cnkpIHtcbiA0MDU6XHRcdFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWU7XG4gNDA2Olx0XHRcdHN0cnVjdCB1bml4X2VkZ2UgKmVkZ2U7XG4gNDA3Olx0XHRcdHN0cnVjdCB1bml4X3NvY2sgKnU7XG4gNDA4Olx0XG4gNDA5Olx0XHRcdGVkZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNnZlcnRleC1cdTAwM2VlZGdlcywgdHlwZW9mKCplZGdlKSwgdmVydGV4X2VudHJ5KTtcbiA0MTA6XHRcdFx0dSA9IGVkZ2UtXHUwMDNlcHJlZGVjZXNzb3I7XG4gNDExOlx0XHRcdHF1ZXVlID0gXHUwMDI2dS1cdTAwM2Vzay5za19yZWNlaXZlX3F1ZXVlO1xuIDQxMjpcdFxuIDQxMzpcdFx0XHRzcGluX2xvY2soXHUwMDI2cXVldWUtXHUwMDNlbG9jayk7XG4gNDE0Olx0XG4gNDE1Olx0XHRcdGlmICh1LVx1MDAzZXNrLnNrX3N0YXRlID09IFRDUF9MSVNURU4pIHtcbiA0MTY6XHRcdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDQxNzpcdFxuIDQxODpcdFx0XHRcdHNrYl9xdWV1ZV93YWxrKHF1ZXVlLCBza2IpIHtcbiA0MTk6XHRcdFx0XHRcdHN0cnVjdCBza19idWZmX2hlYWQgKmVtYnJ5b19xdWV1ZSA9IFx1MDAyNnNrYi1cdTAwM2Vzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTIzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc3ViamVjdCwgdGhpbmtpbmcgYWxvdWQsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYG5ldC91bml4L2dhcmJhZ2UuY2AqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBgbmV0L3VuaXgvZ2FyYmFnZS5jYCBhZ2Fpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFyb3VuZCB0aGUgYF9fdW5peF93YWxrX3NjY2AgYW5kIGB1bml4X3dhbGtfc2NjX2Zhc3RgIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIGNyaXRpY2FsIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtIHdvcmtzIHdpdGhpbiB0aGUgVW5peCBkb21haW4gc29ja2V0IHN1YnN5c3RlbSwgZXNwZWNpYWxseSBob3cgaXQgaGFuZGxlcyBjeWNsZSBkZXRlY3Rpb24uIEkgcmVjYWxsIHRoZXJlIHdlcmUgc29tZSBpbnRlcmVzdGluZyBudWFuY2VzIGluIGhvdyBpdCBoYW5kbGVzIHNoYXJlZCBtZW1vcnkgYW5kIGNpcmN1bGFyIHJlZmVyZW5jZXMuIExldCYjMzk7cyBzZWUgaWYgdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgcG90ZW50aWFsIGltcHJvdmVtZW50cyBJJiMzOTt2ZSBiZWVuIGNvbnNpZGVyaW5nLiBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGZhc3QgcGF0aCBpbiBgdW5peF93YWxrX3NjY19mYXN0YCB0byBqdWRnZSBpZiBteSBwcm9wb3NlZCBvcHRpbWl6YXRpb25zIGFyZSBhY3R1YWxseSBmZWFzaWJsZSBhbmQgd29uJiMzOTt0IGludHJvZHVjZSBuZXcgcHJvYmxlbXMuIFJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgcmVhZGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdW5peC9nYXJiYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0OTA6XHRcbiA0OTE6XHRcdFx0XHQvKiAgIDIuIFBvcCB0aGUgZWRnZSBkaXJlY3RlZCB0byB0aGUgY3VycmVudCB2ZXJ0ZXhcbiA0OTI6XHRcdFx0XHQgKiAgICAgIGFuZCByZXN0b3JlIHRoZSBhbmNlc3RvciBmb3IgYmFja3RyYWNraW5nLlxuIDQ5MzpcdFx0XHRcdCAqL1xuIDQ5NDpcdHByZXZfdmVydGV4OlxuIDQ5NTpcdFx0XHRcdGVkZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNmVkZ2Vfc3RhY2ssIHR5cGVvZigqZWRnZSksIHN0YWNrX2VudHJ5KTtcbiA0OTY6XHRcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmVkZ2UtXHUwMDNlc3RhY2tfZW50cnkpO1xuIDQ5NzpcdFxuIDQ5ODpcdFx0XHRcdG5leHRfdmVydGV4ID0gdmVydGV4O1xuIDQ5OTpcdFx0XHRcdHZlcnRleCA9IGVkZ2UtXHUwMDNlcHJlZGVjZXNzb3ItXHUwMDNldmVydGV4O1xuIDUwMDpcdFxuIDUwMTpcdFx0XHRcdC8qIElmIHRoZSBzdWNjZXNzb3IgaGFzIGEgc21hbGxlciBzY2NfaW5kZXgsIHR3byB2ZXJ0aWNlc1xuIDUwMjpcdFx0XHRcdCAqIGFyZSBpbiB0aGUgc2FtZSBTQ0MsIHNvIHByb3BhZ2F0ZSB0aGUgc21hbGxlciBzY2NfaW5kZXhcbiA1MDM6XHRcdFx0XHQgKiB0byBza2lwIFNDQyBmaW5hbGlzYXRpb24uXG4gNTA0Olx0XHRcdFx0ICovXG4gNTA1Olx0XHRcdFx0dmVydGV4LVx1MDAzZXNjY19pbmRleCA9IG1pbih2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4LCBuZXh0X3ZlcnRleC1cdTAwM2VzY2NfaW5kZXgpO1xuIDUwNjpcdFx0XHR9IGVsc2UgaWYgKG5leHRfdmVydGV4LVx1MDAzZWluZGV4ICE9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXgpIHtcbiA1MDc6XHRcdFx0XHQvKiBMb29wIGRldGVjdGVkIGJ5IGEgYmFjay9jcm9zcyBlZGdlLlxuIDUwODpcdFx0XHRcdCAqXG4gNTA5Olx0XHRcdFx0ICogVGhlIHN1Y2Nlc3NvciBpcyBvbiB2ZXJ0ZXhfc3RhY2ssIHNvIHR3byB2ZXJ0aWNlcyBhcmUgaW5cbiA1MTA6XHRcdFx0XHQgKiB0aGUgc2FtZSBTQ0MuICBJZiB0aGUgc3VjY2Vzc29yIGhhcyBhIHNtYWxsZXIgKnNjY19pbmRleCosXG4gNTExOlx0XHRcdFx0ICogcHJvcGFnYXRlIGl0IHRvIHNraXAgU0NDIGZpbmFsaXNhdGlvbi5cbiA1MTI6XHRcdFx0XHQgKi9cbiA1MTM6XHRcdFx0XHR2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4ID0gbWluKHZlcnRleC1cdTAwM2VzY2NfaW5kZXgsIG5leHRfdmVydGV4LVx1MDAzZXNjY19pbmRleCk7XG4gNTE0Olx0XHRcdH0gZWxzZSB7XG4gNTE1Olx0XHRcdFx0LyogVGhlIHN1Y2Nlc3NvciB3YXMgYWxyZWFkeSBncm91cGVkIGFzIGFub3RoZXIgU0NDICovXG4gNTE2Olx0XHRcdH1cbiA1MTc6XHRcdH1cbiA1MTg6XHRcbiA1MTk6XHRcdGlmICh2ZXJ0ZXgtXHUwMDNlaW5kZXggPT0gdmVydGV4LVx1MDAzZXNjY19pbmRleCkge1xuIDUyMDpcdFx0XHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnY7XG4gNTIxOlx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgc2NjO1xuIDUyMjpcdFxuIDUyMzpcdFx0XHQvKiBTQ0MgZmluYWxpc2VkLlxuIDUyNDpcdFx0XHQgKlxuIDUyNTpcdFx0XHQgKiBJZiB0aGUgc2NjX2luZGV4IHdhcyBub3QgdXBkYXRlZCwgYWxsIHRoZSB2ZXJ0aWNlcyBhYm92ZSBvblxuIDUyNjpcdFx0XHQgKiB2ZXJ0ZXhfc3RhY2sgYXJlIGluIHRoZSBzYW1lIFNDQy4gIEdyb3VwIHRoZW0gdXNpbmcgc2NjX2VudHJ5LlxuIDUyNzpcdFx0XHQgKi9cbiA1Mjg6XHRcdFx0X19saXN0X2N1dF9wb3NpdGlvbihcdTAwMjZzY2MsIFx1MDAyNnZlcnRleF9zdGFjaywgXHUwMDI2dmVydGV4LVx1MDAzZXNjY19lbnRyeSk7XG4gNTI5Olx0XG4gNTMwOlx0XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZSh2LCBcdTAwMjZzY2MsIHNjY19lbnRyeSkge1xuIDUzMTpcdFx0XHRcdC8qIE1hcmsgdmVydGV4IGFzIG9mZi1zdGFjayBhbmQgYXNzaWduIGEgdW5pcXVlIElELiAqL1xuIDUzMjpcdFx0XHRcdHYtXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xuIDUzMzpcdFx0XHRcdHYtXHUwMDNlc2NjX2luZGV4ID0gdmVydGV4LVx1MDAzZXNjY19pbmRleDtcbiA1MzQ6XHRcdFx0fVxuIDUzNTpcdFxuIDUzNjpcdFx0XHRpZiAodW5peF9zY2NfZGVhZChcdTAwMjZzY2MpKSB7XG4gNTM3Olx0XHRcdFx0dW5peF9jb2xsZWN0X3NrYihcdTAwMjZzY2MsIGhpdGxpc3QpO1xuIDUzODpcdFx0XHR9IGVsc2Uge1xuIDUzOTpcdFx0XHRcdGlmICh1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4IFx1MDAzYyB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4KVxuIDU0MDpcdFx0XHRcdFx0dW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCA9IHZlcnRleC1cdTAwM2VzY2NfaW5kZXg7XG4gNTQxOlx0XG4gNTQyOlx0XHRcdFx0aWYgKHVuaXhfc2NjX2N5Y2xpYyhcdTAwMjZzY2MpKVxuIDU0MzpcdFx0XHRcdFx0Y3ljbGljX3NjY3MmIzQzOyYjNDM7O1xuIDU0NDpcdFx0XHR9XG4gNTQ1Olx0XG4gNTQ2Olx0XHRcdGxpc3RfZGVsKFx1MDAyNnNjYyk7XG4gNTQ3Olx0XHR9XG4gNTQ4Olx0XG4gNTQ5Olx0XHQvKiBOZWVkIGJhY2t0cmFja2luZyA/ICovXG4gNTUwOlx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2ZWRnZV9zdGFjaykpXG4gNTUxOlx0XHRcdGdvdG8gcHJldl92ZXJ0ZXg7XG4gNTUyOlx0XG4gNTUzOlx0XHRyZXR1cm4gY3ljbGljX3NjY3M7XG4gNTU0Olx0fVxuIDU1NTpcdFxuIDU1NjpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfZ3JhcGhfY3ljbGljX3NjY3M7XG4gNTU3Olx0XG4gNTU4Olx0c3RhdGljIHZvaWQgdW5peF93YWxrX3NjYyhzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxuIDU1OTpcdHtcbiA1NjA6XHRcdHVuc2lnbmVkIGxvbmcgbGFzdF9pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX1NUQVJUO1xuIDU2MTpcdFx0dW5zaWduZWQgbG9uZyBjeWNsaWNfc2NjcyA9IDA7XG4gNTYyOlx0XG4gNTYzOlx0XHR1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfU1RBUlQ7XG4gNTY0Olx0XG4gNTY1Olx0XHQvKiBWaXNpdCBldmVyeSB2ZXJ0ZXggZXhhY3RseSBvbmNlLlxuIDU2NjpcdFx0ICogX191bml4X3dhbGtfc2NjKCkgbW92ZXMgdmlzaXRlZCB2ZXJ0aWNlcyB0byB1bml4X3Zpc2l0ZWRfdmVydGljZXMuXG4gNTY3Olx0XHQgKi9cbiA1Njg6XHRcdHdoaWxlICghbGlzdF9lbXB0eShcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcykpIHtcbiA1Njk6XHRcdFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XG4gNTcwOlx0XG4gNTcxOlx0XHRcdHZlcnRleCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMsIHR5cGVvZigqdmVydGV4KSwgZW50cnkpO1xuIDU3MjpcdFx0XHRjeWNsaWNfc2NjcyAmIzQzOz0gX191bml4X3dhbGtfc2NjKHZlcnRleCwgXHUwMDI2bGFzdF9pbmRleCwgaGl0bGlzdCk7XG4gNTczOlx0XHR9XG4gNTc0Olx0XG4gNTc1Olx0XHRsaXN0X3JlcGxhY2VfaW5pdChcdTAwMjZ1bml4X3Zpc2l0ZWRfdmVydGljZXMsIFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzKTtcbiA1NzY6XHRcdHN3YXAodW5peF92ZXJ0ZXhfdW52aXNpdGVkX2luZGV4LCB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4KTtcbiA1Nzc6XHRcbiA1Nzg6XHRcdFdSSVRFX09OQ0UodW5peF9ncmFwaF9jeWNsaWNfc2NjcywgY3ljbGljX3NjY3MpO1xuIDU3OTpcdFx0V1JJVEVfT05DRSh1bml4X2dyYXBoX3N0YXRlLFxuIDU4MDpcdFx0XHQgICBjeWNsaWNfc2NjcyA/IFVOSVhfR1JBUEhfQ1lDTElDIDogVU5JWF9HUkFQSF9OT1RfQ1lDTElDKTtcbiA1ODE6XHR9XG4gNTgyOlx0XG4gNTgzOlx0c3RhdGljIHZvaWQgdW5peF93YWxrX3NjY19mYXN0KHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXG4gNTg0Olx0e1xuIDU4NTpcdFx0dW5zaWduZWQgbG9uZyBjeWNsaWNfc2NjcyA9IHVuaXhfZ3JhcGhfY3ljbGljX3NjY3M7XG4gNTg2Olx0XG4gNTg3Olx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpKSB7XG4gNTg4Olx0XHRcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4O1xuIDU4OTpcdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkIHNjYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM0NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgYHVuaXhfd2Fsa19zY2NfZmFzdGAgd29ya3MsIGFuZCB0byBkbyB0aGF0LCBJIG5lZWQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFNvLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpczoKCioqR3JhYmJpbmcgdGhlIEJpZyBQaWN0dXJlOiBgdW5peF93YWxrX3NjY19mYXN0YCoqCgpJIG5lZWQgdG8gc2VlIHRoZSAqcmVzdCogb2YgdGhlIGZ1bmN0aW9uLiAgSSBjYW4mIzM5O3QgdHJ1bHkgYW5hbHl6ZSBgdW5peF93YWxrX3NjY19mYXN0YCBpbiBpc29sYXRpb24uIFVuZGVyc3RhbmRpbmcgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGJyb2FkZXIgY29kZSBhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBvdmVyYWxsIGFsZ29yaXRobSBpcyBjcml0aWNhbC4gV2hhdCYjMzk7cyBpdCBjYWxsaW5nPyBXaGF0IGNhbGxzIGl0PyBXaGF0JiMzOTtzIGl0cyBnb2FsIGluIHRoZSBsYXJnZXIgc2NoZW1lIG9mIHRoaW5ncz8gVGhlIG90aGVyIGxpbmVzIG9mIGNvZGUgd2lsbCBvZmZlciB0aGUgaW1wb3J0YW50IGNvbnRleHQgSSBuZWVkIHRvIGdhaW4gZXhwZXJ0aXNlIG9uIHRoaXMgZnVuY3Rpb24uIFRoaXMgaXMgaG93IEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIGl0cyBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L2dhcmJhZ2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTgwOlx0XHRcdCAgIGN5Y2xpY19zY2NzID8gVU5JWF9HUkFQSF9DWUNMSUMgOiBVTklYX0dSQVBIX05PVF9DWUNMSUMpO1xuIDU4MTpcdH1cbiA1ODI6XHRcbiA1ODM6XHRzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjX2Zhc3Qoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcbiA1ODQ6XHR7XG4gNTg1Olx0XHR1bnNpZ25lZCBsb25nIGN5Y2xpY19zY2NzID0gdW5peF9ncmFwaF9jeWNsaWNfc2NjcztcbiA1ODY6XHRcbiA1ODc6XHRcdHdoaWxlICghbGlzdF9lbXB0eShcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcykpIHtcbiA1ODg6XHRcdFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XG4gNTg5Olx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgc2NjO1xuIDU5MDpcdFxuIDU5MTpcdFx0XHR2ZXJ0ZXggPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzLCB0eXBlb2YoKnZlcnRleCksIGVudHJ5KTtcbiA1OTI6XHRcdFx0bGlzdF9hZGQoXHUwMDI2c2NjLCBcdTAwMjZ2ZXJ0ZXgtXHUwMDNlc2NjX2VudHJ5KTtcbiA1OTM6XHRcbiA1OTQ6XHRcdFx0aWYgKHVuaXhfc2NjX2RlYWQoXHUwMDI2c2NjKSkge1xuIDU5NTpcdFx0XHRcdGN5Y2xpY19zY2NzLS07XG4gNTk2Olx0XHRcdFx0dW5peF9jb2xsZWN0X3NrYihcdTAwMjZzY2MsIGhpdGxpc3QpO1xuIDU5NzpcdFx0XHR9XG4gNTk4Olx0XG4gNTk5Olx0XHRcdGxpc3RfZGVsKFx1MDAyNnNjYyk7XG4gNjAwOlx0XHR9XG4gNjAxOlx0XG4gNjAyOlx0XHRsaXN0X3JlcGxhY2VfaW5pdChcdTAwMjZ1bml4X3Zpc2l0ZWRfdmVydGljZXMsIFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzKTtcbiA2MDM6XHRcbiA2MDQ6XHRcdFdSSVRFX09OQ0UodW5peF9ncmFwaF9jeWNsaWNfc2NjcywgY3ljbGljX3NjY3MpO1xuIDYwNTpcdFx0V1JJVEVfT05DRSh1bml4X2dyYXBoX3N0YXRlLFxuIDYwNjpcdFx0XHQgICBjeWNsaWNfc2NjcyA/IFVOSVhfR1JBUEhfQ1lDTElDIDogVU5JWF9HUkFQSF9OT1RfQ1lDTElDKTtcbiA2MDc6XHR9XG4gNjA4Olx0XG4gNjA5Olx0c3RhdGljIHZvaWQgdW5peF9nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gNjEwOlx0e1xuIDYxMTpcdFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBoaXRsaXN0O1xuIDYxMjpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA2MTM6XHRcbiA2MTQ6XHRcdFdSSVRFX09OQ0UoZ2NfaW5fcHJvZ3Jlc3MsIHRydWUpO1xuIDYxNTpcdFxuIDYxNjpcdFx0c3Bpbl9sb2NrKFx1MDAyNnVuaXhfZ2NfbG9jayk7XG4gNjE3Olx0XG4gNjE4Olx0XHRpZiAodW5peF9ncmFwaF9zdGF0ZSA9PSBVTklYX0dSQVBIX05PVF9DWUNMSUMpIHtcbiA2MTk6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2dW5peF9nY19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE4NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgaWYgdGhleSBhcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb21taXQgSGlzdG9yeSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGlzIHBhcnRpY3VsYXIgY29tbWl0LiBNeSBmaXJzdCBpbmNsaW5hdGlvbiBpcyBhbHdheXMgdG8gZGl2ZSBpbnRvIHRoZSBgZ2l0IGxvZ2AuIElmIHRoZSBlbnZpcm9ubWVudCBhbGxvd3MgaXQsIEkmIzM5O2xsIGV4ZWN1dGUgYGdpdCBsb2dgIHRvIGdldCBhIGZ1bGwgdmlldyBvZiB0aGUgY29tbWl0IGhpc3RvcnksIG1heWJlIGZpbHRlcmluZyBpdCBpZiB0aGVyZSYjMzk7cyBhIGxvdCBvZiBub2lzZS4gSWYgYGdpdCBsb2dgIGlzbiYjMzk7dCBpbW1lZGlhdGVseSBhY2Nlc3NpYmxlLCBvciBJJiMzOTttIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBzcGVjaWZpYyBxdWlja2x5LCBJJiMzOTtsbCB0dXJuIHRvIGEgZ3JlcHBlciBvciBzaW1pbGFyIHRvb2wgdG8gc2VhcmNoIHRoZSBsb2cgb3V0cHV0LiBBbHRlcm5hdGl2ZWx5LCBpZiBJICpjYW4qIHJ1biBgZ2l0IGxvZ2Agb24gdGhpcyBzcGVjaWZpYyBjb21taXQgSSB3aWxsOyB0aGlzIG1pZ2h0IGJlIHRoZSBxdWlja2VzdCByb3V0ZS4gSSBjYW4gYWxzbyBjaGVjayB0aGUgY29tbWl0IG1lc3NhZ2UgZGlyZWN0bHkuIFVuZGVyc3RhbmRpbmcgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUgaXMgY3J1Y2lhbC4gVGhpcyBoZWxwcyBtZSBnZXQgYSBoYW5kbGUgb24gd2hhdCBtaWdodCBoYXZlIGJlZW4gaW50ZW5kZWQgYnkgdGhlIGF1dGhvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4L2dhcmJhZ2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9nYXJiYWdlLmM9Mzc0PXN0YXRpYyBMSVNUX0hFQUQodW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcbm5ldC91bml4L2dhcmJhZ2UuYzozNzU6c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX01BUksyO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTM3Ni1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9NDUzPXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdW5peF93YWxrX3NjYyhzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleCxcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNTA1LVx0XHRcdHZlcnRleC1cdTAwM2VzY2NfaW5kZXggPSBtaW4odmVydGV4LVx1MDAzZXNjY19pbmRleCwgbmV4dF92ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4KTtcbm5ldC91bml4L2dhcmJhZ2UuYzo1MDY6XHRcdH0gZWxzZSBpZiAobmV4dF92ZXJ0ZXgtXHUwMDNlaW5kZXggIT0gdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCkge1xubmV0L3VuaXgvZ2FyYmFnZS5jLTUwNy1cdFx0XHQvKiBMb29wIGRldGVjdGVkIGJ5IGEgYmFjay9jcm9zcyBlZGdlLlxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYy01MzEtXHRcdFx0LyogTWFyayB2ZXJ0ZXggYXMgb2ZmLXN0YWNrIGFuZCBhc3NpZ24gYSB1bmlxdWUgSUQuICovXG5uZXQvdW5peC9nYXJiYWdlLmM6NTMyOlx0XHRcdHYtXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xubmV0L3VuaXgvZ2FyYmFnZS5jLTUzMy1cdFx0XHR2LVx1MDAzZXNjY19pbmRleCA9IHZlcnRleC1cdTAwM2VzY2NfaW5kZXg7XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jPTU1OD1zdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjKHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTU3NS1cdGxpc3RfcmVwbGFjZV9pbml0KFx1MDAyNnVuaXhfdmlzaXRlZF92ZXJ0aWNlcywgXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpO1xubmV0L3VuaXgvZ2FyYmFnZS5jOjU3NjpcdHN3YXAodW5peF92ZXJ0ZXhfdW52aXNpdGVkX2luZGV4LCB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4KTtcbm5ldC91bml4L2dhcmJhZ2UuYy01NzctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVW5peCBTb2NrZXQgR2FyYmFnZSBDb2xsZWN0aW9uIE9wdGltaXphdGlvbiBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgaXQgc2VlbXMgbGlrZSBhIGNoYW5nZSB3YXMgbWFkZSBpbiBgZ2FyYmFnZS5jYCB0aGF0IG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBUYXJqYW4mIzM5O3MgU3Ryb25nbHkgQ29ubmVjdGVkIENvbXBvbmVudHMgKFNDQykgYWxnb3JpdGhtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIFVuaXggc29ja2V0IGdhcmJhZ2UgY29sbGVjdGlvbi4gIFByZXZpb3VzbHksIGB1bml4X3NjY19kZWFkKClgIGhhbmRsZWQgbWFya2luZyBub2RlcyBpbiBhbiBTQ0MgYXMgJiMzNDtvZmYtc3RhY2smIzM0OyBieSBzZXR0aW5nIHRoZWlyIGBpbmRleGAgZmllbGQuIE5vdywgdGhhdCYjMzk7cyBiZWVuIG1vdmVkLiAgSW5zdGVhZCBvZiBgdW5peF9zY2NfZGVhZGAsIHdlIG5vdyBoYXZlIGBfX3VuaXhfd2Fsa19zY2MoKWAgc2V0dGluZyBgdi0mZ3Q7aW5kZXhgIGFuZCBgdi0mZ3Q7c2NjX2luZGV4YCAqYmVmb3JlKiBjYWxsaW5nIGB1bml4X3NjY19kZWFkKClgLCB3aXRoaW4gdGhlIGxvb3AgaXRlcmF0aW5nIHRocm91Z2ggU0NDIG1lbWJlcnMuICBgdW5peF93YWxrX3NjY19mYXN0KClgIGp1c3QgY2FsbHMgYHVuaXhfc2NjX2RlYWQoKWAuCgpUaGUgaW1wb3J0YW50IHBvaW50IGlzICp3aHkqIHRoaXMgY2hhbmdlLiBJdCBzZWVtcyB0aGUgcHJpb3IgbWV0aG9kIGhhZCBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBtaXNzZWQgYXNzaWdubWVudCBvZiBgc2NjX2luZGV4YC4gIFRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBoYWQgYSBwcm9ibGVtIHJlbGF0ZWQgdG8gd2hlbiBhIG5vZGUgd2FzIHBhcnQgb2YgYW4gU0NDIGFuZCB0aGF0IFNDQyBoYWQgYWxyZWFkeSBiZWVuIGZpbmFsaXplZCBhbmQgcG9wcGVkIG9mZiB0aGUgc3RhY2ssIGFuZCB0aGUgYXNzb2NpYXRlZCBpbmRleCB2YWx1ZSB3YXNuJiMzOTt0IGFzc2lnbmVkIGNvcnJlY3RseS4gTm93LCBzZXR0aW5nIGB2LSZndDtzY2NfaW5kZXggPSB2ZXJ0ZXgtJmd0O3NjY19pbmRleGAgZXhwbGljaXRseSBhc3NpZ25zIHRoZSBTQ0MgKnJvb3QmIzM5O3MqIGluZGV4IHRvIGFsbCB2ZXJ0aWNlcywgd2hpY2ggZW5zdXJlcyBjb25zaXN0ZW5jeSBhbmQgYXZvaWRzIHBvdGVudGlhbCBpc3N1ZXMgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvdGhlciBpbmRpY2VzLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgYG1peGVkX2xvd3BvaW50YCB0ZXN0IGluIGBzY21fcmlnaHRzLmNgLiAgU28sIHRoaXMgb3B0aW1pemF0aW9uIGFwcGVhcnMgdG8gYmUgZml4aW5nIGEgc3VidGxlLCBidXQgcG90ZW50aWFsbHkgY3JpdGljYWwsIGJ1ZyB0aGF0IGNvdWxkIGxlYWQgdG8gbWlzaWRlbnRpZmljYXRpb24gb2YgU0NDcyBhbmQsIGNvbnNlcXVlbnRseSwgaW5jb3JyZWN0IGdhcmJhZ2UgY29sbGVjdGlvbi4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGNoYW5nZSByZXF1aXJlIGEgS01TQU4gY2hlY2s/IExldCYjMzk7cyByZWZyZXNoIHRoZSBydWxlczogS01TQU4gaXMgZm9yIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSAqc3BlY2lmaWNhbGx5KiBpbiB0aGUga2VybmVsIGFuZCBwcmV2ZW50aW5nIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLiAgV2Ugb25seSBuZWVkIGl0IGlmIHRoZSBjb2RlIGNoYW5nZXMgdG91Y2ggYXJlYXMgd2hlcmUgc3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiwgTE9DS0RFUCwgb3Igb3RoZXIgZGVidWdnZXJzIHdvbiYjMzk7dCBjYXRjaCB0aGUgcHJvYmxlbS4KClRoZSBydWxlcyBzcGVjaWZ5IHRoYXQgd2Ugc2hvdWxkIHNldCBgTmVlZHNLTVNBTj10cnVlYCBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBjaGFuZ2VzIHRvIGtlcm5lbCBzdHJ1Y3R1cmVzICpzZW50IHRvIHVzZXIgc3BhY2UqLCBjb25kaXRpb25hbCBsb2dpYyBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHRoZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGxlYWRpbmcgdG8gdW5pbml0aWFsaXplZCByZWFkcyBsYXRlciwgb3IgdGhlIHdheXMgYm91bmRzIGNoZWNrcy9sZW5ndGhzIGFyZSBwZXJmb3JtZWQgcG90ZW50aWFsbHkgbGVhZGluZyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuCgpDb252ZXJzZWx5LCBpZiB0aGUgcGF0Y2ggcHJpbWFyaWx5IGludm9sdmVzIHRoaW5ncyBhbHJlYWR5IGhhbmRsZWQgYnkgS0FTQU4vTE9DS0RFUCwgb3IgaWYgYW55IHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCwgdGhlbiBgTmVlZHNLTVNBTj1mYWxzZWAuCgpMZXQmIzM5O3MgYXBwbHkgdGhlc2UgcnVsZXMgdG8gdGhpcyBwYXRjaC4KCjEuICoqRG9lcyB0aGlzIHBhdGNoIHRvdWNoIGFueXRoaW5nIGNvcGllZCB0byB1c2Vyc3BhY2U/KiogTm8uIEl0JiMzOTtzIGNvbmZpbmVkIHRvIHRoZSBVbml4IHNvY2tldCBnYXJiYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtLiAgVGhpcyBpcyBhIGdvb2Qgc2lnbi4KMi4gKipEb2VzIGl0IGludHJvZHVjZSBvciB0b3VjaCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBBIG5ldyBsb29wIGl0ZXJhdG9yLCBgdmAsIGlzIGludHJvZHVjZWQuIEhvd2V2ZXIsIGB2YCBpcyBwb3B1bGF0ZWQgYnkgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZWAsIHNvIGl0JiMzOTtzIGluaXRpYWxpemVkIGR1cmluZyBpdGVyYXRpb24uIFRoZW4sIHRoZSBwYXRjaCB3cml0ZXMgdGhlIGZpZWxkcyBgaW5kZXhgIGFuZCBgc2NjX2luZGV4YC4gVGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyBhYm91dCB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgYHN0cnVjdCB1bml4X3ZlcnRleGAuCgpTbywgdGhlIGNyaXRpY2FsIGNoZWNrIGlzIG9uIHRoZSBmaWVsZHMgYGluZGV4YCBhbmQgYHNjY19pbmRleGAsIGFuZCB0aGUgYHN0cnVjdCB1bml4X3ZlcnRleGAgaXRzZWxmLiBJJiMzOTttIHJlYXNvbmFibHkgY29uZmlkZW50IGluIHRoaXMgY2FzZSB0aGF0IHRoZSBgc3RydWN0IHVuaXhfdmVydGV4YCBpcyBhbGxvY2F0ZWQgYW5kICppbml0aWFsaXplZCogZWxzZXdoZXJlIGJlY2F1c2Ugd2UmIzM5O3JlIGxvb2tpbmcgYXQgZ2FyYmFnZSBjb2xsZWN0aW9uLCBhbmQgdGhlc2Ugc3RydWN0dXJlcyBhcmUgKm1hbmFnZWQqIGFuZCBtb2RpZmllZCwgbm90IGNyZWF0ZWQgd2hvbGVzYWxlIGluIHRoaXMgY29kZS4KClRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGNoYW5nZSBwcmltYXJpbHkgaW52b2x2ZXMgY29ycmVjdGx5IHVwZGF0aW5nIGV4aXN0aW5nIHN0cnVjdHVyZXMgd2l0aGluIGFuIFNDQywgYW5kIGRvZXNuJiMzOTt0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgKipJIHdvdWxkIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guKiogIEl0JiMzOTtzIGxpa2VseSB0aGF0IGFueSBpc3N1ZXMgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGRlYnVnZ2luZyB0b29scyBkdWUgdG8gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlIGFuZCB0aGUgZXhpc3RpbmcgbGlmZWN5Y2xlIG9mIHRoZXNlIHZlcnRleCBzdHJ1Y3R1cmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1bml4X3ZlcnRleCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC91bml4L2dhcmJhZ2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdW5peC9nYXJiYWdlLmMtNzYtXG5uZXQvdW5peC9nYXJiYWdlLmM6Nzc6c3RydWN0IHVuaXhfdmVydGV4IHtcbm5ldC91bml4L2dhcmJhZ2UuYy03OC1cdHN0cnVjdCBsaXN0X2hlYWQgZWRnZXM7XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jPTkzPXN0cnVjdCB1bml4X3NvY2sgKnVuaXhfZ2V0X3NvY2tldChzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMTEyLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjExMzpzdGF0aWMgc3RydWN0IHVuaXhfdmVydGV4ICp1bml4X2VkZ2Vfc3VjY2Vzc29yKHN0cnVjdCB1bml4X2VkZ2UgKmVkZ2UpXG5uZXQvdW5peC9nYXJiYWdlLmMtMTE0LXtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9MTMwPXN0YXRpYyB1bnNpZ25lZCBjaGFyIHVuaXhfZ3JhcGhfc3RhdGU7XG5uZXQvdW5peC9nYXJiYWdlLmMtMTMxLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjEzMjpzdGF0aWMgdm9pZCB1bml4X3VwZGF0ZV9ncmFwaChzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleClcbm5ldC91bml4L2dhcmJhZ2UuYy0xMzMte1xuLS1cbm5ldC91bml4L2dhcmJhZ2UuYz0xNDM9c3RhdGljIExJU1RfSEVBRCh1bml4X3VudmlzaXRlZF92ZXJ0aWNlcyk7XG5uZXQvdW5peC9nYXJiYWdlLmMtMTQ0LVxubmV0L3VuaXgvZ2FyYmFnZS5jOjE0NTplbnVtIHVuaXhfdmVydGV4X2luZGV4IHtcbm5ldC91bml4L2dhcmJhZ2UuYy0xNDYtXHRVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMSxcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMTUwLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjE1MTpzdGF0aWMgdW5zaWduZWQgbG9uZyB1bml4X3ZlcnRleF91bnZpc2l0ZWRfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMTtcbm5ldC91bml4L2dhcmJhZ2UuYzoxNTI6c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX1NUQVJUO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTE1My1cbm5ldC91bml4L2dhcmJhZ2UuYz0xNTQ9c3RhdGljIHZvaWQgdW5peF9hZGRfZWRnZShzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbCwgc3RydWN0IHVuaXhfZWRnZSAqZWRnZSlcbm5ldC91bml4L2dhcmJhZ2UuYy0xNTUte1xubmV0L3VuaXgvZ2FyYmFnZS5jOjE1NjpcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4ID0gZWRnZS1cdTAwM2VwcmVkZWNlc3Nvci1cdTAwM2V2ZXJ0ZXg7XG5uZXQvdW5peC9nYXJiYWdlLmMtMTU3LVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYy0xNTktXHRcdHZlcnRleCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2ZnBsLVx1MDAzZXZlcnRpY2VzLCB0eXBlb2YoKnZlcnRleCksIGVudHJ5KTtcbm5ldC91bml4L2dhcmJhZ2UuYzoxNjA6XHRcdHZlcnRleC1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X3VudmlzaXRlZF9pbmRleDtcbm5ldC91bml4L2dhcmJhZ2UuYzoxNjE6XHRcdHZlcnRleC1cdTAwM2VzY2NfaW5kZXggPSAmIzQzOyYjNDM7dW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleDtcbm5ldC91bml4L2dhcmJhZ2UuYy0xNjItXHRcdHZlcnRleC1cdTAwM2VvdXRfZGVncmVlID0gMDtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9MTc2PXN0YXRpYyB2b2lkIHVuaXhfZGVsX2VkZ2Uoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwsIHN0cnVjdCB1bml4X2VkZ2UgKmVkZ2UpXG5uZXQvdW5peC9nYXJiYWdlLmMtMTc3LXtcbm5ldC91bml4L2dhcmJhZ2UuYzoxNzg6XHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleCA9IGVkZ2UtXHUwMDNlcHJlZGVjZXNzb3ItXHUwMDNldmVydGV4O1xubmV0L3VuaXgvZ2FyYmFnZS5jLTE3OS1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9MTkzPXN0YXRpYyB2b2lkIHVuaXhfZnJlZV92ZXJ0aWNlcyhzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbClcbm5ldC91bml4L2dhcmJhZ2UuYy0xOTQte1xubmV0L3VuaXgvZ2FyYmFnZS5jOjE5NTpcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LCAqbmV4dF92ZXJ0ZXg7XG5uZXQvdW5peC9nYXJiYWdlLmMtMTk2LVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYz0yODM9aW50IHVuaXhfcHJlcGFyZV9mcGwoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXG5uZXQvdW5peC9nYXJiYWdlLmMtMjg0LXtcbm5ldC91bml4L2dhcmJhZ2UuYzoyODU6XHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcbm5ldC91bml4L2dhcmJhZ2UuYy0yODYtXHRpbnQgaTtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9MzI1PXZvaWQgdW5peF9wZWVrX2ZwbChzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbClcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMzM0LVxubmV0L3VuaXgvZ2FyYmFnZS5jOjMzNTpcdC8qIEludmFsaWRhdGUgdGhlIGZpbmFsIHJlZmNudCBjaGVjayBpbiB1bml4X3ZlcnRleF9kZWFkKCkuICovXG5uZXQvdW5peC9nYXJiYWdlLmMtMzM2LVx0c3Bpbl9sb2NrKFx1MDAyNnVuaXhfcGVla19sb2NrKTtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMzQwLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjM0MTpzdGF0aWMgYm9vbCB1bml4X3ZlcnRleF9kZWFkKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4KVxubmV0L3VuaXgvZ2FyYmFnZS5jLTM0Mi17XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTM0Ny1cdGxpc3RfZm9yX2VhY2hfZW50cnkoZWRnZSwgXHUwMDI2dmVydGV4LVx1MDAzZWVkZ2VzLCB2ZXJ0ZXhfZW50cnkpIHtcbm5ldC91bml4L2dhcmJhZ2UuYzozNDg6XHRcdHN0cnVjdCB1bml4X3ZlcnRleCAqbmV4dF92ZXJ0ZXggPSB1bml4X2VkZ2Vfc3VjY2Vzc29yKGVkZ2UpO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTM0OS1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9Mzc0PXN0YXRpYyBMSVNUX0hFQUQodW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcbm5ldC91bml4L2dhcmJhZ2UuYzozNzU6c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX01BUksyO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTM3Ni1cbm5ldC91bml4L2dhcmJhZ2UuYz0zNzc9c3RhdGljIGJvb2wgdW5peF9zY2NfZGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpzY2MpXG5uZXQvdW5peC9nYXJiYWdlLmMtMzc4LXtcbm5ldC91bml4L2dhcmJhZ2UuYzozNzk6XHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcbm5ldC91bml4L2dhcmJhZ2UuYy0zODAtXHRib29sIHNjY19kZWFkID0gdHJ1ZTtcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtMzg5LVx0XHRpZiAoc2NjX2RlYWQpXG5uZXQvdW5peC9nYXJiYWdlLmM6MzkwOlx0XHRcdHNjY19kZWFkID0gdW5peF92ZXJ0ZXhfZGVhZCh2ZXJ0ZXgpO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTM5MS1cdH1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9NDAwPXN0YXRpYyB2b2lkIHVuaXhfY29sbGVjdF9za2Ioc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxubmV0L3VuaXgvZ2FyYmFnZS5jLTQwMS17XG5uZXQvdW5peC9nYXJiYWdlLmM6NDAyOlx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XG5uZXQvdW5peC9nYXJiYWdlLmMtNDAzLVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYz00MzM9c3RhdGljIGJvb2wgdW5peF9zY2NfY3ljbGljKHN0cnVjdCBsaXN0X2hlYWQgKnNjYylcbm5ldC91bml4L2dhcmJhZ2UuYy00MzQte1xubmV0L3VuaXgvZ2FyYmFnZS5jOjQzNTpcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4O1xubmV0L3VuaXgvZ2FyYmFnZS5jLTQzNi1cdHN0cnVjdCB1bml4X2VkZ2UgKmVkZ2U7XG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ1Mi1cbm5ldC91bml4L2dhcmJhZ2UuYzo0NTM6c3RhdGljIHVuc2lnbmVkIGxvbmcgX191bml4X3dhbGtfc2NjKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ1NC1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9pbmRleCxcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNDc0LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShlZGdlLCBcdTAwMjZ2ZXJ0ZXgtXHUwMDNlZWRnZXMsIHZlcnRleF9lbnRyeSkge1xubmV0L3VuaXgvZ2FyYmFnZS5jOjQ3NTpcdFx0c3RydWN0IHVuaXhfdmVydGV4ICpuZXh0X3ZlcnRleCA9IHVuaXhfZWRnZV9zdWNjZXNzb3IoZWRnZSk7XG5uZXQvdW5peC9nYXJiYWdlLmMtNDc2LVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYy00NzktXG5uZXQvdW5peC9nYXJiYWdlLmM6NDgwOlx0XHRpZiAobmV4dF92ZXJ0ZXgtXHUwMDNlaW5kZXggPT0gdW5peF92ZXJ0ZXhfdW52aXNpdGVkX2luZGV4KSB7XG5uZXQvdW5peC9nYXJiYWdlLmMtNDgxLVx0XHRcdC8qIEl0ZXJhdGl2ZSBkZWVwZW5pbmcgZGVwdGggZmlyc3Qgc2VhcmNoXG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTUwNS1cdFx0XHR2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4ID0gbWluKHZlcnRleC1cdTAwM2VzY2NfaW5kZXgsIG5leHRfdmVydGV4LVx1MDAzZXNjY19pbmRleCk7XG5uZXQvdW5peC9nYXJiYWdlLmM6NTA2Olx0XHR9IGVsc2UgaWYgKG5leHRfdmVydGV4LVx1MDAzZWluZGV4ICE9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXgpIHtcbm5ldC91bml4L2dhcmJhZ2UuYy01MDctXHRcdFx0LyogTG9vcCBkZXRlY3RlZCBieSBhIGJhY2svY3Jvc3MgZWRnZS5cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNTE5LVx0aWYgKHZlcnRleC1cdTAwM2VpbmRleCA9PSB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4KSB7XG5uZXQvdW5peC9nYXJiYWdlLmM6NTIwOlx0XHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnY7XG5uZXQvdW5peC9nYXJiYWdlLmMtNTIxLVx0XHRzdHJ1Y3QgbGlzdF9oZWFkIHNjYztcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNTMxLVx0XHRcdC8qIE1hcmsgdmVydGV4IGFzIG9mZi1zdGFjayBhbmQgYXNzaWduIGEgdW5pcXVlIElELiAqL1xubmV0L3VuaXgvZ2FyYmFnZS5jOjUzMjpcdFx0XHR2LVx1MDAzZWluZGV4ID0gdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleDtcbm5ldC91bml4L2dhcmJhZ2UuYy01MzMtXHRcdFx0di1cdTAwM2VzY2NfaW5kZXggPSB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4O1xuLS1cbm5ldC91bml4L2dhcmJhZ2UuYy01MzgtXHRcdH0gZWxzZSB7XG5uZXQvdW5peC9nYXJiYWdlLmM6NTM5Olx0XHRcdGlmICh1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4IFx1MDAzYyB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4KVxubmV0L3VuaXgvZ2FyYmFnZS5jOjU0MDpcdFx0XHRcdHVuaXhfdmVydGV4X21heF9zY2NfaW5kZXggPSB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4O1xubmV0L3VuaXgvZ2FyYmFnZS5jLTU0MS1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9NTU4PXN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2Moc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNTYyLVxubmV0L3VuaXgvZ2FyYmFnZS5jOjU2MzpcdHVuaXhfdmVydGV4X21heF9zY2NfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9TVEFSVDtcbm5ldC91bml4L2dhcmJhZ2UuYy01NjQtXG4tLVxubmV0L3VuaXgvZ2FyYmFnZS5jLTU2OC1cdHdoaWxlICghbGlzdF9lbXB0eShcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcykpIHtcbm5ldC91bml4L2dhcmJhZ2UuYzo1Njk6XHRcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4O1xubmV0L3VuaXgvZ2FyYmFnZS5jLTU3MC1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmMtNTc1LVx0bGlzdF9yZXBsYWNlX2luaXQoXHUwMDI2dW5peF92aXNpdGVkX3ZlcnRpY2VzLCBcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcyk7XG5uZXQvdW5peC9nYXJiYWdlLmM6NTc2Olx0c3dhcCh1bml4X3ZlcnRleF91bnZpc2l0ZWRfaW5kZXgsIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXgpO1xubmV0L3VuaXgvZ2FyYmFnZS5jLTU3Ny1cbi0tXG5uZXQvdW5peC9nYXJiYWdlLmM9NTgzPXN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2NfZmFzdChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxuLS1cbm5ldC91bml4L2dhcmJhZ2UuYy01ODctXHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpKSB7XG5uZXQvdW5peC9nYXJiYWdlLmM6NTg4Olx0XHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcbm5ldC91bml4L2dhcmJhZ2UuYy01ODktXHRcdHN0cnVjdCBsaXN0X2hlYWQgc2NjO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQzOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBgbmV0L3VuaXhgIEdhcmJhZ2UgQ29sbGVjdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYHVuaXhfcHJlcGFyZV9mcGxgIGhhbmRsZXMgaXRzIHZlcnRleCBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgYG5ldC91bml4L2dhcmJhZ2UuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byByZWNhbGwgKmhvdyogdGhlIGB1bml4X3ZlcnRleGAgc3RydWN0IGdldHMgYWxsb2NhdGVkLCBhbmQgSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCBpbnZvbHZlcyBga3phbGxvY2AsIGBrY2FsbG9jYCwgb3IgcG9zc2libHkganVzdCBga21hbGxvY2AsIGRlcGVuZGluZyBvbiBjZXJ0YWluIGNvbmRpdGlvbnMuCgpUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBsaW5lcyAyODAgdGhyb3VnaCAzMTAgaW4gYG5ldC91bml4L2dhcmJhZ2UuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGV4YWN0IGFsbG9jYXRpb24gbG9naWMgYW5kIHJlbWluZCBtZSBvZiBhbnkgbnVhbmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBvZiB0aG9zZSB1bml4IGRvbWFpbiBzb2NrZXRzLiBJdCYjMzk7cyB0aW1lIHRvIHJlZnJlc2ggdGhlIHNwZWNpZmljcyBvbiBob3cgdGhpcyBwYXJ0IGlzIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3VuaXgvZ2FyYmFnZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODA6XHRcdH1cbiAyODE6XHR9XG4gMjgyOlx0XG4gMjgzOlx0aW50IHVuaXhfcHJlcGFyZV9mcGwoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXG4gMjg0Olx0e1xuIDI4NTpcdFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XG4gMjg2Olx0XHRpbnQgaTtcbiAyODc6XHRcbiAyODg6XHRcdGlmICghZnBsLVx1MDAzZWNvdW50X3VuaXgpXG4gMjg5Olx0XHRcdHJldHVybiAwO1xuIDI5MDpcdFxuIDI5MTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZnBsLVx1MDAzZWNvdW50X3VuaXg7IGkmIzQzOyYjNDM7KSB7XG4gMjkyOlx0XHRcdHZlcnRleCA9IGttYWxsb2Nfb2JqKCp2ZXJ0ZXgpO1xuIDI5MzpcdFx0XHRpZiAoIXZlcnRleClcbiAyOTQ6XHRcdFx0XHRnb3RvIGVycjtcbiAyOTU6XHRcbiAyOTY6XHRcdFx0bGlzdF9hZGQoXHUwMDI2dmVydGV4LVx1MDAzZWVudHJ5LCBcdTAwMjZmcGwtXHUwMDNldmVydGljZXMpO1xuIDI5NzpcdFx0fVxuIDI5ODpcdFxuIDI5OTpcdFx0ZnBsLVx1MDAzZWVkZ2VzID0ga3ZtYWxsb2Nfb2JqcygqZnBsLVx1MDAzZWVkZ2VzLCBmcGwtXHUwMDNlY291bnRfdW5peCxcbiAzMDA6XHRcdFx0XHRcdCAgIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gMzAxOlx0XHRpZiAoIWZwbC1cdTAwM2VlZGdlcylcbiAzMDI6XHRcdFx0Z290byBlcnI7XG4gMzAzOlx0XG4gMzA0Olx0XHR1bml4X3NjaGVkdWxlX2djKGZwbC1cdTAwM2V1c2VyKTtcbiAzMDU6XHRcbiAzMDY6XHRcdHJldHVybiAwO1xuIDMwNzpcdFxuIDMwODpcdGVycjpcbiAzMDk6XHRcdHVuaXhfZnJlZV92ZXJ0aWNlcyhmcGwpO1xuIDMxMDpcdFx0cmV0dXJuIC1FTk9NRU07XG4gMzExOlx0fVxuIDMxMjpcdFxuIDMxMzpcdHZvaWQgdW5peF9kZXN0cm95X2ZwbChzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbClcbiAzMTQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTgwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgVmVydGV4IEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGhvdyB0aGVzZSBgdmVydGV4YCBmaWVsZHMgYXJlIGdldHRpbmcgaW5pdGlhbGl6ZWQuIExldCYjMzk7cyBzdGFydCB3aXRoIGB1bml4X2FkZF9lZGdlYCwgc291bmRzIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIGxvb2sgZm9yIGVkZ2UgY3JlYXRpb24sIGFuZCBieSBleHRlbnNpb24sIHBvdGVudGlhbGx5IHZlcnRleCBzZXR1cC4gQWxyaWdodCwgbGV0JiMzOTtzIHpvb20gaW4gb24gbGluZXMgMTUwIHRocm91Z2ggMTgwLiBUaGF0JiMzOTtzIGEgZm9jdXNlZCByYW5nZTsgaG9wZWZ1bGx5LCBpdCBjb250YWlucyB0aGUganVpY3kgYml0cyBvZiBpbml0aWFsaXphdGlvbiBvciBhdCBsZWFzdCBwb2ludHMgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4gVGltZSB0byByZWFkIGFuZCBzZWUgd2hhdCB3ZSBmaW5kIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwNDowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC91bml4L2dhcmJhZ2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUwOlx0XG4gMTUxOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfdW52aXNpdGVkX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfTUFSSzE7XG4gMTUyOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX1NUQVJUO1xuIDE1MzpcdFxuIDE1NDpcdHN0YXRpYyB2b2lkIHVuaXhfYWRkX2VkZ2Uoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwsIHN0cnVjdCB1bml4X2VkZ2UgKmVkZ2UpXG4gMTU1Olx0e1xuIDE1NjpcdFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXggPSBlZGdlLVx1MDAzZXByZWRlY2Vzc29yLVx1MDAzZXZlcnRleDtcbiAxNTc6XHRcbiAxNTg6XHRcdGlmICghdmVydGV4KSB7XG4gMTU5Olx0XHRcdHZlcnRleCA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2ZnBsLVx1MDAzZXZlcnRpY2VzLCB0eXBlb2YoKnZlcnRleCksIGVudHJ5KTtcbiAxNjA6XHRcdFx0dmVydGV4LVx1MDAzZWluZGV4ID0gdW5peF92ZXJ0ZXhfdW52aXNpdGVkX2luZGV4O1xuIDE2MTpcdFx0XHR2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4ID0gJiM0MzsmIzQzO3VuaXhfdmVydGV4X21heF9zY2NfaW5kZXg7XG4gMTYyOlx0XHRcdHZlcnRleC1cdTAwM2VvdXRfZGVncmVlID0gMDtcbiAxNjM6XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dmVydGV4LVx1MDAzZWVkZ2VzKTtcbiAxNjQ6XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dmVydGV4LVx1MDAzZXNjY19lbnRyeSk7XG4gMTY1Olx0XG4gMTY2Olx0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNnZlcnRleC1cdTAwM2VlbnRyeSwgXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpO1xuIDE2NzpcdFx0XHRlZGdlLVx1MDAzZXByZWRlY2Vzc29yLVx1MDAzZXZlcnRleCA9IHZlcnRleDtcbiAxNjg6XHRcdH1cbiAxNjk6XHRcbiAxNzA6XHRcdHZlcnRleC1cdTAwM2VvdXRfZGVncmVlJiM0MzsmIzQzOztcbiAxNzE6XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZWRnZS1cdTAwM2V2ZXJ0ZXhfZW50cnksIFx1MDAyNnZlcnRleC1cdTAwM2VlZGdlcyk7XG4gMTcyOlx0XG4gMTczOlx0XHR1bml4X3VwZGF0ZV9ncmFwaCh1bml4X2VkZ2Vfc3VjY2Vzc29yKGVkZ2UpKTtcbiAxNzQ6XHR9XG4gMTc1Olx0XG4gMTc2Olx0c3RhdGljIHZvaWQgdW5peF9kZWxfZWRnZShzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbCwgc3RydWN0IHVuaXhfZWRnZSAqZWRnZSlcbiAxNzc6XHR7XG4gMTc4Olx0XHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleCA9IGVkZ2UtXHUwMDNlcHJlZGVjZXNzb3ItXHUwMDNldmVydGV4O1xuIDE3OTpcdFxuIDE4MDpcdFx0aWYgKCFmcGwtXHUwMDNlZGVhZClcbiAxODE6XHRcdFx0dW5peF91cGRhdGVfZ3JhcGgodW5peF9lZGdlX3N1Y2Nlc3NvcihlZGdlKSk7XG4gMTgyOlx0XG4gMTgzOlx0XHRsaXN0X2RlbChcdTAwMjZlZGdlLVx1MDAzZXZlcnRleF9lbnRyeSk7XG4gMTg0Olx0XHR2ZXJ0ZXgtXHUwMDNlb3V0X2RlZ3JlZS0tO1xuIDE4NTpcdFxuIDE4NjpcdFx0aWYgKCF2ZXJ0ZXgtXHUwMDNlb3V0X2RlZ3JlZSkge1xuIDE4NzpcdFx0XHRlZGdlLVx1MDAzZXByZWRlY2Vzc29yLVx1MDAzZXZlcnRleCA9IE5VTEw7XG4gMTg4Olx0XHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNnZlcnRleC1cdTAwM2VlbnRyeSwgXHUwMDI2ZnBsLVx1MDAzZXZlcnRpY2VzKTtcbiAxODk6XHRcdFx0bGlzdF9kZWwoXHUwMDI2dmVydGV4LVx1MDAzZXNjY19lbnRyeSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDM0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBzdHJ1Y3QgdW5peF92ZXJ0ZXhgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc3RydWN0IHVuaXhfdmVydGV4YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZGlzc2VjdCBpdHMgbWVtYmVycyB0byB1bmRlcnN0YW5kIGhvdyBpdCByZXByZXNlbnRzIGEgdmVydGV4IGluIHRoaXMgVW5peC1iYXNlZCBzeXN0ZW0sIGxpa2VseSB3aXRoaW4gYSBncmFwaCBzdHJ1Y3R1cmUsIG9yIHBvc3NpYmx5IHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gbWV0YWRhdGEgcmVwcmVzZW50YXRpb24uIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaXRzIGNvbm5lY3Rpb25zLCBpZiBhbnkuIEkgYW50aWNpcGF0ZSBmaWVsZHMgdGhhdCBlbmNvZGUgdGhpbmdzIGxpa2UgaW5vZGUgbnVtYmVycywgZGV2aWNlIGlkZW50aWZpZXJzLCBwb3RlbnRpYWxseSBmaWxlIHBlcm1pc3Npb25zIG9yIGFjY2VzcyB0aW1lcyAoaWYgdGhpcyBwZXJ0YWlucyB0byBhIGZpbGUgc3lzdGVtIGdyYXBoKSwgYW5kIG1heWJlIGV2ZW4gbmV0d29yayBhZGRyZXNzZXMgaWYgdGhpcyBzeXN0ZW0gaW50ZWdyYXRlcyBuZXR3b3JrIHNlcnZpY2VzLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbjoKCiogICAqKkNvbm5lY3Rpdml0eSoqOiBEb2VzIHRoaXMgc3RydWN0dXJlIGRpcmVjdGx5IGhvbGQgcG9pbnRlcnMgb3IgaW5kaWNlcyB0byBhZGphY2VudCB2ZXJ0aWNlcywgYWxsb3dpbmcgZ3JhcGggdHJhdmVyc2FsPwoqICAgKipBdHRyaWJ1dGVzKio6IFdoYXQgbWV0YWRhdGEgaXMgc3RvcmVkPyBJcyBpdCBiYXNpYywgbGlrZSBpbm9kZSBhbmQgZGV2aWNlIG51bWJlcnMsIG9yIGFyZSB0aGVyZSByaWNoZXIgYXR0cmlidXRlcz8KKiAgICoqUHVycG9zZSoqOiBXaGF0IGlzIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbT8gSXMgaXQgZXhjbHVzaXZlbHkgZm9yIHRoZSBmaWxlIHN5c3RlbSwgb3IgZG9lcyBpdCByZXByZXNlbnQgb3RoZXIga2luZHMgb2YgVW5peCByZXNvdXJjZXMgKHByb2Nlc3NlcywgbmV0d29yayBlbmRwb2ludHMsIGV0Yy4pPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBoaW50cyBpbiB0aGUgY29udGV4dCB3aGVyZSBgdW5peF92ZXJ0ZXhgIGlzIGRlY2xhcmVkIGFuZCB1c2VkLgoqICAgKipPcHRpbWl6YXRpb24qKjogV2hhdCBhcmUgdGhlIGRlc2lnbiBjaG9pY2VzPyBBbnkgYml0ZmllbGRzLCBhbGlnbm1lbnQgc3RyYXRlZ2llcywgb3IgcG90ZW50aWFsIGZvciBjYWNoaW5nL2xhenkgbG9hZGluZz8KClRoaXMgaW5mb3JtYXRpb24gd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBgdW5peF92ZXJ0ZXhgIHJlcHJlc2VudHMgYSBjb21wb25lbnQgb2YgdGhlIHN5c3RlbSBpdCBkZXNjcmliZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3VuaXgvZ2FyYmFnZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3MDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gIDcxOlx0I2luY2x1ZGUgXHUwMDNjbmV0L2FmX3VuaXguaFx1MDAzZVxuICA3MjpcdCNpbmNsdWRlIFx1MDAzY25ldC9zY20uaFx1MDAzZVxuICA3MzpcdCNpbmNsdWRlIFx1MDAzY25ldC90Y3Bfc3RhdGVzLmhcdTAwM2VcbiAgNzQ6XHRcbiAgNzU6XHQjaW5jbHVkZSBcJiMzNDthZl91bml4LmhcJiMzNDtcbiAgNzY6XHRcbiAgNzc6XHRzdHJ1Y3QgdW5peF92ZXJ0ZXgge1xuICA3ODpcdFx0c3RydWN0IGxpc3RfaGVhZCBlZGdlcztcbiAgNzk6XHRcdHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7XG4gIDgwOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkIHNjY19lbnRyeTtcbiAgODE6XHRcdHVuc2lnbmVkIGxvbmcgb3V0X2RlZ3JlZTtcbiAgODI6XHRcdHVuc2lnbmVkIGxvbmcgaW5kZXg7XG4gIDgzOlx0XHR1bnNpZ25lZCBsb25nIHNjY19pbmRleDtcbiAgODQ6XHR9O1xuICA4NTpcdFxuICA4NjpcdHN0cnVjdCB1bml4X2VkZ2Uge1xuICA4NzpcdFx0c3RydWN0IHVuaXhfc29jayAqcHJlZGVjZXNzb3I7XG4gIDg4Olx0XHRzdHJ1Y3QgdW5peF9zb2NrICpzdWNjZXNzb3I7XG4gIDg5Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIHZlcnRleF9lbnRyeTtcbiAgOTA6XHRcdHN0cnVjdCBsaXN0X2hlYWQgc3RhY2tfZW50cnk7XG4gIDkxOlx0fTtcbiAgOTI6XHRcbiAgOTM6XHRzdHJ1Y3QgdW5peF9zb2NrICp1bml4X2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKmZpbHApXG4gIDk0Olx0e1xuICA5NTpcdFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XG4gIDk2Olx0XG4gIDk3Olx0XHQvKiBTb2NrZXQgPyAqL1xuICA5ODpcdFx0aWYgKFNfSVNTT0NLKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2ICEoZmlscC1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1BBVEgpKSB7XG4gIDk5Olx0XHRcdHN0cnVjdCBzb2NrZXQgKnNvY2sgPSBTT0NLRVRfSShpbm9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDA0OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Nzg3CgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDk3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBBRl9VTklYIEdhcmJhZ2UgQ29sbGVjdGlvbiBPcHRpbWl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBmb2N1c2VzIG9uIG9wdGltaXppbmcgdGhlIEFGX1VOSVggZ2FyYmFnZSBjb2xsZWN0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC91bml4L2dhcmJhZ2UuY2AuIEkgc2VlIHRoZXkmIzM5O3JlIG1vdmluZyB0aGUgYXNzaWdubWVudCBvZiBgaW5kZXhgIChtYXJraW5nIHZlcnRpY2VzIGFzIG9mZi1zdGFjaykgYW5kIHRoZSB1cGRhdGUgb2YgYHNjY19pbmRleGAgZnJvbSB0aGUgYHVuaXhfc2NjX2RlYWQoKWAgZnVuY3Rpb24gaW50byBgX191bml4X3dhbGtfc2NjKClgLiBUaGV5JiMzOTt2ZSBhbHNvIHJlbW92ZWQgdGhlIGBmYXN0YCBwYXJhbWV0ZXIgZnJvbSBgdW5peF9zY2NfZGVhZCgpYCBhbmQgYWRkZWQgYSBzZWxmdGVzdC4gVGhpcyBjbGVhcmx5IGFpbXMgdG8gc3RyZWFtbGluZSB0aGUgc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudCAoU0NDKSBwcm9jZXNzaW5nLgoKTXkgZmlyc3QgY2hlY2sgaXMgYWx3YXlzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEkgY29uZmlybSB0aGF0IGFsbCB0aGUgZmllbGRzIG9mIGB1bml4X3ZlcnRleGAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYHVuaXhfYWRkX2VkZ2VgOiBgZWRnZXNgLCBgZW50cnlgLCBgc2NjX2VudHJ5YCwgYG91dF9kZWdyZWVgLCBgaW5kZXhgLCBhbmQgYHNjY19pbmRleGAuIFRoZSBjcnVjaWFsIGNoYW5nZSBpcyB0aGF0IHRoZSBhc3NpZ25tZW50IG9mIGBpbmRleGAgYW5kIGBzY2NfaW5kZXhgIHRvIHRoZSB2ZXJ0aWNlcyB3aXRoaW4gYW4gU0NDIGlzIG5vdyBkb25lIGRpcmVjdGx5IHdpdGhpbiB0aGUgbGlzdCB0cmF2ZXJzYWwgaW4gYF9fdW5peF93YWxrX3NjY2AuIEkmIzM5O20gdmVyaWZ5aW5nIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbm90aW5nIHRoYXQgdGhlIGxvb3AgdmFyaWFibGUgYHZgIGlzIGNvcnJlY3RseSBhIGxvb3AgdmFyaWFibGUgb3ZlciB0aGUgbGlzdCwgYW5kIHRoYXQgYHYtJmd0O2luZGV4YCBhbmQgYHYtJmd0O3NjY19pbmRleGAgYXJlIHRoZW4gYXNzaWduZWQga25vd24sIGluaXRpYWxpemVkIHZhbHVlcy4gVGhlIHJlbW92YWwgb2YgdGhlIGBmYXN0YCBhcmd1bWVudCBmcm9tIGB1bml4X3NjY19kZWFkKClgIGxvb2tzIGxpa2UgYSBjbGVhbi11cCwgcmVtb3ZpbmcgZGVhZCBjb2RlIOKAkyBubyBpbW1lZGlhdGUgcmVkIGZsYWdzIHRoZXJlLgoKTmV4dCwgSSBhc3Nlc3MgZm9yIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gSSByZWNvZ25pemUgdGhhdCBhbnkgZ3JhcGggdHJhdmVyc2FsIGJ1Z3Mgb3IgbGlzdCBjb3JydXB0aW9uIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBsaXN0IGRlYnVnZ2luZy4gU2luY2UgS01TQU4gZm9jdXNlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgdGhpcyBpc24mIzM5O3QgbXkgcHJpbWFyeSBjb25jZXJuIGhlcmUsIGdpdmVuIHRoZSBleGlzdGluZyBwcm90ZWN0aW9uLgoKTm93LCBsZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgTmVlZHNLTVNBTiBjcml0ZXJpYToKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZT8gTm9wZS4gTm8gZGF0YSB0cmFuc2Zlci4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBCb3RoIGBpbmRleGAgYW5kIGBzY2NfaW5kZXhgIGFyZSB3ZWxsLWluaXRpYWxpemVkIHN0cnVjdCBtZW1iZXJzLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcyByZWFkIGxhdGVyPyBOb3BlLiBObyBkYXRhIHN0cnVjdHVyZSBsYXlvdXQgY2hhbmdlcywgYW5kIG5vIG5ldyBhbGxvY2F0aW9ucy4KNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIGJ5dGVzIGJlaW5nIGFjY2Vzc2VkPyBOb3BlLiBObyBidWZmZXJzLCBsZW5ndGhzLCBvciBzaXplcyBhZmZlY3RlZC4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU4gPSBmYWxzZWAuCgpJJiMzOTttIGNvbmZpZGVudCBpbiBjb25jbHVkaW5nIHRoYXQgS01TQU4gaXNuJiMzOTt0IHdhcnJhbnRlZCBoZXJlLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGNoYW5nZXMgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdGlvbi4gSXQgb3B0aW1pemVzIHRoZSBwcm9jZXNzIGJ5IG1vdmluZyB0aGUgdXBkYXRlcyBvZiBgaW5kZXhgIGFuZCBgc2NjX2luZGV4YCBpbnRvIGBfX3VuaXhfd2Fsa19zY2MoKWAsIHNpbXBsaWZpZXMgdGhlIGNvZGUgYnkgcmVtb3ZpbmcgdGhlIG5vdy11bm5lY2Vzc2FyeSBgZmFzdGAgcGFyYW1ldGVyIGZyb20gYHVuaXhfc2NjX2RlYWQoKWAsIGFuZCBhZGRzIGEgbmV3IHRlc3QuIFRoaXMgZG9lc24mIzM5O3QgaW52b2x2ZSBhbnkgb2YgdGhlIGNsYXNzaWMgS01TQU4gcGl0ZmFsbHM6IG5vIHVuaW5pdGlhbGl6ZWQgYWxsb2NhdGlvbnMsIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSwgbm8gdHJhbnNmZXIgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29uZGl0aW9uYWwgcmVhZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBleGlzdGluZyBrZXJuZWwgZGVidWdnZXJzIGFyZSBtb3JlIHRoYW4gYWRlcXVhdGUgdG8gaGFuZGxlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyBhcmlzaW5nIGZyb20gZ3JhcGggdHJhdmVyc2FsLCBsaXN0IGNvcnJ1cHRpb24sIG9yIHNpbWlsYXIgYnVncy4gVGhlcmUmIzM5O3Mgbm8ganVzdGlmaWNhdGlvbiBmb3IgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDQ6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBBRl9VTklYIGdhcmJhZ2UgY29sbGVjdG9yJiMzOTtzIFRhcmphbiBTdHJvbmdseSBDb25uZWN0ZWQgQ29tcG9uZW50IChTQ0MpIGFsZ29yaXRobSBpbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gSXQgbW92ZXMgdGhlIG9mZi1zdGFjayBtYXJraW5nIChgdi1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXhgKSBhbmQgU0NDIElEIGFzc2lnbm1lbnQgKGB2LVx1MDAzZXNjY19pbmRleCA9IHZlcnRleC1cdTAwM2VzY2NfaW5kZXhgKSBmb3IgU0NDIHZlcnRpY2VzIGZyb20gYHVuaXhfc2NjX2RlYWQoKWAgaW50byBgX191bml4X3dhbGtfc2NjKClgLCBzaW1wbGlmaWVzIGB1bml4X3NjY19kZWFkKClgIGJ5IHJlbW92aW5nIHRoZSBgZmFzdGAgcGFyYW1ldGVyLCBhbmQgYWRkcyBhIHJlZ3Jlc3Npb24gdGVzdCBpbiBrc2VsZnRlc3RzLlxuXG5UaGlzIGNoYW5nZSB0b3VjaGVzIHB1cmVseSBpbnRlcm5hbCBncmFwaCBib29ra2VlcGluZyBmaWVsZHMgb24gYHN0cnVjdCB1bml4X3ZlcnRleGAgb2JqZWN0cyB0aGF0IGFyZSBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgYW55IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZ3JhcGggdHJhdmVyc2FsLCBsaXN0IG1hbmlwdWxhdGlvbiwgb3Igc29ja2V0IGxpZmV0aW1lcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb25zKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIGZhY2lsaXRpZXMgKGUuZy4sIENPTkZJR19ERUJVR19MSVNUKS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBBRl9VTklYIGdhcmJhZ2UgY29sbGVjdG9yJiMzOTtzIFRhcmphbiBTdHJvbmdseSBDb25uZWN0ZWQgQ29tcG9uZW50IChTQ0MpIGFsZ29yaXRobSBpbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gSXQgbW92ZXMgdGhlIG9mZi1zdGFjayBtYXJraW5nIChgdi1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXhgKSBhbmQgU0NDIElEIGFzc2lnbm1lbnQgKGB2LVx1MDAzZXNjY19pbmRleCA9IHZlcnRleC1cdTAwM2VzY2NfaW5kZXhgKSBmb3IgU0NDIHZlcnRpY2VzIGZyb20gYHVuaXhfc2NjX2RlYWQoKWAgaW50byBgX191bml4X3dhbGtfc2NjKClgLCBzaW1wbGlmaWVzIGB1bml4X3NjY19kZWFkKClgIGJ5IHJlbW92aW5nIHRoZSBgZmFzdGAgcGFyYW1ldGVyLCBhbmQgYWRkcyBhIHJlZ3Jlc3Npb24gdGVzdCBpbiBrc2VsZnRlc3RzLlxuXG5UaGlzIGNoYW5nZSB0b3VjaGVzIHB1cmVseSBpbnRlcm5hbCBncmFwaCBib29ra2VlcGluZyBmaWVsZHMgb24gYHN0cnVjdCB1bml4X3ZlcnRleGAgb2JqZWN0cyB0aGF0IGFyZSBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3QgYW55IGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gZ3JhcGggdHJhdmVyc2FsLCBsaXN0IG1hbmlwdWxhdGlvbiwgb3Igc29ja2V0IGxpZmV0aW1lcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb25zKSBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnIGZhY2lsaXRpZXMgKGUuZy4sIENPTkZJR19ERUJVR19MSVNUKS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDowOS4xNDAwNzgzMTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njk2NTM5NzU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191bml4X3dhbGtfc2NjXCIsXG4gICAgXCJ1bml4X3NjY19kZWFkXCIsXG4gICAgXCJ1bml4X3dhbGtfc2NjX2Zhc3RcIixcbiAgICBcInVuaXhfd2Fsa19zY2NcIixcbiAgICBcInVuaXhfZ2NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgQUZfVU5JWCBnYXJiYWdlIGNvbGxlY3RvcidzIFRhcmphbiBTdHJvbmdseSBDb25uZWN0ZWQgQ29tcG9uZW50IChTQ0MpIGFsZ29yaXRobSBpbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gSXQgbW92ZXMgdGhlIG9mZi1zdGFjayBtYXJraW5nIChgdi1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4YCkgYW5kIFNDQyBJRCBhc3NpZ25tZW50IChgdi1cXHUwMDNlc2NjX2luZGV4ID0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXhgKSBmb3IgU0NDIHZlcnRpY2VzIGZyb20gYHVuaXhfc2NjX2RlYWQoKWAgaW50byBgX191bml4X3dhbGtfc2NjKClgLCBzaW1wbGlmaWVzIGB1bml4X3NjY19kZWFkKClgIGJ5IHJlbW92aW5nIHRoZSBgZmFzdGAgcGFyYW1ldGVyLCBhbmQgYWRkcyBhIHJlZ3Jlc3Npb24gdGVzdCBpbiBrc2VsZnRlc3RzLlxcblxcblRoaXMgY2hhbmdlIHRvdWNoZXMgcHVyZWx5IGludGVybmFsIGdyYXBoIGJvb2trZWVwaW5nIGZpZWxkcyBvbiBgc3RydWN0IHVuaXhfdmVydGV4YCBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBhbnkgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBncmFwaCB0cmF2ZXJzYWwsIGxpc3QgbWFuaXB1bGF0aW9uLCBvciBzb2NrZXQgbGlmZXRpbWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbnMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgZmFjaWxpdGllcyAoZS5nLiwgQ09ORklHX0RFQlVHX0xJU1QpLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIChTQ0MpIFRhcmphbi1iYXNlZCBjeWNsZSBkZXRlY3Rpb24gYWxnb3JpdGhtIGluIFVOSVggZG9tYWluIHNvY2tldCBnYXJiYWdlIGNvbGxlY3Rpb24gKG5ldC91bml4L2dhcmJhZ2UuYykuIFNwZWNpZmljYWxseSwgaXQgdXBkYXRlcyBfX3VuaXhfd2Fsa19zY2MgdG8gYXNzaWduIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggYW5kIHVwZGF0ZSBzY2NfaW5kZXggYWNyb3NzIHRoZSBlbnRpcmUgU0NDIHByaW9yIHRvIGNhbGxpbmcgdW5peF9zY2NfZGVhZCwgYW5kIHJlbW92ZXMgdGhlIGZhc3QgcGFyYW1ldGVyIGFuZCBvZmYtc3RhY2sgbWFya2luZyBmcm9tIHVuaXhfc2NjX2RlYWQuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIGRpcmVjdGx5IGV4ZXJjaXNlZCB3aGVuIHBhc3NpbmcgZmlsZSBkZXNjcmlwdG9ycyBhY3Jvc3MgVU5JWCBzb2NrZXRzIHZpYSBTQ01fUklHSFRTLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDowOS4xNDAwODI3NjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTI2NTE0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmNDIyNmQwMTZkMGFlZDY0YWM0YWNmNDUyZjA2NWZiMjA1NzFiNjU3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDEyIDA0OjA0OjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC91bml4L2dhcmJhZ2UuYyBiL25ldC91bml4L2dhcmJhZ2UuY1xcbmluZGV4IDlmY2FhZjU1Y2JhNWQuLmRhNzc0ZjU2Y2E2NDggMTAwNjQ0XFxuLS0tIGEvbmV0L3VuaXgvZ2FyYmFnZS5jXFxuKysrIGIvbmV0L3VuaXgvZ2FyYmFnZS5jXFxuQEAgLTM3NCw3ICszNzQsNyBAQCBzdGF0aWMgYm9vbCB1bml4X3ZlcnRleF9kZWFkKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4KVxcbiBzdGF0aWMgTElTVF9IRUFEKHVuaXhfdmlzaXRlZF92ZXJ0aWNlcyk7XFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMjtcXG4gXFxuLXN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBib29sIGZhc3QpXFxuK3N0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjKVxcbiB7XFxuIFxcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4O1xcbiBcXHRib29sIHNjY19kZWFkID0gdHJ1ZTtcXG5AQCAtMzg2LDEwICszODYsNiBAQCBzdGF0aWMgYm9vbCB1bml4X3NjY19kZWFkKHN0cnVjdCBsaXN0X2hlYWQgKnNjYywgYm9vbCBmYXN0KVxcbiBcXHRcXHQvKiBEb24ndCByZXN0YXJ0IERGUyBmcm9tIHRoaXMgdmVydGV4LiAqL1xcbiBcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2dmVydGV4LVxcdTAwM2VlbnRyeSwgXFx1MDAyNnVuaXhfdmlzaXRlZF92ZXJ0aWNlcyk7XFxuIFxcbi1cXHRcXHQvKiBNYXJrIHZlcnRleCBhcyBvZmYtc3RhY2sgZm9yIF9fdW5peF93YWxrX3NjYygpLiAqL1xcbi1cXHRcXHRpZiAoIWZhc3QpXFxuLVxcdFxcdFxcdHZlcnRleC1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xcbi1cXG4gXFx0XFx0aWYgKHNjY19kZWFkKVxcbiBcXHRcXHRcXHRzY2NfZGVhZCA9IHVuaXhfdmVydGV4X2RlYWQodmVydGV4KTtcXG4gXFx0fVxcbkBAIC01MjEsNiArNTE3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX191bml4X3dhbGtfc2NjKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAodmVydGV4LVxcdTAwM2VpbmRleCA9PSB2ZXJ0ZXgtXFx1MDAzZXNjY19pbmRleCkge1xcbitcXHRcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnY7XFxuIFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgc2NjO1xcbiBcXG4gXFx0XFx0LyogU0NDIGZpbmFsaXNlZC5cXG5AQCAtNTMwLDcgKzUyNywxMyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3VuaXhfd2Fsa19zY2Moc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgsXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRfX2xpc3RfY3V0X3Bvc2l0aW9uKFxcdTAwMjZzY2MsIFxcdTAwMjZ2ZXJ0ZXhfc3RhY2ssIFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZXNjY19lbnRyeSk7XFxuIFxcbi1cXHRcXHRpZiAodW5peF9zY2NfZGVhZChcXHUwMDI2c2NjLCBmYWxzZSkpIHtcXG4rXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHYsIFxcdTAwMjZzY2MsIHNjY19lbnRyeSkge1xcbitcXHRcXHRcXHQvKiBNYXJrIHZlcnRleCBhcyBvZmYtc3RhY2sgYW5kIGFzc2lnbiBhIHVuaXF1ZSBJRC4gKi9cXG4rXFx0XFx0XFx0di1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xcbitcXHRcXHRcXHR2LVxcdTAwM2VzY2NfaW5kZXggPSB2ZXJ0ZXgtXFx1MDAzZXNjY19pbmRleDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHVuaXhfc2NjX2RlYWQoXFx1MDAyNnNjYykpIHtcXG4gXFx0XFx0XFx0dW5peF9jb2xsZWN0X3NrYihcXHUwMDI2c2NjLCBoaXRsaXN0KTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0aWYgKHVuaXhfdmVydGV4X21heF9zY2NfaW5kZXggXFx1MDAzYyB2ZXJ0ZXgtXFx1MDAzZXNjY19pbmRleClcXG5AQCAtNTg4LDcgKzU5MSw3IEBAIHN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2NfZmFzdChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxcbiBcXHRcXHR2ZXJ0ZXggPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcywgdHlwZW9mKCp2ZXJ0ZXgpLCBlbnRyeSk7XFxuIFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZzY2MsIFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZXNjY19lbnRyeSk7XFxuIFxcbi1cXHRcXHRpZiAodW5peF9zY2NfZGVhZChcXHUwMDI2c2NjLCB0cnVlKSkge1xcbitcXHRcXHRpZiAodW5peF9zY2NfZGVhZChcXHUwMDI2c2NjKSkge1xcbiBcXHRcXHRcXHRjeWNsaWNfc2Njcy0tO1xcbiBcXHRcXHRcXHR1bml4X2NvbGxlY3Rfc2tiKFxcdTAwMjZzY2MsIGhpdGxpc3QpO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuY1xcbmluZGV4IGQ4MmE3OWMyMWMxNzkuLmMxNjVmMjUwMjIwYTQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jXFxuQEAgLTM3OCw0ICszNzgsMjEgQEAgVEVTVF9GKHNjbV9yaWdodHMsIGJhY2t0cmFja19mcm9tX3NjYylcXG4gXFx0Y2xvc2Vfc29ja2V0cygxMCk7XFxuIH1cXG4gXFxuK1RFU1RfRihzY21fcmlnaHRzLCBtaXhlZF9sb3dwb2ludClcXG4re1xcbitcXHRjcmVhdGVfc29ja2V0cyg2KTtcXG4rXFxuK1xcdHNlbmRfZmQoMCwgMSk7XFxuK1xcdHNlbmRfZmQoMSwgMik7XFxuK1xcdHNlbmRfZmQoMiwgMSk7XFxuK1xcdHNlbmRfZmQoMSwgMCk7XFxuK1xcbitcXHRzZW5kX2ZkKDMsIDQpO1xcbitcXHRzZW5kX2ZkKDQsIDUpO1xcbitcXHRzZW5kX2ZkKDUsIDQpO1xcbitcXHRzZW5kX2ZkKDQsIDMpO1xcbitcXG4rXFx0Y2xvc2Vfc29ja2V0cyg2KTtcXG4rfVxcbitcXG4gVEVTVF9IQVJORVNTX01BSU5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6MTAuNzUzMjg0NzE2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MDQ3ODY3NDU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191bml4X3dhbGtfc2NjXCIsXG4gICAgXCJ1bml4X3NjY19kZWFkXCIsXG4gICAgXCJ1bml4X3dhbGtfc2NjX2Zhc3RcIixcbiAgICBcInVuaXhfd2Fsa19zY2NcIixcbiAgICBcInVuaXhfZ2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudHMgKFNDQykgVGFyamFuLWJhc2VkIGN5Y2xlIGRldGVjdGlvbiBhbGdvcml0aG0gaW4gVU5JWCBkb21haW4gc29ja2V0IGdhcmJhZ2UgY29sbGVjdGlvbiAobmV0L3VuaXgvZ2FyYmFnZS5jKS4gU3BlY2lmaWNhbGx5LCBpdCB1cGRhdGVzIF9fdW5peF93YWxrX3NjYyB0byBhc3NpZ24gdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCBhbmQgdXBkYXRlIHNjY19pbmRleCBhY3Jvc3MgdGhlIGVudGlyZSBTQ0MgcHJpb3IgdG8gY2FsbGluZyB1bml4X3NjY19kZWFkLCBhbmQgcmVtb3ZlcyB0aGUgZmFzdCBwYXJhbWV0ZXIgYW5kIG9mZi1zdGFjayBtYXJraW5nIGZyb20gdW5peF9zY2NfZGVhZC4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgZGlyZWN0bHkgZXhlcmNpc2VkIHdoZW4gcGFzc2luZyBmaWxlIGRlc2NyaXB0b3JzIGFjcm9zcyBVTklYIHNvY2tldHMgdmlhIFNDTV9SSUdIVFMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjQyMjZkMDE2ZDBhZWQ2NGFjNGFjZjQ1MmYwNjVmYjIwNTcxYjY1N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDA0OjA0OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvZ2FyYmFnZS5jIGIvbmV0L3VuaXgvZ2FyYmFnZS5jXG5pbmRleCA5ZmNhYWY1NWNiYTVkLi5kYTc3NGY1NmNhNjQ4IDEwMDY0NFxuLS0tIGEvbmV0L3VuaXgvZ2FyYmFnZS5jXG4rKysgYi9uZXQvdW5peC9nYXJiYWdlLmNcbkBAIC0zNzQsNyArMzc0LDcgQEAgc3RhdGljIGJvb2wgdW5peF92ZXJ0ZXhfZGVhZChzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleClcbiBzdGF0aWMgTElTVF9IRUFEKHVuaXhfdmlzaXRlZF92ZXJ0aWNlcyk7XG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX01BUksyO1xuIFxuLXN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBib29sIGZhc3QpXG4rc3RhdGljIGJvb2wgdW5peF9zY2NfZGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpzY2MpXG4ge1xuIFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XG4gXHRib29sIHNjY19kZWFkID0gdHJ1ZTtcbkBAIC0zODYsMTAgKzM4Niw2IEBAIHN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBib29sIGZhc3QpXG4gXHRcdC8qIERvbid0IHJlc3RhcnQgREZTIGZyb20gdGhpcyB2ZXJ0ZXguICovXG4gXHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNnZlcnRleC1cdTAwM2VlbnRyeSwgXHUwMDI2dW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcbiBcbi1cdFx0LyogTWFyayB2ZXJ0ZXggYXMgb2ZmLXN0YWNrIGZvciBfX3VuaXhfd2Fsa19zY2MoKS4gKi9cbi1cdFx0aWYgKCFmYXN0KVxuLVx0XHRcdHZlcnRleC1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXg7XG4tXG4gXHRcdGlmIChzY2NfZGVhZClcbiBcdFx0XHRzY2NfZGVhZCA9IHVuaXhfdmVydGV4X2RlYWQodmVydGV4KTtcbiBcdH1cbkBAIC01MjEsNiArNTE3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX191bml4X3dhbGtfc2NjKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LFxuIFx0fVxuIFxuIFx0aWYgKHZlcnRleC1cdTAwM2VpbmRleCA9PSB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4KSB7XG4rXHRcdHN0cnVjdCB1bml4X3ZlcnRleCAqdjtcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCBzY2M7XG4gXG4gXHRcdC8qIFNDQyBmaW5hbGlzZWQuXG5AQCAtNTMwLDcgKzUyNywxMyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3VuaXhfd2Fsa19zY2Moc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgsXG4gXHRcdCAqL1xuIFx0XHRfX2xpc3RfY3V0X3Bvc2l0aW9uKFx1MDAyNnNjYywgXHUwMDI2dmVydGV4X3N0YWNrLCBcdTAwMjZ2ZXJ0ZXgtXHUwMDNlc2NjX2VudHJ5KTtcbiBcbi1cdFx0aWYgKHVuaXhfc2NjX2RlYWQoXHUwMDI2c2NjLCBmYWxzZSkpIHtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHYsIFx1MDAyNnNjYywgc2NjX2VudHJ5KSB7XG4rXHRcdFx0LyogTWFyayB2ZXJ0ZXggYXMgb2ZmLXN0YWNrIGFuZCBhc3NpZ24gYSB1bmlxdWUgSUQuICovXG4rXHRcdFx0di1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXg7XG4rXHRcdFx0di1cdTAwM2VzY2NfaW5kZXggPSB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4O1xuK1x0XHR9XG4rXG4rXHRcdGlmICh1bml4X3NjY19kZWFkKFx1MDAyNnNjYykpIHtcbiBcdFx0XHR1bml4X2NvbGxlY3Rfc2tiKFx1MDAyNnNjYywgaGl0bGlzdCk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0aWYgKHVuaXhfdmVydGV4X21heF9zY2NfaW5kZXggXHUwMDNjIHZlcnRleC1cdTAwM2VzY2NfaW5kZXgpXG5AQCAtNTg4LDcgKzU5MSw3IEBAIHN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2NfZmFzdChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxuIFx0XHR2ZXJ0ZXggPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzLCB0eXBlb2YoKnZlcnRleCksIGVudHJ5KTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2c2NjLCBcdTAwMjZ2ZXJ0ZXgtXHUwMDNlc2NjX2VudHJ5KTtcbiBcbi1cdFx0aWYgKHVuaXhfc2NjX2RlYWQoXHUwMDI2c2NjLCB0cnVlKSkge1xuK1x0XHRpZiAodW5peF9zY2NfZGVhZChcdTAwMjZzY2MpKSB7XG4gXHRcdFx0Y3ljbGljX3NjY3MtLTtcbiBcdFx0XHR1bml4X2NvbGxlY3Rfc2tiKFx1MDAyNnNjYywgaGl0bGlzdCk7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmNcbmluZGV4IGQ4MmE3OWMyMWMxNzkuLmMxNjVmMjUwMjIwYTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuY1xuQEAgLTM3OCw0ICszNzgsMjEgQEAgVEVTVF9GKHNjbV9yaWdodHMsIGJhY2t0cmFja19mcm9tX3NjYylcbiBcdGNsb3NlX3NvY2tldHMoMTApO1xuIH1cbiBcbitURVNUX0Yoc2NtX3JpZ2h0cywgbWl4ZWRfbG93cG9pbnQpXG4re1xuK1x0Y3JlYXRlX3NvY2tldHMoNik7XG4rXG4rXHRzZW5kX2ZkKDAsIDEpO1xuK1x0c2VuZF9mZCgxLCAyKTtcbitcdHNlbmRfZmQoMiwgMSk7XG4rXHRzZW5kX2ZkKDEsIDApO1xuK1xuK1x0c2VuZF9mZCgzLCA0KTtcbitcdHNlbmRfZmQoNCwgNSk7XG4rXHRzZW5kX2ZkKDUsIDQpO1xuK1x0c2VuZF9mZCg0LCAzKTtcbitcbitcdGNsb3NlX3NvY2tldHMoNik7XG4rfVxuK1xuIFRFU1RfSEFSTkVTU19NQUlOXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDoxMC43NTMyOTA3MDZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0ODg0Mzk2MzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVU5JWCBEb21haW4gU29ja2V0IEdhcmJhZ2UgQ29sbGVjdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gdGhlIGNoYW5nZXMgdG91Y2ggYG5ldC91bml4L2dhcmJhZ2UuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmNgLiBJIGltbWVkaWF0ZWx5IHplcm8gaW4gb24gYG5ldC91bml4L2dhcmJhZ2UuY2AgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcy4gRnJvbSBleHBlcmllbmNlLCBJIGtub3cgdGhpcyBpcyB0aGUgVU5JWCBkb21haW4gc29ja2V0IGdhcmJhZ2UgY29sbGVjdGlvbiBjb2RlLiBTcGVjaWZpY2FsbHksIGl0J3MgVGFyamFuJ3MgYWxnb3JpdGhtLCB1c2VkIHRvIGRldGVjdCBjeWNsaWMgZmlsZSBkZXNjcmlwdG9yIHJlZmVyZW5jZXMgYW5kIGhhbmRsZSBTQ01fUklHSFRTIGdhcmJhZ2UuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBuZXQvdW5peC9nYXJiYWdlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgcGF0Y2guIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGljaCBjb25maWd1cmF0aW9ucyBlbmFibGUgdGhpcyBnYXJiYWdlIGNvbGxlY3Rpb24gYW5kIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIGJlaW5nIGltcGFjdGVkIG9yIG1vZGlmaWVkLiBXaGF0IGFyZSB0aGUgcmVsZXZhbnQgaG9va3M/IFdoYXQncyB0aGUgaW1wYWN0IG9uIHRoZSBleGlzdGluZyBjeWNsZSBkZXRlY3Rpb24/IElzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjaGFuZ2VzJyBpbXBsaWNhdGlvbnMuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA0OjA0OjE1LjYzNzY4OTQ4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3VuaXgvZ2FyYmFnZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3MDpcXHRcXG4gMzcxOlxcdFxcdHJldHVybiB0cnVlO1xcbiAzNzI6XFx0fVxcbiAzNzM6XFx0XFxuIDM3NDpcXHRzdGF0aWMgTElTVF9IRUFEKHVuaXhfdmlzaXRlZF92ZXJ0aWNlcyk7XFxuIDM3NTpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfTUFSSzI7XFxuIDM3NjpcXHRcXG4gMzc3OlxcdHN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjKVxcbiAzNzg6XFx0e1xcbiAzNzk6XFx0XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XFxuIDM4MDpcXHRcXHRib29sIHNjY19kZWFkID0gdHJ1ZTtcXG4gMzgxOlxcdFxcdHVuc2lnbmVkIGludCBzZXE7XFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdHNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNnVuaXhfcGVla19zZXEpO1xcbiAzODQ6XFx0XFxuIDM4NTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UodmVydGV4LCBzY2MsIHNjY19lbnRyeSkge1xcbiAzODY6XFx0XFx0XFx0LyogRG9uJ3QgcmVzdGFydCBERlMgZnJvbSB0aGlzIHZlcnRleC4gKi9cXG4gMzg3OlxcdFxcdFxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZWVudHJ5LCBcXHUwMDI2dW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcXG4gMzg4OlxcdFxcbiAzODk6XFx0XFx0XFx0aWYgKHNjY19kZWFkKVxcbiAzOTA6XFx0XFx0XFx0XFx0c2NjX2RlYWQgPSB1bml4X3ZlcnRleF9kZWFkKHZlcnRleCk7XFxuIDM5MTpcXHRcXHR9XFxuIDM5MjpcXHRcXG4gMzkzOlxcdFxcdC8qIElmIE1TR19QRUVLIGludGVydmVuZWQsIGRlZmVyIHRoaXMgU0NDIHRvIHRoZSBuZXh0IHJvdW5kLiAqL1xcbiAzOTQ6XFx0XFx0aWYgKHJlYWRfc2VxY291bnRfcmV0cnkoXFx1MDAyNnVuaXhfcGVla19zZXEsIHNlcSkpXFxuIDM5NTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDM5NjpcXHRcXG4gMzk3OlxcdFxcdHJldHVybiBzY2NfZGVhZDtcXG4gMzk4OlxcdH1cXG4gMzk5OlxcdFxcbiA0MDA6XFx0c3RhdGljIHZvaWQgdW5peF9jb2xsZWN0X3NrYihzdHJ1Y3QgbGlzdF9oZWFkICpzY2MsIHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXFxuIDQwMTpcXHR7XFxuIDQwMjpcXHRcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHZlcnRleCwgc2NjLCBzY2NfZW50cnkpIHtcXG4gNDA1OlxcdFxcdFxcdHN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlO1xcbiA0MDY6XFx0XFx0XFx0c3RydWN0IHVuaXhfZWRnZSAqZWRnZTtcXG4gNDA3OlxcdFxcdFxcdHN0cnVjdCB1bml4X3NvY2sgKnU7XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdFxcdGVkZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZWVkZ2VzLCB0eXBlb2YoKmVkZ2UpLCB2ZXJ0ZXhfZW50cnkpO1xcbiA0MTA6XFx0XFx0XFx0dSA9IGVkZ2UtXFx1MDAzZXByZWRlY2Vzc29yO1xcbiA0MTE6XFx0XFx0XFx0cXVldWUgPSBcXHUwMDI2dS1cXHUwMDNlc2suc2tfcmVjZWl2ZV9xdWV1ZTtcXG4gNDEyOlxcdFxcbiA0MTM6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZxdWV1ZS1cXHUwMDNlbG9jayk7XFxuIDQxNDpcXHRcXG4gNDE1OlxcdFxcdFxcdGlmICh1LVxcdTAwM2Vzay5za19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7XFxuIDQxNjpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiA0MTc6XFx0XFxuIDQxODpcXHRcXHRcXHRcXHRza2JfcXVldWVfd2FsayhxdWV1ZSwgc2tiKSB7XFxuIDQxOTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICplbWJyeW9fcXVldWUgPSBcXHUwMDI2c2tiLVxcdTAwM2Vzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6MTUuNjM3NzY3NzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDI2Njg2MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbmV0L3VuaXgvZ2FyYmFnZS5jYCAoTGluZXMgNTAwLTYwMCkqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gbGluZXMgNTAwIHRocm91Z2ggNjAwLiBJIGV4cGVjdCB0aGlzIHNlY3Rpb24gdG8gYmUgaGFuZGxpbmcgY2xlYW51cCBvciBwZXJoYXBzIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gVW5peCBkb21haW4gc29ja2V0cywgZ2l2ZW4gdGhlIGZpbGVuYW1lLiBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgcGF0dGVybnM7IGFyZSB3ZSBkZWFsaW5nIHdpdGggZGVhbGxvY2F0aW9uIG9mIHNvY2tldCBzdHJ1Y3R1cmVzLCByZWZlcmVuY2UgY291bnRpbmcsIGVycm9yIGhhbmRsaW5nLCBvciBwZXJoYXBzIHNvbWUga2luZCBvZiBnYXJiYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIGhlcmUuIEknbGwgYmUgd2F0Y2hpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG9yIGRvdWJsZS1mcmVlcy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVzZSBhcmVhcyBhcmUgb2Z0ZW4gdHJpY2t5IGluIGxvdy1sZXZlbCBuZXR3b3JrIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIGNvbm5lY3Rpb24gc3RhdGVzIGFuZCByZXNvdXJjZSBleGhhdXN0aW9uIHNpdHVhdGlvbnMgZHVyaW5nIHRoZSByZWxlYXNlIG9mIHJlc291cmNlcy4gSeKAmWxsIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgY29kZSBpbnRlcmFjdHMgd2l0aCBhbnkgYXNzb2NpYXRlZCB3b3JrcXVldWVzIG9yIGtlcm5lbCB0aHJlYWRzLiBUaGlzIHNlY3Rpb24gbWlnaHQgaW52b2x2ZSBmcmVlaW5nIGJ1ZmZlcnMsIHJlbGVhc2luZyBsb2NrcywgYW5kIHBvc3NpYmx5IHNpZ25hbGluZyBvdGhlciBwcm9jZXNzZXMuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgY2FsbHMgdG8gbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGZ1bmN0aW9ucywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgYXNzb2NpYXRlZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gSSdtIHRyeWluZyB0byBnZXQgYSBmZWVsIGZvciBob3cgcm9idXN0IGFuZCByZWxpYWJsZSB0aGlzIGNsZWFudXAgcHJvY2VzcyBpczsgSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgbnVhbmNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg5NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6MTguMDY0NDU2MTc5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC91bml4L2dhcmJhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTAwOlxcdFxcbiA1MDE6XFx0XFx0XFx0XFx0LyogSWYgdGhlIHN1Y2Nlc3NvciBoYXMgYSBzbWFsbGVyIHNjY19pbmRleCwgdHdvIHZlcnRpY2VzXFxuIDUwMjpcXHRcXHRcXHRcXHQgKiBhcmUgaW4gdGhlIHNhbWUgU0NDLCBzbyBwcm9wYWdhdGUgdGhlIHNtYWxsZXIgc2NjX2luZGV4XFxuIDUwMzpcXHRcXHRcXHRcXHQgKiB0byBza2lwIFNDQyBmaW5hbGlzYXRpb24uXFxuIDUwNDpcXHRcXHRcXHRcXHQgKi9cXG4gNTA1OlxcdFxcdFxcdFxcdHZlcnRleC1cXHUwMDNlc2NjX2luZGV4ID0gbWluKHZlcnRleC1cXHUwMDNlc2NjX2luZGV4LCBuZXh0X3ZlcnRleC1cXHUwMDNlc2NjX2luZGV4KTtcXG4gNTA2OlxcdFxcdFxcdH0gZWxzZSBpZiAobmV4dF92ZXJ0ZXgtXFx1MDAzZWluZGV4ICE9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXgpIHtcXG4gNTA3OlxcdFxcdFxcdFxcdC8qIExvb3AgZGV0ZWN0ZWQgYnkgYSBiYWNrL2Nyb3NzIGVkZ2UuXFxuIDUwODpcXHRcXHRcXHRcXHQgKlxcbiA1MDk6XFx0XFx0XFx0XFx0ICogVGhlIHN1Y2Nlc3NvciBpcyBvbiB2ZXJ0ZXhfc3RhY2ssIHNvIHR3byB2ZXJ0aWNlcyBhcmUgaW5cXG4gNTEwOlxcdFxcdFxcdFxcdCAqIHRoZSBzYW1lIFNDQy4gIElmIHRoZSBzdWNjZXNzb3IgaGFzIGEgc21hbGxlciAqc2NjX2luZGV4KixcXG4gNTExOlxcdFxcdFxcdFxcdCAqIHByb3BhZ2F0ZSBpdCB0byBza2lwIFNDQyBmaW5hbGlzYXRpb24uXFxuIDUxMjpcXHRcXHRcXHRcXHQgKi9cXG4gNTEzOlxcdFxcdFxcdFxcdHZlcnRleC1cXHUwMDNlc2NjX2luZGV4ID0gbWluKHZlcnRleC1cXHUwMDNlc2NjX2luZGV4LCBuZXh0X3ZlcnRleC1cXHUwMDNlc2NjX2luZGV4KTtcXG4gNTE0OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDUxNTpcXHRcXHRcXHRcXHQvKiBUaGUgc3VjY2Vzc29yIHdhcyBhbHJlYWR5IGdyb3VwZWQgYXMgYW5vdGhlciBTQ0MgKi9cXG4gNTE2OlxcdFxcdFxcdH1cXG4gNTE3OlxcdFxcdH1cXG4gNTE4OlxcdFxcbiA1MTk6XFx0XFx0aWYgKHZlcnRleC1cXHUwMDNlaW5kZXggPT0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXgpIHtcXG4gNTIwOlxcdFxcdFxcdHN0cnVjdCB1bml4X3ZlcnRleCAqdjtcXG4gNTIxOlxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgc2NjO1xcbiA1MjI6XFx0XFxuIDUyMzpcXHRcXHRcXHQvKiBTQ0MgZmluYWxpc2VkLlxcbiA1MjQ6XFx0XFx0XFx0ICpcXG4gNTI1OlxcdFxcdFxcdCAqIElmIHRoZSBzY2NfaW5kZXggd2FzIG5vdCB1cGRhdGVkLCBhbGwgdGhlIHZlcnRpY2VzIGFib3ZlIG9uXFxuIDUyNjpcXHRcXHRcXHQgKiB2ZXJ0ZXhfc3RhY2sgYXJlIGluIHRoZSBzYW1lIFNDQy4gIEdyb3VwIHRoZW0gdXNpbmcgc2NjX2VudHJ5LlxcbiA1Mjc6XFx0XFx0XFx0ICovXFxuIDUyODpcXHRcXHRcXHRfX2xpc3RfY3V0X3Bvc2l0aW9uKFxcdTAwMjZzY2MsIFxcdTAwMjZ2ZXJ0ZXhfc3RhY2ssIFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZXNjY19lbnRyeSk7XFxuIDUyOTpcXHRcXG4gNTMwOlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZSh2LCBcXHUwMDI2c2NjLCBzY2NfZW50cnkpIHtcXG4gNTMxOlxcdFxcdFxcdFxcdC8qIE1hcmsgdmVydGV4IGFzIG9mZi1zdGFjayBhbmQgYXNzaWduIGEgdW5pcXVlIElELiAqL1xcbiA1MzI6XFx0XFx0XFx0XFx0di1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xcbiA1MzM6XFx0XFx0XFx0XFx0di1cXHUwMDNlc2NjX2luZGV4ID0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXg7XFxuIDUzNDpcXHRcXHRcXHR9XFxuIDUzNTpcXHRcXG4gNTM2OlxcdFxcdFxcdGlmICh1bml4X3NjY19kZWFkKFxcdTAwMjZzY2MpKSB7XFxuIDUzNzpcXHRcXHRcXHRcXHR1bml4X2NvbGxlY3Rfc2tiKFxcdTAwMjZzY2MsIGhpdGxpc3QpO1xcbiA1Mzg6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNTM5OlxcdFxcdFxcdFxcdGlmICh1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4IFxcdTAwM2MgdmVydGV4LVxcdTAwM2VzY2NfaW5kZXgpXFxuIDU0MDpcXHRcXHRcXHRcXHRcXHR1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4ID0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXg7XFxuIDU0MTpcXHRcXG4gNTQyOlxcdFxcdFxcdFxcdGlmICh1bml4X3NjY19jeWNsaWMoXFx1MDAyNnNjYykpXFxuIDU0MzpcXHRcXHRcXHRcXHRcXHRjeWNsaWNfc2NjcysrO1xcbiA1NDQ6XFx0XFx0XFx0fVxcbiA1NDU6XFx0XFxuIDU0NjpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2c2NjKTtcXG4gNTQ3OlxcdFxcdH1cXG4gNTQ4OlxcdFxcbiA1NDk6XFx0XFx0LyogTmVlZCBiYWNrdHJhY2tpbmcgPyAqL1xcbiA1NTA6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZlZGdlX3N0YWNrKSlcXG4gNTUxOlxcdFxcdFxcdGdvdG8gcHJldl92ZXJ0ZXg7XFxuIDU1MjpcXHRcXG4gNTUzOlxcdFxcdHJldHVybiBjeWNsaWNfc2NjcztcXG4gNTU0OlxcdH1cXG4gNTU1OlxcdFxcbiA1NTY6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF9ncmFwaF9jeWNsaWNfc2NjcztcXG4gNTU3OlxcdFxcbiA1NTg6XFx0c3RhdGljIHZvaWQgdW5peF93YWxrX3NjYyhzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxcbiA1NTk6XFx0e1xcbiA1NjA6XFx0XFx0dW5zaWduZWQgbG9uZyBsYXN0X2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfU1RBUlQ7XFxuIDU2MTpcXHRcXHR1bnNpZ25lZCBsb25nIGN5Y2xpY19zY2NzID0gMDtcXG4gNTYyOlxcdFxcbiA1NjM6XFx0XFx0dW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX1NUQVJUO1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHQvKiBWaXNpdCBldmVyeSB2ZXJ0ZXggZXhhY3RseSBvbmNlLlxcbiA1NjY6XFx0XFx0ICogX191bml4X3dhbGtfc2NjKCkgbW92ZXMgdmlzaXRlZCB2ZXJ0aWNlcyB0byB1bml4X3Zpc2l0ZWRfdmVydGljZXMuXFxuIDU2NzpcXHRcXHQgKi9cXG4gNTY4OlxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShcXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpKSB7XFxuIDU2OTpcXHRcXHRcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcXG4gNTcwOlxcdFxcbiA1NzE6XFx0XFx0XFx0dmVydGV4ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMsIHR5cGVvZigqdmVydGV4KSwgZW50cnkpO1xcbiA1NzI6XFx0XFx0XFx0Y3ljbGljX3NjY3MgKz0gX191bml4X3dhbGtfc2NjKHZlcnRleCwgXFx1MDAyNmxhc3RfaW5kZXgsIGhpdGxpc3QpO1xcbiA1NzM6XFx0XFx0fVxcbiA1NzQ6XFx0XFxuIDU3NTpcXHRcXHRsaXN0X3JlcGxhY2VfaW5pdChcXHUwMDI2dW5peF92aXNpdGVkX3ZlcnRpY2VzLCBcXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpO1xcbiA1NzY6XFx0XFx0c3dhcCh1bml4X3ZlcnRleF91bnZpc2l0ZWRfaW5kZXgsIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXgpO1xcbiA1Nzc6XFx0XFxuIDU3ODpcXHRcXHRXUklURV9PTkNFKHVuaXhfZ3JhcGhfY3ljbGljX3NjY3MsIGN5Y2xpY19zY2NzKTtcXG4gNTc5OlxcdFxcdFdSSVRFX09OQ0UodW5peF9ncmFwaF9zdGF0ZSxcXG4gNTgwOlxcdFxcdFxcdCAgIGN5Y2xpY19zY2NzID8gVU5JWF9HUkFQSF9DWUNMSUMgOiBVTklYX0dSQVBIX05PVF9DWUNMSUMpO1xcbiA1ODE6XFx0fVxcbiA1ODI6XFx0XFxuIDU4MzpcXHRzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjX2Zhc3Qoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcXG4gNTg0OlxcdHtcXG4gNTg1OlxcdFxcdHVuc2lnbmVkIGxvbmcgY3ljbGljX3NjY3MgPSB1bml4X2dyYXBoX2N5Y2xpY19zY2NzO1xcbiA1ODY6XFx0XFxuIDU4NzpcXHRcXHR3aGlsZSAoIWxpc3RfZW1wdHkoXFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzKSkge1xcbiA1ODg6XFx0XFx0XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XFxuIDU4OTpcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIHNjYztcXG4gNTkwOlxcdFxcbiA1OTE6XFx0XFx0XFx0dmVydGV4ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMsIHR5cGVvZigqdmVydGV4KSwgZW50cnkpO1xcbiA1OTI6XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNnNjYywgXFx1MDAyNnZlcnRleC1cXHUwMDNlc2NjX2VudHJ5KTtcXG4gNTkzOlxcdFxcbiA1OTQ6XFx0XFx0XFx0aWYgKHVuaXhfc2NjX2RlYWQoXFx1MDAyNnNjYykpIHtcXG4gNTk1OlxcdFxcdFxcdFxcdGN5Y2xpY19zY2NzLS07XFxuIDU5NjpcXHRcXHRcXHRcXHR1bml4X2NvbGxlY3Rfc2tiKFxcdTAwMjZzY2MsIGhpdGxpc3QpO1xcbiA1OTc6XFx0XFx0XFx0fVxcbiA1OTg6XFx0XFxuIDU5OTpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2c2NjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6MTguMDY0NjE1Mzk5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg1MTI2MDIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgUGF0Y2ggd2l0aCBHaXQgTG9nKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBoaXN0b3J5LiBUaGUgYmVzdCB0b29sIGZvciB0aGlzLCBhcyBhbHdheXMsIGlzIGBnaXQgbG9nYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICp3aGF0KiBhbmQgdGhlICp3aHkqIG9mIHRoZSBjaGFuZ2VzLiBJIG5lZWQgdG8gc2VlIHRoZSBjb21taXQgbWVzc2FnZXMsIHRoZSBhdXRob3IsIHRoZSBjb250ZXh0LCBhbmQgcHJlZmVyYWJseSBhIGNsZWFyIG5hcnJhdGl2ZSBvZiB0aGUgZXZvbHV0aW9uIG9mIHRoaXMgY29kZS4gSSdtIGxvb2tpbmcgZm9yIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgcGF0Y2gg4oCTIHRoZSBwcm9ibGVtIGl0J3Mgc29sdmluZywgdGhlIGRlc2lnbiBjaG9pY2VzIG1hZGUsIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBjb25zaWRlcmVkLiBgZ2l0IGxvZ2Agc2hvdWxkIHByb3ZpZGUgdGhlIGZvdW5kYXRpb24gZm9yIHRoYXQgdW5kZXJzdGFuZGluZy4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgYmVmb3JlIEkgZXZlbiBsb29rIGF0IHRoZSBkaWZmcyBpbiBkZXRhaWw7IHVuZGVyc3RhbmRpbmcgdGhlIHN0b3J5IGhlbHBzIGZyYW1lIHRoZSBpbmRpdmlkdWFsIGNoYW5nZXMuIFRoaXMgaXMgdGhlIGJlc3QgZmlyc3Qgc3RlcCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODAxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDoxOS45MTU4Nzk5MzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxOTMxMTg1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaXhlZF9sb3dwb2ludFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJ0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmM9MzYyPVRFU1RfRihzY21fcmlnaHRzLCBiYWNrdHJhY2tfZnJvbV9zY2MpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmMtMzgwLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuYzozODE6VEVTVF9GKHNjbV9yaWdodHMsIG1peGVkX2xvd3BvaW50KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuYy0zODIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDoyMi4xMzUyMDQxODRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNzI4NjI4NTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR2l0IENvbW1pdCBhbmQgUmVsYXRlZCBDb2RlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGdldCB0aGUgY29udGV4dCBvZiB0aGlzIGNvbW1pdCwgYnV0IEkgZG9uJ3QgaGF2ZSBkaXJlY3QgYWNjZXNzIHRvIGEgc3RhbmRhcmQgYGdpdCBsb2dgLiBIb3dldmVyLCB0aGUgcHJvbXB0IGhlbHBmdWxseSBwcm92aWRlcyB0aGUgYXV0aG9yIGFuZCBsaWtlbHkgc29tZSByZWxldmFudCBpbmZvcm1hdGlvbiDigJMgYEF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VgLiBUaGF0J3MgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgY29udGV4dHVhbGl6aW5nIHRoZSBpc3N1ZSBjcmVhdGVkIGJ5IHRoZSBzeXprYWxsZXIgaGFybmVzcy5cblxuTm93LCBteSBpbml0aWFsIGluc3RpbmN0cyBhcmUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBHaXZlbiB0aGUgYXBwYXJlbnQgZm9jdXMgb24gZ2FyYmFnZSBjb2xsZWN0aW9uLCBteSBpbW1lZGlhdGUgdGFyZ2V0cyBhcmUgYF9fdW5peF93YWxrX3NjY2AgYW5kIGB1bml4X3dhbGtfc2NjYC4gSSdsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGJyb2FkZXIgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbXMsIHBhcnRpY3VsYXJseSBgdW5peF9nY2AuXG5cbk15IGZvY3VzIHdpbGwgdGhlbiBiZSB0byBpZGVudGlmeSBjYWxsZXJzIG9mIGB1bml4X3dhbGtfc2NjYC4gSSdsbCBzcGVjaWZpY2FsbHkgbG9vayBmb3IgdGhlc2Ugd2l0aGluIGBuZXQvdW5peC9nYXJiYWdlLmNgLiBMb2NhdGluZyB0aGUgY2FsbGVycyB3aWxsIHByb3ZpZGUgdmFsdWFibGUgaW5zaWdodHMgaW50byB3aGVyZSBhbmQgaG93IHRoaXMgU0NDIHdhbGsgaXMgYmVpbmcgdXRpbGl6ZWQuIFRoaXMgYXBwcm9hY2ggc2hvdWxkIGhlbHAgbWUgYnVpbGQgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBwYXJ0IG9mIGdhcmJhZ2UgY29sbGVjdGlvbiB0aGUgaGFybmVzcyB1bmNvdmVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6MjUuODYzODM1MjQ0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODU0OTEyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bml4X3dhbGtfc2NjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC91bml4L2dhcmJhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdW5peC9nYXJiYWdlLmM9NDMzPXN0YXRpYyBib29sIHVuaXhfc2NjX2N5Y2xpYyhzdHJ1Y3QgbGlzdF9oZWFkICpzY2MpXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNDUyLVxcbm5ldC91bml4L2dhcmJhZ2UuYzo0NTM6c3RhdGljIHVuc2lnbmVkIGxvbmcgX191bml4X3dhbGtfc2NjKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LFxcbm5ldC91bml4L2dhcmJhZ2UuYy00NTQtXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpsYXN0X2luZGV4LFxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTU1Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyB1bml4X2dyYXBoX2N5Y2xpY19zY2NzO1xcbm5ldC91bml4L2dhcmJhZ2UuYy01NTctXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjU1ODpzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjKHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTU1OS17XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNTY1LVxcdC8qIFZpc2l0IGV2ZXJ5IHZlcnRleCBleGFjdGx5IG9uY2UuXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjU2NjpcXHQgKiBfX3VuaXhfd2Fsa19zY2MoKSBtb3ZlcyB2aXNpdGVkIHZlcnRpY2VzIHRvIHVuaXhfdmlzaXRlZF92ZXJ0aWNlcy5cXG5uZXQvdW5peC9nYXJiYWdlLmMtNTY3LVxcdCAqL1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTU3MS1cXHRcXHR2ZXJ0ZXggPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcywgdHlwZW9mKCp2ZXJ0ZXgpLCBlbnRyeSk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjU3MjpcXHRcXHRjeWNsaWNfc2NjcyArPSBfX3VuaXhfd2Fsa19zY2ModmVydGV4LCBcXHUwMDI2bGFzdF9pbmRleCwgaGl0bGlzdCk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTU3My1cXHR9XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNTgyLVxcbm5ldC91bml4L2dhcmJhZ2UuYzo1ODM6c3RhdGljIHZvaWQgdW5peF93YWxrX3NjY19mYXN0KHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTU4NC17XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9NjA5PXN0YXRpYyB2b2lkIHVuaXhfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTYyNS1cXHRpZiAodW5peF9ncmFwaF9zdGF0ZSA9PSBVTklYX0dSQVBIX0NZQ0xJQylcXG5uZXQvdW5peC9nYXJiYWdlLmM6NjI2OlxcdFxcdHVuaXhfd2Fsa19zY2NfZmFzdChcXHUwMDI2aGl0bGlzdCk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTYyNy1cXHRlbHNlXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjYyODpcXHRcXHR1bml4X3dhbGtfc2NjKFxcdTAwMjZoaXRsaXN0KTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNjI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDoyNS45NDIzOTE1NzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTk5NTg5MTA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFVuaXggU29ja2V0IEdhcmJhZ2UgQ29sbGVjdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gcHJvY2VzcyB3aXRoaW4gdGhlIFVuaXggc29ja2V0IHN1YnN5c3RlbS4gTXkgc3RhcnRpbmcgcG9pbnQgaXMgYHVuaXhfZ2NgLCB3aGljaCBJIGtub3cgaXMgdGhlIGNvcmUgd29ya3F1ZXVlIGZ1bmN0aW9uIGRlZmluZWQgaW4gYG5ldC91bml4L2dhcmJhZ2UuY2AuIE5vdywgdGhlIGtleSBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp0cmlnZ2VyZWQqLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gYHVuaXhfZ2NgIG9yLCBtb3JlIGltcG9ydGFudGx5LCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgKnNjaGVkdWxlZCogdG8gcnVuLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBsb2dpYyBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgZGVidWdnaW5nLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEyNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA0OjA0OjI3LjkzODI4NDczMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNDIwMDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVuaXhfZ2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3VuaXgvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC91bml4L2FmX3VuaXguYy0zMy0gKlxcdFxcdFxcdFxcdFxcdG9sZCBhcHBzIGFuZCBpdCB3aWxsIGF2b2lkIGh1Z2UgYW1vdW50XFxubmV0L3VuaXgvYWZfdW5peC5jOjM0OiAqXFx0XFx0XFx0XFx0XFx0b2Ygc29ja3MgaGFzaGVkICh0aGlzIGZvciB1bml4X2djKClcXG5uZXQvdW5peC9hZl91bml4LmMtMzUtICpcXHRcXHRcXHRcXHRcXHRwZXJmb3JtYW5jZXMgcmVhc29ucykuXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNDQtICpcXHRcXHRzdWNoIHNvY2tldCBhbmQgY2xvc2VkIGl0IChkZXNjcmlwdG9yKS4gVGhhdCB3b3VsZCBoYXBwZW4gb25cXG5uZXQvdW5peC9nYXJiYWdlLmM6NDU6ICpcXHRcXHRlYWNoIHVuaXhfZ2MoKSB1bnRpbCB0aGUgYWNjZXB0KCkuIFNpbmNlIHRoZSBzdHJ1Y3QgZmlsZSBpblxcbm5ldC91bml4L2dhcmJhZ2UuYy00Ni0gKlxcdFxcdHF1ZXN0aW9uIHdvdWxkIGdvIHRvIHRoZSBmcmVlIGxpc3QgYW5kIG1pZ2h0IGJlIHJldXNlZC4uLlxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTE5Mz1zdGF0aWMgdm9pZCB1bml4X2ZyZWVfdmVydGljZXMoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtMjAyLVxcbm5ldC91bml4L2dhcmJhZ2UuYzoyMDM6c3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyh1bml4X2djX2xvY2spO1xcbm5ldC91bml4L2dhcmJhZ2UuYy0yMDQtXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTIwNT12b2lkIHVuaXhfYWRkX2VkZ2VzKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsLCBzdHJ1Y3QgdW5peF9zb2NrICpyZWNlaXZlcilcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy0yMDgtXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjIwOTpcXHRzcGluX2xvY2soXFx1MDAyNnVuaXhfZ2NfbG9jayk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTIxMC1cXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy0yMzEtXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjIzMjpcXHRzcGluX3VubG9jayhcXHUwMDI2dW5peF9nY19sb2NrKTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMjMzLVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTIzOT12b2lkIHVuaXhfZGVsX2VkZ2VzKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTI0My1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MjQ0OlxcdHNwaW5fbG9jayhcXHUwMDI2dW5peF9nY19sb2NrKTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMjQ1LVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTI2MS1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MjYyOlxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ1bml4X2djX2xvY2spO1xcbm5ldC91bml4L2dhcmJhZ2UuYy0yNjMtXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9MjY3PXZvaWQgdW5peF91cGRhdGVfZWRnZXMoc3RydWN0IHVuaXhfc29jayAqcmVjZWl2ZXIpXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtMjc1LVxcdH0gZWxzZSB7XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjI3NjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnVuaXhfZ2NfbG9jayk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTI3Ny1cXHRcXHR1bml4X3VwZGF0ZV9ncmFwaCh1bml4X3NrKHJlY2VpdmVyLVxcdTAwM2VsaXN0ZW5lciktXFx1MDAzZXZlcnRleCk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTI3OC1cXHRcXHRyZWNlaXZlci1cXHUwMDNlbGlzdGVuZXIgPSBOVUxMO1xcbm5ldC91bml4L2dhcmJhZ2UuYzoyNzk6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnVuaXhfZ2NfbG9jayk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTI4MC1cXHR9XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9NTgzPXN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2NfZmFzdChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTYwOC1cXG5uZXQvdW5peC9nYXJiYWdlLmM6NjA5OnN0YXRpYyB2b2lkIHVuaXhfZ2Moc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbm5ldC91bml4L2dhcmJhZ2UuYy02MTAte1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTYxNS1cXG5uZXQvdW5peC9nYXJiYWdlLmM6NjE2OlxcdHNwaW5fbG9jayhcXHUwMDI2dW5peF9nY19sb2NrKTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNjE3LVxcbm5ldC91bml4L2dhcmJhZ2UuYy02MTgtXFx0aWYgKHVuaXhfZ3JhcGhfc3RhdGUgPT0gVU5JWF9HUkFQSF9OT1RfQ1lDTElDKSB7XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjYxOTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dW5peF9nY19sb2NrKTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNjIwLVxcdFxcdGdvdG8gc2tpcF9nYztcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy02MjktXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjYzMDpcXHRzcGluX3VubG9jayhcXHUwMDI2dW5peF9nY19sb2NrKTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNjMxLVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTY0MS1cXG5uZXQvdW5peC9nYXJiYWdlLmM6NjQyOnN0YXRpYyBERUNMQVJFX1dPUksodW5peF9nY193b3JrLCB1bml4X2djKTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNjQzLVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTY0Nj12b2lkIHVuaXhfc2NoZWR1bGVfZ2Moc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTY1OC1cXHRpZiAoIVJFQURfT05DRShnY19pbl9wcm9ncmVzcykpXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjY1OTpcXHRcXHRxdWV1ZV93b3JrKHN5c3RlbV9kZmxfd3EsIFxcdTAwMjZ1bml4X2djX3dvcmspO1xcbm5ldC91bml4L2dhcmJhZ2UuYy02NjAtXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTY2MS1cXHRpZiAodXNlciBcXHUwMDI2XFx1MDAyNiBSRUFEX09OQ0UodW5peF9ncmFwaF9jeWNsaWNfc2NjcykpXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjY2MjpcXHRcXHRmbHVzaF93b3JrKFxcdTAwMjZ1bml4X2djX3dvcmspO1xcbm5ldC91bml4L2dhcmJhZ2UuYy02NjMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDoyOC4wNDA3MTAyNDRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI1NDYyMDY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOYXZpZ2F0aW5nIHRoZSBOZXQvVW5peCBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBuZXQvdW5peC9nYXJiYWdlLmNgIGdldHMgYnVpbHQuIEZpcnN0IGluc3RpbmN0OiBLY29uZmlnLiBMZXQncyBzZWUgaWYgdGhlcmUncyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgY29udHJvbHMgaXRzIGluY2x1c2lvbi4gQWgsIHJpZ2h0LCB0aGF0J3Mgd2hlcmUgdGhlICphY3R1YWwqIGJ1aWxkIHJ1bGVzIGFyZSwgbm90IHVzdWFsbHkgaW4gS2NvbmZpZy4gTmV4dCBzdGVwOiBkaXZlIGludG8gdGhlIGBuZXQvdW5peC9NYWtlZmlsZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRpcmVjdCBhbnN3ZXIsIG9yIGF0IGxlYXN0IHBvaW50IG1lIHRvIHRoZSByZWxldmFudCB2YXJpYWJsZXMgYW5kIGRlcGVuZGVuY2llcy4gR290dGEgdHJhY2sgZG93biB0aG9zZSBidWlsZCBpbnN0cnVjdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NDAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDozMC4yOTUzMzM0ODFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC91bml4L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IHVuaXggZG9tYWluIHNvY2tldCBsYXllci5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX1VOSVgpXFx0Kz0gdW5peC5vXFxuICAgNzpcXHRcXG4gICA4OlxcdHVuaXgteVxcdFxcdFxcdDo9IGFmX3VuaXgubyBnYXJiYWdlLm9cXG4gICA5OlxcdHVuaXgtJChDT05GSUdfU1lTQ1RMKVxcdCs9IHN5c2N0bF9uZXRfdW5peC5vXFxuICAxMDpcXHR1bml4LSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB1bml4X2JwZi5vXFxuICAxMTpcXHRcXG4gIDEyOlxcdG9iai0kKENPTkZJR19VTklYX0RJQUcpXFx0Kz0gdW5peF9kaWFnLm9cXG4gIDEzOlxcdHVuaXhfZGlhZy15XFx0XFx0Oj0gZGlhZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA0OjA0OjMwLjI5NTQzODY5MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjc5NDQyNDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgVU5JWCBEb21haW4gU29ja2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgQ09ORklHX1VOSVhgIOKAkyB0aGF0J3MgdGhlIHN0YW5kYXJkIGZvciBVTklYIGRvbWFpbiBzb2NrZXRzLCByaWdodD8gSnVzdCBtYWtpbmcgYWJzb2x1dGVseSBjZXJ0YWluIGhlcmUuIEJlc3QgcHJhY3RpY2UgZGljdGF0ZXMgdGhhdCBJIHZlcmlmeSB0aGlzIGluIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUuIEknbGwgb3BlbiB1cCBgbmV0L3VuaXgvS2NvbmZpZ2AgYW5kIHRha2UgYSBxdWljayBsb29rIGp1c3QgdG8gY29uZmlybSBteSBpbml0aWFsIGFzc3VtcHRpb24uIEJldHRlciB0byBiZSB0aG9yb3VnaCBhbmQgYXZvaWQgYW55IHBvdGVudGlhbCBnb3RjaGFzIGRvd24gdGhlIGxpbmUuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBzbyBpdCdzIHdvcnRoIHRoZSBxdWljayBkb3VibGUtY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA0OjA0OjMyLjU3NDg4MzgwNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFVuaXggRG9tYWluIFNvY2tldHNcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFVOSVhcXG4gICA3OlxcdFxcdGJvb2wgXFxcIlVuaXggZG9tYWluIHNvY2tldHNcXFwiXFxuICAgODpcXHRcXHRoZWxwXFxuICAgOTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBpbmNsdWRlIHN1cHBvcnQgZm9yIFVuaXggZG9tYWluIHNvY2tldHM7XFxuICAxMDpcXHRcXHQgIHNvY2tldHMgYXJlIHRoZSBzdGFuZGFyZCBVbml4IG1lY2hhbmlzbSBmb3IgZXN0YWJsaXNoaW5nIGFuZFxcbiAgMTE6XFx0XFx0ICBhY2Nlc3NpbmcgbmV0d29yayBjb25uZWN0aW9ucy4gIE1hbnkgY29tbW9ubHkgdXNlZCBwcm9ncmFtcyBzdWNoIGFzXFxuICAxMjpcXHRcXHQgIHRoZSBYIFdpbmRvdyBzeXN0ZW0gYW5kIHN5c2xvZyB1c2UgdGhlc2Ugc29ja2V0cyBldmVuIGlmIHlvdXJcXG4gIDEzOlxcdFxcdCAgbWFjaGluZSBpcyBub3QgY29ubmVjdGVkIHRvIGFueSBuZXR3b3JrLiAgVW5sZXNzIHlvdSBhcmUgd29ya2luZyBvblxcbiAgMTQ6XFx0XFx0ICBhbiBlbWJlZGRlZCBzeXN0ZW0gb3Igc29tZXRoaW5nIHNpbWlsYXIsIHlvdSB0aGVyZWZvcmUgZGVmaW5pdGVseVxcbiAgMTU6XFx0XFx0ICB3YW50IHRvIHNheSBZIGhlcmUuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgU2F5IFkgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0Y29uZmlnXFx0QUZfVU5JWF9PT0JcXG4gIDIwOlxcdFxcdGJvb2wgXFxcIlVOSVg6IG91dC1vZi1ib3VuZCBtZXNzYWdlc1xcXCJcXG4gIDIxOlxcdFxcdGRlcGVuZHMgb24gVU5JWFxcbiAgMjI6XFx0XFx0ZGVmYXVsdCB5XFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFN1cHBvcnQgZm9yIE1TR19PT0IgaW4gVU5JWCBkb21haW4gc29ja2V0cy4gSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDI1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDozMi41NzQ5ODAwNDVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzkwNDA2NTA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBDcml0aWNhbCBOZXR3b3JrIEdhcmJhZ2UgQ29sbGVjdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgY29kZSBpbiBmcm9udCBvZiBtZSwgcGFydCBvZiB0aGUgY29yZSBuZXR3b3JraW5nJ3MgVW5peCBkb21haW4gc29ja2V0cyBnYXJiYWdlIGNvbGxlY3Rpb24sIHNwZWNpZmljYWxseSB0aGUgU0NDIGRldGVjdGlvbiBhbGdvcml0aG0uICBJIHNlZSBpdCdzIGRlYWxpbmcgd2l0aCBmdW5jdGlvbnMgbGlrZSBgX191bml4X3dhbGtfc2NjYCwgYHVuaXhfc2NjX2RlYWRgLCBhbmQgYHVuaXhfd2Fsa19zY2NfZmFzdGAuICBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IGZ1enphYmlsaXR5LiAgR2l2ZW4gdGhlIG5hdHVyZSBvZiBVbml4IGRvbWFpbiBzb2NrZXRzLCBhbmQgaG93IGVhc3kgaXQgaXMgdG8gY3JlYXRlIHRoZW0sIHBhc3MgZmlsZSBkZXNjcmlwdG9ycyBhcm91bmQgKHVzaW5nIGBzY21fcmlnaHRzYCksIGNsb3NlIHNvY2tldHMgdG8gdHJpZ2dlciBnYXJiYWdlIGNvbGxlY3Rpb24sIGl0IGxvb2tzIGxpa2Ugc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMgY291bGQgYWJzb2x1dGVseSByZWFjaCB0aGlzIGNvZGUuICBTeXprYWxsZXIsIGZvciBpbnN0YW5jZSwgaGFzIGZ1bGwgZGVzY3JpcHRpb25zIGFuZCBhY3RpdmVseSB0ZXN0cyB0aGlzLiAgSGlzdG9yaWNhbGx5LCB0aGlzIEdDIGNvZGUgaGFzIGJlZW4gYSBob3RiZWQgZm9yIG5hc3R5IGJ1Z3MsIHJhY2VzLCBtZW1vcnkgbGVha3MsIGFuZCBVQUZzLiBTbywgdGhpcyBkZWZpbml0ZWx5IGdyYWJzIG15IGF0dGVudGlvbi5cblxuTm93LCBsZXQncyBkaXNzZWN0IHRoZSBwYXRjaCBpdHNlbGYuIEknbSBmb2N1c2luZyBvbiB3aGF0J3MgY2hhbmdlZCBpbiBgdW5peF9zY2NfZGVhZGAuICBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSBgZmFzdGAgZmxhZywgYW5kIHNvbWUgbG9naWMgdG8gbWFyayB2ZXJ0aWNlcyBhcyBcIm9mZi1zdGFja1wiIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiAgTm93LCB0aGUgYGZhc3RgIHBhcmFtZXRlciBpcyBnb25lLCBhbmQgdGhlIG1hcmtpbmcgbG9naWMgaGFzIG1vdmVkLiAgSW5zdGVhZCwgaW4gYF9fdW5peF93YWxrX3NjY2AsIGFmdGVyIHRoZSBTQ0MgaXMgZGV0ZXJtaW5lZCB1c2luZyBgX19saXN0X2N1dF9wb3NpdGlvbmAsIGEgbG9vcCBpdGVyYXRlcyAqYmFja3dhcmRzKiB0aHJvdWdoIHRoZSB2ZXJ0aWNlcy4gSXQgbm93IHNldHMgYm90aCBgdi1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXhgIGFuZCBgdi1cdTAwM2VzY2NfaW5kZXggPSB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4O2AuICBUaGF0IGB2LVx1MDAzZXNjY19pbmRleGAgYXNzaWdubWVudCBpcyB0aGUga2V5IGRpZmZlcmVuY2UuXG5cblRoaXMgaXMgaW1tZWRpYXRlbHkgcmFpc2luZyBhIGZsYWcuICBJbiBUYXJqYW4ncyBTQ0MgYWxnb3JpdGhtLCBsaWtlIHRoZSBvbmUgdXNlZCBoZXJlLCB2ZXJ0aWNlcyBpbiBhbiBTQ0MgY2FuIGhhdmUgZGlmZmVyZW50IGxvd3BvaW50cyAod2hpY2ggYXJlIHJlcHJlc2VudGVkIGJ5IHNjY19pbmRleCksIGlmIG5vdCB1bmlmaWVkLiBBbHNvLCBvZmYtc3RhY2sgaGFuZGxpbmcgY2FuIGhhdmUgaXNzdWVzLiBUaGUgY2hhbmdlIGlzIHNldHRpbmcgYHYtXHUwMDNlaW5kZXhgIGFuZCBgdi1cdTAwM2VzY2NfaW5kZXhgICpiZWZvcmUqIHRoZSBgdW5peF9zY2NfZGVhZGAgZnVuY3Rpb24gcnVucy4gVGhpcyBpcyBjaGFuZ2luZyB3aGVuIGFuZCBob3cgdmVydGljZXMgYXJlIG1hcmtlZCBhbmQgdGhlaXIgYHNjY19pbmRleGAuICBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGluIGNvcmUgbG9naWMuXG5cblNvLCB0aGlzIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gY29yZSBuZXR3b3JraW5nIChgbmV0L3VuaXgvZ2FyYmFnZS5jYCkuICBJcyB0aGlzIHdvcnRoIGZ1enppbmc/ICBBYnNvbHV0ZWx5LCBwZXIgdGhlIGd1aWRlbGluZXMhICBJdCdzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgVW5peCBkb21haW4gc29ja2V0cyBpbiBRRU1VL0dDRSwgaXQncyBhIG1vZGlmaWNhdGlvbiBvZiByZWFjaGFibGUgY29kZSwgaXQncyBpbiBhIGNvcmUgc3Vic3lzdGVtIChjb3JlIG5ldHdvcmtpbmcpLCBzbyBpdCdzIFdvcnRoRnV6emluZy5cblxuTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGltcG9ydGFudCBzeW1ib2xzIGZvciBmdXp6aW5nLiAgSSdtIGZvY3VzaW5nIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBfX3VuaXhfd2Fsa19zY2NgLCBgdW5peF9zY2NfZGVhZGAsIGB1bml4X3dhbGtfc2NjX2Zhc3RgLCBgdW5peF93YWxrX3NjY2AgYW5kIGB1bml4X2djYC4gTmV4dCwgSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXNlIGFyZSBzdGF0aWMgb3IgZ2xvYmFsLCBhbmQgaG93IHRoZXkgYXJlIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDIzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA0OjA0OjQwLjQ3OTA0OTQ0NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4MzI0MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KHZvaWR8Ym9vbHx1bnNpZ25lZCBsb25nfGludCkgLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdW5peC9nYXJiYWdlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3VuaXgvZ2FyYmFnZS5jPTEzMD1zdGF0aWMgdW5zaWduZWQgY2hhciB1bml4X2dyYXBoX3N0YXRlO1xcbm5ldC91bml4L2dhcmJhZ2UuYy0xMzEtXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjEzMjpzdGF0aWMgdm9pZCB1bml4X3VwZGF0ZV9ncmFwaChzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleClcXG5uZXQvdW5peC9nYXJiYWdlLmMtMTMzLXtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYz0xNTI9c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX1NUQVJUO1xcbm5ldC91bml4L2dhcmJhZ2UuYy0xNTMtXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjE1NDpzdGF0aWMgdm9pZCB1bml4X2FkZF9lZGdlKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsLCBzdHJ1Y3QgdW5peF9lZGdlICplZGdlKVxcbm5ldC91bml4L2dhcmJhZ2UuYy0xNTUte1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTE3NS1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MTc2OnN0YXRpYyB2b2lkIHVuaXhfZGVsX2VkZ2Uoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwsIHN0cnVjdCB1bml4X2VkZ2UgKmVkZ2UpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTE3Ny17XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtMTkyLVxcbm5ldC91bml4L2dhcmJhZ2UuYzoxOTM6c3RhdGljIHZvaWQgdW5peF9mcmVlX3ZlcnRpY2VzKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKVxcbm5ldC91bml4L2dhcmJhZ2UuYy0xOTQte1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTIwMz1zdGF0aWMgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NQSU5MT0NLKHVuaXhfZ2NfbG9jayk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTIwNC1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MjA1OnZvaWQgdW5peF9hZGRfZWRnZXMoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwsIHN0cnVjdCB1bml4X3NvY2sgKnJlY2VpdmVyKVxcbm5ldC91bml4L2dhcmJhZ2UuYy0yMDYte1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTIzOC1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MjM5OnZvaWQgdW5peF9kZWxfZWRnZXMoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTI0MC17XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtMjY2LVxcbm5ldC91bml4L2dhcmJhZ2UuYzoyNjc6dm9pZCB1bml4X3VwZGF0ZV9lZGdlcyhzdHJ1Y3QgdW5peF9zb2NrICpyZWNlaXZlcilcXG5uZXQvdW5peC9nYXJiYWdlLmMtMjY4LXtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy0yODItXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjI4MzppbnQgdW5peF9wcmVwYXJlX2ZwbChzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbClcXG5uZXQvdW5peC9nYXJiYWdlLmMtMjg0LXtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy0zMTItXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjMxMzp2b2lkIHVuaXhfZGVzdHJveV9mcGwoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTMxNC17XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9MzIzPXN0YXRpYyBzZXFjb3VudF90IHVuaXhfcGVla19zZXEgPSBTRVFDTlRfWkVSTyh1bml4X3BlZWtfc2VxKTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMzI0LVxcbm5ldC91bml4L2dhcmJhZ2UuYzozMjU6dm9pZCB1bml4X3BlZWtfZnBsKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKVxcbm5ldC91bml4L2dhcmJhZ2UuYy0zMjYte1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTM0MC1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MzQxOnN0YXRpYyBib29sIHVuaXhfdmVydGV4X2RlYWQoc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTM0Mi17XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9Mzc1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMjtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMzc2LVxcbm5ldC91bml4L2dhcmJhZ2UuYzozNzc6c3RhdGljIGJvb2wgdW5peF9zY2NfZGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpzY2MpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTM3OC17XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtMzk5LVxcbm5ldC91bml4L2dhcmJhZ2UuYzo0MDA6c3RhdGljIHZvaWQgdW5peF9jb2xsZWN0X3NrYihzdHJ1Y3QgbGlzdF9oZWFkICpzY2MsIHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQwMS17XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNDMyLVxcbm5ldC91bml4L2dhcmJhZ2UuYzo0MzM6c3RhdGljIGJvb2wgdW5peF9zY2NfY3ljbGljKHN0cnVjdCBsaXN0X2hlYWQgKnNjYylcXG5uZXQvdW5peC9nYXJiYWdlLmMtNDM0LXtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy00NTItXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjQ1MzpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3VuaXhfd2Fsa19zY2Moc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgsXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ1NC1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKmxhc3RfaW5kZXgsXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9NTU2PXN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfZ3JhcGhfY3ljbGljX3NjY3M7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTU1Ny1cXG5uZXQvdW5peC9nYXJiYWdlLmM6NTU4OnN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2Moc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcXG5uZXQvdW5peC9nYXJiYWdlLmMtNTU5LXtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy01ODItXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjU4MzpzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjX2Zhc3Qoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcXG5uZXQvdW5peC9nYXJiYWdlLmMtNTg0LXtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy02MDgtXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjYwOTpzdGF0aWMgdm9pZCB1bml4X2djKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvdW5peC9nYXJiYWdlLmMtNjEwLXtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYz02NDI9c3RhdGljIERFQ0xBUkVfV09SSyh1bml4X2djX3dvcmssIHVuaXhfZ2MpO1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTY0NS1cXG5uZXQvdW5peC9nYXJiYWdlLmM6NjQ2OnZvaWQgdW5peF9zY2hlZHVsZV9nYyhzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTY0Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA0OjA0OjQwLjU5NzM4NTczNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODE5NTY1Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLiBIZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcgYXMgSSBhcHByb2FjaCB0aGlzIGB1bml4X3NjaGVkdWxlX2djYCBmdW5jdGlvbi5cblxuKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYHVuaXhfc2NoZWR1bGVfZ2NgKipcblxuUmlnaHQsIHNvIHRoZSBmaXJzdCBzdGVwLCBhcyBhbHdheXMgd2hlbiBJIGVuY291bnRlciBhIGZ1bmN0aW9uIEkgZG9uJ3QgaW5zdGFudGx5IHJlY29nbml6ZSwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoZXJlKiB0aGlzIGB1bml4X3NjaGVkdWxlX2djYCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbS4gV2hhdCBwYXJ0cyBvZiB0aGUgc3lzdGVtIHJlbHkgb24gaXQ/IFdoYXQgYXJlIHRoZSBjYWxsaW5nIHNlcXVlbmNlcz8gSXMgaXQgY2FsbGVkIGZyb20gYSBjcml0aWNhbCBwYXRoLCBvciBzb21ldGhpbmcgbW9yZSBhbmNpbGxhcnk/IEtub3dpbmcgdGhpcyB3aWxsIGltbWVkaWF0ZWx5IGluZm9ybSBtZSBhYm91dCBpdHMgbGlrZWx5IGltcG9ydGFuY2UsIHB1cnBvc2UsIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBJIHdhbnQgdG8gdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBjb2RlLCBpZGVhbGx5IHVzaW5nIG15IGRlYnVnZ2VyIG9yIGNvZGUgYnJvd3NpbmcgdG9vbHMgdG8gbGlzdCB0aGUgY2FsbGVycy4gSSBuZWVkIHRvIHNlZSB0aGUgc3RhY2sgdHJhY2VzIHRoYXQgd291bGQgdWx0aW1hdGVseSBsZWFkIHRvIGB1bml4X3NjaGVkdWxlX2djYC4gSG9wZWZ1bGx5LCB0aGUgY2FsbCBzaXRlcyBoYXZlIGhlbHBmdWwgY29tbWVudHMsIGJ1dCBJJ20gcHJlcGFyZWQgdG8gZG8gc29tZSBkaWdnaW5nLiBNeSBnb2FsIGlzIHRvIHBhaW50IGEgbWVudGFsIHBpY3R1cmUgb2YgdGhlIGVudmlyb25tZW50IHRoYXQgdHJpZ2dlcnMgYHVuaXhfc2NoZWR1bGVfZ2NgLiBJJ2xsIHBheSBhdHRlbnRpb24gdG8gYW55IGFyZ3VtZW50cyBiZWluZyBwYXNzZWQsIGFzIHRob3NlIGFyZSBjcnVjaWFsIGNsdWVzLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byByZWFzb24gYWJvdXQgKndoeSogaXQncyBiZWluZyBjYWxsZWQsIGFuZCAqd2hhdCogaXQncyBhY3R1YWxseSBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwOTksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDo0My40MTY5NzIxNjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTQ3Mjg4MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5peF9zY2hlZHVsZV9nY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdW5peC9hZl91bml4LmM9NjY1PXN0YXRpYyB2b2lkIHVuaXhfcmVsZWFzZV9zb2NrKHN0cnVjdCBzb2NrICpzaywgaW50IGVtYnJpb24pXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtNzM1LVxcbm5ldC91bml4L2FmX3VuaXguYzo3MzY6XFx0dW5peF9zY2hlZHVsZV9nYyhOVUxMKTtcXG5uZXQvdW5peC9hZl91bml4LmMtNzM3LX1cXG4tLVxcbm5ldC91bml4L2FmX3VuaXguaD0zMj12b2lkIHVuaXhfcGVla19mcGwoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpO1xcbm5ldC91bml4L2FmX3VuaXguaDozMzp2b2lkIHVuaXhfc2NoZWR1bGVfZ2Moc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyKTtcXG5uZXQvdW5peC9hZl91bml4LmgtMzQtXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9MjgzPWludCB1bml4X3ByZXBhcmVfZnBsKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTMwMy1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MzA0OlxcdHVuaXhfc2NoZWR1bGVfZ2MoZnBsLVxcdTAwM2V1c2VyKTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMzA1LVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTY0Mj1zdGF0aWMgREVDTEFSRV9XT1JLKHVuaXhfZ2Nfd29yaywgdW5peF9nYyk7XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNjQ1LVxcbm5ldC91bml4L2dhcmJhZ2UuYzo2NDY6dm9pZCB1bml4X3NjaGVkdWxlX2djKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcilcXG5uZXQvdW5peC9nYXJiYWdlLmMtNjQ3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6NDUuNzMxNzA4MDg5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUzODE0NDU4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IFVOSVggRG9tYWluIFNvY2tldCBHYXJiYWdlIENvbGxlY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgc2NvcGUgb2YgdGhlIG1vZGlmaWNhdGlvbnMuIFRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgaW1wYWN0ZWQgYXJlIGBfX3VuaXhfd2Fsa19zY2NgLCBgdW5peF9zY2NfZGVhZGAsIGFuZCBgdW5peF93YWxrX3NjY19mYXN0YC4gVGhlc2UgZnVuY3Rpb25zLCBhbG9uZyB3aXRoIHJlbGF0ZWQgZW50cnlwb2ludHMgYHVuaXhfd2Fsa19zY2NgIGFuZCBgdW5peF9nY2AsIGltbWVkaWF0ZWx5IHNpZ25hbCB0aGF0IHRoaXMgcGF0Y2ggaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggVU5JWCBkb21haW4gc29ja2V0IGdhcmJhZ2UgY29sbGVjdGlvbi4gSXQncyBub3QgYSBnZW5lcmljIGNoYW5nZTsgaXQncyBmb2N1c2VkLiBUaGV5IGFyZSBzdHJpY3RseSBsaW1pdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBVTklYIGRvbWFpbiBzb2NrZXRzLCBwYXJ0aWN1bGFybHkgdGhlIGNsZWFudXAgYWZ0ZXIgZmlsZSBkZXNjcmlwdG9yIHBhc3Npbmcgb3Igc29ja2V0IGNsb3N1cmUuXG5cblNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbmljaGUsIGxldCdzIHF1aWNrbHkgY2hlY2sgZm9yIHViaXF1aXR5LiBOb3BlLCB0aGV5J3JlIGFsbCBzcGVjaWZpY2FsbHkgcGFydCBvZiB0aGUgVW5peCBzb2NrZXQgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbS4gRXhjZWxsZW50LCB0aGF0IGNsYXJpZmllcyB0aGluZ3MuXG5cbk5vdywgbGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBUaGUgY29kZSB1c2VzIGBDT05GSUdfVU5JWGAuIEEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBgbmV0L3VuaXgvS2NvbmZpZ2AgZGVmaW5lcyBgQ09ORklHX1VOSVhgIGFzIGEgYm9vbGVhbiBvcHRpb24sIGFuZCBpdCBkb2Vzbid0IGFwcGVhciB0byBoYXZlIGFueSBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcywgaXQgaXMgb25seSBhIGJvb2xlYW4gYW5kIHRoZSBzb3VyY2UgaXMgaW4gYG5ldC9LY29uZmlnYC4gVGhpcyBtZWFucyB0aGUgcmVsZXZhbnQgY29kZSB3aWxsIGJlIGJ1aWx0IG9ubHkgaWYgYENPTkZJR19VTklYYCBpcyBlbmFibGVkLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuXG5cblRpbWUgdG8gYXJ0aWN1bGF0ZSB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJJ2xsIGZsYWcgYFdvcnRoRnV6emluZ2AgYXMgYHRydWVgIGdpdmVuIHRoaXMgaXMgY29yZSBuZXR3b3JraW5nIGNvZGUgZGVhbGluZyB3aXRoIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1VOSVggc29ja2V0cy4gVGhlIGBSZWFzb25pbmdgIHdpbGwgZGVzY3JpYmUgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnQgKFNDQykgYWxnb3JpdGhtIGZvciBVTklYIGRvbWFpbiBzb2NrZXQgZ2FyYmFnZSBjb2xsZWN0aW9uIChgbmV0L3VuaXgvZ2FyYmFnZS5jYCkuIFNwZWNpZmljYWxseSwgaXQgY2hhbmdlcyB3aGVuIHZlcnRpY2VzIGFyZSBtYXJrZWQgb2ZmLXN0YWNrIGFuZCBob3cgYHNjY19pbmRleGAgaXMgYXNzaWduZWQgdG8gdmVydGljZXMgd2l0aGluIGZpbmFsaXplZCBTQ0NzIChgX191bml4X3dhbGtfc2NjYCBhbmQgYHVuaXhfc2NjX2RlYWRgKS4gVGhpcyBpcyBjb3JlIG5ldHdvcmtpbmcgY29kZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEFGX1VOSVggc29ja2V0cyBhbmQgU0NNX1JJR0hUUyBmaWxlIGRlc2NyaXB0b3IgcGFzc2luZy4gVGhlIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmU6IGBfX3VuaXhfd2Fsa19zY2NgLCBgdW5peF9zY2NfZGVhZGAsIGB1bml4X3dhbGtfc2NjX2Zhc3RgLCBgdW5peF93YWxrX3NjY2AsIGFuZCBgdW5peF9nY2AuIFRoZSBgRW5hYmxlQ29uZmlnc2Agd2lsbCBqdXN0IGluY2x1ZGUgYFVOSVhgLlxuXG5FdmVyeXRoaW5nIGxvb2tzIGdvb2QuIE5vIHJlZCBmbGFncy4gUmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc0OSwiT3V0cHV0VG9rZW5zIjoxOTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6NTEuMTEzMTU3NjMzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4Nzk3MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVTklYXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX191bml4X3dhbGtfc2NjXCIsXG4gICAgXCJ1bml4X3NjY19kZWFkXCIsXG4gICAgXCJ1bml4X3dhbGtfc2NjX2Zhc3RcIixcbiAgICBcInVuaXhfd2Fsa19zY2NcIixcbiAgICBcInVuaXhfZ2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudHMgKFNDQykgVGFyamFuLWJhc2VkIGN5Y2xlIGRldGVjdGlvbiBhbGdvcml0aG0gaW4gVU5JWCBkb21haW4gc29ja2V0IGdhcmJhZ2UgY29sbGVjdGlvbiAobmV0L3VuaXgvZ2FyYmFnZS5jKS4gU3BlY2lmaWNhbGx5LCBpdCB1cGRhdGVzIF9fdW5peF93YWxrX3NjYyB0byBhc3NpZ24gdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCBhbmQgdXBkYXRlIHNjY19pbmRleCBhY3Jvc3MgdGhlIGVudGlyZSBTQ0MgcHJpb3IgdG8gY2FsbGluZyB1bml4X3NjY19kZWFkLCBhbmQgcmVtb3ZlcyB0aGUgZmFzdCBwYXJhbWV0ZXIgYW5kIG9mZi1zdGFjayBtYXJraW5nIGZyb20gdW5peF9zY2NfZGVhZC4gVGhpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaXMgZGlyZWN0bHkgZXhlcmNpc2VkIHdoZW4gcGFzc2luZyBmaWxlIGRlc2NyaXB0b3JzIGFjcm9zcyBVTklYIHNvY2tldHMgdmlhIFNDTV9SSUdIVFMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVU5JWFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdW5peF93YWxrX3NjY1wiLFxuICAgIFwidW5peF9zY2NfZGVhZFwiLFxuICAgIFwidW5peF93YWxrX3NjY19mYXN0XCIsXG4gICAgXCJ1bml4X3dhbGtfc2NjXCIsXG4gICAgXCJ1bml4X2djXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIChTQ0MpIFRhcmphbi1iYXNlZCBjeWNsZSBkZXRlY3Rpb24gYWxnb3JpdGhtIGluIFVOSVggZG9tYWluIHNvY2tldCBnYXJiYWdlIGNvbGxlY3Rpb24gKG5ldC91bml4L2dhcmJhZ2UuYykuIFNwZWNpZmljYWxseSwgaXQgdXBkYXRlcyBfX3VuaXhfd2Fsa19zY2MgdG8gYXNzaWduIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggYW5kIHVwZGF0ZSBzY2NfaW5kZXggYWNyb3NzIHRoZSBlbnRpcmUgU0NDIHByaW9yIHRvIGNhbGxpbmcgdW5peF9zY2NfZGVhZCwgYW5kIHJlbW92ZXMgdGhlIGZhc3QgcGFyYW1ldGVyIGFuZCBvZmYtc3RhY2sgbWFya2luZyBmcm9tIHVuaXhfc2NjX2RlYWQuIFRoaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGlzIGRpcmVjdGx5IGV4ZXJjaXNlZCB3aGVuIHBhc3NpbmcgZmlsZSBkZXNjcmlwdG9ycyBhY3Jvc3MgVU5JWCBzb2NrZXRzIHZpYSBTQ01fUklHSFRTLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDo1MS4yMzE5NjMxOTRaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODczNTAwNzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6NTEuMjMyNDAwMDI0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ4NzMwNTg0MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgQUZfVU5JWCBnYXJiYWdlIGNvbGxlY3RvcidzIFRhcmphbiBTdHJvbmdseSBDb25uZWN0ZWQgQ29tcG9uZW50IChTQ0MpIGFsZ29yaXRobSBpbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gSXQgbW92ZXMgdGhlIG9mZi1zdGFjayBtYXJraW5nIChgdi1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4YCkgYW5kIFNDQyBJRCBhc3NpZ25tZW50IChgdi1cXHUwMDNlc2NjX2luZGV4ID0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXhgKSBmb3IgU0NDIHZlcnRpY2VzIGZyb20gYHVuaXhfc2NjX2RlYWQoKWAgaW50byBgX191bml4X3dhbGtfc2NjKClgLCBzaW1wbGlmaWVzIGB1bml4X3NjY19kZWFkKClgIGJ5IHJlbW92aW5nIHRoZSBgZmFzdGAgcGFyYW1ldGVyLCBhbmQgYWRkcyBhIHJlZ3Jlc3Npb24gdGVzdCBpbiBrc2VsZnRlc3RzLlxcblxcblRoaXMgY2hhbmdlIHRvdWNoZXMgcHVyZWx5IGludGVybmFsIGdyYXBoIGJvb2trZWVwaW5nIGZpZWxkcyBvbiBgc3RydWN0IHVuaXhfdmVydGV4YCBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBhbnkgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBncmFwaCB0cmF2ZXJzYWwsIGxpc3QgbWFuaXB1bGF0aW9uLCBvciBzb2NrZXQgbGlmZXRpbWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbnMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgZmFjaWxpdGllcyAoZS5nLiwgQ09ORklHX0RFQlVHX0xJU1QpLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjQyMjZkMDE2ZDBhZWQ2NGFjNGFjZjQ1MmYwNjVmYjIwNTcxYjY1N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDA0OjA0OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3VuaXgvZ2FyYmFnZS5jIGIvbmV0L3VuaXgvZ2FyYmFnZS5jXG5pbmRleCA5ZmNhYWY1NWNiYTVkLi5kYTc3NGY1NmNhNjQ4IDEwMDY0NFxuLS0tIGEvbmV0L3VuaXgvZ2FyYmFnZS5jXG4rKysgYi9uZXQvdW5peC9nYXJiYWdlLmNcbkBAIC0zNzQsNyArMzc0LDcgQEAgc3RhdGljIGJvb2wgdW5peF92ZXJ0ZXhfZGVhZChzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleClcbiBzdGF0aWMgTElTVF9IRUFEKHVuaXhfdmlzaXRlZF92ZXJ0aWNlcyk7XG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX01BUksyO1xuIFxuLXN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBib29sIGZhc3QpXG4rc3RhdGljIGJvb2wgdW5peF9zY2NfZGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpzY2MpXG4ge1xuIFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XG4gXHRib29sIHNjY19kZWFkID0gdHJ1ZTtcbkBAIC0zODYsMTAgKzM4Niw2IEBAIHN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjLCBib29sIGZhc3QpXG4gXHRcdC8qIERvbid0IHJlc3RhcnQgREZTIGZyb20gdGhpcyB2ZXJ0ZXguICovXG4gXHRcdGxpc3RfbW92ZV90YWlsKFx1MDAyNnZlcnRleC1cdTAwM2VlbnRyeSwgXHUwMDI2dW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcbiBcbi1cdFx0LyogTWFyayB2ZXJ0ZXggYXMgb2ZmLXN0YWNrIGZvciBfX3VuaXhfd2Fsa19zY2MoKS4gKi9cbi1cdFx0aWYgKCFmYXN0KVxuLVx0XHRcdHZlcnRleC1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXg7XG4tXG4gXHRcdGlmIChzY2NfZGVhZClcbiBcdFx0XHRzY2NfZGVhZCA9IHVuaXhfdmVydGV4X2RlYWQodmVydGV4KTtcbiBcdH1cbkBAIC01MjEsNiArNTE3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX191bml4X3dhbGtfc2NjKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4LFxuIFx0fVxuIFxuIFx0aWYgKHZlcnRleC1cdTAwM2VpbmRleCA9PSB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4KSB7XG4rXHRcdHN0cnVjdCB1bml4X3ZlcnRleCAqdjtcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCBzY2M7XG4gXG4gXHRcdC8qIFNDQyBmaW5hbGlzZWQuXG5AQCAtNTMwLDcgKzUyNywxMyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3VuaXhfd2Fsa19zY2Moc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgsXG4gXHRcdCAqL1xuIFx0XHRfX2xpc3RfY3V0X3Bvc2l0aW9uKFx1MDAyNnNjYywgXHUwMDI2dmVydGV4X3N0YWNrLCBcdTAwMjZ2ZXJ0ZXgtXHUwMDNlc2NjX2VudHJ5KTtcbiBcbi1cdFx0aWYgKHVuaXhfc2NjX2RlYWQoXHUwMDI2c2NjLCBmYWxzZSkpIHtcbitcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHYsIFx1MDAyNnNjYywgc2NjX2VudHJ5KSB7XG4rXHRcdFx0LyogTWFyayB2ZXJ0ZXggYXMgb2ZmLXN0YWNrIGFuZCBhc3NpZ24gYSB1bmlxdWUgSUQuICovXG4rXHRcdFx0di1cdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXg7XG4rXHRcdFx0di1cdTAwM2VzY2NfaW5kZXggPSB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4O1xuK1x0XHR9XG4rXG4rXHRcdGlmICh1bml4X3NjY19kZWFkKFx1MDAyNnNjYykpIHtcbiBcdFx0XHR1bml4X2NvbGxlY3Rfc2tiKFx1MDAyNnNjYywgaGl0bGlzdCk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0aWYgKHVuaXhfdmVydGV4X21heF9zY2NfaW5kZXggXHUwMDNjIHZlcnRleC1cdTAwM2VzY2NfaW5kZXgpXG5AQCAtNTg4LDcgKzU5MSw3IEBAIHN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2NfZmFzdChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxuIFx0XHR2ZXJ0ZXggPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzLCB0eXBlb2YoKnZlcnRleCksIGVudHJ5KTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2c2NjLCBcdTAwMjZ2ZXJ0ZXgtXHUwMDNlc2NjX2VudHJ5KTtcbiBcbi1cdFx0aWYgKHVuaXhfc2NjX2RlYWQoXHUwMDI2c2NjLCB0cnVlKSkge1xuK1x0XHRpZiAodW5peF9zY2NfZGVhZChcdTAwMjZzY2MpKSB7XG4gXHRcdFx0Y3ljbGljX3NjY3MtLTtcbiBcdFx0XHR1bml4X2NvbGxlY3Rfc2tiKFx1MDAyNnNjYywgaGl0bGlzdCk7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmNcbmluZGV4IGQ4MmE3OWMyMWMxNzkuLmMxNjVmMjUwMjIwYTQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvYWZfdW5peC9zY21fcmlnaHRzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9hZl91bml4L3NjbV9yaWdodHMuY1xuQEAgLTM3OCw0ICszNzgsMjEgQEAgVEVTVF9GKHNjbV9yaWdodHMsIGJhY2t0cmFja19mcm9tX3NjYylcbiBcdGNsb3NlX3NvY2tldHMoMTApO1xuIH1cbiBcbitURVNUX0Yoc2NtX3JpZ2h0cywgbWl4ZWRfbG93cG9pbnQpXG4re1xuK1x0Y3JlYXRlX3NvY2tldHMoNik7XG4rXG4rXHRzZW5kX2ZkKDAsIDEpO1xuK1x0c2VuZF9mZCgxLCAyKTtcbitcdHNlbmRfZmQoMiwgMSk7XG4rXHRzZW5kX2ZkKDEsIDApO1xuK1xuK1x0c2VuZF9mZCgzLCA0KTtcbitcdHNlbmRfZmQoNCwgNSk7XG4rXHRzZW5kX2ZkKDUsIDQpO1xuK1x0c2VuZF9mZCg0LCAzKTtcbitcbitcdGNsb3NlX3NvY2tldHMoNik7XG4rfVxuK1xuIFRFU1RfSEFSTkVTU19NQUlOXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDo1MS4yMzI0MDA5MTRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDExNzgzNzc5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHVzZXIgd2FudHMgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2gganVzdGlmaWVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgaW4gYWRkaXRpb24gdG8gb3VyIHN0YW5kYXJkIEtBU0FOIGVmZm9ydHMuIFRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCBzbyB0aGF0J3MgdGhlIGNvbnRleHQuIEZpcnN0LCBJIG5lZWQgdG8gc2VlIHdoYXQncyBjaGFuZ2VkIGFuZCB3aHkuXG5cbkxvb2tpbmcgYXQgdGhlIGRpZmYgaW4gYG5ldC91bml4L2dhcmJhZ2UuY2AsIGl0IHNlZW1zIHRoZSBtYWluIGZvY3VzIGlzIGFyb3VuZCB0aGUgYHVuaXhfc2NjX2RlYWQoKWAgYW5kIGBfX3VuaXhfd2Fsa19zY2MoKWAgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGEgYGJvb2wgZmFzdGAgcGFyYW1ldGVyIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBgdW5peF9zY2NfZGVhZCgpYC4gVGhhdCBjb25kaXRpb25hbCB0aGF0IGNoZWNrZWQgdGhpcyB2YWx1ZSBoYXMgYmVlbiBtb3ZlZCB0byBgX191bml4X3dhbGtfc2NjKClgIGFuZCBpdCBpbnZvbHZlcyBzb21lIHNvcnQgb2YgbGlzdCB0cmF2ZXJzYWwsIHRoZSBleGFjdCBmdW5jdGlvbiBpdCBpcyBvcGVyYXRpbmcgb24gaXMgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuIFRoZSBgdW5peF93YWxrX3NjY19mYXN0KClgIGZ1bmN0aW9uIG5vdyBzaW1wbHkgY2FsbHMgYHVuaXhfc2NjX2RlYWQoXHUwMDI2c2NjKWAsIHNvIGl0IGlzIGEgZGlyZWN0IGNhbGwgaW5zdGVhZCBvZiBhbiBlYXJsaWVyIGNvbmRpdGlvbmFsLiBUaGVyZSdzIGFsc28gYSBuZXcgdGVzdCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2FmX3VuaXgvc2NtX3JpZ2h0cy5jYCB3aGljaCwgb24gaXRzIG93biwgbWVhbnMgbmV4dCB0byBub3RoaW5nLCBidXQgaXQncyBpbXBvcnRhbnQgdG8ga2VlcCB0cmFjayBvZi5cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBgbmV0L3VuaXgvZ2FyYmFnZS5jYCBhbmQgdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIHBpY3R1cmUuIEkgd2FudCB0byBncm9rIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBtYW5pcHVsYXRlZCBieSB0aGVzZSBmdW5jdGlvbnMuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNoYW5nZXMgYWx0ZXIgbWVtb3J5IGFjY2VzcyBwYXR0ZXJucywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBgc2NjYCAoc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudCkgcmVsYXRlZCBvcGVyYXRpb25zLiBJcyB0aGUgcGF0Y2ggY2hhbmdpbmcgaG93IG1lbW9yeSBpcyBhbGxvY2F0ZWQsIGZyZWVkLCBvciBhY2Nlc3NlZCBpbiBhIHdheSB0aGF0IG1pZ2h0IGV4cG9zZSBuZXcgS01TQU4tZGV0ZWN0YWJsZSBpc3N1ZXM/IFVuZGVyc3RhbmRpbmcgdGhlIHJvbGUgb2YgYHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXhgIGFuZCBgc2NjX2luZGV4YCBpcyBlc3NlbnRpYWwuIE9ubHkgdGhlbiBjYW4gSSBkZXRlcm1pbmUgaWYgdGhlcmUncyBhIGhlaWdodGVuZWQgcmlzayBwcm9maWxlIHRoYXQgd2FycmFudHMgdGhlIGV4dHJhIGVmZm9ydCBvZiBhIEtNU0FOIHNlc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDo1NS4zNTAyNDEyMjFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQzOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3VuaXgvZ2FyYmFnZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3MDpcXHRcXG4gMzcxOlxcdFxcdHJldHVybiB0cnVlO1xcbiAzNzI6XFx0fVxcbiAzNzM6XFx0XFxuIDM3NDpcXHRzdGF0aWMgTElTVF9IRUFEKHVuaXhfdmlzaXRlZF92ZXJ0aWNlcyk7XFxuIDM3NTpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfTUFSSzI7XFxuIDM3NjpcXHRcXG4gMzc3OlxcdHN0YXRpYyBib29sIHVuaXhfc2NjX2RlYWQoc3RydWN0IGxpc3RfaGVhZCAqc2NjKVxcbiAzNzg6XFx0e1xcbiAzNzk6XFx0XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XFxuIDM4MDpcXHRcXHRib29sIHNjY19kZWFkID0gdHJ1ZTtcXG4gMzgxOlxcdFxcdHVuc2lnbmVkIGludCBzZXE7XFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdHNlcSA9IHJlYWRfc2VxY291bnRfYmVnaW4oXFx1MDAyNnVuaXhfcGVla19zZXEpO1xcbiAzODQ6XFx0XFxuIDM4NTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UodmVydGV4LCBzY2MsIHNjY19lbnRyeSkge1xcbiAzODY6XFx0XFx0XFx0LyogRG9uJ3QgcmVzdGFydCBERlMgZnJvbSB0aGlzIHZlcnRleC4gKi9cXG4gMzg3OlxcdFxcdFxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZWVudHJ5LCBcXHUwMDI2dW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcXG4gMzg4OlxcdFxcbiAzODk6XFx0XFx0XFx0aWYgKHNjY19kZWFkKVxcbiAzOTA6XFx0XFx0XFx0XFx0c2NjX2RlYWQgPSB1bml4X3ZlcnRleF9kZWFkKHZlcnRleCk7XFxuIDM5MTpcXHRcXHR9XFxuIDM5MjpcXHRcXG4gMzkzOlxcdFxcdC8qIElmIE1TR19QRUVLIGludGVydmVuZWQsIGRlZmVyIHRoaXMgU0NDIHRvIHRoZSBuZXh0IHJvdW5kLiAqL1xcbiAzOTQ6XFx0XFx0aWYgKHJlYWRfc2VxY291bnRfcmV0cnkoXFx1MDAyNnVuaXhfcGVla19zZXEsIHNlcSkpXFxuIDM5NTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDM5NjpcXHRcXG4gMzk3OlxcdFxcdHJldHVybiBzY2NfZGVhZDtcXG4gMzk4OlxcdH1cXG4gMzk5OlxcdFxcbiA0MDA6XFx0c3RhdGljIHZvaWQgdW5peF9jb2xsZWN0X3NrYihzdHJ1Y3QgbGlzdF9oZWFkICpzY2MsIHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXFxuIDQwMTpcXHR7XFxuIDQwMjpcXHRcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcXG4gNDAzOlxcdFxcbiA0MDQ6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHZlcnRleCwgc2NjLCBzY2NfZW50cnkpIHtcXG4gNDA1OlxcdFxcdFxcdHN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlO1xcbiA0MDY6XFx0XFx0XFx0c3RydWN0IHVuaXhfZWRnZSAqZWRnZTtcXG4gNDA3OlxcdFxcdFxcdHN0cnVjdCB1bml4X3NvY2sgKnU7XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdFxcdGVkZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZWVkZ2VzLCB0eXBlb2YoKmVkZ2UpLCB2ZXJ0ZXhfZW50cnkpO1xcbiA0MTA6XFx0XFx0XFx0dSA9IGVkZ2UtXFx1MDAzZXByZWRlY2Vzc29yO1xcbiA0MTE6XFx0XFx0XFx0cXVldWUgPSBcXHUwMDI2dS1cXHUwMDNlc2suc2tfcmVjZWl2ZV9xdWV1ZTtcXG4gNDEyOlxcdFxcbiA0MTM6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZxdWV1ZS1cXHUwMDNlbG9jayk7XFxuIDQxNDpcXHRcXG4gNDE1OlxcdFxcdFxcdGlmICh1LVxcdTAwM2Vzay5za19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7XFxuIDQxNjpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiA0MTc6XFx0XFxuIDQxODpcXHRcXHRcXHRcXHRza2JfcXVldWVfd2FsayhxdWV1ZSwgc2tiKSB7XFxuIDQxOTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkICplbWJyeW9fcXVldWUgPSBcXHUwMDI2c2tiLVxcdTAwM2Vzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6NTUuMzUwMzI3NjYxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwMzE2OTg1NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBzdWJqZWN0LCB0aGlua2luZyBhbG91ZCwgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBuZXQvdW5peC9nYXJiYWdlLmNgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBgbmV0L3VuaXgvZ2FyYmFnZS5jYCBhZ2Fpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFyb3VuZCB0aGUgYF9fdW5peF93YWxrX3NjY2AgYW5kIGB1bml4X3dhbGtfc2NjX2Zhc3RgIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIGNyaXRpY2FsIGluIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtIHdvcmtzIHdpdGhpbiB0aGUgVW5peCBkb21haW4gc29ja2V0IHN1YnN5c3RlbSwgZXNwZWNpYWxseSBob3cgaXQgaGFuZGxlcyBjeWNsZSBkZXRlY3Rpb24uIEkgcmVjYWxsIHRoZXJlIHdlcmUgc29tZSBpbnRlcmVzdGluZyBudWFuY2VzIGluIGhvdyBpdCBoYW5kbGVzIHNoYXJlZCBtZW1vcnkgYW5kIGNpcmN1bGFyIHJlZmVyZW5jZXMuIExldCdzIHNlZSBpZiB0aG9zZSBzcGVjaWZpYyBmdW5jdGlvbnMgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBwb3RlbnRpYWwgaW1wcm92ZW1lbnRzIEkndmUgYmVlbiBjb25zaWRlcmluZy4gSSBuZWVkIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBmYXN0IHBhdGggaW4gYHVuaXhfd2Fsa19zY2NfZmFzdGAgdG8ganVkZ2UgaWYgbXkgcHJvcG9zZWQgb3B0aW1pemF0aW9ucyBhcmUgYWN0dWFsbHkgZmVhc2libGUgYW5kIHdvbid0IGludHJvZHVjZSBuZXcgcHJvYmxlbXMuIFJpZ2h0LCBsZXQncyBzdGFydCByZWFkaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTIzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDo1Ny4zODIwMzA4ODRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC91bml4L2dhcmJhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0OTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDkwOlxcdFxcbiA0OTE6XFx0XFx0XFx0XFx0LyogICAyLiBQb3AgdGhlIGVkZ2UgZGlyZWN0ZWQgdG8gdGhlIGN1cnJlbnQgdmVydGV4XFxuIDQ5MjpcXHRcXHRcXHRcXHQgKiAgICAgIGFuZCByZXN0b3JlIHRoZSBhbmNlc3RvciBmb3IgYmFja3RyYWNraW5nLlxcbiA0OTM6XFx0XFx0XFx0XFx0ICovXFxuIDQ5NDpcXHRwcmV2X3ZlcnRleDpcXG4gNDk1OlxcdFxcdFxcdFxcdGVkZ2UgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZlZGdlX3N0YWNrLCB0eXBlb2YoKmVkZ2UpLCBzdGFja19lbnRyeSk7XFxuIDQ5NjpcXHRcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZlZGdlLVxcdTAwM2VzdGFja19lbnRyeSk7XFxuIDQ5NzpcXHRcXG4gNDk4OlxcdFxcdFxcdFxcdG5leHRfdmVydGV4ID0gdmVydGV4O1xcbiA0OTk6XFx0XFx0XFx0XFx0dmVydGV4ID0gZWRnZS1cXHUwMDNlcHJlZGVjZXNzb3ItXFx1MDAzZXZlcnRleDtcXG4gNTAwOlxcdFxcbiA1MDE6XFx0XFx0XFx0XFx0LyogSWYgdGhlIHN1Y2Nlc3NvciBoYXMgYSBzbWFsbGVyIHNjY19pbmRleCwgdHdvIHZlcnRpY2VzXFxuIDUwMjpcXHRcXHRcXHRcXHQgKiBhcmUgaW4gdGhlIHNhbWUgU0NDLCBzbyBwcm9wYWdhdGUgdGhlIHNtYWxsZXIgc2NjX2luZGV4XFxuIDUwMzpcXHRcXHRcXHRcXHQgKiB0byBza2lwIFNDQyBmaW5hbGlzYXRpb24uXFxuIDUwNDpcXHRcXHRcXHRcXHQgKi9cXG4gNTA1OlxcdFxcdFxcdFxcdHZlcnRleC1cXHUwMDNlc2NjX2luZGV4ID0gbWluKHZlcnRleC1cXHUwMDNlc2NjX2luZGV4LCBuZXh0X3ZlcnRleC1cXHUwMDNlc2NjX2luZGV4KTtcXG4gNTA2OlxcdFxcdFxcdH0gZWxzZSBpZiAobmV4dF92ZXJ0ZXgtXFx1MDAzZWluZGV4ICE9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXgpIHtcXG4gNTA3OlxcdFxcdFxcdFxcdC8qIExvb3AgZGV0ZWN0ZWQgYnkgYSBiYWNrL2Nyb3NzIGVkZ2UuXFxuIDUwODpcXHRcXHRcXHRcXHQgKlxcbiA1MDk6XFx0XFx0XFx0XFx0ICogVGhlIHN1Y2Nlc3NvciBpcyBvbiB2ZXJ0ZXhfc3RhY2ssIHNvIHR3byB2ZXJ0aWNlcyBhcmUgaW5cXG4gNTEwOlxcdFxcdFxcdFxcdCAqIHRoZSBzYW1lIFNDQy4gIElmIHRoZSBzdWNjZXNzb3IgaGFzIGEgc21hbGxlciAqc2NjX2luZGV4KixcXG4gNTExOlxcdFxcdFxcdFxcdCAqIHByb3BhZ2F0ZSBpdCB0byBza2lwIFNDQyBmaW5hbGlzYXRpb24uXFxuIDUxMjpcXHRcXHRcXHRcXHQgKi9cXG4gNTEzOlxcdFxcdFxcdFxcdHZlcnRleC1cXHUwMDNlc2NjX2luZGV4ID0gbWluKHZlcnRleC1cXHUwMDNlc2NjX2luZGV4LCBuZXh0X3ZlcnRleC1cXHUwMDNlc2NjX2luZGV4KTtcXG4gNTE0OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDUxNTpcXHRcXHRcXHRcXHQvKiBUaGUgc3VjY2Vzc29yIHdhcyBhbHJlYWR5IGdyb3VwZWQgYXMgYW5vdGhlciBTQ0MgKi9cXG4gNTE2OlxcdFxcdFxcdH1cXG4gNTE3OlxcdFxcdH1cXG4gNTE4OlxcdFxcbiA1MTk6XFx0XFx0aWYgKHZlcnRleC1cXHUwMDNlaW5kZXggPT0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXgpIHtcXG4gNTIwOlxcdFxcdFxcdHN0cnVjdCB1bml4X3ZlcnRleCAqdjtcXG4gNTIxOlxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgc2NjO1xcbiA1MjI6XFx0XFxuIDUyMzpcXHRcXHRcXHQvKiBTQ0MgZmluYWxpc2VkLlxcbiA1MjQ6XFx0XFx0XFx0ICpcXG4gNTI1OlxcdFxcdFxcdCAqIElmIHRoZSBzY2NfaW5kZXggd2FzIG5vdCB1cGRhdGVkLCBhbGwgdGhlIHZlcnRpY2VzIGFib3ZlIG9uXFxuIDUyNjpcXHRcXHRcXHQgKiB2ZXJ0ZXhfc3RhY2sgYXJlIGluIHRoZSBzYW1lIFNDQy4gIEdyb3VwIHRoZW0gdXNpbmcgc2NjX2VudHJ5LlxcbiA1Mjc6XFx0XFx0XFx0ICovXFxuIDUyODpcXHRcXHRcXHRfX2xpc3RfY3V0X3Bvc2l0aW9uKFxcdTAwMjZzY2MsIFxcdTAwMjZ2ZXJ0ZXhfc3RhY2ssIFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZXNjY19lbnRyeSk7XFxuIDUyOTpcXHRcXG4gNTMwOlxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZSh2LCBcXHUwMDI2c2NjLCBzY2NfZW50cnkpIHtcXG4gNTMxOlxcdFxcdFxcdFxcdC8qIE1hcmsgdmVydGV4IGFzIG9mZi1zdGFjayBhbmQgYXNzaWduIGEgdW5pcXVlIElELiAqL1xcbiA1MzI6XFx0XFx0XFx0XFx0di1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xcbiA1MzM6XFx0XFx0XFx0XFx0di1cXHUwMDNlc2NjX2luZGV4ID0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXg7XFxuIDUzNDpcXHRcXHRcXHR9XFxuIDUzNTpcXHRcXG4gNTM2OlxcdFxcdFxcdGlmICh1bml4X3NjY19kZWFkKFxcdTAwMjZzY2MpKSB7XFxuIDUzNzpcXHRcXHRcXHRcXHR1bml4X2NvbGxlY3Rfc2tiKFxcdTAwMjZzY2MsIGhpdGxpc3QpO1xcbiA1Mzg6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNTM5OlxcdFxcdFxcdFxcdGlmICh1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4IFxcdTAwM2MgdmVydGV4LVxcdTAwM2VzY2NfaW5kZXgpXFxuIDU0MDpcXHRcXHRcXHRcXHRcXHR1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4ID0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXg7XFxuIDU0MTpcXHRcXG4gNTQyOlxcdFxcdFxcdFxcdGlmICh1bml4X3NjY19jeWNsaWMoXFx1MDAyNnNjYykpXFxuIDU0MzpcXHRcXHRcXHRcXHRcXHRjeWNsaWNfc2NjcysrO1xcbiA1NDQ6XFx0XFx0XFx0fVxcbiA1NDU6XFx0XFxuIDU0NjpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2c2NjKTtcXG4gNTQ3OlxcdFxcdH1cXG4gNTQ4OlxcdFxcbiA1NDk6XFx0XFx0LyogTmVlZCBiYWNrdHJhY2tpbmcgPyAqL1xcbiA1NTA6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZlZGdlX3N0YWNrKSlcXG4gNTUxOlxcdFxcdFxcdGdvdG8gcHJldl92ZXJ0ZXg7XFxuIDU1MjpcXHRcXG4gNTUzOlxcdFxcdHJldHVybiBjeWNsaWNfc2NjcztcXG4gNTU0OlxcdH1cXG4gNTU1OlxcdFxcbiA1NTY6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF9ncmFwaF9jeWNsaWNfc2NjcztcXG4gNTU3OlxcdFxcbiA1NTg6XFx0c3RhdGljIHZvaWQgdW5peF93YWxrX3NjYyhzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpoaXRsaXN0KVxcbiA1NTk6XFx0e1xcbiA1NjA6XFx0XFx0dW5zaWduZWQgbG9uZyBsYXN0X2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfU1RBUlQ7XFxuIDU2MTpcXHRcXHR1bnNpZ25lZCBsb25nIGN5Y2xpY19zY2NzID0gMDtcXG4gNTYyOlxcdFxcbiA1NjM6XFx0XFx0dW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX1NUQVJUO1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHQvKiBWaXNpdCBldmVyeSB2ZXJ0ZXggZXhhY3RseSBvbmNlLlxcbiA1NjY6XFx0XFx0ICogX191bml4X3dhbGtfc2NjKCkgbW92ZXMgdmlzaXRlZCB2ZXJ0aWNlcyB0byB1bml4X3Zpc2l0ZWRfdmVydGljZXMuXFxuIDU2NzpcXHRcXHQgKi9cXG4gNTY4OlxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShcXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpKSB7XFxuIDU2OTpcXHRcXHRcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcXG4gNTcwOlxcdFxcbiA1NzE6XFx0XFx0XFx0dmVydGV4ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMsIHR5cGVvZigqdmVydGV4KSwgZW50cnkpO1xcbiA1NzI6XFx0XFx0XFx0Y3ljbGljX3NjY3MgKz0gX191bml4X3dhbGtfc2NjKHZlcnRleCwgXFx1MDAyNmxhc3RfaW5kZXgsIGhpdGxpc3QpO1xcbiA1NzM6XFx0XFx0fVxcbiA1NzQ6XFx0XFxuIDU3NTpcXHRcXHRsaXN0X3JlcGxhY2VfaW5pdChcXHUwMDI2dW5peF92aXNpdGVkX3ZlcnRpY2VzLCBcXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpO1xcbiA1NzY6XFx0XFx0c3dhcCh1bml4X3ZlcnRleF91bnZpc2l0ZWRfaW5kZXgsIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXgpO1xcbiA1Nzc6XFx0XFxuIDU3ODpcXHRcXHRXUklURV9PTkNFKHVuaXhfZ3JhcGhfY3ljbGljX3NjY3MsIGN5Y2xpY19zY2NzKTtcXG4gNTc5OlxcdFxcdFdSSVRFX09OQ0UodW5peF9ncmFwaF9zdGF0ZSxcXG4gNTgwOlxcdFxcdFxcdCAgIGN5Y2xpY19zY2NzID8gVU5JWF9HUkFQSF9DWUNMSUMgOiBVTklYX0dSQVBIX05PVF9DWUNMSUMpO1xcbiA1ODE6XFx0fVxcbiA1ODI6XFx0XFxuIDU4MzpcXHRzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjX2Zhc3Qoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcXG4gNTg0OlxcdHtcXG4gNTg1OlxcdFxcdHVuc2lnbmVkIGxvbmcgY3ljbGljX3NjY3MgPSB1bml4X2dyYXBoX2N5Y2xpY19zY2NzO1xcbiA1ODY6XFx0XFxuIDU4NzpcXHRcXHR3aGlsZSAoIWxpc3RfZW1wdHkoXFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzKSkge1xcbiA1ODg6XFx0XFx0XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XFxuIDU4OTpcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIHNjYztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6NTcuMzgyMjEwMTY0WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxMzA5MzEwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGB1bml4X3dhbGtfc2NjX2Zhc3RgIHdvcmtzLCBhbmQgdG8gZG8gdGhhdCwgSSBuZWVkIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBTbywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXM6XG5cbioqR3JhYmJpbmcgdGhlIEJpZyBQaWN0dXJlOiBgdW5peF93YWxrX3NjY19mYXN0YCoqXG5cbkkgbmVlZCB0byBzZWUgdGhlICpyZXN0KiBvZiB0aGUgZnVuY3Rpb24uICBJIGNhbid0IHRydWx5IGFuYWx5emUgYHVuaXhfd2Fsa19zY2NfZmFzdGAgaW4gaXNvbGF0aW9uLiBVbmRlcnN0YW5kaW5nIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBicm9hZGVyIGNvZGUgYW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgb3ZlcmFsbCBhbGdvcml0aG0gaXMgY3JpdGljYWwuIFdoYXQncyBpdCBjYWxsaW5nPyBXaGF0IGNhbGxzIGl0PyBXaGF0J3MgaXRzIGdvYWwgaW4gdGhlIGxhcmdlciBzY2hlbWUgb2YgdGhpbmdzPyBUaGUgb3RoZXIgbGluZXMgb2YgY29kZSB3aWxsIG9mZmVyIHRoZSBpbXBvcnRhbnQgY29udGV4dCBJIG5lZWQgdG8gZ2FpbiBleHBlcnRpc2Ugb24gdGhpcyBmdW5jdGlvbi4gVGhpcyBpcyBob3cgSSdtIGdvaW5nIHRvIGRldGVybWluZSBpdHMgcHVycG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM0NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDQ6NTkuNTEzMTQ1MDYyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9nYXJiYWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTgwOlxcdFxcdFxcdCAgIGN5Y2xpY19zY2NzID8gVU5JWF9HUkFQSF9DWUNMSUMgOiBVTklYX0dSQVBIX05PVF9DWUNMSUMpO1xcbiA1ODE6XFx0fVxcbiA1ODI6XFx0XFxuIDU4MzpcXHRzdGF0aWMgdm9pZCB1bml4X3dhbGtfc2NjX2Zhc3Qoc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcXG4gNTg0OlxcdHtcXG4gNTg1OlxcdFxcdHVuc2lnbmVkIGxvbmcgY3ljbGljX3NjY3MgPSB1bml4X2dyYXBoX2N5Y2xpY19zY2NzO1xcbiA1ODY6XFx0XFxuIDU4NzpcXHRcXHR3aGlsZSAoIWxpc3RfZW1wdHkoXFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzKSkge1xcbiA1ODg6XFx0XFx0XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XFxuIDU4OTpcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIHNjYztcXG4gNTkwOlxcdFxcbiA1OTE6XFx0XFx0XFx0dmVydGV4ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMsIHR5cGVvZigqdmVydGV4KSwgZW50cnkpO1xcbiA1OTI6XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNnNjYywgXFx1MDAyNnZlcnRleC1cXHUwMDNlc2NjX2VudHJ5KTtcXG4gNTkzOlxcdFxcbiA1OTQ6XFx0XFx0XFx0aWYgKHVuaXhfc2NjX2RlYWQoXFx1MDAyNnNjYykpIHtcXG4gNTk1OlxcdFxcdFxcdFxcdGN5Y2xpY19zY2NzLS07XFxuIDU5NjpcXHRcXHRcXHRcXHR1bml4X2NvbGxlY3Rfc2tiKFxcdTAwMjZzY2MsIGhpdGxpc3QpO1xcbiA1OTc6XFx0XFx0XFx0fVxcbiA1OTg6XFx0XFxuIDU5OTpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2c2NjKTtcXG4gNjAwOlxcdFxcdH1cXG4gNjAxOlxcdFxcbiA2MDI6XFx0XFx0bGlzdF9yZXBsYWNlX2luaXQoXFx1MDAyNnVuaXhfdmlzaXRlZF92ZXJ0aWNlcywgXFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzKTtcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0XFx0V1JJVEVfT05DRSh1bml4X2dyYXBoX2N5Y2xpY19zY2NzLCBjeWNsaWNfc2Njcyk7XFxuIDYwNTpcXHRcXHRXUklURV9PTkNFKHVuaXhfZ3JhcGhfc3RhdGUsXFxuIDYwNjpcXHRcXHRcXHQgICBjeWNsaWNfc2NjcyA/IFVOSVhfR1JBUEhfQ1lDTElDIDogVU5JWF9HUkFQSF9OT1RfQ1lDTElDKTtcXG4gNjA3OlxcdH1cXG4gNjA4OlxcdFxcbiA2MDk6XFx0c3RhdGljIHZvaWQgdW5peF9nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDYxMDpcXHR7XFxuIDYxMTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGhpdGxpc3Q7XFxuIDYxMjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiA2MTM6XFx0XFxuIDYxNDpcXHRcXHRXUklURV9PTkNFKGdjX2luX3Byb2dyZXNzLCB0cnVlKTtcXG4gNjE1OlxcdFxcbiA2MTY6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZ1bml4X2djX2xvY2spO1xcbiA2MTc6XFx0XFxuIDYxODpcXHRcXHRpZiAodW5peF9ncmFwaF9zdGF0ZSA9PSBVTklYX0dSQVBIX05PVF9DWUNMSUMpIHtcXG4gNjE5OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ1bml4X2djX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNDo1OS41MTMzMTM5MjFaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjAwMzg3MDg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgaWYgdGhleSBhcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbW1pdCBIaXN0b3J5KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhpcyBwYXJ0aWN1bGFyIGNvbW1pdC4gTXkgZmlyc3QgaW5jbGluYXRpb24gaXMgYWx3YXlzIHRvIGRpdmUgaW50byB0aGUgYGdpdCBsb2dgLiBJZiB0aGUgZW52aXJvbm1lbnQgYWxsb3dzIGl0LCBJJ2xsIGV4ZWN1dGUgYGdpdCBsb2dgIHRvIGdldCBhIGZ1bGwgdmlldyBvZiB0aGUgY29tbWl0IGhpc3RvcnksIG1heWJlIGZpbHRlcmluZyBpdCBpZiB0aGVyZSdzIGEgbG90IG9mIG5vaXNlLiBJZiBgZ2l0IGxvZ2AgaXNuJ3QgaW1tZWRpYXRlbHkgYWNjZXNzaWJsZSwgb3IgSSdtIGxvb2tpbmcgZm9yIHNvbWV0aGluZyBzcGVjaWZpYyBxdWlja2x5LCBJJ2xsIHR1cm4gdG8gYSBncmVwcGVyIG9yIHNpbWlsYXIgdG9vbCB0byBzZWFyY2ggdGhlIGxvZyBvdXRwdXQuIEFsdGVybmF0aXZlbHksIGlmIEkgKmNhbiogcnVuIGBnaXQgbG9nYCBvbiB0aGlzIHNwZWNpZmljIGNvbW1pdCBJIHdpbGw7IHRoaXMgbWlnaHQgYmUgdGhlIHF1aWNrZXN0IHJvdXRlLiBJIGNhbiBhbHNvIGNoZWNrIHRoZSBjb21taXQgbWVzc2FnZSBkaXJlY3RseS4gVW5kZXJzdGFuZGluZyAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZSBpcyBjcnVjaWFsLiBUaGlzIGhlbHBzIG1lIGdldCBhIGhhbmRsZSBvbiB3aGF0IG1pZ2h0IGhhdmUgYmVlbiBpbnRlbmRlZCBieSB0aGUgYXV0aG9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTg1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNTowMS41MTcxODc0NTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTU2NDI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC91bml4L2dhcmJhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdW5peC9nYXJiYWdlLmM9Mzc0PXN0YXRpYyBMSVNUX0hFQUQodW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcXG5uZXQvdW5peC9nYXJiYWdlLmM6Mzc1OnN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMjtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMzc2LVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTQ1Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX3VuaXhfd2Fsa19zY2Moc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgsXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNTA1LVxcdFxcdFxcdHZlcnRleC1cXHUwMDNlc2NjX2luZGV4ID0gbWluKHZlcnRleC1cXHUwMDNlc2NjX2luZGV4LCBuZXh0X3ZlcnRleC1cXHUwMDNlc2NjX2luZGV4KTtcXG5uZXQvdW5peC9nYXJiYWdlLmM6NTA2OlxcdFxcdH0gZWxzZSBpZiAobmV4dF92ZXJ0ZXgtXFx1MDAzZWluZGV4ICE9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXgpIHtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNTA3LVxcdFxcdFxcdC8qIExvb3AgZGV0ZWN0ZWQgYnkgYSBiYWNrL2Nyb3NzIGVkZ2UuXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNTMxLVxcdFxcdFxcdC8qIE1hcmsgdmVydGV4IGFzIG9mZi1zdGFjayBhbmQgYXNzaWduIGEgdW5pcXVlIElELiAqL1xcbm5ldC91bml4L2dhcmJhZ2UuYzo1MzI6XFx0XFx0XFx0di1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xcbm5ldC91bml4L2dhcmJhZ2UuYy01MzMtXFx0XFx0XFx0di1cXHUwMDNlc2NjX2luZGV4ID0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXg7XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9NTU4PXN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2Moc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy01NzUtXFx0bGlzdF9yZXBsYWNlX2luaXQoXFx1MDAyNnVuaXhfdmlzaXRlZF92ZXJ0aWNlcywgXFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzKTtcXG5uZXQvdW5peC9nYXJiYWdlLmM6NTc2OlxcdHN3YXAodW5peF92ZXJ0ZXhfdW52aXNpdGVkX2luZGV4LCB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4KTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNTc3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNTowMS42Mzg3NTcxOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3OTEyNTQyNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVW5peCBTb2NrZXQgR2FyYmFnZSBDb2xsZWN0aW9uIE9wdGltaXphdGlvbiBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGl0IHNlZW1zIGxpa2UgYSBjaGFuZ2Ugd2FzIG1hZGUgaW4gYGdhcmJhZ2UuY2AgdGhhdCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgVGFyamFuJ3MgU3Ryb25nbHkgQ29ubmVjdGVkIENvbXBvbmVudHMgKFNDQykgYWxnb3JpdGhtLCBzcGVjaWZpY2FsbHkgaW4gdGhlIFVuaXggc29ja2V0IGdhcmJhZ2UgY29sbGVjdGlvbi4gIFByZXZpb3VzbHksIGB1bml4X3NjY19kZWFkKClgIGhhbmRsZWQgbWFya2luZyBub2RlcyBpbiBhbiBTQ0MgYXMgXCJvZmYtc3RhY2tcIiBieSBzZXR0aW5nIHRoZWlyIGBpbmRleGAgZmllbGQuIE5vdywgdGhhdCdzIGJlZW4gbW92ZWQuICBJbnN0ZWFkIG9mIGB1bml4X3NjY19kZWFkYCwgd2Ugbm93IGhhdmUgYF9fdW5peF93YWxrX3NjYygpYCBzZXR0aW5nIGB2LVx1MDAzZWluZGV4YCBhbmQgYHYtXHUwMDNlc2NjX2luZGV4YCAqYmVmb3JlKiBjYWxsaW5nIGB1bml4X3NjY19kZWFkKClgLCB3aXRoaW4gdGhlIGxvb3AgaXRlcmF0aW5nIHRocm91Z2ggU0NDIG1lbWJlcnMuICBgdW5peF93YWxrX3NjY19mYXN0KClgIGp1c3QgY2FsbHMgYHVuaXhfc2NjX2RlYWQoKWAuXG5cblRoZSBpbXBvcnRhbnQgcG9pbnQgaXMgKndoeSogdGhpcyBjaGFuZ2UuIEl0IHNlZW1zIHRoZSBwcmlvciBtZXRob2QgaGFkIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIG1pc3NlZCBhc3NpZ25tZW50IG9mIGBzY2NfaW5kZXhgLiAgVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGhhZCBhIHByb2JsZW0gcmVsYXRlZCB0byB3aGVuIGEgbm9kZSB3YXMgcGFydCBvZiBhbiBTQ0MgYW5kIHRoYXQgU0NDIGhhZCBhbHJlYWR5IGJlZW4gZmluYWxpemVkIGFuZCBwb3BwZWQgb2ZmIHRoZSBzdGFjaywgYW5kIHRoZSBhc3NvY2lhdGVkIGluZGV4IHZhbHVlIHdhc24ndCBhc3NpZ25lZCBjb3JyZWN0bHkuIE5vdywgc2V0dGluZyBgdi1cdTAwM2VzY2NfaW5kZXggPSB2ZXJ0ZXgtXHUwMDNlc2NjX2luZGV4YCBleHBsaWNpdGx5IGFzc2lnbnMgdGhlIFNDQyAqcm9vdCdzKiBpbmRleCB0byBhbGwgdmVydGljZXMsIHdoaWNoIGVuc3VyZXMgY29uc2lzdGVuY3kgYW5kIGF2b2lkcyBwb3RlbnRpYWwgaXNzdWVzIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb3RoZXIgaW5kaWNlcywgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGBtaXhlZF9sb3dwb2ludGAgdGVzdCBpbiBgc2NtX3JpZ2h0cy5jYC4gIFNvLCB0aGlzIG9wdGltaXphdGlvbiBhcHBlYXJzIHRvIGJlIGZpeGluZyBhIHN1YnRsZSwgYnV0IHBvdGVudGlhbGx5IGNyaXRpY2FsLCBidWcgdGhhdCBjb3VsZCBsZWFkIHRvIG1pc2lkZW50aWZpY2F0aW9uIG9mIFNDQ3MgYW5kLCBjb25zZXF1ZW50bHksIGluY29ycmVjdCBnYXJiYWdlIGNvbGxlY3Rpb24uXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGNoYW5nZSByZXF1aXJlIGEgS01TQU4gY2hlY2s/IExldCdzIHJlZnJlc2ggdGhlIHJ1bGVzOiBLTVNBTiBpcyBmb3IgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5ICpzcGVjaWZpY2FsbHkqIGluIHRoZSBrZXJuZWwgYW5kIHByZXZlbnRpbmcga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuICBXZSBvbmx5IG5lZWQgaXQgaWYgdGhlIGNvZGUgY2hhbmdlcyB0b3VjaCBhcmVhcyB3aGVyZSBzdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOLCBMT0NLREVQLCBvciBvdGhlciBkZWJ1Z2dlcnMgd29uJ3QgY2F0Y2ggdGhlIHByb2JsZW0uXG5cblRoZSBydWxlcyBzcGVjaWZ5IHRoYXQgd2Ugc2hvdWxkIHNldCBgTmVlZHNLTVNBTj10cnVlYCBpZiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBjaGFuZ2VzIHRvIGtlcm5lbCBzdHJ1Y3R1cmVzICpzZW50IHRvIHVzZXIgc3BhY2UqLCBjb25kaXRpb25hbCBsb2dpYyBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHRoZSBhbGxvY2F0aW9uL2luaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGxlYWRpbmcgdG8gdW5pbml0aWFsaXplZCByZWFkcyBsYXRlciwgb3IgdGhlIHdheXMgYm91bmRzIGNoZWNrcy9sZW5ndGhzIGFyZSBwZXJmb3JtZWQgcG90ZW50aWFsbHkgbGVhZGluZyB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuXG5cbkNvbnZlcnNlbHksIGlmIHRoZSBwYXRjaCBwcmltYXJpbHkgaW52b2x2ZXMgdGhpbmdzIGFscmVhZHkgaGFuZGxlZCBieSBLQVNBTi9MT0NLREVQLCBvciBpZiBhbnkgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkLCB0aGVuIGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuTGV0J3MgYXBwbHkgdGhlc2UgcnVsZXMgdG8gdGhpcyBwYXRjaC5cblxuMS4gKipEb2VzIHRoaXMgcGF0Y2ggdG91Y2ggYW55dGhpbmcgY29waWVkIHRvIHVzZXJzcGFjZT8qKiBOby4gSXQncyBjb25maW5lZCB0byB0aGUgVW5peCBzb2NrZXQgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbS4gIFRoaXMgaXMgYSBnb29kIHNpZ24uXG4yLiAqKkRvZXMgaXQgaW50cm9kdWNlIG9yIHRvdWNoIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIEEgbmV3IGxvb3AgaXRlcmF0b3IsIGB2YCwgaXMgaW50cm9kdWNlZC4gSG93ZXZlciwgYHZgIGlzIHBvcHVsYXRlZCBieSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlYCwgc28gaXQncyBpbml0aWFsaXplZCBkdXJpbmcgaXRlcmF0aW9uLiBUaGVuLCB0aGUgcGF0Y2ggd3JpdGVzIHRoZSBmaWVsZHMgYGluZGV4YCBhbmQgYHNjY19pbmRleGAuIFRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgYWJvdXQgdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIGBzdHJ1Y3QgdW5peF92ZXJ0ZXhgLlxuXG5TbywgdGhlIGNyaXRpY2FsIGNoZWNrIGlzIG9uIHRoZSBmaWVsZHMgYGluZGV4YCBhbmQgYHNjY19pbmRleGAsIGFuZCB0aGUgYHN0cnVjdCB1bml4X3ZlcnRleGAgaXRzZWxmLiBJJ20gcmVhc29uYWJseSBjb25maWRlbnQgaW4gdGhpcyBjYXNlIHRoYXQgdGhlIGBzdHJ1Y3QgdW5peF92ZXJ0ZXhgIGlzIGFsbG9jYXRlZCBhbmQgKmluaXRpYWxpemVkKiBlbHNld2hlcmUgYmVjYXVzZSB3ZSdyZSBsb29raW5nIGF0IGdhcmJhZ2UgY29sbGVjdGlvbiwgYW5kIHRoZXNlIHN0cnVjdHVyZXMgYXJlICptYW5hZ2VkKiBhbmQgbW9kaWZpZWQsIG5vdCBjcmVhdGVkIHdob2xlc2FsZSBpbiB0aGlzIGNvZGUuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGNoYW5nZSBwcmltYXJpbHkgaW52b2x2ZXMgY29ycmVjdGx5IHVwZGF0aW5nIGV4aXN0aW5nIHN0cnVjdHVyZXMgd2l0aGluIGFuIFNDQywgYW5kIGRvZXNuJ3Qgc2VlbSB0byBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCAqKkkgd291bGQgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcyBwYXRjaC4qKiAgSXQncyBsaWtlbHkgdGhhdCBhbnkgaXNzdWVzIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBkZWJ1Z2dpbmcgdG9vbHMgZHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSBhbmQgdGhlIGV4aXN0aW5nIGxpZmVjeWNsZSBvZiB0aGVzZSB2ZXJ0ZXggc3RydWN0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg1NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDU6MDkuNTUxMzAxODk3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc0MDg4NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVuaXhfdmVydGV4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC91bml4L2dhcmJhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdW5peC9nYXJiYWdlLmMtNzYtXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjc3OnN0cnVjdCB1bml4X3ZlcnRleCB7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTc4LVxcdHN0cnVjdCBsaXN0X2hlYWQgZWRnZXM7XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9OTM9c3RydWN0IHVuaXhfc29jayAqdW5peF9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICpmaWxwKVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTExMi1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MTEzOnN0YXRpYyBzdHJ1Y3QgdW5peF92ZXJ0ZXggKnVuaXhfZWRnZV9zdWNjZXNzb3Ioc3RydWN0IHVuaXhfZWRnZSAqZWRnZSlcXG5uZXQvdW5peC9nYXJiYWdlLmMtMTE0LXtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYz0xMzA9c3RhdGljIHVuc2lnbmVkIGNoYXIgdW5peF9ncmFwaF9zdGF0ZTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMTMxLVxcbm5ldC91bml4L2dhcmJhZ2UuYzoxMzI6c3RhdGljIHZvaWQgdW5peF91cGRhdGVfZ3JhcGgoc3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXgpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTEzMy17XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9MTQzPXN0YXRpYyBMSVNUX0hFQUQodW5peF91bnZpc2l0ZWRfdmVydGljZXMpO1xcbm5ldC91bml4L2dhcmJhZ2UuYy0xNDQtXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjE0NTplbnVtIHVuaXhfdmVydGV4X2luZGV4IHtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMTQ2LVxcdFVOSVhfVkVSVEVYX0lOREVYX01BUksxLFxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTE1MC1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MTUxOnN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X3VudmlzaXRlZF9pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX01BUksxO1xcbm5ldC91bml4L2dhcmJhZ2UuYzoxNTI6c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCA9IFVOSVhfVkVSVEVYX0lOREVYX1NUQVJUO1xcbm5ldC91bml4L2dhcmJhZ2UuYy0xNTMtXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTE1ND1zdGF0aWMgdm9pZCB1bml4X2FkZF9lZGdlKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsLCBzdHJ1Y3QgdW5peF9lZGdlICplZGdlKVxcbm5ldC91bml4L2dhcmJhZ2UuYy0xNTUte1xcbm5ldC91bml4L2dhcmJhZ2UuYzoxNTY6XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXggPSBlZGdlLVxcdTAwM2VwcmVkZWNlc3Nvci1cXHUwMDNldmVydGV4O1xcbm5ldC91bml4L2dhcmJhZ2UuYy0xNTctXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtMTU5LVxcdFxcdHZlcnRleCA9IGxpc3RfZmlyc3RfZW50cnkoXFx1MDAyNmZwbC1cXHUwMDNldmVydGljZXMsIHR5cGVvZigqdmVydGV4KSwgZW50cnkpO1xcbm5ldC91bml4L2dhcmJhZ2UuYzoxNjA6XFx0XFx0dmVydGV4LVxcdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X3VudmlzaXRlZF9pbmRleDtcXG5uZXQvdW5peC9nYXJiYWdlLmM6MTYxOlxcdFxcdHZlcnRleC1cXHUwMDNlc2NjX2luZGV4ID0gKyt1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4O1xcbm5ldC91bml4L2dhcmJhZ2UuYy0xNjItXFx0XFx0dmVydGV4LVxcdTAwM2VvdXRfZGVncmVlID0gMDtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYz0xNzY9c3RhdGljIHZvaWQgdW5peF9kZWxfZWRnZShzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbCwgc3RydWN0IHVuaXhfZWRnZSAqZWRnZSlcXG5uZXQvdW5peC9nYXJiYWdlLmMtMTc3LXtcXG5uZXQvdW5peC9nYXJiYWdlLmM6MTc4OlxcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4ID0gZWRnZS1cXHUwMDNlcHJlZGVjZXNzb3ItXFx1MDAzZXZlcnRleDtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMTc5LVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTE5Mz1zdGF0aWMgdm9pZCB1bml4X2ZyZWVfdmVydGljZXMoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTE5NC17XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjE5NTpcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleCwgKm5leHRfdmVydGV4O1xcbm5ldC91bml4L2dhcmJhZ2UuYy0xOTYtXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9MjgzPWludCB1bml4X3ByZXBhcmVfZnBsKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKVxcbm5ldC91bml4L2dhcmJhZ2UuYy0yODQte1xcbm5ldC91bml4L2dhcmJhZ2UuYzoyODU6XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTI4Ni1cXHRpbnQgaTtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYz0zMjU9dm9pZCB1bml4X3BlZWtfZnBsKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTMzNC1cXG5uZXQvdW5peC9nYXJiYWdlLmM6MzM1OlxcdC8qIEludmFsaWRhdGUgdGhlIGZpbmFsIHJlZmNudCBjaGVjayBpbiB1bml4X3ZlcnRleF9kZWFkKCkuICovXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTMzNi1cXHRzcGluX2xvY2soXFx1MDAyNnVuaXhfcGVla19sb2NrKTtcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy0zNDAtXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjM0MTpzdGF0aWMgYm9vbCB1bml4X3ZlcnRleF9kZWFkKHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4KVxcbm5ldC91bml4L2dhcmJhZ2UuYy0zNDIte1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTM0Ny1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGVkZ2UsIFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZWVkZ2VzLCB2ZXJ0ZXhfZW50cnkpIHtcXG5uZXQvdW5peC9nYXJiYWdlLmM6MzQ4OlxcdFxcdHN0cnVjdCB1bml4X3ZlcnRleCAqbmV4dF92ZXJ0ZXggPSB1bml4X2VkZ2Vfc3VjY2Vzc29yKGVkZ2UpO1xcbm5ldC91bml4L2dhcmJhZ2UuYy0zNDktXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9Mzc0PXN0YXRpYyBMSVNUX0hFQUQodW5peF92aXNpdGVkX3ZlcnRpY2VzKTtcXG5uZXQvdW5peC9nYXJiYWdlLmM6Mzc1OnN0YXRpYyB1bnNpZ25lZCBsb25nIHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXggPSBVTklYX1ZFUlRFWF9JTkRFWF9NQVJLMjtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMzc2LVxcbm5ldC91bml4L2dhcmJhZ2UuYz0zNzc9c3RhdGljIGJvb2wgdW5peF9zY2NfZGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpzY2MpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTM3OC17XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjM3OTpcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMzgwLVxcdGJvb2wgc2NjX2RlYWQgPSB0cnVlO1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTM4OS1cXHRcXHRpZiAoc2NjX2RlYWQpXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjM5MDpcXHRcXHRcXHRzY2NfZGVhZCA9IHVuaXhfdmVydGV4X2RlYWQodmVydGV4KTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtMzkxLVxcdH1cXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYz00MDA9c3RhdGljIHZvaWQgdW5peF9jb2xsZWN0X3NrYihzdHJ1Y3QgbGlzdF9oZWFkICpzY2MsIHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQwMS17XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjQwMjpcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNDAzLVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jPTQzMz1zdGF0aWMgYm9vbCB1bml4X3NjY19jeWNsaWMoc3RydWN0IGxpc3RfaGVhZCAqc2NjKVxcbm5ldC91bml4L2dhcmJhZ2UuYy00MzQte1xcbm5ldC91bml4L2dhcmJhZ2UuYzo0MzU6XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQzNi1cXHRzdHJ1Y3QgdW5peF9lZGdlICplZGdlO1xcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ1Mi1cXG5uZXQvdW5peC9nYXJiYWdlLmM6NDUzOnN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdW5peF93YWxrX3NjYyhzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleCxcXG5uZXQvdW5peC9nYXJiYWdlLmMtNDU0LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9pbmRleCxcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy00NzQtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlZGdlLCBcXHUwMDI2dmVydGV4LVxcdTAwM2VlZGdlcywgdmVydGV4X2VudHJ5KSB7XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjQ3NTpcXHRcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKm5leHRfdmVydGV4ID0gdW5peF9lZGdlX3N1Y2Nlc3NvcihlZGdlKTtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNDc2LVxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ3OS1cXG5uZXQvdW5peC9nYXJiYWdlLmM6NDgwOlxcdFxcdGlmIChuZXh0X3ZlcnRleC1cXHUwMDNlaW5kZXggPT0gdW5peF92ZXJ0ZXhfdW52aXNpdGVkX2luZGV4KSB7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTQ4MS1cXHRcXHRcXHQvKiBJdGVyYXRpdmUgZGVlcGVuaW5nIGRlcHRoIGZpcnN0IHNlYXJjaFxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTUwNS1cXHRcXHRcXHR2ZXJ0ZXgtXFx1MDAzZXNjY19pbmRleCA9IG1pbih2ZXJ0ZXgtXFx1MDAzZXNjY19pbmRleCwgbmV4dF92ZXJ0ZXgtXFx1MDAzZXNjY19pbmRleCk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjUwNjpcXHRcXHR9IGVsc2UgaWYgKG5leHRfdmVydGV4LVxcdTAwM2VpbmRleCAhPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4KSB7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTUwNy1cXHRcXHRcXHQvKiBMb29wIGRldGVjdGVkIGJ5IGEgYmFjay9jcm9zcyBlZGdlLlxcbi0tXFxubmV0L3VuaXgvZ2FyYmFnZS5jLTUxOS1cXHRpZiAodmVydGV4LVxcdTAwM2VpbmRleCA9PSB2ZXJ0ZXgtXFx1MDAzZXNjY19pbmRleCkge1xcbm5ldC91bml4L2dhcmJhZ2UuYzo1MjA6XFx0XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2O1xcbm5ldC91bml4L2dhcmJhZ2UuYy01MjEtXFx0XFx0c3RydWN0IGxpc3RfaGVhZCBzY2M7XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNTMxLVxcdFxcdFxcdC8qIE1hcmsgdmVydGV4IGFzIG9mZi1zdGFjayBhbmQgYXNzaWduIGEgdW5pcXVlIElELiAqL1xcbm5ldC91bml4L2dhcmJhZ2UuYzo1MzI6XFx0XFx0XFx0di1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4O1xcbm5ldC91bml4L2dhcmJhZ2UuYy01MzMtXFx0XFx0XFx0di1cXHUwMDNlc2NjX2luZGV4ID0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXg7XFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNTM4LVxcdFxcdH0gZWxzZSB7XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjUzOTpcXHRcXHRcXHRpZiAodW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCBcXHUwMDNjIHZlcnRleC1cXHUwMDNlc2NjX2luZGV4KVxcbm5ldC91bml4L2dhcmJhZ2UuYzo1NDA6XFx0XFx0XFx0XFx0dW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleCA9IHZlcnRleC1cXHUwMDNlc2NjX2luZGV4O1xcbm5ldC91bml4L2dhcmJhZ2UuYy01NDEtXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmM9NTU4PXN0YXRpYyB2b2lkIHVuaXhfd2Fsa19zY2Moc3RydWN0IHNrX2J1ZmZfaGVhZCAqaGl0bGlzdClcXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy01NjItXFxubmV0L3VuaXgvZ2FyYmFnZS5jOjU2MzpcXHR1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfU1RBUlQ7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTU2NC1cXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYy01NjgtXFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcykpIHtcXG5uZXQvdW5peC9nYXJiYWdlLmM6NTY5OlxcdFxcdHN0cnVjdCB1bml4X3ZlcnRleCAqdmVydGV4O1xcbm5ldC91bml4L2dhcmJhZ2UuYy01NzAtXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNTc1LVxcdGxpc3RfcmVwbGFjZV9pbml0KFxcdTAwMjZ1bml4X3Zpc2l0ZWRfdmVydGljZXMsIFxcdTAwMjZ1bml4X3VudmlzaXRlZF92ZXJ0aWNlcyk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjU3NjpcXHRzd2FwKHVuaXhfdmVydGV4X3VudmlzaXRlZF9pbmRleCwgdW5peF92ZXJ0ZXhfZ3JvdXBlZF9pbmRleCk7XFxubmV0L3VuaXgvZ2FyYmFnZS5jLTU3Ny1cXG4tLVxcbm5ldC91bml4L2dhcmJhZ2UuYz01ODM9c3RhdGljIHZvaWQgdW5peF93YWxrX3NjY19mYXN0KHN0cnVjdCBza19idWZmX2hlYWQgKmhpdGxpc3QpXFxuLS1cXG5uZXQvdW5peC9nYXJiYWdlLmMtNTg3LVxcdHdoaWxlICghbGlzdF9lbXB0eShcXHUwMDI2dW5peF91bnZpc2l0ZWRfdmVydGljZXMpKSB7XFxubmV0L3VuaXgvZ2FyYmFnZS5jOjU4ODpcXHRcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleDtcXG5uZXQvdW5peC9nYXJiYWdlLmMtNTg5LVxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgc2NjO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNToxMS4xMjU0MDIwMzNaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU4NDM4Nzc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIGBuZXQvdW5peGAgR2FyYmFnZSBDb2xsZWN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYHVuaXhfcHJlcGFyZV9mcGxgIGhhbmRsZXMgaXRzIHZlcnRleCBhbGxvY2F0aW9uIHdpdGhpbiB0aGUgYG5ldC91bml4L2dhcmJhZ2UuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIHJlY2FsbCAqaG93KiB0aGUgYHVuaXhfdmVydGV4YCBzdHJ1Y3QgZ2V0cyBhbGxvY2F0ZWQsIGFuZCBJJ20gcHJldHR5IHN1cmUgaXQgaW52b2x2ZXMgYGt6YWxsb2NgLCBga2NhbGxvY2AsIG9yIHBvc3NpYmx5IGp1c3QgYGttYWxsb2NgLCBkZXBlbmRpbmcgb24gY2VydGFpbiBjb25kaXRpb25zLlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGxpbmVzIDI4MCB0aHJvdWdoIDMxMCBpbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZXhhY3QgYWxsb2NhdGlvbiBsb2dpYyBhbmQgcmVtaW5kIG1lIG9mIGFueSBudWFuY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIG9mIHRob3NlIHVuaXggZG9tYWluIHNvY2tldHMuIEl0J3MgdGltZSB0byByZWZyZXNoIHRoZSBzcGVjaWZpY3Mgb24gaG93IHRoaXMgcGFydCBpcyBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQzOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA0OjA1OjEzLjcwOTc5MzAyOFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUwNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3VuaXgvZ2FyYmFnZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4MDpcXHRcXHR9XFxuIDI4MTpcXHR9XFxuIDI4MjpcXHRcXG4gMjgzOlxcdGludCB1bml4X3ByZXBhcmVfZnBsKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKVxcbiAyODQ6XFx0e1xcbiAyODU6XFx0XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXg7XFxuIDI4NjpcXHRcXHRpbnQgaTtcXG4gMjg3OlxcdFxcbiAyODg6XFx0XFx0aWYgKCFmcGwtXFx1MDAzZWNvdW50X3VuaXgpXFxuIDI4OTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjkwOlxcdFxcbiAyOTE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZwbC1cXHUwMDNlY291bnRfdW5peDsgaSsrKSB7XFxuIDI5MjpcXHRcXHRcXHR2ZXJ0ZXggPSBrbWFsbG9jX29iaigqdmVydGV4KTtcXG4gMjkzOlxcdFxcdFxcdGlmICghdmVydGV4KVxcbiAyOTQ6XFx0XFx0XFx0XFx0Z290byBlcnI7XFxuIDI5NTpcXHRcXG4gMjk2OlxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZ2ZXJ0ZXgtXFx1MDAzZWVudHJ5LCBcXHUwMDI2ZnBsLVxcdTAwM2V2ZXJ0aWNlcyk7XFxuIDI5NzpcXHRcXHR9XFxuIDI5ODpcXHRcXG4gMjk5OlxcdFxcdGZwbC1cXHUwMDNlZWRnZXMgPSBrdm1hbGxvY19vYmpzKCpmcGwtXFx1MDAzZWVkZ2VzLCBmcGwtXFx1MDAzZWNvdW50X3VuaXgsXFxuIDMwMDpcXHRcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiAzMDE6XFx0XFx0aWYgKCFmcGwtXFx1MDAzZWVkZ2VzKVxcbiAzMDI6XFx0XFx0XFx0Z290byBlcnI7XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdHVuaXhfc2NoZWR1bGVfZ2MoZnBsLVxcdTAwM2V1c2VyKTtcXG4gMzA1OlxcdFxcbiAzMDY6XFx0XFx0cmV0dXJuIDA7XFxuIDMwNzpcXHRcXG4gMzA4OlxcdGVycjpcXG4gMzA5OlxcdFxcdHVuaXhfZnJlZV92ZXJ0aWNlcyhmcGwpO1xcbiAzMTA6XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMxMTpcXHR9XFxuIDMxMjpcXHRcXG4gMzEzOlxcdHZvaWQgdW5peF9kZXN0cm95X2ZwbChzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKmZwbClcXG4gMzE0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDU6MTMuNzA5OTUwOTE4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE1NTIxMDI4NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIFZlcnRleCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGhvdyB0aGVzZSBgdmVydGV4YCBmaWVsZHMgYXJlIGdldHRpbmcgaW5pdGlhbGl6ZWQuIExldCdzIHN0YXJ0IHdpdGggYHVuaXhfYWRkX2VkZ2VgLCBzb3VuZHMgbGlrZSBhIHJlYXNvbmFibGUgcGxhY2UgdG8gbG9vayBmb3IgZWRnZSBjcmVhdGlvbiwgYW5kIGJ5IGV4dGVuc2lvbiwgcG90ZW50aWFsbHkgdmVydGV4IHNldHVwLiBBbHJpZ2h0LCBsZXQncyB6b29tIGluIG9uIGxpbmVzIDE1MCB0aHJvdWdoIDE4MC4gVGhhdCdzIGEgZm9jdXNlZCByYW5nZTsgaG9wZWZ1bGx5LCBpdCBjb250YWlucyB0aGUganVpY3kgYml0cyBvZiBpbml0aWFsaXphdGlvbiBvciBhdCBsZWFzdCBwb2ludHMgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi4gVGltZSB0byByZWFkIGFuZCBzZWUgd2hhdCB3ZSBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE4MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDU6MTUuMjYyMDU3OTg5WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9nYXJiYWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdFxcbiAxNTE6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgdW5peF92ZXJ0ZXhfdW52aXNpdGVkX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfTUFSSzE7XFxuIDE1MjpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyB1bml4X3ZlcnRleF9tYXhfc2NjX2luZGV4ID0gVU5JWF9WRVJURVhfSU5ERVhfU1RBUlQ7XFxuIDE1MzpcXHRcXG4gMTU0OlxcdHN0YXRpYyB2b2lkIHVuaXhfYWRkX2VkZ2Uoc3RydWN0IHNjbV9mcF9saXN0ICpmcGwsIHN0cnVjdCB1bml4X2VkZ2UgKmVkZ2UpXFxuIDE1NTpcXHR7XFxuIDE1NjpcXHRcXHRzdHJ1Y3QgdW5peF92ZXJ0ZXggKnZlcnRleCA9IGVkZ2UtXFx1MDAzZXByZWRlY2Vzc29yLVxcdTAwM2V2ZXJ0ZXg7XFxuIDE1NzpcXHRcXG4gMTU4OlxcdFxcdGlmICghdmVydGV4KSB7XFxuIDE1OTpcXHRcXHRcXHR2ZXJ0ZXggPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZmcGwtXFx1MDAzZXZlcnRpY2VzLCB0eXBlb2YoKnZlcnRleCksIGVudHJ5KTtcXG4gMTYwOlxcdFxcdFxcdHZlcnRleC1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF91bnZpc2l0ZWRfaW5kZXg7XFxuIDE2MTpcXHRcXHRcXHR2ZXJ0ZXgtXFx1MDAzZXNjY19pbmRleCA9ICsrdW5peF92ZXJ0ZXhfbWF4X3NjY19pbmRleDtcXG4gMTYyOlxcdFxcdFxcdHZlcnRleC1cXHUwMDNlb3V0X2RlZ3JlZSA9IDA7XFxuIDE2MzpcXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dmVydGV4LVxcdTAwM2VlZGdlcyk7XFxuIDE2NDpcXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dmVydGV4LVxcdTAwM2VzY2NfZW50cnkpO1xcbiAxNjU6XFx0XFxuIDE2NjpcXHRcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2dmVydGV4LVxcdTAwM2VlbnRyeSwgXFx1MDAyNnVuaXhfdW52aXNpdGVkX3ZlcnRpY2VzKTtcXG4gMTY3OlxcdFxcdFxcdGVkZ2UtXFx1MDAzZXByZWRlY2Vzc29yLVxcdTAwM2V2ZXJ0ZXggPSB2ZXJ0ZXg7XFxuIDE2ODpcXHRcXHR9XFxuIDE2OTpcXHRcXG4gMTcwOlxcdFxcdHZlcnRleC1cXHUwMDNlb3V0X2RlZ3JlZSsrO1xcbiAxNzE6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2ZWRnZS1cXHUwMDNldmVydGV4X2VudHJ5LCBcXHUwMDI2dmVydGV4LVxcdTAwM2VlZGdlcyk7XFxuIDE3MjpcXHRcXG4gMTczOlxcdFxcdHVuaXhfdXBkYXRlX2dyYXBoKHVuaXhfZWRnZV9zdWNjZXNzb3IoZWRnZSkpO1xcbiAxNzQ6XFx0fVxcbiAxNzU6XFx0XFxuIDE3NjpcXHRzdGF0aWMgdm9pZCB1bml4X2RlbF9lZGdlKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsLCBzdHJ1Y3QgdW5peF9lZGdlICplZGdlKVxcbiAxNzc6XFx0e1xcbiAxNzg6XFx0XFx0c3RydWN0IHVuaXhfdmVydGV4ICp2ZXJ0ZXggPSBlZGdlLVxcdTAwM2VwcmVkZWNlc3Nvci1cXHUwMDNldmVydGV4O1xcbiAxNzk6XFx0XFxuIDE4MDpcXHRcXHRpZiAoIWZwbC1cXHUwMDNlZGVhZClcXG4gMTgxOlxcdFxcdFxcdHVuaXhfdXBkYXRlX2dyYXBoKHVuaXhfZWRnZV9zdWNjZXNzb3IoZWRnZSkpO1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRsaXN0X2RlbChcXHUwMDI2ZWRnZS1cXHUwMDNldmVydGV4X2VudHJ5KTtcXG4gMTg0OlxcdFxcdHZlcnRleC1cXHUwMDNlb3V0X2RlZ3JlZS0tO1xcbiAxODU6XFx0XFxuIDE4NjpcXHRcXHRpZiAoIXZlcnRleC1cXHUwMDNlb3V0X2RlZ3JlZSkge1xcbiAxODc6XFx0XFx0XFx0ZWRnZS1cXHUwMDNlcHJlZGVjZXNzb3ItXFx1MDAzZXZlcnRleCA9IE5VTEw7XFxuIDE4ODpcXHRcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2dmVydGV4LVxcdTAwM2VlbnRyeSwgXFx1MDAyNmZwbC1cXHUwMDNldmVydGljZXMpO1xcbiAxODk6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNnZlcnRleC1cXHUwMDNlc2NjX2VudHJ5KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDU6MTUuMjYyMjEzOTU5WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI4ODA4MzQ3NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgc3RydWN0IHVuaXhfdmVydGV4YCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBzdHJ1Y3QgdW5peF92ZXJ0ZXhgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBkaXNzZWN0IGl0cyBtZW1iZXJzIHRvIHVuZGVyc3RhbmQgaG93IGl0IHJlcHJlc2VudHMgYSB2ZXJ0ZXggaW4gdGhpcyBVbml4LWJhc2VkIHN5c3RlbSwgbGlrZWx5IHdpdGhpbiBhIGdyYXBoIHN0cnVjdHVyZSwgb3IgcG9zc2libHkgcmVsYXRlZCB0byBmaWxlIHN5c3RlbSBtZXRhZGF0YSByZXByZXNlbnRhdGlvbi4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGl0cyBjb25uZWN0aW9ucywgaWYgYW55LiBJIGFudGljaXBhdGUgZmllbGRzIHRoYXQgZW5jb2RlIHRoaW5ncyBsaWtlIGlub2RlIG51bWJlcnMsIGRldmljZSBpZGVudGlmaWVycywgcG90ZW50aWFsbHkgZmlsZSBwZXJtaXNzaW9ucyBvciBhY2Nlc3MgdGltZXMgKGlmIHRoaXMgcGVydGFpbnMgdG8gYSBmaWxlIHN5c3RlbSBncmFwaCksIGFuZCBtYXliZSBldmVuIG5ldHdvcmsgYWRkcmVzc2VzIGlmIHRoaXMgc3lzdGVtIGludGVncmF0ZXMgbmV0d29yayBzZXJ2aWNlcy4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb246XG5cbiogICAqKkNvbm5lY3Rpdml0eSoqOiBEb2VzIHRoaXMgc3RydWN0dXJlIGRpcmVjdGx5IGhvbGQgcG9pbnRlcnMgb3IgaW5kaWNlcyB0byBhZGphY2VudCB2ZXJ0aWNlcywgYWxsb3dpbmcgZ3JhcGggdHJhdmVyc2FsP1xuKiAgICoqQXR0cmlidXRlcyoqOiBXaGF0IG1ldGFkYXRhIGlzIHN0b3JlZD8gSXMgaXQgYmFzaWMsIGxpa2UgaW5vZGUgYW5kIGRldmljZSBudW1iZXJzLCBvciBhcmUgdGhlcmUgcmljaGVyIGF0dHJpYnV0ZXM/XG4qICAgKipQdXJwb3NlKio6IFdoYXQgaXMgaXRzIHJvbGUgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtPyBJcyBpdCBleGNsdXNpdmVseSBmb3IgdGhlIGZpbGUgc3lzdGVtLCBvciBkb2VzIGl0IHJlcHJlc2VudCBvdGhlciBraW5kcyBvZiBVbml4IHJlc291cmNlcyAocHJvY2Vzc2VzLCBuZXR3b3JrIGVuZHBvaW50cywgZXRjLik/IEknbGwgYmUgbG9va2luZyBmb3IgaGludHMgaW4gdGhlIGNvbnRleHQgd2hlcmUgYHVuaXhfdmVydGV4YCBpcyBkZWNsYXJlZCBhbmQgdXNlZC5cbiogICAqKk9wdGltaXphdGlvbioqOiBXaGF0IGFyZSB0aGUgZGVzaWduIGNob2ljZXM/IEFueSBiaXRmaWVsZHMsIGFsaWdubWVudCBzdHJhdGVnaWVzLCBvciBwb3RlbnRpYWwgZm9yIGNhY2hpbmcvbGF6eSBsb2FkaW5nP1xuXG5UaGlzIGluZm9ybWF0aW9uIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgYHVuaXhfdmVydGV4YCByZXByZXNlbnRzIGEgY29tcG9uZW50IG9mIHRoZSBzeXN0ZW0gaXQgZGVzY3JpYmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAzNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDQ6MDU6MTguMTQzMDUxNTY1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdW5peC9nYXJiYWdlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAgNzE6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9hZl91bml4LmhcXHUwMDNlXFxuICA3MjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3NjbS5oXFx1MDAzZVxcbiAgNzM6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC90Y3Bfc3RhdGVzLmhcXHUwMDNlXFxuICA3NDpcXHRcXG4gIDc1OlxcdCNpbmNsdWRlIFxcXCJhZl91bml4LmhcXFwiXFxuICA3NjpcXHRcXG4gIDc3OlxcdHN0cnVjdCB1bml4X3ZlcnRleCB7XFxuICA3ODpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGVkZ2VzO1xcbiAgNzk6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBlbnRyeTtcXG4gIDgwOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgc2NjX2VudHJ5O1xcbiAgODE6XFx0XFx0dW5zaWduZWQgbG9uZyBvdXRfZGVncmVlO1xcbiAgODI6XFx0XFx0dW5zaWduZWQgbG9uZyBpbmRleDtcXG4gIDgzOlxcdFxcdHVuc2lnbmVkIGxvbmcgc2NjX2luZGV4O1xcbiAgODQ6XFx0fTtcXG4gIDg1OlxcdFxcbiAgODY6XFx0c3RydWN0IHVuaXhfZWRnZSB7XFxuICA4NzpcXHRcXHRzdHJ1Y3QgdW5peF9zb2NrICpwcmVkZWNlc3NvcjtcXG4gIDg4OlxcdFxcdHN0cnVjdCB1bml4X3NvY2sgKnN1Y2Nlc3NvcjtcXG4gIDg5OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgdmVydGV4X2VudHJ5O1xcbiAgOTA6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCBzdGFja19lbnRyeTtcXG4gIDkxOlxcdH07XFxuICA5MjpcXHRcXG4gIDkzOlxcdHN0cnVjdCB1bml4X3NvY2sgKnVuaXhfZ2V0X3NvY2tldChzdHJ1Y3QgZmlsZSAqZmlscClcXG4gIDk0OlxcdHtcXG4gIDk1OlxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApO1xcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHQvKiBTb2NrZXQgPyAqL1xcbiAgOTg6XFx0XFx0aWYgKFNfSVNTT0NLKGlub2RlLVxcdTAwM2VpX21vZGUpIFxcdTAwMjZcXHUwMDI2ICEoZmlscC1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfUEFUSCkpIHtcXG4gIDk5OlxcdFxcdFxcdHN0cnVjdCBzb2NrZXQgKnNvY2sgPSBTT0NLRVRfSShpbm9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDA0OjA1OjE4LjE0MzE2ODUxNVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3OTYyMjUyODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IEFGX1VOSVggR2FyYmFnZSBDb2xsZWN0aW9uIE9wdGltaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBmb2N1c2VzIG9uIG9wdGltaXppbmcgdGhlIEFGX1VOSVggZ2FyYmFnZSBjb2xsZWN0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSB3aXRoaW4gYG5ldC91bml4L2dhcmJhZ2UuY2AuIEkgc2VlIHRoZXkncmUgbW92aW5nIHRoZSBhc3NpZ25tZW50IG9mIGBpbmRleGAgKG1hcmtpbmcgdmVydGljZXMgYXMgb2ZmLXN0YWNrKSBhbmQgdGhlIHVwZGF0ZSBvZiBgc2NjX2luZGV4YCBmcm9tIHRoZSBgdW5peF9zY2NfZGVhZCgpYCBmdW5jdGlvbiBpbnRvIGBfX3VuaXhfd2Fsa19zY2MoKWAuIFRoZXkndmUgYWxzbyByZW1vdmVkIHRoZSBgZmFzdGAgcGFyYW1ldGVyIGZyb20gYHVuaXhfc2NjX2RlYWQoKWAgYW5kIGFkZGVkIGEgc2VsZnRlc3QuIFRoaXMgY2xlYXJseSBhaW1zIHRvIHN0cmVhbWxpbmUgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnQgKFNDQykgcHJvY2Vzc2luZy5cblxuTXkgZmlyc3QgY2hlY2sgaXMgYWx3YXlzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEkgY29uZmlybSB0aGF0IGFsbCB0aGUgZmllbGRzIG9mIGB1bml4X3ZlcnRleGAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYHVuaXhfYWRkX2VkZ2VgOiBgZWRnZXNgLCBgZW50cnlgLCBgc2NjX2VudHJ5YCwgYG91dF9kZWdyZWVgLCBgaW5kZXhgLCBhbmQgYHNjY19pbmRleGAuIFRoZSBjcnVjaWFsIGNoYW5nZSBpcyB0aGF0IHRoZSBhc3NpZ25tZW50IG9mIGBpbmRleGAgYW5kIGBzY2NfaW5kZXhgIHRvIHRoZSB2ZXJ0aWNlcyB3aXRoaW4gYW4gU0NDIGlzIG5vdyBkb25lIGRpcmVjdGx5IHdpdGhpbiB0aGUgbGlzdCB0cmF2ZXJzYWwgaW4gYF9fdW5peF93YWxrX3NjY2AuIEknbSB2ZXJpZnlpbmcgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoYXQgdGhlIGxvb3AgdmFyaWFibGUgYHZgIGlzIGNvcnJlY3RseSBhIGxvb3AgdmFyaWFibGUgb3ZlciB0aGUgbGlzdCwgYW5kIHRoYXQgYHYtXHUwMDNlaW5kZXhgIGFuZCBgdi1cdTAwM2VzY2NfaW5kZXhgIGFyZSB0aGVuIGFzc2lnbmVkIGtub3duLCBpbml0aWFsaXplZCB2YWx1ZXMuIFRoZSByZW1vdmFsIG9mIHRoZSBgZmFzdGAgYXJndW1lbnQgZnJvbSBgdW5peF9zY2NfZGVhZCgpYCBsb29rcyBsaWtlIGEgY2xlYW4tdXAsIHJlbW92aW5nIGRlYWQgY29kZSDigJMgbm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS5cblxuTmV4dCwgSSBhc3Nlc3MgZm9yIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIG90aGVyIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gSSByZWNvZ25pemUgdGhhdCBhbnkgZ3JhcGggdHJhdmVyc2FsIGJ1Z3Mgb3IgbGlzdCBjb3JydXB0aW9uIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBvciBsaXN0IGRlYnVnZ2luZy4gU2luY2UgS01TQU4gZm9jdXNlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSwgdGhpcyBpc24ndCBteSBwcmltYXJ5IGNvbmNlcm4gaGVyZSwgZ2l2ZW4gdGhlIGV4aXN0aW5nIHByb3RlY3Rpb24uXG5cbk5vdywgbGV0J3MgZ28gdGhyb3VnaCB0aGUgTmVlZHNLTVNBTiBjcml0ZXJpYTpcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlPyBOb3BlLiBObyBkYXRhIHRyYW5zZmVyLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBCb3RoIGBpbmRleGAgYW5kIGBzY2NfaW5kZXhgIGFyZSB3ZWxsLWluaXRpYWxpemVkIHN0cnVjdCBtZW1iZXJzLlxuMy4gIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHMgcmVhZCBsYXRlcj8gTm9wZS4gTm8gZGF0YSBzdHJ1Y3R1cmUgbGF5b3V0IGNoYW5nZXMsIGFuZCBubyBuZXcgYWxsb2NhdGlvbnMuXG40LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgYmVpbmcgYWNjZXNzZWQ/IE5vcGUuIE5vIGJ1ZmZlcnMsIGxlbmd0aHMsIG9yIHNpemVzIGFmZmVjdGVkLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLlxuXG5JJ20gY29uZmlkZW50IGluIGNvbmNsdWRpbmcgdGhhdCBLTVNBTiBpc24ndCB3YXJyYW50ZWQgaGVyZS4gVGhlIHBhdGNoIGFkZHJlc3NlcyBjaGFuZ2VzIHRvIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24uIEl0IG9wdGltaXplcyB0aGUgcHJvY2VzcyBieSBtb3ZpbmcgdGhlIHVwZGF0ZXMgb2YgYGluZGV4YCBhbmQgYHNjY19pbmRleGAgaW50byBgX191bml4X3dhbGtfc2NjKClgLCBzaW1wbGlmaWVzIHRoZSBjb2RlIGJ5IHJlbW92aW5nIHRoZSBub3ctdW5uZWNlc3NhcnkgYGZhc3RgIHBhcmFtZXRlciBmcm9tIGB1bml4X3NjY19kZWFkKClgLCBhbmQgYWRkcyBhIG5ldyB0ZXN0LiBUaGlzIGRvZXNuJ3QgaW52b2x2ZSBhbnkgb2YgdGhlIGNsYXNzaWMgS01TQU4gcGl0ZmFsbHM6IG5vIHVuaW5pdGlhbGl6ZWQgYWxsb2NhdGlvbnMsIG5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSwgbm8gdHJhbnNmZXIgdG8gdXNlcnNwYWNlLCBhbmQgbm8gY29uZGl0aW9uYWwgcmVhZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBleGlzdGluZyBrZXJuZWwgZGVidWdnZXJzIGFyZSBtb3JlIHRoYW4gYWRlcXVhdGUgdG8gaGFuZGxlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGlzc3VlcyBhcmlzaW5nIGZyb20gZ3JhcGggdHJhdmVyc2FsLCBsaXN0IGNvcnJ1cHRpb24sIG9yIHNpbWlsYXIgYnVncy4gVGhlcmUncyBubyBqdXN0aWZpY2F0aW9uIGZvciBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDc4NywiT3V0cHV0VG9rZW5zIjoyNTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwNDowNToyNi4xMDU0MjQ5MzVaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgQUZfVU5JWCBnYXJiYWdlIGNvbGxlY3RvcidzIFRhcmphbiBTdHJvbmdseSBDb25uZWN0ZWQgQ29tcG9uZW50IChTQ0MpIGFsZ29yaXRobSBpbiBgbmV0L3VuaXgvZ2FyYmFnZS5jYC4gSXQgbW92ZXMgdGhlIG9mZi1zdGFjayBtYXJraW5nIChgdi1cXHUwMDNlaW5kZXggPSB1bml4X3ZlcnRleF9ncm91cGVkX2luZGV4YCkgYW5kIFNDQyBJRCBhc3NpZ25tZW50IChgdi1cXHUwMDNlc2NjX2luZGV4ID0gdmVydGV4LVxcdTAwM2VzY2NfaW5kZXhgKSBmb3IgU0NDIHZlcnRpY2VzIGZyb20gYHVuaXhfc2NjX2RlYWQoKWAgaW50byBgX191bml4X3dhbGtfc2NjKClgLCBzaW1wbGlmaWVzIGB1bml4X3NjY19kZWFkKClgIGJ5IHJlbW92aW5nIHRoZSBgZmFzdGAgcGFyYW1ldGVyLCBhbmQgYWRkcyBhIHJlZ3Jlc3Npb24gdGVzdCBpbiBrc2VsZnRlc3RzLlxcblxcblRoaXMgY2hhbmdlIHRvdWNoZXMgcHVyZWx5IGludGVybmFsIGdyYXBoIGJvb2trZWVwaW5nIGZpZWxkcyBvbiBgc3RydWN0IHVuaXhfdmVydGV4YCBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBhbnkgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBncmFwaCB0cmF2ZXJzYWwsIGxpc3QgbWFuaXB1bGF0aW9uLCBvciBzb2NrZXQgbGlmZXRpbWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxpc3QgY29ycnVwdGlvbnMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWcgZmFjaWxpdGllcyAoZS5nLiwgQ09ORklHX0RFQlVHX0xJU1QpLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBBRl9VTklYIGdhcmJhZ2UgY29sbGVjdG9yJ3MgVGFyamFuIFN0cm9uZ2x5IENvbm5lY3RlZCBDb21wb25lbnQgKFNDQykgYWxnb3JpdGhtIGluIGBuZXQvdW5peC9nYXJiYWdlLmNgLiBJdCBtb3ZlcyB0aGUgb2ZmLXN0YWNrIG1hcmtpbmcgKGB2LVxcdTAwM2VpbmRleCA9IHVuaXhfdmVydGV4X2dyb3VwZWRfaW5kZXhgKSBhbmQgU0NDIElEIGFzc2lnbm1lbnQgKGB2LVxcdTAwM2VzY2NfaW5kZXggPSB2ZXJ0ZXgtXFx1MDAzZXNjY19pbmRleGApIGZvciBTQ0MgdmVydGljZXMgZnJvbSBgdW5peF9zY2NfZGVhZCgpYCBpbnRvIGBfX3VuaXhfd2Fsa19zY2MoKWAsIHNpbXBsaWZpZXMgYHVuaXhfc2NjX2RlYWQoKWAgYnkgcmVtb3ZpbmcgdGhlIGBmYXN0YCBwYXJhbWV0ZXIsIGFuZCBhZGRzIGEgcmVncmVzc2lvbiB0ZXN0IGluIGtzZWxmdGVzdHMuXFxuXFxuVGhpcyBjaGFuZ2UgdG91Y2hlcyBwdXJlbHkgaW50ZXJuYWwgZ3JhcGggYm9va2tlZXBpbmcgZmllbGRzIG9uIGBzdHJ1Y3QgdW5peF92ZXJ0ZXhgIG9iamVjdHMgdGhhdCBhcmUgYWxyZWFkeSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IGFueSBidWZmZXJzIG9yIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGdyYXBoIHRyYXZlcnNhbCwgbGlzdCBtYW5pcHVsYXRpb24sIG9yIHNvY2tldCBsaWZldGltZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9ucykgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyBmYWNpbGl0aWVzIChlLmcuLCBDT05GSUdfREVCVUdfTElTVCkuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgjkj5[1] Phase: Succeeded StartedAt: 2026-09-12 04:05:37 +0000 UTC FinishedAt: 2026-09-12 04:05:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-12 04:05:37 +0000 UTC FinishedAt: 2026-09-12 04:05:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2] Phase: Succeeded StartedAt: 2026-09-12 04:05:37 +0000 UTC FinishedAt: 2026-09-12 08:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:05:37 +0000 UTC FinishedAt: 2026-09-12 08:24:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:05:37 +0000 UTC FinishedAt: 2026-09-12 04:05:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:05:37 +0000 UTC FinishedAt: 2026-09-12 04:05:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"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-workflowgjkj5/series-workflowgjkj5-convert-artifact-2158274149/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:05:47 +0000 UTC FinishedAt: 2026-09-12 04:22:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:05:47 +0000 UTC FinishedAt: 2026-09-12 04:22:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d37ec3b0-11a4-4e15-8076-c81c3b87a271,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-workflowgjkj5/series-workflowgjkj5-convert-artifact-2158274149/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": "96aef442-9786-4eee-91f5-d551ead9225c", "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-workflowgjkj5/series-workflowgjkj5-build-action-2938610315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:05:47 +0000 UTC FinishedAt: 2026-09-12 04:21:58 +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:*d37ec3b0-11a4-4e15-8076-c81c3b87a271,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-workflowgjkj5/series-workflowgjkj5-convert-artifact-2158274149/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": "96aef442-9786-4eee-91f5-d551ead9225c", "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-workflowgjkj5/series-workflowgjkj5-build-action-2938610315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:22:08 +0000 UTC FinishedAt: 2026-09-12 04:22:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:22:08 +0000 UTC FinishedAt: 2026-09-12 04:22:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:22:08 +0000 UTC FinishedAt: 2026-09-12 04:22:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:22:08 +0000 UTC FinishedAt: 2026-09-12 04:22:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-workflowgjkj5/series-workflowgjkj5-convert-artifact-3087963968/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:22:18 +0000 UTC FinishedAt: 2026-09-12 04:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:22:18 +0000 UTC FinishedAt: 2026-09-12 04:24:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*96aef442-9786-4eee-91f5-d551ead9225c,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-workflowgjkj5/series-workflowgjkj5-build-action-2938610315/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-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:24:20 +0000 UTC FinishedAt: 2026-09-12 04:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:24:20 +0000 UTC FinishedAt: 2026-09-12 04:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:24:20 +0000 UTC FinishedAt: 2026-09-12 04:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:24:20 +0000 UTC FinishedAt: 2026-09-12 04:45:12 +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:*d37ec3b0-11a4-4e15-8076-c81c3b87a271,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-workflowgjkj5/series-workflowgjkj5-convert-artifact-3087963968/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": "20c1264c-8409-4dac-99df-754589281c54", "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-workflowgjkj5/series-workflowgjkj5-build-action-111805692/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:24:20 +0000 UTC FinishedAt: 2026-09-12 04:44:51 +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:*d37ec3b0-11a4-4e15-8076-c81c3b87a271,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-workflowgjkj5/series-workflowgjkj5-convert-artifact-3087963968/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": "20c1264c-8409-4dac-99df-754589281c54", "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-workflowgjkj5/series-workflowgjkj5-build-action-111805692/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:45:12 +0000 UTC FinishedAt: 2026-09-12 04:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:45:12 +0000 UTC FinishedAt: 2026-09-12 04:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:45:12 +0000 UTC FinishedAt: 2026-09-12 04:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:45:12 +0000 UTC FinishedAt: 2026-09-12 04:47:00 +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:*20c1264c-8409-4dac-99df-754589281c54,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-workflowgjkj5/series-workflowgjkj5-build-action-111805692/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-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:47:10 +0000 UTC FinishedAt: 2026-09-12 08:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:47:10 +0000 UTC FinishedAt: 2026-09-12 08:24:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"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:*96aef442-9786-4eee-91f5-d551ead9225c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*20c1264c-8409-4dac-99df-754589281c54,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-workflowgjkj5/series-workflowgjkj5-build-action-2938610315/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-workflowgjkj5/series-workflowgjkj5-build-action-111805692/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:47:10 +0000 UTC FinishedAt: 2026-09-12 04:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:47:10 +0000 UTC FinishedAt: 2026-09-12 04:47:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"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-workflowgjkj5/series-workflowgjkj5-convert-artifact-3420495513/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:47:10 +0000 UTC FinishedAt: 2026-09-12 04:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:47:10 +0000 UTC FinishedAt: 2026-09-12 04:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:47:10 +0000 UTC FinishedAt: 2026-09-12 04:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:47:20 +0000 UTC FinishedAt: 2026-09-12 08:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgjkj5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","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":["__unix_walk_scc","unix_scc_dead","unix_walk_scc_fast","unix_walk_scc","unix_gc"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["UNIX"],"series_id":"c5dee797-982c-4f00-82a9-ac00e8b3b8bb","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-12 04:47:20 +0000 UTC FinishedAt: 2026-09-12 08:24:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*96aef442-9786-4eee-91f5-d551ead9225c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*20c1264c-8409-4dac-99df-754589281c54,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-workflowgjkj5/series-workflowgjkj5-build-action-2938610315/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-workflowgjkj5/series-workflowgjkj5-build-action-111805692/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-workflowgjkj5/series-workflowgjkj5-convert-artifact-3420495513/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,}