Name: series-workflowq7p2j Phase: Succeeded StartedAt: 2026-09-05 10:19:36 +0000 UTC FinishedAt: 2026-09-05 14:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[0] Phase: Succeeded StartedAt: 2026-09-05 10:19:36 +0000 UTC FinishedAt: 2026-09-05 10:34:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 10:19:36 +0000 UTC FinishedAt: 2026-09-05 10:34:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "41e6f03658adfa9df68642750b53a046f1abdea9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "41e6f03658adfa9df68642750b53a046f1abdea9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "67ae394f-0af5-4960-a6b4-a3d39b5f36a5" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_set_inline_data_block", "ext4_convert_inline_data_nolock", "ext4_convert_inline_data", "ext4_try_add_inline_entry" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayYjMzQ7LAogICAgJiMzNDtleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrJiMzNDssCiAgICAmIzM0O2V4dDRfY29udmVydF9pbmxpbmVfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMgaW4gYGZzL2V4dDQvaW5saW5lLmNgIGJ5IGludHJvZHVjaW5nIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgYW5kIGFsbG9jYXRpbmcgdGhlIGRlc3RpbmF0aW9uIGJsb2NrIHByaW9yIHRvIGNsZWFyaW5nIGlubGluZSBkYXRhIGluIHRoZSBpbm9kZS5cblxuUmV2aWV3aW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhY3Jvc3MgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczpcbjEuIEFsbCBsb2NhbCBzdGFjayBzdHJ1Y3R1cmVzIChgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AsIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgLCBgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyYCwgYW5kIGBzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXhgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBgbWVtc2V0YCwgb3IgZXhwbGljaXQgbWVtYmVyIGFzc2lnbm1lbnRzIGJlZm9yZSB1c2UuXG4yLiBIZWFwIGJ1ZmZlcnMgYWxsb2NhdGVkIHZpYSBga21hbGxvY2AgKGBpX2Jsb2NrX2J1ZmAsIGB4YXR0cl9idWZgLCBgYnVmYCkgYXJlIGltbWVkaWF0ZWx5IHBvcHVsYXRlZCB2aWEgYG1lbWNweWAgb3IgYGV4dDRfcmVhZF9pbmxpbmVfZGF0YWAuXG4zLiBUaGUgYmxvY2sgYnVmZmVyIGRhdGEgKGBiaC1cdTAwM2ViX2RhdGFgKSBpcyBleHBsaWNpdGx5IGNsZWFyZWQgdXNpbmcgYG1lbXNldGAgYmVmb3JlIHdyaXRpbmcgaW5saW5lIGRhdGEgb3IgZGlyZWN0b3J5IGVudHJpZXMuXG40LiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGJyYW5jaGluZy9sb2dpYyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBlcnJvciByZWNvdmVyeSBoYW5kbGluZywgbG9ja2luZywgb3IgZXh0ZW50IG1hbmlwdWxhdGlvbikgZmFsbCB1bmRlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIG1lY2hhbmlzbSBpbiBmcy9leHQ0L2lubGluZS5jLCByZXBsYWNpbmcgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhIHdpdGggZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2sgYW5kIHJlc3RydWN0dXJpbmcgYmxvY2sgYWxsb2NhdGlvbiwgZXh0ZW50IGluc2VydGlvbiwgYW5kIGVycm9yIHJlY292ZXJ5IGhhbmRsaW5nIGR1cmluZyBpbmxpbmUgZGF0YSBjb252ZXJzaW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgd2hlbiBleHBhbmRpbmcgaW5saW5lIGZpbGVzL2RpcmVjdG9yaWVzIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ZTUyMzEyMDRlMDNjMzAzMjQ2ODM3MTI5NWViOGEyN2Y4MGQxZGViXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxMDozMzowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lubGluZS5jIGIvZnMvZXh0NC9pbmxpbmUuY1xuaW5kZXggODA0NWU0ZmYyNzBjNy4uZmVmOThhY2VlNjg4ZiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5saW5lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5saW5lLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuICNpbmNsdWRlIFwmIzM0O2V4dDQuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hhdHRyLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0cnVuY2F0ZS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2V4dDRfZXh0ZW50cy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBXHRcJiMzNDtkYXRhXCYjMzQ7XG4gI2RlZmluZSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFXHQoKHNpemVvZihfX2xlMzIpICogRVhUNF9OX0JMT0NLUykpXG5AQCAtMTA3MCwyMSAmIzQzOzEwNzEsMTIzIEBAIHN0YXRpYyBpbnQgZXh0NF91cGRhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcbi1cdFx0XHRcdCAgICAgdm9pZCAqYnVmLCBpbnQgaW5saW5lX3NpemUpXG4mIzQzO3N0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLFxuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiB7XG4tXHRpbnQgcmV0O1xuJiM0MztcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbiYjNDM7XHRzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzID0ge1xuJiM0MztcdFx0LnMgPSB7IC5ub3RfZm91bmQgPSAtRU5PREFUQSwgfSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaSA9IHtcbiYjNDM7XHRcdC5uYW1lX2luZGV4ID0gRVhUNF9YQVRUUl9JTkRFWF9TWVNURU0sXG4mIzQzO1x0XHQubmFtZSA9IEVYVDRfWEFUVFJfU1lTVEVNX0RBVEEsXG4mIzQzO1x0XHQudmFsdWUgPSBOVUxMLFxuJiM0MztcdFx0LnZhbHVlX2xlbiA9IDAsXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgZXJyb3I7XG4mIzQzO1x0dm9pZCAqaV9ibG9ja19idWYgPSBOVUxMO1xuJiM0MztcdHZvaWQgKnhhdHRyX2J1ZiA9IE5VTEw7XG4mIzQzO1x0dm9pZCAqaGVhZGVyID0gTlVMTDtcbiYjNDM7XHR2b2lkICp0YWlsID0gTlVMTDtcbiYjNDM7XHRpbnQgeGF0dHJfc2l6ZTtcbiYjNDM7XHRzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlO1xuIFxuLVx0cmV0ID0gZXh0NF9jcmVhdGVfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSwgaW5saW5lX3NpemUpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRleHQ0X21zZyhpbm9kZS1cdTAwM2VpX3NiLCBLRVJOX0VNRVJHLFxuLVx0XHRcdFwmIzM0O2Vycm9yIHJlc3RvcmluZyBpbmxpbmVfZGF0YSBmb3IgaW5vZGUgLS0gcG90ZW50aWFsIGRhdGEgbG9zcyEgKGlub2RlICVsbHUsIGVycm9yICVkKVwmIzM0Oyxcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX2lubywgcmV0KTtcbi1cdFx0cmV0dXJuO1xuJiM0MztcdGlfYmxvY2tfYnVmID0ga21hbGxvYyhFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFLCBHRlBfTk9GUyk7XG4mIzQzO1x0aWYgKCFpX2Jsb2NrX2J1Zikge1xuJiM0MztcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuJiM0MztcdFx0ZG93bl93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbiYjNDM7XHRcdGdvdG8gZXJyb3I7XG4gXHR9XG4tXHRleHQ0X3dyaXRlX2lubGluZV9kYXRhKGlub2RlLCBpbG9jLCBidWYsIDAsIGlubGluZV9zaXplKTtcbi1cdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4mIzQzO1x0ZG93bl93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbiYjNDM7XHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aXMuaWxvYyk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBlcnJvcjtcbiYjNDM7XHRyYXdfaW5vZGUgPSBleHQ0X3Jhd19pbm9kZShcdTAwMjZpcy5pbG9jKTtcbiYjNDM7XHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xuJiM0MztcdHRhaWwgPSBJVEFJTChpbm9kZSwgcmF3X2lub2RlKTtcbiYjNDM7XHR4YXR0cl9zaXplID0gdGFpbCAtIGhlYWRlcjtcbiYjNDM7XHR4YXR0cl9idWYgPSBrbWFsbG9jKHhhdHRyX3NpemUsIEdGUF9OT0ZTKTtcbiYjNDM7XHRpZiAoIXhhdHRyX2J1Zikge1xuJiM0MztcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBlcnJvcjtcbiYjNDM7XHR9XG4mIzQzO1x0QlVGRkVSX1RSQUNFKGlzLmlsb2MuYmgsIFwmIzM0O2dldF93cml0ZV9hY2Nlc3NcJiMzNDspO1xuJiM0MztcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cdTAwM2VpX3NiLCBpcy5pbG9jLmJoLCBFWFQ0X0pUUl9OT05FKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRnb3RvIGVycm9yO1xuJiM0MztcdG1lbWNweShpX2Jsb2NrX2J1ZiwgKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4mIzQzO1x0bWVtc2V0KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuJiM0MztcdG1lbXNldChlaS1cdTAwM2VpX2RhdGEsIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuJiM0MztcdG1lbWNweSh4YXR0cl9idWYsIGhlYWRlciwgeGF0dHJfc2l6ZSk7XG4mIzQzO1x0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS1cdTAwM2VpX3NiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkpIHtcbiYjNDM7XHRcdGV4dDRfc2V0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4mIzQzO1x0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XG4mIzQzO1x0XHRzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIDAsIE5VTEwsIDApO1xuJiM0MztcbiYjNDM7XHRcdGlmIChJU19FUlIocGF0aCkpIHtcbiYjNDM7XHRcdFx0ZXJyb3IgPSBQVFJfRVJSKHBhdGgpO1xuJiM0MztcdFx0XHRnb3RvIHJlY292ZXJ5O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4O1xuJiM0MztcbiYjNDM7XHRcdG5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XG4mIzQzO1x0XHRuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNigxKTtcbiYjNDM7XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcdTAwMjZuZXdleCwgYmxvY2spO1xuJiM0MztcdFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXgsIDApO1xuJiM0MztcdFx0aWYgKElTX0VSUihwYXRoKSkge1xuJiM0MztcdFx0XHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XG4mIzQzO1x0XHRcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXG4mIzQzO1x0XHRcdFx0Z290byByZWNvdmVyeTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdGdvdG8gbm9fZnJlZTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7XG4mIzQzO1x0fVxuJiM0MztcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9maW5kKGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byByZWNvdmVyeTtcbiYjNDM7XHRpZiAoIWlzLnMubm90X2ZvdW5kKVxuJiM0MztcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4mIzQzO3JlY292ZXJ5OlxuJiM0MztcdGlmIChlcnJvcikge1xuJiM0MztcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbiYjNDM7XHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7XG4mIzQzO1x0XHRtZW1jcHkoaGVhZGVyLCB4YXR0cl9idWYsIHhhdHRyX3NpemUpO1xuJiM0Mztub19mcmVlOlxuJiM0MztcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbiYjNDM7XHRcdG1lbWNweSgodm9pZCAqKXJhd19pbm9kZS1cdTAwM2VpX2Jsb2NrLCBpX2Jsb2NrX2J1ZiwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4mIzQzO1x0XHRtZW1jcHkoZWktXHUwMDNlaV9kYXRhLCByYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4mIzQzO1x0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4mIzQzO1x0XHRnZXRfYmgoaXMuaWxvYy5iaCk7XG4mIzQzO1x0XHRleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKTtcbiYjNDM7XHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiYjNDM7XHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbiYjNDM7XHRcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2Rpc2tzaXplID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGdldF9iaChpcy5pbG9jLmJoKTtcbiYjNDM7XHRcdGVycm9yID0gZXh0NF9tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgXHUwMDI2aXMuaWxvYyk7XG4mIzQzO1x0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX29mZiA9IDA7XG4mIzQzO1x0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xuJiM0MztcdFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuJiM0MztcdFx0YnJlbHNlKGJoKTtcbiYjNDM7XHR9XG4mIzQzO1x0Z290byBvdXQ7XG4mIzQzO2Vycm9yOlxuJiM0MztcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7XG4mIzQzO1x0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbiYjNDM7XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnJlbHNlKGlzLmlsb2MuYmgpO1xuJiM0MztcdHVwX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuJiM0MztcdGtmcmVlKGlfYmxvY2tfYnVmKTtcbiYjNDM7XHRrZnJlZSh4YXR0cl9idWYpO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4gc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG5AQCAtMTA5Myw5ICYjNDM7MTE5NiwxMiBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiB7XG4gXHRpbnQgZXJyb3I7XG4gXHR2b2lkICpidWYgPSBOVUxMO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkYXRhX2JoID0gTlVMTDtcbi1cdHN0cnVjdCBleHQ0X21hcF9ibG9ja3MgbWFwO1xuJiM0MztcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xuIFx0aW50IGlubGluZV9zaXplO1xuJiM0MztcdGV4dDRfZnNibGtfdCBuZXdibG9jayA9IDA7XG4mIzQzO1x0c3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyO1xuJiM0MztcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4mIzQzO1x0dW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jaztcbiBcbiBcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xuIFx0YnVmID0ga21hbGxvYyhpbmxpbmVfc2l6ZSwgR0ZQX05PRlMpO1xuQEAgLTExMjAsNjMgJiM0MzsxMjI2LDYyIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0ZXJyb3IgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdG1hcC5tX2xibGsgPSAwO1xuLVx0bWFwLm1fbGVuID0gMTtcbi1cdG1hcC5tX2ZsYWdzID0gMDtcbi1cdGVycm9yID0gZXh0NF9tYXBfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIFx1MDAyNm1hcCwgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSk7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmFyLCAwLCBzaXplb2YoYXIpKTtcbiYjNDM7XHRhci5pbm9kZSA9IGlub2RlO1xuJiM0MztcdGFyLmxvZ2ljYWwgPSAwO1xuJiM0MztcdGFyLmxlbiA9IDE7XG4mIzQzO1x0aWYgKFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiYjNDM7XHRcdGFyLmZsYWdzID0gRVhUNF9NQl9ISU5UX0RBVEE7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0YXIuZmxhZ3MgPSAwO1xuJiM0MztcdG5ld2Jsb2NrID0gZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZSwgXHUwMDI2YXIsIFx1MDAyNmVycm9yKTtcbiBcdGlmIChlcnJvciBcdTAwM2MgMClcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbi1cdGlmICghKG1hcC5tX2ZsYWdzIFx1MDAyNiBFWFQ0X01BUF9NQVBQRUQpKSB7XG4tXHRcdGVycm9yID0gLUVJTztcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbi1cdH1cbi1cbi1cdGRhdGFfYmggPSBzYl9nZXRibGsoaW5vZGUtXHUwMDNlaV9zYiwgbWFwLm1fcGJsayk7XG4tXHRpZiAoIWRhdGFfYmgpIHtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGFsbG9jYXRlZF9ibG9jayA9IEVYVDRfQzJCKHNiaSwgYXIubGVuKTtcbiYjNDM7XHRiaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLCBuZXdibG9jayk7XG4mIzQzO1x0aWYgKCFiaCkge1xuIFx0XHRlcnJvciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4mIzQzO1x0XHRnb3RvIG91dF9iaDtcbiBcdH1cbiBcbi1cdGxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuLVx0ZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cdTAwM2VpX3NiLCBkYXRhX2JoLFxuJiM0MztcdGxvY2tfYnVmZmVyKGJoKTtcbiYjNDM7XHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLVx1MDAzZWlfc2IsIGJoLFxuIFx0XHRcdFx0XHQgICAgICAgRVhUNF9KVFJfTk9ORSk7XG4gXHRpZiAoZXJyb3IpIHtcbi1cdFx0dW5sb2NrX2J1ZmZlcihkYXRhX2JoKTtcbiYjNDM7XHRcdHVubG9ja19idWZmZXIoYmgpO1xuIFx0XHRlcnJvciA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4mIzQzO1x0XHRnb3RvIG91dF9iaDtcbiBcdH1cbi1cdG1lbXNldChkYXRhX2JoLVx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4mIzQzO1x0bWVtc2V0KGJoLVx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4gXG4gXHRpZiAoIVNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuLVx0XHRtZW1jcHkoZGF0YV9iaC1cdTAwM2ViX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpO1xuLVx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGRhdGFfYmgpO1xuLVx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuJiM0MztcdFx0bWVtY3B5KGJoLVx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XG4mIzQzO1x0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbiYjNDM7XHRcdHVubG9ja19idWZmZXIoYmgpO1xuIFx0XHRlcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSxcbi1cdFx0XHRcdFx0XHQgICBpbm9kZSwgZGF0YV9iaCk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgIGlub2RlLCBiaCk7XG4gXHR9IGVsc2Uge1xuLVx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuLVx0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuLVx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuLVx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuLVxuLVx0XHRlcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBkYXRhX2JoLFxuJiM0MztcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4mIzQzO1x0XHRlcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbiBcdFx0XHQgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLVx1MDAzZWlub2RlKSxcbiBcdFx0XHQgIGJ1ZiAmIzQzOyBFWFQ0X0lOTElORV9ET1RET1RfU0laRSxcbiBcdFx0XHQgIGlubGluZV9zaXplIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUpO1xuLVx0XHRpZiAoIWVycm9yKVxuLVx0XHRcdGVycm9yID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpO1xuIFx0fVxuJiM0MztvdXRfYmg6XG4mIzQzO1x0aWYgKGVycm9yKSB7XG4mIzQzO1x0XHRpZiAoYmgpXG4mIzQzO1x0XHRcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBuZXdibG9jayk7XG4mIzQzO1x0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4gXG4tb3V0X3Jlc3RvcmU6XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBpbG9jLCBidWYsIGlubGluZV9zaXplKTtcbi1cbiYjNDM7XHRcdGRvd25fd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4mIzQzO1x0XHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBuZXdibG9jaywgYWxsb2NhdGVkX2Jsb2NrLCAwKTtcbiYjNDM7XHRcdHVwX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRlcnJvciA9IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZSwgaW5vZGUsXG4mIzQzO1x0XHRcdFx0bmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgYmgpO1xuJiM0MztcdH1cbiBvdXQ6XG4tXHRicmVsc2UoZGF0YV9iaCk7XG4gXHRrZnJlZShidWYpO1xuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2smIzM0OywKICAgICYjMzQ7ZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayYjMzQ7LAogICAgJiMzNDtleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIG1lY2hhbmlzbSBpbiBmcy9leHQ0L2lubGluZS5jLCByZXBsYWNpbmcgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhIHdpdGggZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2sgYW5kIHJlc3RydWN0dXJpbmcgYmxvY2sgYWxsb2NhdGlvbiwgZXh0ZW50IGluc2VydGlvbiwgYW5kIGVycm9yIHJlY292ZXJ5IGhhbmRsaW5nIGR1cmluZyBpbmxpbmUgZGF0YSBjb252ZXJzaW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgd2hlbiBleHBhbmRpbmcgaW5saW5lIGZpbGVzL2RpcmVjdG9yaWVzIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZTUyMzEyMDRlMDNjMzAzMjQ2ODM3MTI5NWViOGEyN2Y4MGQxZGViCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxMDozMzowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jCmluZGV4IDgwNDVlNGZmMjcwYzcuLmZlZjk4YWNlZTY4OGYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5saW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbmxpbmUuYwpAQCAtMTQsNiAmIzQzOzE0LDcgQEAKICNpbmNsdWRlICYjMzQ7ZXh0NC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGF0dHIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3RydW5jYXRlLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZXh0NF9leHRlbnRzLmgmIzM0OwogCiAjZGVmaW5lIEVYVDRfWEFUVFJfU1lTVEVNX0RBVEEJJiMzNDtkYXRhJiMzNDsKICNkZWZpbmUgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRQkoKHNpemVvZihfX2xlMzIpICogRVhUNF9OX0JMT0NLUykpCkBAIC0xMDcwLDIxICYjNDM7MTA3MSwxMjMgQEAgc3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MsCi0JCQkJICAgICB2b2lkICpidWYsIGludCBpbmxpbmVfc2l6ZSkKJiM0MztzdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jaywKJiM0MzsJCQkJCXVuc2lnbmVkIGludCBsZW4sIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7Ci0JaW50IHJldDsKJiM0MzsJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOwomIzQzOwlzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzID0gewomIzQzOwkJLnMgPSB7IC5ub3RfZm91bmQgPSAtRU5PREFUQSwgfSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpID0gewomIzQzOwkJLm5hbWVfaW5kZXggPSBFWFQ0X1hBVFRSX0lOREVYX1NZU1RFTSwKJiM0MzsJCS5uYW1lID0gRVhUNF9YQVRUUl9TWVNURU1fREFUQSwKJiM0MzsJCS52YWx1ZSA9IE5VTEwsCiYjNDM7CQkudmFsdWVfbGVuID0gMCwKJiM0MzsJfTsKJiM0MzsJaW50IGVycm9yOwomIzQzOwl2b2lkICppX2Jsb2NrX2J1ZiA9IE5VTEw7CiYjNDM7CXZvaWQgKnhhdHRyX2J1ZiA9IE5VTEw7CiYjNDM7CXZvaWQgKmhlYWRlciA9IE5VTEw7CiYjNDM7CXZvaWQgKnRhaWwgPSBOVUxMOwomIzQzOwlpbnQgeGF0dHJfc2l6ZTsKJiM0MzsJc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTsKIAotCXJldCA9IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlubGluZV9zaXplKTsKLQlpZiAocmV0KSB7Ci0JCWV4dDRfbXNnKGlub2RlLSZndDtpX3NiLCBLRVJOX0VNRVJHLAotCQkJJiMzNDtlcnJvciByZXN0b3JpbmcgaW5saW5lX2RhdGEgZm9yIGlub2RlIC0tIHBvdGVudGlhbCBkYXRhIGxvc3MhIChpbm9kZSAlbGx1LCBlcnJvciAlZCkmIzM0OywKLQkJCWlub2RlLSZndDtpX2lubywgcmV0KTsKLQkJcmV0dXJuOwomIzQzOwlpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpOwomIzQzOwlpZiAoIWlfYmxvY2tfYnVmKSB7CiYjNDM7CQllcnJvciA9IC1FTk9NRU07CiYjNDM7CQlkb3duX3dyaXRlKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwomIzQzOwkJZ290byBlcnJvcjsKIAl9Ci0JZXh0NF93cml0ZV9pbmxpbmVfZGF0YShpbm9kZSwgaWxvYywgYnVmLCAwLCBpbmxpbmVfc2l6ZSk7Ci0JZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTsKJiM0MzsJZG93bl93cml0ZSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKJiM0MzsJZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsICZhbXA7aXMuaWxvYyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gZXJyb3I7CiYjNDM7CXJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKCZhbXA7aXMuaWxvYyk7CiYjNDM7CWhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7CiYjNDM7CXRhaWwgPSBJVEFJTChpbm9kZSwgcmF3X2lub2RlKTsKJiM0MzsJeGF0dHJfc2l6ZSA9IHRhaWwgLSBoZWFkZXI7CiYjNDM7CXhhdHRyX2J1ZiA9IGttYWxsb2MoeGF0dHJfc2l6ZSwgR0ZQX05PRlMpOwomIzQzOwlpZiAoIXhhdHRyX2J1ZikgewomIzQzOwkJZXJyb3IgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsJfQomIzQzOwlCVUZGRVJfVFJBQ0UoaXMuaWxvYy5iaCwgJiMzNDtnZXRfd3JpdGVfYWNjZXNzJiMzNDspOwomIzQzOwllcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtJmd0O2lfc2IsIGlzLmlsb2MuYmgsIEVYVDRfSlRSX05PTkUpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlnb3RvIGVycm9yOwomIzQzOwltZW1jcHkoaV9ibG9ja19idWYsICh2b2lkICopcmF3X2lub2RlLSZndDtpX2Jsb2NrLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTsKJiM0MzsJbWVtc2V0KCh2b2lkICopcmF3X2lub2RlLSZndDtpX2Jsb2NrLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTsKJiM0MzsJbWVtc2V0KGVpLSZndDtpX2RhdGEsIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpOwomIzQzOwltZW1jcHkoeGF0dHJfYnVmLCBoZWFkZXIsIHhhdHRyX3NpemUpOwomIzQzOwlpZiAoZXh0NF9oYXNfZmVhdHVyZV9leHRlbnRzKGlub2RlLSZndDtpX3NiKSAmYW1wOyZhbXA7CiYjNDM7CQkoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSB8fCBTX0lTUkVHKGlub2RlLSZndDtpX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpKSB7CiYjNDM7CQlleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpOwomIzQzOwkJZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgaW5vZGUpOwomIzQzOwkJc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCAwLCBOVUxMLCAwKTsKJiM0MzsKJiM0MzsJCWlmIChJU19FUlIocGF0aCkpIHsKJiM0MzsJCQllcnJvciA9IFBUUl9FUlIocGF0aCk7CiYjNDM7CQkJZ290byByZWNvdmVyeTsKJiM0MzsJCX0KJiM0MzsJCXN0cnVjdCBleHQ0X2V4dGVudCBuZXdleDsKJiM0MzsKJiM0MzsJCW5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7CiYjNDM7CQluZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNigxKTsKJiM0MzsJCWV4dDRfZXh0X3N0b3JlX3BibG9jaygmYW1wO25ld2V4LCBibG9jayk7CiYjNDM7CQlwYXRoID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCAmYW1wO25ld2V4LCAwKTsKJiM0MzsJCWlmIChJU19FUlIocGF0aCkpIHsKJiM0MzsJCQllcnJvciA9IFBUUl9FUlIocGF0aCk7CiYjNDM7CQkJaWYgKGVycm9yID09IC1FRFFVT1QgfHwgZXJyb3IgPT0gLUVOT1NQQykKJiM0MzsJCQkJZ290byByZWNvdmVyeTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCWdvdG8gbm9fZnJlZTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJRVhUNF9JKGlub2RlKS0mZ3Q7aV9kYXRhWzBdID0gY3B1X3RvX2xlMzIoYmxvY2spOwomIzQzOwl9CiYjNDM7CWVycm9yID0gZXh0NF94YXR0cl9pYm9keV9maW5kKGlub2RlLCAmYW1wO2ksICZhbXA7aXMpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlnb3RvIHJlY292ZXJ5OwomIzQzOwlpZiAoIWlzLnMubm90X2ZvdW5kKQomIzQzOwkJZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCAmYW1wO2ksICZhbXA7aXMpOwomIzQzO3JlY292ZXJ5OgomIzQzOwlpZiAoZXJyb3IpIHsKJiM0MzsJCWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiYjNDM7CQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApOwomIzQzOwkJbWVtY3B5KGhlYWRlciwgeGF0dHJfYnVmLCB4YXR0cl9zaXplKTsKJiM0Mztub19mcmVlOgomIzQzOwkJZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTsKJiM0MzsJCW1lbWNweSgodm9pZCAqKXJhd19pbm9kZS0mZ3Q7aV9ibG9jaywgaV9ibG9ja19idWYsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpOwomIzQzOwkJbWVtY3B5KGVpLSZndDtpX2RhdGEsIHJhd19pbm9kZS0mZ3Q7aV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7CiYjNDM7CQlleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7CiYjNDM7CQlnZXRfYmgoaXMuaWxvYy5iaCk7CiYjNDM7CQlleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCAmYW1wO2lzLmlsb2MpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKTsKJiM0MzsJCWlmIChTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CQkJaV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemUpOwomIzQzOwkJCUVYVDRfSShpbm9kZSktJmd0O2lfZGlza3NpemUgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemU7CiYjNDM7CQl9CiYjNDM7CQlnZXRfYmgoaXMuaWxvYy5iaCk7CiYjNDM7CQllcnJvciA9IGV4dDRfbWFya19pbG9jX2RpcnR5KGhhbmRsZSwgaW5vZGUsICZhbXA7aXMuaWxvYyk7CiYjNDM7CQlFWFQ0X0koaW5vZGUpLSZndDtpX2lubGluZV9vZmYgPSAwOwomIzQzOwkJRVhUNF9JKGlub2RlKS0mZ3Q7aV9pbmxpbmVfc2l6ZSA9IDA7CiYjNDM7CQlleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7CiYjNDM7CQlicmVsc2UoYmgpOwomIzQzOwl9CiYjNDM7CWdvdG8gb3V0OwomIzQzO2Vycm9yOgomIzQzOwlleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spOwomIzQzOwlleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpOwomIzQzOwlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApOwomIzQzO291dDoKJiM0MzsJYnJlbHNlKGlzLmlsb2MuYmgpOwomIzQzOwl1cF93cml0ZSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKJiM0MzsJa2ZyZWUoaV9ibG9ja19idWYpOwomIzQzOwlrZnJlZSh4YXR0cl9idWYpOwomIzQzOwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLApAQCAtMTA5Myw5ICYjNDM7MTE5NiwxMiBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSwKIHsKIAlpbnQgZXJyb3I7CiAJdm9pZCAqYnVmID0gTlVMTDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRhdGFfYmggPSBOVUxMOwotCXN0cnVjdCBleHQ0X21hcF9ibG9ja3MgbWFwOwomIzQzOwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlpbnQgaW5saW5lX3NpemU7CiYjNDM7CWV4dDRfZnNibGtfdCBuZXdibG9jayA9IDA7CiYjNDM7CXN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcjsKJiM0MzsJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS0mZ3Q7aV9zYik7CiYjNDM7CXVuc2lnbmVkIGludCBhbGxvY2F0ZWRfYmxvY2s7CiAKIAlpbmxpbmVfc2l6ZSA9IGV4dDRfZ2V0X2lubGluZV9zaXplKGlub2RlKTsKIAlidWYgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7CkBAIC0xMTIwLDYzICYjNDM7MTIyNiw2MiBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSwKIAkJCWdvdG8gb3V0OwogCX0KIAotCWVycm9yID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0OwotCi0JbWFwLm1fbGJsayA9IDA7Ci0JbWFwLm1fbGVuID0gMTsKLQltYXAubV9mbGFncyA9IDA7Ci0JZXJyb3IgPSBleHQ0X21hcF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgJmFtcDttYXAsIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpOwomIzQzOwltZW1zZXQoJmFtcDthciwgMCwgc2l6ZW9mKGFyKSk7CiYjNDM7CWFyLmlub2RlID0gaW5vZGU7CiYjNDM7CWFyLmxvZ2ljYWwgPSAwOwomIzQzOwlhci5sZW4gPSAxOwomIzQzOwlpZiAoU19JU1JFRyhpbm9kZS0mZ3Q7aV9tb2RlKSkKJiM0MzsJCWFyLmZsYWdzID0gRVhUNF9NQl9ISU5UX0RBVEE7CiYjNDM7CWVsc2UKJiM0MzsJCWFyLmZsYWdzID0gMDsKJiM0MzsJbmV3YmxvY2sgPSBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlLCAmYW1wO2FyLCAmYW1wO2Vycm9yKTsKIAlpZiAoZXJyb3IgJmx0OyAwKQotCQlnb3RvIG91dF9yZXN0b3JlOwotCWlmICghKG1hcC5tX2ZsYWdzICZhbXA7IEVYVDRfTUFQX01BUFBFRCkpIHsKLQkJZXJyb3IgPSAtRUlPOwotCQlnb3RvIG91dF9yZXN0b3JlOwotCX0KLQotCWRhdGFfYmggPSBzYl9nZXRibGsoaW5vZGUtJmd0O2lfc2IsIG1hcC5tX3BibGspOwotCWlmICghZGF0YV9iaCkgewomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWFsbG9jYXRlZF9ibG9jayA9IEVYVDRfQzJCKHNiaSwgYXIubGVuKTsKJiM0MzsJYmggPSBzYl9nZXRibGsoaW5vZGUtJmd0O2lfc2IsIG5ld2Jsb2NrKTsKJiM0MzsJaWYgKCFiaCkgewogCQllcnJvciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X3Jlc3RvcmU7CiYjNDM7CQlnb3RvIG91dF9iaDsKIAl9CiAKLQlsb2NrX2J1ZmZlcihkYXRhX2JoKTsKLQllcnJvciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLSZndDtpX3NiLCBkYXRhX2JoLAomIzQzOwlsb2NrX2J1ZmZlcihiaCk7CiYjNDM7CWVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtJmd0O2lfc2IsIGJoLAogCQkJCQkgICAgICAgRVhUNF9KVFJfTk9ORSk7CiAJaWYgKGVycm9yKSB7Ci0JCXVubG9ja19idWZmZXIoZGF0YV9iaCk7CiYjNDM7CQl1bmxvY2tfYnVmZmVyKGJoKTsKIAkJZXJyb3IgPSAtRUlPOwotCQlnb3RvIG91dF9yZXN0b3JlOwomIzQzOwkJZ290byBvdXRfYmg7CiAJfQotCW1lbXNldChkYXRhX2JoLSZndDtiX2RhdGEsIDAsIGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSk7CiYjNDM7CW1lbXNldChiaC0mZ3Q7Yl9kYXRhLCAwLCBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemUpOwogCiAJaWYgKCFTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7Ci0JCW1lbWNweShkYXRhX2JoLSZndDtiX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpOwotCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGRhdGFfYmgpOwotCQl1bmxvY2tfYnVmZmVyKGRhdGFfYmgpOwomIzQzOwkJbWVtY3B5KGJoLSZndDtiX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpOwomIzQzOwkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiYjNDM7CQl1bmxvY2tfYnVmZmVyKGJoKTsKIAkJZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsCi0JCQkJCQkgICBpbm9kZSwgZGF0YV9iaCk7CiYjNDM7CQkJCQkJICAgaW5vZGUsIGJoKTsKIAl9IGVsc2UgewotCQl1bmxvY2tfYnVmZmVyKGRhdGFfYmgpOwotCQlpbm9kZS0mZ3Q7aV9zaXplID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplOwotCQlpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSk7Ci0JCUVYVDRfSShpbm9kZSktJmd0O2lfZGlza3NpemUgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemU7Ci0KLQkJZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCwKJiM0MzsJCXVubG9ja19idWZmZXIoYmgpOwomIzQzOwkJZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsCiAJCQkgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLSZndDtpbm9kZSksCiAJCQkgIGJ1ZiAmIzQzOyBFWFQ0X0lOTElORV9ET1RET1RfU0laRSwKIAkJCSAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKIAl9CiYjNDM7b3V0X2JoOgomIzQzOwlpZiAoZXJyb3IpIHsKJiM0MzsJCWlmIChiaCkKJiM0MzsJCQlleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgbmV3YmxvY2spOwomIzQzOwkJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOwogCi1vdXRfcmVzdG9yZToKLQlpZiAoZXJyb3IpCi0JCWV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBpbG9jLCBidWYsIGlubGluZV9zaXplKTsKLQomIzQzOwkJZG93bl93cml0ZSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKJiM0MzsJCWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiYjNDM7CQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIDApOwomIzQzOwkJdXBfd3JpdGUoJmFtcDtlaS0mZ3Q7aV9kYXRhX3NlbSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllcnJvciA9IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZSwgaW5vZGUsCiYjNDM7CQkJCW5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIGJoKTsKJiM0MzsJfQogb3V0OgotCWJyZWxzZShkYXRhX2JoKTsKIAlrZnJlZShidWYpOwogCXJldHVybiBlcnJvcjsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI1MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB0aGlzIHBhdGNoIGFuYWx5c2lzLCBwdXR0aW5nIG15c2VsZiBpbiB5b3VyIGV4cGVydCBzaG9lczoKCioqQW5hbHl6aW5nIGFuIGV4dDQgSW5saW5lIERhdGEgUGF0Y2gqKgoKQWxyaWdodCwgYSBwYXRjaCB0b3VjaGluZyBgZnMvZXh0NC9pbmxpbmUuY2AuIE15IHNwaWRleSBzZW5zZSBpcyB0aW5nbGluZyDigJMgZXh0NCBpcyBjcml0aWNhbCBpbmZyYXN0cnVjdHVyZSwgYW5kIGlubGluZSBkYXRhIGlzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGludGVyZXN0aW5nIGJ1Z3MuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kICpleGFjdGx5KiB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuIEkmIzM5O2xsIGRpdmUgaW50byB0aGUgY29kZSBjaGFuZ2VzIHRoZW1zZWx2ZXMsIHJlYWxseSBmb2N1c2luZyBvbiB0aGUgbG9naWMgaXQmIzM5O3MgaW1wbGVtZW50aW5nIGFuZCB3aGVyZSBpdCYjMzk7cyBpbXBhY3RpbmcgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBtZXRhZGF0YSB1cGRhdGVzLCBkYXRhIGJsb2NrIGhhbmRsaW5nLCBlcnJvciBwYXRocz8gS25vd2luZyB0aGUgY29yZSBhY3Rpb24gaXMgdGhlIGtleS4KCk5leHQgdXAsIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiB3aGF0IEtjb25maWcgb3B0aW9ucyBhcmUgaW4gcGxheT8gSXMgdGhpcyBmZWF0dXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQ/IENhbiBpdCBiZSBkaXNhYmxlZCwgcG90ZW50aWFsbHkgcmVkdWNpbmcgbXkgZnV6emluZyBzdXJmYWNlPyBJJiMzOTtsbCBncmVwIHRocm91Z2ggdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgY2hlY2sgZm9yIGFueSByZWxldmFudCBkZXBlbmRlbmNpZXMgb3IgZGVwZW5kZW5jaWVzIHRvIG15IHRhcmdldHMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IElzIHRoaXMgY29kZSBhY3R1YWxseSAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgZXh0NCBmaWxlc3lzdGVtIHVzZSBjYXNlPyBJcyBpdCB0cmlnZ2VyZWQgdW5kZXIgbm9ybWFsIG9wZXJhdGlvbnMsIG9yIG9ubHkgd2l0aCBvYnNjdXJlIG9wdGlvbnMgb3IgY29ybmVyIGNhc2VzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgZ3JhcGgsIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIElzIGl0IHdvcnRoIHRoZSBmdXp6aW5nIGludmVzdG1lbnQ/CgpGaW5hbGx5LCB0aW1lIHRvIGRpc3RpbGwgdGhlIGVzc2VuY2UgZm9yIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMuIFdoYXQgYXJlIHRoZSBrZXkgYEZvY3VzU3ltYm9sc2A/IEFuZCB3aGF0IGBFbmFibGVDb25maWdzYCB3aWxsIEkgbmVlZCB0byBiZSBzdXJlIHRoaXMgY29kZSBwYXRoIGlzIGFjdGl2ZT8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBzb21lIGJhc2ljIGdyZXBzIHRvIHBpY2sgb3V0IHRoZSBpbXBvcnRhbnQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMuIEkgbWlnaHQgZXZlbiByZWFkIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgYW5kIGhlYWRlcnMgdG8gZ2FpbiBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlLgoKSW4gc2hvcnQsIEkmIzM5O20gZGlnZ2luZyBpbiB0byB1bmRlcnN0YW5kIHRoZSBwYXRjaCYjMzk7cyBwdXJwb3NlLCBpdHMgYWNjZXNzaWJpbGl0eSwgYW5kIGhvdyBJIGNhbiBiZXN0IGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyB0byByZXZlYWwgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2NyeXB0by5jPTEzMj1zdGF0aWMgaW50IGV4dDRfc2V0X2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqY3R4LCBzaXplX3QgbGVuLFxuLS1cbmZzL2V4dDQvY3J5cHRvLmMtMTUyLVxuZnMvZXh0NC9jcnlwdG8uYzoxNTM6XHRyZXMgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xuZnMvZXh0NC9jcnlwdG8uYy0xNTQtXHRpZiAocmVzKVxuLS1cbmZzL2V4dDQvZXh0NC5oPTM3OTY9ZXh0ZXJuIGludCBleHQ0X2lubGluZV9kYXRhX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqaGFzX2lubGluZSk7XG5mcy9leHQ0L2V4dDQuaC0zNzk3LVxuZnMvZXh0NC9leHQ0Lmg6Mzc5ODpleHRlcm4gaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2V4dDQvZXh0NC5oLTM3OTktXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NDg1ND1sb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00ODgzLVx0aW5vZGVfbG9jayhpbm9kZSk7XG5mcy9leHQ0L2V4dGVudHMuYzo0ODg0Olx0cmV0ID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4ODUtXHRpZiAocmV0KVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9NTQ2PWludCBleHQ0X3JlYWRwYWdlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNTcyLVxuZnMvZXh0NC9pbmxpbmUuYzo1NzM6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvZXh0NC9pbmxpbmUuYy01NzQtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz02OTc9aW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTcyOC1cdFx0XHQvKiBSZXRyeSBpbnNpZGUgKi9cbmZzL2V4dDQvaW5saW5lLmM6NzI5Olx0XHRcdHJldHVybiBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KG1hcHBpbmcsIGlub2RlKTtcbmZzL2V4dDQvaW5saW5lLmMtNzMwLVx0XHR9XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz03ODQ9aW50IGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNzg5LVx0aWYgKHBvcyAmIzQzOyBsZW4gXHUwMDNlIGV4dDRfZ2V0X21heF9pbmxpbmVfc2l6ZShpbm9kZSkpXG5mcy9leHQ0L2lubGluZS5jOjc5MDpcdFx0cmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQobWFwcGluZywgaW5vZGUpO1xuZnMvZXh0NC9pbmxpbmUuYy03OTEtXHRyZXR1cm4gZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKG1hcHBpbmcsIGlub2RlLCBwb3MsIGxlbixcbi0tXG5mcy9leHQ0L2lubGluZS5jPTEwNzQ9c3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMTkyLVxuZnMvZXh0NC9pbmxpbmUuYzoxMTkzOnN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuZnMvZXh0NC9pbmxpbmUuYy0xMTk0LVx0XHRcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTI5ND1pbnQgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMzQ2LVx0ICovXG5mcy9leHQ0L2lubGluZS5jOjEzNDc6XHRyZXQgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgZGlyLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtMTM0OC1cbi0tXG5mcy9leHQ0L2lubGluZS5jPTE5NDk9aW50IGV4dDRfaW5saW5lX2RhdGFfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpoYXNfaW5saW5lKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMjA2MC1cbmZzL2V4dDQvaW5saW5lLmM6MjA2MTppbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lubGluZS5jLTIwNjIte1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMjA5OC1cdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXG5mcy9leHQ0L2lubGluZS5jOjIwOTk6XHRcdGVycm9yID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtMjEwMC1cdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcdTAwMjZub19leHBhbmQpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz01OTIyPWludCBleHQ0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNjAxOS1cdFx0ICAgIGF0dHItXHUwMDNlaWFfc2l6ZSBcdTAwM2UgRVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9zaXplKSB7XG5mcy9leHQ0L2lub2RlLmM6NjAyMDpcdFx0XHRlcnJvciA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XG5mcy9leHQ0L2lub2RlLmMtNjAyMS1cdFx0XHRpZiAoZXJyb3IpXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTY3ODI9dm1fZmF1bHRfdCBleHQ0X3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5mcy9leHQ0L2lub2RlLmMtNjgwMy1cbmZzL2V4dDQvaW5vZGUuYzo2ODA0Olx0ZXJyID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcbmZzL2V4dDQvaW5vZGUuYy02ODA1LVx0aWYgKGVycilcbi0tXG5mcy9leHQ0L3Zlcml0eS5jPTEwMj1zdGF0aWMgaW50IGV4dDRfYmVnaW5fZW5hYmxlX3Zlcml0eShzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5mcy9leHQ0L3Zlcml0eS5jLTEyOC1cbmZzL2V4dDQvdmVyaXR5LmM6MTI5Olx0ZXJyID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcbmZzL2V4dDQvdmVyaXR5LmMtMTMwLVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjA3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgZXh0NCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIGV4dDQgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gZXZlcnl0aGluZyByZWxhdGVkIHRvIGlubGluZSBkYXRhLCBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cnMpLCBhbmQgYWxsIHRoZSBvdGhlciBnb29kaWVzLiBTbywgSSYjMzk7bSB0aGlua2luZywgYGZzL2V4dDQvS2NvbmZpZ2AgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgYnVpbGQtdGltZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBleHQ0IGZpbGVzeXN0ZW0gYXJlIGRlZmluZWQuIEkga25vdyBpdCYjMzk7bGwgbGlzdCB0aGUgbmVjZXNzYXJ5IEtjb25maWcgc3ltYm9scyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIHJldmlldyB3aGF0IG9wdGlvbnMgYXJlIHJlcXVpcmVkLCBhbmQgY29uc2lkZXIgaG93IHRoZXkgaW50ZXJhY3QsIHRvIGVuc3VyZSBhIHNvbGlkIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgYXBwbGljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctMzQtXG5mcy9leHQ0L0tjb25maWc6MzU6Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG5mcy9leHQ0L0tjb25maWctMzYtXHRib29sIFwmIzM0O1VzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1wmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy00NS1cbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvS2NvbmZpZy00Ny1cdGJvb2wgXCYjMzQ7RXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy01NS1cbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtFeHQ0IFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy02Ny1cbmZzL2V4dDQvS2NvbmZpZzo2ODpjb25maWcgRVhUNF9ERUJVR1xuZnMvZXh0NC9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtFeHQ0IGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTc2LVxuZnMvZXh0NC9LY29uZmlnOjc3OmNvbmZpZyBFWFQ0X0tVTklUX1RFU1RTXG5mcy9leHQ0L0tjb25maWctNzgtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgZXh0NFwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc5NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB0aGUgRXh0NCBCdWlsZCBQcm9jZXNzKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBFeHQ0IGZpbGVzeXN0ZW0gaXMgYmVpbmcgYnVpbHQuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRyYWNlIGhvdyBhIGNyaXRpY2FsIGNvbXBvbmVudCBpcyBhc3NlbWJsZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgYGZzL2V4dDQvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGZpbmQgdGhlIGJ1aWxkIHJlY2lwZS4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBmaWd1cmluZyBvdXQgaG93IHNvbWV0aGluZyBzcGVjaWZpYywgbGlrZSBgaW5saW5lLm9gLCBpcyBjcmVhdGVkLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIEV4dDQgY29kZSBiYXNlLCBhbmQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBwYXJ0IGlzIGNyZWF0ZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgZGVwZW5kZW5jaWVzLCBjb21waWxhdGlvbiBmbGFncywgYW5kIGxpbmtpbmcgcHJvY2VzcyB3aXRoaW4gdGhlIEV4dDQgbW9kdWxlLiBGcm9tIHRoZXJlLCBJIGNhbiBsaWtlbHkgZXh0cmFwb2xhdGUgdG8gYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2lkZXIgYnVpbGQgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lubGluZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXG5mcy9leHQ0L01ha2VmaWxlLTktXHRcdGV4dGVudHNfc3RhdHVzLm8gZmlsZS5vIGZzbWFwLm8gZnN5bmMubyBoYXNoLm8gaWFsbG9jLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTA6XHRcdGluZGlyZWN0Lm8gaW5saW5lLm8gaW5vZGUubyBpb2N0bC5vIG1iYWxsb2MubyBtaWdyYXRlLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGUtMTEtXHRcdG1tcC5vIG1vdmVfZXh0ZW50Lm8gbmFtZWkubyBwYWdlLWlvLm8gcmVhZHBhZ2UubyByZXNpemUubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgaW5saW5lLm9gIERlcGVuZGVuY3kqKgoKUmlnaHQsIHNvIGBpbmxpbmUub2AgYWx3YXlzIGdldHMgYnVpbHQgd2hlbiBgRVhUNF9GU2AgaXMgZW5hYmxlZCwgaHVoPyBUaGF0IGZlZWxzIGxpa2UgYSBzaWduaWZpY2FudCwgcG90ZW50aWFsbHkgaW1wbGljaXQsIGRlcGVuZGVuY3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0dGVyLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYGZzL2V4dDQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBvciBtYXliZSBldmVuIGRlZmF1bHQgc2V0dGluZ3Mgd2l0aGluIHRoYXQgS2NvbmZpZyB0aGF0IHRpZSBpbnRvIHRoZSBidWlsZCBvZiBgaW5saW5lLm9gLiBJcyBpdCBkaXJlY3RseSBjb250cm9sbGVkIGJ5IGEgc3BlY2lmaWMgb3B0aW9uLCBvciBkb2VzIGl0cyBpbmNsdXNpb24gc3RlbSBmcm9tIHNvbWUgYnJvYWRlciBkZXBlbmRlbmN5IGNoYWluIHdpdGhpbiB0aGUgRVhUNCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyAmIzM0O2Fsd2F5cyYjMzQ7IHNpdHVhdGlvbi4gR290dGEgZW5zdXJlIHRoaXMgYmVoYXZpb3IgaXMgd2VsbC11bmRlcnN0b29kIGFuZCBqdXN0aWZpYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgRVhUNF9GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbiAgIDQ6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNTpcdFx0c2VsZWN0IEpCRDJcbiAgIDY6XHRcdHNlbGVjdCBDUkMxNlxuICAgNzpcdFx0c2VsZWN0IENSQzMyXG4gICA4Olx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgIDk6XHRcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLFxuICAxNDpcdFx0ICB0aGUgb24tZGlzayBmb3JtYXQgb2YgZXh0NCBpcyBub3QgZm9yd2FyZHMgY29tcGF0aWJsZSB3aXRoXG4gIDE1Olx0XHQgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXRcbiAgMTY6XHRcdCAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkXG4gIDE3Olx0XHQgIGFsbG9jYXRpb24sIHBlcnNpc3RlbnQgcHJlYWxsb2NhdGlvbiwgaGlnaCByZXNvbHV0aW9uIHRpbWUgc3RhbXBzLFxuICAxODpcdFx0ICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWRcbiAgMTk6XHRcdCAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdFxuICAyMDpcdFx0ICBodHRwOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcuXG4gIDIxOlx0XG4gIDIyOlx0XHQgIFRoZSBleHQ0IGZpbGVzeXN0ZW0gc3VwcG9ydHMgbW91bnRpbmcgYW4gZXh0MyBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZVxuICAyMzpcdFx0ICBhcmUgc29tZSBwZXJmb3JtYW5jZSBnYWlucyBmcm9tIHRoZSBkZWxheWVkIGFsbG9jYXRpb24gYW5kIGlub2RlXG4gIDI0Olx0XHQgIHRhYmxlIHJlYWRhaGVhZCwgdGhlIGJlc3QgcGVyZm9ybWFuY2UgZ2FpbnMgcmVxdWlyZSBlbmFibGluZyBleHQ0XG4gIDI1Olx0XHQgIGZlYXR1cmVzIGluIHRoZSBmaWxlc3lzdGVtIHVzaW5nIHR1bmUyZnMsIG9yIGZvcm1hdHRpbmcgYSBuZXdcbiAgMjY6XHRcdCAgZmlsZXN5c3RlbSBhcyBhbiBleHQ0IGZpbGVzeXN0ZW0gaW5pdGlhbGx5LiBXaXRob3V0IGV4cGxpY2l0IGVuYWJsaW5nXG4gIDI3Olx0XHQgIG9mIGV4dDQgZmVhdHVyZXMsIHRoZSBvbiBkaXNrIGZpbGVzeXN0ZW0gZm9ybWF0IHN0YXlzIGZ1bGx5IGJhY2t3YXJkXG4gIDI4Olx0XHQgIGNvbXBhdGlibGUuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGVcbiAgMzE6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDQuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4gIDM2Olx0XHRib29sIFwmIzM0O1VzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1wmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXG4gIDM4Olx0XHRkZXBlbmRzIG9uIEVYVDJfRlM9blxuICAzOTpcdFx0ZGVmYXVsdCB5XG4gIDQwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDUyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgZXh0NCBJbmxpbmUgRGF0YSBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZXNlIG1vZGlmaWNhdGlvbnMuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgZGVmaW5pdGVseSB0aGUgYGZzL2V4dDQvaW5saW5lLmNgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgaW5saW5lIGRhdGEgaW1wbGVtZW50YXRpb24gZGV0YWlscyB3aWxsIGJlIGhhbmdpbmcgb3V0LiBJJiMzOTttIGdvaW5nIHRvIHBvcmUgb3ZlciB0aGF0IGNvZGUg4oCTIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBpcyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGV4aXN0aW5nIG1lY2hhbmlzbXMgaGF2ZSBiZWVuIGFkYXB0ZWQsIGV4dGVuZGVkLCBvciByZXBsYWNlZCB0byBzdXBwb3J0IHRoZXNlIGlubGluZSBjYXBhYmlsaXRpZXMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eTogZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlcywgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCB0aGUgaGFuZGxpbmcgb2YgbWV0YWRhdGEsIGFuZCwgb2YgY291cnNlLCBob3cgdGhleSYjMzk7dmUgaW50ZWdyYXRlZCBpdCB3aXRoIHRoZSBleGlzdGluZyBleHQ0IGZpbGUgc3lzdGVtIGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgSSBjYW4gdW5lYXJ0aCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2lubGluZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2NTpcdFx0XHRyZXR1cm4gcmV0O1xuMTA2NjpcdFxuMTA2NzpcdFx0ZXh0NF91cGRhdGVfZmluYWxfZGUoZXh0NF9nZXRfaW5saW5lX3hhdHRyX3BvcyhkaXIsIGlsb2MpLCBvbGRfc2l6ZSxcbjEwNjg6XHRcdFx0XHQgICAgIEVYVDRfSShkaXIpLVx1MDAzZWlfaW5saW5lX3NpemUgLVxuMTA2OTpcdFx0XHRcdFx0XHRcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuMTA3MDpcdFx0ZGlyLVx1MDAzZWlfc2l6ZSA9IEVYVDRfSShkaXIpLVx1MDAzZWlfZGlza3NpemUgPSBFWFQ0X0koZGlyKS1cdTAwM2VpX2lubGluZV9zaXplO1xuMTA3MTpcdFx0cmV0dXJuIDA7XG4xMDcyOlx0fVxuMTA3MzpcdFxuMTA3NDpcdHN0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLFxuMTA3NTpcdFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgbGVuLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuMTA3NjpcdHtcbjEwNzc6XHRcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbjEwNzg6XHRcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7XG4xMDc5Olx0XHRcdC5zID0geyAubm90X2ZvdW5kID0gLUVOT0RBVEEsIH0sXG4xMDgwOlx0XHR9O1xuMTA4MTpcdFx0c3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpID0ge1xuMTA4MjpcdFx0XHQubmFtZV9pbmRleCA9IEVYVDRfWEFUVFJfSU5ERVhfU1lTVEVNLFxuMTA4MzpcdFx0XHQubmFtZSA9IEVYVDRfWEFUVFJfU1lTVEVNX0RBVEEsXG4xMDg0Olx0XHRcdC52YWx1ZSA9IE5VTEwsXG4xMDg1Olx0XHRcdC52YWx1ZV9sZW4gPSAwLFxuMTA4NjpcdFx0fTtcbjEwODc6XHRcdGludCBlcnJvcjtcbjEwODg6XHRcdHZvaWQgKmlfYmxvY2tfYnVmID0gTlVMTDtcbjEwODk6XHRcdHZvaWQgKnhhdHRyX2J1ZiA9IE5VTEw7XG4xMDkwOlx0XHR2b2lkICpoZWFkZXIgPSBOVUxMO1xuMTA5MTpcdFx0dm9pZCAqdGFpbCA9IE5VTEw7XG4xMDkyOlx0XHRpbnQgeGF0dHJfc2l6ZTtcbjEwOTM6XHRcdHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGU7XG4xMDk0Olx0XG4xMDk1Olx0XHRpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpO1xuMTA5NjpcdFx0aWYgKCFpX2Jsb2NrX2J1Zikge1xuMTA5NzpcdFx0XHRlcnJvciA9IC1FTk9NRU07XG4xMDk4Olx0XHRcdGRvd25fd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4xMDk5Olx0XHRcdGdvdG8gZXJyb3I7XG4xMTAwOlx0XHR9XG4xMTAxOlx0XHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuMTEwMjpcdFx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuMTEwMzpcdFx0aWYgKGVycm9yKVxuMTEwNDpcdFx0XHRnb3RvIGVycm9yO1xuMTEwNTpcdFx0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoXHUwMDI2aXMuaWxvYyk7XG4xMTA2Olx0XHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xuMTEwNzpcdFx0dGFpbCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpO1xuMTEwODpcdFx0eGF0dHJfc2l6ZSA9IHRhaWwgLSBoZWFkZXI7XG4xMTA5Olx0XHR4YXR0cl9idWYgPSBrbWFsbG9jKHhhdHRyX3NpemUsIEdGUF9OT0ZTKTtcbjExMTA6XHRcdGlmICgheGF0dHJfYnVmKSB7XG4xMTExOlx0XHRcdGVycm9yID0gLUVOT01FTTtcbjExMTI6XHRcdFx0Z290byBlcnJvcjtcbjExMTM6XHRcdH1cbjExMTQ6XHRcdEJVRkZFUl9UUkFDRShpcy5pbG9jLmJoLCBcJiMzNDtnZXRfd3JpdGVfYWNjZXNzXCYjMzQ7KTtcbjExMTU6XHRcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cdTAwM2VpX3NiLCBpcy5pbG9jLmJoLCBFWFQ0X0pUUl9OT05FKTtcbjExMTY6XHRcdGlmIChlcnJvcilcbjExMTc6XHRcdFx0Z290byBlcnJvcjtcbjExMTg6XHRcdG1lbWNweShpX2Jsb2NrX2J1ZiwgKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4xMTE5Olx0XHRtZW1zZXQoKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4xMTIwOlx0XHRtZW1zZXQoZWktXHUwMDNlaV9kYXRhLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbjExMjE6XHRcdG1lbWNweSh4YXR0cl9idWYsIGhlYWRlciwgeGF0dHJfc2l6ZSk7XG4xMTIyOlx0XHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9leHRlbnRzKGlub2RlLVx1MDAzZWlfc2IpIFx1MDAyNlx1MDAyNlxuMTEyMzpcdFx0XHQoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpKSB7XG4xMTI0Olx0XHRcdGV4dDRfc2V0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4xMTI1Olx0XHRcdGV4dDRfZXh0X3RyZWVfaW5pdChoYW5kbGUsIGlub2RlKTtcbjExMjY6XHRcdFx0c3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCAwLCBOVUxMLCAwKTtcbjExMjc6XHRcbjExMjg6XHRcdFx0aWYgKElTX0VSUihwYXRoKSkge1xuMTEyOTpcdFx0XHRcdGVycm9yID0gUFRSX0VSUihwYXRoKTtcbjExMzA6XHRcdFx0XHRnb3RvIHJlY292ZXJ5O1xuMTEzMTpcdFx0XHR9XG4xMTMyOlx0XHRcdHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleDtcbjExMzM6XHRcbjExMzQ6XHRcdFx0bmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMigwKTtcbjExMzU6XHRcdFx0bmV3ZXguZWVfbGVuID0gY3B1X3RvX2xlMTYoMSk7XG4xMTM2Olx0XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcdTAwMjZuZXdleCwgYmxvY2spO1xuMTEzNzpcdFx0XHRwYXRoID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCBcdTAwMjZuZXdleCwgMCk7XG4xMTM4Olx0XHRcdGlmIChJU19FUlIocGF0aCkpIHtcbjExMzk6XHRcdFx0XHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XG4xMTQwOlx0XHRcdFx0aWYgKGVycm9yID09IC1FRFFVT1QgfHwgZXJyb3IgPT0gLUVOT1NQQylcbjExNDE6XHRcdFx0XHRcdGdvdG8gcmVjb3Zlcnk7XG4xMTQyOlx0XHRcdFx0ZWxzZVxuMTE0MzpcdFx0XHRcdFx0Z290byBub19mcmVlO1xuMTE0NDpcdFx0XHR9IGVsc2Uge1xuMTE0NTpcdFx0XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbjExNDY6XHRcdFx0fVxuMTE0NzpcdFx0fSBlbHNlIHtcbjExNDg6XHRcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7XG4xMTQ5Olx0XHR9XG4xMTUwOlx0XHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXHUwMDI2aSwgXHUwMDI2aXMpO1xuMTE1MTpcdFx0aWYgKGVycm9yKVxuMTE1MjpcdFx0XHRnb3RvIHJlY292ZXJ5O1xuMTE1MzpcdFx0aWYgKCFpcy5zLm5vdF9mb3VuZClcbjExNTQ6XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4xMTU1Olx0cmVjb3Zlcnk6XG4xMTU2Olx0XHRpZiAoZXJyb3IpIHtcbjExNTc6XHRcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbjExNTg6XHRcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbjExNTk6XHRcdFx0bWVtY3B5KGhlYWRlciwgeGF0dHJfYnVmLCB4YXR0cl9zaXplKTtcbjExNjA6XHRub19mcmVlOlxuMTE2MTpcdFx0XHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xuMTE2MjpcdFx0XHRtZW1jcHkoKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgaV9ibG9ja19idWYsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuMTE2MzpcdFx0XHRtZW1jcHkoZWktXHUwMDNlaV9kYXRhLCByYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4xMTY0Olx0XHRcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNDIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIERlZXBlciBpbnRvIElubGluZSBEYXRhIGluIGV4dDQqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYGZzL2V4dDQvaW5saW5lLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhpcyBhcmVhLiBJdCBzZWVtcyBsaWtlIHRoZSBpbW1lZGlhdGUgY29udGV4dCBpc24mIzM5O3QgZW5vdWdoLCBzbyBsZXQmIzM5O3Mgem9vbSBvdXQgYSBiaXQuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IGlubGluZSBkYXRhIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhpcyBmaWxlLCBwZXJoYXBzIHRyYWNpbmcgZXhlY3V0aW9uIHBhdGhzIGZyb20gcmVsYXRlZCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgYmxvY2sgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGNvZGUsIGJlY2F1c2UgdGhlIGlubGluZSBkYXRhIHN0b3JhZ2UgaXMgc3VjaCBhbiBpbnRlcmVzdGluZyBvcHRpbWl6YXRpb24uIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgbWlnaHQgYmUgbWlzc2luZy4gSSBuZWVkIHRvIHZlcmlmeSBhc3N1bXB0aW9ucyBhYm91dCBob3cgZGF0YSBpcyByZWFkIGFuZCB3cml0dGVuIGluIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby4gSXQmIzM5O3MgdGltZSB0byB0aG9yb3VnaGx5IHNjcnV0aW5pemUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5saW5lLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTY1Olx0XHRcdGdldF9iaChpcy5pbG9jLmJoKTtcbjExNjY6XHRcdFx0ZXh0NF9tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgXHUwMDI2aXMuaWxvYyk7XG4xMTY3Olx0XHR9IGVsc2Uge1xuMTE2ODpcdFx0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xuMTE2OTpcdFx0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4xMTcwOlx0XHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbjExNzE6XHRcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuMTE3MjpcdFx0XHR9XG4xMTczOlx0XHRcdGdldF9iaChpcy5pbG9jLmJoKTtcbjExNzQ6XHRcdFx0ZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbjExNzU6XHRcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9vZmYgPSAwO1xuMTE3NjpcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xuMTE3NzpcdFx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4xMTc4Olx0XHRcdGJyZWxzZShiaCk7XG4xMTc5Olx0XHR9XG4xMTgwOlx0XHRnb3RvIG91dDtcbjExODE6XHRlcnJvcjpcbjExODI6XHRcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7XG4xMTgzOlx0XHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xuMTE4NDpcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbjExODU6XHRvdXQ6XG4xMTg2Olx0XHRicmVsc2UoaXMuaWxvYy5iaCk7XG4xMTg3Olx0XHR1cF93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbjExODg6XHRcdGtmcmVlKGlfYmxvY2tfYnVmKTtcbjExODk6XHRcdGtmcmVlKHhhdHRyX2J1Zik7XG4xMTkwOlx0XHRyZXR1cm4gZXJyb3I7XG4xMTkxOlx0fVxuMTE5MjpcdFxuMTE5MzpcdHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuMTE5NDpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuMTE5NTpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKVxuMTE5NjpcdHtcbjExOTc6XHRcdGludCBlcnJvcjtcbjExOTg6XHRcdHZvaWQgKmJ1ZiA9IE5VTEw7XG4xMTk5Olx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbjEyMDA6XHRcdGludCBpbmxpbmVfc2l6ZTtcbjEyMDE6XHRcdGV4dDRfZnNibGtfdCBuZXdibG9jayA9IDA7XG4xMjAyOlx0XHRzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXI7XG4xMjAzOlx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuMTIwNDpcdFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jaztcbjEyMDU6XHRcbjEyMDY6XHRcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xuMTIwNzpcdFx0YnVmID0ga21hbGxvYyhpbmxpbmVfc2l6ZSwgR0ZQX05PRlMpO1xuMTIwODpcdFx0aWYgKCFidWYpIHtcbjEyMDk6XHRcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuMTIxMDpcdFx0XHRnb3RvIG91dDtcbjEyMTE6XHRcdH1cbjEyMTI6XHRcbjEyMTM6XHRcdGVycm9yID0gZXh0NF9yZWFkX2lubGluZV9kYXRhKGlub2RlLCBidWYsIGlubGluZV9zaXplLCBpbG9jKTtcbjEyMTQ6XHRcdGlmIChlcnJvciBcdTAwM2MgMClcbjEyMTU6XHRcdFx0Z290byBvdXQ7XG4xMjE2Olx0XG4xMjE3Olx0XHQvKlxuMTIxODpcdFx0ICogTWFrZSBzdXJlIHRoZSBpbmxpbmUgZGlyZWN0b3J5IGVudHJpZXMgcGFzcyBjaGVja3MgYmVmb3JlIHdlIHRyeSB0b1xuMTIxOTpcdFx0ICogY29udmVydCB0aGVtLCBzbyB0aGF0IHdlIGF2b2lkIHRvdWNoaW5nIHN0dWZmIHRoYXQgbmVlZHMgZnNjay5cbjEyMjA6XHRcdCAqL1xuMTIyMTpcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuMTIyMjpcdFx0XHRlcnJvciA9IGV4dDRfY2hlY2tfYWxsX2RlKGlub2RlLCBpbG9jLVx1MDAzZWJoLFxuMTIyMzpcdFx0XHRcdFx0XHRidWYgJiM0MzsgRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUsXG4xMjI0Olx0XHRcdFx0XHRcdGlubGluZV9zaXplIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUpO1xuMTIyNTpcdFx0XHRpZiAoZXJyb3IpXG4xMjI2Olx0XHRcdFx0Z290byBvdXQ7XG4xMjI3Olx0XHR9XG4xMjI4Olx0XG4xMjI5Olx0XHRtZW1zZXQoXHUwMDI2YXIsIDAsIHNpemVvZihhcikpO1xuMTIzMDpcdFx0YXIuaW5vZGUgPSBpbm9kZTtcbjEyMzE6XHRcdGFyLmxvZ2ljYWwgPSAwO1xuMTIzMjpcdFx0YXIubGVuID0gMTtcbjEyMzM6XHRcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4xMjM0Olx0XHRcdGFyLmZsYWdzID0gRVhUNF9NQl9ISU5UX0RBVEE7XG4xMjM1Olx0XHRlbHNlXG4xMjM2Olx0XHRcdGFyLmZsYWdzID0gMDtcbjEyMzc6XHRcdG5ld2Jsb2NrID0gZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZSwgXHUwMDI2YXIsIFx1MDAyNmVycm9yKTtcbjEyMzg6XHRcdGlmIChlcnJvciBcdTAwM2MgMClcbjEyMzk6XHRcdFx0Z290byBvdXQ7XG4xMjQwOlx0XHRhbGxvY2F0ZWRfYmxvY2sgPSBFWFQ0X0MyQihzYmksIGFyLmxlbik7XG4xMjQxOlx0XHRiaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLCBuZXdibG9jayk7XG4xMjQyOlx0XHRpZiAoIWJoKSB7XG4xMjQzOlx0XHRcdGVycm9yID0gLUVOT01FTTtcbjEyNDQ6XHRcdFx0Z290byBvdXRfYmg7XG4xMjQ1Olx0XHR9XG4xMjQ2Olx0XG4xMjQ3Olx0XHRsb2NrX2J1ZmZlcihiaCk7XG4xMjQ4Olx0XHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLVx1MDAzZWlfc2IsIGJoLFxuMTI0OTpcdFx0XHRcdFx0XHQgICAgICAgRVhUNF9KVFJfTk9ORSk7XG4xMjUwOlx0XHRpZiAoZXJyb3IpIHtcbjEyNTE6XHRcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4xMjUyOlx0XHRcdGVycm9yID0gLUVJTztcbjEyNTM6XHRcdFx0Z290byBvdXRfYmg7XG4xMjU0Olx0XHR9XG4xMjU1Olx0XHRtZW1zZXQoYmgtXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbjEyNTY6XHRcbjEyNTc6XHRcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4xMjU4Olx0XHRcdG1lbWNweShiaC1cdTAwM2ViX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpO1xuMTI1OTpcdFx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbjEyNjA6XHRcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4xMjYxOlx0XHRcdGVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLFxuMTI2MjpcdFx0XHRcdFx0XHRcdCAgIGlub2RlLCBiaCk7XG4xMjYzOlx0XHR9IGVsc2Uge1xuMTI2NDpcdFx0XHR1bmxvY2tfYnVmZmVyKGJoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5OTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGV4dDQgSW5saW5lIERhdGEgQ29udmVyc2lvbiBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBmcy9leHQ0L2lubGluZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBhbmQgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYC4gRmlyc3QsIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGdldCBhIHNlbnNlIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuCgpgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AgaXMgY2FsbGVkIGJ5IHR3byBmdW5jdGlvbnM6IGBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5YCBhbmQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAuICBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCwgaW4gdHVybiwgaXMgYSBrZXkgZnVuY3Rpb24sIGFzIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCBjYWxsZWQgZnJvbSBzZXZlcmFsIGNyaXRpY2FsIGFyZWFzOiBgZXh0NF9zZXRhdHRyYCwgYGV4dDRfZmFsbG9jYXRlYCwgYGV4dDRfcGFnZV9ta3dyaXRlYCwgYGV4dDRfYmVnaW5fZW5hYmxlX3Zlcml0eWAgYW5kIGBleHQ0X3NldF9jb250ZXh0YCAod2hpY2ggaXMgZnNjcnlwdCByZWxhdGVkLCBnb29kIHRvIGtlZXAgaW4gbWluZCkuCgpOb3csIGBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5YCBpcyBjYWxsZWQgZnJvbSBgZXh0NF9hZGRfZW50cnlgIGxvY2F0ZWQgaW4gYGZzL2V4dDQvbmFtZWkuY2AuIEdvb2QsIHRoYXQgZ2l2ZXMgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGluZ3MgZml0LgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMuIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgaXMgc3RhdGljLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkLiBTYW1lIGdvZXMgZm9yIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYC4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBpbnRlcm5hbCB0byB0aGUgYC5jYCBmaWxlLiBIb3dldmVyLCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBpcyAqbm90KiBzdGF0aWMsIHNvIGl0JiMzOTtzIGV4cG9ydGVkLCBhbmQgYGV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlgIGlzIGFsc28gbm90IHN0YXRpYy4gVGhhdCYjMzk7cyBjb25zaXN0ZW50IHdpdGggd2hhdCBJJiMzOTt2ZSBzZWVuIHdpdGggdGhlIGNhbGwgZ3JhcGguCgpUaW1lIHRvIGRyaWxsIGludG8gdGhlIGNhbGxlcnMgYW5kIGRlZmluaXRpb25zIG9mIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgIG5vdywgc2luY2UgaXQgc2VlbXMgdG8gYmUgdGhlIGxpbmNocGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0zNzk2PWV4dGVybiBpbnQgZXh0NF9pbmxpbmVfZGF0YV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgKmhhc19pbmxpbmUpO1xuZnMvZXh0NC9leHQ0LmgtMzc5Ny1cbmZzL2V4dDQvZXh0NC5oOjM3OTg6ZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9leHQ0L2V4dDQuaC0zNzk5LVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9NTQ2PWludCBleHQ0X3JlYWRwYWdlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNTcyLVxuZnMvZXh0NC9pbmxpbmUuYzo1NzM6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvZXh0NC9pbmxpbmUuYy01NzQtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xMDc0PXN0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTE5Mi1cbmZzL2V4dDQvaW5saW5lLmM6MTE5MzpzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbmZzL2V4dDQvaW5saW5lLmMtMTE5NC1cdFx0XHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jPTE5NDk9aW50IGV4dDRfaW5saW5lX2RhdGFfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpoYXNfaW5saW5lKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMjA2MC1cbmZzL2V4dDQvaW5saW5lLmM6MjA2MTppbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lubGluZS5jLTIwNjIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIzMgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBJbmxpbmUgRGF0YSBDb252ZXJzaW9uIENoYW5nZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtb2RpZmljYXRpb24gdG8gdGhlIGV4dDQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYy4gRmlyc3QsIEkgc2hvdWxkIHZlcmlmeSB0aGF0IGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgYW5kIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCwgZXZlbiB0aGUgc3RhdGljIGZ1bmN0aW9ucyBpbnZvbHZlZCwgYXJlIGFjY2Vzc2libGUgc3ltYm9scy4gS25vd2luZyB0aGUgTGludXgga2VybmVsJiMzOTtzIHN5bWJvbCBiZWhhdmlvciwgSSYjMzk7bSBwcmV0dHkgc3VyZSBzdGF0aWMgZnVuY3Rpb25zIGluIGAuY2AgZmlsZXMgKmFyZSogc3ltYm9scyB1bmxlc3MgaW5saW5lZC4gQnV0IGp1c3QgdG8gYmUgc2FmZSwgSSYjMzk7bGwgaW5jbHVkZSB0aG9zZSBmdW5jdGlvbnMgYWxvbmcgd2l0aCB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIGxpa2UgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgYW5kIGBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5YCDigJMgdGhhdCYjMzk7cyBnb29kIHByYWN0aWNlIGZvciBkZWJ1Z2dpbmcsIGFuZCBmdXp6aW5nIGxhdGVyLgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSBgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhYCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AuIEludGVyZXN0aW5nLiBNb3JlIHNpZ25pZmljYW50bHksIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBoYXMgYmVlbiByZXdvcmtlZC4gUHJldmlvdXNseSwgaXQgZGVzdHJveWVkIHRoZSBpbmxpbmUgZGF0YSBhbmQgdGhlbiB1c2VkIGBleHQ0X21hcF9ibG9ja3NgLiBOb3csIGl0JiMzOTtzIGFsbG9jYXRpbmcgbmV3IGJsb2NrcyB1c2luZyBgZXh0NF9tYl9uZXdfYmxvY2tzYCwgd3JpdGluZyBkYXRhIHRvIHRoZSBidWZmZXIgaGVhZCwgYW5kIHRoZW4gKnVzaW5nKiBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIHRvIGluc2VydCB0aGUgZXh0ZW50IG9yIGJsb2NrICphbmQqIHJlbW92ZSB0aGUgaW5saW5lIGRhdGEgeGF0dHIuIE9mIGNvdXJzZSwgd2UmIzM5O3JlIGJ1aWxkaW5nIGluIGVycm9yIHJlY292ZXJ5IGZvciBhbGxvY2F0aW9uIG9yIGV4dGVudCBpbnNlcnRpb24gZmFpbHVyZXMuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IGlubGluZSBkYXRhIGlzIGNvbnZlcnRlZCwgcmVhbGx5IGRyaWxsaW5nIGRvd24gb24gdGhlIGNvcmUgbG9naWMuCgpHaXZlbiB0aGF0IGV4dDQgaXMgYSBjb3JlIGZpbGVzeXN0ZW0sIGZ1bGx5IGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBzeXNjYWxscyB0aGF0IHdlIHVzZSBhbGwgdGhlIHRpbWUgKGBmYWxsb2NhdGVgLCBgdHJ1bmNhdGVgLCBgd3JpdGVgLCBgbWtkaXJgLCBgb3BlbmAsIGV0Yy4pIHRoaXMgaXMgcmlwZSBmb3IgZnV6emluZy4KCkRlZmluaXRlbHkgd29ydGggdGhlIGVmZm9ydCEgVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSwgY29yZSBmaWxlc3lzdGVtIGNvZGUgc3BlY2lmaWNhbGx5IGluIGBmcy9leHQ0L2lubGluZS5jYC4gQmVmb3JlIEkgcHJvY2VlZCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWdzLiBgQ09ORklHX0VYVDRfRlNgIGlzIGEgZ2l2ZW4sIG9idmlvdXNseS4gSSBhbHNvIG5lZWQgdG8gZW5zdXJlIG5vIG90aGVyIGNvbmZpZ3MgYXJlIHJlcXVpcmVkIGFuZCBzcGVjaWZpY2FsbHkgdmVyaWZ5IGFueSBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBkaWcgaW50byB0aGUgZXh0NCBLY29uZmlnIGFuZCBjb2RlIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIGlubGluZSBkYXRhLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SU5MSU5FX0RBVEEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvY3J5cHRvLmM9MTMyPXN0YXRpYyBpbnQgZXh0NF9zZXRfY29udGV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICpjdHgsIHNpemVfdCBsZW4sXG4tLVxuZnMvZXh0NC9jcnlwdG8uYy0xNzktXHRcdFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSxcbmZzL2V4dDQvY3J5cHRvLmM6MTgwOlx0XHRcdFx0XHRFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG5mcy9leHQ0L2NyeXB0by5jLTE4MS1cdFx0XHQvKlxuLS1cbmZzL2V4dDQvZXh0NC5oPTQ0MD1zdHJ1Y3QgZmxleF9ncm91cHMge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTUwOS1cbmZzL2V4dDQvZXh0NC5oOjUxMDojZGVmaW5lIEVYVDRfSU5MSU5FX0RBVEFfRkxcdFx0MHgxMDAwMDAwMCAvKiBJbm9kZSBoYXMgaW5saW5lIGRhdGEuICovXG5mcy9leHQ0L2V4dDQuaC01MTEtI2RlZmluZSBFWFQ0X1BST0pJTkhFUklUX0ZMXHRcdDB4MjAwMDAwMDAgLyogQ3JlYXRlIHdpdGggcGFyZW50cyBwcm9qaWQgKi9cbi0tXG5mcy9leHQ0L2V4dDQuaC01NDEtXHRcdFx0XHRcdCBFWFQ0X1ZFUklUWV9GTCB8IFxcXG5mcy9leHQ0L2V4dDQuaDo1NDI6XHRcdFx0XHRcdCBFWFQ0X0lOTElORV9EQVRBX0ZMKVxuZnMvZXh0NC9leHQ0LmgtNTQzLVxuLS1cbmZzL2V4dDQvZXh0NC5oLTU2My0jZGVmaW5lIEVYVDRfREFYX01VVF9FWENMIChFWFQ0X1ZFUklUWV9GTCB8IEVYVDRfRU5DUllQVF9GTCB8XFxcbmZzL2V4dDQvZXh0NC5oOjU2NDpcdFx0XHQgICBFWFQ0X0pPVVJOQUxfREFUQV9GTCB8IEVYVDRfSU5MSU5FX0RBVEFfRkwpXG5mcy9leHQ0L2V4dDQuaC01NjUtXG4tLVxuZnMvZXh0NC9leHQ0Lmg9NTgwPWVudW0ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTYwNi1cdEVYVDRfSU5PREVfREFYXHRcdD0gMjUsXHQvKiBJbm9kZSBpcyBEQVggKi9cbmZzL2V4dDQvZXh0NC5oOjYwNzpcdEVYVDRfSU5PREVfSU5MSU5FX0RBVEFcdD0gMjgsXHQvKiBEYXRhIGluIGlub2RlLiAqL1xuZnMvZXh0NC9leHQ0LmgtNjA4LVx0RVhUNF9JTk9ERV9QUk9KSU5IRVJJVFx0PSAyOSxcdC8qIENyZWF0ZSB3aXRoIHBhcmVudHMgcHJvamlkICovXG4tLVxuZnMvZXh0NC9leHQ0Lmg9NjI5PXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2NoZWNrX2ZsYWdfdmFsdWVzKHZvaWQpXG4tLVxuZnMvZXh0NC9leHQ0LmgtNjUyLVx0Q0hFQ0tfRkxBR19WQUxVRShFQV9JTk9ERSk7XG5mcy9leHQ0L2V4dDQuaDo2NTM6XHRDSEVDS19GTEFHX1ZBTFVFKElOTElORV9EQVRBKTtcbmZzL2V4dDQvZXh0NC5oLTY1NC1cdENIRUNLX0ZMQUdfVkFMVUUoUFJPSklOSEVSSVQpO1xuLS1cbmZzL2V4dDQvZXh0NC5oPTIwMjY9ZW51bSB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMjAzMi1cdEVYVDRfU1RBVEVfTkVXRU5UUlksXHRcdC8qIEZpbGUganVzdCBhZGRlZCB0byBkaXIgKi9cbmZzL2V4dDQvZXh0NC5oOjIwMzM6XHRFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSxcdC8qIG1heSBoYXZlIGluLWlub2RlIGRhdGEgKi9cbmZzL2V4dDQvZXh0NC5oLTIwMzQtXHRFWFQ0X1NUQVRFX0VYVF9QUkVDQUNIRUQsXHQvKiBleHRlbnRzIGhhdmUgYmVlbiBwcmVjYWNoZWQgKi9cbi0tXG5mcy9leHQ0L2V4dDQuaD0yMTI5PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICpleHQ0X2lfbWV0YWRhdGFfYmhzKFxuLS1cbmZzL2V4dDQvZXh0NC5oLTIyMTktI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTEFSR0VESVJcdFx0MHg0MDAwIC8qIFx1MDAzZTJHQiBvciAzLWx2bCBodHJlZSAqL1xuZnMvZXh0NC9leHQ0Lmg6MjIyMDojZGVmaW5lIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9JTkxJTkVfREFUQVx0MHg4MDAwIC8qIGRhdGEgaW4gaW5vZGUgKi9cbmZzL2V4dDQvZXh0NC5oLTIyMjEtI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRU5DUllQVFx0XHQweDEwMDAwXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MjMxOD1FWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRlVOQ1MobGFyZ2VkaXIsXHRcdExBUkdFRElSKVxuZnMvZXh0NC9leHQ0Lmg6MjMxOTpFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRlVOQ1MoaW5saW5lX2RhdGEsXHRJTkxJTkVfREFUQSlcbmZzL2V4dDQvZXh0NC5oLTIzMjAtRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZVTkNTKGVuY3J5cHQsXHRcdEVOQ1JZUFQpXG5mcy9leHQ0L2V4dDQuaD0yMzIxPUVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GVU5DUyhjYXNlZm9sZCxcdFx0Q0FTRUZPTEQpXG4tLVxuZnMvZXh0NC9leHQ0LmgtMjM0Ny1cdFx0XHRcdFx0IEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9NTVAgfCBcXFxuZnMvZXh0NC9leHQ0Lmg6MjM0ODpcdFx0XHRcdFx0IEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9JTkxJTkVfREFUQSB8IFxcXG5mcy9leHQ0L2V4dDQuaC0yMzQ5LVx0XHRcdFx0XHQgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0VOQ1JZUFQgfCBcXFxuLS1cbmZzL2V4dDQvZXh0NC5oPTMxNDk9dm9pZCBleHQ0X3NldF9pbm9kZV9tYXBwaW5nX29yZGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvZXh0NC9leHQ0LmgtMzE1MC0jZGVmaW5lIEZBTExfQkFDS19UT19OT05ERUxBTExPQyAxXG5mcy9leHQ0L2V4dDQuaDozMTUxOiNkZWZpbmUgQ09OVkVSVF9JTkxJTkVfREFUQVx0IDJcbmZzL2V4dDQvZXh0NC5oLTMxNTItXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MzgwMD1zdGF0aWMgaW5saW5lIGludCBleHQ0X2hhc19pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZXh0NC9leHQ0LmgtMzgwMS17XG5mcy9leHQ0L2V4dDQuaDozODAyOlx0cmV0dXJuIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvZXh0NC5oLTM4MDMtXHQgICAgICAgRVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9vZmY7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NTk1MD1pbnQgZXh0NF9jbHVfbWFwcGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxjbHUpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTk2Mi1cdCAqL1xuZnMvZXh0NC9leHRlbnRzLmM6NTk2MzpcdGlmIChleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSB8fFxuZnMvZXh0NC9leHRlbnRzLmMtNTk2NC1cdCAgICBleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NjIyOT1pbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy02MjM2LVxuZnMvZXh0NC9leHRlbnRzLmM6NjIzNzpcdGlmIChleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpXG5mcy9leHQ0L2V4dGVudHMuYy02MjM4LVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTExMT1zdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTEzMi1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxMTMzOlx0aWYgKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xMTM0LVx0XHRpbm9kZV9sZW4gPSBFWFQ0X0lOT0RFX1NJWkUoaW5vZGUtXHUwMDNlaV9zYik7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE5NDQ9c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTkzLVx0XHR9XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTk5NDpcdH0gZWxzZSBpZiAobGUzMl90b19jcHUocmF3X2lub2RlLVx1MDAzZWlfZmxhZ3MpIFx1MDAyNiBFWFQ0X0lOTElORV9EQVRBX0ZMKSB7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTk5NS1cdFx0bWVtY3B5KHJhd19pbm9kZS1cdTAwM2VpX2Jsb2NrLCByYXdfZmNfaW5vZGUtXHUwMDNlaV9ibG9jayxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjAyMy1cdCAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIwMjQ6XHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDI1LVx0XHRleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMzI4PXN0YXRpYyB2b2lkIGV4dDRfZmNfc2V0X2JpdG1hcHNfYW5kX2NvdW50ZXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzNDctXHRcdGVuZCA9IEVYVF9NQVhfQkxPQ0tTO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIzNDg6XHRcdGlmIChleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpIHtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzQ5LVx0XHRcdGlwdXQoaW5vZGUpO1xuLS1cbmZzL2V4dDQvZmlsZS5jPTUyMT1zdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL2V4dDQvZmlsZS5jLTU3MC1cdCAqL1xuZnMvZXh0NC9maWxlLmM6NTcxOlx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuZnMvZXh0NC9maWxlLmMtNTcyLVxuLS1cbmZzL2V4dDQvaWFsbG9jLmM9OTMzPXN0cnVjdCBpbm9kZSAqX19leHQ0X25ld19pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9leHQ0L2lhbGxvYy5jLTEzMDktXHQgICAgKCEoZWktXHUwMDNlaV9mbGFncyBcdTAwMjYgKEVYVDRfREFYX0ZMfEVYVDRfRUFfSU5PREVfRkwpKSB8fCBTX0lTRElSKG1vZGUpKSlcbmZzL2V4dDQvaWFsbG9jLmM6MTMxMDpcdFx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbmZzL2V4dDQvaWFsbG9jLmMtMTMxMS1cdHJldCA9IGlub2RlO1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTktI2RlZmluZSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBXHRcJiMzNDtkYXRhXCYjMzQ7XG5mcy9leHQ0L2lubGluZS5jOjIwOiNkZWZpbmUgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRVx0KChzaXplb2YoX19sZTMyKSAqIEVYVDRfTl9CTE9DS1MpKVxuZnMvZXh0NC9pbmxpbmUuYy0yMS0jZGVmaW5lIEVYVDRfSU5MSU5FX0RPVERPVF9PRkZTRVRcdDJcbi0tXG5mcy9leHQ0L2lubGluZS5jPTExMj1pbnQgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMzYtXG5mcy9leHQ0L2lubGluZS5jOjEzNzpcdHJldHVybiBtYXhfaW5saW5lX3NpemUgJiM0MzsgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRTtcbmZzL2V4dDQvaW5saW5lLmMtMTM4LX1cbi0tXG5mcy9leHQ0L2lubGluZS5jPTE0NT1pbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTc1LVx0XHRcdFx0XHQodm9pZCAqKWV4dDRfcmF3X2lub2RlKFx1MDAyNmlzLmlsb2MpKTtcbmZzL2V4dDQvaW5saW5lLmM6MTc2Olx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFICYjNDM7XG5mcy9leHQ0L2lubGluZS5jLTE3Ny1cdFx0XHRcdGxlMzJfdG9fY3B1KGlzLnMuaGVyZS1cdTAwM2VlX3ZhbHVlX3NpemUpO1xuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTg0PXN0YXRpYyBpbnQgZXh0NF9yZWFkX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZmZlcixcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE5Ny1cbmZzL2V4dDQvaW5saW5lLmM6MTk4Olx0Y3BfbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuZnMvZXh0NC9pbmxpbmUuYy0xOTktXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0yMjk9c3RhdGljIHZvaWQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMjQ1LVxuZnMvZXh0NC9pbmxpbmUuYzoyNDY6XHRpZiAocG9zIFx1MDAzYyBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKSB7XG5mcy9leHQ0L2lubGluZS5jOjI0NzpcdFx0Y3BfbGVuID0gcG9zICYjNDM7IGxlbiBcdTAwM2UgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSA/XG5mcy9leHQ0L2lubGluZS5jOjI0ODpcdFx0XHQgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSAtIHBvcyA6IGxlbjtcbmZzL2V4dDQvaW5saW5lLmMtMjQ5LVx0XHRtZW1jcHkoKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jayAmIzQzOyBwb3MsIGJ1ZmZlciwgY3BfbGVuKTtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTI1OC1cbmZzL2V4dDQvaW5saW5lLmM6MjU5Olx0cG9zIC09IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XG5mcy9leHQ0L2lubGluZS5jLTI2MC1cdGhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0yNjg9c3RhdGljIGludCBleHQ0X2NyZWF0ZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMjkwLVxuZnMvZXh0NC9pbmxpbmUuYzoyOTE6XHRpZiAobGVuIFx1MDAzZSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKSB7XG5mcy9leHQ0L2lubGluZS5jLTI5Mi1cdFx0dmFsdWUgPSBFWFQ0X1pFUk9fWEFUVFJfVkFMVUU7XG5mcy9leHQ0L2lubGluZS5jOjI5MzpcdFx0bGVuIC09IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XG5mcy9leHQ0L2lubGluZS5jLTI5NC1cdH0gZWxzZSB7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0zMTYtXHRcdFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSxcbmZzL2V4dDQvaW5saW5lLmM6MzE3Olx0XHRcdFx0XHQgICAgICAgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuZnMvZXh0NC9pbmxpbmUuYy0zMTgtXHRcdGdvdG8gb3V0O1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMzIxLVx0bWVtc2V0KCh2b2lkICopZXh0NF9yYXdfaW5vZGUoXHUwMDI2aXMuaWxvYyktXHUwMDNlaV9ibG9jayxcbmZzL2V4dDQvaW5saW5lLmM6MzIyOlx0XHQwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbmZzL2V4dDQvaW5saW5lLmMtMzIzLVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMzI1LVx0XHRcdFx0ICAgICAgKHZvaWQgKilleHQ0X3Jhd19pbm9kZShcdTAwMjZpcy5pbG9jKSk7XG5mcy9leHQ0L2lubGluZS5jOjMyNjpcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9pbmxpbmVfc2l6ZSA9IGxlbiAmIzQzOyBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFO1xuZnMvZXh0NC9pbmxpbmUuYy0zMjctXHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG5mcy9leHQ0L2lubGluZS5jOjMyODpcdGV4dDRfc2V0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xuZnMvZXh0NC9pbmxpbmUuYy0zMjktXHRnZXRfYmgoaXMuaWxvYy5iaCk7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0zMzc9c3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMzY3LVxuZnMvZXh0NC9pbmxpbmUuYzozNjg6XHRsZW4gLT0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRTtcbmZzL2V4dDQvaW5saW5lLmMtMzY5LVx0dmFsdWUgPSBremFsbG9jKGxlbiwgR0ZQX05PRlMpO1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMzk1LVx0XHRcdFx0ICAgICAgKHZvaWQgKilleHQ0X3Jhd19pbm9kZShcdTAwMjZpcy5pbG9jKSk7XG5mcy9leHQ0L2lubGluZS5jOjM5NjpcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9pbmxpbmVfc2l6ZSA9IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgJiM0MztcbmZzL2V4dDQvaW5saW5lLmMtMzk3LVx0XHRcdFx0bGUzMl90b19jcHUoaXMucy5oZXJlLVx1MDAzZWVfdmFsdWVfc2l6ZSk7XG5mcy9leHQ0L2lubGluZS5jOjM5ODpcdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG5mcy9leHQ0L2lubGluZS5jLTM5OS1cdGdldF9iaChpcy5pbG9jLmJoKTtcbi0tXG5mcy9leHQ0L2lubGluZS5jPTQwOD1zdGF0aWMgaW50IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNDEzLVxuZnMvZXh0NC9pbmxpbmUuYzo0MTQ6XHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKVxuZnMvZXh0NC9pbmxpbmUuYy00MTUtXHRcdHJldHVybiAtRU5PU1BDO1xuLS1cbmZzL2V4dDQvaW5saW5lLmM9NDM3PXN0YXRpYyBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNDc3LVx0bWVtc2V0KCh2b2lkICopZXh0NF9yYXdfaW5vZGUoXHUwMDI2aXMuaWxvYyktXHUwMDNlaV9ibG9jayxcbmZzL2V4dDQvaW5saW5lLmM6NDc4Olx0XHQwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbmZzL2V4dDQvaW5saW5lLmM6NDc5Olx0bWVtc2V0KGVpLVx1MDAzZWlfZGF0YSwgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG5mcy9leHQ0L2lubGluZS5jLTQ4MC1cbi0tXG5mcy9leHQ0L2lubGluZS5jLTQ4Ny1cdH1cbmZzL2V4dDQvaW5saW5lLmM6NDg4Olx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKTtcbmZzL2V4dDQvaW5saW5lLmMtNDg5LVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNDk0LVx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9zaXplID0gMDtcbmZzL2V4dDQvaW5saW5lLmM6NDk1Olx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuZnMvZXh0NC9pbmxpbmUuYy00OTYtb3V0OlxuLS1cbmZzL2V4dDQvaW5saW5lLmM9NTczPXN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTU4Ny1cdFx0ICovXG5mcy9leHQ0L2lubGluZS5jOjU4ODpcdFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuZnMvZXh0NC9pbmxpbmUuYy01ODktXHRcdHJldHVybiAwO1xuLS1cbmZzL2V4dDQvaW5saW5lLmM9ODg2PXN0YXRpYyBpbnQgZXh0NF9kYV9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTg5OS1cdGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XG5mcy9leHQ0L2lubGluZS5jOjkwMDpcdFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuZnMvZXh0NC9pbmxpbmUuYy05MDEtXHRcdGdvdG8gb3V0O1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtOTI0LVx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG5mcy9leHQ0L2lubGluZS5jOjkyNTpcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbmZzL2V4dDQvaW5saW5lLmM6OTI2Olx0KmZzZGF0YSA9ICh2b2lkICopQ09OVkVSVF9JTkxJTkVfREFUQTtcbmZzL2V4dDQvaW5saW5lLmMtOTI3LVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTA1Mj1zdGF0aWMgaW50IGV4dDRfdXBkYXRlX2lubGluZV9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMDU1LVx0aW50IHJldDtcbmZzL2V4dDQvaW5saW5lLmM6MTA1NjpcdGludCBvbGRfc2l6ZSA9IEVYVDRfSShkaXIpLVx1MDAzZWlfaW5saW5lX3NpemUgLSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFO1xuZnMvZXh0NC9pbmxpbmUuYy0xMDU3LVx0aW50IG5ld19zaXplID0gZ2V0X21heF9pbmxpbmVfeGF0dHJfdmFsdWVfc2l6ZShkaXIsIGlsb2MpO1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTA2Mi1cdHJldCA9IGV4dDRfdXBkYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgZGlyLFxuZnMvZXh0NC9pbmxpbmUuYzoxMDYzOlx0XHRcdFx0ICAgICAgbmV3X3NpemUgJiM0MzsgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG5mcy9leHQ0L2lubGluZS5jLTEwNjQtXHRpZiAocmV0KVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTA2OC1cdFx0XHQgICAgIEVYVDRfSShkaXIpLVx1MDAzZWlfaW5saW5lX3NpemUgLVxuZnMvZXh0NC9pbmxpbmUuYzoxMDY5Olx0XHRcdFx0XHRcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuZnMvZXh0NC9pbmxpbmUuYy0xMDcwLVx0ZGlyLVx1MDAzZWlfc2l6ZSA9IEVYVDRfSShkaXIpLVx1MDAzZWlfZGlza3NpemUgPSBFWFQ0X0koZGlyKS1cdTAwM2VpX2lubGluZV9zaXplO1xuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTA3ND1zdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jayxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTEwOTQtXG5mcy9leHQ0L2lubGluZS5jOjEwOTU6XHRpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpO1xuZnMvZXh0NC9pbmxpbmUuYy0xMDk2LVx0aWYgKCFpX2Jsb2NrX2J1Zikge1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTExNy1cdFx0Z290byBlcnJvcjtcbmZzL2V4dDQvaW5saW5lLmM6MTExODpcdG1lbWNweShpX2Jsb2NrX2J1ZiwgKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG5mcy9leHQ0L2lubGluZS5jOjExMTk6XHRtZW1zZXQoKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG5mcy9leHQ0L2lubGluZS5jOjExMjA6XHRtZW1zZXQoZWktXHUwMDNlaV9kYXRhLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbmZzL2V4dDQvaW5saW5lLmMtMTEyMS1cdG1lbWNweSh4YXR0cl9idWYsIGhlYWRlciwgeGF0dHJfc2l6ZSk7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMTYxLVx0XHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xuZnMvZXh0NC9pbmxpbmUuYzoxMTYyOlx0XHRtZW1jcHkoKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgaV9ibG9ja19idWYsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuZnMvZXh0NC9pbmxpbmUuYzoxMTYzOlx0XHRtZW1jcHkoZWktXHUwMDNlaV9kYXRhLCByYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG5mcy9leHQ0L2lubGluZS5jLTExNjQtXHRcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTExNjctXHR9IGVsc2Uge1xuZnMvZXh0NC9pbmxpbmUuYzoxMTY4Olx0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xuZnMvZXh0NC9pbmxpbmUuYy0xMTY5LVx0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMTc2LVx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xuZnMvZXh0NC9pbmxpbmUuYzoxMTc3Olx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG5mcy9leHQ0L2lubGluZS5jLTExNzgtXHRcdGJyZWxzZShiaCk7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xMjk0PWludCBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTEzMTAtXHRcdFx0XHRcdFx0IEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFO1xuZnMvZXh0NC9pbmxpbmUuYzoxMzExOlx0aW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkU7XG5mcy9leHQ0L2lubGluZS5jLTEzMTItXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMzE5LVx0aW5saW5lX3NpemUgPSBFWFQ0X0koZGlyKS1cdTAwM2VpX2lubGluZV9zaXplIC1cbmZzL2V4dDQvaW5saW5lLmM6MTMyMDpcdFx0XHRFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFO1xuZnMvZXh0NC9pbmxpbmUuYy0xMzIxLVx0aWYgKCFpbmxpbmVfc2l6ZSkge1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTMyNy1cdFx0aW5saW5lX3NpemUgPSBFWFQ0X0koZGlyKS1cdTAwM2VpX2lubGluZV9zaXplIC1cbmZzL2V4dDQvaW5saW5lLmM6MTMyODpcdFx0XHRcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XG5mcy9leHQ0L2lubGluZS5jLTEzMjktXHR9XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xNjY0PWludCBleHQ0X3RyeV9jcmVhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE2NjYte1xuZnMvZXh0NC9pbmxpbmUuYzoxNjY3Olx0aW50IHJldCwgaW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFO1xuZnMvZXh0NC9pbmxpbmUuYy0xNjY4LVx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTY5Nz1zdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfZmluZF9pbmxpbmVfZW50cnkoc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xNzI5LVx0XHRcdFx0XHRcdEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFO1xuZnMvZXh0NC9pbmxpbmUuYzoxNzMwOlx0aW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkU7XG5mcy9leHQ0L2lubGluZS5jLTE3MzEtXHRyZXQgPSBleHQ0X3NlYXJjaF9kaXIoaXMuaWxvYy5iaCwgaW5saW5lX3N0YXJ0LCBpbmxpbmVfc2l6ZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE3MzctXG5mcy9leHQ0L2lubGluZS5jOjE3Mzg6XHRpZiAoZXh0NF9nZXRfaW5saW5lX3NpemUoZGlyKSA9PSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKVxuZnMvZXh0NC9pbmxpbmUuYy0xNzM5LVx0XHRnb3RvIG91dDtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE3NDEtXHRpbmxpbmVfc3RhcnQgPSBleHQ0X2dldF9pbmxpbmVfeGF0dHJfcG9zKGRpciwgXHUwMDI2aXMuaWxvYyk7XG5mcy9leHQ0L2lubGluZS5jOjE3NDI6XHRpbmxpbmVfc2l6ZSA9IGV4dDRfZ2V0X2lubGluZV9zaXplKGRpcikgLSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFO1xuZnMvZXh0NC9pbmxpbmUuYy0xNzQzLVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTc2MD1pbnQgZXh0NF9kZWxldGVfaW5saW5lX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xNzgwLVx0aWYgKCh2b2lkICopZGVfZGVsIC0gKCh2b2lkICopZXh0NF9yYXdfaW5vZGUoXHUwMDI2aWxvYyktXHUwMDNlaV9ibG9jaykgXHUwMDNjXG5mcy9leHQ0L2lubGluZS5jOjE3ODE6XHRcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpIHtcbmZzL2V4dDQvaW5saW5lLmMtMTc4Mi1cdFx0aW5saW5lX3N0YXJ0ID0gKHZvaWQgKilleHQ0X3Jhd19pbm9kZShcdTAwMjZpbG9jKS1cdTAwM2VpX2Jsb2NrICYjNDM7XG5mcy9leHQ0L2lubGluZS5jLTE3ODMtXHRcdFx0XHRcdEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFO1xuZnMvZXh0NC9pbmxpbmUuYzoxNzg0Olx0XHRpbmxpbmVfc2l6ZSA9IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgLVxuZnMvZXh0NC9pbmxpbmUuYy0xNzg1LVx0XHRcdFx0RVhUNF9JTkxJTkVfRE9URE9UX1NJWkU7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xNzg4LVx0XHRpbmxpbmVfc2l6ZSA9IGV4dDRfZ2V0X2lubGluZV9zaXplKGRpcikgLVxuZnMvZXh0NC9pbmxpbmUuYzoxNzg5Olx0XHRcdFx0RVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRTtcbmZzL2V4dDQvaW5saW5lLmMtMTc5MC1cdH1cbi0tXG5mcy9leHQ0L2lubGluZS5jPTE4MTg9ZXh0NF9nZXRfaW5saW5lX2VudHJ5KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xODI3LVxuZnMvZXh0NC9pbmxpbmUuYzoxODI4Olx0aWYgKG9mZnNldCBcdTAwM2MgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSkge1xuZnMvZXh0NC9pbmxpbmUuYy0xODI5LVx0XHRpbmxpbmVfcG9zID0gKHZvaWQgKilleHQ0X3Jhd19pbm9kZShpbG9jKS1cdTAwM2VpX2Jsb2NrO1xuZnMvZXh0NC9pbmxpbmUuYzoxODMwOlx0XHQqaW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFO1xuZnMvZXh0NC9pbmxpbmUuYy0xODMxLVx0fSBlbHNlIHtcbmZzL2V4dDQvaW5saW5lLmMtMTgzMi1cdFx0aW5saW5lX3BvcyA9IGV4dDRfZ2V0X2lubGluZV94YXR0cl9wb3MoaW5vZGUsIGlsb2MpO1xuZnMvZXh0NC9pbmxpbmUuYzoxODMzOlx0XHRvZmZzZXQgLT0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRTtcbmZzL2V4dDQvaW5saW5lLmMtMTgzNC1cdFx0KmlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpIC1cbmZzL2V4dDQvaW5saW5lLmM6MTgzNTpcdFx0XHRcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XG5mcy9leHQ0L2lubGluZS5jLTE4MzYtXHR9XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xOTQ5PWludCBleHQ0X2lubGluZV9kYXRhX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqaGFzX2lubGluZSlcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE5OTQtXHRcdCAqL1xuZnMvZXh0NC9pbmxpbmUuYzoxOTk1Olx0XHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKVxuZnMvZXh0NC9pbmxpbmUuYy0xOTk2LVx0XHRcdGV4dDRfZXNfcmVtb3ZlX2V4dGVudChpbm9kZSwgMCwgRVhUX01BWF9CTE9DS1MpO1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTk5OC1cdFx0LyogQ2xlYXIgdGhlIGNvbnRlbnQgaW4gdGhlIHhhdHRyIHNwYWNlLiAqL1xuZnMvZXh0NC9pbmxpbmUuYzoxOTk5Olx0XHRpZiAoaW5saW5lX3NpemUgXHUwMDNlIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpIHtcbmZzL2V4dDQvaW5saW5lLmMtMjAwMC1cdFx0XHRpZiAoKGVyciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXHUwMDI2aSwgXHUwMDI2aXMpKSAhPSAwKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMjAyMi1cdFx0XHRpLnZhbHVlID0gdmFsdWU7XG5mcy9leHQ0L2lubGluZS5jOjIwMjM6XHRcdFx0aS52YWx1ZV9sZW4gPSBpX3NpemUgXHUwMDNlIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgP1xuZnMvZXh0NC9pbmxpbmUuYzoyMDI0Olx0XHRcdFx0XHRpX3NpemUgLSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIDogMDtcbmZzL2V4dDQvaW5saW5lLmMtMjAyNS1cdFx0XHRlcnIgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0yMDMwLVx0XHQvKiBDbGVhciB0aGUgY29udGVudCB3aXRoaW4gaV9ibG9ja3MuICovXG5mcy9leHQ0L2lubGluZS5jOjIwMzE6XHRcdGlmIChpX3NpemUgXHUwMDNjIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpIHtcbmZzL2V4dDQvaW5saW5lLmMtMjAzMi1cdFx0XHR2b2lkICpwID0gKHZvaWQgKikgZXh0NF9yYXdfaW5vZGUoXHUwMDI2aXMuaWxvYyktXHUwMDNlaV9ibG9jaztcbmZzL2V4dDQvaW5saW5lLmMtMjAzMy1cdFx0XHRtZW1zZXQocCAmIzQzOyBpX3NpemUsIDAsXG5mcy9leHQ0L2lubGluZS5jOjIwMzQ6XHRcdFx0ICAgICAgIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgLSBpX3NpemUpO1xuZnMvZXh0NC9pbmxpbmUuYy0yMDM1LVx0XHR9XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0yMDM3LVx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSBpX3NpemUgXHUwMDNjXG5mcy9leHQ0L2lubGluZS5jOjIwMzg6XHRcdFx0XHRcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgP1xuZnMvZXh0NC9pbmxpbmUuYzoyMDM5Olx0XHRcdFx0XHRFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIDogaV9zaXplO1xuZnMvZXh0NC9pbmxpbmUuYy0yMDQwLVx0fVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MjA2MT1pbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0yMDY3LVx0aWYgKCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHtcbmZzL2V4dDQvaW5saW5lLmM6MjA2ODpcdFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuZnMvZXh0NC9pbmxpbmUuYy0yMDY5LVx0XHRyZXR1cm4gMDtcbmZzL2V4dDQvaW5saW5lLmM6MjA3MDpcdH0gZWxzZSBpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKSB7XG5mcy9leHQ0L2lubGluZS5jLTIwNzEtXHRcdC8qXG5mcy9leHQ0L2lubGluZS5jOjIwNzI6XHRcdCAqIElub2RlIGhhcyBpbmxpbmUgZGF0YSBidXQgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEgaXNcbmZzL2V4dDQvaW5saW5lLmMtMjA3My1cdFx0ICogY2xlYXJlZC4gVGhpcyBtZWFucyB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBtb3Zpbmcgb2Zcbi0tXG5mcy9leHQ0L2lub2RlLmM9MTI3OT1zdGF0aWMgaW50IGV4dDRfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy0xMzA0LVxuZnMvZXh0NC9pbm9kZS5jOjEzMDU6XHRpZiAoZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpIHtcbmZzL2V4dDQvaW5vZGUuYy0xMzA2LVx0XHRyZXQgPSBleHQ0X3RyeV90b193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTE0MzA9c3RhdGljIGludCBleHQ0X3dyaXRlX2VuZChjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTE0NDQtXHRpZiAoZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9pbm9kZS5jOjE0NDU6XHQgICAgZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpXG5mcy9leHQ0L2lub2RlLmMtMTQ0Ni1cdFx0cmV0dXJuIGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkLFxuLS1cbmZzL2V4dDQvaW5vZGUuYz0xNTM0PXN0YXRpYyBpbnQgZXh0NF9qb3VybmFsbGVkX3dyaXRlX2VuZChjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTE1NTQtXHRpZiAoZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9pbm9kZS5jOjE1NTU6XHQgICAgZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpXG5mcy9leHQ0L2lub2RlLmMtMTU1Ni1cdFx0cmV0dXJuIGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkLFxuLS1cbmZzL2V4dDQvaW5vZGUuYz0yNzUyPXN0YXRpYyBpbnQgZXh0NF9kb193cml0ZXBhZ2VzKHN0cnVjdCBtcGFnZV9kYV9kYXRhICptcGQpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTI4MDMtXHRcdEJVR19PTihleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsXG5mcy9leHQ0L2lub2RlLmM6MjgwNDpcdFx0XHRcdEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSk7XG5mcy9leHQ0L2lub2RlLmMtMjgwNS1cdFx0ZXh0NF9kZXN0cm95X2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0zMTEyPXN0YXRpYyBpbnQgZXh0NF9kYV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTMxMzUtXG5mcy9leHQ0L2lub2RlLmM6MzEzNjpcdGlmIChleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSkge1xuZnMvZXh0NC9pbm9kZS5jLTMxMzctXHRcdHJldCA9IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTMyNjU9c3RhdGljIGludCBleHQ0X2RhX3dyaXRlX2VuZChjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTMyNzgtXG5mcy9leHQ0L2lub2RlLmM6MzI3OTpcdGlmICh3cml0ZV9tb2RlICE9IENPTlZFUlRfSU5MSU5FX0RBVEEgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L2lub2RlLmM6MzI4MDpcdCAgICBleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvaW5vZGUuYy0zMjgxLVx0ICAgIGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcbi0tXG5mcy9leHQ0L2lub2RlLmM9NTE0MD1zdGF0aWMgaW5saW5lIGludCBleHQ0X2lnZXRfZXh0cmFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTE1OC1cdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcbmZzL2V4dDQvaW5vZGUuYzo1MTU5Olx0XHRcdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG5mcy9leHQ0L2lub2RlLmMtNTE2MC1cdFx0cmV0dXJuIGVycjtcbi0tXG5mcy9leHQ0L2lub2RlLmM9NTI0NT1zdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy01Mzg0LVx0LyogRGV0ZWN0IGludmFsaWQgZmxhZyBjb21iaW5hdGlvbiAtIGNhbiYjMzk7dCBoYXZlIGJvdGggaW5saW5lIGRhdGEgYW5kIGV4dGVudHMgKi9cbmZzL2V4dDQvaW5vZGUuYzo1Mzg1Olx0aWYgKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvaW5vZGUuYy01Mzg2LVx0ICAgIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSB7XG4tLVxuZnMvZXh0NC9pb2N0bC5jPTU2Nz1zdGF0aWMgYm9vbCBkYXhfY29tcGF0aWJsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgb2xkZmxhZ3MsXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTU3MS1cdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbmZzL2V4dDQvaW9jdGwuYzo1NzI6XHRcdGZsYWdzIFx1MDAyNj0gfkVYVDRfSU5MSU5FX0RBVEFfRkw7XG5mcy9leHQ0L2lvY3RsLmM6NTczOlx0XHRvbGRmbGFncyBcdTAwMjY9IH5FWFQ0X0lOTElORV9EQVRBX0ZMO1xuZnMvZXh0NC9pb2N0bC5jLTU3NC1cdH1cbi0tXG5mcy9leHQ0L25hbWVpLmM9Mjk2OT1pbnQgZXh0NF9pbml0X25ld19kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTI5NzUtXG5mcy9leHQ0L25hbWVpLmM6Mjk3NjpcdGlmIChleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSkge1xuZnMvZXh0NC9uYW1laS5jLTI5NzctXHRcdGVyciA9IGV4dDRfdHJ5X2NyZWF0ZV9pbmxpbmVfZGlyKGhhbmRsZSwgZGlyLCBpbm9kZSk7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTM3OTc9c3RhdGljIGludCBleHQ0X3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpvbGRfZGlyLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0zOTE5LVx0Zm9yY2VfcmVyZWFkID0gKG5ldy5kaXItXHUwMDNlaV9pbm8gPT0gb2xkLmRpci1cdTAwM2VpX2lubyBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvbmFtZWkuYzozOTIwOlx0XHRcdGV4dDRfdGVzdF9pbm9kZV9mbGFnKG5ldy5kaXIsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKTtcbmZzL2V4dDQvbmFtZWkuYy0zOTIxLVxuLS1cbmZzL2V4dDQvbmFtZWkuYy0zOTQ3LVx0XHRmb3JjZV9yZXJlYWQgPSAhZXh0NF90ZXN0X2lub2RlX2ZsYWcobmV3LmRpcixcbmZzL2V4dDQvbmFtZWkuYzozOTQ4Olx0XHRcdFx0XHRcdCAgICAgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSk7XG5mcy9leHQ0L25hbWVpLmMtMzk0OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3MTcKCQkJCQkJCW91dHB1dDogMTYyCgkJCQkJCQl0aG91Z2h0czogMzk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEVYVDQgSW5saW5lIERhdGEgQ29udmVyc2lvbiBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBmdW5jdGlvbnMgcmVsYXRlZCB0byBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24uIFRoZSBrZXkgcGxheWVycywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGBGb2N1c1N5bWJvbHNgLCBhcmU6IGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgLCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AsIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AsIGFuZCBgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeWAuCgpGaXJzdCwgSSBuZWVkIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgcmVsYXRlZCBmdW5jdGlvbnMuIExldCBtZSBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGRpZmYuIEFoLCBoZXJlIHdlIGdvOiBpdCBzZWVtcyBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIGlzIG5ldywgZXNzZW50aWFsbHkgcmVwbGFjaW5nIGBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGFgLCBhbmQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGhhcyBiZWVuIG1vZGlmaWVkLiBUaGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgYXBwZWFyIHRvIGJlIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgIGFuZCBgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeWAuIFRoYXQgc2VlbXMgcmVhc29uYWJsZS4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGNydWNpYWwgY29uZmlnIGlzIGBFWFQ0X0ZTYCwgd2hpY2ggZW5hYmxlcyB0aGUgZXh0NCBmaWxlIHN5c3RlbSBpdHNlbGYuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBpZiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgaW52b2x2ZWQuIFNpbmNlIHRoaXMgaXMgaW5saW5lIGRhdGEsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgc2VjdXJpdHkgYW5kIEFDTCBjb25zaWRlcmF0aW9ucyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuIEhvd2V2ZXIsIGEgcmV2aWV3IG9mIHRoZSBjb2RlIHJldmVhbHMgdGhhdCB0aGUgc3lzdGVtIHhhdHRyLCBmb3IgaW5saW5lIGRhdGEsIGlzIG1hbmFnZWQgYnkgY29yZSBleHQ0IHhhdHRyIGxvZ2ljIChpbiBgeGF0dHIuY2ApLiBUaGUgZmFjdCB0aGF0IGl0IGlzIGFsd2F5cyBidWlsdCBhbG9uZyB3aXRoIGBpbmxpbmUub2AgaW1wbGllcyB0aGlzIGlzIG5vdCBkZXBlbmRlbnQgb24gYW55IG90aGVyIGFkZGl0aW9uYWwgY29uZmlnLiBTbywgYEVYVDRfRlNgIHNlZW1zIHN1ZmZpY2llbnQuCgpJJiMzOTt2ZSByZXZpZXdlZCB0aGUgaW5zdHJ1Y3Rpb25zOiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgY29udGFpbnMgb25seSBgRVhUNF9GU2AsIHRoZSBgRm9jdXNTeW1ib2xzYCBtYXRjaCB3aGF0IEkmIzM5O3ZlIGlkZW50aWZpZWQsIGFuZCB0aGUgcmVxdWVzdGVkIGBSZWFzb25pbmdgIGlzIGNvbmNpc2Ug4oCTIHdoaWNoIEkgYmVsaWV2ZSBJJiMzOTt2ZSBhY2hpZXZlZC4KCkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gSSYjMzk7bSBzYXRpc2ZpZWQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2smIzM0OywKICAgICYjMzQ7ZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayYjMzQ7LAogICAgJiMzNDtleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIG1lY2hhbmlzbSBpbiBmcy9leHQ0L2lubGluZS5jLCByZXBsYWNpbmcgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhIHdpdGggZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2sgYW5kIHJlc3RydWN0dXJpbmcgYmxvY2sgYWxsb2NhdGlvbiwgZXh0ZW50IGluc2VydGlvbiwgYW5kIGVycm9yIHJlY292ZXJ5IGhhbmRsaW5nIGR1cmluZyBpbmxpbmUgZGF0YSBjb252ZXJzaW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgd2hlbiBleHBhbmRpbmcgaW5saW5lIGZpbGVzL2RpcmVjdG9yaWVzIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayYjMzQ7LAogICAgJiMzNDtleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrJiMzNDssCiAgICAmIzM0O2V4dDRfY29udmVydF9pbmxpbmVfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbWVjaGFuaXNtIGluIGZzL2V4dDQvaW5saW5lLmMsIHJlcGxhY2luZyBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEgd2l0aCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayBhbmQgcmVzdHJ1Y3R1cmluZyBibG9jayBhbGxvY2F0aW9uLCBleHRlbnQgaW5zZXJ0aW9uLCBhbmQgZXJyb3IgcmVjb3ZlcnkgaGFuZGxpbmcgZHVyaW5nIGlubGluZSBkYXRhIGNvbnZlcnNpb24uIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyB3aGVuIGV4cGFuZGluZyBpbmxpbmUgZmlsZXMvZGlyZWN0b3JpZXMgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXh0NCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGxvZ2ljIGluIGBmcy9leHQ0L2lubGluZS5jYCBieSBpbnRyb2R1Y2luZyBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIGFuZCBhbGxvY2F0aW5nIHRoZSBkZXN0aW5hdGlvbiBibG9jayBwcmlvciB0byBjbGVhcmluZyBpbmxpbmUgZGF0YSBpbiB0aGUgaW5vZGUuXG5cblJldmlld2luZyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYWNyb3NzIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6XG4xLiBBbGwgbG9jYWwgc3RhY2sgc3RydWN0dXJlcyAoYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgLCBgc3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpYCwgYHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcmAsIGFuZCBgc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgYG1lbXNldGAsIG9yIGV4cGxpY2l0IG1lbWJlciBhc3NpZ25tZW50cyBiZWZvcmUgdXNlLlxuMi4gSGVhcCBidWZmZXJzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2NgIChgaV9ibG9ja19idWZgLCBgeGF0dHJfYnVmYCwgYGJ1ZmApIGFyZSBpbW1lZGlhdGVseSBwb3B1bGF0ZWQgdmlhIGBtZW1jcHlgIG9yIGBleHQ0X3JlYWRfaW5saW5lX2RhdGFgLlxuMy4gVGhlIGJsb2NrIGJ1ZmZlciBkYXRhIChgYmgtXHUwMDNlYl9kYXRhYCkgaXMgZXhwbGljaXRseSBjbGVhcmVkIHVzaW5nIGBtZW1zZXRgIGJlZm9yZSB3cml0aW5nIGlubGluZSBkYXRhIG9yIGRpcmVjdG9yeSBlbnRyaWVzLlxuNC4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBicmFuY2hpbmcvbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG5cbkFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgZXJyb3IgcmVjb3ZlcnkgaGFuZGxpbmcsIGxvY2tpbmcsIG9yIGV4dGVudCBtYW5pcHVsYXRpb24pIGZhbGwgdW5kZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVlNTIzMTIwNGUwM2MzMDMyNDY4MzcxMjk1ZWI4YTI3ZjgwZDFkZWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDEwOjMzOjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbmxpbmUuYyBiL2ZzL2V4dDQvaW5saW5lLmMKaW5kZXggODA0NWU0ZmYyNzBjNy4uZmVmOThhY2VlNjg4ZiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbmxpbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lubGluZS5jCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJiMzNDtleHQ0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4YXR0ci5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dHJ1bmNhdGUuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtleHQ0X2V4dGVudHMuaCYjMzQ7CiAKICNkZWZpbmUgRVhUNF9YQVRUUl9TWVNURU1fREFUQQkmIzM0O2RhdGEmIzM0OwogI2RlZmluZSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFCSgoc2l6ZW9mKF9fbGUzMikgKiBFWFQ0X05fQkxPQ0tTKSkKQEAgLTEwNzAsMjEgJiM0MzsxMDcxLDEyMyBAQCBzdGF0aWMgaW50IGV4dDRfdXBkYXRlX2lubGluZV9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpkaXIsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYywKLQkJCQkgICAgIHZvaWQgKmJ1ZiwgaW50IGlubGluZV9zaXplKQomIzQzO3N0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLAomIzQzOwkJCQkJdW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlpbnQgcmV0OwomIzQzOwlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CiYjNDM7CXN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7CiYjNDM7CQkucyA9IHsgLm5vdF9mb3VuZCA9IC1FTk9EQVRBLCB9LAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGkgPSB7CiYjNDM7CQkubmFtZV9pbmRleCA9IEVYVDRfWEFUVFJfSU5ERVhfU1lTVEVNLAomIzQzOwkJLm5hbWUgPSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBLAomIzQzOwkJLnZhbHVlID0gTlVMTCwKJiM0MzsJCS52YWx1ZV9sZW4gPSAwLAomIzQzOwl9OwomIzQzOwlpbnQgZXJyb3I7CiYjNDM7CXZvaWQgKmlfYmxvY2tfYnVmID0gTlVMTDsKJiM0MzsJdm9pZCAqeGF0dHJfYnVmID0gTlVMTDsKJiM0MzsJdm9pZCAqaGVhZGVyID0gTlVMTDsKJiM0MzsJdm9pZCAqdGFpbCA9IE5VTEw7CiYjNDM7CWludCB4YXR0cl9zaXplOwomIzQzOwlzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlOwogCi0JcmV0ID0gZXh0NF9jcmVhdGVfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSwgaW5saW5lX3NpemUpOwotCWlmIChyZXQpIHsKLQkJZXh0NF9tc2coaW5vZGUtJmd0O2lfc2IsIEtFUk5fRU1FUkcsCi0JCQkmIzM0O2Vycm9yIHJlc3RvcmluZyBpbmxpbmVfZGF0YSBmb3IgaW5vZGUgLS0gcG90ZW50aWFsIGRhdGEgbG9zcyEgKGlub2RlICVsbHUsIGVycm9yICVkKSYjMzQ7LAotCQkJaW5vZGUtJmd0O2lfaW5vLCByZXQpOwotCQlyZXR1cm47CiYjNDM7CWlfYmxvY2tfYnVmID0ga21hbGxvYyhFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFLCBHRlBfTk9GUyk7CiYjNDM7CWlmICghaV9ibG9ja19idWYpIHsKJiM0MzsJCWVycm9yID0gLUVOT01FTTsKJiM0MzsJCWRvd25fd3JpdGUoJmFtcDtlaS0mZ3Q7aV9kYXRhX3NlbSk7CiYjNDM7CQlnb3RvIGVycm9yOwogCX0KLQlleHQ0X3dyaXRlX2lubGluZV9kYXRhKGlub2RlLCBpbG9jLCBidWYsIDAsIGlubGluZV9zaXplKTsKLQlleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpOwomIzQzOwlkb3duX3dyaXRlKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwomIzQzOwllcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgJmFtcDtpcy5pbG9jKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsJcmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoJmFtcDtpcy5pbG9jKTsKJiM0MzsJaGVhZGVyID0gSUhEUihpbm9kZSwgcmF3X2lub2RlKTsKJiM0MzsJdGFpbCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpOwomIzQzOwl4YXR0cl9zaXplID0gdGFpbCAtIGhlYWRlcjsKJiM0MzsJeGF0dHJfYnVmID0ga21hbGxvYyh4YXR0cl9zaXplLCBHRlBfTk9GUyk7CiYjNDM7CWlmICgheGF0dHJfYnVmKSB7CiYjNDM7CQllcnJvciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycm9yOwomIzQzOwl9CiYjNDM7CUJVRkZFUl9UUkFDRShpcy5pbG9jLmJoLCAmIzM0O2dldF93cml0ZV9hY2Nlc3MmIzM0Oyk7CiYjNDM7CWVycm9yID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS0mZ3Q7aV9zYiwgaXMuaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gZXJyb3I7CiYjNDM7CW1lbWNweShpX2Jsb2NrX2J1ZiwgKHZvaWQgKilyYXdfaW5vZGUtJmd0O2lfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpOwomIzQzOwltZW1zZXQoKHZvaWQgKilyYXdfaW5vZGUtJmd0O2lfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpOwomIzQzOwltZW1zZXQoZWktJmd0O2lfZGF0YSwgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7CiYjNDM7CW1lbWNweSh4YXR0cl9idWYsIGhlYWRlciwgeGF0dHJfc2l6ZSk7CiYjNDM7CWlmIChleHQ0X2hhc19mZWF0dXJlX2V4dGVudHMoaW5vZGUtJmd0O2lfc2IpICZhbXA7JmFtcDsKJiM0MzsJCShTX0lTRElSKGlub2RlLSZndDtpX21vZGUpIHx8IFNfSVNSRUcoaW5vZGUtJmd0O2lfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS0mZ3Q7aV9tb2RlKSkpIHsKJiM0MzsJCWV4dDRfc2V0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7CiYjNDM7CQlleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7CiYjNDM7CQlzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIDAsIE5VTEwsIDApOwomIzQzOwomIzQzOwkJaWYgKElTX0VSUihwYXRoKSkgewomIzQzOwkJCWVycm9yID0gUFRSX0VSUihwYXRoKTsKJiM0MzsJCQlnb3RvIHJlY292ZXJ5OwomIzQzOwkJfQomIzQzOwkJc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4OwomIzQzOwomIzQzOwkJbmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMigwKTsKJiM0MzsJCW5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpOwomIzQzOwkJZXh0NF9leHRfc3RvcmVfcGJsb2NrKCZhbXA7bmV3ZXgsIGJsb2NrKTsKJiM0MzsJCXBhdGggPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsICZhbXA7bmV3ZXgsIDApOwomIzQzOwkJaWYgKElTX0VSUihwYXRoKSkgewomIzQzOwkJCWVycm9yID0gUFRSX0VSUihwYXRoKTsKJiM0MzsJCQlpZiAoZXJyb3IgPT0gLUVEUVVPVCB8fCBlcnJvciA9PSAtRU5PU1BDKQomIzQzOwkJCQlnb3RvIHJlY292ZXJ5OwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJZ290byBub19mcmVlOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlFWFQ0X0koaW5vZGUpLSZndDtpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7CiYjNDM7CX0KJiM0MzsJZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsICZhbXA7aSwgJmFtcDtpcyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gcmVjb3Zlcnk7CiYjNDM7CWlmICghaXMucy5ub3RfZm91bmQpCiYjNDM7CQllcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZSwgaW5vZGUsICZhbXA7aSwgJmFtcDtpcyk7CiYjNDM7cmVjb3Zlcnk6CiYjNDM7CWlmIChlcnJvcikgewomIzQzOwkJZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTsKJiM0MzsJCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7CiYjNDM7CQltZW1jcHkoaGVhZGVyLCB4YXR0cl9idWYsIHhhdHRyX3NpemUpOwomIzQzO25vX2ZyZWU6CiYjNDM7CQlleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spOwomIzQzOwkJbWVtY3B5KCh2b2lkICopcmF3X2lub2RlLSZndDtpX2Jsb2NrLCBpX2Jsb2NrX2J1ZiwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7CiYjNDM7CQltZW1jcHkoZWktJmd0O2lfZGF0YSwgcmF3X2lub2RlLSZndDtpX2Jsb2NrLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTsKJiM0MzsJCWV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTsKJiM0MzsJCWdldF9iaChpcy5pbG9jLmJoKTsKJiM0MzsJCWV4dDRfbWFya19pbG9jX2RpcnR5KGhhbmRsZSwgaW5vZGUsICZhbXA7aXMuaWxvYyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpOwomIzQzOwkJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpIHsKJiM0MzsJCQlpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSk7CiYjNDM7CQkJRVhUNF9JKGlub2RlKS0mZ3Q7aV9kaXNrc2l6ZSA9IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKJiM0MzsJCX0KJiM0MzsJCWdldF9iaChpcy5pbG9jLmJoKTsKJiM0MzsJCWVycm9yID0gZXh0NF9tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgJmFtcDtpcy5pbG9jKTsKJiM0MzsJCUVYVDRfSShpbm9kZSktJmd0O2lfaW5saW5lX29mZiA9IDA7CiYjNDM7CQlFWFQ0X0koaW5vZGUpLSZndDtpX2lubGluZV9zaXplID0gMDsKJiM0MzsJCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTsKJiM0MzsJCWJyZWxzZShiaCk7CiYjNDM7CX0KJiM0MzsJZ290byBvdXQ7CiYjNDM7ZXJyb3I6CiYjNDM7CWV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7CiYjNDM7CWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiYjNDM7CWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7CiYjNDM7b3V0OgomIzQzOwlicmVsc2UoaXMuaWxvYy5iaCk7CiYjNDM7CXVwX3dyaXRlKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwomIzQzOwlrZnJlZShpX2Jsb2NrX2J1Zik7CiYjNDM7CWtmcmVlKHhhdHRyX2J1Zik7CiYjNDM7CXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsCkBAIC0xMDkzLDkgJiM0MzsxMTk2LDEyIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLAogewogCWludCBlcnJvcjsKIAl2b2lkICpidWYgPSBOVUxMOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqZGF0YV9iaCA9IE5VTEw7Ci0Jc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7CiYjNDM7CXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCWludCBpbmxpbmVfc2l6ZTsKJiM0MzsJZXh0NF9mc2Jsa190IG5ld2Jsb2NrID0gMDsKJiM0MzsJc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyOwomIzQzOwlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJdW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jazsKIAogCWlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpOwogCWJ1ZiA9IGttYWxsb2MoaW5saW5lX3NpemUsIEdGUF9OT0ZTKTsKQEAgLTExMjAsNjMgJiM0MzsxMjI2LDYyIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLAogCQkJZ290byBvdXQ7CiAJfQogCi0JZXJyb3IgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0KLQltYXAubV9sYmxrID0gMDsKLQltYXAubV9sZW4gPSAxOwotCW1hcC5tX2ZsYWdzID0gMDsKLQllcnJvciA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCAmYW1wO21hcCwgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSk7CiYjNDM7CW1lbXNldCgmYW1wO2FyLCAwLCBzaXplb2YoYXIpKTsKJiM0MzsJYXIuaW5vZGUgPSBpbm9kZTsKJiM0MzsJYXIubG9naWNhbCA9IDA7CiYjNDM7CWFyLmxlbiA9IDE7CiYjNDM7CWlmIChTX0lTUkVHKGlub2RlLSZndDtpX21vZGUpKQomIzQzOwkJYXIuZmxhZ3MgPSBFWFQ0X01CX0hJTlRfREFUQTsKJiM0MzsJZWxzZQomIzQzOwkJYXIuZmxhZ3MgPSAwOwomIzQzOwluZXdibG9jayA9IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGUsICZhbXA7YXIsICZhbXA7ZXJyb3IpOwogCWlmIChlcnJvciAmbHQ7IDApCi0JCWdvdG8gb3V0X3Jlc3RvcmU7Ci0JaWYgKCEobWFwLm1fZmxhZ3MgJmFtcDsgRVhUNF9NQVBfTUFQUEVEKSkgewotCQllcnJvciA9IC1FSU87Ci0JCWdvdG8gb3V0X3Jlc3RvcmU7Ci0JfQotCi0JZGF0YV9iaCA9IHNiX2dldGJsayhpbm9kZS0mZ3Q7aV9zYiwgbWFwLm1fcGJsayk7Ci0JaWYgKCFkYXRhX2JoKSB7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJYWxsb2NhdGVkX2Jsb2NrID0gRVhUNF9DMkIoc2JpLCBhci5sZW4pOwomIzQzOwliaCA9IHNiX2dldGJsayhpbm9kZS0mZ3Q7aV9zYiwgbmV3YmxvY2spOwomIzQzOwlpZiAoIWJoKSB7CiAJCWVycm9yID0gLUVOT01FTTsKLQkJZ290byBvdXRfcmVzdG9yZTsKJiM0MzsJCWdvdG8gb3V0X2JoOwogCX0KIAotCWxvY2tfYnVmZmVyKGRhdGFfYmgpOwotCWVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtJmd0O2lfc2IsIGRhdGFfYmgsCiYjNDM7CWxvY2tfYnVmZmVyKGJoKTsKJiM0MzsJZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS0mZ3Q7aV9zYiwgYmgsCiAJCQkJCSAgICAgICBFWFQ0X0pUUl9OT05FKTsKIAlpZiAoZXJyb3IpIHsKLQkJdW5sb2NrX2J1ZmZlcihkYXRhX2JoKTsKJiM0MzsJCXVubG9ja19idWZmZXIoYmgpOwogCQllcnJvciA9IC1FSU87Ci0JCWdvdG8gb3V0X3Jlc3RvcmU7CiYjNDM7CQlnb3RvIG91dF9iaDsKIAl9Ci0JbWVtc2V0KGRhdGFfYmgtJmd0O2JfZGF0YSwgMCwgaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplKTsKJiM0MzsJbWVtc2V0KGJoLSZndDtiX2RhdGEsIDAsIGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSk7CiAKIAlpZiAoIVNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpIHsKLQkJbWVtY3B5KGRhdGFfYmgtJmd0O2JfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7Ci0JCXNldF9idWZmZXJfdXB0b2RhdGUoZGF0YV9iaCk7Ci0JCXVubG9ja19idWZmZXIoZGF0YV9iaCk7CiYjNDM7CQltZW1jcHkoYmgtJmd0O2JfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7CiYjNDM7CQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKJiM0MzsJCXVubG9ja19idWZmZXIoYmgpOwogCQllcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwKLQkJCQkJCSAgIGlub2RlLCBkYXRhX2JoKTsKJiM0MzsJCQkJCQkgICBpbm9kZSwgYmgpOwogCX0gZWxzZSB7Ci0JCXVubG9ja19idWZmZXIoZGF0YV9iaCk7Ci0JCWlub2RlLSZndDtpX3NpemUgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemU7Ci0JCWlfc2l6ZV93cml0ZShpbm9kZSwgaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplKTsKLQkJRVhUNF9JKGlub2RlKS0mZ3Q7aV9kaXNrc2l6ZSA9IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKLQotCQllcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBkYXRhX2JoLAomIzQzOwkJdW5sb2NrX2J1ZmZlcihiaCk7CiYjNDM7CQllcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBiaCwKIAkJCSAgbGUzMl90b19jcHUoKChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKWJ1ZiktJmd0O2lub2RlKSwKIAkJCSAgYnVmICYjNDM7IEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLAogCQkJICBpbmxpbmVfc2l6ZSAtIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFKTsKLQkJaWYgKCFlcnJvcikKLQkJCWVycm9yID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOwogCX0KJiM0MztvdXRfYmg6CiYjNDM7CWlmIChlcnJvcikgewomIzQzOwkJaWYgKGJoKQomIzQzOwkJCWV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBuZXdibG9jayk7CiYjNDM7CQlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CiAKLW91dF9yZXN0b3JlOgotCWlmIChlcnJvcikKLQkJZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlsb2MsIGJ1ZiwgaW5saW5lX3NpemUpOwotCiYjNDM7CQlkb3duX3dyaXRlKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwomIzQzOwkJZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTsKJiM0MzsJCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgbmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgMCk7CiYjNDM7CQl1cF93cml0ZSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVycm9yID0gZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlLCBpbm9kZSwKJiM0MzsJCQkJbmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgYmgpOwomIzQzOwl9CiBvdXQ6Ci0JYnJlbHNlKGRhdGFfYmgpOwogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIGVycm9yOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ2MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEV4dDQgSW5saW5lIERhdGEgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IGlmIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIHRoYXQgc2NyZWFtcyBmb3IgYSBLTVNBTiBzZXNzaW9uIChOZWVkc0tNU0FOPXRydWUpLCBvciBpZiB0aGlzIGlzIGp1c3QgdHlwaWNhbCBmaWxlc3lzdGVtIGxvZ2ljLCBhIGJ1ZyBmaXgsIG9yIHNvbWUgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nIHdoZXJlIEtBU0FOIG9yIG91ciBzdGFuZGFyZCBkZXRlY3RvcnMgYXJlIGFkZXF1YXRlLiBJIG5lZWQgdG8gYmUgZWZmaWNpZW50IGhlcmUuCgpGaXJzdCwgSSBuZWVkIHRvICp1bmRlcnN0YW5kKiB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgKmRvaW5nKi4gSSYjMzk7bSBzZWVpbmcgaXQmIzM5O3MgaW4gYGZzL2V4dDQvaW5saW5lLmNgLCBhbmQgdGhlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGFuZCB0aGlzIG5ldyBoZWxwZXIgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgcmVwbGFjaW5nIGBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGFgIGFzIHdlbGwuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSB0byBsb29rIGludG8uCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGluc3BlY3QgdGhlIGNvZGUgY2hhbmdlcyB0aGVtc2VsdmVzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGxpbmUgYnkgbGluZSBoZXJlLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBtZW1vcnkgYXNzaWdubWVudHMsIGJsb2NrIGhhbmRsaW5nLCBvciBkYXRhIGNvcHlpbmcgb3BlcmF0aW9ucy4gSWYgSSBuZWVkIHRoZSBiaWdnZXIgcGljdHVyZSwgSeKAmWxsIGxldmVyYWdlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgY29udGV4dCB3aXRoaW4gYGZzL2V4dDQvaW5saW5lLmNgIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgZml0IGludG8gdGhlIGxhcmdlciBleHQ0IGlubGluZSBkYXRhIHBpY3R1cmUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIHJpc2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5saW5lLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjA6XHRcdFx0cmV0dXJuIC1FTk9TUEM7XG4xMDYxOlx0XG4xMDYyOlx0XHRyZXQgPSBleHQ0X3VwZGF0ZV9pbmxpbmVfZGF0YShoYW5kbGUsIGRpcixcbjEwNjM6XHRcdFx0XHRcdCAgICAgIG5ld19zaXplICYjNDM7IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuMTA2NDpcdFx0aWYgKHJldClcbjEwNjU6XHRcdFx0cmV0dXJuIHJldDtcbjEwNjY6XHRcbjEwNjc6XHRcdGV4dDRfdXBkYXRlX2ZpbmFsX2RlKGV4dDRfZ2V0X2lubGluZV94YXR0cl9wb3MoZGlyLCBpbG9jKSwgb2xkX3NpemUsXG4xMDY4Olx0XHRcdFx0ICAgICBFWFQ0X0koZGlyKS1cdTAwM2VpX2lubGluZV9zaXplIC1cbjEwNjk6XHRcdFx0XHRcdFx0XHRFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbjEwNzA6XHRcdGRpci1cdTAwM2VpX3NpemUgPSBFWFQ0X0koZGlyKS1cdTAwM2VpX2Rpc2tzaXplID0gRVhUNF9JKGRpciktXHUwMDNlaV9pbmxpbmVfc2l6ZTtcbjEwNzE6XHRcdHJldHVybiAwO1xuMTA3MjpcdH1cbjEwNzM6XHRcbjEwNzQ6XHRzdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jayxcbjEwNzU6XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbjEwNzY6XHR7XG4xMDc3Olx0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4xMDc4Olx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzID0ge1xuMTA3OTpcdFx0XHQucyA9IHsgLm5vdF9mb3VuZCA9IC1FTk9EQVRBLCB9LFxuMTA4MDpcdFx0fTtcbjEwODE6XHRcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaSA9IHtcbjEwODI6XHRcdFx0Lm5hbWVfaW5kZXggPSBFWFQ0X1hBVFRSX0lOREVYX1NZU1RFTSxcbjEwODM6XHRcdFx0Lm5hbWUgPSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBLFxuMTA4NDpcdFx0XHQudmFsdWUgPSBOVUxMLFxuMTA4NTpcdFx0XHQudmFsdWVfbGVuID0gMCxcbjEwODY6XHRcdH07XG4xMDg3Olx0XHRpbnQgZXJyb3I7XG4xMDg4Olx0XHR2b2lkICppX2Jsb2NrX2J1ZiA9IE5VTEw7XG4xMDg5Olx0XHR2b2lkICp4YXR0cl9idWYgPSBOVUxMO1xuMTA5MDpcdFx0dm9pZCAqaGVhZGVyID0gTlVMTDtcbjEwOTE6XHRcdHZvaWQgKnRhaWwgPSBOVUxMO1xuMTA5MjpcdFx0aW50IHhhdHRyX3NpemU7XG4xMDkzOlx0XHRzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlO1xuMTA5NDpcdFxuMTA5NTpcdFx0aV9ibG9ja19idWYgPSBrbWFsbG9jKEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUsIEdGUF9OT0ZTKTtcbjEwOTY6XHRcdGlmICghaV9ibG9ja19idWYpIHtcbjEwOTc6XHRcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuMTA5ODpcdFx0XHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuMTA5OTpcdFx0XHRnb3RvIGVycm9yO1xuMTEwMDpcdFx0fVxuMTEwMTpcdFx0ZG93bl93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbjExMDI6XHRcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbjExMDM6XHRcdGlmIChlcnJvcilcbjExMDQ6XHRcdFx0Z290byBlcnJvcjtcbjExMDU6XHRcdHJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKFx1MDAyNmlzLmlsb2MpO1xuMTEwNjpcdFx0aGVhZGVyID0gSUhEUihpbm9kZSwgcmF3X2lub2RlKTtcbjExMDc6XHRcdHRhaWwgPSBJVEFJTChpbm9kZSwgcmF3X2lub2RlKTtcbjExMDg6XHRcdHhhdHRyX3NpemUgPSB0YWlsIC0gaGVhZGVyO1xuMTEwOTpcdFx0eGF0dHJfYnVmID0ga21hbGxvYyh4YXR0cl9zaXplLCBHRlBfTk9GUyk7XG4xMTEwOlx0XHRpZiAoIXhhdHRyX2J1Zikge1xuMTExMTpcdFx0XHRlcnJvciA9IC1FTk9NRU07XG4xMTEyOlx0XHRcdGdvdG8gZXJyb3I7XG4xMTEzOlx0XHR9XG4xMTE0Olx0XHRCVUZGRVJfVFJBQ0UoaXMuaWxvYy5iaCwgXCYjMzQ7Z2V0X3dyaXRlX2FjY2Vzc1wmIzM0Oyk7XG4xMTE1Olx0XHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgaXMuaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7XG4xMTE2Olx0XHRpZiAoZXJyb3IpXG4xMTE3Olx0XHRcdGdvdG8gZXJyb3I7XG4xMTE4Olx0XHRtZW1jcHkoaV9ibG9ja19idWYsICh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuMTExOTpcdFx0bWVtc2V0KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuMTEyMDpcdFx0bWVtc2V0KGVpLVx1MDAzZWlfZGF0YSwgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4xMTIxOlx0XHRtZW1jcHkoeGF0dHJfYnVmLCBoZWFkZXIsIHhhdHRyX3NpemUpO1xuMTEyMjpcdFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS1cdTAwM2VpX3NiKSBcdTAwMjZcdTAwMjZcbjExMjM6XHRcdFx0KFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSkge1xuMTEyNDpcdFx0XHRleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xuMTEyNTpcdFx0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XG4xMTI2Olx0XHRcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgMCwgTlVMTCwgMCk7XG4xMTI3Olx0XG4xMTI4Olx0XHRcdGlmIChJU19FUlIocGF0aCkpIHtcbjExMjk6XHRcdFx0XHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XG4xMTMwOlx0XHRcdFx0Z290byByZWNvdmVyeTtcbjExMzE6XHRcdFx0fVxuMTEzMjpcdFx0XHRzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXg7XG4xMTMzOlx0XG4xMTM0Olx0XHRcdG5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XG4xMTM1Olx0XHRcdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpO1xuMTEzNjpcdFx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2bmV3ZXgsIGJsb2NrKTtcbjExMzc6XHRcdFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXgsIDApO1xuMTEzODpcdFx0XHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4xMTM5Olx0XHRcdFx0ZXJyb3IgPSBQVFJfRVJSKHBhdGgpO1xuMTE0MDpcdFx0XHRcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXG4xMTQxOlx0XHRcdFx0XHRnb3RvIHJlY292ZXJ5O1xuMTE0MjpcdFx0XHRcdGVsc2VcbjExNDM6XHRcdFx0XHRcdGdvdG8gbm9fZnJlZTtcbjExNDQ6XHRcdFx0fSBlbHNlIHtcbjExNDU6XHRcdFx0XHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XG4xMTQ2Olx0XHRcdH1cbjExNDc6XHRcdH0gZWxzZSB7XG4xMTQ4Olx0XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9kYXRhWzBdID0gY3B1X3RvX2xlMzIoYmxvY2spO1xuMTE0OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTY4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgSW5saW5lIERhdGEgRnVuY3Rpb25zKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGRlZXBlciBkaXZlIGludG8gYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYCBhbmQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCBhbmQgaG93IHRoZXkgYXJlIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgZXh0NCYjMzk7cyBpbmxpbmUgZGF0YSBpbXBsZW1lbnRhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGVzZSBmdW5jdGlvbnMgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzIGluIGhvdyBleHQ0IHN0b3JlcyBkYXRhIGZvciBzbWFsbGVyIGZpbGVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGV4YWN0bHkgdGhlc2Ugcm91dGluZXMgZml0IGluIHRoZSBvdmVyYWxsIHNjaGVtZSBvZiB0aGluZ3MuIEkmIzM5O20gZ29pbmcgdG8gZ28gbGluZS1ieS1saW5lIGFuZCBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLCB0aGUgbG9ja2luZyBzZW1hbnRpY3MgKG9yIGxhY2sgdGhlcmVvZiwgaW4gdGhlIGNhc2Ugb2YgdGhlICpub2xvY2sgdmVyc2lvbiopLCBhbmQgdGhlIGVycm9yIGhhbmRsaW5nLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhc3N1bXB0aW9ucyBiZWluZyBtYWRlIGFib3V0IHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZSwgYW5kIGhvdyB0aGUgaW5saW5lIGRhdGEmIzM5O3MgaW50ZWdyaXR5IGlzIGVuc3VyZWQuIFdoYXQgYXJlIHRoZSBrZXkgaW52YXJpYW50cyBtYWludGFpbmVkPyBIb3cgZG9lcyB0aGlzIGNvZGUgcHJvdGVjdCB0aGUgbWV0YWRhdGEgY29uc2lzdGVuY3k/IEl0JiMzOTtzIGFsbCBhYm91dCBlbnN1cmluZyB0aGUgcmlnaHQgbGV2ZWwgb2YgY29uY3VycmVuY3kgYW5kIGRhdGEgaW50ZWdyaXR5IGluIHRoaXMgaW1wb3J0YW50IGFyZWEgb2YgdGhlIGZpbGVzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbmxpbmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1MDpcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsIFx1MDAyNmksIFx1MDAyNmlzKTtcbjExNTE6XHRcdGlmIChlcnJvcilcbjExNTI6XHRcdFx0Z290byByZWNvdmVyeTtcbjExNTM6XHRcdGlmICghaXMucy5ub3RfZm91bmQpXG4xMTU0Olx0XHRcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlLCBpbm9kZSwgXHUwMDI2aSwgXHUwMDI2aXMpO1xuMTE1NTpcdHJlY292ZXJ5OlxuMTE1NjpcdFx0aWYgKGVycm9yKSB7XG4xMTU3Olx0XHRcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4xMTU4Olx0XHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7XG4xMTU5Olx0XHRcdG1lbWNweShoZWFkZXIsIHhhdHRyX2J1ZiwgeGF0dHJfc2l6ZSk7XG4xMTYwOlx0bm9fZnJlZTpcbjExNjE6XHRcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbjExNjI6XHRcdFx0bWVtY3B5KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIGlfYmxvY2tfYnVmLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbjExNjM6XHRcdFx0bWVtY3B5KGVpLVx1MDAzZWlfZGF0YSwgcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuMTE2NDpcdFx0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4xMTY1Olx0XHRcdGdldF9iaChpcy5pbG9jLmJoKTtcbjExNjY6XHRcdFx0ZXh0NF9tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgXHUwMDI2aXMuaWxvYyk7XG4xMTY3Olx0XHR9IGVsc2Uge1xuMTE2ODpcdFx0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xuMTE2OTpcdFx0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4xMTcwOlx0XHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbjExNzE6XHRcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuMTE3MjpcdFx0XHR9XG4xMTczOlx0XHRcdGdldF9iaChpcy5pbG9jLmJoKTtcbjExNzQ6XHRcdFx0ZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbjExNzU6XHRcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9vZmYgPSAwO1xuMTE3NjpcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xuMTE3NzpcdFx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4xMTc4Olx0XHRcdGJyZWxzZShiaCk7XG4xMTc5Olx0XHR9XG4xMTgwOlx0XHRnb3RvIG91dDtcbjExODE6XHRlcnJvcjpcbjExODI6XHRcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7XG4xMTgzOlx0XHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xuMTE4NDpcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbjExODU6XHRvdXQ6XG4xMTg2Olx0XHRicmVsc2UoaXMuaWxvYy5iaCk7XG4xMTg3Olx0XHR1cF93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbjExODg6XHRcdGtmcmVlKGlfYmxvY2tfYnVmKTtcbjExODk6XHRcdGtmcmVlKHhhdHRyX2J1Zik7XG4xMTkwOlx0XHRyZXR1cm4gZXJyb3I7XG4xMTkxOlx0fVxuMTE5MjpcdFxuMTE5MzpcdHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuMTE5NDpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuMTE5NTpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKVxuMTE5NjpcdHtcbjExOTc6XHRcdGludCBlcnJvcjtcbjExOTg6XHRcdHZvaWQgKmJ1ZiA9IE5VTEw7XG4xMTk5Olx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbjEyMDA6XHRcdGludCBpbmxpbmVfc2l6ZTtcbjEyMDE6XHRcdGV4dDRfZnNibGtfdCBuZXdibG9jayA9IDA7XG4xMjAyOlx0XHRzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXI7XG4xMjAzOlx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuMTIwNDpcdFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jaztcbjEyMDU6XHRcbjEyMDY6XHRcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xuMTIwNzpcdFx0YnVmID0ga21hbGxvYyhpbmxpbmVfc2l6ZSwgR0ZQX05PRlMpO1xuMTIwODpcdFx0aWYgKCFidWYpIHtcbjEyMDk6XHRcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuMTIxMDpcdFx0XHRnb3RvIG91dDtcbjEyMTE6XHRcdH1cbjEyMTI6XHRcbjEyMTM6XHRcdGVycm9yID0gZXh0NF9yZWFkX2lubGluZV9kYXRhKGlub2RlLCBidWYsIGlubGluZV9zaXplLCBpbG9jKTtcbjEyMTQ6XHRcdGlmIChlcnJvciBcdTAwM2MgMClcbjEyMTU6XHRcdFx0Z290byBvdXQ7XG4xMjE2Olx0XG4xMjE3Olx0XHQvKlxuMTIxODpcdFx0ICogTWFrZSBzdXJlIHRoZSBpbmxpbmUgZGlyZWN0b3J5IGVudHJpZXMgcGFzcyBjaGVja3MgYmVmb3JlIHdlIHRyeSB0b1xuMTIxOTpcdFx0ICogY29udmVydCB0aGVtLCBzbyB0aGF0IHdlIGF2b2lkIHRvdWNoaW5nIHN0dWZmIHRoYXQgbmVlZHMgZnNjay5cbjEyMjA6XHRcdCAqL1xuMTIyMTpcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuMTIyMjpcdFx0XHRlcnJvciA9IGV4dDRfY2hlY2tfYWxsX2RlKGlub2RlLCBpbG9jLVx1MDAzZWJoLFxuMTIyMzpcdFx0XHRcdFx0XHRidWYgJiM0MzsgRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUsXG4xMjI0Olx0XHRcdFx0XHRcdGlubGluZV9zaXplIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUpO1xuMTIyNTpcdFx0XHRpZiAoZXJyb3IpXG4xMjI2Olx0XHRcdFx0Z290byBvdXQ7XG4xMjI3Olx0XHR9XG4xMjI4Olx0XG4xMjI5Olx0XHRtZW1zZXQoXHUwMDI2YXIsIDAsIHNpemVvZihhcikpO1xuMTIzMDpcdFx0YXIuaW5vZGUgPSBpbm9kZTtcbjEyMzE6XHRcdGFyLmxvZ2ljYWwgPSAwO1xuMTIzMjpcdFx0YXIubGVuID0gMTtcbjEyMzM6XHRcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4xMjM0Olx0XHRcdGFyLmZsYWdzID0gRVhUNF9NQl9ISU5UX0RBVEE7XG4xMjM1Olx0XHRlbHNlXG4xMjM2Olx0XHRcdGFyLmZsYWdzID0gMDtcbjEyMzc6XHRcdG5ld2Jsb2NrID0gZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZSwgXHUwMDI2YXIsIFx1MDAyNmVycm9yKTtcbjEyMzg6XHRcdGlmIChlcnJvciBcdTAwM2MgMClcbjEyMzk6XHRcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZsb3csIHNvIEkmIzM5O2xsIGJyZWFrIGl0IGRvd24gcGllY2UgYnkgcGllY2UuIEZpcnN0LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGNvZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0JiMzOTtzIGNhbGxlZCBhbmQsIG1vc3QgaW1wb3J0YW50bHksICp3aHkqIGl0JiMzOTtzIGNhbGxlZC4gV2hhdCYjMzk7cyB0aGUgdHJpZ2dlcmluZyBldmVudD8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciB0cmFuc2FjdGlvbj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGJlIGltbWVkaWF0ZWx5IGF3YXJlIG9mLCBnaXZlbiB0aGUgJiMzNDtub2xvY2smIzM0OyBkZXNpZ25hdGlvbj8gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSByZWQgZmxhZywgc28gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jay1mcmVlIGFzcGVjdHMuCgpJJiMzOTtsbCBtZW50YWxseSBtYXAgb3V0IHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBpbm9kZSwgdGhlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzLCBhbmQgdGhlIGV4dGVudCB0cmVlLiBJcyBpdCBtb3ZpbmcgZGF0YSwgYWxsb2NhdGluZyBuZXcgYmxvY2tzLCBvciBzaW1wbHkgdXBkYXRpbmcgbWV0YWRhdGE/IElzIGl0IGEgZGVzdHJ1Y3RpdmUgb3BlcmF0aW9uIChsaWtlIGFuIGluLXBsYWNlIGNvbnZlcnNpb24pLCBvciBkb2VzIGl0IG1haW50YWluIHRoZSBvbGQgZGF0YSAocGVyaGFwcyBmb3IgYSBwb3RlbnRpYWwgcm9sbGJhY2spPwoKSSBzaG91bGQgYWxzbyBhbnRpY2lwYXRlIGVycm9yIHBhdGhzLiBXaGF0IGFyZSB0aGUgY29tbW9uIGZhaWx1cmUgc2NlbmFyaW9zPyBBcmUgdGhlcmUgY2hlY2tzIGZvciByZXNvdXJjZSBleGhhdXN0aW9uIChkaXNrIGZ1bGwsIGV0Yy4pPyBXaGF0IGhhcHBlbnMgaWYgYSBjcml0aWNhbCBtZXRhZGF0YSB1cGRhdGUgZmFpbHMgbWlkLW9wZXJhdGlvbj8gQXJlIHRoZXJlIGFueSBhdG9taWNpdHkgZ3VhcmFudGVlcywgb3IgaXMgdGhlcmUgYSByaXNrIG9mIGluY29uc2lzdGVudCBzdGF0ZSBpZiB0aGUgZnVuY3Rpb24gaXMgaW50ZXJydXB0ZWQ/IEhvdyBhcmUgdGhlc2UgZmFpbHVyZXMgaGFuZGxlZD8gQXJlIHRoZXJlIHJldHJpZXM/IEZhbGxiYWNrcz8gUGFuaWMgc2l0dWF0aW9ucz8KCkZpbmFsbHksIGhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGV4dDQgY29kZT8gQXJlIHRoZXJlIGFueSBhc3N1bXB0aW9ucyBtYWRlIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgZmlsZXN5c3RlbSBvciB0aGUgc3Vycm91bmRpbmcgY29udGV4dD8gQXJlIHRoZXJlIGltcGxpY2l0IGNhbGxzIHRvIG90aGVyIGZ1bmN0aW9ucyBvciBzdHJ1Y3R1cmVzPyBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEkmIzM5O20gYXdhcmUgb2YgdGhlIGRlcGVuZGVuY2llcywgc28gdGhhdCBJIGNhbiB1bmRlcnN0YW5kIGFueSBwb3NzaWJsZSByaXBwbGUgZWZmZWN0cy4gSSYjMzk7bSBnb2luZyB0byBwYXkgYXR0ZW50aW9uIHRvIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBqb3VybmFsaW5nLiBIb3cgaXMgdGhpcyBvcGVyYXRpb24gbG9nZ2VkPyBJZiBpdCYjMzk7cyBhIGNyaXRpY2FsIGNoYW5nZSwgaXMgaXQgYmVpbmcgam91cm5hbGVkPyBJZiBzbywgd2hhdCBpcyB3cml0dGVuIHRvIHRoZSBqb3VybmFsPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5saW5lLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDU1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDA6XHRcdGFsbG9jYXRlZF9ibG9jayA9IEVYVDRfQzJCKHNiaSwgYXIubGVuKTtcbjEyNDE6XHRcdGJoID0gc2JfZ2V0YmxrKGlub2RlLVx1MDAzZWlfc2IsIG5ld2Jsb2NrKTtcbjEyNDI6XHRcdGlmICghYmgpIHtcbjEyNDM6XHRcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuMTI0NDpcdFx0XHRnb3RvIG91dF9iaDtcbjEyNDU6XHRcdH1cbjEyNDY6XHRcbjEyNDc6XHRcdGxvY2tfYnVmZmVyKGJoKTtcbjEyNDg6XHRcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgYmgsXG4xMjQ5Olx0XHRcdFx0XHRcdCAgICAgICBFWFQ0X0pUUl9OT05FKTtcbjEyNTA6XHRcdGlmIChlcnJvcikge1xuMTI1MTpcdFx0XHR1bmxvY2tfYnVmZmVyKGJoKTtcbjEyNTI6XHRcdFx0ZXJyb3IgPSAtRUlPO1xuMTI1MzpcdFx0XHRnb3RvIG91dF9iaDtcbjEyNTQ6XHRcdH1cbjEyNTU6XHRcdG1lbXNldChiaC1cdTAwM2ViX2RhdGEsIDAsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuMTI1NjpcdFxuMTI1NzpcdFx0aWYgKCFTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbjEyNTg6XHRcdFx0bWVtY3B5KGJoLVx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XG4xMjU5Olx0XHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuMTI2MDpcdFx0XHR1bmxvY2tfYnVmZmVyKGJoKTtcbjEyNjE6XHRcdFx0ZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsXG4xMjYyOlx0XHRcdFx0XHRcdFx0ICAgaW5vZGUsIGJoKTtcbjEyNjM6XHRcdH0gZWxzZSB7XG4xMjY0Olx0XHRcdHVubG9ja19idWZmZXIoYmgpO1xuMTI2NTpcdFx0XHRlcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbjEyNjY6XHRcdFx0XHQgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLVx1MDAzZWlub2RlKSxcbjEyNjc6XHRcdFx0XHQgIGJ1ZiAmIzQzOyBFWFQ0X0lOTElORV9ET1RET1RfU0laRSxcbjEyNjg6XHRcdFx0XHQgIGlubGluZV9zaXplIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUpO1xuMTI2OTpcdFx0fVxuMTI3MDpcdG91dF9iaDpcbjEyNzE6XHRcdGlmIChlcnJvcikge1xuMTI3MjpcdFx0XHRpZiAoYmgpXG4xMjczOlx0XHRcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIG5ld2Jsb2NrKTtcbjEyNzQ6XHRcdFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xuMTI3NTpcdFxuMTI3NjpcdFx0XHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuMTI3NzpcdFx0XHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xuMTI3ODpcdFx0XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIDApO1xuMTI3OTpcdFx0XHR1cF93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbjEyODA6XHRcdH0gZWxzZSB7XG4xMjgxOlx0XHRcdGVycm9yID0gZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlLCBpbm9kZSxcbjEyODI6XHRcdFx0XHRcdG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIGJoKTtcbjEyODM6XHRcdH1cbjEyODQ6XHRvdXQ6XG4xMjg1Olx0XHRrZnJlZShidWYpO1xuMTI4NjpcdFx0cmV0dXJuIGVycm9yO1xuMTI4NzpcdH1cbjEyODg6XHRcbjEyODk6XHQvKlxuMTI5MDpcdCAqIFRyeSB0byBhZGQgdGhlIG5ldyBlbnRyeSB0byB0aGUgaW5saW5lIGRhdGEuXG4xMjkxOlx0ICogSWYgc3VjY2VlZHMsIHJldHVybiAwLiBJZiBub3QsIGV4dGVuZGVkIHRoZSBpbmxpbmUgZGlyIGFuZCBjb3BpZWQgZGF0YSB0b1xuMTI5MjpcdCAqIHRoZSBuZXcgY3JlYXRlZCBibG9jay5cbjEyOTM6XHQgKi9cbjEyOTQ6XHRpbnQgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzc0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogOTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW5saW5lIERhdGEgQ29udmVyc2lvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgYWx3YXlzICp3aHkqIHdhcyB0aGlzIGNoYW5nZSBuZWNlc3Nhcnk/IEkgc2VlIHRoYXQgaXQmIzM5O3MgYWx0ZXJpbmcgdGhlIGlubGluZSBkYXRhIGNvbnZlcnNpb24gcHJvY2Vzcy4gUHJldmlvdXNseSwgaXQgbG9va3MgbGlrZSBgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9ja2Agd2FzIGNhbGxlZCwgdGhlbiBgZXh0NF9tYXBfYmxvY2tzYC4gSWYgYGV4dDRfbWFwX2Jsb2Nrc2AgZmFpbGVkLCB0aGV5JiMzOTtkIHJvbGwgYmFjayB3aXRoIGBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGFgLiBOb3csIHRoZXkmIzM5O3JlIGFsbG9jYXRpbmcgdGhlIG5ldyBibG9jayBkaXJlY3RseSB3aXRoIGBleHQ0X21iX25ld19ibG9ja3NgLCBwb3B1bGF0aW5nIGl0LCBhbmQgKnRoZW4qIGF0b21pY2FsbHkgcmVwbGFjaW5nIHRoZSBpbmxpbmUgZGF0YSB3aXRoIHRoZSBibG9jay9leHRlbnQgdXNpbmcgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYC4gVGhlIGFkdmFudGFnZSBpcywgcHJlc3VtYWJseSwgYmV0dGVyIHJvbGxiYWNrIGNhcGFiaWxpdGllcyBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgdGhlIGNvbnZlcnNpb24uCgpNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyBtZW1vcnkgc2FmZXR5LiBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IGF1ZGl0IGZvciBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBsZWFrcyBvZiBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdG8gdXNlcnNwYWNlLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHRoYXQgbWlnaHQgYmUgdXNlZCBpbiBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBpbnNwZWN0IGV2ZXJ5IHZhcmlhYmxlIGFuZCBidWZmZXIgd2l0aGluIHRoZXNlIGZ1bmN0aW9ucy4KCkZpcnN0LCBsZXQmIzM5O3MgbG9vayBhdCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2A6IEkgc2VlIGEgYGJ1ZmAgYWxsb2NhdGVkIHdpdGggYGttYWxsb2NgLCB0aGUgaW5saW5lIGRhdGEgcmVhZCBpbnRvIGl0LiBHb29kLiBJdCYjMzk7cyBmcmVlZCBvbiBlcnJvci4gYGFyYCBpcyB6ZXJvZWQgb3V0LCB3aGljaCBpcyBnb29kIHByYWN0aWNlLiBgYWxsb2NhdGVkX2Jsb2NrYCBpcyBjYWxjdWxhdGVkLiBUaGVuLCBgc2JfZ2V0YmxrYCByZXRyaWV2ZXMgYSBibG9jaywgd2hpY2ggaXMgdGhlbiAqemVyb2VkIG91dCogYmVmb3JlIGFueSBkYXRhIGlzIGNvcGllZCBvciB0aGUgZGlyYmxvY2sgaXMgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSB2ZXJ5IGltcG9ydGFudCBzdGVwIGFuZCBhIGdvb2Qgc2lnbiBmb3IgbWVtb3J5IHNhZmV0eS4gYG1lbWNweWAgY29waWVzIHRoZSBpbmxpbmUgZGF0YSBpbnRvIHRoZSBibG9jay4gTm8gb2J2aW91cyBpc3N1ZXMgaGVyZSBzbyBmYXIuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AuIEkgc2VlIGBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzYCwgYW5kIHRoZSBpbXBvcnRhbnQgcGFydCBpcyB0aGF0IGBpcy5pbG9jYCAqaXMqIGluaXRpYWxpemVkIGJ5IGBleHQ0X2dldF9pbm9kZV9sb2NgLiBPa2F5LCB3ZSYjMzk7cmUgbm90IHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRoZXJlLiBOZXh0LCBgc3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpYCBsb29rcyBwcm9wZXJseSBpbml0aWFsaXplZC4gYGlfYmxvY2tfYnVmYCBpcyBhbGxvY2F0ZWQsIGRhdGEgaXMgY29waWVkIGludG8gaXQgZnJvbSBgcmF3X2lub2RlLSZndDtpX2Jsb2NrYCwgdGhlbiB0aGUgaW5saW5lIGRhdGEgYXJlYSBpcyAqemVyb2VkKi4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gcHJldmVudCBzdGFsZSBkYXRhLiBUaGVuIGB4YXR0cl9idWZgIGlzIGFsbG9jYXRlZCBhbmQgY29waWVkIGZyb20uIEFnYWluLCBubyByZWQgZmxhZ3MuIEkgc2VlIGEgYHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleGAgYW5kIHRob3NlIGluaXRpYWxpemVkIGV4dGVudCBmaWVsZHMuIEJ1dCwgd2FpdCEgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGV4dDRfZXh0ZW50YC4gSSYjMzk7bGwgc2VhcmNoIHRoZSBjb2RlYmFzZSB0byBtYWtlIHN1cmUgSSBrbm93IGFsbCBpdHMgZmllbGRzIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlIHdoYXQmIzM5O3MgZ29pbmcgb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyBkYXRhIGlzIG9yZ2FuaXplZC4gT2theSwgSSYjMzk7bGwgZ28gdGhyb3VnaCBhbmQgY2hlY2sgdGhlIGBzdHJ1Y3QgZXh0NF9leHRlbnRgIGRlZmluaXRpb24gcmlnaHQgbm93Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBleHQ0X2V4dGVudCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0X2V4dGVudHMuaD00OD1zdHJ1Y3QgZXh0NF9leHRlbnRfdGFpbCB7XG4tLVxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaC01NS0gKi9cbmZzL2V4dDQvZXh0NF9leHRlbnRzLmg6NTY6c3RydWN0IGV4dDRfZXh0ZW50IHtcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtNTctXHRfX2xlMzJcdGVlX2Jsb2NrO1x0LyogZmlyc3QgbG9naWNhbCBibG9jayBleHRlbnQgY292ZXJzICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDQ3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgZXh0NCBFeHRlbnQgU3RydWN0dXJlKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZ1bmRhbWVudGFsIGBleHQ0X2V4dGVudGAgc3RydWN0dXJlIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBkaXJlY3RseSBhdCB0aGUgaGVhZGVyIGZpbGUg4oCTIGBmcy9leHQ0L2V4dDRfZXh0ZW50cy5oYCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTYsIGFzIHRoYXQmIzM5O3MgcHJvYmFibHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgYSBjbGVhciBwaWN0dXJlIGluIG15IGhlYWQgb2YgdGhlIGNvbnN0aXR1ZW50IGZpZWxkcyBhbmQgdGhlaXIgcHVycG9zZXMuIFdoYXQgaW5mb3JtYXRpb24gZG9lcyB0aGlzIHN0cnVjdHVyZSBob2xkPyBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGtleSBjb21wb25lbnRzIOKAkyB0aGUgc3RhcnRpbmcgYmxvY2ssIHRoZSBudW1iZXIgb2YgYmxvY2tzLCBtYXliZSBhIGxlYWYgbm9kZSBwb2ludGVyIGFuZCB0aGUgbG9naWNhbCBibG9jayB0aGF0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGRpc2sgYmxvY2ssIGFuZCBpZiBpdCYjMzk7cyB0aGUgbGVhZiBub2RlLCBhIHBvaW50ZXIgdG8gdGhlIGRpcmVjdC9pbmRpcmVjdC9kb3VibGUtaW5kaXJlY3QgYmxvY2tzLCBhbmQgYWxsIHJlbGF0ZWQgbWV0YWRhdGEuIFVuZGVyc3RhbmRpbmcgdGhpcyBzdHJ1Y3R1cmUgaXMgY3J1Y2lhbCBmb3IgYW55IGRlZXBlciB3b3JrIHdpdGggZXh0ZW50cywgZXNwZWNpYWxseSBpZiBJJiMzOTttIHRyb3VibGVzaG9vdGluZyBvciBvcHRpbWl6aW5nIEkvTyBwZXJmb3JtYW5jZS4gSXQmIzM5O3MgdGhlIGJ1aWxkaW5nIGJsb2NrIGZvciBhbGwgZXh0ZW50LWJhc2VkIGJsb2NrIGFsbG9jYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDRfZXh0ZW50cy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdH07XG4gIDUxOlx0XG4gIDUyOlx0LypcbiAgNTM6XHQgKiBUaGlzIGlzIHRoZSBleHRlbnQgb24tZGlzayBzdHJ1Y3R1cmUuXG4gIDU0Olx0ICogSXQmIzM5O3MgdXNlZCBhdCB0aGUgYm90dG9tIG9mIHRoZSB0cmVlLlxuICA1NTpcdCAqL1xuICA1NjpcdHN0cnVjdCBleHQ0X2V4dGVudCB7XG4gIDU3Olx0XHRfX2xlMzJcdGVlX2Jsb2NrO1x0LyogZmlyc3QgbG9naWNhbCBibG9jayBleHRlbnQgY292ZXJzICovXG4gIDU4Olx0XHRfX2xlMTZcdGVlX2xlbjtcdFx0LyogbnVtYmVyIG9mIGJsb2NrcyBjb3ZlcmVkIGJ5IGV4dGVudCAqL1xuICA1OTpcdFx0X19sZTE2XHRlZV9zdGFydF9oaTtcdC8qIGhpZ2ggMTYgYml0cyBvZiBwaHlzaWNhbCBibG9jayAqL1xuICA2MDpcdFx0X19sZTMyXHRlZV9zdGFydF9sbztcdC8qIGxvdyAzMiBiaXRzIG9mIHBoeXNpY2FsIGJsb2NrICovXG4gIDYxOlx0fTtcbiAgNjI6XHRcbiAgNjM6XHQvKlxuICA2NDpcdCAqIFRoaXMgaXMgaW5kZXggb24tZGlzayBzdHJ1Y3R1cmUuXG4gIDY1Olx0ICogSXQmIzM5O3MgdXNlZCBhdCBhbGwgdGhlIGxldmVscyBleGNlcHQgdGhlIGJvdHRvbS5cbiAgNjY6XHQgKi9cbiAgNjc6XHRzdHJ1Y3QgZXh0NF9leHRlbnRfaWR4IHtcbiAgNjg6XHRcdF9fbGUzMlx0ZWlfYmxvY2s7XHQvKiBpbmRleCBjb3ZlcnMgbG9naWNhbCBibG9ja3MgZnJvbSAmIzM5O2Jsb2NrJiMzOTsgKi9cbiAgNjk6XHRcdF9fbGUzMlx0ZWlfbGVhZl9sbztcdC8qIHBvaW50ZXIgdG8gdGhlIHBoeXNpY2FsIGJsb2NrIG9mIHRoZSBuZXh0ICpcbiAgNzA6XHRcdFx0XHRcdCAqIGxldmVsLiBsZWFmIG9yIG5leHQgaW5kZXggY291bGQgYmUgdGhlcmUgKi9cbiAgNzE6XHRcdF9fbGUxNlx0ZWlfbGVhZl9oaTtcdC8qIGhpZ2ggMTYgYml0cyBvZiBwaHlzaWNhbCBibG9jayAqL1xuICA3MjpcdFx0X191MTZcdGVpX3VudXNlZDtcbiAgNzM6XHR9O1xuICA3NDpcdFxuICA3NTpcdC8qXG4gIDc2Olx0ICogRWFjaCBibG9jayAobGVhdmVzIGFuZCBpbmRleGVzKSwgZXZlbiBpbm9kZS1zdG9yZWQgaGFzIGhlYWRlci5cbiAgNzc6XHQgKi9cbiAgNzg6XHRzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyIHtcbiAgNzk6XHRcdF9fbGUxNlx0ZWhfbWFnaWM7XHQvKiBwcm9iYWJseSB3aWxsIHN1cHBvcnQgZGlmZmVyZW50IGZvcm1hdHMgKi9cbiAgODA6XHRcdF9fbGUxNlx0ZWhfZW50cmllcztcdC8qIG51bWJlciBvZiB2YWxpZCBlbnRyaWVzICovXG4gIDgxOlx0XHRfX2xlMTZcdGVoX21heDtcdFx0LyogY2FwYWNpdHkgb2Ygc3RvcmUgaW4gZW50cmllcyAqL1xuICA4MjpcdFx0X19sZTE2XHRlaF9kZXB0aDtcdC8qIGhhcyB0cmVlIHJlYWwgdW5kZXJseWluZyBibG9ja3M/ICovXG4gIDgzOlx0XHRfX2xlMzJcdGVoX2dlbmVyYXRpb247XHQvKiBnZW5lcmF0aW9uIG9mIHRoZSB0cmVlICovXG4gIDg0Olx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMjUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGV4dDRfZXh0X3N0b3JlX3BibG9jayoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGV4dDRfZXh0X3N0b3JlX3BibG9jaygmYW1wO25ld2V4LCBibG9jayk7YCBpcyBkb2luZy4gRmlyc3QsIEkmIzM5O2xsIHJlZnJlc2ggbXkgbWVtb3J5IG9mIHRoZSBgZXh0NF9leHRlbnRgIHN0cnVjdHVyZS4gUmlnaHQsIGBlZV9ibG9ja2AgaXMgNCBieXRlcywgYGVlX2xlbmAgaXMgMiBieXRlcywgdGhlbiBgZWVfc3RhcnRfaGlgIGlzIDIgYnl0ZXMgYW5kIGBlZV9zdGFydF9sb2AgaXMgNCBieXRlcywgdG90YWxpbmcgMTIgYnl0ZXMgZm9yIHRoZSBlbnRpcmUgZXh0ZW50IHN0cnVjdHVyZS4gTm93LCBJIG5lZWQgdG8ga25vdyBwcmVjaXNlbHkgd2hhdCBgZXh0NF9leHRfc3RvcmVfcGJsb2NrYCBpcyBzZXR0aW5nIHdpdGhpbiB0aGlzIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIGZpZ3VyaW5nIG91dCBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9leHRfc3RvcmVfcGJsb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NF9leHRlbnRzLmg9MjMyPXN0YXRpYyBpbmxpbmUgZXh0NF9mc2Jsa190IGV4dDRfaWR4X3BibG9jayhzdHJ1Y3QgZXh0NF9leHRlbnRfaWR4ICppeClcbi0tXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oLTI0MS0vKlxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaDoyNDI6ICogZXh0NF9leHRfc3RvcmVfcGJsb2NrOlxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaC0yNDMtICogc3RvcmVzIGEgbGFyZ2UgcGh5c2ljYWwgYmxvY2sgbnVtYmVyIGludG8gYW4gZXh0ZW50IHN0cnVjdCxcbi0tXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oLTI0NS0gKi9cbmZzL2V4dDQvZXh0NF9leHRlbnRzLmg6MjQ2OnN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2V4dF9zdG9yZV9wYmxvY2soc3RydWN0IGV4dDRfZXh0ZW50ICpleCxcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtMjQ3LVx0XHRcdFx0XHQgZXh0NF9mc2Jsa190IHBiKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM9MjIyPXN0YXRpYyBpbnQgZXh0ZW50c19rdW5pdF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTMxNC1cdEVYVF9GSVJTVF9FWFRFTlQoZWgpLVx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KEVYVF9EQVRBX0xFTik7XG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jOjMxNTpcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhFWFRfRklSU1RfRVhURU5UKGVoKSwgRVhUX0RBVEFfUEJMSyk7XG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTMxNi1cdGlmICghcGFyYW0gfHwgcGFyYW0tXHUwMDNlaXNfdW53cml0X2F0X3N0YXJ0KVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTE5OTI9ZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTIwODUtXHRcdFx0ZXgtXHUwMDNlZWVfYmxvY2sgPSBuZXdleHQtXHUwMDNlZWVfYmxvY2s7XG5mcy9leHQ0L2V4dGVudHMuYzoyMDg2Olx0XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgZXh0NF9leHRfcGJsb2NrKG5ld2V4dCkpO1xuZnMvZXh0NC9leHRlbnRzLmMtMjA4Ny1cdFx0XHRleC1cdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNihleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleClcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0yMTk2LVx0bmVhcmV4LVx1MDAzZWVlX2Jsb2NrID0gbmV3ZXh0LVx1MDAzZWVlX2Jsb2NrO1xuZnMvZXh0NC9leHRlbnRzLmM6MjE5NzpcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhuZWFyZXgsIGV4dDRfZXh0X3BibG9jayhuZXdleHQpKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTIxOTgtXHRuZWFyZXgtXHUwMDNlZWVfbGVuID0gbmV3ZXh0LVx1MDAzZWVlX2xlbjtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz0yNjE0PWV4dDRfZXh0X3JtX2xlYWYoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0yNzM5LVx0XHRcdC8qIHRoaXMgZXh0ZW50IGlzIHJlbW92ZWQ7IG1hcmsgc2xvdCBlbnRpcmVseSB1bnVzZWQgKi9cbmZzL2V4dDQvZXh0ZW50cy5jOjI3NDA6XHRcdFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCAwKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTI3NDEtXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MzE5MT1zdGF0aWMgc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfc3BsaXRfZXh0ZW50X2F0KGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzI0Ni1cdGV4Mi1cdTAwM2VlZV9sZW4gICA9IGNwdV90b19sZTE2KGVlX2xlbiAtIChzcGxpdCAtIGVlX2Jsb2NrKSk7XG5mcy9leHQ0L2V4dGVudHMuYzozMjQ3Olx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4MiwgbmV3YmxvY2spO1xuZnMvZXh0NC9leHRlbnRzLmMtMzI0OC1cdGlmIChpc191bndyaXQpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MzU1Nz1leHQ0X2V4dF9jb252ZXJ0X3RvX2luaXRpYWxpemVkKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzY0NS1cdFx0XHRleC1cdTAwM2VlZV9ibG9jayA9IGNwdV90b19sZTMyKGVlX2Jsb2NrICYjNDM7IG1hcF9sZW4pO1xuZnMvZXh0NC9leHRlbnRzLmM6MzY0NjpcdFx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIGVlX3BibGsgJiM0MzsgbWFwX2xlbik7XG5mcy9leHQ0L2V4dGVudHMuYy0zNjQ3LVx0XHRcdGV4LVx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGVlX2xlbiAtIG1hcF9sZW4pO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTM2OTEtXHRcdFx0YWJ1dF9leC1cdTAwM2VlZV9ibG9jayA9IGNwdV90b19sZTMyKG5leHRfbGJsayAtIG1hcF9sZW4pO1xuZnMvZXh0NC9leHRlbnRzLmM6MzY5MjpcdFx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soYWJ1dF9leCwgbmV4dF9wYmxrIC0gbWFwX2xlbik7XG5mcy9leHQ0L2V4dGVudHMuYy0zNjkzLVx0XHRcdGV4LVx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGVlX2xlbiAtIG1hcF9sZW4pO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTM3NDUtXHRcdFx0XHRjcHVfdG9fbGUxNigqYWxsb2NhdGVkIC0gc3BsaXRfbWFwLm1fbGVuKTtcbmZzL2V4dDQvZXh0ZW50cy5jOjM3NDY6XHRcdFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKFx1MDAyNnplcm9fZXgxLFxuZnMvZXh0NC9leHRlbnRzLmMtMzc0Ny1cdFx0XHRcdGV4dDRfZXh0X3BibG9jayhleCkgJiM0Mzsgc3BsaXRfbWFwLm1fbGJsayAmIzQzO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTM3NjAtXHRcdFx0XHRcdFx0XHRlZV9ibG9jayk7XG5mcy9leHQ0L2V4dGVudHMuYzozNzYxOlx0XHRcdFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKFx1MDAyNnplcm9fZXgyLFxuZnMvZXh0NC9leHRlbnRzLmMtMzc2Mi1cdFx0XHRcdFx0XHQgICAgICBleHQ0X2V4dF9wYmxvY2soZXgpKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00MjY5PWludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDQ3My1cdHBibGsgPSBuZXdibG9jayAmIzQzOyBvZmZzZXQ7XG5mcy9leHQ0L2V4dGVudHMuYzo0NDc0Olx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKFx1MDAyNm5ld2V4LCBwYmxrKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTQ0NzUtXHRuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNihhci5sZW4pO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTU3NjU9ZXh0NF9zd2FwX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZTEsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTg5OS1cdFx0dG1wX2V4ID0gKmV4MTtcbmZzL2V4dDQvZXh0ZW50cy5jOjU5MDA6XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleDEsIGV4dDRfZXh0X3BibG9jayhleDIpKTtcbmZzL2V4dDQvZXh0ZW50cy5jOjU5MDE6XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleDIsIGV4dDRfZXh0X3BibG9jayhcdTAwMjZ0bXBfZXgpKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTU5MDItXHRcdGV4MS1cdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNihlMl9sZW4pO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTYwMjk9aW50IGV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXgoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3Qgc3RhcnQsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNjA4Mi1cdFx0ZXh0NF9leHRfbWFya19pbml0aWFsaXplZChleCk7XG5mcy9leHQ0L2V4dGVudHMuYzo2MDgzOlx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCBwYmxrKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTYwODQtXHRkb3duX3dyaXRlKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9kYXRhX3NlbSk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTkzMT1zdGF0aWMgaW50IGV4dDRfZmNfd3JpdGVfaW5vZGVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgKmNyYylcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtOTYxLVx0XHRleC1cdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNihyYW5nZS1cdTAwM2VsZW4pO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjk2MjpcdFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCByYW5nZS1cdTAwM2VwYmxrKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy05NjMtXHRcdGlmIChyYW5nZS1cdTAwM2V1bndyaXR0ZW4pXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIxNDg9c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjIwMi1cdFx0XHRuZXdleC5lZV9ibG9jayA9IGNwdV90b19sZTMyKGN1cik7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjIwMzpcdFx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjIwNC1cdFx0XHRcdFx1MDAyNm5ld2V4LCBzdGFydF9wYmxrICYjNDM7IGN1ciAtIHN0YXJ0KTtcbi0tXG5mcy9leHQ0L2lubGluZS5jPTEwNzQ9c3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMTM1LVx0XHRuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNigxKTtcbmZzL2V4dDQvaW5saW5lLmM6MTEzNjpcdFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKFx1MDAyNm5ld2V4LCBibG9jayk7XG5mcy9leHQ0L2lubGluZS5jLTExMzctXHRcdHBhdGggPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsIFx1MDAyNm5ld2V4LCAwKTtcbi0tXG5mcy9leHQ0L21pZ3JhdGUuYz0yMT1zdGF0aWMgaW50IGZpbmlzaF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvbWlncmF0ZS5jLTMzLVx0bmV3ZXh0LmVlX2xlbiAgID0gY3B1X3RvX2xlMTYobGItXHUwMDNlbGFzdF9ibG9jayAtIGxiLVx1MDAzZWZpcnN0X2Jsb2NrICYjNDM7IDEpO1xuZnMvZXh0NC9taWdyYXRlLmM6MzQ6XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2bmV3ZXh0LCBsYi1cdTAwM2VmaXJzdF9wYmxvY2spO1xuZnMvZXh0NC9taWdyYXRlLmMtMzUtXHQvKiBMb2NraW5nIG9ubHkgZm9yIGNvbnZlbmllbmNlIHNpbmNlIHdlIGFyZSBvcGVyYXRpbmcgb24gdGVtcCBpbm9kZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAzMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzcyBhcyBJIGRlbHZlIGludG8gdGhlIGBleHQ0X2V4dF9zdG9yZV9wYmxvY2tgIGltcGxlbWVudGF0aW9uOgoKKipEaXZpbmcgaW50byBgZXh0NF9leHRfc3RvcmVfcGJsb2NrYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGV4dDRfZXh0X3N0b3JlX3BibG9ja2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBwdXJwb3NlLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gc3RvcmluZyBwaHlzaWNhbCBibG9jayBhZGRyZXNzZXMgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0mIzM5O3MgZXh0ZW50IHN0cnVjdHVyZSwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjbHVlcy4gSeKAmW0gdGhpbmtpbmcsIGlzIHRoaXMgYSB3cml0ZSBwYXRoIGZ1bmN0aW9uPyBJcyBpdCBiZWluZyBjYWxsZWQgZHVyaW5nIGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uPyBNeSBleHBlcmllbmNlIHNheXMgaXQgcHJvYmFibHkgZGVhbHMgd2l0aCBtYXBwaW5nIGxvZ2ljYWwgYmxvY2tzICh3aGF0IHRoZSB1c2VyIHNlZXMpIHRvIHBoeXNpY2FsIGJsb2NrcyAod2hlcmUgZGF0YSBpcyBhY3R1YWxseSBzdG9yZWQgb24gdGhlIGRpc2spLiBUaGUgbmFtZSwgJiMzOTtzdG9yZV9wYmxvY2smIzM5Oywgc2NyZWFtcyB0aGF0IGF0IG1lLCBvZiBjb3Vyc2UsIGJ1dCBJIHdhbnQgdG8gc2VlIHRoZSBjb250ZXh0LgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHNjZW5hcmlvczogaG93IGl0IGRlYWxzIHdpdGggZXhpc3RpbmcgZXh0ZW50cywgbmV3IGV4dGVudHMsIGFuZCBwb3NzaWJseSwgd2hhdCBpZiB0aGUgZXh0ZW50IGhhcyB0byBiZSBzcGxpdC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBoYW5kbGluZywgZXNwZWNpYWxseSB3aGF0IGhhcHBlbnMgaWYgYWxsb2NhdGlvbiBmYWlscyBvciB0aGUgZmlsZXN5c3RlbSBtZXRhZGF0YSBiZWNvbWVzIGNvcnJ1cHRlZC4gSSBrbm93IHRoYXQgZXh0NCBpcyBnZW5lcmFsbHkgcm9idXN0LCBidXQgSSBuZWVkIHRvIGlkZW50aWZ5IHBvc3NpYmxlIHdlYWsgcG9pbnRzLiBJIGFsc28gbmVlZCB0byBhc3Nlc3MgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVyYWN0aW9ucyB3aXRoIHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9ycywgaW5vZGUgbWV0YWRhdGEsIGFuZCB0aGUgZXh0ZW50IHRyZWUgc3RydWN0dXJlLiBUaGlzIGlzIGFsbCBhYm91dCB0aGUgZGV0YWlscyBvZiBob3cgZXh0NCBtYW5hZ2VzIGl0cyBzcGFjZSEgVGhlIGVmZmljaWVuY3kgb2YgdGhlIGFsbG9jYXRpb24gd2lsbCBiZSBzb21ldGhpbmcgdG8ga2VlcCBteSBleWUgb3V0IGZvciBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NF9leHRlbnRzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTgKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MDpcdFxuIDI0MTpcdC8qXG4gMjQyOlx0ICogZXh0NF9leHRfc3RvcmVfcGJsb2NrOlxuIDI0MzpcdCAqIHN0b3JlcyBhIGxhcmdlIHBoeXNpY2FsIGJsb2NrIG51bWJlciBpbnRvIGFuIGV4dGVudCBzdHJ1Y3QsXG4gMjQ0Olx0ICogYnJlYWtpbmcgaXQgaW50byBwYXJ0c1xuIDI0NTpcdCAqL1xuIDI0NjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2V4dF9zdG9yZV9wYmxvY2soc3RydWN0IGV4dDRfZXh0ZW50ICpleCxcbiAyNDc6XHRcdFx0XHRcdFx0IGV4dDRfZnNibGtfdCBwYilcbiAyNDg6XHR7XG4gMjQ5Olx0XHRleC1cdTAwM2VlZV9zdGFydF9sbyA9IGNwdV90b19sZTMyKCh1bnNpZ25lZCBsb25nKSAocGIgXHUwMDI2IDB4ZmZmZmZmZmYpKTtcbiAyNTA6XHRcdGV4LVx1MDAzZWVlX3N0YXJ0X2hpID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIGxvbmcpICgocGIgXHUwMDNlXHUwMDNlIDMxKSBcdTAwM2VcdTAwM2UgMSkgXHUwMDI2XG4gMjUxOlx0XHRcdFx0XHQgICAgICAweGZmZmYpO1xuIDI1MjpcdH1cbiAyNTM6XHRcbiAyNTQ6XHQvKlxuIDI1NTpcdCAqIGV4dDRfaWR4X3N0b3JlX3BibG9jazpcbiAyNTY6XHQgKiBzdG9yZXMgYSBsYXJnZSBwaHlzaWNhbCBibG9jayBudW1iZXIgaW50byBhbiBpbmRleCBzdHJ1Y3QsXG4gMjU3Olx0ICogYnJlYWtpbmcgaXQgaW50byBwYXJ0c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcxNgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEV4dGVudCBTdHJ1Y3R1cmUgYW5kIFByZXBhcmluZyBmb3IgRnVydGhlciBFeGFtaW5hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmV3ZXhgIHN0cnVjdHVyZSBhbmQgbm90aW5nIGhvdyBpdHMgZmllbGRzIGFyZSBpbml0aWFsaXplZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgYGVlX2Jsb2NrYCwgYGVlX2xlbmAsIGBlZV9zdGFydF9sb2AsIGFuZCBgZWVfc3RhcnRfaGlgIGFyZSBhbGwgZXhwbGljaXRseSBhc3NpZ25lZC4gYGVlX2Jsb2NrYCBhbmQgYGVlX2xlbmAgYXJlIGdldHRpbmcgYnl0ZS1vcmRlciBjb252ZXJ0ZWQsIHdoaWNoIGlzIGV4cGVjdGVkLiBUaGUgYGV4dDRfZXh0X3N0b3JlX3BibG9ja2AgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgYGVlX3N0YXJ0X2xvYCBhbmQgYGVlX3N0YXJ0X2hpYCwgd2hpY2ggaXMgd2hlcmUgdGhlIGJsb2NrIG1hcHBpbmcgbWFnaWMgcHJvYmFibHkgaGFwcGVucy4KClRoZSBzdHJ1Y3R1cmUgaXRzZWxmLCBgc3RydWN0IGV4dDRfZXh0ZW50YCwgbG9va3MgY2xlYW4g4oCTIG5vIHN1cnByaXNlcyB3aXRoIHRoZSBmaWVsZCBzaXplcyBhbmQgYWxpZ25tZW50LiA0IGJ5dGVzIGZvciBgZWVfYmxvY2tgLCAyIGZvciBgZWVfbGVuYCwgYW5vdGhlciAyIGZvciBgZWVfc3RhcnRfbG9gLCBhbmQgdGhlbiA0IG1vcmUgZm9yIGBlZV9zdGFydF9oaWAuIFRoYXQgc3VtcyB1cCB0byAxMiBieXRlcyB0b3RhbCwgd2hpY2ggZml0cyBuYXR1cmFsbHkgd2l0aCB0aG9zZSBgbGUzMmAgYW5kIGBsZTE2YCB0eXBlcywgc28gYWxpZ25tZW50IHNob3VsZCBiZSBva2F5LiBObyBwYWRkaW5nIHRoYXQgSSBjYW4gc2VlLCB3aGljaCBpcyBnb29kLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgc3RydWN0dXJlIGlzIGFjdHVhbGx5ICpkb2luZyogd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dC4gSSBuZWVkIHRvIHBpdm90IGFuZCBzZWUgaG93IGl0IGZpdHMgaW4sIGFuZCBob3cgaXRzIGRhdGEgYXJlIHVzZWQgaW4gcHJhY3RpY2UsIGFuZCBJJiMzOTttIGdvaW5nIHRvIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kYCBub3cgdG8gc3RhcnQgcHV0dGluZyB0aGUgcGllY2VzIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmg9MTIxPXN0cnVjdCBleHQ0X3hhdHRyX3NlYXJjaCB7XG4tLVxuZnMvZXh0NC94YXR0ci5oLTEyOC1cbmZzL2V4dDQveGF0dHIuaDoxMjk6c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7XG5mcy9leHQ0L3hhdHRyLmgtMTMwLVx0c3RydWN0IGV4dDRfeGF0dHJfc2VhcmNoIHM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzM4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8geGF0dHIuaCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgZnMvZXh0NC94YXR0ci5oYCBoZWFkZXIgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gYXJvdW5kIGxpbmUgMTIwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGluIHRoaXMgYXJlYS4gUHJvYmFibHkgbG9va2luZyBmb3IgYSBzcGVjaWZpYyBzdHJ1Y3R1cmUgb3IgbWFjcm8sIG1heWJlIHJlbGF0ZWQgdG8gaG93IGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykgYXJlIHN0b3JlZCBvciBhY2Nlc3NlZCB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoYXQgc2VjdGlvbiBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byB0aGUgb24tZGlzayBmb3JtYXQgb3IgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRob3NlIGF0dHJpYnV0ZXMuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJlc3RpbmcgZGV0YWlscyBhcm91bmQgdGhlIGFsbG9jYXRpb24gb3IgaW5kZXhpbmcgb2YgdGhlIGRhdGEuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHJlbGV2YW50IGNvbnRleHQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGlmIHRoZXJlJiMzOTtzIGFueSBoaW50IG9mIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgcG90ZW50aWFsIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBvciBhbnkga25vd24gbGltaXRhdGlvbnMgaW4gdGhpcyBhcmVhLiBJdCYjMzk7cyB0aW1lIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiBiZWhpbmQgdGhlIHNjZW5lcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExNTpcdFx0Y29uc3Qgdm9pZCAqdmFsdWU7XG4gMTE2Olx0XHRzaXplX3QgdmFsdWVfbGVuO1xuIDExNzpcdFx0aW50IG5hbWVfaW5kZXg7XG4gMTE4Olx0XHRpbnQgaW5faW5vZGU7XG4gMTE5Olx0fTtcbiAxMjA6XHRcbiAxMjE6XHRzdHJ1Y3QgZXh0NF94YXR0cl9zZWFyY2gge1xuIDEyMjpcdFx0c3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmZpcnN0O1xuIDEyMzpcdFx0dm9pZCAqYmFzZTtcbiAxMjQ6XHRcdHZvaWQgKmVuZDtcbiAxMjU6XHRcdHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICpoZXJlO1xuIDEyNjpcdFx0aW50IG5vdF9mb3VuZDtcbiAxMjc6XHR9O1xuIDEyODpcdFxuIDEyOTpcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQge1xuIDEzMDpcdFx0c3RydWN0IGV4dDRfeGF0dHJfc2VhcmNoIHM7XG4gMTMxOlx0XHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4gMTMyOlx0fTtcbiAxMzM6XHRcbiAxMzQ6XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSB7XG4gMTM1Olx0XHR1bnNpZ25lZCBpbnQgY291bnQ7XG4gMTM2Olx0XHRzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7XG4gMTM3Olx0fTtcbiAxMzg6XHRcbiAxMzk6XHRleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7XG4gMTQwOlx0ZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyO1xuIDE0MTpcdGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXI7XG4gMTQyOlx0ZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfaHVyZF9oYW5kbGVyO1xuIDE0MzpcdFxuIDE0NDpcdCNkZWZpbmUgRVhUNF9YQVRUUl9OQU1FX0VOQ1JZUFRJT05fQ09OVEVYVCBcJiMzNDtjXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDQ4CgkJCQkJCQlvdXRwdXQ6IDMwOAoJCQkJCQkJdGhvdWdodHM6IDkwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBbmFseXNpcyBvZiBFeHQ0IElubGluZSBEYXRhIENvbnZlcnNpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O20gbm90aW5nIHRoZSBkZXNpZ25hdGVkIGluaXRpYWxpemVycyB1c2VkIGZvciBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AgYW5kIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgLiBUaGlzIGlzIGdvb2Q7IGl0IGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgZmllbGRzIHdpdGhpbiB0aGVzZSBzdHJ1Y3RzIGFuZCB0aGVpciBuZXN0ZWQgc3RydWN0dXJlcy4gU3BlY2lmaWNhbGx5LCB0aGlzIG1lYW5zIGFsbCB0aGUgZmllbGRzIG9mIGBpc2AgYW5kIGBpYCBhcmUgY2xlYXJlZCwgYW5kIGBpcy5pbG9jYCBpcyBpbml0aWFsaXplZCBsYXRlciBieSBgZXh0NF9nZXRfaW5vZGVfbG9jYC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHByZXZlbnRpbmcgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLgoKTmV4dCwgSSYjMzk7bSB2ZXJpZnlpbmcgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGNvcHlpbmcgb3BlcmF0aW9ucy4gSSBzZWUgdGhyZWUgYGttYWxsb2NgIGNhbGxzOiBvbmUgZm9yIGBpX2Jsb2NrX2J1ZmAsIHdoaWNoIGlzIGp1c3QgdXNlZCBmb3Igc2F2aW5nIGFuZCByZXN0b3JpbmcgYHJhd19pbm9kZS0mZ3Q7aV9ibG9ja2A7IGFub3RoZXIgZm9yIGB4YXR0cl9idWZgLCB1c2VkIHNpbWlsYXJseSB0byBzYXZlL3Jlc3RvcmUgeGF0dHJzOyBhbmQgdGhlIGJsb2NrIGJ1ZmZlciBgYmgtJmd0O2JfZGF0YWAsIHdoaWNoIGdldHMgemVyb2VkIHdpdGggYG1lbXNldGAgYmVmb3JlIGFueXRoaW5nIGVsc2UgaXMgd3JpdHRlbiB0byBpdC4gVGhlIGJsb2NrIGJ1ZmZlciBpcyBsYXRlciBwb3B1bGF0ZWQgYnkgYSBgbWVtY3B5YCBvciBgZXh0NF9pbml0X2RpcmJsb2NrYC4gVGhlc2UgYWxsb2NhdGlvbiBhbmQgY29weWluZyBvcGVyYXRpb25zLCBpbiB0aGlzIGNvbnRleHQsIGxvb2sgcHJldHR5IHNhZmUuCgpUaGVuLCBJJiMzOTttIGNoZWNraW5nIGZvciBwb3RlbnRpYWwgZGF0YSBleHBvc3VyZSB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgcmVhZHMsIGFuZCBhbnkgYm91bmRzIGlzc3Vlcy4gVGhpcyBjb2RlIGlzbiYjMzk7dCBkaXJlY3RseSBjb3B5aW5nIGFueXRoaW5nIHRvIHVzZXIgc3BhY2UuIEl0IGRlYWxzIHdpdGggaW50ZXJuYWwgYmxvY2sgYWxsb2NhdGlvbiBhbmQgY29udmVydGluZyBpbmxpbmUgZGF0YSBpbnRvIHJlZ3VsYXIgYmxvY2svZXh0ZW50IGRhdGE7IHNvIHRoZSBjaGFuY2UgZm9yIGFuIGluZm9ybWF0aW9uIGxlYWsgaXMgYWxtb3N0IG5pbC4gSSBzZWUgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgZWl0aGVyLiBUaGUgYmxvY2sgYnVmZmVyIGFuZCBhbGxvY2F0ZWQgbWVtb3J5IGFyZSBleHBsaWNpdGx5IHplcm9lZC4gTGVuZ3RocyBhbmQgYm91bmRzIGFyZSBhbHNvIG5vdCBtb2RpZmllZCBpbiBhIHdheSB0aGF0IHJpc2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpOb3csIEkmIzM5O20gcnVubmluZyB0aHJvdWdoIHRoZSBOZWVkc0tNU0FOIGd1aWRlbGluZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Uga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIGl0IGRvZXNuJiMzOTt0IGludm9sdmUgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm9yIGRvZXMgaXQgaW5pdGlhbGl6ZSBjb21wbGljYXRlZCBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuIFRoZXJlIGFyZSBubyBib3VuZHMgY2hlY2tzIG9yIG1hbmlwdWxhdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLgoKVGhlIGd1aWRlbGluZXMgc2F5IHRvIHNldCBOZWVkc0tNU0FOIHRvIGZhbHNlIGlmIGFsbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQsIGFuZCB0aGF0JiMzOTtzIHByZWNpc2VseSB3aGF0JiMzOTtzIGhhcHBlbmluZyBoZXJlIHdpdGggYD17MH1gLCBgbWVtc2V0YCwgYW5kIGBremFsbG9jYC4gTm8gcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgYXJlIHByZXNlbnQuIFRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiByZWZhY3RvcmluZyB0aGUgaW5saW5lIGRhdGEgY29udmVyc2lvbiwgYW5kIGFsbCBhbGxvY2F0ZWQgaGVhcCBhbmQgc3RhY2sgdmFyaWFibGVzIGFyZSBmdWxseSBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzYWdlLiBUaGUgYmxvY2sgYnVmZmVyIGlzIGV4cGxpY2l0bHkgemVyb2VkLgoKU28sIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBUaGVyZSYjMzk7cyBubyBLTVNBTiBjb25jZXJuLiBOZWVkc0tNU0FOIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4gVGltZSB0byBwcmVwYXJlIHRoZSByZWFzb25pbmcgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMgaW4gYGZzL2V4dDQvaW5saW5lLmNgIGJ5IGludHJvZHVjaW5nIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgYW5kIGFsbG9jYXRpbmcgdGhlIGRlc3RpbmF0aW9uIGJsb2NrIHByaW9yIHRvIGNsZWFyaW5nIGlubGluZSBkYXRhIGluIHRoZSBpbm9kZS5cblxuUmV2aWV3aW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhY3Jvc3MgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczpcbjEuIEFsbCBsb2NhbCBzdGFjayBzdHJ1Y3R1cmVzIChgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AsIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgLCBgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyYCwgYW5kIGBzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXhgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBgbWVtc2V0YCwgb3IgZXhwbGljaXQgbWVtYmVyIGFzc2lnbm1lbnRzIGJlZm9yZSB1c2UuXG4yLiBIZWFwIGJ1ZmZlcnMgYWxsb2NhdGVkIHZpYSBga21hbGxvY2AgKGBpX2Jsb2NrX2J1ZmAsIGB4YXR0cl9idWZgLCBgYnVmYCkgYXJlIGltbWVkaWF0ZWx5IHBvcHVsYXRlZCB2aWEgYG1lbWNweWAgb3IgYGV4dDRfcmVhZF9pbmxpbmVfZGF0YWAuXG4zLiBUaGUgYmxvY2sgYnVmZmVyIGRhdGEgKGBiaC1cdTAwM2ViX2RhdGFgKSBpcyBleHBsaWNpdGx5IGNsZWFyZWQgdXNpbmcgYG1lbXNldGAgYmVmb3JlIHdyaXRpbmcgaW5saW5lIGRhdGEgb3IgZGlyZWN0b3J5IGVudHJpZXMuXG40LiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGJyYW5jaGluZy9sb2dpYyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBlcnJvciByZWNvdmVyeSBoYW5kbGluZywgbG9ja2luZywgb3IgZXh0ZW50IG1hbmlwdWxhdGlvbikgZmFsbCB1bmRlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMgaW4gYGZzL2V4dDQvaW5saW5lLmNgIGJ5IGludHJvZHVjaW5nIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgYW5kIGFsbG9jYXRpbmcgdGhlIGRlc3RpbmF0aW9uIGJsb2NrIHByaW9yIHRvIGNsZWFyaW5nIGlubGluZSBkYXRhIGluIHRoZSBpbm9kZS5cblxuUmV2aWV3aW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhY3Jvc3MgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczpcbjEuIEFsbCBsb2NhbCBzdGFjayBzdHJ1Y3R1cmVzIChgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AsIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgLCBgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyYCwgYW5kIGBzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXhgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBgbWVtc2V0YCwgb3IgZXhwbGljaXQgbWVtYmVyIGFzc2lnbm1lbnRzIGJlZm9yZSB1c2UuXG4yLiBIZWFwIGJ1ZmZlcnMgYWxsb2NhdGVkIHZpYSBga21hbGxvY2AgKGBpX2Jsb2NrX2J1ZmAsIGB4YXR0cl9idWZgLCBgYnVmYCkgYXJlIGltbWVkaWF0ZWx5IHBvcHVsYXRlZCB2aWEgYG1lbWNweWAgb3IgYGV4dDRfcmVhZF9pbmxpbmVfZGF0YWAuXG4zLiBUaGUgYmxvY2sgYnVmZmVyIGRhdGEgKGBiaC1cdTAwM2ViX2RhdGFgKSBpcyBleHBsaWNpdGx5IGNsZWFyZWQgdXNpbmcgYG1lbXNldGAgYmVmb3JlIHdyaXRpbmcgaW5saW5lIGRhdGEgb3IgZGlyZWN0b3J5IGVudHJpZXMuXG40LiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGJyYW5jaGluZy9sb2dpYyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBlcnJvciByZWNvdmVyeSBoYW5kbGluZywgbG9ja2luZywgb3IgZXh0ZW50IG1hbmlwdWxhdGlvbikgZmFsbCB1bmRlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozMzowNi4wODMzNzkxODRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzM2MjY1NDg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tcIixcbiAgICBcImV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tcIixcbiAgICBcImV4dDRfY29udmVydF9pbmxpbmVfZGF0YVwiLFxuICAgIFwiZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMgaW4gYGZzL2V4dDQvaW5saW5lLmNgIGJ5IGludHJvZHVjaW5nIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgYW5kIGFsbG9jYXRpbmcgdGhlIGRlc3RpbmF0aW9uIGJsb2NrIHByaW9yIHRvIGNsZWFyaW5nIGlubGluZSBkYXRhIGluIHRoZSBpbm9kZS5cXG5cXG5SZXZpZXdpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFjcm9zcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zOlxcbjEuIEFsbCBsb2NhbCBzdGFjayBzdHJ1Y3R1cmVzIChgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AsIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgLCBgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyYCwgYW5kIGBzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXhgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBgbWVtc2V0YCwgb3IgZXhwbGljaXQgbWVtYmVyIGFzc2lnbm1lbnRzIGJlZm9yZSB1c2UuXFxuMi4gSGVhcCBidWZmZXJzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2NgIChgaV9ibG9ja19idWZgLCBgeGF0dHJfYnVmYCwgYGJ1ZmApIGFyZSBpbW1lZGlhdGVseSBwb3B1bGF0ZWQgdmlhIGBtZW1jcHlgIG9yIGBleHQ0X3JlYWRfaW5saW5lX2RhdGFgLlxcbjMuIFRoZSBibG9jayBidWZmZXIgZGF0YSAoYGJoLVxcdTAwM2ViX2RhdGFgKSBpcyBleHBsaWNpdGx5IGNsZWFyZWQgdXNpbmcgYG1lbXNldGAgYmVmb3JlIHdyaXRpbmcgaW5saW5lIGRhdGEgb3IgZGlyZWN0b3J5IGVudHJpZXMuXFxuNC4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBicmFuY2hpbmcvbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBlcnJvciByZWNvdmVyeSBoYW5kbGluZywgbG9ja2luZywgb3IgZXh0ZW50IG1hbmlwdWxhdGlvbikgZmFsbCB1bmRlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbWVjaGFuaXNtIGluIGZzL2V4dDQvaW5saW5lLmMsIHJlcGxhY2luZyBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEgd2l0aCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayBhbmQgcmVzdHJ1Y3R1cmluZyBibG9jayBhbGxvY2F0aW9uLCBleHRlbnQgaW5zZXJ0aW9uLCBhbmQgZXJyb3IgcmVjb3ZlcnkgaGFuZGxpbmcgZHVyaW5nIGlubGluZSBkYXRhIGNvbnZlcnNpb24uIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyB3aGVuIGV4cGFuZGluZyBpbmxpbmUgZmlsZXMvZGlyZWN0b3JpZXMgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzM6MDYuMDgzMzg4ODQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjgyNDU3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ZTUyMzEyMDRlMDNjMzAzMjQ2ODM3MTI5NWViOGEyN2Y4MGQxZGViXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMTA6MzM6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbmxpbmUuYyBiL2ZzL2V4dDQvaW5saW5lLmNcXG5pbmRleCA4MDQ1ZTRmZjI3MGM3Li5mZWY5OGFjZWU2ODhmIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvaW5saW5lLmNcXG4rKysgYi9mcy9leHQ0L2lubGluZS5jXFxuQEAgLTE0LDYgKzE0LDcgQEBcXG4gI2luY2x1ZGUgXFxcImV4dDQuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhhdHRyLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0cnVuY2F0ZS5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZXh0NF9leHRlbnRzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIEVYVDRfWEFUVFJfU1lTVEVNX0RBVEFcXHRcXFwiZGF0YVxcXCJcXG4gI2RlZmluZSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFXFx0KChzaXplb2YoX19sZTMyKSAqIEVYVDRfTl9CTE9DS1MpKVxcbkBAIC0xMDcwLDIxICsxMDcxLDEyMyBAQCBzdGF0aWMgaW50IGV4dDRfdXBkYXRlX2lubGluZV9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxcbi1cXHRcXHRcXHRcXHQgICAgIHZvaWQgKmJ1ZiwgaW50IGlubGluZV9zaXplKVxcbitzdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jayxcXG4rXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4ge1xcbi1cXHRpbnQgcmV0O1xcbitcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XFxuK1xcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7XFxuK1xcdFxcdC5zID0geyAubm90X2ZvdW5kID0gLUVOT0RBVEEsIH0sXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaSA9IHtcXG4rXFx0XFx0Lm5hbWVfaW5kZXggPSBFWFQ0X1hBVFRSX0lOREVYX1NZU1RFTSxcXG4rXFx0XFx0Lm5hbWUgPSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBLFxcbitcXHRcXHQudmFsdWUgPSBOVUxMLFxcbitcXHRcXHQudmFsdWVfbGVuID0gMCxcXG4rXFx0fTtcXG4rXFx0aW50IGVycm9yO1xcbitcXHR2b2lkICppX2Jsb2NrX2J1ZiA9IE5VTEw7XFxuK1xcdHZvaWQgKnhhdHRyX2J1ZiA9IE5VTEw7XFxuK1xcdHZvaWQgKmhlYWRlciA9IE5VTEw7XFxuK1xcdHZvaWQgKnRhaWwgPSBOVUxMO1xcbitcXHRpbnQgeGF0dHJfc2l6ZTtcXG4rXFx0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcXG4gXFxuLVxcdHJldCA9IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlubGluZV9zaXplKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHRleHQ0X21zZyhpbm9kZS1cXHUwMDNlaV9zYiwgS0VSTl9FTUVSRyxcXG4tXFx0XFx0XFx0XFxcImVycm9yIHJlc3RvcmluZyBpbmxpbmVfZGF0YSBmb3IgaW5vZGUgLS0gcG90ZW50aWFsIGRhdGEgbG9zcyEgKGlub2RlICVsbHUsIGVycm9yICVkKVxcXCIsXFxuLVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2lubywgcmV0KTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpO1xcbitcXHRpZiAoIWlfYmxvY2tfYnVmKSB7XFxuK1xcdFxcdGVycm9yID0gLUVOT01FTTtcXG4rXFx0XFx0ZG93bl93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbitcXHRcXHRnb3RvIGVycm9yO1xcbiBcXHR9XFxuLVxcdGV4dDRfd3JpdGVfaW5saW5lX2RhdGEoaW5vZGUsIGlsb2MsIGJ1ZiwgMCwgaW5saW5lX3NpemUpO1xcbi1cXHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbitcXHRkb3duX3dyaXRlKFxcdTAwMjZlaS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuK1xcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4rXFx0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoXFx1MDAyNmlzLmlsb2MpO1xcbitcXHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xcbitcXHR0YWlsID0gSVRBSUwoaW5vZGUsIHJhd19pbm9kZSk7XFxuK1xcdHhhdHRyX3NpemUgPSB0YWlsIC0gaGVhZGVyO1xcbitcXHR4YXR0cl9idWYgPSBrbWFsbG9jKHhhdHRyX3NpemUsIEdGUF9OT0ZTKTtcXG4rXFx0aWYgKCF4YXR0cl9idWYpIHtcXG4rXFx0XFx0ZXJyb3IgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXHR9XFxuK1xcdEJVRkZFUl9UUkFDRShpcy5pbG9jLmJoLCBcXFwiZ2V0X3dyaXRlX2FjY2Vzc1xcXCIpO1xcbitcXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXFx1MDAzZWlfc2IsIGlzLmlsb2MuYmgsIEVYVDRfSlRSX05PTkUpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdGdvdG8gZXJyb3I7XFxuK1xcdG1lbWNweShpX2Jsb2NrX2J1ZiwgKHZvaWQgKilyYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbitcXHRtZW1zZXQoKHZvaWQgKilyYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbitcXHRtZW1zZXQoZWktXFx1MDAzZWlfZGF0YSwgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuK1xcdG1lbWNweSh4YXR0cl9idWYsIGhlYWRlciwgeGF0dHJfc2l6ZSk7XFxuK1xcdGlmIChleHQ0X2hhc19mZWF0dXJlX2V4dGVudHMoaW5vZGUtXFx1MDAzZWlfc2IpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpIHx8IFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkpIHtcXG4rXFx0XFx0ZXh0NF9zZXRfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTtcXG4rXFx0XFx0ZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgaW5vZGUpO1xcbitcXHRcXHRzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIDAsIE5VTEwsIDApO1xcbitcXG4rXFx0XFx0aWYgKElTX0VSUihwYXRoKSkge1xcbitcXHRcXHRcXHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XFxuK1xcdFxcdFxcdGdvdG8gcmVjb3Zlcnk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4O1xcbitcXG4rXFx0XFx0bmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMigwKTtcXG4rXFx0XFx0bmV3ZXguZWVfbGVuID0gY3B1X3RvX2xlMTYoMSk7XFxuK1xcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2bmV3ZXgsIGJsb2NrKTtcXG4rXFx0XFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXFx1MDAyNm5ld2V4LCAwKTtcXG4rXFx0XFx0aWYgKElTX0VSUihwYXRoKSkge1xcbitcXHRcXHRcXHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XFxuK1xcdFxcdFxcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXFxuK1xcdFxcdFxcdFxcdGdvdG8gcmVjb3Zlcnk7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0Z290byBub19mcmVlO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kYXRhWzBdID0gY3B1X3RvX2xlMzIoYmxvY2spO1xcbitcXHR9XFxuK1xcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9maW5kKGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmlzKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIHJlY292ZXJ5O1xcbitcXHRpZiAoIWlzLnMubm90X2ZvdW5kKVxcbitcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZSwgaW5vZGUsIFxcdTAwMjZpLCBcXHUwMDI2aXMpO1xcbityZWNvdmVyeTpcXG4rXFx0aWYgKGVycm9yKSB7XFxuK1xcdFxcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XFxuK1xcdFxcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7XFxuK1xcdFxcdG1lbWNweShoZWFkZXIsIHhhdHRyX2J1ZiwgeGF0dHJfc2l6ZSk7XFxuK25vX2ZyZWU6XFxuK1xcdFxcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7XFxuK1xcdFxcdG1lbWNweSgodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgaV9ibG9ja19idWYsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbitcXHRcXHRtZW1jcHkoZWktXFx1MDAzZWlfZGF0YSwgcmF3X2lub2RlLVxcdTAwM2VpX2Jsb2NrLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG4rXFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xcbitcXHRcXHRnZXRfYmgoaXMuaWxvYy5iaCk7XFxuK1xcdFxcdGV4dDRfbWFya19pbG9jX2RpcnR5KGhhbmRsZSwgaW5vZGUsIFxcdTAwMjZpcy5pbG9jKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKTtcXG4rXFx0XFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4rXFx0XFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbitcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2Rpc2tzaXplID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbitcXHRcXHR9XFxuK1xcdFxcdGdldF9iaChpcy5pbG9jLmJoKTtcXG4rXFx0XFx0ZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuK1xcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX29mZiA9IDA7XFxuK1xcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xcbitcXHRcXHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XFxuK1xcdFxcdGJyZWxzZShiaCk7XFxuK1xcdH1cXG4rXFx0Z290byBvdXQ7XFxuK2Vycm9yOlxcbitcXHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xcbitcXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xcbitcXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApO1xcbitvdXQ6XFxuK1xcdGJyZWxzZShpcy5pbG9jLmJoKTtcXG4rXFx0dXBfd3JpdGUoXFx1MDAyNmVpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4rXFx0a2ZyZWUoaV9ibG9ja19idWYpO1xcbitcXHRrZnJlZSh4YXR0cl9idWYpO1xcbitcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxcbkBAIC0xMDkzLDkgKzExOTYsMTIgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuIHtcXG4gXFx0aW50IGVycm9yO1xcbiBcXHR2b2lkICpidWYgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRhdGFfYmggPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcXG4rXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XFxuIFxcdGludCBpbmxpbmVfc2l6ZTtcXG4rXFx0ZXh0NF9mc2Jsa190IG5ld2Jsb2NrID0gMDtcXG4rXFx0c3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyO1xcbitcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4rXFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jaztcXG4gXFxuIFxcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xcbiBcXHRidWYgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7XFxuQEAgLTExMjAsNjMgKzEyMjYsNjIgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHRlcnJvciA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSk7XFxuLVxcdGlmIChlcnJvcilcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRtYXAubV9sYmxrID0gMDtcXG4tXFx0bWFwLm1fbGVuID0gMTtcXG4tXFx0bWFwLm1fZmxhZ3MgPSAwO1xcbi1cXHRlcnJvciA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBcXHUwMDI2bWFwLCBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKTtcXG4rXFx0bWVtc2V0KFxcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSk7XFxuK1xcdGFyLmlub2RlID0gaW5vZGU7XFxuK1xcdGFyLmxvZ2ljYWwgPSAwO1xcbitcXHRhci5sZW4gPSAxO1xcbitcXHRpZiAoU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSlcXG4rXFx0XFx0YXIuZmxhZ3MgPSBFWFQ0X01CX0hJTlRfREFUQTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRhci5mbGFncyA9IDA7XFxuK1xcdG5ld2Jsb2NrID0gZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZSwgXFx1MDAyNmFyLCBcXHUwMDI2ZXJyb3IpO1xcbiBcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbi1cXHRpZiAoIShtYXAubV9mbGFncyBcXHUwMDI2IEVYVDRfTUFQX01BUFBFRCkpIHtcXG4tXFx0XFx0ZXJyb3IgPSAtRUlPO1xcbi1cXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbi1cXHR9XFxuLVxcbi1cXHRkYXRhX2JoID0gc2JfZ2V0YmxrKGlub2RlLVxcdTAwM2VpX3NiLCBtYXAubV9wYmxrKTtcXG4tXFx0aWYgKCFkYXRhX2JoKSB7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRhbGxvY2F0ZWRfYmxvY2sgPSBFWFQ0X0MyQihzYmksIGFyLmxlbik7XFxuK1xcdGJoID0gc2JfZ2V0YmxrKGlub2RlLVxcdTAwM2VpX3NiLCBuZXdibG9jayk7XFxuK1xcdGlmICghYmgpIHtcXG4gXFx0XFx0ZXJyb3IgPSAtRU5PTUVNO1xcbi1cXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbitcXHRcXHRnb3RvIG91dF9iaDtcXG4gXFx0fVxcbiBcXG4tXFx0bG9ja19idWZmZXIoZGF0YV9iaCk7XFxuLVxcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXFx1MDAzZWlfc2IsIGRhdGFfYmgsXFxuK1xcdGxvY2tfYnVmZmVyKGJoKTtcXG4rXFx0ZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cXHUwMDNlaV9zYiwgYmgsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBFWFQ0X0pUUl9OT05FKTtcXG4gXFx0aWYgKGVycm9yKSB7XFxuLVxcdFxcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XFxuK1xcdFxcdHVubG9ja19idWZmZXIoYmgpO1xcbiBcXHRcXHRlcnJvciA9IC1FSU87XFxuLVxcdFxcdGdvdG8gb3V0X3Jlc3RvcmU7XFxuK1xcdFxcdGdvdG8gb3V0X2JoO1xcbiBcXHR9XFxuLVxcdG1lbXNldChkYXRhX2JoLVxcdTAwM2ViX2RhdGEsIDAsIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSk7XFxuK1xcdG1lbXNldChiaC1cXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbiBcXG4gXFx0aWYgKCFTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuLVxcdFxcdG1lbWNweShkYXRhX2JoLVxcdTAwM2ViX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpO1xcbi1cXHRcXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGRhdGFfYmgpO1xcbi1cXHRcXHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xcbitcXHRcXHRtZW1jcHkoYmgtXFx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XFxuK1xcdFxcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xcbitcXHRcXHR1bmxvY2tfYnVmZmVyKGJoKTtcXG4gXFx0XFx0ZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIGlub2RlLCBkYXRhX2JoKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgaW5vZGUsIGJoKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0dW5sb2NrX2J1ZmZlcihkYXRhX2JoKTtcXG4tXFx0XFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4tXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbi1cXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2Rpc2tzaXplID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbi1cXG4tXFx0XFx0ZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCxcXG4rXFx0XFx0dW5sb2NrX2J1ZmZlcihiaCk7XFxuK1xcdFxcdGVycm9yID0gZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxcbiBcXHRcXHRcXHQgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLVxcdTAwM2Vpbm9kZSksXFxuIFxcdFxcdFxcdCAgYnVmICsgRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUsXFxuIFxcdFxcdFxcdCAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7XFxuLVxcdFxcdGlmICghZXJyb3IpXFxuLVxcdFxcdFxcdGVycm9yID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpO1xcbiBcXHR9XFxuK291dF9iaDpcXG4rXFx0aWYgKGVycm9yKSB7XFxuK1xcdFxcdGlmIChiaClcXG4rXFx0XFx0XFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIG5ld2Jsb2NrKTtcXG4rXFx0XFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xcbiBcXG4tb3V0X3Jlc3RvcmU6XFxuLVxcdGlmIChlcnJvcilcXG4tXFx0XFx0ZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlsb2MsIGJ1ZiwgaW5saW5lX3NpemUpO1xcbi1cXG4rXFx0XFx0ZG93bl93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbitcXHRcXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xcbitcXHRcXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIDApO1xcbitcXHRcXHR1cF93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlcnJvciA9IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZSwgaW5vZGUsXFxuK1xcdFxcdFxcdFxcdG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIGJoKTtcXG4rXFx0fVxcbiBvdXQ6XFxuLVxcdGJyZWxzZShkYXRhX2JoKTtcXG4gXFx0a2ZyZWUoYnVmKTtcXG4gXFx0cmV0dXJuIGVycm9yO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjA2LjQxMjMwODQ2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDIwMjg5OTY0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrXCIsXG4gICAgXCJleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrXCIsXG4gICAgXCJleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFcIixcbiAgICBcImV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIG1lY2hhbmlzbSBpbiBmcy9leHQ0L2lubGluZS5jLCByZXBsYWNpbmcgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhIHdpdGggZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2sgYW5kIHJlc3RydWN0dXJpbmcgYmxvY2sgYWxsb2NhdGlvbiwgZXh0ZW50IGluc2VydGlvbiwgYW5kIGVycm9yIHJlY292ZXJ5IGhhbmRsaW5nIGR1cmluZyBpbmxpbmUgZGF0YSBjb252ZXJzaW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgd2hlbiBleHBhbmRpbmcgaW5saW5lIGZpbGVzL2RpcmVjdG9yaWVzIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWU1MjMxMjA0ZTAzYzMwMzI0NjgzNzEyOTVlYjhhMjdmODBkMWRlYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTA6MzM6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lubGluZS5jIGIvZnMvZXh0NC9pbmxpbmUuY1xuaW5kZXggODA0NWU0ZmYyNzBjNy4uZmVmOThhY2VlNjg4ZiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5saW5lLmNcbisrKyBiL2ZzL2V4dDQvaW5saW5lLmNcbkBAIC0xNCw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXCJleHQ0LmhcIlxuICNpbmNsdWRlIFwieGF0dHIuaFwiXG4gI2luY2x1ZGUgXCJ0cnVuY2F0ZS5oXCJcbisjaW5jbHVkZSBcImV4dDRfZXh0ZW50cy5oXCJcbiBcbiAjZGVmaW5lIEVYVDRfWEFUVFJfU1lTVEVNX0RBVEFcdFwiZGF0YVwiXG4gI2RlZmluZSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFXHQoKHNpemVvZihfX2xlMzIpICogRVhUNF9OX0JMT0NLUykpXG5AQCAtMTA3MCwyMSArMTA3MSwxMjMgQEAgc3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxuLVx0XHRcdFx0ICAgICB2b2lkICpidWYsIGludCBpbmxpbmVfc2l6ZSlcbitzdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jayxcbitcdFx0XHRcdFx0dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiB7XG4tXHRpbnQgcmV0O1xuK1x0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xuK1x0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpcyA9IHtcbitcdFx0LnMgPSB7IC5ub3RfZm91bmQgPSAtRU5PREFUQSwgfSxcbitcdH07XG4rXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGkgPSB7XG4rXHRcdC5uYW1lX2luZGV4ID0gRVhUNF9YQVRUUl9JTkRFWF9TWVNURU0sXG4rXHRcdC5uYW1lID0gRVhUNF9YQVRUUl9TWVNURU1fREFUQSxcbitcdFx0LnZhbHVlID0gTlVMTCxcbitcdFx0LnZhbHVlX2xlbiA9IDAsXG4rXHR9O1xuK1x0aW50IGVycm9yO1xuK1x0dm9pZCAqaV9ibG9ja19idWYgPSBOVUxMO1xuK1x0dm9pZCAqeGF0dHJfYnVmID0gTlVMTDtcbitcdHZvaWQgKmhlYWRlciA9IE5VTEw7XG4rXHR2b2lkICp0YWlsID0gTlVMTDtcbitcdGludCB4YXR0cl9zaXplO1xuK1x0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcbiBcbi1cdHJldCA9IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlubGluZV9zaXplKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0ZXh0NF9tc2coaW5vZGUtXHUwMDNlaV9zYiwgS0VSTl9FTUVSRyxcbi1cdFx0XHRcImVycm9yIHJlc3RvcmluZyBpbmxpbmVfZGF0YSBmb3IgaW5vZGUgLS0gcG90ZW50aWFsIGRhdGEgbG9zcyEgKGlub2RlICVsbHUsIGVycm9yICVkKVwiLFxuLVx0XHRcdGlub2RlLVx1MDAzZWlfaW5vLCByZXQpO1xuLVx0XHRyZXR1cm47XG4rXHRpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpO1xuK1x0aWYgKCFpX2Jsb2NrX2J1Zikge1xuK1x0XHRlcnJvciA9IC1FTk9NRU07XG4rXHRcdGRvd25fd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHRcdGdvdG8gZXJyb3I7XG4gXHR9XG4tXHRleHQ0X3dyaXRlX2lubGluZV9kYXRhKGlub2RlLCBpbG9jLCBidWYsIDAsIGlubGluZV9zaXplKTtcbi1cdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4rXHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuK1x0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIGVycm9yO1xuK1x0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoXHUwMDI2aXMuaWxvYyk7XG4rXHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xuK1x0dGFpbCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpO1xuK1x0eGF0dHJfc2l6ZSA9IHRhaWwgLSBoZWFkZXI7XG4rXHR4YXR0cl9idWYgPSBrbWFsbG9jKHhhdHRyX3NpemUsIEdGUF9OT0ZTKTtcbitcdGlmICgheGF0dHJfYnVmKSB7XG4rXHRcdGVycm9yID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJvcjtcbitcdH1cbitcdEJVRkZFUl9UUkFDRShpcy5pbG9jLmJoLCBcImdldF93cml0ZV9hY2Nlc3NcIik7XG4rXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgaXMuaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gZXJyb3I7XG4rXHRtZW1jcHkoaV9ibG9ja19idWYsICh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0bWVtc2V0KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0bWVtc2V0KGVpLVx1MDAzZWlfZGF0YSwgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4rXHRtZW1jcHkoeGF0dHJfYnVmLCBoZWFkZXIsIHhhdHRyX3NpemUpO1xuK1x0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS1cdTAwM2VpX3NiKSBcdTAwMjZcdTAwMjZcbitcdFx0KFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSkge1xuK1x0XHRleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xuK1x0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XG4rXHRcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgMCwgTlVMTCwgMCk7XG4rXG4rXHRcdGlmIChJU19FUlIocGF0aCkpIHtcbitcdFx0XHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XG4rXHRcdFx0Z290byByZWNvdmVyeTtcbitcdFx0fVxuK1x0XHRzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXg7XG4rXG4rXHRcdG5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XG4rXHRcdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpO1xuK1x0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2bmV3ZXgsIGJsb2NrKTtcbitcdFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXgsIDApO1xuK1x0XHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4rXHRcdFx0ZXJyb3IgPSBQVFJfRVJSKHBhdGgpO1xuK1x0XHRcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXG4rXHRcdFx0XHRnb3RvIHJlY292ZXJ5O1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGdvdG8gbm9fZnJlZTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9kYXRhWzBdID0gY3B1X3RvX2xlMzIoYmxvY2spO1xuK1x0fVxuK1x0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsIFx1MDAyNmksIFx1MDAyNmlzKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byByZWNvdmVyeTtcbitcdGlmICghaXMucy5ub3RfZm91bmQpXG4rXHRcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlLCBpbm9kZSwgXHUwMDI2aSwgXHUwMDI2aXMpO1xuK3JlY292ZXJ5OlxuK1x0aWYgKGVycm9yKSB7XG4rXHRcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4rXHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7XG4rXHRcdG1lbWNweShoZWFkZXIsIHhhdHRyX2J1ZiwgeGF0dHJfc2l6ZSk7XG4rbm9fZnJlZTpcbitcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbitcdFx0bWVtY3B5KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIGlfYmxvY2tfYnVmLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbitcdFx0bWVtY3B5KGVpLVx1MDAzZWlfZGF0YSwgcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4rXHRcdGdldF9iaChpcy5pbG9jLmJoKTtcbitcdFx0ZXh0NF9tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgXHUwMDI2aXMuaWxvYyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xuK1x0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4rXHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbitcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuK1x0XHR9XG4rXHRcdGdldF9iaChpcy5pbG9jLmJoKTtcbitcdFx0ZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbitcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9vZmYgPSAwO1xuK1x0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xuK1x0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4rXHRcdGJyZWxzZShiaCk7XG4rXHR9XG4rXHRnb3RvIG91dDtcbitlcnJvcjpcbitcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7XG4rXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xuK1x0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbitvdXQ6XG4rXHRicmVsc2UoaXMuaWxvYy5iaCk7XG4rXHR1cF93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbitcdGtmcmVlKGlfYmxvY2tfYnVmKTtcbitcdGtmcmVlKHhhdHRyX2J1Zik7XG4rXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuQEAgLTEwOTMsOSArMTE5NiwxMiBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiB7XG4gXHRpbnQgZXJyb3I7XG4gXHR2b2lkICpidWYgPSBOVUxMO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkYXRhX2JoID0gTlVMTDtcbi1cdHN0cnVjdCBleHQ0X21hcF9ibG9ja3MgbWFwO1xuK1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XG4gXHRpbnQgaW5saW5lX3NpemU7XG4rXHRleHQ0X2ZzYmxrX3QgbmV3YmxvY2sgPSAwO1xuK1x0c3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyO1xuK1x0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbitcdHVuc2lnbmVkIGludCBhbGxvY2F0ZWRfYmxvY2s7XG4gXG4gXHRpbmxpbmVfc2l6ZSA9IGV4dDRfZ2V0X2lubGluZV9zaXplKGlub2RlKTtcbiBcdGJ1ZiA9IGttYWxsb2MoaW5saW5lX3NpemUsIEdGUF9OT0ZTKTtcbkBAIC0xMTIwLDYzICsxMjI2LDYyIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0ZXJyb3IgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdG1hcC5tX2xibGsgPSAwO1xuLVx0bWFwLm1fbGVuID0gMTtcbi1cdG1hcC5tX2ZsYWdzID0gMDtcbi1cdGVycm9yID0gZXh0NF9tYXBfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIFx1MDAyNm1hcCwgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSk7XG4rXHRtZW1zZXQoXHUwMDI2YXIsIDAsIHNpemVvZihhcikpO1xuK1x0YXIuaW5vZGUgPSBpbm9kZTtcbitcdGFyLmxvZ2ljYWwgPSAwO1xuK1x0YXIubGVuID0gMTtcbitcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4rXHRcdGFyLmZsYWdzID0gRVhUNF9NQl9ISU5UX0RBVEE7XG4rXHRlbHNlXG4rXHRcdGFyLmZsYWdzID0gMDtcbitcdG5ld2Jsb2NrID0gZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZSwgXHUwMDI2YXIsIFx1MDAyNmVycm9yKTtcbiBcdGlmIChlcnJvciBcdTAwM2MgMClcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbi1cdGlmICghKG1hcC5tX2ZsYWdzIFx1MDAyNiBFWFQ0X01BUF9NQVBQRUQpKSB7XG4tXHRcdGVycm9yID0gLUVJTztcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbi1cdH1cbi1cbi1cdGRhdGFfYmggPSBzYl9nZXRibGsoaW5vZGUtXHUwMDNlaV9zYiwgbWFwLm1fcGJsayk7XG4tXHRpZiAoIWRhdGFfYmgpIHtcbitcdFx0Z290byBvdXQ7XG4rXHRhbGxvY2F0ZWRfYmxvY2sgPSBFWFQ0X0MyQihzYmksIGFyLmxlbik7XG4rXHRiaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLCBuZXdibG9jayk7XG4rXHRpZiAoIWJoKSB7XG4gXHRcdGVycm9yID0gLUVOT01FTTtcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbitcdFx0Z290byBvdXRfYmg7XG4gXHR9XG4gXG4tXHRsb2NrX2J1ZmZlcihkYXRhX2JoKTtcbi1cdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgZGF0YV9iaCxcbitcdGxvY2tfYnVmZmVyKGJoKTtcbitcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgYmgsXG4gXHRcdFx0XHRcdCAgICAgICBFWFQ0X0pUUl9OT05FKTtcbiBcdGlmIChlcnJvcikge1xuLVx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuK1x0XHR1bmxvY2tfYnVmZmVyKGJoKTtcbiBcdFx0ZXJyb3IgPSAtRUlPO1xuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuK1x0XHRnb3RvIG91dF9iaDtcbiBcdH1cbi1cdG1lbXNldChkYXRhX2JoLVx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4rXHRtZW1zZXQoYmgtXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbiBcbiBcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4tXHRcdG1lbWNweShkYXRhX2JoLVx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XG4tXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoZGF0YV9iaCk7XG4tXHRcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XG4rXHRcdG1lbWNweShiaC1cdTAwM2ViX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpO1xuK1x0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbitcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4gXHRcdGVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLFxuLVx0XHRcdFx0XHRcdCAgIGlub2RlLCBkYXRhX2JoKTtcbitcdFx0XHRcdFx0XHQgICBpbm9kZSwgYmgpO1xuIFx0fSBlbHNlIHtcbi1cdFx0dW5sb2NrX2J1ZmZlcihkYXRhX2JoKTtcbi1cdFx0aW5vZGUtXHUwMDNlaV9zaXplID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbi1cdFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbi1cdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2Rpc2tzaXplID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbi1cbi1cdFx0ZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCxcbitcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4rXHRcdGVycm9yID0gZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdCAgbGUzMl90b19jcHUoKChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKWJ1ZiktXHUwMDNlaW5vZGUpLFxuIFx0XHRcdCAgYnVmICsgRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUsXG4gXHRcdFx0ICBpbmxpbmVfc2l6ZSAtIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFKTtcbi1cdFx0aWYgKCFlcnJvcilcbi1cdFx0XHRlcnJvciA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTtcbiBcdH1cbitvdXRfYmg6XG4rXHRpZiAoZXJyb3IpIHtcbitcdFx0aWYgKGJoKVxuK1x0XHRcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBuZXdibG9jayk7XG4rXHRcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbiBcbi1vdXRfcmVzdG9yZTpcbi1cdGlmIChlcnJvcilcbi1cdFx0ZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlsb2MsIGJ1ZiwgaW5saW5lX3NpemUpO1xuLVxuK1x0XHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuK1x0XHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xuK1x0XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIDApO1xuK1x0XHR1cF93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbitcdH0gZWxzZSB7XG4rXHRcdGVycm9yID0gZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlLCBpbm9kZSxcbitcdFx0XHRcdG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIGJoKTtcbitcdH1cbiBvdXQ6XG4tXHRicmVsc2UoZGF0YV9iaCk7XG4gXHRrZnJlZShidWYpO1xuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjA2LjQxMjMwOTkzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMTgwMzMzNTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHRoaXMgcGF0Y2ggYW5hbHlzaXMsIHB1dHRpbmcgbXlzZWxmIGluIHlvdXIgZXhwZXJ0IHNob2VzOlxuXG4qKkFuYWx5emluZyBhbiBleHQ0IElubGluZSBEYXRhIFBhdGNoKipcblxuQWxyaWdodCwgYSBwYXRjaCB0b3VjaGluZyBgZnMvZXh0NC9pbmxpbmUuY2AuIE15IHNwaWRleSBzZW5zZSBpcyB0aW5nbGluZyDigJMgZXh0NCBpcyBjcml0aWNhbCBpbmZyYXN0cnVjdHVyZSwgYW5kIGlubGluZSBkYXRhIGlzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGludGVyZXN0aW5nIGJ1Z3MuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kICpleGFjdGx5KiB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuIEknbGwgZGl2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMgdGhlbXNlbHZlcywgcmVhbGx5IGZvY3VzaW5nIG9uIHRoZSBsb2dpYyBpdCdzIGltcGxlbWVudGluZyBhbmQgd2hlcmUgaXQncyBpbXBhY3RpbmcgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBtZXRhZGF0YSB1cGRhdGVzLCBkYXRhIGJsb2NrIGhhbmRsaW5nLCBlcnJvciBwYXRocz8gS25vd2luZyB0aGUgY29yZSBhY3Rpb24gaXMgdGhlIGtleS5cblxuTmV4dCB1cCwgYSBxdWljayBzYW5pdHkgY2hlY2s6IHdoYXQgS2NvbmZpZyBvcHRpb25zIGFyZSBpbiBwbGF5PyBJcyB0aGlzIGZlYXR1cmUgY29uZGl0aW9uYWxseSBjb21waWxlZD8gQ2FuIGl0IGJlIGRpc2FibGVkLCBwb3RlbnRpYWxseSByZWR1Y2luZyBteSBmdXp6aW5nIHN1cmZhY2U/IEknbGwgZ3JlcCB0aHJvdWdoIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIGNoZWNrIGZvciBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIG9yIGRlcGVuZGVuY2llcyB0byBteSB0YXJnZXRzLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IElzIHRoaXMgY29kZSBhY3R1YWxseSAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgZXh0NCBmaWxlc3lzdGVtIHVzZSBjYXNlPyBJcyBpdCB0cmlnZ2VyZWQgdW5kZXIgbm9ybWFsIG9wZXJhdGlvbnMsIG9yIG9ubHkgd2l0aCBvYnNjdXJlIG9wdGlvbnMgb3IgY29ybmVyIGNhc2VzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgZ3JhcGgsIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIElzIGl0IHdvcnRoIHRoZSBmdXp6aW5nIGludmVzdG1lbnQ/XG5cbkZpbmFsbHksIHRpbWUgdG8gZGlzdGlsbCB0aGUgZXNzZW5jZSBmb3IgZnV6emluZy4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zLiBXaGF0IGFyZSB0aGUga2V5IGBGb2N1c1N5bWJvbHNgPyBBbmQgd2hhdCBgRW5hYmxlQ29uZmlnc2Agd2lsbCBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGNvZGUgcGF0aCBpcyBhY3RpdmU/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBzb21lIGJhc2ljIGdyZXBzIHRvIHBpY2sgb3V0IHRoZSBpbXBvcnRhbnQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMuIEkgbWlnaHQgZXZlbiByZWFkIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgYW5kIGhlYWRlcnMgdG8gZ2FpbiBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlLlxuXG5JbiBzaG9ydCwgSSdtIGRpZ2dpbmcgaW4gdG8gdW5kZXJzdGFuZCB0aGUgcGF0Y2gncyBwdXJwb3NlLCBpdHMgYWNjZXNzaWJpbGl0eSwgYW5kIGhvdyBJIGNhbiBiZXN0IGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyB0byByZXZlYWwgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjE4LjU5MjY0NjE0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjExMDg2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2NyeXB0by5jPTEzMj1zdGF0aWMgaW50IGV4dDRfc2V0X2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqY3R4LCBzaXplX3QgbGVuLFxcbi0tXFxuZnMvZXh0NC9jcnlwdG8uYy0xNTItXFxuZnMvZXh0NC9jcnlwdG8uYzoxNTM6XFx0cmVzID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcXG5mcy9leHQ0L2NyeXB0by5jLTE1NC1cXHRpZiAocmVzKVxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9Mzc5Nj1leHRlcm4gaW50IGV4dDRfaW5saW5lX2RhdGFfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpoYXNfaW5saW5lKTtcXG5mcy9leHQ0L2V4dDQuaC0zNzk3LVxcbmZzL2V4dDQvZXh0NC5oOjM3OTg6ZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvZXh0NC9leHQ0LmgtMzc5OS1cXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQ4NTQ9bG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00ODgzLVxcdGlub2RlX2xvY2soaW5vZGUpO1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQ4ODQ6XFx0cmV0ID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcXG5mcy9leHQ0L2V4dGVudHMuYy00ODg1LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTU0Nj1pbnQgZXh0NF9yZWFkcGFnZV9pbmxpbmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNTcyLVxcbmZzL2V4dDQvaW5saW5lLmM6NTczOnN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5mcy9leHQ0L2lubGluZS5jLTU3NC1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz02OTc9aW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNzI4LVxcdFxcdFxcdC8qIFJldHJ5IGluc2lkZSAqL1xcbmZzL2V4dDQvaW5saW5lLmM6NzI5OlxcdFxcdFxcdHJldHVybiBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KG1hcHBpbmcsIGlub2RlKTtcXG5mcy9leHQ0L2lubGluZS5jLTczMC1cXHRcXHR9XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTc4ND1pbnQgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTc4OS1cXHRpZiAocG9zICsgbGVuIFxcdTAwM2UgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKGlub2RlKSlcXG5mcy9leHQ0L2lubGluZS5jOjc5MDpcXHRcXHRyZXR1cm4gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7XFxuZnMvZXh0NC9pbmxpbmUuYy03OTEtXFx0cmV0dXJuIGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEwNzQ9c3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTExOTItXFxuZnMvZXh0NC9pbmxpbmUuYzoxMTkzOnN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxcbmZzL2V4dDQvaW5saW5lLmMtMTE5NC1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xMjk0PWludCBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTM0Ni1cXHQgKi9cXG5mcy9leHQ0L2lubGluZS5jOjEzNDc6XFx0cmV0ID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGRpciwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQvaW5saW5lLmMtMTM0OC1cXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTk0OT1pbnQgZXh0NF9pbmxpbmVfZGF0YV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgKmhhc19pbmxpbmUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTIwNjAtXFxuZnMvZXh0NC9pbmxpbmUuYzoyMDYxOmludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L2lubGluZS5jLTIwNjIte1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0yMDk4LVxcdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXFxuZnMvZXh0NC9pbmxpbmUuYzoyMDk5OlxcdFxcdGVycm9yID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy0yMTAwLVxcdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcXHUwMDI2bm9fZXhwYW5kKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01OTIyPWludCBleHQ0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy02MDE5LVxcdFxcdCAgICBhdHRyLVxcdTAwM2VpYV9zaXplIFxcdTAwM2UgRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfc2l6ZSkge1xcbmZzL2V4dDQvaW5vZGUuYzo2MDIwOlxcdFxcdFxcdGVycm9yID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcXG5mcy9leHQ0L2lub2RlLmMtNjAyMS1cXHRcXHRcXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9Njc4Mj12bV9mYXVsdF90IGV4dDRfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTY4MDMtXFxuZnMvZXh0NC9pbm9kZS5jOjY4MDQ6XFx0ZXJyID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcXG5mcy9leHQ0L2lub2RlLmMtNjgwNS1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0NC92ZXJpdHkuYz0xMDI9c3RhdGljIGludCBleHQ0X2JlZ2luX2VuYWJsZV92ZXJpdHkoc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5mcy9leHQ0L3Zlcml0eS5jLTEyOC1cXG5mcy9leHQ0L3Zlcml0eS5jOjEyOTpcXHRlcnIgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xcbmZzL2V4dDQvdmVyaXR5LmMtMTMwLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjE4LjYzODc1OTg2M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMzMwNjM1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgZXh0NCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoZSBleHQ0IGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBoYW5kbGUgb24gZXZlcnl0aGluZyByZWxhdGVkIHRvIGlubGluZSBkYXRhLCBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cnMpLCBhbmQgYWxsIHRoZSBvdGhlciBnb29kaWVzLiBTbywgSSdtIHRoaW5raW5nLCBgZnMvZXh0NC9LY29uZmlnYCBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGJ1aWxkLXRpbWUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgZXh0NCBmaWxlc3lzdGVtIGFyZSBkZWZpbmVkLiBJIGtub3cgaXQnbGwgbGlzdCB0aGUgbmVjZXNzYXJ5IEtjb25maWcgc3ltYm9scyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIHJldmlldyB3aGF0IG9wdGlvbnMgYXJlIHJlcXVpcmVkLCBhbmQgY29uc2lkZXIgaG93IHRoZXkgaW50ZXJhY3QsIHRvIGVuc3VyZSBhIHNvbGlkIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgYXBwbGljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMDcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozMzoyMi45NzE4MjY1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk2NjMyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhUNFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTM0LVxcbmZzL2V4dDQvS2NvbmZpZzozNTpjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG5mcy9leHQ0L0tjb25maWctMzYtXFx0Ym9vbCBcXFwiVXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNjctXFxuZnMvZXh0NC9LY29uZmlnOjY4OmNvbmZpZyBFWFQ0X0RFQlVHXFxuZnMvZXh0NC9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkV4dDQgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNzYtXFxuZnMvZXh0NC9LY29uZmlnOjc3OmNvbmZpZyBFWFQ0X0tVTklUX1RFU1RTXFxuZnMvZXh0NC9LY29uZmlnLTc4LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgZXh0NFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozMzoyMy4wMTY4MDAxMzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzI3MjEwOTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gdGhlIEV4dDQgQnVpbGQgUHJvY2VzcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEknbSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEV4dDQgZmlsZXN5c3RlbSBpcyBiZWluZyBidWlsdC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdHJhY2UgaG93IGEgY3JpdGljYWwgY29tcG9uZW50IGlzIGFzc2VtYmxlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBgZnMvZXh0NC9NYWtlZmlsZWAuIFRoYXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBmaW5kIHRoZSBidWlsZCByZWNpcGUuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBmaWd1cmluZyBvdXQgaG93IHNvbWV0aGluZyBzcGVjaWZpYywgbGlrZSBgaW5saW5lLm9gLCBpcyBjcmVhdGVkLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIEV4dDQgY29kZSBiYXNlLCBhbmQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBwYXJ0IGlzIGNyZWF0ZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgZGVwZW5kZW5jaWVzLCBjb21waWxhdGlvbiBmbGFncywgYW5kIGxpbmtpbmcgcHJvY2VzcyB3aXRoaW4gdGhlIEV4dDQgbW9kdWxlLiBGcm9tIHRoZXJlLCBJIGNhbiBsaWtlbHkgZXh0cmFwb2xhdGUgdG8gYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2lkZXIgYnVpbGQgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Nzk2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzM6MjguMzQ0MDEzMTQyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTY2MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlubGluZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcXHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZS05LVxcdFxcdGV4dGVudHNfc3RhdHVzLm8gZmlsZS5vIGZzbWFwLm8gZnN5bmMubyBoYXNoLm8gaWFsbG9jLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTA6XFx0XFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cXHRcXHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozMzoyOC4zODg5ODU3MTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTQzNzQ1MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBpbmxpbmUub2AgRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyBgaW5saW5lLm9gIGFsd2F5cyBnZXRzIGJ1aWx0IHdoZW4gYEVYVDRfRlNgIGlzIGVuYWJsZWQsIGh1aD8gVGhhdCBmZWVscyBsaWtlIGEgc2lnbmlmaWNhbnQsIHBvdGVudGlhbGx5IGltcGxpY2l0LCBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHRlci4gVGltZSB0byBkaXZlIGludG8gdGhlIGBmcy9leHQ0L0tjb25maWdgIGZpbGUuIEknbGwgbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBvciBtYXliZSBldmVuIGRlZmF1bHQgc2V0dGluZ3Mgd2l0aGluIHRoYXQgS2NvbmZpZyB0aGF0IHRpZSBpbnRvIHRoZSBidWlsZCBvZiBgaW5saW5lLm9gLiBJcyBpdCBkaXJlY3RseSBjb250cm9sbGVkIGJ5IGEgc3BlY2lmaWMgb3B0aW9uLCBvciBkb2VzIGl0cyBpbmNsdXNpb24gc3RlbSBmcm9tIHNvbWUgYnJvYWRlciBkZXBlbmRlbmN5IGNoYWluIHdpdGhpbiB0aGUgRVhUNCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBcImFsd2F5c1wiIHNpdHVhdGlvbi4gR290dGEgZW5zdXJlIHRoaXMgYmVoYXZpb3IgaXMgd2VsbC11bmRlcnN0b29kIGFuZCBqdXN0aWZpYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIxNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjMxLjUzMjczMzMwN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBFWFQ0X0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA1OlxcdFxcdHNlbGVjdCBKQkQyXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JDMTZcXG4gICA3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDg6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgOTpcXHRcXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLFxcbiAgMTQ6XFx0XFx0ICB0aGUgb24tZGlzayBmb3JtYXQgb2YgZXh0NCBpcyBub3QgZm9yd2FyZHMgY29tcGF0aWJsZSB3aXRoXFxuICAxNTpcXHRcXHQgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXRcXG4gIDE2OlxcdFxcdCAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkXFxuICAxNzpcXHRcXHQgIGFsbG9jYXRpb24sIHBlcnNpc3RlbnQgcHJlYWxsb2NhdGlvbiwgaGlnaCByZXNvbHV0aW9uIHRpbWUgc3RhbXBzLFxcbiAgMTg6XFx0XFx0ICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWRcXG4gIDE5OlxcdFxcdCAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdFxcbiAgMjA6XFx0XFx0ICBodHRwOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcuXFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcdCAgVGhlIGV4dDQgZmlsZXN5c3RlbSBzdXBwb3J0cyBtb3VudGluZyBhbiBleHQzIGZpbGVzeXN0ZW07IHdoaWxlIHRoZXJlXFxuICAyMzpcXHRcXHQgIGFyZSBzb21lIHBlcmZvcm1hbmNlIGdhaW5zIGZyb20gdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGVcXG4gIDI0OlxcdFxcdCAgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdCBwZXJmb3JtYW5jZSBnYWlucyByZXF1aXJlIGVuYWJsaW5nIGV4dDRcXG4gIDI1OlxcdFxcdCAgZmVhdHVyZXMgaW4gdGhlIGZpbGVzeXN0ZW0gdXNpbmcgdHVuZTJmcywgb3IgZm9ybWF0dGluZyBhIG5ld1xcbiAgMjY6XFx0XFx0ICBmaWxlc3lzdGVtIGFzIGFuIGV4dDQgZmlsZXN5c3RlbSBpbml0aWFsbHkuIFdpdGhvdXQgZXhwbGljaXQgZW5hYmxpbmdcXG4gIDI3OlxcdFxcdCAgb2YgZXh0NCBmZWF0dXJlcywgdGhlIG9uIGRpc2sgZmlsZXN5c3RlbSBmb3JtYXQgc3RheXMgZnVsbHkgYmFja3dhcmRcXG4gIDI4OlxcdFxcdCAgY29tcGF0aWJsZS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlXFxuICAzMTpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0LlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiVXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIEVYVDJfRlM9blxcbiAgMzk6XFx0XFx0ZGVmYXVsdCB5XFxuICA0MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjMxLjUzMjgwMDkzOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDYxNTE0NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBleHQ0IElubGluZSBEYXRhIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGVzZSBtb2RpZmljYXRpb25zLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIGRlZmluaXRlbHkgdGhlIGBmcy9leHQ0L2lubGluZS5jYCBmaWxlLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgaW5saW5lIGRhdGEgaW1wbGVtZW50YXRpb24gZGV0YWlscyB3aWxsIGJlIGhhbmdpbmcgb3V0LiBJJ20gZ29pbmcgdG8gcG9yZSBvdmVyIHRoYXQgY29kZSDigJMgaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIGlzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZXhpc3RpbmcgbWVjaGFuaXNtcyBoYXZlIGJlZW4gYWRhcHRlZCwgZXh0ZW5kZWQsIG9yIHJlcGxhY2VkIHRvIHN1cHBvcnQgdGhlc2UgaW5saW5lIGNhcGFiaWxpdGllcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHk6IGRhdGEgc3RydWN0dXJlIGNoYW5nZXMsIGFsbG9jYXRpb24gc3RyYXRlZ2llcywgdGhlIGhhbmRsaW5nIG9mIG1ldGFkYXRhLCBhbmQsIG9mIGNvdXJzZSwgaG93IHRoZXkndmUgaW50ZWdyYXRlZCBpdCB3aXRoIHRoZSBleGlzdGluZyBleHQ0IGZpbGUgc3lzdGVtIGFyY2hpdGVjdHVyZS4gTGV0J3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBJIGNhbiB1bmVhcnRoIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA1MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzM6MzMuNTk0MzE4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2lubGluZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDY1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTA2NjpcXHRcXG4xMDY3OlxcdFxcdGV4dDRfdXBkYXRlX2ZpbmFsX2RlKGV4dDRfZ2V0X2lubGluZV94YXR0cl9wb3MoZGlyLCBpbG9jKSwgb2xkX3NpemUsXFxuMTA2ODpcXHRcXHRcXHRcXHQgICAgIEVYVDRfSShkaXIpLVxcdTAwM2VpX2lubGluZV9zaXplIC1cXG4xMDY5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjEwNzA6XFx0XFx0ZGlyLVxcdTAwM2VpX3NpemUgPSBFWFQ0X0koZGlyKS1cXHUwMDNlaV9kaXNrc2l6ZSA9IEVYVDRfSShkaXIpLVxcdTAwM2VpX2lubGluZV9zaXplO1xcbjEwNzE6XFx0XFx0cmV0dXJuIDA7XFxuMTA3MjpcXHR9XFxuMTA3MzpcXHRcXG4xMDc0OlxcdHN0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLFxcbjEwNzU6XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4xMDc2OlxcdHtcXG4xMDc3OlxcdFxcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcXG4xMDc4OlxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7XFxuMTA3OTpcXHRcXHRcXHQucyA9IHsgLm5vdF9mb3VuZCA9IC1FTk9EQVRBLCB9LFxcbjEwODA6XFx0XFx0fTtcXG4xMDgxOlxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaSA9IHtcXG4xMDgyOlxcdFxcdFxcdC5uYW1lX2luZGV4ID0gRVhUNF9YQVRUUl9JTkRFWF9TWVNURU0sXFxuMTA4MzpcXHRcXHRcXHQubmFtZSA9IEVYVDRfWEFUVFJfU1lTVEVNX0RBVEEsXFxuMTA4NDpcXHRcXHRcXHQudmFsdWUgPSBOVUxMLFxcbjEwODU6XFx0XFx0XFx0LnZhbHVlX2xlbiA9IDAsXFxuMTA4NjpcXHRcXHR9O1xcbjEwODc6XFx0XFx0aW50IGVycm9yO1xcbjEwODg6XFx0XFx0dm9pZCAqaV9ibG9ja19idWYgPSBOVUxMO1xcbjEwODk6XFx0XFx0dm9pZCAqeGF0dHJfYnVmID0gTlVMTDtcXG4xMDkwOlxcdFxcdHZvaWQgKmhlYWRlciA9IE5VTEw7XFxuMTA5MTpcXHRcXHR2b2lkICp0YWlsID0gTlVMTDtcXG4xMDkyOlxcdFxcdGludCB4YXR0cl9zaXplO1xcbjEwOTM6XFx0XFx0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcXG4xMDk0OlxcdFxcbjEwOTU6XFx0XFx0aV9ibG9ja19idWYgPSBrbWFsbG9jKEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUsIEdGUF9OT0ZTKTtcXG4xMDk2OlxcdFxcdGlmICghaV9ibG9ja19idWYpIHtcXG4xMDk3OlxcdFxcdFxcdGVycm9yID0gLUVOT01FTTtcXG4xMDk4OlxcdFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNmVpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4xMDk5OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMTEwMDpcXHRcXHR9XFxuMTEwMTpcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZlaS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuMTEwMjpcXHRcXHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlzLmlsb2MpO1xcbjExMDM6XFx0XFx0aWYgKGVycm9yKVxcbjExMDQ6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4xMTA1OlxcdFxcdHJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKFxcdTAwMjZpcy5pbG9jKTtcXG4xMTA2OlxcdFxcdGhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7XFxuMTEwNzpcXHRcXHR0YWlsID0gSVRBSUwoaW5vZGUsIHJhd19pbm9kZSk7XFxuMTEwODpcXHRcXHR4YXR0cl9zaXplID0gdGFpbCAtIGhlYWRlcjtcXG4xMTA5OlxcdFxcdHhhdHRyX2J1ZiA9IGttYWxsb2MoeGF0dHJfc2l6ZSwgR0ZQX05PRlMpO1xcbjExMTA6XFx0XFx0aWYgKCF4YXR0cl9idWYpIHtcXG4xMTExOlxcdFxcdFxcdGVycm9yID0gLUVOT01FTTtcXG4xMTEyOlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMTExMzpcXHRcXHR9XFxuMTExNDpcXHRcXHRCVUZGRVJfVFJBQ0UoaXMuaWxvYy5iaCwgXFxcImdldF93cml0ZV9hY2Nlc3NcXFwiKTtcXG4xMTE1OlxcdFxcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cXHUwMDNlaV9zYiwgaXMuaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7XFxuMTExNjpcXHRcXHRpZiAoZXJyb3IpXFxuMTExNzpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjExMTg6XFx0XFx0bWVtY3B5KGlfYmxvY2tfYnVmLCAodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuMTExOTpcXHRcXHRtZW1zZXQoKHZvaWQgKilyYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjExMjA6XFx0XFx0bWVtc2V0KGVpLVxcdTAwM2VpX2RhdGEsIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjExMjE6XFx0XFx0bWVtY3B5KHhhdHRyX2J1ZiwgaGVhZGVyLCB4YXR0cl9zaXplKTtcXG4xMTIyOlxcdFxcdGlmIChleHQ0X2hhc19mZWF0dXJlX2V4dGVudHMoaW5vZGUtXFx1MDAzZWlfc2IpIFxcdTAwMjZcXHUwMDI2XFxuMTEyMzpcXHRcXHRcXHQoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fCBTX0lTUkVHKGlub2RlLVxcdTAwM2VpX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpKSB7XFxuMTEyNDpcXHRcXHRcXHRleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xcbjExMjU6XFx0XFx0XFx0ZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgaW5vZGUpO1xcbjExMjY6XFx0XFx0XFx0c3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCAwLCBOVUxMLCAwKTtcXG4xMTI3OlxcdFxcbjExMjg6XFx0XFx0XFx0aWYgKElTX0VSUihwYXRoKSkge1xcbjExMjk6XFx0XFx0XFx0XFx0ZXJyb3IgPSBQVFJfRVJSKHBhdGgpO1xcbjExMzA6XFx0XFx0XFx0XFx0Z290byByZWNvdmVyeTtcXG4xMTMxOlxcdFxcdFxcdH1cXG4xMTMyOlxcdFxcdFxcdHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleDtcXG4xMTMzOlxcdFxcbjExMzQ6XFx0XFx0XFx0bmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMigwKTtcXG4xMTM1OlxcdFxcdFxcdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpO1xcbjExMzY6XFx0XFx0XFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKFxcdTAwMjZuZXdleCwgYmxvY2spO1xcbjExMzc6XFx0XFx0XFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXFx1MDAyNm5ld2V4LCAwKTtcXG4xMTM4OlxcdFxcdFxcdGlmIChJU19FUlIocGF0aCkpIHtcXG4xMTM5OlxcdFxcdFxcdFxcdGVycm9yID0gUFRSX0VSUihwYXRoKTtcXG4xMTQwOlxcdFxcdFxcdFxcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXFxuMTE0MTpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlY292ZXJ5O1xcbjExNDI6XFx0XFx0XFx0XFx0ZWxzZVxcbjExNDM6XFx0XFx0XFx0XFx0XFx0Z290byBub19mcmVlO1xcbjExNDQ6XFx0XFx0XFx0fSBlbHNlIHtcXG4xMTQ1OlxcdFxcdFxcdFxcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcXG4xMTQ2OlxcdFxcdFxcdH1cXG4xMTQ3OlxcdFxcdH0gZWxzZSB7XFxuMTE0ODpcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7XFxuMTE0OTpcXHRcXHR9XFxuMTE1MDpcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXFx1MDAyNmksIFxcdTAwMjZpcyk7XFxuMTE1MTpcXHRcXHRpZiAoZXJyb3IpXFxuMTE1MjpcXHRcXHRcXHRnb3RvIHJlY292ZXJ5O1xcbjExNTM6XFx0XFx0aWYgKCFpcy5zLm5vdF9mb3VuZClcXG4xMTU0OlxcdFxcdFxcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlLCBpbm9kZSwgXFx1MDAyNmksIFxcdTAwMjZpcyk7XFxuMTE1NTpcXHRyZWNvdmVyeTpcXG4xMTU2OlxcdFxcdGlmIChlcnJvcikge1xcbjExNTc6XFx0XFx0XFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcXG4xMTU4OlxcdFxcdFxcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7XFxuMTE1OTpcXHRcXHRcXHRtZW1jcHkoaGVhZGVyLCB4YXR0cl9idWYsIHhhdHRyX3NpemUpO1xcbjExNjA6XFx0bm9fZnJlZTpcXG4xMTYxOlxcdFxcdFxcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7XFxuMTE2MjpcXHRcXHRcXHRtZW1jcHkoKHZvaWQgKilyYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2ssIGlfYmxvY2tfYnVmLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG4xMTYzOlxcdFxcdFxcdG1lbWNweShlaS1cXHUwMDNlaV9kYXRhLCByYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjExNjQ6XFx0XFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozMzozMy41OTQ0NDcxOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDYxMDQ0MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gSW5saW5lIERhdGEgaW4gZXh0NCoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYGZzL2V4dDQvaW5saW5lLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhpcyBhcmVhLiBJdCBzZWVtcyBsaWtlIHRoZSBpbW1lZGlhdGUgY29udGV4dCBpc24ndCBlbm91Z2gsIHNvIGxldCdzIHpvb20gb3V0IGEgYml0LiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIGhvdyBpbmxpbmUgZGF0YSBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhpcyBmaWxlLCBwZXJoYXBzIHRyYWNpbmcgZXhlY3V0aW9uIHBhdGhzIGZyb20gcmVsYXRlZCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgYmxvY2sgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGNvZGUsIGJlY2F1c2UgdGhlIGlubGluZSBkYXRhIHN0b3JhZ2UgaXMgc3VjaCBhbiBpbnRlcmVzdGluZyBvcHRpbWl6YXRpb24uIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgSSBtaWdodCBiZSBtaXNzaW5nLiBJIG5lZWQgdG8gdmVyaWZ5IGFzc3VtcHRpb25zIGFib3V0IGhvdyBkYXRhIGlzIHJlYWQgYW5kIHdyaXR0ZW4gaW4gdGhpcyBwYXJ0aWN1bGFyIHNjZW5hcmlvLiBJdCdzIHRpbWUgdG8gdGhvcm91Z2hseSBzY3J1dGluaXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjM2LjA1NTQ5NDMyNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9pbmxpbmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTY1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE2NTpcXHRcXHRcXHRnZXRfYmgoaXMuaWxvYy5iaCk7XFxuMTE2NjpcXHRcXHRcXHRleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuMTE2NzpcXHRcXHR9IGVsc2Uge1xcbjExNjg6XFx0XFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKTtcXG4xMTY5OlxcdFxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuMTE3MDpcXHRcXHRcXHRcXHRpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSk7XFxuMTE3MTpcXHRcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2Rpc2tzaXplID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbjExNzI6XFx0XFx0XFx0fVxcbjExNzM6XFx0XFx0XFx0Z2V0X2JoKGlzLmlsb2MuYmgpO1xcbjExNzQ6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuMTE3NTpcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2lubGluZV9vZmYgPSAwO1xcbjExNzY6XFx0XFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfc2l6ZSA9IDA7XFxuMTE3NzpcXHRcXHRcXHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XFxuMTE3ODpcXHRcXHRcXHRicmVsc2UoYmgpO1xcbjExNzk6XFx0XFx0fVxcbjExODA6XFx0XFx0Z290byBvdXQ7XFxuMTE4MTpcXHRlcnJvcjpcXG4xMTgyOlxcdFxcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7XFxuMTE4MzpcXHRcXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xcbjExODQ6XFx0XFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcXG4xMTg1OlxcdG91dDpcXG4xMTg2OlxcdFxcdGJyZWxzZShpcy5pbG9jLmJoKTtcXG4xMTg3OlxcdFxcdHVwX3dyaXRlKFxcdTAwMjZlaS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuMTE4ODpcXHRcXHRrZnJlZShpX2Jsb2NrX2J1Zik7XFxuMTE4OTpcXHRcXHRrZnJlZSh4YXR0cl9idWYpO1xcbjExOTA6XFx0XFx0cmV0dXJuIGVycm9yO1xcbjExOTE6XFx0fVxcbjExOTI6XFx0XFxuMTE5MzpcXHRzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcXG4xMTk0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuMTE5NTpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKVxcbjExOTY6XFx0e1xcbjExOTc6XFx0XFx0aW50IGVycm9yO1xcbjExOTg6XFx0XFx0dm9pZCAqYnVmID0gTlVMTDtcXG4xMTk5OlxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xcbjEyMDA6XFx0XFx0aW50IGlubGluZV9zaXplO1xcbjEyMDE6XFx0XFx0ZXh0NF9mc2Jsa190IG5ld2Jsb2NrID0gMDtcXG4xMjAyOlxcdFxcdHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcjtcXG4xMjAzOlxcdFxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbjEyMDQ6XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jaztcXG4xMjA1OlxcdFxcbjEyMDY6XFx0XFx0aW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7XFxuMTIwNzpcXHRcXHRidWYgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7XFxuMTIwODpcXHRcXHRpZiAoIWJ1Zikge1xcbjEyMDk6XFx0XFx0XFx0ZXJyb3IgPSAtRU5PTUVNO1xcbjEyMTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTIxMTpcXHRcXHR9XFxuMTIxMjpcXHRcXG4xMjEzOlxcdFxcdGVycm9yID0gZXh0NF9yZWFkX2lubGluZV9kYXRhKGlub2RlLCBidWYsIGlubGluZV9zaXplLCBpbG9jKTtcXG4xMjE0OlxcdFxcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuMTIxNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjE2OlxcdFxcbjEyMTc6XFx0XFx0LypcXG4xMjE4OlxcdFxcdCAqIE1ha2Ugc3VyZSB0aGUgaW5saW5lIGRpcmVjdG9yeSBlbnRyaWVzIHBhc3MgY2hlY2tzIGJlZm9yZSB3ZSB0cnkgdG9cXG4xMjE5OlxcdFxcdCAqIGNvbnZlcnQgdGhlbSwgc28gdGhhdCB3ZSBhdm9pZCB0b3VjaGluZyBzdHVmZiB0aGF0IG5lZWRzIGZzY2suXFxuMTIyMDpcXHRcXHQgKi9cXG4xMjIxOlxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuMTIyMjpcXHRcXHRcXHRlcnJvciA9IGV4dDRfY2hlY2tfYWxsX2RlKGlub2RlLCBpbG9jLVxcdTAwM2ViaCxcXG4xMjIzOlxcdFxcdFxcdFxcdFxcdFxcdGJ1ZiArIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxcbjEyMjQ6XFx0XFx0XFx0XFx0XFx0XFx0aW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7XFxuMTIyNTpcXHRcXHRcXHRpZiAoZXJyb3IpXFxuMTIyNjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjI3OlxcdFxcdH1cXG4xMjI4OlxcdFxcbjEyMjk6XFx0XFx0bWVtc2V0KFxcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSk7XFxuMTIzMDpcXHRcXHRhci5pbm9kZSA9IGlub2RlO1xcbjEyMzE6XFx0XFx0YXIubG9naWNhbCA9IDA7XFxuMTIzMjpcXHRcXHRhci5sZW4gPSAxO1xcbjEyMzM6XFx0XFx0aWYgKFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuMTIzNDpcXHRcXHRcXHRhci5mbGFncyA9IEVYVDRfTUJfSElOVF9EQVRBO1xcbjEyMzU6XFx0XFx0ZWxzZVxcbjEyMzY6XFx0XFx0XFx0YXIuZmxhZ3MgPSAwO1xcbjEyMzc6XFx0XFx0bmV3YmxvY2sgPSBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlLCBcXHUwMDI2YXIsIFxcdTAwMjZlcnJvcik7XFxuMTIzODpcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbjEyMzk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTI0MDpcXHRcXHRhbGxvY2F0ZWRfYmxvY2sgPSBFWFQ0X0MyQihzYmksIGFyLmxlbik7XFxuMTI0MTpcXHRcXHRiaCA9IHNiX2dldGJsayhpbm9kZS1cXHUwMDNlaV9zYiwgbmV3YmxvY2spO1xcbjEyNDI6XFx0XFx0aWYgKCFiaCkge1xcbjEyNDM6XFx0XFx0XFx0ZXJyb3IgPSAtRU5PTUVNO1xcbjEyNDQ6XFx0XFx0XFx0Z290byBvdXRfYmg7XFxuMTI0NTpcXHRcXHR9XFxuMTI0NjpcXHRcXG4xMjQ3OlxcdFxcdGxvY2tfYnVmZmVyKGJoKTtcXG4xMjQ4OlxcdFxcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXFx1MDAzZWlfc2IsIGJoLFxcbjEyNDk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIEVYVDRfSlRSX05PTkUpO1xcbjEyNTA6XFx0XFx0aWYgKGVycm9yKSB7XFxuMTI1MTpcXHRcXHRcXHR1bmxvY2tfYnVmZmVyKGJoKTtcXG4xMjUyOlxcdFxcdFxcdGVycm9yID0gLUVJTztcXG4xMjUzOlxcdFxcdFxcdGdvdG8gb3V0X2JoO1xcbjEyNTQ6XFx0XFx0fVxcbjEyNTU6XFx0XFx0bWVtc2V0KGJoLVxcdTAwM2ViX2RhdGEsIDAsIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSk7XFxuMTI1NjpcXHRcXG4xMjU3OlxcdFxcdGlmICghU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbjEyNTg6XFx0XFx0XFx0bWVtY3B5KGJoLVxcdTAwM2ViX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpO1xcbjEyNTk6XFx0XFx0XFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XFxuMTI2MDpcXHRcXHRcXHR1bmxvY2tfYnVmZmVyKGJoKTtcXG4xMjYxOlxcdFxcdFxcdGVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLFxcbjEyNjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW5vZGUsIGJoKTtcXG4xMjYzOlxcdFxcdH0gZWxzZSB7XFxuMTI2NDpcXHRcXHRcXHR1bmxvY2tfYnVmZmVyKGJoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzM6MzYuMDU1NjM3OTk2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNDE0ODcyNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGV4dDQgSW5saW5lIERhdGEgQ29udmVyc2lvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBmcy9leHQ0L2lubGluZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBhbmQgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYC4gRmlyc3QsIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZC5cblxuYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGlzIGNhbGxlZCBieSB0d28gZnVuY3Rpb25zOiBgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeWAgYW5kIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgLiAgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAsIGluIHR1cm4sIGlzIGEga2V5IGZ1bmN0aW9uLCBhcyBpdCdzIGV4cG9ydGVkIGFuZCBjYWxsZWQgZnJvbSBzZXZlcmFsIGNyaXRpY2FsIGFyZWFzOiBgZXh0NF9zZXRhdHRyYCwgYGV4dDRfZmFsbG9jYXRlYCwgYGV4dDRfcGFnZV9ta3dyaXRlYCwgYGV4dDRfYmVnaW5fZW5hYmxlX3Zlcml0eWAgYW5kIGBleHQ0X3NldF9jb250ZXh0YCAod2hpY2ggaXMgZnNjcnlwdCByZWxhdGVkLCBnb29kIHRvIGtlZXAgaW4gbWluZCkuXG5cbk5vdywgYGV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlgIGlzIGNhbGxlZCBmcm9tIGBleHQ0X2FkZF9lbnRyeWAgbG9jYXRlZCBpbiBgZnMvZXh0NC9uYW1laS5jYC4gR29vZCwgdGhhdCBnaXZlcyBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaW5ncyBmaXQuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLiBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIGlzIHN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gU2FtZSBnb2VzIGZvciBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AuIFRoYXQgbWVhbnMgdGhleSdyZSBpbnRlcm5hbCB0byB0aGUgYC5jYCBmaWxlLiBIb3dldmVyLCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBpcyAqbm90KiBzdGF0aWMsIHNvIGl0J3MgZXhwb3J0ZWQsIGFuZCBgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeWAgaXMgYWxzbyBub3Qgc3RhdGljLiBUaGF0J3MgY29uc2lzdGVudCB3aXRoIHdoYXQgSSd2ZSBzZWVuIHdpdGggdGhlIGNhbGwgZ3JhcGguXG5cblRpbWUgdG8gZHJpbGwgaW50byB0aGUgY2FsbGVycyBhbmQgZGVmaW5pdGlvbnMgb2YgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgbm93LCBzaW5jZSBpdCBzZWVtcyB0byBiZSB0aGUgbGluY2hwaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzM6MzkuMzk3MTI3MTg1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg1OTc3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9Mzc5Nj1leHRlcm4gaW50IGV4dDRfaW5saW5lX2RhdGFfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpoYXNfaW5saW5lKTtcXG5mcy9leHQ0L2V4dDQuaC0zNzk3LVxcbmZzL2V4dDQvZXh0NC5oOjM3OTg6ZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvZXh0NC9leHQ0LmgtMzc5OS1cXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9NTQ2PWludCBleHQ0X3JlYWRwYWdlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy01NzItXFxuZnMvZXh0NC9pbmxpbmUuYzo1NzM6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmZzL2V4dDQvaW5saW5lLmMtNTc0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEwNzQ9c3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTExOTItXFxuZnMvZXh0NC9pbmxpbmUuYzoxMTkzOnN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxcbmZzL2V4dDQvaW5saW5lLmMtMTE5NC1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xOTQ5PWludCBleHQ0X2lubGluZV9kYXRhX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqaGFzX2lubGluZSlcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMjA2MC1cXG5mcy9leHQ0L2lubGluZS5jOjIwNjE6aW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvaW5saW5lLmMtMjA2Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjM5LjQ0MTk4OTA1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTA0ODc5OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIElubGluZSBEYXRhIENvbnZlcnNpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbW9kaWZpY2F0aW9uIHRvIHRoZSBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMuIEZpcnN0LCBJIHNob3VsZCB2ZXJpZnkgdGhhdCBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIGFuZCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AsIGV2ZW4gdGhlIHN0YXRpYyBmdW5jdGlvbnMgaW52b2x2ZWQsIGFyZSBhY2Nlc3NpYmxlIHN5bWJvbHMuIEtub3dpbmcgdGhlIExpbnV4IGtlcm5lbCdzIHN5bWJvbCBiZWhhdmlvciwgSSdtIHByZXR0eSBzdXJlIHN0YXRpYyBmdW5jdGlvbnMgaW4gYC5jYCBmaWxlcyAqYXJlKiBzeW1ib2xzIHVubGVzcyBpbmxpbmVkLiBCdXQganVzdCB0byBiZSBzYWZlLCBJJ2xsIGluY2x1ZGUgdGhvc2UgZnVuY3Rpb25zIGFsb25nIHdpdGggdGhlIG5vbi1zdGF0aWMgY2FsbGVycyBsaWtlIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgIGFuZCBgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeWAg4oCTIHRoYXQncyBnb29kIHByYWN0aWNlIGZvciBkZWJ1Z2dpbmcsIGFuZCBmdXp6aW5nIGxhdGVyLlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgYGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YWAgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgLiBJbnRlcmVzdGluZy4gTW9yZSBzaWduaWZpY2FudGx5LCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AgaGFzIGJlZW4gcmV3b3JrZWQuIFByZXZpb3VzbHksIGl0IGRlc3Ryb3llZCB0aGUgaW5saW5lIGRhdGEgYW5kIHRoZW4gdXNlZCBgZXh0NF9tYXBfYmxvY2tzYC4gTm93LCBpdCdzIGFsbG9jYXRpbmcgbmV3IGJsb2NrcyB1c2luZyBgZXh0NF9tYl9uZXdfYmxvY2tzYCwgd3JpdGluZyBkYXRhIHRvIHRoZSBidWZmZXIgaGVhZCwgYW5kIHRoZW4gKnVzaW5nKiBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIHRvIGluc2VydCB0aGUgZXh0ZW50IG9yIGJsb2NrICphbmQqIHJlbW92ZSB0aGUgaW5saW5lIGRhdGEgeGF0dHIuIE9mIGNvdXJzZSwgd2UncmUgYnVpbGRpbmcgaW4gZXJyb3IgcmVjb3ZlcnkgZm9yIGFsbG9jYXRpb24gb3IgZXh0ZW50IGluc2VydGlvbiBmYWlsdXJlcy4gSXQncyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyBpbmxpbmUgZGF0YSBpcyBjb252ZXJ0ZWQsIHJlYWxseSBkcmlsbGluZyBkb3duIG9uIHRoZSBjb3JlIGxvZ2ljLlxuXG5HaXZlbiB0aGF0IGV4dDQgaXMgYSBjb3JlIGZpbGVzeXN0ZW0sIGZ1bGx5IGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBzeXNjYWxscyB0aGF0IHdlIHVzZSBhbGwgdGhlIHRpbWUgKGBmYWxsb2NhdGVgLCBgdHJ1bmNhdGVgLCBgd3JpdGVgLCBgbWtkaXJgLCBgb3BlbmAsIGV0Yy4pIHRoaXMgaXMgcmlwZSBmb3IgZnV6emluZy5cblxuRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0ISBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlLCBjb3JlIGZpbGVzeXN0ZW0gY29kZSBzcGVjaWZpY2FsbHkgaW4gYGZzL2V4dDQvaW5saW5lLmNgLiBCZWZvcmUgSSBwcm9jZWVkLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3MuIGBDT05GSUdfRVhUNF9GU2AgaXMgYSBnaXZlbiwgb2J2aW91c2x5LiBJIGFsc28gbmVlZCB0byBlbnN1cmUgbm8gb3RoZXIgY29uZmlncyBhcmUgcmVxdWlyZWQgYW5kIHNwZWNpZmljYWxseSB2ZXJpZnkgYW55IGRlcGVuZGVuY2llcy4gTGV0J3MgZGlnIGludG8gdGhlIGV4dDQgS2NvbmZpZyBhbmQgY29kZSBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBpbmxpbmUgZGF0YS4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjMyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjQzLjk0Njg3MjQyMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMjM4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU5MSU5FX0RBVEFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2NyeXB0by5jPTEzMj1zdGF0aWMgaW50IGV4dDRfc2V0X2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqY3R4LCBzaXplX3QgbGVuLFxcbi0tXFxuZnMvZXh0NC9jcnlwdG8uYy0xNzktXFx0XFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSxcXG5mcy9leHQ0L2NyeXB0by5jOjE4MDpcXHRcXHRcXHRcXHRcXHRFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XFxuZnMvZXh0NC9jcnlwdG8uYy0xODEtXFx0XFx0XFx0LypcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTQ0MD1zdHJ1Y3QgZmxleF9ncm91cHMge1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtNTA5LVxcbmZzL2V4dDQvZXh0NC5oOjUxMDojZGVmaW5lIEVYVDRfSU5MSU5FX0RBVEFfRkxcXHRcXHQweDEwMDAwMDAwIC8qIElub2RlIGhhcyBpbmxpbmUgZGF0YS4gKi9cXG5mcy9leHQ0L2V4dDQuaC01MTEtI2RlZmluZSBFWFQ0X1BST0pJTkhFUklUX0ZMXFx0XFx0MHgyMDAwMDAwMCAvKiBDcmVhdGUgd2l0aCBwYXJlbnRzIHByb2ppZCAqL1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtNTQxLVxcdFxcdFxcdFxcdFxcdCBFWFQ0X1ZFUklUWV9GTCB8IFxcXFxcXG5mcy9leHQ0L2V4dDQuaDo1NDI6XFx0XFx0XFx0XFx0XFx0IEVYVDRfSU5MSU5FX0RBVEFfRkwpXFxuZnMvZXh0NC9leHQ0LmgtNTQzLVxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtNTYzLSNkZWZpbmUgRVhUNF9EQVhfTVVUX0VYQ0wgKEVYVDRfVkVSSVRZX0ZMIHwgRVhUNF9FTkNSWVBUX0ZMIHxcXFxcXFxuZnMvZXh0NC9leHQ0Lmg6NTY0OlxcdFxcdFxcdCAgIEVYVDRfSk9VUk5BTF9EQVRBX0ZMIHwgRVhUNF9JTkxJTkVfREFUQV9GTClcXG5mcy9leHQ0L2V4dDQuaC01NjUtXFxuLS1cXG5mcy9leHQ0L2V4dDQuaD01ODA9ZW51bSB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC02MDYtXFx0RVhUNF9JTk9ERV9EQVhcXHRcXHQ9IDI1LFxcdC8qIElub2RlIGlzIERBWCAqL1xcbmZzL2V4dDQvZXh0NC5oOjYwNzpcXHRFWFQ0X0lOT0RFX0lOTElORV9EQVRBXFx0PSAyOCxcXHQvKiBEYXRhIGluIGlub2RlLiAqL1xcbmZzL2V4dDQvZXh0NC5oLTYwOC1cXHRFWFQ0X0lOT0RFX1BST0pJTkhFUklUXFx0PSAyOSxcXHQvKiBDcmVhdGUgd2l0aCBwYXJlbnRzIHByb2ppZCAqL1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9NjI5PXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2NoZWNrX2ZsYWdfdmFsdWVzKHZvaWQpXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC02NTItXFx0Q0hFQ0tfRkxBR19WQUxVRShFQV9JTk9ERSk7XFxuZnMvZXh0NC9leHQ0Lmg6NjUzOlxcdENIRUNLX0ZMQUdfVkFMVUUoSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvZXh0NC5oLTY1NC1cXHRDSEVDS19GTEFHX1ZBTFVFKFBST0pJTkhFUklUKTtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTIwMjY9ZW51bSB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0yMDMyLVxcdEVYVDRfU1RBVEVfTkVXRU5UUlksXFx0XFx0LyogRmlsZSBqdXN0IGFkZGVkIHRvIGRpciAqL1xcbmZzL2V4dDQvZXh0NC5oOjIwMzM6XFx0RVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEsXFx0LyogbWF5IGhhdmUgaW4taW5vZGUgZGF0YSAqL1xcbmZzL2V4dDQvZXh0NC5oLTIwMzQtXFx0RVhUNF9TVEFURV9FWFRfUFJFQ0FDSEVELFxcdC8qIGV4dGVudHMgaGF2ZSBiZWVuIHByZWNhY2hlZCAqL1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjEyOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqZXh0NF9pX21ldGFkYXRhX2JocyhcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTIyMTktI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTEFSR0VESVJcXHRcXHQweDQwMDAgLyogXFx1MDAzZTJHQiBvciAzLWx2bCBodHJlZSAqL1xcbmZzL2V4dDQvZXh0NC5oOjIyMjA6I2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfSU5MSU5FX0RBVEFcXHQweDgwMDAgLyogZGF0YSBpbiBpbm9kZSAqL1xcbmZzL2V4dDQvZXh0NC5oLTIyMjEtI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRU5DUllQVFxcdFxcdDB4MTAwMDBcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTIzMTg9RVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZVTkNTKGxhcmdlZGlyLFxcdFxcdExBUkdFRElSKVxcbmZzL2V4dDQvZXh0NC5oOjIzMTk6RVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZVTkNTKGlubGluZV9kYXRhLFxcdElOTElORV9EQVRBKVxcbmZzL2V4dDQvZXh0NC5oLTIzMjAtRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZVTkNTKGVuY3J5cHQsXFx0XFx0RU5DUllQVClcXG5mcy9leHQ0L2V4dDQuaD0yMzIxPUVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GVU5DUyhjYXNlZm9sZCxcXHRcXHRDQVNFRk9MRClcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTIzNDctXFx0XFx0XFx0XFx0XFx0IEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9NTVAgfCBcXFxcXFxuZnMvZXh0NC9leHQ0Lmg6MjM0ODpcXHRcXHRcXHRcXHRcXHQgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0lOTElORV9EQVRBIHwgXFxcXFxcbmZzL2V4dDQvZXh0NC5oLTIzNDktXFx0XFx0XFx0XFx0XFx0IEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9FTkNSWVBUIHwgXFxcXFxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MzE0OT12b2lkIGV4dDRfc2V0X2lub2RlX21hcHBpbmdfb3JkZXIoc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvZXh0NC9leHQ0LmgtMzE1MC0jZGVmaW5lIEZBTExfQkFDS19UT19OT05ERUxBTExPQyAxXFxuZnMvZXh0NC9leHQ0Lmg6MzE1MTojZGVmaW5lIENPTlZFUlRfSU5MSU5FX0RBVEFcXHQgMlxcbmZzL2V4dDQvZXh0NC5oLTMxNTItXFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0zODAwPXN0YXRpYyBpbmxpbmUgaW50IGV4dDRfaGFzX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9leHQ0LmgtMzgwMS17XFxuZnMvZXh0NC9leHQ0Lmg6MzgwMjpcXHRyZXR1cm4gZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9leHQ0LmgtMzgwMy1cXHQgICAgICAgRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfb2ZmO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NTk1MD1pbnQgZXh0NF9jbHVfbWFwcGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxjbHUpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy01OTYyLVxcdCAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjU5NjM6XFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpIHx8XFxuZnMvZXh0NC9leHRlbnRzLmMtNTk2NC1cXHQgICAgZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NjIyOT1pbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTYyMzYtXFxuZnMvZXh0NC9leHRlbnRzLmM6NjIzNzpcXHRpZiAoZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKVxcbmZzL2V4dDQvZXh0ZW50cy5jLTYyMzgtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTExMT1zdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xMTMyLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxMTMzOlxcdGlmIChleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTExMzQtXFx0XFx0aW5vZGVfbGVuID0gRVhUNF9JTk9ERV9TSVpFKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0xOTQ0PXN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTkzLVxcdFxcdH1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTk5NDpcXHR9IGVsc2UgaWYgKGxlMzJfdG9fY3B1KHJhd19pbm9kZS1cXHUwMDNlaV9mbGFncykgXFx1MDAyNiBFWFQ0X0lOTElORV9EQVRBX0ZMKSB7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5OTUtXFx0XFx0bWVtY3B5KHJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgcmF3X2ZjX2lub2RlLVxcdTAwM2VpX2Jsb2NrLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwMjMtXFx0ICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIwMjQ6XFx0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwMjUtXFx0XFx0ZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKGlub2RlKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMzI4PXN0YXRpYyB2b2lkIGV4dDRfZmNfc2V0X2JpdG1hcHNfYW5kX2NvdW50ZXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM0Ny1cXHRcXHRlbmQgPSBFWFRfTUFYX0JMT0NLUztcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjM0ODpcXHRcXHRpZiAoZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKSB7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzNDktXFx0XFx0XFx0aXB1dChpbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz01MjE9c3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL2V4dDQvZmlsZS5jLTU3MC1cXHQgKi9cXG5mcy9leHQ0L2ZpbGUuYzo1NzE6XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvZmlsZS5jLTU3Mi1cXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmM9OTMzPXN0cnVjdCBpbm9kZSAqX19leHQ0X25ld19pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmMtMTMwOS1cXHQgICAgKCEoZWktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiAoRVhUNF9EQVhfRkx8RVhUNF9FQV9JTk9ERV9GTCkpIHx8IFNfSVNESVIobW9kZSkpKVxcbmZzL2V4dDQvaWFsbG9jLmM6MTMxMDpcXHRcXHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvaWFsbG9jLmMtMTMxMS1cXHRyZXQgPSBpbm9kZTtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTktI2RlZmluZSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBXFx0XFxcImRhdGFcXFwiXFxuZnMvZXh0NC9pbmxpbmUuYzoyMDojZGVmaW5lIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkVcXHQoKHNpemVvZihfX2xlMzIpICogRVhUNF9OX0JMT0NLUykpXFxuZnMvZXh0NC9pbmxpbmUuYy0yMS0jZGVmaW5lIEVYVDRfSU5MSU5FX0RPVERPVF9PRkZTRVRcXHQyXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTExMj1pbnQgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTEzNi1cXG5mcy9leHQ0L2lubGluZS5jOjEzNzpcXHRyZXR1cm4gbWF4X2lubGluZV9zaXplICsgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRTtcXG5mcy9leHQ0L2lubGluZS5jLTEzOC19XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE0NT1pbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNzUtXFx0XFx0XFx0XFx0XFx0KHZvaWQgKilleHQ0X3Jhd19pbm9kZShcXHUwMDI2aXMuaWxvYykpO1xcbmZzL2V4dDQvaW5saW5lLmM6MTc2OlxcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFICtcXG5mcy9leHQ0L2lubGluZS5jLTE3Ny1cXHRcXHRcXHRcXHRsZTMyX3RvX2NwdShpcy5zLmhlcmUtXFx1MDAzZWVfdmFsdWVfc2l6ZSk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE4ND1zdGF0aWMgaW50IGV4dDRfcmVhZF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWZmZXIsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE5Ny1cXG5mcy9leHQ0L2lubGluZS5jOjE5ODpcXHRjcF9sZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xOTktXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTIyOT1zdGF0aWMgdm9pZCBleHQ0X3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTI0NS1cXG5mcy9leHQ0L2lubGluZS5jOjI0NjpcXHRpZiAocG9zIFxcdTAwM2MgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSkge1xcbmZzL2V4dDQvaW5saW5lLmM6MjQ3OlxcdFxcdGNwX2xlbiA9IHBvcyArIGxlbiBcXHUwMDNlIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgP1xcbmZzL2V4dDQvaW5saW5lLmM6MjQ4OlxcdFxcdFxcdCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIC0gcG9zIDogbGVuO1xcbmZzL2V4dDQvaW5saW5lLmMtMjQ5LVxcdFxcdG1lbWNweSgodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jayArIHBvcywgYnVmZmVyLCBjcF9sZW4pO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0yNTgtXFxuZnMvZXh0NC9pbmxpbmUuYzoyNTk6XFx0cG9zIC09IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0yNjAtXFx0aGVhZGVyID0gSUhEUihpbm9kZSwgcmF3X2lub2RlKTtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MjY4PXN0YXRpYyBpbnQgZXh0NF9jcmVhdGVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMjkwLVxcbmZzL2V4dDQvaW5saW5lLmM6MjkxOlxcdGlmIChsZW4gXFx1MDAzZSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKSB7XFxuZnMvZXh0NC9pbmxpbmUuYy0yOTItXFx0XFx0dmFsdWUgPSBFWFQ0X1pFUk9fWEFUVFJfVkFMVUU7XFxuZnMvZXh0NC9pbmxpbmUuYzoyOTM6XFx0XFx0bGVuIC09IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0yOTQtXFx0fSBlbHNlIHtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMzE2LVxcdFxcdFxcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsXFxuZnMvZXh0NC9pbmxpbmUuYzozMTc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcXG5mcy9leHQ0L2lubGluZS5jLTMxOC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMzIxLVxcdG1lbXNldCgodm9pZCAqKWV4dDRfcmF3X2lub2RlKFxcdTAwMjZpcy5pbG9jKS1cXHUwMDNlaV9ibG9jayxcXG5mcy9leHQ0L2lubGluZS5jOjMyMjpcXHRcXHQwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG5mcy9leHQ0L2lubGluZS5jLTMyMy1cXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMzI1LVxcdFxcdFxcdFxcdCAgICAgICh2b2lkICopZXh0NF9yYXdfaW5vZGUoXFx1MDAyNmlzLmlsb2MpKTtcXG5mcy9leHQ0L2lubGluZS5jOjMyNjpcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2lubGluZV9zaXplID0gbGVuICsgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRTtcXG5mcy9leHQ0L2lubGluZS5jLTMyNy1cXHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XFxuZnMvZXh0NC9pbmxpbmUuYzozMjg6XFx0ZXh0NF9zZXRfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSk7XFxuZnMvZXh0NC9pbmxpbmUuYy0zMjktXFx0Z2V0X2JoKGlzLmlsb2MuYmgpO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0zMzc9c3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0zNjctXFxuZnMvZXh0NC9pbmxpbmUuYzozNjg6XFx0bGVuIC09IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0zNjktXFx0dmFsdWUgPSBremFsbG9jKGxlbiwgR0ZQX05PRlMpO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0zOTUtXFx0XFx0XFx0XFx0ICAgICAgKHZvaWQgKilleHQ0X3Jhd19pbm9kZShcXHUwMDI2aXMuaWxvYykpO1xcbmZzL2V4dDQvaW5saW5lLmM6Mzk2OlxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFICtcXG5mcy9leHQ0L2lubGluZS5jLTM5Ny1cXHRcXHRcXHRcXHRsZTMyX3RvX2NwdShpcy5zLmhlcmUtXFx1MDAzZWVfdmFsdWVfc2l6ZSk7XFxuZnMvZXh0NC9pbmxpbmUuYzozOTg6XFx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcXG5mcy9leHQ0L2lubGluZS5jLTM5OS1cXHRnZXRfYmgoaXMuaWxvYy5iaCk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTQwOD1zdGF0aWMgaW50IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy00MTMtXFxuZnMvZXh0NC9pbmxpbmUuYzo0MTQ6XFx0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSlcXG5mcy9leHQ0L2lubGluZS5jLTQxNS1cXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9NDM3PXN0YXRpYyBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy00NzctXFx0bWVtc2V0KCh2b2lkICopZXh0NF9yYXdfaW5vZGUoXFx1MDAyNmlzLmlsb2MpLVxcdTAwM2VpX2Jsb2NrLFxcbmZzL2V4dDQvaW5saW5lLmM6NDc4OlxcdFxcdDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbmZzL2V4dDQvaW5saW5lLmM6NDc5OlxcdG1lbXNldChlaS1cXHUwMDNlaV9kYXRhLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG5mcy9leHQ0L2lubGluZS5jLTQ4MC1cXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNDg3LVxcdH1cXG5mcy9leHQ0L2lubGluZS5jOjQ4ODpcXHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvaW5saW5lLmMtNDg5LVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy00OTQtXFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfc2l6ZSA9IDA7XFxuZnMvZXh0NC9pbmxpbmUuYzo0OTU6XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvaW5saW5lLmMtNDk2LW91dDpcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9NTczPXN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNTg3LVxcdFxcdCAqL1xcbmZzL2V4dDQvaW5saW5lLmM6NTg4OlxcdFxcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcXG5mcy9leHQ0L2lubGluZS5jLTU4OS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9ODg2PXN0YXRpYyBpbnQgZXh0NF9kYV9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtODk5LVxcdGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XFxuZnMvZXh0NC9pbmxpbmUuYzo5MDA6XFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvaW5saW5lLmMtOTAxLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy05MjQtXFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XFxuZnMvZXh0NC9pbmxpbmUuYzo5MjU6XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvaW5saW5lLmM6OTI2OlxcdCpmc2RhdGEgPSAodm9pZCAqKUNPTlZFUlRfSU5MSU5FX0RBVEE7XFxuZnMvZXh0NC9pbmxpbmUuYy05MjctXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEwNTI9c3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMDU1LVxcdGludCByZXQ7XFxuZnMvZXh0NC9pbmxpbmUuYzoxMDU2OlxcdGludCBvbGRfc2l6ZSA9IEVYVDRfSShkaXIpLVxcdTAwM2VpX2lubGluZV9zaXplIC0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRTtcXG5mcy9leHQ0L2lubGluZS5jLTEwNTctXFx0aW50IG5ld19zaXplID0gZ2V0X21heF9pbmxpbmVfeGF0dHJfdmFsdWVfc2l6ZShkaXIsIGlsb2MpO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMDYyLVxcdHJldCA9IGV4dDRfdXBkYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgZGlyLFxcbmZzL2V4dDQvaW5saW5lLmM6MTA2MzpcXHRcXHRcXHRcXHQgICAgICBuZXdfc2l6ZSArIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbmZzL2V4dDQvaW5saW5lLmMtMTA2NC1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMDY4LVxcdFxcdFxcdCAgICAgRVhUNF9JKGRpciktXFx1MDAzZWlfaW5saW5lX3NpemUgLVxcbmZzL2V4dDQvaW5saW5lLmM6MTA2OTpcXHRcXHRcXHRcXHRcXHRcXHRFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG5mcy9leHQ0L2lubGluZS5jLTEwNzAtXFx0ZGlyLVxcdTAwM2VpX3NpemUgPSBFWFQ0X0koZGlyKS1cXHUwMDNlaV9kaXNrc2l6ZSA9IEVYVDRfSShkaXIpLVxcdTAwM2VpX2lubGluZV9zaXplO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xMDc0PXN0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMDk0LVxcbmZzL2V4dDQvaW5saW5lLmM6MTA5NTpcXHRpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpO1xcbmZzL2V4dDQvaW5saW5lLmMtMTA5Ni1cXHRpZiAoIWlfYmxvY2tfYnVmKSB7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTExMTctXFx0XFx0Z290byBlcnJvcjtcXG5mcy9leHQ0L2lubGluZS5jOjExMTg6XFx0bWVtY3B5KGlfYmxvY2tfYnVmLCAodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuZnMvZXh0NC9pbmxpbmUuYzoxMTE5OlxcdG1lbXNldCgodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuZnMvZXh0NC9pbmxpbmUuYzoxMTIwOlxcdG1lbXNldChlaS1cXHUwMDNlaV9kYXRhLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG5mcy9leHQ0L2lubGluZS5jLTExMjEtXFx0bWVtY3B5KHhhdHRyX2J1ZiwgaGVhZGVyLCB4YXR0cl9zaXplKTtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTE2MS1cXHRcXHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xcbmZzL2V4dDQvaW5saW5lLmM6MTE2MjpcXHRcXHRtZW1jcHkoKHZvaWQgKilyYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2ssIGlfYmxvY2tfYnVmLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG5mcy9leHQ0L2lubGluZS5jOjExNjM6XFx0XFx0bWVtY3B5KGVpLVxcdTAwM2VpX2RhdGEsIHJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xMTY0LVxcdFxcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTE2Ny1cXHR9IGVsc2Uge1xcbmZzL2V4dDQvaW5saW5lLmM6MTE2ODpcXHRcXHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvaW5saW5lLmMtMTE2OS1cXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMTc2LVxcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xcbmZzL2V4dDQvaW5saW5lLmM6MTE3NzpcXHRcXHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xMTc4LVxcdFxcdGJyZWxzZShiaCk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEyOTQ9aW50IGV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGV4dDRfZmlsZW5hbWUgKmZuYW1lLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMzEwLVxcdFxcdFxcdFxcdFxcdFxcdCBFWFQ0X0lOTElORV9ET1RET1RfU0laRTtcXG5mcy9leHQ0L2lubGluZS5jOjEzMTE6XFx0aW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0xMzEyLVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMzE5LVxcdGlubGluZV9zaXplID0gRVhUNF9JKGRpciktXFx1MDAzZWlfaW5saW5lX3NpemUgLVxcbmZzL2V4dDQvaW5saW5lLmM6MTMyMDpcXHRcXHRcXHRFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFO1xcbmZzL2V4dDQvaW5saW5lLmMtMTMyMS1cXHRpZiAoIWlubGluZV9zaXplKSB7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTEzMjctXFx0XFx0aW5saW5lX3NpemUgPSBFWFQ0X0koZGlyKS1cXHUwMDNlaV9pbmxpbmVfc2l6ZSAtXFxuZnMvZXh0NC9pbmxpbmUuYzoxMzI4OlxcdFxcdFxcdFxcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0xMzI5LVxcdH1cXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTY2ND1pbnQgZXh0NF90cnlfY3JlYXRlX2lubGluZV9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE2NjYte1xcbmZzL2V4dDQvaW5saW5lLmM6MTY2NzpcXHRpbnQgcmV0LCBpbmxpbmVfc2l6ZSA9IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0xNjY4LVxcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTY5Nz1zdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfZmluZF9pbmxpbmVfZW50cnkoc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE3MjktXFx0XFx0XFx0XFx0XFx0XFx0RVhUNF9JTkxJTkVfRE9URE9UX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYzoxNzMwOlxcdGlubGluZV9zaXplID0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSAtIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFO1xcbmZzL2V4dDQvaW5saW5lLmMtMTczMS1cXHRyZXQgPSBleHQ0X3NlYXJjaF9kaXIoaXMuaWxvYy5iaCwgaW5saW5lX3N0YXJ0LCBpbmxpbmVfc2l6ZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTczNy1cXG5mcy9leHQ0L2lubGluZS5jOjE3Mzg6XFx0aWYgKGV4dDRfZ2V0X2lubGluZV9zaXplKGRpcikgPT0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSlcXG5mcy9leHQ0L2lubGluZS5jLTE3MzktXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE3NDEtXFx0aW5saW5lX3N0YXJ0ID0gZXh0NF9nZXRfaW5saW5lX3hhdHRyX3BvcyhkaXIsIFxcdTAwMjZpcy5pbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jOjE3NDI6XFx0aW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShkaXIpIC0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRTtcXG5mcy9leHQ0L2lubGluZS5jLTE3NDMtXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE3NjA9aW50IGV4dDRfZGVsZXRlX2lubGluZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNzgwLVxcdGlmICgodm9pZCAqKWRlX2RlbCAtICgodm9pZCAqKWV4dDRfcmF3X2lub2RlKFxcdTAwMjZpbG9jKS1cXHUwMDNlaV9ibG9jaykgXFx1MDAzY1xcbmZzL2V4dDQvaW5saW5lLmM6MTc4MTpcXHRcXHRFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKSB7XFxuZnMvZXh0NC9pbmxpbmUuYy0xNzgyLVxcdFxcdGlubGluZV9zdGFydCA9ICh2b2lkICopZXh0NF9yYXdfaW5vZGUoXFx1MDAyNmlsb2MpLVxcdTAwM2VpX2Jsb2NrICtcXG5mcy9leHQ0L2lubGluZS5jLTE3ODMtXFx0XFx0XFx0XFx0XFx0RVhUNF9JTkxJTkVfRE9URE9UX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYzoxNzg0OlxcdFxcdGlubGluZV9zaXplID0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSAtXFxuZnMvZXh0NC9pbmxpbmUuYy0xNzg1LVxcdFxcdFxcdFxcdEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNzg4LVxcdFxcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoZGlyKSAtXFxuZnMvZXh0NC9pbmxpbmUuYzoxNzg5OlxcdFxcdFxcdFxcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0xNzkwLVxcdH1cXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTgxOD1leHQ0X2dldF9pbmxpbmVfZW50cnkoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTgyNy1cXG5mcy9leHQ0L2lubGluZS5jOjE4Mjg6XFx0aWYgKG9mZnNldCBcXHUwMDNjIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpIHtcXG5mcy9leHQ0L2lubGluZS5jLTE4MjktXFx0XFx0aW5saW5lX3BvcyA9ICh2b2lkICopZXh0NF9yYXdfaW5vZGUoaWxvYyktXFx1MDAzZWlfYmxvY2s7XFxuZnMvZXh0NC9pbmxpbmUuYzoxODMwOlxcdFxcdCppbmxpbmVfc2l6ZSA9IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0xODMxLVxcdH0gZWxzZSB7XFxuZnMvZXh0NC9pbmxpbmUuYy0xODMyLVxcdFxcdGlubGluZV9wb3MgPSBleHQ0X2dldF9pbmxpbmVfeGF0dHJfcG9zKGlub2RlLCBpbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jOjE4MzM6XFx0XFx0b2Zmc2V0IC09IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0xODM0LVxcdFxcdCppbmxpbmVfc2l6ZSA9IGV4dDRfZ2V0X2lubGluZV9zaXplKGlub2RlKSAtXFxuZnMvZXh0NC9pbmxpbmUuYzoxODM1OlxcdFxcdFxcdFxcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0xODM2LVxcdH1cXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTk0OT1pbnQgZXh0NF9pbmxpbmVfZGF0YV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgKmhhc19pbmxpbmUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE5OTQtXFx0XFx0ICovXFxuZnMvZXh0NC9pbmxpbmUuYzoxOTk1OlxcdFxcdGlmICghZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpXFxuZnMvZXh0NC9pbmxpbmUuYy0xOTk2LVxcdFxcdFxcdGV4dDRfZXNfcmVtb3ZlX2V4dGVudChpbm9kZSwgMCwgRVhUX01BWF9CTE9DS1MpO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xOTk4LVxcdFxcdC8qIENsZWFyIHRoZSBjb250ZW50IGluIHRoZSB4YXR0ciBzcGFjZS4gKi9cXG5mcy9leHQ0L2lubGluZS5jOjE5OTk6XFx0XFx0aWYgKGlubGluZV9zaXplIFxcdTAwM2UgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSkge1xcbmZzL2V4dDQvaW5saW5lLmMtMjAwMC1cXHRcXHRcXHRpZiAoKGVyciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXFx1MDAyNmksIFxcdTAwMjZpcykpICE9IDApXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTIwMjItXFx0XFx0XFx0aS52YWx1ZSA9IHZhbHVlO1xcbmZzL2V4dDQvaW5saW5lLmM6MjAyMzpcXHRcXHRcXHRpLnZhbHVlX2xlbiA9IGlfc2l6ZSBcXHUwMDNlIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgP1xcbmZzL2V4dDQvaW5saW5lLmM6MjAyNDpcXHRcXHRcXHRcXHRcXHRpX3NpemUgLSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIDogMDtcXG5mcy9leHQ0L2lubGluZS5jLTIwMjUtXFx0XFx0XFx0ZXJyID0gZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlLCBpbm9kZSwgXFx1MDAyNmksIFxcdTAwMjZpcyk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTIwMzAtXFx0XFx0LyogQ2xlYXIgdGhlIGNvbnRlbnQgd2l0aGluIGlfYmxvY2tzLiAqL1xcbmZzL2V4dDQvaW5saW5lLmM6MjAzMTpcXHRcXHRpZiAoaV9zaXplIFxcdTAwM2MgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSkge1xcbmZzL2V4dDQvaW5saW5lLmMtMjAzMi1cXHRcXHRcXHR2b2lkICpwID0gKHZvaWQgKikgZXh0NF9yYXdfaW5vZGUoXFx1MDAyNmlzLmlsb2MpLVxcdTAwM2VpX2Jsb2NrO1xcbmZzL2V4dDQvaW5saW5lLmMtMjAzMy1cXHRcXHRcXHRtZW1zZXQocCArIGlfc2l6ZSwgMCxcXG5mcy9leHQ0L2lubGluZS5jOjIwMzQ6XFx0XFx0XFx0ICAgICAgIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgLSBpX3NpemUpO1xcbmZzL2V4dDQvaW5saW5lLmMtMjAzNS1cXHRcXHR9XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTIwMzctXFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfc2l6ZSA9IGlfc2l6ZSBcXHUwMDNjXFxuZnMvZXh0NC9pbmxpbmUuYzoyMDM4OlxcdFxcdFxcdFxcdFxcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgP1xcbmZzL2V4dDQvaW5saW5lLmM6MjAzOTpcXHRcXHRcXHRcXHRcXHRFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIDogaV9zaXplO1xcbmZzL2V4dDQvaW5saW5lLmMtMjA0MC1cXHR9XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTIwNjE9aW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0yMDY3LVxcdGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XFxuZnMvZXh0NC9pbmxpbmUuYzoyMDY4OlxcdFxcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcXG5mcy9leHQ0L2lubGluZS5jLTIwNjktXFx0XFx0cmV0dXJuIDA7XFxuZnMvZXh0NC9pbmxpbmUuYzoyMDcwOlxcdH0gZWxzZSBpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKSB7XFxuZnMvZXh0NC9pbmxpbmUuYy0yMDcxLVxcdFxcdC8qXFxuZnMvZXh0NC9pbmxpbmUuYzoyMDcyOlxcdFxcdCAqIElub2RlIGhhcyBpbmxpbmUgZGF0YSBidXQgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEgaXNcXG5mcy9leHQ0L2lubGluZS5jLTIwNzMtXFx0XFx0ICogY2xlYXJlZC4gVGhpcyBtZWFucyB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBtb3Zpbmcgb2ZcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0xMjc5PXN0YXRpYyBpbnQgZXh0NF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMTMwNC1cXG5mcy9leHQ0L2lub2RlLmM6MTMwNTpcXHRpZiAoZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpIHtcXG5mcy9leHQ0L2lub2RlLmMtMTMwNi1cXHRcXHRyZXQgPSBleHQ0X3RyeV90b193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9MTQzMD1zdGF0aWMgaW50IGV4dDRfd3JpdGVfZW5kKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0xNDQ0LVxcdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2lub2RlLmM6MTQ0NTpcXHQgICAgZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpXFxuZnMvZXh0NC9pbm9kZS5jLTE0NDYtXFx0XFx0cmV0dXJuIGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTE1MzQ9c3RhdGljIGludCBleHQ0X2pvdXJuYWxsZWRfd3JpdGVfZW5kKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0xNTU0LVxcdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2lub2RlLmM6MTU1NTpcXHQgICAgZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpXFxuZnMvZXh0NC9pbm9kZS5jLTE1NTYtXFx0XFx0cmV0dXJuIGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTI3NTI9c3RhdGljIGludCBleHQ0X2RvX3dyaXRlcGFnZXMoc3RydWN0IG1wYWdlX2RhX2RhdGEgKm1wZClcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0yODAzLVxcdFxcdEJVR19PTihleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsXFxuZnMvZXh0NC9pbm9kZS5jOjI4MDQ6XFx0XFx0XFx0XFx0RVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKTtcXG5mcy9leHQ0L2lub2RlLmMtMjgwNS1cXHRcXHRleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9MzExMj1zdGF0aWMgaW50IGV4dDRfZGFfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTMxMzUtXFxuZnMvZXh0NC9pbm9kZS5jOjMxMzY6XFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKSB7XFxuZnMvZXh0NC9pbm9kZS5jLTMxMzctXFx0XFx0cmV0ID0gZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKG1hcHBpbmcsIGlub2RlLCBwb3MsIGxlbixcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0zMjY1PXN0YXRpYyBpbnQgZXh0NF9kYV93cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTMyNzgtXFxuZnMvZXh0NC9pbm9kZS5jOjMyNzk6XFx0aWYgKHdyaXRlX21vZGUgIT0gQ09OVkVSVF9JTkxJTkVfREFUQSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvaW5vZGUuYzozMjgwOlxcdCAgICBleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvaW5vZGUuYy0zMjgxLVxcdCAgICBleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTE0MD1zdGF0aWMgaW5saW5lIGludCBleHQ0X2lnZXRfZXh0cmFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01MTU4LVxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcXG5mcy9leHQ0L2lub2RlLmM6NTE1OTpcXHRcXHRcXHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvaW5vZGUuYy01MTYwLVxcdFxcdHJldHVybiBlcnI7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTI0NT1zdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUzODQtXFx0LyogRGV0ZWN0IGludmFsaWQgZmxhZyBjb21iaW5hdGlvbiAtIGNhbid0IGhhdmUgYm90aCBpbmxpbmUgZGF0YSBhbmQgZXh0ZW50cyAqL1xcbmZzL2V4dDQvaW5vZGUuYzo1Mzg1OlxcdGlmIChleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2lub2RlLmMtNTM4Ni1cXHQgICAgZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpIHtcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYz01Njc9c3RhdGljIGJvb2wgZGF4X2NvbXBhdGlibGUoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IG9sZGZsYWdzLFxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTU3MS1cXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbmZzL2V4dDQvaW9jdGwuYzo1NzI6XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfkVYVDRfSU5MSU5FX0RBVEFfRkw7XFxuZnMvZXh0NC9pb2N0bC5jOjU3MzpcXHRcXHRvbGRmbGFncyBcXHUwMDI2PSB+RVhUNF9JTkxJTkVfREFUQV9GTDtcXG5mcy9leHQ0L2lvY3RsLmMtNTc0LVxcdH1cXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0yOTY5PWludCBleHQ0X2luaXRfbmV3X2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0yOTc1LVxcbmZzL2V4dDQvbmFtZWkuYzoyOTc2OlxcdGlmIChleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSkge1xcbmZzL2V4dDQvbmFtZWkuYy0yOTc3LVxcdFxcdGVyciA9IGV4dDRfdHJ5X2NyZWF0ZV9pbmxpbmVfZGlyKGhhbmRsZSwgZGlyLCBpbm9kZSk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9Mzc5Nz1zdGF0aWMgaW50IGV4dDRfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMzkxOS1cXHRmb3JjZV9yZXJlYWQgPSAobmV3LmRpci1cXHUwMDNlaV9pbm8gPT0gb2xkLmRpci1cXHUwMDNlaV9pbm8gXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L25hbWVpLmM6MzkyMDpcXHRcXHRcXHRleHQ0X3Rlc3RfaW5vZGVfZmxhZyhuZXcuZGlyLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSk7XFxuZnMvZXh0NC9uYW1laS5jLTM5MjEtXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMzk0Ny1cXHRcXHRmb3JjZV9yZXJlYWQgPSAhZXh0NF90ZXN0X2lub2RlX2ZsYWcobmV3LmRpcixcXG5mcy9leHQ0L25hbWVpLmM6Mzk0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvbmFtZWkuYy0zOTQ5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozMzo0My45OTMwMDEyMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzY0MTIwMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEVYVDQgSW5saW5lIERhdGEgQ29udmVyc2lvbiBMb2dpYyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBmdW5jdGlvbnMgcmVsYXRlZCB0byBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24uIFRoZSBrZXkgcGxheWVycywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGBGb2N1c1N5bWJvbHNgLCBhcmU6IGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgLCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AsIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AsIGFuZCBgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeWAuXG5cbkZpcnN0LCBJIG5lZWQgdG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQgbWUgcXVpY2tseSByZS1leGFtaW5lIHRoZSBkaWZmLiBBaCwgaGVyZSB3ZSBnbzogaXQgc2VlbXMgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYCBpcyBuZXcsIGVzc2VudGlhbGx5IHJlcGxhY2luZyBgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhYCwgYW5kIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBoYXMgYmVlbiBtb2RpZmllZC4gVGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGFwcGVhciB0byBiZSBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBhbmQgYGV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlgLiBUaGF0IHNlZW1zIHJlYXNvbmFibGUuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgY3J1Y2lhbCBjb25maWcgaXMgYEVYVDRfRlNgLCB3aGljaCBlbmFibGVzIHRoZSBleHQ0IGZpbGUgc3lzdGVtIGl0c2VsZi4gSSBzaG91bGQgZG91YmxlLWNoZWNrIGlmIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBpbnZvbHZlZC4gU2luY2UgdGhpcyBpcyBpbmxpbmUgZGF0YSwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzZWN1cml0eSBhbmQgQUNMIGNvbnNpZGVyYXRpb25zIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4gSG93ZXZlciwgYSByZXZpZXcgb2YgdGhlIGNvZGUgcmV2ZWFscyB0aGF0IHRoZSBzeXN0ZW0geGF0dHIsIGZvciBpbmxpbmUgZGF0YSwgaXMgbWFuYWdlZCBieSBjb3JlIGV4dDQgeGF0dHIgbG9naWMgKGluIGB4YXR0ci5jYCkuIFRoZSBmYWN0IHRoYXQgaXQgaXMgYWx3YXlzIGJ1aWx0IGFsb25nIHdpdGggYGlubGluZS5vYCBpbXBsaWVzIHRoaXMgaXMgbm90IGRlcGVuZGVudCBvbiBhbnkgb3RoZXIgYWRkaXRpb25hbCBjb25maWcuIFNvLCBgRVhUNF9GU2Agc2VlbXMgc3VmZmljaWVudC5cblxuSSd2ZSByZXZpZXdlZCB0aGUgaW5zdHJ1Y3Rpb25zOiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgY29udGFpbnMgb25seSBgRVhUNF9GU2AsIHRoZSBgRm9jdXNTeW1ib2xzYCBtYXRjaCB3aGF0IEkndmUgaWRlbnRpZmllZCwgYW5kIHRoZSByZXF1ZXN0ZWQgYFJlYXNvbmluZ2AgaXMgY29uY2lzZSDigJMgd2hpY2ggSSBiZWxpZXZlIEkndmUgYWNoaWV2ZWQuXG5cbkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gSSdtIHNhdGlzZmllZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTcxNywiT3V0cHV0VG9rZW5zIjoxNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzM6NDguMzU3MTIzNjI1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQxNzgxOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja1wiLFxuICAgIFwiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja1wiLFxuICAgIFwiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhXCIsXG4gICAgXCJleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4dDQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBtZWNoYW5pc20gaW4gZnMvZXh0NC9pbmxpbmUuYywgcmVwbGFjaW5nIGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YSB3aXRoIGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrIGFuZCByZXN0cnVjdHVyaW5nIGJsb2NrIGFsbG9jYXRpb24sIGV4dGVudCBpbnNlcnRpb24sIGFuZCBlcnJvciByZWNvdmVyeSBoYW5kbGluZyBkdXJpbmcgaW5saW5lIGRhdGEgY29udmVyc2lvbi4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBvcGVyYXRpb25zIHdoZW4gZXhwYW5kaW5nIGlubGluZSBmaWxlcy9kaXJlY3RvcmllcyBhbmQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja1wiLFxuICAgIFwiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja1wiLFxuICAgIFwiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhXCIsXG4gICAgXCJleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4dDQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBtZWNoYW5pc20gaW4gZnMvZXh0NC9pbmxpbmUuYywgcmVwbGFjaW5nIGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YSB3aXRoIGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrIGFuZCByZXN0cnVjdHVyaW5nIGJsb2NrIGFsbG9jYXRpb24sIGV4dGVudCBpbnNlcnRpb24sIGFuZCBlcnJvciByZWNvdmVyeSBoYW5kbGluZyBkdXJpbmcgaW5saW5lIGRhdGEgY29udmVyc2lvbi4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBvcGVyYXRpb25zIHdoZW4gZXhwYW5kaW5nIGlubGluZSBmaWxlcy9kaXJlY3RvcmllcyBhbmQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozMzo0OC40NDEzMDg3ODJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MDA0NzEyNzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzM6NDguNDQxNzY5NTkyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTUwMDQyNDY4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXh0NCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGxvZ2ljIGluIGBmcy9leHQ0L2lubGluZS5jYCBieSBpbnRyb2R1Y2luZyBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIGFuZCBhbGxvY2F0aW5nIHRoZSBkZXN0aW5hdGlvbiBibG9jayBwcmlvciB0byBjbGVhcmluZyBpbmxpbmUgZGF0YSBpbiB0aGUgaW5vZGUuXFxuXFxuUmV2aWV3aW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhY3Jvc3MgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczpcXG4xLiBBbGwgbG9jYWwgc3RhY2sgc3RydWN0dXJlcyAoYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgLCBgc3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpYCwgYHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcmAsIGFuZCBgc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgYG1lbXNldGAsIG9yIGV4cGxpY2l0IG1lbWJlciBhc3NpZ25tZW50cyBiZWZvcmUgdXNlLlxcbjIuIEhlYXAgYnVmZmVycyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jYCAoYGlfYmxvY2tfYnVmYCwgYHhhdHRyX2J1ZmAsIGBidWZgKSBhcmUgaW1tZWRpYXRlbHkgcG9wdWxhdGVkIHZpYSBgbWVtY3B5YCBvciBgZXh0NF9yZWFkX2lubGluZV9kYXRhYC5cXG4zLiBUaGUgYmxvY2sgYnVmZmVyIGRhdGEgKGBiaC1cXHUwMDNlYl9kYXRhYCkgaXMgZXhwbGljaXRseSBjbGVhcmVkIHVzaW5nIGBtZW1zZXRgIGJlZm9yZSB3cml0aW5nIGlubGluZSBkYXRhIG9yIGRpcmVjdG9yeSBlbnRyaWVzLlxcbjQuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gYnJhbmNoaW5nL2xvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgZXJyb3IgcmVjb3ZlcnkgaGFuZGxpbmcsIGxvY2tpbmcsIG9yIGV4dGVudCBtYW5pcHVsYXRpb24pIGZhbGwgdW5kZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1ZTUyMzEyMDRlMDNjMzAzMjQ2ODM3MTI5NWViOGEyN2Y4MGQxZGViXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxMDozMzowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jXG5pbmRleCA4MDQ1ZTRmZjI3MGM3Li5mZWY5OGFjZWU2ODhmIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbmxpbmUuY1xuKysrIGIvZnMvZXh0NC9pbmxpbmUuY1xuQEAgLTE0LDYgKzE0LDcgQEBcbiAjaW5jbHVkZSBcImV4dDQuaFwiXG4gI2luY2x1ZGUgXCJ4YXR0ci5oXCJcbiAjaW5jbHVkZSBcInRydW5jYXRlLmhcIlxuKyNpbmNsdWRlIFwiZXh0NF9leHRlbnRzLmhcIlxuIFxuICNkZWZpbmUgRVhUNF9YQVRUUl9TWVNURU1fREFUQVx0XCJkYXRhXCJcbiAjZGVmaW5lIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkVcdCgoc2l6ZW9mKF9fbGUzMikgKiBFWFQ0X05fQkxPQ0tTKSlcbkBAIC0xMDcwLDIxICsxMDcxLDEyMyBAQCBzdGF0aWMgaW50IGV4dDRfdXBkYXRlX2lubGluZV9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MsXG4tXHRcdFx0XHQgICAgIHZvaWQgKmJ1ZiwgaW50IGlubGluZV9zaXplKVxuK3N0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLFxuK1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgbGVuLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIHtcbi1cdGludCByZXQ7XG4rXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4rXHRzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzID0ge1xuK1x0XHQucyA9IHsgLm5vdF9mb3VuZCA9IC1FTk9EQVRBLCB9LFxuK1x0fTtcbitcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaSA9IHtcbitcdFx0Lm5hbWVfaW5kZXggPSBFWFQ0X1hBVFRSX0lOREVYX1NZU1RFTSxcbitcdFx0Lm5hbWUgPSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBLFxuK1x0XHQudmFsdWUgPSBOVUxMLFxuK1x0XHQudmFsdWVfbGVuID0gMCxcbitcdH07XG4rXHRpbnQgZXJyb3I7XG4rXHR2b2lkICppX2Jsb2NrX2J1ZiA9IE5VTEw7XG4rXHR2b2lkICp4YXR0cl9idWYgPSBOVUxMO1xuK1x0dm9pZCAqaGVhZGVyID0gTlVMTDtcbitcdHZvaWQgKnRhaWwgPSBOVUxMO1xuK1x0aW50IHhhdHRyX3NpemU7XG4rXHRzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlO1xuIFxuLVx0cmV0ID0gZXh0NF9jcmVhdGVfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSwgaW5saW5lX3NpemUpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRleHQ0X21zZyhpbm9kZS1cdTAwM2VpX3NiLCBLRVJOX0VNRVJHLFxuLVx0XHRcdFwiZXJyb3IgcmVzdG9yaW5nIGlubGluZV9kYXRhIGZvciBpbm9kZSAtLSBwb3RlbnRpYWwgZGF0YSBsb3NzISAoaW5vZGUgJWxsdSwgZXJyb3IgJWQpXCIsXG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9pbm8sIHJldCk7XG4tXHRcdHJldHVybjtcbitcdGlfYmxvY2tfYnVmID0ga21hbGxvYyhFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFLCBHRlBfTk9GUyk7XG4rXHRpZiAoIWlfYmxvY2tfYnVmKSB7XG4rXHRcdGVycm9yID0gLUVOT01FTTtcbitcdFx0ZG93bl93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbitcdFx0Z290byBlcnJvcjtcbiBcdH1cbi1cdGV4dDRfd3JpdGVfaW5saW5lX2RhdGEoaW5vZGUsIGlsb2MsIGJ1ZiwgMCwgaW5saW5lX3NpemUpO1xuLVx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbitcdGRvd25fd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aXMuaWxvYyk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gZXJyb3I7XG4rXHRyYXdfaW5vZGUgPSBleHQ0X3Jhd19pbm9kZShcdTAwMjZpcy5pbG9jKTtcbitcdGhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7XG4rXHR0YWlsID0gSVRBSUwoaW5vZGUsIHJhd19pbm9kZSk7XG4rXHR4YXR0cl9zaXplID0gdGFpbCAtIGhlYWRlcjtcbitcdHhhdHRyX2J1ZiA9IGttYWxsb2MoeGF0dHJfc2l6ZSwgR0ZQX05PRlMpO1xuK1x0aWYgKCF4YXR0cl9idWYpIHtcbitcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGVycm9yO1xuK1x0fVxuK1x0QlVGRkVSX1RSQUNFKGlzLmlsb2MuYmgsIFwiZ2V0X3dyaXRlX2FjY2Vzc1wiKTtcbitcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cdTAwM2VpX3NiLCBpcy5pbG9jLmJoLCBFWFQ0X0pUUl9OT05FKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBlcnJvcjtcbitcdG1lbWNweShpX2Jsb2NrX2J1ZiwgKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4rXHRtZW1zZXQoKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4rXHRtZW1zZXQoZWktXHUwMDNlaV9kYXRhLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbitcdG1lbWNweSh4YXR0cl9idWYsIGhlYWRlciwgeGF0dHJfc2l6ZSk7XG4rXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9leHRlbnRzKGlub2RlLVx1MDAzZWlfc2IpIFx1MDAyNlx1MDAyNlxuK1x0XHQoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpKSB7XG4rXHRcdGV4dDRfc2V0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4rXHRcdGV4dDRfZXh0X3RyZWVfaW5pdChoYW5kbGUsIGlub2RlKTtcbitcdFx0c3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCAwLCBOVUxMLCAwKTtcbitcbitcdFx0aWYgKElTX0VSUihwYXRoKSkge1xuK1x0XHRcdGVycm9yID0gUFRSX0VSUihwYXRoKTtcbitcdFx0XHRnb3RvIHJlY292ZXJ5O1xuK1x0XHR9XG4rXHRcdHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleDtcbitcbitcdFx0bmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMigwKTtcbitcdFx0bmV3ZXguZWVfbGVuID0gY3B1X3RvX2xlMTYoMSk7XG4rXHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcdTAwMjZuZXdleCwgYmxvY2spO1xuK1x0XHRwYXRoID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCBcdTAwMjZuZXdleCwgMCk7XG4rXHRcdGlmIChJU19FUlIocGF0aCkpIHtcbitcdFx0XHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XG4rXHRcdFx0aWYgKGVycm9yID09IC1FRFFVT1QgfHwgZXJyb3IgPT0gLUVOT1NQQylcbitcdFx0XHRcdGdvdG8gcmVjb3Zlcnk7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0Z290byBub19mcmVlO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7XG4rXHR9XG4rXHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXHUwMDI2aSwgXHUwMDI2aXMpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIHJlY292ZXJ5O1xuK1x0aWYgKCFpcy5zLm5vdF9mb3VuZClcbitcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4rcmVjb3Zlcnk6XG4rXHRpZiAoZXJyb3IpIHtcbitcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbitcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbitcdFx0bWVtY3B5KGhlYWRlciwgeGF0dHJfYnVmLCB4YXR0cl9zaXplKTtcbitub19mcmVlOlxuK1x0XHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xuK1x0XHRtZW1jcHkoKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgaV9ibG9ja19idWYsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0XHRtZW1jcHkoZWktXHUwMDNlaV9kYXRhLCByYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4rXHRcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTtcbitcdFx0Z2V0X2JoKGlzLmlsb2MuYmgpO1xuK1x0XHRleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbitcdH0gZWxzZSB7XG4rXHRcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSk7XG4rXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbitcdFx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuK1x0XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4rXHRcdH1cbitcdFx0Z2V0X2JoKGlzLmlsb2MuYmgpO1xuK1x0XHRlcnJvciA9IGV4dDRfbWFya19pbG9jX2RpcnR5KGhhbmRsZSwgaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuK1x0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX29mZiA9IDA7XG4rXHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9pbmxpbmVfc2l6ZSA9IDA7XG4rXHRcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbitcdFx0YnJlbHNlKGJoKTtcbitcdH1cbitcdGdvdG8gb3V0O1xuK2Vycm9yOlxuK1x0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbitcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4rXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApO1xuK291dDpcbitcdGJyZWxzZShpcy5pbG9jLmJoKTtcbitcdHVwX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuK1x0a2ZyZWUoaV9ibG9ja19idWYpO1xuK1x0a2ZyZWUoeGF0dHJfYnVmKTtcbitcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4gc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG5AQCAtMTA5Myw5ICsxMTk2LDEyIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuIHtcbiBcdGludCBlcnJvcjtcbiBcdHZvaWQgKmJ1ZiA9IE5VTEw7XG4tXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRhdGFfYmggPSBOVUxMO1xuLVx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XG4rXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbiBcdGludCBpbmxpbmVfc2l6ZTtcbitcdGV4dDRfZnNibGtfdCBuZXdibG9jayA9IDA7XG4rXHRzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXI7XG4rXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0dW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jaztcbiBcbiBcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xuIFx0YnVmID0ga21hbGxvYyhpbmxpbmVfc2l6ZSwgR0ZQX05PRlMpO1xuQEAgLTExMjAsNjMgKzEyMjYsNjIgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRlcnJvciA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0bWFwLm1fbGJsayA9IDA7XG4tXHRtYXAubV9sZW4gPSAxO1xuLVx0bWFwLm1fZmxhZ3MgPSAwO1xuLVx0ZXJyb3IgPSBleHQ0X21hcF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgXHUwMDI2bWFwLCBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKTtcbitcdG1lbXNldChcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSk7XG4rXHRhci5pbm9kZSA9IGlub2RlO1xuK1x0YXIubG9naWNhbCA9IDA7XG4rXHRhci5sZW4gPSAxO1xuK1x0aWYgKFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbitcdFx0YXIuZmxhZ3MgPSBFWFQ0X01CX0hJTlRfREFUQTtcbitcdGVsc2VcbitcdFx0YXIuZmxhZ3MgPSAwO1xuK1x0bmV3YmxvY2sgPSBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlLCBcdTAwMjZhciwgXHUwMDI2ZXJyb3IpO1xuIFx0aWYgKGVycm9yIFx1MDAzYyAwKVxuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuLVx0aWYgKCEobWFwLm1fZmxhZ3MgXHUwMDI2IEVYVDRfTUFQX01BUFBFRCkpIHtcbi1cdFx0ZXJyb3IgPSAtRUlPO1xuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuLVx0fVxuLVxuLVx0ZGF0YV9iaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLCBtYXAubV9wYmxrKTtcbi1cdGlmICghZGF0YV9iaCkge1xuK1x0XHRnb3RvIG91dDtcbitcdGFsbG9jYXRlZF9ibG9jayA9IEVYVDRfQzJCKHNiaSwgYXIubGVuKTtcbitcdGJoID0gc2JfZ2V0YmxrKGlub2RlLVx1MDAzZWlfc2IsIG5ld2Jsb2NrKTtcbitcdGlmICghYmgpIHtcbiBcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuK1x0XHRnb3RvIG91dF9iaDtcbiBcdH1cbiBcbi1cdGxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuLVx0ZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cdTAwM2VpX3NiLCBkYXRhX2JoLFxuK1x0bG9ja19idWZmZXIoYmgpO1xuK1x0ZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cdTAwM2VpX3NiLCBiaCxcbiBcdFx0XHRcdFx0ICAgICAgIEVYVDRfSlRSX05PTkUpO1xuIFx0aWYgKGVycm9yKSB7XG4tXHRcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XG4rXHRcdHVubG9ja19idWZmZXIoYmgpO1xuIFx0XHRlcnJvciA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4rXHRcdGdvdG8gb3V0X2JoO1xuIFx0fVxuLVx0bWVtc2V0KGRhdGFfYmgtXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbitcdG1lbXNldChiaC1cdTAwM2ViX2RhdGEsIDAsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuIFxuIFx0aWYgKCFTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbi1cdFx0bWVtY3B5KGRhdGFfYmgtXHUwMDNlYl9kYXRhLCBidWYsIGlubGluZV9zaXplKTtcbi1cdFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShkYXRhX2JoKTtcbi1cdFx0dW5sb2NrX2J1ZmZlcihkYXRhX2JoKTtcbitcdFx0bWVtY3B5KGJoLVx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XG4rXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuK1x0XHR1bmxvY2tfYnVmZmVyKGJoKTtcbiBcdFx0ZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsXG4tXHRcdFx0XHRcdFx0ICAgaW5vZGUsIGRhdGFfYmgpO1xuK1x0XHRcdFx0XHRcdCAgIGlub2RlLCBiaCk7XG4gXHR9IGVsc2Uge1xuLVx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuLVx0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuLVx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuLVx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuLVxuLVx0XHRlcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBkYXRhX2JoLFxuK1x0XHR1bmxvY2tfYnVmZmVyKGJoKTtcbitcdFx0ZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsXG4gXHRcdFx0ICBsZTMyX3RvX2NwdSgoKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopYnVmKS1cdTAwM2Vpbm9kZSksXG4gXHRcdFx0ICBidWYgKyBFWFQ0X0lOTElORV9ET1RET1RfU0laRSxcbiBcdFx0XHQgIGlubGluZV9zaXplIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUpO1xuLVx0XHRpZiAoIWVycm9yKVxuLVx0XHRcdGVycm9yID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpO1xuIFx0fVxuK291dF9iaDpcbitcdGlmIChlcnJvcikge1xuK1x0XHRpZiAoYmgpXG4rXHRcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIG5ld2Jsb2NrKTtcbitcdFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xuIFxuLW91dF9yZXN0b3JlOlxuLVx0aWYgKGVycm9yKVxuLVx0XHRleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSwgaWxvYywgYnVmLCBpbmxpbmVfc2l6ZSk7XG4tXG4rXHRcdGRvd25fd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHRcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4rXHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgbmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgMCk7XG4rXHRcdHVwX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuK1x0fSBlbHNlIHtcbitcdFx0ZXJyb3IgPSBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGUsIGlub2RlLFxuK1x0XHRcdFx0bmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgYmgpO1xuK1x0fVxuIG91dDpcbi1cdGJyZWxzZShkYXRhX2JoKTtcbiBcdGtmcmVlKGJ1Zik7XG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzM6NDguNDQxNzcwODEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzNDI0NTM0NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHQ0IElubGluZSBEYXRhIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgaWYgd2UncmUgbG9va2luZyBhdCBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSB0aGF0IHNjcmVhbXMgZm9yIGEgS01TQU4gc2Vzc2lvbiAoTmVlZHNLTVNBTj10cnVlKSwgb3IgaWYgdGhpcyBpcyBqdXN0IHR5cGljYWwgZmlsZXN5c3RlbSBsb2dpYywgYSBidWcgZml4LCBvciBzb21lIHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZyB3aGVyZSBLQVNBTiBvciBvdXIgc3RhbmRhcmQgZGV0ZWN0b3JzIGFyZSBhZGVxdWF0ZS4gSSBuZWVkIHRvIGJlIGVmZmljaWVudCBoZXJlLlxuXG5GaXJzdCwgSSBuZWVkIHRvICp1bmRlcnN0YW5kKiB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgKmRvaW5nKi4gSSdtIHNlZWluZyBpdCdzIGluIGBmcy9leHQ0L2lubGluZS5jYCwgYW5kIHRoZSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBhbmQgdGhpcyBuZXcgaGVscGVyIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AuIEl0IGxvb2tzIGxpa2Ugd2UncmUgcmVwbGFjaW5nIGBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGFgIGFzIHdlbGwuIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHRvIGxvb2sgaW50by5cblxuTm93LCBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGluc3BlY3QgdGhlIGNvZGUgY2hhbmdlcyB0aGVtc2VsdmVzLiBJJ2xsIG5lZWQgdG8gZ28gbGluZSBieSBsaW5lIGhlcmUsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IG1lbW9yeSBhc3NpZ25tZW50cywgYmxvY2sgaGFuZGxpbmcsIG9yIGRhdGEgY29weWluZyBvcGVyYXRpb25zLiBJZiBJIG5lZWQgdGhlIGJpZ2dlciBwaWN0dXJlLCBJ4oCZbGwgbGV2ZXJhZ2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBjb250ZXh0IHdpdGhpbiBgZnMvZXh0NC9pbmxpbmUuY2AgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgbGFyZ2VyIGV4dDQgaW5saW5lIGRhdGEgcGljdHVyZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBwb3RlbnRpYWwgcmlza3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozMzo1NC43ODQyMjc0MTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvaW5saW5lLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA2MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA2MDpcXHRcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4xMDYxOlxcdFxcbjEwNjI6XFx0XFx0cmV0ID0gZXh0NF91cGRhdGVfaW5saW5lX2RhdGEoaGFuZGxlLCBkaXIsXFxuMTA2MzpcXHRcXHRcXHRcXHRcXHQgICAgICBuZXdfc2l6ZSArIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjEwNjQ6XFx0XFx0aWYgKHJldClcXG4xMDY1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTA2NjpcXHRcXG4xMDY3OlxcdFxcdGV4dDRfdXBkYXRlX2ZpbmFsX2RlKGV4dDRfZ2V0X2lubGluZV94YXR0cl9wb3MoZGlyLCBpbG9jKSwgb2xkX3NpemUsXFxuMTA2ODpcXHRcXHRcXHRcXHQgICAgIEVYVDRfSShkaXIpLVxcdTAwM2VpX2lubGluZV9zaXplIC1cXG4xMDY5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjEwNzA6XFx0XFx0ZGlyLVxcdTAwM2VpX3NpemUgPSBFWFQ0X0koZGlyKS1cXHUwMDNlaV9kaXNrc2l6ZSA9IEVYVDRfSShkaXIpLVxcdTAwM2VpX2lubGluZV9zaXplO1xcbjEwNzE6XFx0XFx0cmV0dXJuIDA7XFxuMTA3MjpcXHR9XFxuMTA3MzpcXHRcXG4xMDc0OlxcdHN0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLFxcbjEwNzU6XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4xMDc2OlxcdHtcXG4xMDc3OlxcdFxcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcXG4xMDc4OlxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7XFxuMTA3OTpcXHRcXHRcXHQucyA9IHsgLm5vdF9mb3VuZCA9IC1FTk9EQVRBLCB9LFxcbjEwODA6XFx0XFx0fTtcXG4xMDgxOlxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaSA9IHtcXG4xMDgyOlxcdFxcdFxcdC5uYW1lX2luZGV4ID0gRVhUNF9YQVRUUl9JTkRFWF9TWVNURU0sXFxuMTA4MzpcXHRcXHRcXHQubmFtZSA9IEVYVDRfWEFUVFJfU1lTVEVNX0RBVEEsXFxuMTA4NDpcXHRcXHRcXHQudmFsdWUgPSBOVUxMLFxcbjEwODU6XFx0XFx0XFx0LnZhbHVlX2xlbiA9IDAsXFxuMTA4NjpcXHRcXHR9O1xcbjEwODc6XFx0XFx0aW50IGVycm9yO1xcbjEwODg6XFx0XFx0dm9pZCAqaV9ibG9ja19idWYgPSBOVUxMO1xcbjEwODk6XFx0XFx0dm9pZCAqeGF0dHJfYnVmID0gTlVMTDtcXG4xMDkwOlxcdFxcdHZvaWQgKmhlYWRlciA9IE5VTEw7XFxuMTA5MTpcXHRcXHR2b2lkICp0YWlsID0gTlVMTDtcXG4xMDkyOlxcdFxcdGludCB4YXR0cl9zaXplO1xcbjEwOTM6XFx0XFx0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcXG4xMDk0OlxcdFxcbjEwOTU6XFx0XFx0aV9ibG9ja19idWYgPSBrbWFsbG9jKEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUsIEdGUF9OT0ZTKTtcXG4xMDk2OlxcdFxcdGlmICghaV9ibG9ja19idWYpIHtcXG4xMDk3OlxcdFxcdFxcdGVycm9yID0gLUVOT01FTTtcXG4xMDk4OlxcdFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNmVpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4xMDk5OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMTEwMDpcXHRcXHR9XFxuMTEwMTpcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZlaS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuMTEwMjpcXHRcXHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlzLmlsb2MpO1xcbjExMDM6XFx0XFx0aWYgKGVycm9yKVxcbjExMDQ6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4xMTA1OlxcdFxcdHJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKFxcdTAwMjZpcy5pbG9jKTtcXG4xMTA2OlxcdFxcdGhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7XFxuMTEwNzpcXHRcXHR0YWlsID0gSVRBSUwoaW5vZGUsIHJhd19pbm9kZSk7XFxuMTEwODpcXHRcXHR4YXR0cl9zaXplID0gdGFpbCAtIGhlYWRlcjtcXG4xMTA5OlxcdFxcdHhhdHRyX2J1ZiA9IGttYWxsb2MoeGF0dHJfc2l6ZSwgR0ZQX05PRlMpO1xcbjExMTA6XFx0XFx0aWYgKCF4YXR0cl9idWYpIHtcXG4xMTExOlxcdFxcdFxcdGVycm9yID0gLUVOT01FTTtcXG4xMTEyOlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMTExMzpcXHRcXHR9XFxuMTExNDpcXHRcXHRCVUZGRVJfVFJBQ0UoaXMuaWxvYy5iaCwgXFxcImdldF93cml0ZV9hY2Nlc3NcXFwiKTtcXG4xMTE1OlxcdFxcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cXHUwMDNlaV9zYiwgaXMuaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7XFxuMTExNjpcXHRcXHRpZiAoZXJyb3IpXFxuMTExNzpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjExMTg6XFx0XFx0bWVtY3B5KGlfYmxvY2tfYnVmLCAodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuMTExOTpcXHRcXHRtZW1zZXQoKHZvaWQgKilyYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjExMjA6XFx0XFx0bWVtc2V0KGVpLVxcdTAwM2VpX2RhdGEsIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjExMjE6XFx0XFx0bWVtY3B5KHhhdHRyX2J1ZiwgaGVhZGVyLCB4YXR0cl9zaXplKTtcXG4xMTIyOlxcdFxcdGlmIChleHQ0X2hhc19mZWF0dXJlX2V4dGVudHMoaW5vZGUtXFx1MDAzZWlfc2IpIFxcdTAwMjZcXHUwMDI2XFxuMTEyMzpcXHRcXHRcXHQoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fCBTX0lTUkVHKGlub2RlLVxcdTAwM2VpX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpKSB7XFxuMTEyNDpcXHRcXHRcXHRleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xcbjExMjU6XFx0XFx0XFx0ZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgaW5vZGUpO1xcbjExMjY6XFx0XFx0XFx0c3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCAwLCBOVUxMLCAwKTtcXG4xMTI3OlxcdFxcbjExMjg6XFx0XFx0XFx0aWYgKElTX0VSUihwYXRoKSkge1xcbjExMjk6XFx0XFx0XFx0XFx0ZXJyb3IgPSBQVFJfRVJSKHBhdGgpO1xcbjExMzA6XFx0XFx0XFx0XFx0Z290byByZWNvdmVyeTtcXG4xMTMxOlxcdFxcdFxcdH1cXG4xMTMyOlxcdFxcdFxcdHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleDtcXG4xMTMzOlxcdFxcbjExMzQ6XFx0XFx0XFx0bmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMigwKTtcXG4xMTM1OlxcdFxcdFxcdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpO1xcbjExMzY6XFx0XFx0XFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKFxcdTAwMjZuZXdleCwgYmxvY2spO1xcbjExMzc6XFx0XFx0XFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXFx1MDAyNm5ld2V4LCAwKTtcXG4xMTM4OlxcdFxcdFxcdGlmIChJU19FUlIocGF0aCkpIHtcXG4xMTM5OlxcdFxcdFxcdFxcdGVycm9yID0gUFRSX0VSUihwYXRoKTtcXG4xMTQwOlxcdFxcdFxcdFxcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXFxuMTE0MTpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlY292ZXJ5O1xcbjExNDI6XFx0XFx0XFx0XFx0ZWxzZVxcbjExNDM6XFx0XFx0XFx0XFx0XFx0Z290byBub19mcmVlO1xcbjExNDQ6XFx0XFx0XFx0fSBlbHNlIHtcXG4xMTQ1OlxcdFxcdFxcdFxcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcXG4xMTQ2OlxcdFxcdFxcdH1cXG4xMTQ3OlxcdFxcdH0gZWxzZSB7XFxuMTE0ODpcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7XFxuMTE0OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjU0Ljc4NDM4OTQ5M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzc5MzU5NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJbmxpbmUgRGF0YSBGdW5jdGlvbnMqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byB0YWtlIGEgZGVlcGVyIGRpdmUgaW50byBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIGFuZCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AuIEkgbmVlZCB0byBmdWxseSBncmFzcCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IGFuZCBob3cgdGhleSBhcmUgdXNlZCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBleHQ0J3MgaW5saW5lIGRhdGEgaW1wbGVtZW50YXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlc2UgZnVuY3Rpb25zIGFyZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcyBpbiBob3cgZXh0NCBzdG9yZXMgZGF0YSBmb3Igc21hbGxlciBmaWxlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBleGFjdGx5IHRoZXNlIHJvdXRpbmVzIGZpdCBpbiB0aGUgb3ZlcmFsbCBzY2hlbWUgb2YgdGhpbmdzLiBJJ20gZ29pbmcgdG8gZ28gbGluZS1ieS1saW5lIGFuZCBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLCB0aGUgbG9ja2luZyBzZW1hbnRpY3MgKG9yIGxhY2sgdGhlcmVvZiwgaW4gdGhlIGNhc2Ugb2YgdGhlICpub2xvY2sgdmVyc2lvbiopLCBhbmQgdGhlIGVycm9yIGhhbmRsaW5nLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFzc3VtcHRpb25zIGJlaW5nIG1hZGUgYWJvdXQgdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLCBhbmQgaG93IHRoZSBpbmxpbmUgZGF0YSdzIGludGVncml0eSBpcyBlbnN1cmVkLiBXaGF0IGFyZSB0aGUga2V5IGludmFyaWFudHMgbWFpbnRhaW5lZD8gSG93IGRvZXMgdGhpcyBjb2RlIHByb3RlY3QgdGhlIG1ldGFkYXRhIGNvbnNpc3RlbmN5PyBJdCdzIGFsbCBhYm91dCBlbnN1cmluZyB0aGUgcmlnaHQgbGV2ZWwgb2YgY29uY3VycmVuY3kgYW5kIGRhdGEgaW50ZWdyaXR5IGluIHRoaXMgaW1wb3J0YW50IGFyZWEgb2YgdGhlIGZpbGVzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjU3LjE2Mzc1MjAwMloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9pbmxpbmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTUwOlxcdFxcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9maW5kKGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmlzKTtcXG4xMTUxOlxcdFxcdGlmIChlcnJvcilcXG4xMTUyOlxcdFxcdFxcdGdvdG8gcmVjb3Zlcnk7XFxuMTE1MzpcXHRcXHRpZiAoIWlzLnMubm90X2ZvdW5kKVxcbjExNTQ6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmlzKTtcXG4xMTU1OlxcdHJlY292ZXJ5OlxcbjExNTY6XFx0XFx0aWYgKGVycm9yKSB7XFxuMTE1NzpcXHRcXHRcXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xcbjExNTg6XFx0XFx0XFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcXG4xMTU5OlxcdFxcdFxcdG1lbWNweShoZWFkZXIsIHhhdHRyX2J1ZiwgeGF0dHJfc2l6ZSk7XFxuMTE2MDpcXHRub19mcmVlOlxcbjExNjE6XFx0XFx0XFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcXG4xMTYyOlxcdFxcdFxcdG1lbWNweSgodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgaV9ibG9ja19idWYsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjExNjM6XFx0XFx0XFx0bWVtY3B5KGVpLVxcdTAwM2VpX2RhdGEsIHJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuMTE2NDpcXHRcXHRcXHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XFxuMTE2NTpcXHRcXHRcXHRnZXRfYmgoaXMuaWxvYy5iaCk7XFxuMTE2NjpcXHRcXHRcXHRleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuMTE2NzpcXHRcXHR9IGVsc2Uge1xcbjExNjg6XFx0XFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKTtcXG4xMTY5OlxcdFxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuMTE3MDpcXHRcXHRcXHRcXHRpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSk7XFxuMTE3MTpcXHRcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2Rpc2tzaXplID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbjExNzI6XFx0XFx0XFx0fVxcbjExNzM6XFx0XFx0XFx0Z2V0X2JoKGlzLmlsb2MuYmgpO1xcbjExNzQ6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuMTE3NTpcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2lubGluZV9vZmYgPSAwO1xcbjExNzY6XFx0XFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfc2l6ZSA9IDA7XFxuMTE3NzpcXHRcXHRcXHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XFxuMTE3ODpcXHRcXHRcXHRicmVsc2UoYmgpO1xcbjExNzk6XFx0XFx0fVxcbjExODA6XFx0XFx0Z290byBvdXQ7XFxuMTE4MTpcXHRlcnJvcjpcXG4xMTgyOlxcdFxcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7XFxuMTE4MzpcXHRcXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xcbjExODQ6XFx0XFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcXG4xMTg1OlxcdG91dDpcXG4xMTg2OlxcdFxcdGJyZWxzZShpcy5pbG9jLmJoKTtcXG4xMTg3OlxcdFxcdHVwX3dyaXRlKFxcdTAwMjZlaS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuMTE4ODpcXHRcXHRrZnJlZShpX2Jsb2NrX2J1Zik7XFxuMTE4OTpcXHRcXHRrZnJlZSh4YXR0cl9idWYpO1xcbjExOTA6XFx0XFx0cmV0dXJuIGVycm9yO1xcbjExOTE6XFx0fVxcbjExOTI6XFx0XFxuMTE5MzpcXHRzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcXG4xMTk0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuMTE5NTpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKVxcbjExOTY6XFx0e1xcbjExOTc6XFx0XFx0aW50IGVycm9yO1xcbjExOTg6XFx0XFx0dm9pZCAqYnVmID0gTlVMTDtcXG4xMTk5OlxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xcbjEyMDA6XFx0XFx0aW50IGlubGluZV9zaXplO1xcbjEyMDE6XFx0XFx0ZXh0NF9mc2Jsa190IG5ld2Jsb2NrID0gMDtcXG4xMjAyOlxcdFxcdHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcjtcXG4xMjAzOlxcdFxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbjEyMDQ6XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jaztcXG4xMjA1OlxcdFxcbjEyMDY6XFx0XFx0aW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7XFxuMTIwNzpcXHRcXHRidWYgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7XFxuMTIwODpcXHRcXHRpZiAoIWJ1Zikge1xcbjEyMDk6XFx0XFx0XFx0ZXJyb3IgPSAtRU5PTUVNO1xcbjEyMTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTIxMTpcXHRcXHR9XFxuMTIxMjpcXHRcXG4xMjEzOlxcdFxcdGVycm9yID0gZXh0NF9yZWFkX2lubGluZV9kYXRhKGlub2RlLCBidWYsIGlubGluZV9zaXplLCBpbG9jKTtcXG4xMjE0OlxcdFxcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuMTIxNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjE2OlxcdFxcbjEyMTc6XFx0XFx0LypcXG4xMjE4OlxcdFxcdCAqIE1ha2Ugc3VyZSB0aGUgaW5saW5lIGRpcmVjdG9yeSBlbnRyaWVzIHBhc3MgY2hlY2tzIGJlZm9yZSB3ZSB0cnkgdG9cXG4xMjE5OlxcdFxcdCAqIGNvbnZlcnQgdGhlbSwgc28gdGhhdCB3ZSBhdm9pZCB0b3VjaGluZyBzdHVmZiB0aGF0IG5lZWRzIGZzY2suXFxuMTIyMDpcXHRcXHQgKi9cXG4xMjIxOlxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuMTIyMjpcXHRcXHRcXHRlcnJvciA9IGV4dDRfY2hlY2tfYWxsX2RlKGlub2RlLCBpbG9jLVxcdTAwM2ViaCxcXG4xMjIzOlxcdFxcdFxcdFxcdFxcdFxcdGJ1ZiArIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxcbjEyMjQ6XFx0XFx0XFx0XFx0XFx0XFx0aW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7XFxuMTIyNTpcXHRcXHRcXHRpZiAoZXJyb3IpXFxuMTIyNjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjI3OlxcdFxcdH1cXG4xMjI4OlxcdFxcbjEyMjk6XFx0XFx0bWVtc2V0KFxcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSk7XFxuMTIzMDpcXHRcXHRhci5pbm9kZSA9IGlub2RlO1xcbjEyMzE6XFx0XFx0YXIubG9naWNhbCA9IDA7XFxuMTIzMjpcXHRcXHRhci5sZW4gPSAxO1xcbjEyMzM6XFx0XFx0aWYgKFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuMTIzNDpcXHRcXHRcXHRhci5mbGFncyA9IEVYVDRfTUJfSElOVF9EQVRBO1xcbjEyMzU6XFx0XFx0ZWxzZVxcbjEyMzY6XFx0XFx0XFx0YXIuZmxhZ3MgPSAwO1xcbjEyMzc6XFx0XFx0bmV3YmxvY2sgPSBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlLCBcXHUwMDI2YXIsIFxcdTAwMjZlcnJvcik7XFxuMTIzODpcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbjEyMzk6XFx0XFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjU3LjE2MzkxNTIzM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjg5NjI3MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmbG93LCBzbyBJJ2xsIGJyZWFrIGl0IGRvd24gcGllY2UgYnkgcGllY2UuIEZpcnN0LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGNvZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgY2FsbGVkIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgKndoeSogaXQncyBjYWxsZWQuIFdoYXQncyB0aGUgdHJpZ2dlcmluZyBldmVudD8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciB0cmFuc2FjdGlvbj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGJlIGltbWVkaWF0ZWx5IGF3YXJlIG9mLCBnaXZlbiB0aGUgXCJub2xvY2tcIiBkZXNpZ25hdGlvbj8gVGhhdCdzIHRoZSBwcmltYXJ5IHJlZCBmbGFnLCBzbyBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxvY2stZnJlZSBhc3BlY3RzLlxuXG5JJ2xsIG1lbnRhbGx5IG1hcCBvdXQgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgaW5vZGUsIHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9ycywgYW5kIHRoZSBleHRlbnQgdHJlZS4gSXMgaXQgbW92aW5nIGRhdGEsIGFsbG9jYXRpbmcgbmV3IGJsb2Nrcywgb3Igc2ltcGx5IHVwZGF0aW5nIG1ldGFkYXRhPyBJcyBpdCBhIGRlc3RydWN0aXZlIG9wZXJhdGlvbiAobGlrZSBhbiBpbi1wbGFjZSBjb252ZXJzaW9uKSwgb3IgZG9lcyBpdCBtYWludGFpbiB0aGUgb2xkIGRhdGEgKHBlcmhhcHMgZm9yIGEgcG90ZW50aWFsIHJvbGxiYWNrKT9cblxuSSBzaG91bGQgYWxzbyBhbnRpY2lwYXRlIGVycm9yIHBhdGhzLiBXaGF0IGFyZSB0aGUgY29tbW9uIGZhaWx1cmUgc2NlbmFyaW9zPyBBcmUgdGhlcmUgY2hlY2tzIGZvciByZXNvdXJjZSBleGhhdXN0aW9uIChkaXNrIGZ1bGwsIGV0Yy4pPyBXaGF0IGhhcHBlbnMgaWYgYSBjcml0aWNhbCBtZXRhZGF0YSB1cGRhdGUgZmFpbHMgbWlkLW9wZXJhdGlvbj8gQXJlIHRoZXJlIGFueSBhdG9taWNpdHkgZ3VhcmFudGVlcywgb3IgaXMgdGhlcmUgYSByaXNrIG9mIGluY29uc2lzdGVudCBzdGF0ZSBpZiB0aGUgZnVuY3Rpb24gaXMgaW50ZXJydXB0ZWQ/IEhvdyBhcmUgdGhlc2UgZmFpbHVyZXMgaGFuZGxlZD8gQXJlIHRoZXJlIHJldHJpZXM/IEZhbGxiYWNrcz8gUGFuaWMgc2l0dWF0aW9ucz9cblxuRmluYWxseSwgaG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgZXh0NCBjb2RlPyBBcmUgdGhlcmUgYW55IGFzc3VtcHRpb25zIG1hZGUgYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSBmaWxlc3lzdGVtIG9yIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0PyBBcmUgdGhlcmUgaW1wbGljaXQgY2FsbHMgdG8gb3RoZXIgZnVuY3Rpb25zIG9yIHN0cnVjdHVyZXM/IEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgSSdtIGF3YXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMsIHNvIHRoYXQgSSBjYW4gdW5kZXJzdGFuZCBhbnkgcG9zc2libGUgcmlwcGxlIGVmZmVjdHMuIEknbSBnb2luZyB0byBwYXkgYXR0ZW50aW9uIHRvIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBqb3VybmFsaW5nLiBIb3cgaXMgdGhpcyBvcGVyYXRpb24gbG9nZ2VkPyBJZiBpdCdzIGEgY3JpdGljYWwgY2hhbmdlLCBpcyBpdCBiZWluZyBqb3VybmFsZWQ/IElmIHNvLCB3aGF0IGlzIHdyaXR0ZW4gdG8gdGhlIGpvdXJuYWw/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjM0OjAwLjQ1MzU0NTY3M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9pbmxpbmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjQwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjQwOlxcdFxcdGFsbG9jYXRlZF9ibG9jayA9IEVYVDRfQzJCKHNiaSwgYXIubGVuKTtcXG4xMjQxOlxcdFxcdGJoID0gc2JfZ2V0YmxrKGlub2RlLVxcdTAwM2VpX3NiLCBuZXdibG9jayk7XFxuMTI0MjpcXHRcXHRpZiAoIWJoKSB7XFxuMTI0MzpcXHRcXHRcXHRlcnJvciA9IC1FTk9NRU07XFxuMTI0NDpcXHRcXHRcXHRnb3RvIG91dF9iaDtcXG4xMjQ1OlxcdFxcdH1cXG4xMjQ2OlxcdFxcbjEyNDc6XFx0XFx0bG9ja19idWZmZXIoYmgpO1xcbjEyNDg6XFx0XFx0ZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cXHUwMDNlaV9zYiwgYmgsXFxuMTI0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgRVhUNF9KVFJfTk9ORSk7XFxuMTI1MDpcXHRcXHRpZiAoZXJyb3IpIHtcXG4xMjUxOlxcdFxcdFxcdHVubG9ja19idWZmZXIoYmgpO1xcbjEyNTI6XFx0XFx0XFx0ZXJyb3IgPSAtRUlPO1xcbjEyNTM6XFx0XFx0XFx0Z290byBvdXRfYmg7XFxuMTI1NDpcXHRcXHR9XFxuMTI1NTpcXHRcXHRtZW1zZXQoYmgtXFx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplKTtcXG4xMjU2OlxcdFxcbjEyNTc6XFx0XFx0aWYgKCFTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuMTI1ODpcXHRcXHRcXHRtZW1jcHkoYmgtXFx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XFxuMTI1OTpcXHRcXHRcXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG4xMjYwOlxcdFxcdFxcdHVubG9ja19idWZmZXIoYmgpO1xcbjEyNjE6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsXFxuMTI2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBpbm9kZSwgYmgpO1xcbjEyNjM6XFx0XFx0fSBlbHNlIHtcXG4xMjY0OlxcdFxcdFxcdHVubG9ja19idWZmZXIoYmgpO1xcbjEyNjU6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsXFxuMTI2NjpcXHRcXHRcXHRcXHQgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLVxcdTAwM2Vpbm9kZSksXFxuMTI2NzpcXHRcXHRcXHRcXHQgIGJ1ZiArIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxcbjEyNjg6XFx0XFx0XFx0XFx0ICBpbmxpbmVfc2l6ZSAtIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFKTtcXG4xMjY5OlxcdFxcdH1cXG4xMjcwOlxcdG91dF9iaDpcXG4xMjcxOlxcdFxcdGlmIChlcnJvcikge1xcbjEyNzI6XFx0XFx0XFx0aWYgKGJoKVxcbjEyNzM6XFx0XFx0XFx0XFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIG5ld2Jsb2NrKTtcXG4xMjc0OlxcdFxcdFxcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcXG4xMjc1OlxcdFxcbjEyNzY6XFx0XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbjEyNzc6XFx0XFx0XFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcXG4xMjc4OlxcdFxcdFxcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgbmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgMCk7XFxuMTI3OTpcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbjEyODA6XFx0XFx0fSBlbHNlIHtcXG4xMjgxOlxcdFxcdFxcdGVycm9yID0gZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlLCBpbm9kZSxcXG4xMjgyOlxcdFxcdFxcdFxcdFxcdG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIGJoKTtcXG4xMjgzOlxcdFxcdH1cXG4xMjg0OlxcdG91dDpcXG4xMjg1OlxcdFxcdGtmcmVlKGJ1Zik7XFxuMTI4NjpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuMTI4NzpcXHR9XFxuMTI4ODpcXHRcXG4xMjg5OlxcdC8qXFxuMTI5MDpcXHQgKiBUcnkgdG8gYWRkIHRoZSBuZXcgZW50cnkgdG8gdGhlIGlubGluZSBkYXRhLlxcbjEyOTE6XFx0ICogSWYgc3VjY2VlZHMsIHJldHVybiAwLiBJZiBub3QsIGV4dGVuZGVkIHRoZSBpbmxpbmUgZGlyIGFuZCBjb3BpZWQgZGF0YSB0b1xcbjEyOTI6XFx0ICogdGhlIG5ldyBjcmVhdGVkIGJsb2NrLlxcbjEyOTM6XFx0ICovXFxuMTI5NDpcXHRpbnQgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjM0OjAwLjQ1MzcxNDA1M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODg3ODE1MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW5saW5lIERhdGEgQ29udmVyc2lvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCByZWFsbHkgdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgYWx3YXlzICp3aHkqIHdhcyB0aGlzIGNoYW5nZSBuZWNlc3Nhcnk/IEkgc2VlIHRoYXQgaXQncyBhbHRlcmluZyB0aGUgaW5saW5lIGRhdGEgY29udmVyc2lvbiBwcm9jZXNzLiBQcmV2aW91c2x5LCBpdCBsb29rcyBsaWtlIGBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrYCB3YXMgY2FsbGVkLCB0aGVuIGBleHQ0X21hcF9ibG9ja3NgLiBJZiBgZXh0NF9tYXBfYmxvY2tzYCBmYWlsZWQsIHRoZXknZCByb2xsIGJhY2sgd2l0aCBgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhYC4gTm93LCB0aGV5J3JlIGFsbG9jYXRpbmcgdGhlIG5ldyBibG9jayBkaXJlY3RseSB3aXRoIGBleHQ0X21iX25ld19ibG9ja3NgLCBwb3B1bGF0aW5nIGl0LCBhbmQgKnRoZW4qIGF0b21pY2FsbHkgcmVwbGFjaW5nIHRoZSBpbmxpbmUgZGF0YSB3aXRoIHRoZSBibG9jay9leHRlbnQgdXNpbmcgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYC4gVGhlIGFkdmFudGFnZSBpcywgcHJlc3VtYWJseSwgYmV0dGVyIHJvbGxiYWNrIGNhcGFiaWxpdGllcyBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgdGhlIGNvbnZlcnNpb24uXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIG1lbW9yeSBzYWZldHkuIEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgYXVkaXQgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIGxlYWtzIG9mIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdGhhdCBtaWdodCBiZSB1c2VkIGluIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgaW5zcGVjdCBldmVyeSB2YXJpYWJsZSBhbmQgYnVmZmVyIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuXG5cbkZpcnN0LCBsZXQncyBsb29rIGF0IGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYDogSSBzZWUgYSBgYnVmYCBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY2AsIHRoZSBpbmxpbmUgZGF0YSByZWFkIGludG8gaXQuIEdvb2QuIEl0J3MgZnJlZWQgb24gZXJyb3IuIGBhcmAgaXMgemVyb2VkIG91dCwgd2hpY2ggaXMgZ29vZCBwcmFjdGljZS4gYGFsbG9jYXRlZF9ibG9ja2AgaXMgY2FsY3VsYXRlZC4gVGhlbiwgYHNiX2dldGJsa2AgcmV0cmlldmVzIGEgYmxvY2ssIHdoaWNoIGlzIHRoZW4gKnplcm9lZCBvdXQqIGJlZm9yZSBhbnkgZGF0YSBpcyBjb3BpZWQgb3IgdGhlIGRpcmJsb2NrIGlzIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgdmVyeSBpbXBvcnRhbnQgc3RlcCBhbmQgYSBnb29kIHNpZ24gZm9yIG1lbW9yeSBzYWZldHkuIGBtZW1jcHlgIGNvcGllcyB0aGUgaW5saW5lIGRhdGEgaW50byB0aGUgYmxvY2suIE5vIG9idmlvdXMgaXNzdWVzIGhlcmUgc28gZmFyLlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYC4gSSBzZWUgYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgLCBhbmQgdGhlIGltcG9ydGFudCBwYXJ0IGlzIHRoYXQgYGlzLmlsb2NgICppcyogaW5pdGlhbGl6ZWQgYnkgYGV4dDRfZ2V0X2lub2RlX2xvY2AuIE9rYXksIHdlJ3JlIG5vdCB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0aGVyZS4gTmV4dCwgYHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaWAgbG9va3MgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIGBpX2Jsb2NrX2J1ZmAgaXMgYWxsb2NhdGVkLCBkYXRhIGlzIGNvcGllZCBpbnRvIGl0IGZyb20gYHJhd19pbm9kZS1cdTAwM2VpX2Jsb2NrYCwgdGhlbiB0aGUgaW5saW5lIGRhdGEgYXJlYSBpcyAqemVyb2VkKi4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gcHJldmVudCBzdGFsZSBkYXRhLiBUaGVuIGB4YXR0cl9idWZgIGlzIGFsbG9jYXRlZCBhbmQgY29waWVkIGZyb20uIEFnYWluLCBubyByZWQgZmxhZ3MuIEkgc2VlIGEgYHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleGAgYW5kIHRob3NlIGluaXRpYWxpemVkIGV4dGVudCBmaWVsZHMuIEJ1dCwgd2FpdCEgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGV4dDRfZXh0ZW50YC4gSSdsbCBzZWFyY2ggdGhlIGNvZGViYXNlIHRvIG1ha2Ugc3VyZSBJIGtub3cgYWxsIGl0cyBmaWVsZHMgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUgd2hhdCdzIGdvaW5nIG9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgZGF0YSBpcyBvcmdhbml6ZWQuIE9rYXksIEknbGwgZ28gdGhyb3VnaCBhbmQgY2hlY2sgdGhlIGBzdHJ1Y3QgZXh0NF9leHRlbnRgIGRlZmluaXRpb24gcmlnaHQgbm93Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzc0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzQ6MDYuMzQxNTMxNzI0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTcyNzA1NTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBleHQ0X2V4dGVudCBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDRfZXh0ZW50cy5oPTQ4PXN0cnVjdCBleHQ0X2V4dGVudF90YWlsIHtcXG4tLVxcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtNTUtICovXFxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaDo1NjpzdHJ1Y3QgZXh0NF9leHRlbnQge1xcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtNTctXFx0X19sZTMyXFx0ZWVfYmxvY2s7XFx0LyogZmlyc3QgbG9naWNhbCBibG9jayBleHRlbnQgY292ZXJzICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjM0OjA4LjUxNDI0Mjc5MloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTU0NjUzNjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgZXh0NCBFeHRlbnQgU3RydWN0dXJlKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZnVuZGFtZW50YWwgYGV4dDRfZXh0ZW50YCBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgZGlyZWN0bHkgYXQgdGhlIGhlYWRlciBmaWxlIOKAkyBgZnMvZXh0NC9leHQ0X2V4dGVudHMuaGAgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU2LCBhcyB0aGF0J3MgcHJvYmFibHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgYSBjbGVhciBwaWN0dXJlIGluIG15IGhlYWQgb2YgdGhlIGNvbnN0aXR1ZW50IGZpZWxkcyBhbmQgdGhlaXIgcHVycG9zZXMuIFdoYXQgaW5mb3JtYXRpb24gZG9lcyB0aGlzIHN0cnVjdHVyZSBob2xkPyBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUga2V5IGNvbXBvbmVudHMg4oCTIHRoZSBzdGFydGluZyBibG9jaywgdGhlIG51bWJlciBvZiBibG9ja3MsIG1heWJlIGEgbGVhZiBub2RlIHBvaW50ZXIgYW5kIHRoZSBsb2dpY2FsIGJsb2NrIHRoYXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgZGlzayBibG9jaywgYW5kIGlmIGl0J3MgdGhlIGxlYWYgbm9kZSwgYSBwb2ludGVyIHRvIHRoZSBkaXJlY3QvaW5kaXJlY3QvZG91YmxlLWluZGlyZWN0IGJsb2NrcywgYW5kIGFsbCByZWxhdGVkIG1ldGFkYXRhLiBVbmRlcnN0YW5kaW5nIHRoaXMgc3RydWN0dXJlIGlzIGNydWNpYWwgZm9yIGFueSBkZWVwZXIgd29yayB3aXRoIGV4dGVudHMsIGVzcGVjaWFsbHkgaWYgSSdtIHRyb3VibGVzaG9vdGluZyBvciBvcHRpbWl6aW5nIEkvTyBwZXJmb3JtYW5jZS4gSXQncyB0aGUgYnVpbGRpbmcgYmxvY2sgZm9yIGFsbCBleHRlbnQtYmFzZWQgYmxvY2sgYWxsb2NhdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NDcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozNDoxNS4wNjg4OTg3MjVaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9leHQ0X2V4dGVudHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHR9O1xcbiAgNTE6XFx0XFxuICA1MjpcXHQvKlxcbiAgNTM6XFx0ICogVGhpcyBpcyB0aGUgZXh0ZW50IG9uLWRpc2sgc3RydWN0dXJlLlxcbiAgNTQ6XFx0ICogSXQncyB1c2VkIGF0IHRoZSBib3R0b20gb2YgdGhlIHRyZWUuXFxuICA1NTpcXHQgKi9cXG4gIDU2OlxcdHN0cnVjdCBleHQ0X2V4dGVudCB7XFxuICA1NzpcXHRcXHRfX2xlMzJcXHRlZV9ibG9jaztcXHQvKiBmaXJzdCBsb2dpY2FsIGJsb2NrIGV4dGVudCBjb3ZlcnMgKi9cXG4gIDU4OlxcdFxcdF9fbGUxNlxcdGVlX2xlbjtcXHRcXHQvKiBudW1iZXIgb2YgYmxvY2tzIGNvdmVyZWQgYnkgZXh0ZW50ICovXFxuICA1OTpcXHRcXHRfX2xlMTZcXHRlZV9zdGFydF9oaTtcXHQvKiBoaWdoIDE2IGJpdHMgb2YgcGh5c2ljYWwgYmxvY2sgKi9cXG4gIDYwOlxcdFxcdF9fbGUzMlxcdGVlX3N0YXJ0X2xvO1xcdC8qIGxvdyAzMiBiaXRzIG9mIHBoeXNpY2FsIGJsb2NrICovXFxuICA2MTpcXHR9O1xcbiAgNjI6XFx0XFxuICA2MzpcXHQvKlxcbiAgNjQ6XFx0ICogVGhpcyBpcyBpbmRleCBvbi1kaXNrIHN0cnVjdHVyZS5cXG4gIDY1OlxcdCAqIEl0J3MgdXNlZCBhdCBhbGwgdGhlIGxldmVscyBleGNlcHQgdGhlIGJvdHRvbS5cXG4gIDY2OlxcdCAqL1xcbiAgNjc6XFx0c3RydWN0IGV4dDRfZXh0ZW50X2lkeCB7XFxuICA2ODpcXHRcXHRfX2xlMzJcXHRlaV9ibG9jaztcXHQvKiBpbmRleCBjb3ZlcnMgbG9naWNhbCBibG9ja3MgZnJvbSAnYmxvY2snICovXFxuICA2OTpcXHRcXHRfX2xlMzJcXHRlaV9sZWFmX2xvO1xcdC8qIHBvaW50ZXIgdG8gdGhlIHBoeXNpY2FsIGJsb2NrIG9mIHRoZSBuZXh0ICpcXG4gIDcwOlxcdFxcdFxcdFxcdFxcdCAqIGxldmVsLiBsZWFmIG9yIG5leHQgaW5kZXggY291bGQgYmUgdGhlcmUgKi9cXG4gIDcxOlxcdFxcdF9fbGUxNlxcdGVpX2xlYWZfaGk7XFx0LyogaGlnaCAxNiBiaXRzIG9mIHBoeXNpY2FsIGJsb2NrICovXFxuICA3MjpcXHRcXHRfX3UxNlxcdGVpX3VudXNlZDtcXG4gIDczOlxcdH07XFxuICA3NDpcXHRcXG4gIDc1OlxcdC8qXFxuICA3NjpcXHQgKiBFYWNoIGJsb2NrIChsZWF2ZXMgYW5kIGluZGV4ZXMpLCBldmVuIGlub2RlLXN0b3JlZCBoYXMgaGVhZGVyLlxcbiAgNzc6XFx0ICovXFxuICA3ODpcXHRzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyIHtcXG4gIDc5OlxcdFxcdF9fbGUxNlxcdGVoX21hZ2ljO1xcdC8qIHByb2JhYmx5IHdpbGwgc3VwcG9ydCBkaWZmZXJlbnQgZm9ybWF0cyAqL1xcbiAgODA6XFx0XFx0X19sZTE2XFx0ZWhfZW50cmllcztcXHQvKiBudW1iZXIgb2YgdmFsaWQgZW50cmllcyAqL1xcbiAgODE6XFx0XFx0X19sZTE2XFx0ZWhfbWF4O1xcdFxcdC8qIGNhcGFjaXR5IG9mIHN0b3JlIGluIGVudHJpZXMgKi9cXG4gIDgyOlxcdFxcdF9fbGUxNlxcdGVoX2RlcHRoO1xcdC8qIGhhcyB0cmVlIHJlYWwgdW5kZXJseWluZyBibG9ja3M/ICovXFxuICA4MzpcXHRcXHRfX2xlMzJcXHRlaF9nZW5lcmF0aW9uO1xcdC8qIGdlbmVyYXRpb24gb2YgdGhlIHRyZWUgKi9cXG4gIDg0OlxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjM0OjE1LjA2ODk3NDYxNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzU3OTk5MzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBleHQ0X2V4dF9zdG9yZV9wYmxvY2sqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgZXh0NF9leHRfc3RvcmVfcGJsb2NrKFx1MDAyNm5ld2V4LCBibG9jayk7YCBpcyBkb2luZy4gRmlyc3QsIEknbGwgcmVmcmVzaCBteSBtZW1vcnkgb2YgdGhlIGBleHQ0X2V4dGVudGAgc3RydWN0dXJlLiBSaWdodCwgYGVlX2Jsb2NrYCBpcyA0IGJ5dGVzLCBgZWVfbGVuYCBpcyAyIGJ5dGVzLCB0aGVuIGBlZV9zdGFydF9oaWAgaXMgMiBieXRlcyBhbmQgYGVlX3N0YXJ0X2xvYCBpcyA0IGJ5dGVzLCB0b3RhbGluZyAxMiBieXRlcyBmb3IgdGhlIGVudGlyZSBleHRlbnQgc3RydWN0dXJlLiBOb3csIEkgbmVlZCB0byBrbm93IHByZWNpc2VseSB3aGF0IGBleHQ0X2V4dF9zdG9yZV9wYmxvY2tgIGlzIHNldHRpbmcgd2l0aGluIHRoaXMgc3RydWN0dXJlLiBUaGF0J3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgaG93IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzI1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzQ6MTYuODI2OTc3NDRaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDQ3MDQ0MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9leHRfc3RvcmVfcGJsb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NF9leHRlbnRzLmg9MjMyPXN0YXRpYyBpbmxpbmUgZXh0NF9mc2Jsa190IGV4dDRfaWR4X3BibG9jayhzdHJ1Y3QgZXh0NF9leHRlbnRfaWR4ICppeClcXG4tLVxcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtMjQxLS8qXFxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaDoyNDI6ICogZXh0NF9leHRfc3RvcmVfcGJsb2NrOlxcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtMjQzLSAqIHN0b3JlcyBhIGxhcmdlIHBoeXNpY2FsIGJsb2NrIG51bWJlciBpbnRvIGFuIGV4dGVudCBzdHJ1Y3QsXFxuLS1cXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oLTI0NS0gKi9cXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oOjI0NjpzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9leHRfc3RvcmVfcGJsb2NrKHN0cnVjdCBleHQ0X2V4dGVudCAqZXgsXFxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaC0yNDctXFx0XFx0XFx0XFx0XFx0IGV4dDRfZnNibGtfdCBwYilcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM9MjIyPXN0YXRpYyBpbnQgZXh0ZW50c19rdW5pdF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzE0LVxcdEVYVF9GSVJTVF9FWFRFTlQoZWgpLVxcdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNihFWFRfREFUQV9MRU4pO1xcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM6MzE1OlxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhFWFRfRklSU1RfRVhURU5UKGVoKSwgRVhUX0RBVEFfUEJMSyk7XFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy0zMTYtXFx0aWYgKCFwYXJhbSB8fCBwYXJhbS1cXHUwMDNlaXNfdW53cml0X2F0X3N0YXJ0KVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9MTk5Mj1leHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy0yMDg1LVxcdFxcdFxcdGV4LVxcdTAwM2VlZV9ibG9jayA9IG5ld2V4dC1cXHUwMDNlZWVfYmxvY2s7XFxuZnMvZXh0NC9leHRlbnRzLmM6MjA4NjpcXHRcXHRcXHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIGV4dDRfZXh0X3BibG9jayhuZXdleHQpKTtcXG5mcy9leHQ0L2V4dGVudHMuYy0yMDg3LVxcdFxcdFxcdGV4LVxcdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNihleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleClcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTIxOTYtXFx0bmVhcmV4LVxcdTAwM2VlZV9ibG9jayA9IG5ld2V4dC1cXHUwMDNlZWVfYmxvY2s7XFxuZnMvZXh0NC9leHRlbnRzLmM6MjE5NzpcXHRleHQ0X2V4dF9zdG9yZV9wYmxvY2sobmVhcmV4LCBleHQ0X2V4dF9wYmxvY2sobmV3ZXh0KSk7XFxuZnMvZXh0NC9leHRlbnRzLmMtMjE5OC1cXHRuZWFyZXgtXFx1MDAzZWVlX2xlbiA9IG5ld2V4dC1cXHUwMDNlZWVfbGVuO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9MjYxND1leHQ0X2V4dF9ybV9sZWFmKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy0yNzM5LVxcdFxcdFxcdC8qIHRoaXMgZXh0ZW50IGlzIHJlbW92ZWQ7IG1hcmsgc2xvdCBlbnRpcmVseSB1bnVzZWQgKi9cXG5mcy9leHQ0L2V4dGVudHMuYzoyNzQwOlxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtMjc0MS1cXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTMxOTE9c3RhdGljIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpleHQ0X3NwbGl0X2V4dGVudF9hdChoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzI0Ni1cXHRleDItXFx1MDAzZWVlX2xlbiAgID0gY3B1X3RvX2xlMTYoZWVfbGVuIC0gKHNwbGl0IC0gZWVfYmxvY2spKTtcXG5mcy9leHQ0L2V4dGVudHMuYzozMjQ3OlxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleDIsIG5ld2Jsb2NrKTtcXG5mcy9leHQ0L2V4dGVudHMuYy0zMjQ4LVxcdGlmIChpc191bndyaXQpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz0zNTU3PWV4dDRfZXh0X2NvbnZlcnRfdG9faW5pdGlhbGl6ZWQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTM2NDUtXFx0XFx0XFx0ZXgtXFx1MDAzZWVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoZWVfYmxvY2sgKyBtYXBfbGVuKTtcXG5mcy9leHQ0L2V4dGVudHMuYzozNjQ2OlxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgZWVfcGJsayArIG1hcF9sZW4pO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTM2NDctXFx0XFx0XFx0ZXgtXFx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGVlX2xlbiAtIG1hcF9sZW4pO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzY5MS1cXHRcXHRcXHRhYnV0X2V4LVxcdTAwM2VlZV9ibG9jayA9IGNwdV90b19sZTMyKG5leHRfbGJsayAtIG1hcF9sZW4pO1xcbmZzL2V4dDQvZXh0ZW50cy5jOjM2OTI6XFx0XFx0XFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGFidXRfZXgsIG5leHRfcGJsayAtIG1hcF9sZW4pO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTM2OTMtXFx0XFx0XFx0ZXgtXFx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGVlX2xlbiAtIG1hcF9sZW4pO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzc0NS1cXHRcXHRcXHRcXHRjcHVfdG9fbGUxNigqYWxsb2NhdGVkIC0gc3BsaXRfbWFwLm1fbGVuKTtcXG5mcy9leHQ0L2V4dGVudHMuYzozNzQ2OlxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2emVyb19leDEsXFxuZnMvZXh0NC9leHRlbnRzLmMtMzc0Ny1cXHRcXHRcXHRcXHRleHQ0X2V4dF9wYmxvY2soZXgpICsgc3BsaXRfbWFwLm1fbGJsayArXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy0zNzYwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdGVlX2Jsb2NrKTtcXG5mcy9leHQ0L2V4dGVudHMuYzozNzYxOlxcdFxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2emVyb19leDIsXFxuZnMvZXh0NC9leHRlbnRzLmMtMzc2Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBleHQ0X2V4dF9wYmxvY2soZXgpKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQyNjk9aW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ0NzMtXFx0cGJsayA9IG5ld2Jsb2NrICsgb2Zmc2V0O1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQ0NzQ6XFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKFxcdTAwMjZuZXdleCwgcGJsayk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNDQ3NS1cXHRuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNihhci5sZW4pO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NTc2NT1leHQ0X3N3YXBfZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTU4OTktXFx0XFx0dG1wX2V4ID0gKmV4MTtcXG5mcy9leHQ0L2V4dGVudHMuYzo1OTAwOlxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleDEsIGV4dDRfZXh0X3BibG9jayhleDIpKTtcXG5mcy9leHQ0L2V4dGVudHMuYzo1OTAxOlxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleDIsIGV4dDRfZXh0X3BibG9jayhcXHUwMDI2dG1wX2V4KSk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNTkwMi1cXHRcXHRleDEtXFx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGUyX2xlbik7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz02MDI5PWludCBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNjA4Mi1cXHRcXHRleHQ0X2V4dF9tYXJrX2luaXRpYWxpemVkKGV4KTtcXG5mcy9leHQ0L2V4dGVudHMuYzo2MDgzOlxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgcGJsayk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNjA4NC1cXHRkb3duX3dyaXRlKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz05MzE9c3RhdGljIGludCBleHQ0X2ZjX3dyaXRlX2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgdTMyICpjcmMpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtOTYxLVxcdFxcdGV4LVxcdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNihyYW5nZS1cXHUwMDNlbGVuKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6OTYyOlxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgcmFuZ2UtXFx1MDAzZXBibGspO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy05NjMtXFx0XFx0aWYgKHJhbmdlLVxcdTAwM2V1bndyaXR0ZW4pXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjE0OD1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1OCAqdmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyMDItXFx0XFx0XFx0bmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMihjdXIpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjAzOlxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjIwNC1cXHRcXHRcXHRcXHRcXHUwMDI2bmV3ZXgsIHN0YXJ0X3BibGsgKyBjdXIgLSBzdGFydCk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEwNzQ9c3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTExMzUtXFx0XFx0bmV3ZXguZWVfbGVuID0gY3B1X3RvX2xlMTYoMSk7XFxuZnMvZXh0NC9pbmxpbmUuYzoxMTM2OlxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2bmV3ZXgsIGJsb2NrKTtcXG5mcy9leHQ0L2lubGluZS5jLTExMzctXFx0XFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXFx1MDAyNm5ld2V4LCAwKTtcXG4tLVxcbmZzL2V4dDQvbWlncmF0ZS5jPTIxPXN0YXRpYyBpbnQgZmluaXNoX3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L21pZ3JhdGUuYy0zMy1cXHRuZXdleHQuZWVfbGVuICAgPSBjcHVfdG9fbGUxNihsYi1cXHUwMDNlbGFzdF9ibG9jayAtIGxiLVxcdTAwM2VmaXJzdF9ibG9jayArIDEpO1xcbmZzL2V4dDQvbWlncmF0ZS5jOjM0OlxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2bmV3ZXh0LCBsYi1cXHUwMDNlZmlyc3RfcGJsb2NrKTtcXG5mcy9leHQ0L21pZ3JhdGUuYy0zNS1cXHQvKiBMb2NraW5nIG9ubHkgZm9yIGNvbnZlbmllbmNlIHNpbmNlIHdlIGFyZSBvcGVyYXRpbmcgb24gdGVtcCBpbm9kZSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozNDoxOC4zNzE2ODYzMjVaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc3MjIzNjE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzcyBhcyBJIGRlbHZlIGludG8gdGhlIGBleHQ0X2V4dF9zdG9yZV9wYmxvY2tgIGltcGxlbWVudGF0aW9uOlxuXG4qKkRpdmluZyBpbnRvIGBleHQ0X2V4dF9zdG9yZV9wYmxvY2tgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGV4dDRfZXh0X3N0b3JlX3BibG9ja2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBwdXJwb3NlLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IGl0J3MgcmVsYXRlZCB0byBzdG9yaW5nIHBoeXNpY2FsIGJsb2NrIGFkZHJlc3NlcyB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSdzIGV4dGVudCBzdHJ1Y3R1cmUsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjbHVlcy4gSeKAmW0gdGhpbmtpbmcsIGlzIHRoaXMgYSB3cml0ZSBwYXRoIGZ1bmN0aW9uPyBJcyBpdCBiZWluZyBjYWxsZWQgZHVyaW5nIGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uPyBNeSBleHBlcmllbmNlIHNheXMgaXQgcHJvYmFibHkgZGVhbHMgd2l0aCBtYXBwaW5nIGxvZ2ljYWwgYmxvY2tzICh3aGF0IHRoZSB1c2VyIHNlZXMpIHRvIHBoeXNpY2FsIGJsb2NrcyAod2hlcmUgZGF0YSBpcyBhY3R1YWxseSBzdG9yZWQgb24gdGhlIGRpc2spLiBUaGUgbmFtZSwgJ3N0b3JlX3BibG9jaycsIHNjcmVhbXMgdGhhdCBhdCBtZSwgb2YgY291cnNlLCBidXQgSSB3YW50IHRvIHNlZSB0aGUgY29udGV4dC5cblxuSSdsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgc2NlbmFyaW9zOiBob3cgaXQgZGVhbHMgd2l0aCBleGlzdGluZyBleHRlbnRzLCBuZXcgZXh0ZW50cywgYW5kIHBvc3NpYmx5LCB3aGF0IGlmIHRoZSBleHRlbnQgaGFzIHRvIGJlIHNwbGl0LiBJJ2xsIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcsIGVzcGVjaWFsbHkgd2hhdCBoYXBwZW5zIGlmIGFsbG9jYXRpb24gZmFpbHMgb3IgdGhlIGZpbGVzeXN0ZW0gbWV0YWRhdGEgYmVjb21lcyBjb3JydXB0ZWQuIEkga25vdyB0aGF0IGV4dDQgaXMgZ2VuZXJhbGx5IHJvYnVzdCwgYnV0IEkgbmVlZCB0byBpZGVudGlmeSBwb3NzaWJsZSB3ZWFrIHBvaW50cy4gSSBhbHNvIG5lZWQgdG8gYXNzZXNzIHRoZSBmdW5jdGlvbidzIGludGVyYWN0aW9ucyB3aXRoIHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9ycywgaW5vZGUgbWV0YWRhdGEsIGFuZCB0aGUgZXh0ZW50IHRyZWUgc3RydWN0dXJlLiBUaGlzIGlzIGFsbCBhYm91dCB0aGUgZGV0YWlscyBvZiBob3cgZXh0NCBtYW5hZ2VzIGl0cyBzcGFjZSEgVGhlIGVmZmljaWVuY3kgb2YgdGhlIGFsbG9jYXRpb24gd2lsbCBiZSBzb21ldGhpbmcgdG8ga2VlcCBteSBleWUgb3V0IGZvciBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAzMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjM0OjIyLjE0MzkyOTA5NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2V4dDRfZXh0ZW50cy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MCxcbiAgXCJMaW5lQ291bnRcIjogMThcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0MDpcXHRcXG4gMjQxOlxcdC8qXFxuIDI0MjpcXHQgKiBleHQ0X2V4dF9zdG9yZV9wYmxvY2s6XFxuIDI0MzpcXHQgKiBzdG9yZXMgYSBsYXJnZSBwaHlzaWNhbCBibG9jayBudW1iZXIgaW50byBhbiBleHRlbnQgc3RydWN0LFxcbiAyNDQ6XFx0ICogYnJlYWtpbmcgaXQgaW50byBwYXJ0c1xcbiAyNDU6XFx0ICovXFxuIDI0NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9leHRfc3RvcmVfcGJsb2NrKHN0cnVjdCBleHQ0X2V4dGVudCAqZXgsXFxuIDI0NzpcXHRcXHRcXHRcXHRcXHRcXHQgZXh0NF9mc2Jsa190IHBiKVxcbiAyNDg6XFx0e1xcbiAyNDk6XFx0XFx0ZXgtXFx1MDAzZWVlX3N0YXJ0X2xvID0gY3B1X3RvX2xlMzIoKHVuc2lnbmVkIGxvbmcpIChwYiBcXHUwMDI2IDB4ZmZmZmZmZmYpKTtcXG4gMjUwOlxcdFxcdGV4LVxcdTAwM2VlZV9zdGFydF9oaSA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBsb25nKSAoKHBiIFxcdTAwM2VcXHUwMDNlIDMxKSBcXHUwMDNlXFx1MDAzZSAxKSBcXHUwMDI2XFxuIDI1MTpcXHRcXHRcXHRcXHRcXHQgICAgICAweGZmZmYpO1xcbiAyNTI6XFx0fVxcbiAyNTM6XFx0XFxuIDI1NDpcXHQvKlxcbiAyNTU6XFx0ICogZXh0NF9pZHhfc3RvcmVfcGJsb2NrOlxcbiAyNTY6XFx0ICogc3RvcmVzIGEgbGFyZ2UgcGh5c2ljYWwgYmxvY2sgbnVtYmVyIGludG8gYW4gaW5kZXggc3RydWN0LFxcbiAyNTc6XFx0ICogYnJlYWtpbmcgaXQgaW50byBwYXJ0c1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozNDoyMi4xNDQwMTIzNzVaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQyNzAwMjkzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEV4dGVudCBTdHJ1Y3R1cmUgYW5kIFByZXBhcmluZyBmb3IgRnVydGhlciBFeGFtaW5hdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG5ld2V4YCBzdHJ1Y3R1cmUgYW5kIG5vdGluZyBob3cgaXRzIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gg4oCTIGBlZV9ibG9ja2AsIGBlZV9sZW5gLCBgZWVfc3RhcnRfbG9gLCBhbmQgYGVlX3N0YXJ0X2hpYCBhcmUgYWxsIGV4cGxpY2l0bHkgYXNzaWduZWQuIGBlZV9ibG9ja2AgYW5kIGBlZV9sZW5gIGFyZSBnZXR0aW5nIGJ5dGUtb3JkZXIgY29udmVydGVkLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIGBleHQ0X2V4dF9zdG9yZV9wYmxvY2tgIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIGBlZV9zdGFydF9sb2AgYW5kIGBlZV9zdGFydF9oaWAsIHdoaWNoIGlzIHdoZXJlIHRoZSBibG9jayBtYXBwaW5nIG1hZ2ljIHByb2JhYmx5IGhhcHBlbnMuXG5cblRoZSBzdHJ1Y3R1cmUgaXRzZWxmLCBgc3RydWN0IGV4dDRfZXh0ZW50YCwgbG9va3MgY2xlYW4g4oCTIG5vIHN1cnByaXNlcyB3aXRoIHRoZSBmaWVsZCBzaXplcyBhbmQgYWxpZ25tZW50LiA0IGJ5dGVzIGZvciBgZWVfYmxvY2tgLCAyIGZvciBgZWVfbGVuYCwgYW5vdGhlciAyIGZvciBgZWVfc3RhcnRfbG9gLCBhbmQgdGhlbiA0IG1vcmUgZm9yIGBlZV9zdGFydF9oaWAuIFRoYXQgc3VtcyB1cCB0byAxMiBieXRlcyB0b3RhbCwgd2hpY2ggZml0cyBuYXR1cmFsbHkgd2l0aCB0aG9zZSBgbGUzMmAgYW5kIGBsZTE2YCB0eXBlcywgc28gYWxpZ25tZW50IHNob3VsZCBiZSBva2F5LiBObyBwYWRkaW5nIHRoYXQgSSBjYW4gc2VlLCB3aGljaCBpcyBnb29kLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzdHJ1Y3R1cmUgaXMgYWN0dWFsbHkgKmRvaW5nKiB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0LiBJIG5lZWQgdG8gcGl2b3QgYW5kIHNlZSBob3cgaXQgZml0cyBpbiwgYW5kIGhvdyBpdHMgZGF0YSBhcmUgdXNlZCBpbiBwcmFjdGljZSwgYW5kIEknbSBnb2luZyB0byB0dXJuIG15IGF0dGVudGlvbiB0byBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZGAgbm93IHRvIHN0YXJ0IHB1dHRpbmcgdGhlIHBpZWNlcyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MTYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozNDoyNS41NzEwMTc3OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5OTE0MTE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuaD0xMjE9c3RydWN0IGV4dDRfeGF0dHJfc2VhcmNoIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuaC0xMjgtXFxuZnMvZXh0NC94YXR0ci5oOjEyOTpzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIHtcXG5mcy9leHQ0L3hhdHRyLmgtMTMwLVxcdHN0cnVjdCBleHQ0X3hhdHRyX3NlYXJjaCBzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozNDoyNy42NzAxNjQ3ODFaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxMDI1MjU5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8geGF0dHIuaCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBmcy9leHQ0L3hhdHRyLmhgIGhlYWRlciBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIGFyb3VuZCBsaW5lIDEyMC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyBpbiB0aGlzIGFyZWEuIFByb2JhYmx5IGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgc3RydWN0dXJlIG9yIG1hY3JvLCBtYXliZSByZWxhdGVkIHRvIGhvdyBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cnMpIGFyZSBzdG9yZWQgb3IgYWNjZXNzZWQgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEknbSBnb2luZyB0byBzY2FuIHRoYXQgc2VjdGlvbiBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byB0aGUgb24tZGlzayBmb3JtYXQgb3IgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRob3NlIGF0dHJpYnV0ZXMuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJlc3RpbmcgZGV0YWlscyBhcm91bmQgdGhlIGFsbG9jYXRpb24gb3IgaW5kZXhpbmcgb2YgdGhlIGRhdGEuIEknbSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCB0aGUgcmVsZXZhbnQgY29udGV4dC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpZiB0aGVyZSdzIGFueSBoaW50IG9mIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgcG90ZW50aWFsIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBvciBhbnkga25vd24gbGltaXRhdGlvbnMgaW4gdGhpcyBhcmVhLiBJdCdzIHRpbWUgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24gYmVoaW5kIHRoZSBzY2VuZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzM4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzQ6MjkuOTgwNDIwNjEzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQveGF0dHIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTU6XFx0XFx0Y29uc3Qgdm9pZCAqdmFsdWU7XFxuIDExNjpcXHRcXHRzaXplX3QgdmFsdWVfbGVuO1xcbiAxMTc6XFx0XFx0aW50IG5hbWVfaW5kZXg7XFxuIDExODpcXHRcXHRpbnQgaW5faW5vZGU7XFxuIDExOTpcXHR9O1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRzdHJ1Y3QgZXh0NF94YXR0cl9zZWFyY2gge1xcbiAxMjI6XFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmZpcnN0O1xcbiAxMjM6XFx0XFx0dm9pZCAqYmFzZTtcXG4gMTI0OlxcdFxcdHZvaWQgKmVuZDtcXG4gMTI1OlxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICpoZXJlO1xcbiAxMjY6XFx0XFx0aW50IG5vdF9mb3VuZDtcXG4gMTI3OlxcdH07XFxuIDEyODpcXHRcXG4gMTI5OlxcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQge1xcbiAxMzA6XFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfc2VhcmNoIHM7XFxuIDEzMTpcXHRcXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XFxuIDEzMjpcXHR9O1xcbiAxMzM6XFx0XFxuIDEzNDpcXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSB7XFxuIDEzNTpcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuIDEzNjpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7XFxuIDEzNzpcXHR9O1xcbiAxMzg6XFx0XFxuIDEzOTpcXHRleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7XFxuIDE0MDpcXHRleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7XFxuIDE0MTpcXHRleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyO1xcbiAxNDI6XFx0ZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfaHVyZF9oYW5kbGVyO1xcbiAxNDM6XFx0XFxuIDE0NDpcXHQjZGVmaW5lIEVYVDRfWEFUVFJfTkFNRV9FTkNSWVBUSU9OX0NPTlRFWFQgXFxcImNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjM0OjI5Ljk4MDQ5MDQ5M1oiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzQ2NTUwMjExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBbmFseXNpcyBvZiBFeHQ0IElubGluZSBEYXRhIENvbnZlcnNpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbm90aW5nIHRoZSBkZXNpZ25hdGVkIGluaXRpYWxpemVycyB1c2VkIGZvciBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AgYW5kIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgLiBUaGlzIGlzIGdvb2Q7IGl0IGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgZmllbGRzIHdpdGhpbiB0aGVzZSBzdHJ1Y3RzIGFuZCB0aGVpciBuZXN0ZWQgc3RydWN0dXJlcy4gU3BlY2lmaWNhbGx5LCB0aGlzIG1lYW5zIGFsbCB0aGUgZmllbGRzIG9mIGBpc2AgYW5kIGBpYCBhcmUgY2xlYXJlZCwgYW5kIGBpcy5pbG9jYCBpcyBpbml0aWFsaXplZCBsYXRlciBieSBgZXh0NF9nZXRfaW5vZGVfbG9jYC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHByZXZlbnRpbmcgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5OZXh0LCBJJ20gdmVyaWZ5aW5nIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBjb3B5aW5nIG9wZXJhdGlvbnMuIEkgc2VlIHRocmVlIGBrbWFsbG9jYCBjYWxsczogb25lIGZvciBgaV9ibG9ja19idWZgLCB3aGljaCBpcyBqdXN0IHVzZWQgZm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nIGByYXdfaW5vZGUtXHUwMDNlaV9ibG9ja2A7IGFub3RoZXIgZm9yIGB4YXR0cl9idWZgLCB1c2VkIHNpbWlsYXJseSB0byBzYXZlL3Jlc3RvcmUgeGF0dHJzOyBhbmQgdGhlIGJsb2NrIGJ1ZmZlciBgYmgtXHUwMDNlYl9kYXRhYCwgd2hpY2ggZ2V0cyB6ZXJvZWQgd2l0aCBgbWVtc2V0YCBiZWZvcmUgYW55dGhpbmcgZWxzZSBpcyB3cml0dGVuIHRvIGl0LiBUaGUgYmxvY2sgYnVmZmVyIGlzIGxhdGVyIHBvcHVsYXRlZCBieSBhIGBtZW1jcHlgIG9yIGBleHQ0X2luaXRfZGlyYmxvY2tgLiBUaGVzZSBhbGxvY2F0aW9uIGFuZCBjb3B5aW5nIG9wZXJhdGlvbnMsIGluIHRoaXMgY29udGV4dCwgbG9vayBwcmV0dHkgc2FmZS5cblxuVGhlbiwgSSdtIGNoZWNraW5nIGZvciBwb3RlbnRpYWwgZGF0YSBleHBvc3VyZSB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgcmVhZHMsIGFuZCBhbnkgYm91bmRzIGlzc3Vlcy4gVGhpcyBjb2RlIGlzbid0IGRpcmVjdGx5IGNvcHlpbmcgYW55dGhpbmcgdG8gdXNlciBzcGFjZS4gSXQgZGVhbHMgd2l0aCBpbnRlcm5hbCBibG9jayBhbGxvY2F0aW9uIGFuZCBjb252ZXJ0aW5nIGlubGluZSBkYXRhIGludG8gcmVndWxhciBibG9jay9leHRlbnQgZGF0YTsgc28gdGhlIGNoYW5jZSBmb3IgYW4gaW5mb3JtYXRpb24gbGVhayBpcyBhbG1vc3QgbmlsLiBJIHNlZSBubyBldmlkZW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBlaXRoZXIuIFRoZSBibG9jayBidWZmZXIgYW5kIGFsbG9jYXRlZCBtZW1vcnkgYXJlIGV4cGxpY2l0bHkgemVyb2VkLiBMZW5ndGhzIGFuZCBib3VuZHMgYXJlIGFsc28gbm90IG1vZGlmaWVkIGluIGEgd2F5IHRoYXQgcmlza3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBieXRlcy5cblxuTm93LCBJJ20gcnVubmluZyB0aHJvdWdoIHRoZSBOZWVkc0tNU0FOIGd1aWRlbGluZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Uga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIGl0IGRvZXNuJ3QgaW52b2x2ZSBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBub3IgZG9lcyBpdCBpbml0aWFsaXplIGNvbXBsaWNhdGVkIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlcmUgYXJlIG5vIGJvdW5kcyBjaGVja3Mgb3IgbWFuaXB1bGF0aW9ucyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuXG5cblRoZSBndWlkZWxpbmVzIHNheSB0byBzZXQgTmVlZHNLTVNBTiB0byBmYWxzZSBpZiBhbGwgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkLCBhbmQgdGhhdCdzIHByZWNpc2VseSB3aGF0J3MgaGFwcGVuaW5nIGhlcmUgd2l0aCBgPXswfWAsIGBtZW1zZXRgLCBhbmQgYGt6YWxsb2NgLiBObyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBhcmUgcHJlc2VudC4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIHJlZmFjdG9yaW5nIHRoZSBpbmxpbmUgZGF0YSBjb252ZXJzaW9uLCBhbmQgYWxsIGFsbG9jYXRlZCBoZWFwIGFuZCBzdGFjayB2YXJpYWJsZXMgYXJlIGZ1bGx5IGFuZCBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNhZ2UuIFRoZSBibG9jayBidWZmZXIgaXMgZXhwbGljaXRseSB6ZXJvZWQuXG5cblNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhci4gVGhlcmUncyBubyBLTVNBTiBjb25jZXJuLiBOZWVkc0tNU0FOIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4gVGltZSB0byBwcmVwYXJlIHRoZSByZWFzb25pbmcgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNDgsIk91dHB1dFRva2VucyI6MzA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzQ6NDMuNDQ1OTk1NjQ0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGV4dDQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYyBpbiBgZnMvZXh0NC9pbmxpbmUuY2AgYnkgaW50cm9kdWNpbmcgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYCBhbmQgYWxsb2NhdGluZyB0aGUgZGVzdGluYXRpb24gYmxvY2sgcHJpb3IgdG8gY2xlYXJpbmcgaW5saW5lIGRhdGEgaW4gdGhlIGlub2RlLlxcblxcblJldmlld2luZyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYWNyb3NzIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6XFxuMS4gQWxsIGxvY2FsIHN0YWNrIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzYCwgYHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaWAsIGBzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXJgLCBhbmQgYHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleGApIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIGBtZW1zZXRgLCBvciBleHBsaWNpdCBtZW1iZXIgYXNzaWdubWVudHMgYmVmb3JlIHVzZS5cXG4yLiBIZWFwIGJ1ZmZlcnMgYWxsb2NhdGVkIHZpYSBga21hbGxvY2AgKGBpX2Jsb2NrX2J1ZmAsIGB4YXR0cl9idWZgLCBgYnVmYCkgYXJlIGltbWVkaWF0ZWx5IHBvcHVsYXRlZCB2aWEgYG1lbWNweWAgb3IgYGV4dDRfcmVhZF9pbmxpbmVfZGF0YWAuXFxuMy4gVGhlIGJsb2NrIGJ1ZmZlciBkYXRhIChgYmgtXFx1MDAzZWJfZGF0YWApIGlzIGV4cGxpY2l0bHkgY2xlYXJlZCB1c2luZyBgbWVtc2V0YCBiZWZvcmUgd3JpdGluZyBpbmxpbmUgZGF0YSBvciBkaXJlY3RvcnkgZW50cmllcy5cXG40LiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGJyYW5jaGluZy9sb2dpYyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIGVycm9yIHJlY292ZXJ5IGhhbmRsaW5nLCBsb2NraW5nLCBvciBleHRlbnQgbWFuaXB1bGF0aW9uKSBmYWxsIHVuZGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMgaW4gYGZzL2V4dDQvaW5saW5lLmNgIGJ5IGludHJvZHVjaW5nIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgYW5kIGFsbG9jYXRpbmcgdGhlIGRlc3RpbmF0aW9uIGJsb2NrIHByaW9yIHRvIGNsZWFyaW5nIGlubGluZSBkYXRhIGluIHRoZSBpbm9kZS5cXG5cXG5SZXZpZXdpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFjcm9zcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zOlxcbjEuIEFsbCBsb2NhbCBzdGFjayBzdHJ1Y3R1cmVzIChgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AsIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgLCBgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyYCwgYW5kIGBzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXhgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBgbWVtc2V0YCwgb3IgZXhwbGljaXQgbWVtYmVyIGFzc2lnbm1lbnRzIGJlZm9yZSB1c2UuXFxuMi4gSGVhcCBidWZmZXJzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2NgIChgaV9ibG9ja19idWZgLCBgeGF0dHJfYnVmYCwgYGJ1ZmApIGFyZSBpbW1lZGlhdGVseSBwb3B1bGF0ZWQgdmlhIGBtZW1jcHlgIG9yIGBleHQ0X3JlYWRfaW5saW5lX2RhdGFgLlxcbjMuIFRoZSBibG9jayBidWZmZXIgZGF0YSAoYGJoLVxcdTAwM2ViX2RhdGFgKSBpcyBleHBsaWNpdGx5IGNsZWFyZWQgdXNpbmcgYG1lbXNldGAgYmVmb3JlIHdyaXRpbmcgaW5saW5lIGRhdGEgb3IgZGlyZWN0b3J5IGVudHJpZXMuXFxuNC4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBicmFuY2hpbmcvbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBlcnJvciByZWNvdmVyeSBoYW5kbGluZywgbG9ja2luZywgb3IgZXh0ZW50IG1hbmlwdWxhdGlvbikgZmFsbCB1bmRlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7p2j[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 10:19:36 +0000 UTC FinishedAt: 2026-09-05 10:34:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "41e6f03658adfa9df68642750b53a046f1abdea9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "41e6f03658adfa9df68642750b53a046f1abdea9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "67ae394f-0af5-4960-a6b4-a3d39b5f36a5" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_set_inline_data_block", "ext4_convert_inline_data_nolock", "ext4_convert_inline_data", "ext4_try_add_inline_entry" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayYjMzQ7LAogICAgJiMzNDtleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrJiMzNDssCiAgICAmIzM0O2V4dDRfY29udmVydF9pbmxpbmVfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMgaW4gYGZzL2V4dDQvaW5saW5lLmNgIGJ5IGludHJvZHVjaW5nIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgYW5kIGFsbG9jYXRpbmcgdGhlIGRlc3RpbmF0aW9uIGJsb2NrIHByaW9yIHRvIGNsZWFyaW5nIGlubGluZSBkYXRhIGluIHRoZSBpbm9kZS5cblxuUmV2aWV3aW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhY3Jvc3MgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczpcbjEuIEFsbCBsb2NhbCBzdGFjayBzdHJ1Y3R1cmVzIChgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AsIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgLCBgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyYCwgYW5kIGBzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXhgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBgbWVtc2V0YCwgb3IgZXhwbGljaXQgbWVtYmVyIGFzc2lnbm1lbnRzIGJlZm9yZSB1c2UuXG4yLiBIZWFwIGJ1ZmZlcnMgYWxsb2NhdGVkIHZpYSBga21hbGxvY2AgKGBpX2Jsb2NrX2J1ZmAsIGB4YXR0cl9idWZgLCBgYnVmYCkgYXJlIGltbWVkaWF0ZWx5IHBvcHVsYXRlZCB2aWEgYG1lbWNweWAgb3IgYGV4dDRfcmVhZF9pbmxpbmVfZGF0YWAuXG4zLiBUaGUgYmxvY2sgYnVmZmVyIGRhdGEgKGBiaC1cdTAwM2ViX2RhdGFgKSBpcyBleHBsaWNpdGx5IGNsZWFyZWQgdXNpbmcgYG1lbXNldGAgYmVmb3JlIHdyaXRpbmcgaW5saW5lIGRhdGEgb3IgZGlyZWN0b3J5IGVudHJpZXMuXG40LiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGJyYW5jaGluZy9sb2dpYyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBlcnJvciByZWNvdmVyeSBoYW5kbGluZywgbG9ja2luZywgb3IgZXh0ZW50IG1hbmlwdWxhdGlvbikgZmFsbCB1bmRlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIG1lY2hhbmlzbSBpbiBmcy9leHQ0L2lubGluZS5jLCByZXBsYWNpbmcgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhIHdpdGggZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2sgYW5kIHJlc3RydWN0dXJpbmcgYmxvY2sgYWxsb2NhdGlvbiwgZXh0ZW50IGluc2VydGlvbiwgYW5kIGVycm9yIHJlY292ZXJ5IGhhbmRsaW5nIGR1cmluZyBpbmxpbmUgZGF0YSBjb252ZXJzaW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgd2hlbiBleHBhbmRpbmcgaW5saW5lIGZpbGVzL2RpcmVjdG9yaWVzIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ZTUyMzEyMDRlMDNjMzAzMjQ2ODM3MTI5NWViOGEyN2Y4MGQxZGViXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxMDozMzowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lubGluZS5jIGIvZnMvZXh0NC9pbmxpbmUuY1xuaW5kZXggODA0NWU0ZmYyNzBjNy4uZmVmOThhY2VlNjg4ZiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5saW5lLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5saW5lLmNcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuICNpbmNsdWRlIFwmIzM0O2V4dDQuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hhdHRyLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0cnVuY2F0ZS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2V4dDRfZXh0ZW50cy5oXCYjMzQ7XG4gXG4gI2RlZmluZSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBXHRcJiMzNDtkYXRhXCYjMzQ7XG4gI2RlZmluZSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFXHQoKHNpemVvZihfX2xlMzIpICogRVhUNF9OX0JMT0NLUykpXG5AQCAtMTA3MCwyMSAmIzQzOzEwNzEsMTIzIEBAIHN0YXRpYyBpbnQgZXh0NF91cGRhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYyxcbi1cdFx0XHRcdCAgICAgdm9pZCAqYnVmLCBpbnQgaW5saW5lX3NpemUpXG4mIzQzO3N0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLFxuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiB7XG4tXHRpbnQgcmV0O1xuJiM0MztcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbiYjNDM7XHRzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzID0ge1xuJiM0MztcdFx0LnMgPSB7IC5ub3RfZm91bmQgPSAtRU5PREFUQSwgfSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaSA9IHtcbiYjNDM7XHRcdC5uYW1lX2luZGV4ID0gRVhUNF9YQVRUUl9JTkRFWF9TWVNURU0sXG4mIzQzO1x0XHQubmFtZSA9IEVYVDRfWEFUVFJfU1lTVEVNX0RBVEEsXG4mIzQzO1x0XHQudmFsdWUgPSBOVUxMLFxuJiM0MztcdFx0LnZhbHVlX2xlbiA9IDAsXG4mIzQzO1x0fTtcbiYjNDM7XHRpbnQgZXJyb3I7XG4mIzQzO1x0dm9pZCAqaV9ibG9ja19idWYgPSBOVUxMO1xuJiM0MztcdHZvaWQgKnhhdHRyX2J1ZiA9IE5VTEw7XG4mIzQzO1x0dm9pZCAqaGVhZGVyID0gTlVMTDtcbiYjNDM7XHR2b2lkICp0YWlsID0gTlVMTDtcbiYjNDM7XHRpbnQgeGF0dHJfc2l6ZTtcbiYjNDM7XHRzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlO1xuIFxuLVx0cmV0ID0gZXh0NF9jcmVhdGVfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSwgaW5saW5lX3NpemUpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRleHQ0X21zZyhpbm9kZS1cdTAwM2VpX3NiLCBLRVJOX0VNRVJHLFxuLVx0XHRcdFwmIzM0O2Vycm9yIHJlc3RvcmluZyBpbmxpbmVfZGF0YSBmb3IgaW5vZGUgLS0gcG90ZW50aWFsIGRhdGEgbG9zcyEgKGlub2RlICVsbHUsIGVycm9yICVkKVwmIzM0Oyxcbi1cdFx0XHRpbm9kZS1cdTAwM2VpX2lubywgcmV0KTtcbi1cdFx0cmV0dXJuO1xuJiM0MztcdGlfYmxvY2tfYnVmID0ga21hbGxvYyhFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFLCBHRlBfTk9GUyk7XG4mIzQzO1x0aWYgKCFpX2Jsb2NrX2J1Zikge1xuJiM0MztcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuJiM0MztcdFx0ZG93bl93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbiYjNDM7XHRcdGdvdG8gZXJyb3I7XG4gXHR9XG4tXHRleHQ0X3dyaXRlX2lubGluZV9kYXRhKGlub2RlLCBpbG9jLCBidWYsIDAsIGlubGluZV9zaXplKTtcbi1cdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4mIzQzO1x0ZG93bl93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbiYjNDM7XHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aXMuaWxvYyk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBlcnJvcjtcbiYjNDM7XHRyYXdfaW5vZGUgPSBleHQ0X3Jhd19pbm9kZShcdTAwMjZpcy5pbG9jKTtcbiYjNDM7XHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xuJiM0MztcdHRhaWwgPSBJVEFJTChpbm9kZSwgcmF3X2lub2RlKTtcbiYjNDM7XHR4YXR0cl9zaXplID0gdGFpbCAtIGhlYWRlcjtcbiYjNDM7XHR4YXR0cl9idWYgPSBrbWFsbG9jKHhhdHRyX3NpemUsIEdGUF9OT0ZTKTtcbiYjNDM7XHRpZiAoIXhhdHRyX2J1Zikge1xuJiM0MztcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBlcnJvcjtcbiYjNDM7XHR9XG4mIzQzO1x0QlVGRkVSX1RSQUNFKGlzLmlsb2MuYmgsIFwmIzM0O2dldF93cml0ZV9hY2Nlc3NcJiMzNDspO1xuJiM0MztcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cdTAwM2VpX3NiLCBpcy5pbG9jLmJoLCBFWFQ0X0pUUl9OT05FKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRnb3RvIGVycm9yO1xuJiM0MztcdG1lbWNweShpX2Jsb2NrX2J1ZiwgKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4mIzQzO1x0bWVtc2V0KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuJiM0MztcdG1lbXNldChlaS1cdTAwM2VpX2RhdGEsIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuJiM0MztcdG1lbWNweSh4YXR0cl9idWYsIGhlYWRlciwgeGF0dHJfc2l6ZSk7XG4mIzQzO1x0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS1cdTAwM2VpX3NiKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU1JFRyhpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSkpIHtcbiYjNDM7XHRcdGV4dDRfc2V0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4mIzQzO1x0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XG4mIzQzO1x0XHRzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIDAsIE5VTEwsIDApO1xuJiM0MztcbiYjNDM7XHRcdGlmIChJU19FUlIocGF0aCkpIHtcbiYjNDM7XHRcdFx0ZXJyb3IgPSBQVFJfRVJSKHBhdGgpO1xuJiM0MztcdFx0XHRnb3RvIHJlY292ZXJ5O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4O1xuJiM0MztcbiYjNDM7XHRcdG5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XG4mIzQzO1x0XHRuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNigxKTtcbiYjNDM7XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcdTAwMjZuZXdleCwgYmxvY2spO1xuJiM0MztcdFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXgsIDApO1xuJiM0MztcdFx0aWYgKElTX0VSUihwYXRoKSkge1xuJiM0MztcdFx0XHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XG4mIzQzO1x0XHRcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXG4mIzQzO1x0XHRcdFx0Z290byByZWNvdmVyeTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdGdvdG8gbm9fZnJlZTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7XG4mIzQzO1x0fVxuJiM0MztcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9maW5kKGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byByZWNvdmVyeTtcbiYjNDM7XHRpZiAoIWlzLnMubm90X2ZvdW5kKVxuJiM0MztcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4mIzQzO3JlY292ZXJ5OlxuJiM0MztcdGlmIChlcnJvcikge1xuJiM0MztcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbiYjNDM7XHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7XG4mIzQzO1x0XHRtZW1jcHkoaGVhZGVyLCB4YXR0cl9idWYsIHhhdHRyX3NpemUpO1xuJiM0Mztub19mcmVlOlxuJiM0MztcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbiYjNDM7XHRcdG1lbWNweSgodm9pZCAqKXJhd19pbm9kZS1cdTAwM2VpX2Jsb2NrLCBpX2Jsb2NrX2J1ZiwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4mIzQzO1x0XHRtZW1jcHkoZWktXHUwMDNlaV9kYXRhLCByYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4mIzQzO1x0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4mIzQzO1x0XHRnZXRfYmgoaXMuaWxvYy5iaCk7XG4mIzQzO1x0XHRleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKTtcbiYjNDM7XHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiYjNDM7XHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbiYjNDM7XHRcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2Rpc2tzaXplID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGdldF9iaChpcy5pbG9jLmJoKTtcbiYjNDM7XHRcdGVycm9yID0gZXh0NF9tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgXHUwMDI2aXMuaWxvYyk7XG4mIzQzO1x0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX29mZiA9IDA7XG4mIzQzO1x0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xuJiM0MztcdFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuJiM0MztcdFx0YnJlbHNlKGJoKTtcbiYjNDM7XHR9XG4mIzQzO1x0Z290byBvdXQ7XG4mIzQzO2Vycm9yOlxuJiM0MztcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7XG4mIzQzO1x0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbiYjNDM7XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnJlbHNlKGlzLmlsb2MuYmgpO1xuJiM0MztcdHVwX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuJiM0MztcdGtmcmVlKGlfYmxvY2tfYnVmKTtcbiYjNDM7XHRrZnJlZSh4YXR0cl9idWYpO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4gc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG5AQCAtMTA5Myw5ICYjNDM7MTE5NiwxMiBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiB7XG4gXHRpbnQgZXJyb3I7XG4gXHR2b2lkICpidWYgPSBOVUxMO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkYXRhX2JoID0gTlVMTDtcbi1cdHN0cnVjdCBleHQ0X21hcF9ibG9ja3MgbWFwO1xuJiM0MztcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xuIFx0aW50IGlubGluZV9zaXplO1xuJiM0MztcdGV4dDRfZnNibGtfdCBuZXdibG9jayA9IDA7XG4mIzQzO1x0c3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyO1xuJiM0MztcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4mIzQzO1x0dW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jaztcbiBcbiBcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xuIFx0YnVmID0ga21hbGxvYyhpbmxpbmVfc2l6ZSwgR0ZQX05PRlMpO1xuQEAgLTExMjAsNjMgJiM0MzsxMjI2LDYyIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0ZXJyb3IgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdG1hcC5tX2xibGsgPSAwO1xuLVx0bWFwLm1fbGVuID0gMTtcbi1cdG1hcC5tX2ZsYWdzID0gMDtcbi1cdGVycm9yID0gZXh0NF9tYXBfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIFx1MDAyNm1hcCwgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSk7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmFyLCAwLCBzaXplb2YoYXIpKTtcbiYjNDM7XHRhci5pbm9kZSA9IGlub2RlO1xuJiM0MztcdGFyLmxvZ2ljYWwgPSAwO1xuJiM0MztcdGFyLmxlbiA9IDE7XG4mIzQzO1x0aWYgKFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiYjNDM7XHRcdGFyLmZsYWdzID0gRVhUNF9NQl9ISU5UX0RBVEE7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0YXIuZmxhZ3MgPSAwO1xuJiM0MztcdG5ld2Jsb2NrID0gZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZSwgXHUwMDI2YXIsIFx1MDAyNmVycm9yKTtcbiBcdGlmIChlcnJvciBcdTAwM2MgMClcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbi1cdGlmICghKG1hcC5tX2ZsYWdzIFx1MDAyNiBFWFQ0X01BUF9NQVBQRUQpKSB7XG4tXHRcdGVycm9yID0gLUVJTztcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbi1cdH1cbi1cbi1cdGRhdGFfYmggPSBzYl9nZXRibGsoaW5vZGUtXHUwMDNlaV9zYiwgbWFwLm1fcGJsayk7XG4tXHRpZiAoIWRhdGFfYmgpIHtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGFsbG9jYXRlZF9ibG9jayA9IEVYVDRfQzJCKHNiaSwgYXIubGVuKTtcbiYjNDM7XHRiaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLCBuZXdibG9jayk7XG4mIzQzO1x0aWYgKCFiaCkge1xuIFx0XHRlcnJvciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4mIzQzO1x0XHRnb3RvIG91dF9iaDtcbiBcdH1cbiBcbi1cdGxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuLVx0ZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cdTAwM2VpX3NiLCBkYXRhX2JoLFxuJiM0MztcdGxvY2tfYnVmZmVyKGJoKTtcbiYjNDM7XHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLVx1MDAzZWlfc2IsIGJoLFxuIFx0XHRcdFx0XHQgICAgICAgRVhUNF9KVFJfTk9ORSk7XG4gXHRpZiAoZXJyb3IpIHtcbi1cdFx0dW5sb2NrX2J1ZmZlcihkYXRhX2JoKTtcbiYjNDM7XHRcdHVubG9ja19idWZmZXIoYmgpO1xuIFx0XHRlcnJvciA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4mIzQzO1x0XHRnb3RvIG91dF9iaDtcbiBcdH1cbi1cdG1lbXNldChkYXRhX2JoLVx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4mIzQzO1x0bWVtc2V0KGJoLVx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4gXG4gXHRpZiAoIVNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuLVx0XHRtZW1jcHkoZGF0YV9iaC1cdTAwM2ViX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpO1xuLVx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGRhdGFfYmgpO1xuLVx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuJiM0MztcdFx0bWVtY3B5KGJoLVx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XG4mIzQzO1x0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbiYjNDM7XHRcdHVubG9ja19idWZmZXIoYmgpO1xuIFx0XHRlcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSxcbi1cdFx0XHRcdFx0XHQgICBpbm9kZSwgZGF0YV9iaCk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgIGlub2RlLCBiaCk7XG4gXHR9IGVsc2Uge1xuLVx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuLVx0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuLVx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuLVx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuLVxuLVx0XHRlcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBkYXRhX2JoLFxuJiM0MztcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4mIzQzO1x0XHRlcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbiBcdFx0XHQgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLVx1MDAzZWlub2RlKSxcbiBcdFx0XHQgIGJ1ZiAmIzQzOyBFWFQ0X0lOTElORV9ET1RET1RfU0laRSxcbiBcdFx0XHQgIGlubGluZV9zaXplIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUpO1xuLVx0XHRpZiAoIWVycm9yKVxuLVx0XHRcdGVycm9yID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpO1xuIFx0fVxuJiM0MztvdXRfYmg6XG4mIzQzO1x0aWYgKGVycm9yKSB7XG4mIzQzO1x0XHRpZiAoYmgpXG4mIzQzO1x0XHRcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBuZXdibG9jayk7XG4mIzQzO1x0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4gXG4tb3V0X3Jlc3RvcmU6XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBpbG9jLCBidWYsIGlubGluZV9zaXplKTtcbi1cbiYjNDM7XHRcdGRvd25fd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4mIzQzO1x0XHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBuZXdibG9jaywgYWxsb2NhdGVkX2Jsb2NrLCAwKTtcbiYjNDM7XHRcdHVwX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRlcnJvciA9IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZSwgaW5vZGUsXG4mIzQzO1x0XHRcdFx0bmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgYmgpO1xuJiM0MztcdH1cbiBvdXQ6XG4tXHRicmVsc2UoZGF0YV9iaCk7XG4gXHRrZnJlZShidWYpO1xuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2smIzM0OywKICAgICYjMzQ7ZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayYjMzQ7LAogICAgJiMzNDtleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIG1lY2hhbmlzbSBpbiBmcy9leHQ0L2lubGluZS5jLCByZXBsYWNpbmcgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhIHdpdGggZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2sgYW5kIHJlc3RydWN0dXJpbmcgYmxvY2sgYWxsb2NhdGlvbiwgZXh0ZW50IGluc2VydGlvbiwgYW5kIGVycm9yIHJlY292ZXJ5IGhhbmRsaW5nIGR1cmluZyBpbmxpbmUgZGF0YSBjb252ZXJzaW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgd2hlbiBleHBhbmRpbmcgaW5saW5lIGZpbGVzL2RpcmVjdG9yaWVzIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZTUyMzEyMDRlMDNjMzAzMjQ2ODM3MTI5NWViOGEyN2Y4MGQxZGViCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxMDozMzowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jCmluZGV4IDgwNDVlNGZmMjcwYzcuLmZlZjk4YWNlZTY4OGYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5saW5lLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbmxpbmUuYwpAQCAtMTQsNiAmIzQzOzE0LDcgQEAKICNpbmNsdWRlICYjMzQ7ZXh0NC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGF0dHIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3RydW5jYXRlLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZXh0NF9leHRlbnRzLmgmIzM0OwogCiAjZGVmaW5lIEVYVDRfWEFUVFJfU1lTVEVNX0RBVEEJJiMzNDtkYXRhJiMzNDsKICNkZWZpbmUgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRQkoKHNpemVvZihfX2xlMzIpICogRVhUNF9OX0JMT0NLUykpCkBAIC0xMDcwLDIxICYjNDM7MTA3MSwxMjMgQEAgc3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICAgIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MsCi0JCQkJICAgICB2b2lkICpidWYsIGludCBpbmxpbmVfc2l6ZSkKJiM0MztzdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jaywKJiM0MzsJCQkJCXVuc2lnbmVkIGludCBsZW4sIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7Ci0JaW50IHJldDsKJiM0MzsJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOwomIzQzOwlzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzID0gewomIzQzOwkJLnMgPSB7IC5ub3RfZm91bmQgPSAtRU5PREFUQSwgfSwKJiM0MzsJfTsKJiM0MzsJc3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpID0gewomIzQzOwkJLm5hbWVfaW5kZXggPSBFWFQ0X1hBVFRSX0lOREVYX1NZU1RFTSwKJiM0MzsJCS5uYW1lID0gRVhUNF9YQVRUUl9TWVNURU1fREFUQSwKJiM0MzsJCS52YWx1ZSA9IE5VTEwsCiYjNDM7CQkudmFsdWVfbGVuID0gMCwKJiM0MzsJfTsKJiM0MzsJaW50IGVycm9yOwomIzQzOwl2b2lkICppX2Jsb2NrX2J1ZiA9IE5VTEw7CiYjNDM7CXZvaWQgKnhhdHRyX2J1ZiA9IE5VTEw7CiYjNDM7CXZvaWQgKmhlYWRlciA9IE5VTEw7CiYjNDM7CXZvaWQgKnRhaWwgPSBOVUxMOwomIzQzOwlpbnQgeGF0dHJfc2l6ZTsKJiM0MzsJc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTsKIAotCXJldCA9IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlubGluZV9zaXplKTsKLQlpZiAocmV0KSB7Ci0JCWV4dDRfbXNnKGlub2RlLSZndDtpX3NiLCBLRVJOX0VNRVJHLAotCQkJJiMzNDtlcnJvciByZXN0b3JpbmcgaW5saW5lX2RhdGEgZm9yIGlub2RlIC0tIHBvdGVudGlhbCBkYXRhIGxvc3MhIChpbm9kZSAlbGx1LCBlcnJvciAlZCkmIzM0OywKLQkJCWlub2RlLSZndDtpX2lubywgcmV0KTsKLQkJcmV0dXJuOwomIzQzOwlpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpOwomIzQzOwlpZiAoIWlfYmxvY2tfYnVmKSB7CiYjNDM7CQllcnJvciA9IC1FTk9NRU07CiYjNDM7CQlkb3duX3dyaXRlKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwomIzQzOwkJZ290byBlcnJvcjsKIAl9Ci0JZXh0NF93cml0ZV9pbmxpbmVfZGF0YShpbm9kZSwgaWxvYywgYnVmLCAwLCBpbmxpbmVfc2l6ZSk7Ci0JZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTsKJiM0MzsJZG93bl93cml0ZSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKJiM0MzsJZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsICZhbXA7aXMuaWxvYyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gZXJyb3I7CiYjNDM7CXJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKCZhbXA7aXMuaWxvYyk7CiYjNDM7CWhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7CiYjNDM7CXRhaWwgPSBJVEFJTChpbm9kZSwgcmF3X2lub2RlKTsKJiM0MzsJeGF0dHJfc2l6ZSA9IHRhaWwgLSBoZWFkZXI7CiYjNDM7CXhhdHRyX2J1ZiA9IGttYWxsb2MoeGF0dHJfc2l6ZSwgR0ZQX05PRlMpOwomIzQzOwlpZiAoIXhhdHRyX2J1ZikgewomIzQzOwkJZXJyb3IgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsJfQomIzQzOwlCVUZGRVJfVFJBQ0UoaXMuaWxvYy5iaCwgJiMzNDtnZXRfd3JpdGVfYWNjZXNzJiMzNDspOwomIzQzOwllcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtJmd0O2lfc2IsIGlzLmlsb2MuYmgsIEVYVDRfSlRSX05PTkUpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlnb3RvIGVycm9yOwomIzQzOwltZW1jcHkoaV9ibG9ja19idWYsICh2b2lkICopcmF3X2lub2RlLSZndDtpX2Jsb2NrLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTsKJiM0MzsJbWVtc2V0KCh2b2lkICopcmF3X2lub2RlLSZndDtpX2Jsb2NrLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTsKJiM0MzsJbWVtc2V0KGVpLSZndDtpX2RhdGEsIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpOwomIzQzOwltZW1jcHkoeGF0dHJfYnVmLCBoZWFkZXIsIHhhdHRyX3NpemUpOwomIzQzOwlpZiAoZXh0NF9oYXNfZmVhdHVyZV9leHRlbnRzKGlub2RlLSZndDtpX3NiKSAmYW1wOyZhbXA7CiYjNDM7CQkoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSB8fCBTX0lTUkVHKGlub2RlLSZndDtpX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpKSB7CiYjNDM7CQlleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpOwomIzQzOwkJZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgaW5vZGUpOwomIzQzOwkJc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCAwLCBOVUxMLCAwKTsKJiM0MzsKJiM0MzsJCWlmIChJU19FUlIocGF0aCkpIHsKJiM0MzsJCQllcnJvciA9IFBUUl9FUlIocGF0aCk7CiYjNDM7CQkJZ290byByZWNvdmVyeTsKJiM0MzsJCX0KJiM0MzsJCXN0cnVjdCBleHQ0X2V4dGVudCBuZXdleDsKJiM0MzsKJiM0MzsJCW5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7CiYjNDM7CQluZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNigxKTsKJiM0MzsJCWV4dDRfZXh0X3N0b3JlX3BibG9jaygmYW1wO25ld2V4LCBibG9jayk7CiYjNDM7CQlwYXRoID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCAmYW1wO25ld2V4LCAwKTsKJiM0MzsJCWlmIChJU19FUlIocGF0aCkpIHsKJiM0MzsJCQllcnJvciA9IFBUUl9FUlIocGF0aCk7CiYjNDM7CQkJaWYgKGVycm9yID09IC1FRFFVT1QgfHwgZXJyb3IgPT0gLUVOT1NQQykKJiM0MzsJCQkJZ290byByZWNvdmVyeTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCWdvdG8gbm9fZnJlZTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJZXh0NF9mcmVlX2V4dF9wYXRoKHBhdGgpOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJRVhUNF9JKGlub2RlKS0mZ3Q7aV9kYXRhWzBdID0gY3B1X3RvX2xlMzIoYmxvY2spOwomIzQzOwl9CiYjNDM7CWVycm9yID0gZXh0NF94YXR0cl9pYm9keV9maW5kKGlub2RlLCAmYW1wO2ksICZhbXA7aXMpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlnb3RvIHJlY292ZXJ5OwomIzQzOwlpZiAoIWlzLnMubm90X2ZvdW5kKQomIzQzOwkJZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCAmYW1wO2ksICZhbXA7aXMpOwomIzQzO3JlY292ZXJ5OgomIzQzOwlpZiAoZXJyb3IpIHsKJiM0MzsJCWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiYjNDM7CQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApOwomIzQzOwkJbWVtY3B5KGhlYWRlciwgeGF0dHJfYnVmLCB4YXR0cl9zaXplKTsKJiM0Mztub19mcmVlOgomIzQzOwkJZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTsKJiM0MzsJCW1lbWNweSgodm9pZCAqKXJhd19pbm9kZS0mZ3Q7aV9ibG9jaywgaV9ibG9ja19idWYsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpOwomIzQzOwkJbWVtY3B5KGVpLSZndDtpX2RhdGEsIHJhd19pbm9kZS0mZ3Q7aV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7CiYjNDM7CQlleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7CiYjNDM7CQlnZXRfYmgoaXMuaWxvYy5iaCk7CiYjNDM7CQlleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCAmYW1wO2lzLmlsb2MpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKTsKJiM0MzsJCWlmIChTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CQkJaV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemUpOwomIzQzOwkJCUVYVDRfSShpbm9kZSktJmd0O2lfZGlza3NpemUgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemU7CiYjNDM7CQl9CiYjNDM7CQlnZXRfYmgoaXMuaWxvYy5iaCk7CiYjNDM7CQllcnJvciA9IGV4dDRfbWFya19pbG9jX2RpcnR5KGhhbmRsZSwgaW5vZGUsICZhbXA7aXMuaWxvYyk7CiYjNDM7CQlFWFQ0X0koaW5vZGUpLSZndDtpX2lubGluZV9vZmYgPSAwOwomIzQzOwkJRVhUNF9JKGlub2RlKS0mZ3Q7aV9pbmxpbmVfc2l6ZSA9IDA7CiYjNDM7CQlleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7CiYjNDM7CQlicmVsc2UoYmgpOwomIzQzOwl9CiYjNDM7CWdvdG8gb3V0OwomIzQzO2Vycm9yOgomIzQzOwlleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spOwomIzQzOwlleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpOwomIzQzOwlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApOwomIzQzO291dDoKJiM0MzsJYnJlbHNlKGlzLmlsb2MuYmgpOwomIzQzOwl1cF93cml0ZSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKJiM0MzsJa2ZyZWUoaV9ibG9ja19idWYpOwomIzQzOwlrZnJlZSh4YXR0cl9idWYpOwomIzQzOwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLApAQCAtMTA5Myw5ICYjNDM7MTE5NiwxMiBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSwKIHsKIAlpbnQgZXJyb3I7CiAJdm9pZCAqYnVmID0gTlVMTDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRhdGFfYmggPSBOVUxMOwotCXN0cnVjdCBleHQ0X21hcF9ibG9ja3MgbWFwOwomIzQzOwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlpbnQgaW5saW5lX3NpemU7CiYjNDM7CWV4dDRfZnNibGtfdCBuZXdibG9jayA9IDA7CiYjNDM7CXN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcjsKJiM0MzsJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS0mZ3Q7aV9zYik7CiYjNDM7CXVuc2lnbmVkIGludCBhbGxvY2F0ZWRfYmxvY2s7CiAKIAlpbmxpbmVfc2l6ZSA9IGV4dDRfZ2V0X2lubGluZV9zaXplKGlub2RlKTsKIAlidWYgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7CkBAIC0xMTIwLDYzICYjNDM7MTIyNiw2MiBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSwKIAkJCWdvdG8gb3V0OwogCX0KIAotCWVycm9yID0gZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0OwotCi0JbWFwLm1fbGJsayA9IDA7Ci0JbWFwLm1fbGVuID0gMTsKLQltYXAubV9mbGFncyA9IDA7Ci0JZXJyb3IgPSBleHQ0X21hcF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgJmFtcDttYXAsIEVYVDRfR0VUX0JMT0NLU19DUkVBVEUpOwomIzQzOwltZW1zZXQoJmFtcDthciwgMCwgc2l6ZW9mKGFyKSk7CiYjNDM7CWFyLmlub2RlID0gaW5vZGU7CiYjNDM7CWFyLmxvZ2ljYWwgPSAwOwomIzQzOwlhci5sZW4gPSAxOwomIzQzOwlpZiAoU19JU1JFRyhpbm9kZS0mZ3Q7aV9tb2RlKSkKJiM0MzsJCWFyLmZsYWdzID0gRVhUNF9NQl9ISU5UX0RBVEE7CiYjNDM7CWVsc2UKJiM0MzsJCWFyLmZsYWdzID0gMDsKJiM0MzsJbmV3YmxvY2sgPSBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlLCAmYW1wO2FyLCAmYW1wO2Vycm9yKTsKIAlpZiAoZXJyb3IgJmx0OyAwKQotCQlnb3RvIG91dF9yZXN0b3JlOwotCWlmICghKG1hcC5tX2ZsYWdzICZhbXA7IEVYVDRfTUFQX01BUFBFRCkpIHsKLQkJZXJyb3IgPSAtRUlPOwotCQlnb3RvIG91dF9yZXN0b3JlOwotCX0KLQotCWRhdGFfYmggPSBzYl9nZXRibGsoaW5vZGUtJmd0O2lfc2IsIG1hcC5tX3BibGspOwotCWlmICghZGF0YV9iaCkgewomIzQzOwkJZ290byBvdXQ7CiYjNDM7CWFsbG9jYXRlZF9ibG9jayA9IEVYVDRfQzJCKHNiaSwgYXIubGVuKTsKJiM0MzsJYmggPSBzYl9nZXRibGsoaW5vZGUtJmd0O2lfc2IsIG5ld2Jsb2NrKTsKJiM0MzsJaWYgKCFiaCkgewogCQllcnJvciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X3Jlc3RvcmU7CiYjNDM7CQlnb3RvIG91dF9iaDsKIAl9CiAKLQlsb2NrX2J1ZmZlcihkYXRhX2JoKTsKLQllcnJvciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLSZndDtpX3NiLCBkYXRhX2JoLAomIzQzOwlsb2NrX2J1ZmZlcihiaCk7CiYjNDM7CWVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtJmd0O2lfc2IsIGJoLAogCQkJCQkgICAgICAgRVhUNF9KVFJfTk9ORSk7CiAJaWYgKGVycm9yKSB7Ci0JCXVubG9ja19idWZmZXIoZGF0YV9iaCk7CiYjNDM7CQl1bmxvY2tfYnVmZmVyKGJoKTsKIAkJZXJyb3IgPSAtRUlPOwotCQlnb3RvIG91dF9yZXN0b3JlOwomIzQzOwkJZ290byBvdXRfYmg7CiAJfQotCW1lbXNldChkYXRhX2JoLSZndDtiX2RhdGEsIDAsIGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSk7CiYjNDM7CW1lbXNldChiaC0mZ3Q7Yl9kYXRhLCAwLCBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemUpOwogCiAJaWYgKCFTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7Ci0JCW1lbWNweShkYXRhX2JoLSZndDtiX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpOwotCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGRhdGFfYmgpOwotCQl1bmxvY2tfYnVmZmVyKGRhdGFfYmgpOwomIzQzOwkJbWVtY3B5KGJoLSZndDtiX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpOwomIzQzOwkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiYjNDM7CQl1bmxvY2tfYnVmZmVyKGJoKTsKIAkJZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsCi0JCQkJCQkgICBpbm9kZSwgZGF0YV9iaCk7CiYjNDM7CQkJCQkJICAgaW5vZGUsIGJoKTsKIAl9IGVsc2UgewotCQl1bmxvY2tfYnVmZmVyKGRhdGFfYmgpOwotCQlpbm9kZS0mZ3Q7aV9zaXplID0gaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplOwotCQlpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSk7Ci0JCUVYVDRfSShpbm9kZSktJmd0O2lfZGlza3NpemUgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemU7Ci0KLQkJZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCwKJiM0MzsJCXVubG9ja19idWZmZXIoYmgpOwomIzQzOwkJZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsCiAJCQkgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLSZndDtpbm9kZSksCiAJCQkgIGJ1ZiAmIzQzOyBFWFQ0X0lOTElORV9ET1RET1RfU0laRSwKIAkJCSAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKIAl9CiYjNDM7b3V0X2JoOgomIzQzOwlpZiAoZXJyb3IpIHsKJiM0MzsJCWlmIChiaCkKJiM0MzsJCQlleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgbmV3YmxvY2spOwomIzQzOwkJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOwogCi1vdXRfcmVzdG9yZToKLQlpZiAoZXJyb3IpCi0JCWV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGUsIGlub2RlLCBpbG9jLCBidWYsIGlubGluZV9zaXplKTsKLQomIzQzOwkJZG93bl93cml0ZSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKJiM0MzsJCWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiYjNDM7CQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIDApOwomIzQzOwkJdXBfd3JpdGUoJmFtcDtlaS0mZ3Q7aV9kYXRhX3NlbSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllcnJvciA9IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZSwgaW5vZGUsCiYjNDM7CQkJCW5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIGJoKTsKJiM0MzsJfQogb3V0OgotCWJyZWxzZShkYXRhX2JoKTsKIAlrZnJlZShidWYpOwogCXJldHVybiBlcnJvcjsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI1MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB0aGlzIHBhdGNoIGFuYWx5c2lzLCBwdXR0aW5nIG15c2VsZiBpbiB5b3VyIGV4cGVydCBzaG9lczoKCioqQW5hbHl6aW5nIGFuIGV4dDQgSW5saW5lIERhdGEgUGF0Y2gqKgoKQWxyaWdodCwgYSBwYXRjaCB0b3VjaGluZyBgZnMvZXh0NC9pbmxpbmUuY2AuIE15IHNwaWRleSBzZW5zZSBpcyB0aW5nbGluZyDigJMgZXh0NCBpcyBjcml0aWNhbCBpbmZyYXN0cnVjdHVyZSwgYW5kIGlubGluZSBkYXRhIGlzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGludGVyZXN0aW5nIGJ1Z3MuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kICpleGFjdGx5KiB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuIEkmIzM5O2xsIGRpdmUgaW50byB0aGUgY29kZSBjaGFuZ2VzIHRoZW1zZWx2ZXMsIHJlYWxseSBmb2N1c2luZyBvbiB0aGUgbG9naWMgaXQmIzM5O3MgaW1wbGVtZW50aW5nIGFuZCB3aGVyZSBpdCYjMzk7cyBpbXBhY3RpbmcgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBtZXRhZGF0YSB1cGRhdGVzLCBkYXRhIGJsb2NrIGhhbmRsaW5nLCBlcnJvciBwYXRocz8gS25vd2luZyB0aGUgY29yZSBhY3Rpb24gaXMgdGhlIGtleS4KCk5leHQgdXAsIGEgcXVpY2sgc2FuaXR5IGNoZWNrOiB3aGF0IEtjb25maWcgb3B0aW9ucyBhcmUgaW4gcGxheT8gSXMgdGhpcyBmZWF0dXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQ/IENhbiBpdCBiZSBkaXNhYmxlZCwgcG90ZW50aWFsbHkgcmVkdWNpbmcgbXkgZnV6emluZyBzdXJmYWNlPyBJJiMzOTtsbCBncmVwIHRocm91Z2ggdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgY2hlY2sgZm9yIGFueSByZWxldmFudCBkZXBlbmRlbmNpZXMgb3IgZGVwZW5kZW5jaWVzIHRvIG15IHRhcmdldHMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IElzIHRoaXMgY29kZSBhY3R1YWxseSAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgZXh0NCBmaWxlc3lzdGVtIHVzZSBjYXNlPyBJcyBpdCB0cmlnZ2VyZWQgdW5kZXIgbm9ybWFsIG9wZXJhdGlvbnMsIG9yIG9ubHkgd2l0aCBvYnNjdXJlIG9wdGlvbnMgb3IgY29ybmVyIGNhc2VzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgZ3JhcGgsIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIElzIGl0IHdvcnRoIHRoZSBmdXp6aW5nIGludmVzdG1lbnQ/CgpGaW5hbGx5LCB0aW1lIHRvIGRpc3RpbGwgdGhlIGVzc2VuY2UgZm9yIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMuIFdoYXQgYXJlIHRoZSBrZXkgYEZvY3VzU3ltYm9sc2A/IEFuZCB3aGF0IGBFbmFibGVDb25maWdzYCB3aWxsIEkgbmVlZCB0byBiZSBzdXJlIHRoaXMgY29kZSBwYXRoIGlzIGFjdGl2ZT8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBzb21lIGJhc2ljIGdyZXBzIHRvIHBpY2sgb3V0IHRoZSBpbXBvcnRhbnQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMuIEkgbWlnaHQgZXZlbiByZWFkIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgYW5kIGhlYWRlcnMgdG8gZ2FpbiBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlLgoKSW4gc2hvcnQsIEkmIzM5O20gZGlnZ2luZyBpbiB0byB1bmRlcnN0YW5kIHRoZSBwYXRjaCYjMzk7cyBwdXJwb3NlLCBpdHMgYWNjZXNzaWJpbGl0eSwgYW5kIGhvdyBJIGNhbiBiZXN0IGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyB0byByZXZlYWwgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2NyeXB0by5jPTEzMj1zdGF0aWMgaW50IGV4dDRfc2V0X2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqY3R4LCBzaXplX3QgbGVuLFxuLS1cbmZzL2V4dDQvY3J5cHRvLmMtMTUyLVxuZnMvZXh0NC9jcnlwdG8uYzoxNTM6XHRyZXMgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xuZnMvZXh0NC9jcnlwdG8uYy0xNTQtXHRpZiAocmVzKVxuLS1cbmZzL2V4dDQvZXh0NC5oPTM3OTY9ZXh0ZXJuIGludCBleHQ0X2lubGluZV9kYXRhX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqaGFzX2lubGluZSk7XG5mcy9leHQ0L2V4dDQuaC0zNzk3LVxuZnMvZXh0NC9leHQ0Lmg6Mzc5ODpleHRlcm4gaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbmZzL2V4dDQvZXh0NC5oLTM3OTktXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NDg1ND1sb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00ODgzLVx0aW5vZGVfbG9jayhpbm9kZSk7XG5mcy9leHQ0L2V4dGVudHMuYzo0ODg0Olx0cmV0ID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4ODUtXHRpZiAocmV0KVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9NTQ2PWludCBleHQ0X3JlYWRwYWdlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNTcyLVxuZnMvZXh0NC9pbmxpbmUuYzo1NzM6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvZXh0NC9pbmxpbmUuYy01NzQtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz02OTc9aW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTcyOC1cdFx0XHQvKiBSZXRyeSBpbnNpZGUgKi9cbmZzL2V4dDQvaW5saW5lLmM6NzI5Olx0XHRcdHJldHVybiBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KG1hcHBpbmcsIGlub2RlKTtcbmZzL2V4dDQvaW5saW5lLmMtNzMwLVx0XHR9XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz03ODQ9aW50IGV4dDRfdHJ5X3RvX3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNzg5LVx0aWYgKHBvcyAmIzQzOyBsZW4gXHUwMDNlIGV4dDRfZ2V0X21heF9pbmxpbmVfc2l6ZShpbm9kZSkpXG5mcy9leHQ0L2lubGluZS5jOjc5MDpcdFx0cmV0dXJuIGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV90b19leHRlbnQobWFwcGluZywgaW5vZGUpO1xuZnMvZXh0NC9pbmxpbmUuYy03OTEtXHRyZXR1cm4gZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKG1hcHBpbmcsIGlub2RlLCBwb3MsIGxlbixcbi0tXG5mcy9leHQ0L2lubGluZS5jPTEwNzQ9c3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMTkyLVxuZnMvZXh0NC9pbmxpbmUuYzoxMTkzOnN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuZnMvZXh0NC9pbmxpbmUuYy0xMTk0LVx0XHRcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTI5ND1pbnQgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMzQ2LVx0ICovXG5mcy9leHQ0L2lubGluZS5jOjEzNDc6XHRyZXQgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgZGlyLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtMTM0OC1cbi0tXG5mcy9leHQ0L2lubGluZS5jPTE5NDk9aW50IGV4dDRfaW5saW5lX2RhdGFfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpoYXNfaW5saW5lKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMjA2MC1cbmZzL2V4dDQvaW5saW5lLmM6MjA2MTppbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lubGluZS5jLTIwNjIte1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMjA5OC1cdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXG5mcy9leHQ0L2lubGluZS5jOjIwOTk6XHRcdGVycm9yID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlLCBcdTAwMjZpbG9jKTtcbmZzL2V4dDQvaW5saW5lLmMtMjEwMC1cdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcdTAwMjZub19leHBhbmQpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz01OTIyPWludCBleHQ0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNjAxOS1cdFx0ICAgIGF0dHItXHUwMDNlaWFfc2l6ZSBcdTAwM2UgRVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9zaXplKSB7XG5mcy9leHQ0L2lub2RlLmM6NjAyMDpcdFx0XHRlcnJvciA9IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShpbm9kZSk7XG5mcy9leHQ0L2lub2RlLmMtNjAyMS1cdFx0XHRpZiAoZXJyb3IpXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTY3ODI9dm1fZmF1bHRfdCBleHQ0X3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5mcy9leHQ0L2lub2RlLmMtNjgwMy1cbmZzL2V4dDQvaW5vZGUuYzo2ODA0Olx0ZXJyID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcbmZzL2V4dDQvaW5vZGUuYy02ODA1LVx0aWYgKGVycilcbi0tXG5mcy9leHQ0L3Zlcml0eS5jPTEwMj1zdGF0aWMgaW50IGV4dDRfYmVnaW5fZW5hYmxlX3Zlcml0eShzdHJ1Y3QgZmlsZSAqZmlscClcbi0tXG5mcy9leHQ0L3Zlcml0eS5jLTEyOC1cbmZzL2V4dDQvdmVyaXR5LmM6MTI5Olx0ZXJyID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcbmZzL2V4dDQvdmVyaXR5LmMtMTMwLVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjA3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgZXh0NCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIGV4dDQgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gZXZlcnl0aGluZyByZWxhdGVkIHRvIGlubGluZSBkYXRhLCBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cnMpLCBhbmQgYWxsIHRoZSBvdGhlciBnb29kaWVzLiBTbywgSSYjMzk7bSB0aGlua2luZywgYGZzL2V4dDQvS2NvbmZpZ2AgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgYnVpbGQtdGltZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBleHQ0IGZpbGVzeXN0ZW0gYXJlIGRlZmluZWQuIEkga25vdyBpdCYjMzk7bGwgbGlzdCB0aGUgbmVjZXNzYXJ5IEtjb25maWcgc3ltYm9scyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIHJldmlldyB3aGF0IG9wdGlvbnMgYXJlIHJlcXVpcmVkLCBhbmQgY29uc2lkZXIgaG93IHRoZXkgaW50ZXJhY3QsIHRvIGVuc3VyZSBhIHNvbGlkIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgYXBwbGljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctMzQtXG5mcy9leHQ0L0tjb25maWc6MzU6Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG5mcy9leHQ0L0tjb25maWctMzYtXHRib29sIFwmIzM0O1VzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1wmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy00NS1cbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvS2NvbmZpZy00Ny1cdGJvb2wgXCYjMzQ7RXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy01NS1cbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtFeHQ0IFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy02Ny1cbmZzL2V4dDQvS2NvbmZpZzo2ODpjb25maWcgRVhUNF9ERUJVR1xuZnMvZXh0NC9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtFeHQ0IGRlYnVnZ2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTc2LVxuZnMvZXh0NC9LY29uZmlnOjc3OmNvbmZpZyBFWFQ0X0tVTklUX1RFU1RTXG5mcy9leHQ0L0tjb25maWctNzgtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgZXh0NFwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc5NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB0aGUgRXh0NCBCdWlsZCBQcm9jZXNzKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBFeHQ0IGZpbGVzeXN0ZW0gaXMgYmVpbmcgYnVpbHQuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHRyYWNlIGhvdyBhIGNyaXRpY2FsIGNvbXBvbmVudCBpcyBhc3NlbWJsZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgYGZzL2V4dDQvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGZpbmQgdGhlIGJ1aWxkIHJlY2lwZS4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBmaWd1cmluZyBvdXQgaG93IHNvbWV0aGluZyBzcGVjaWZpYywgbGlrZSBgaW5saW5lLm9gLCBpcyBjcmVhdGVkLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIEV4dDQgY29kZSBiYXNlLCBhbmQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBwYXJ0IGlzIGNyZWF0ZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgZGVwZW5kZW5jaWVzLCBjb21waWxhdGlvbiBmbGFncywgYW5kIGxpbmtpbmcgcHJvY2VzcyB3aXRoaW4gdGhlIEV4dDQgbW9kdWxlLiBGcm9tIHRoZXJlLCBJIGNhbiBsaWtlbHkgZXh0cmFwb2xhdGUgdG8gYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2lkZXIgYnVpbGQgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lubGluZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXG5mcy9leHQ0L01ha2VmaWxlLTktXHRcdGV4dGVudHNfc3RhdHVzLm8gZmlsZS5vIGZzbWFwLm8gZnN5bmMubyBoYXNoLm8gaWFsbG9jLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTA6XHRcdGluZGlyZWN0Lm8gaW5saW5lLm8gaW5vZGUubyBpb2N0bC5vIG1iYWxsb2MubyBtaWdyYXRlLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGUtMTEtXHRcdG1tcC5vIG1vdmVfZXh0ZW50Lm8gbmFtZWkubyBwYWdlLWlvLm8gcmVhZHBhZ2UubyByZXNpemUubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyMTUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgaW5saW5lLm9gIERlcGVuZGVuY3kqKgoKUmlnaHQsIHNvIGBpbmxpbmUub2AgYWx3YXlzIGdldHMgYnVpbHQgd2hlbiBgRVhUNF9GU2AgaXMgZW5hYmxlZCwgaHVoPyBUaGF0IGZlZWxzIGxpa2UgYSBzaWduaWZpY2FudCwgcG90ZW50aWFsbHkgaW1wbGljaXQsIGRlcGVuZGVuY3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0dGVyLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgYGZzL2V4dDQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBvciBtYXliZSBldmVuIGRlZmF1bHQgc2V0dGluZ3Mgd2l0aGluIHRoYXQgS2NvbmZpZyB0aGF0IHRpZSBpbnRvIHRoZSBidWlsZCBvZiBgaW5saW5lLm9gLiBJcyBpdCBkaXJlY3RseSBjb250cm9sbGVkIGJ5IGEgc3BlY2lmaWMgb3B0aW9uLCBvciBkb2VzIGl0cyBpbmNsdXNpb24gc3RlbSBmcm9tIHNvbWUgYnJvYWRlciBkZXBlbmRlbmN5IGNoYWluIHdpdGhpbiB0aGUgRVhUNCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyAmIzM0O2Fsd2F5cyYjMzQ7IHNpdHVhdGlvbi4gR290dGEgZW5zdXJlIHRoaXMgYmVoYXZpb3IgaXMgd2VsbC11bmRlcnN0b29kIGFuZCBqdXN0aWZpYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgRVhUNF9GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbiAgIDQ6XHRcdHNlbGVjdCBCVUZGRVJfSEVBRFxuICAgNTpcdFx0c2VsZWN0IEpCRDJcbiAgIDY6XHRcdHNlbGVjdCBDUkMxNlxuICAgNzpcdFx0c2VsZWN0IENSQzMyXG4gICA4Olx0XHRzZWxlY3QgRlNfSU9NQVBcbiAgIDk6XHRcdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBUaGlzIGlzIHRoZSBuZXh0IGdlbmVyYXRpb24gb2YgdGhlIGV4dDMgZmlsZXN5c3RlbS5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLFxuICAxNDpcdFx0ICB0aGUgb24tZGlzayBmb3JtYXQgb2YgZXh0NCBpcyBub3QgZm9yd2FyZHMgY29tcGF0aWJsZSB3aXRoXG4gIDE1Olx0XHQgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXRcbiAgMTY6XHRcdCAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkXG4gIDE3Olx0XHQgIGFsbG9jYXRpb24sIHBlcnNpc3RlbnQgcHJlYWxsb2NhdGlvbiwgaGlnaCByZXNvbHV0aW9uIHRpbWUgc3RhbXBzLFxuICAxODpcdFx0ICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWRcbiAgMTk6XHRcdCAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdFxuICAyMDpcdFx0ICBodHRwOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcuXG4gIDIxOlx0XG4gIDIyOlx0XHQgIFRoZSBleHQ0IGZpbGVzeXN0ZW0gc3VwcG9ydHMgbW91bnRpbmcgYW4gZXh0MyBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZVxuICAyMzpcdFx0ICBhcmUgc29tZSBwZXJmb3JtYW5jZSBnYWlucyBmcm9tIHRoZSBkZWxheWVkIGFsbG9jYXRpb24gYW5kIGlub2RlXG4gIDI0Olx0XHQgIHRhYmxlIHJlYWRhaGVhZCwgdGhlIGJlc3QgcGVyZm9ybWFuY2UgZ2FpbnMgcmVxdWlyZSBlbmFibGluZyBleHQ0XG4gIDI1Olx0XHQgIGZlYXR1cmVzIGluIHRoZSBmaWxlc3lzdGVtIHVzaW5nIHR1bmUyZnMsIG9yIGZvcm1hdHRpbmcgYSBuZXdcbiAgMjY6XHRcdCAgZmlsZXN5c3RlbSBhcyBhbiBleHQ0IGZpbGVzeXN0ZW0gaW5pdGlhbGx5LiBXaXRob3V0IGV4cGxpY2l0IGVuYWJsaW5nXG4gIDI3Olx0XHQgIG9mIGV4dDQgZmVhdHVyZXMsIHRoZSBvbiBkaXNrIGZpbGVzeXN0ZW0gZm9ybWF0IHN0YXlzIGZ1bGx5IGJhY2t3YXJkXG4gIDI4Olx0XHQgIGNvbXBhdGlibGUuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGVcbiAgMzE6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGV4dDQuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4gIDM2Olx0XHRib29sIFwmIzM0O1VzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1wmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXG4gIDM4Olx0XHRkZXBlbmRzIG9uIEVYVDJfRlM9blxuICAzOTpcdFx0ZGVmYXVsdCB5XG4gIDQwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDUyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgZXh0NCBJbmxpbmUgRGF0YSBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZXNlIG1vZGlmaWNhdGlvbnMuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgZGVmaW5pdGVseSB0aGUgYGZzL2V4dDQvaW5saW5lLmNgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgaW5saW5lIGRhdGEgaW1wbGVtZW50YXRpb24gZGV0YWlscyB3aWxsIGJlIGhhbmdpbmcgb3V0LiBJJiMzOTttIGdvaW5nIHRvIHBvcmUgb3ZlciB0aGF0IGNvZGUg4oCTIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBpcyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGV4aXN0aW5nIG1lY2hhbmlzbXMgaGF2ZSBiZWVuIGFkYXB0ZWQsIGV4dGVuZGVkLCBvciByZXBsYWNlZCB0byBzdXBwb3J0IHRoZXNlIGlubGluZSBjYXBhYmlsaXRpZXMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eTogZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlcywgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCB0aGUgaGFuZGxpbmcgb2YgbWV0YWRhdGEsIGFuZCwgb2YgY291cnNlLCBob3cgdGhleSYjMzk7dmUgaW50ZWdyYXRlZCBpdCB3aXRoIHRoZSBleGlzdGluZyBleHQ0IGZpbGUgc3lzdGVtIGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgSSBjYW4gdW5lYXJ0aCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2lubGluZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2NTpcdFx0XHRyZXR1cm4gcmV0O1xuMTA2NjpcdFxuMTA2NzpcdFx0ZXh0NF91cGRhdGVfZmluYWxfZGUoZXh0NF9nZXRfaW5saW5lX3hhdHRyX3BvcyhkaXIsIGlsb2MpLCBvbGRfc2l6ZSxcbjEwNjg6XHRcdFx0XHQgICAgIEVYVDRfSShkaXIpLVx1MDAzZWlfaW5saW5lX3NpemUgLVxuMTA2OTpcdFx0XHRcdFx0XHRcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuMTA3MDpcdFx0ZGlyLVx1MDAzZWlfc2l6ZSA9IEVYVDRfSShkaXIpLVx1MDAzZWlfZGlza3NpemUgPSBFWFQ0X0koZGlyKS1cdTAwM2VpX2lubGluZV9zaXplO1xuMTA3MTpcdFx0cmV0dXJuIDA7XG4xMDcyOlx0fVxuMTA3MzpcdFxuMTA3NDpcdHN0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLFxuMTA3NTpcdFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgbGVuLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuMTA3NjpcdHtcbjEwNzc6XHRcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbjEwNzg6XHRcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7XG4xMDc5Olx0XHRcdC5zID0geyAubm90X2ZvdW5kID0gLUVOT0RBVEEsIH0sXG4xMDgwOlx0XHR9O1xuMTA4MTpcdFx0c3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpID0ge1xuMTA4MjpcdFx0XHQubmFtZV9pbmRleCA9IEVYVDRfWEFUVFJfSU5ERVhfU1lTVEVNLFxuMTA4MzpcdFx0XHQubmFtZSA9IEVYVDRfWEFUVFJfU1lTVEVNX0RBVEEsXG4xMDg0Olx0XHRcdC52YWx1ZSA9IE5VTEwsXG4xMDg1Olx0XHRcdC52YWx1ZV9sZW4gPSAwLFxuMTA4NjpcdFx0fTtcbjEwODc6XHRcdGludCBlcnJvcjtcbjEwODg6XHRcdHZvaWQgKmlfYmxvY2tfYnVmID0gTlVMTDtcbjEwODk6XHRcdHZvaWQgKnhhdHRyX2J1ZiA9IE5VTEw7XG4xMDkwOlx0XHR2b2lkICpoZWFkZXIgPSBOVUxMO1xuMTA5MTpcdFx0dm9pZCAqdGFpbCA9IE5VTEw7XG4xMDkyOlx0XHRpbnQgeGF0dHJfc2l6ZTtcbjEwOTM6XHRcdHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGU7XG4xMDk0Olx0XG4xMDk1Olx0XHRpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpO1xuMTA5NjpcdFx0aWYgKCFpX2Jsb2NrX2J1Zikge1xuMTA5NzpcdFx0XHRlcnJvciA9IC1FTk9NRU07XG4xMDk4Olx0XHRcdGRvd25fd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4xMDk5Olx0XHRcdGdvdG8gZXJyb3I7XG4xMTAwOlx0XHR9XG4xMTAxOlx0XHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuMTEwMjpcdFx0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuMTEwMzpcdFx0aWYgKGVycm9yKVxuMTEwNDpcdFx0XHRnb3RvIGVycm9yO1xuMTEwNTpcdFx0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoXHUwMDI2aXMuaWxvYyk7XG4xMTA2Olx0XHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xuMTEwNzpcdFx0dGFpbCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpO1xuMTEwODpcdFx0eGF0dHJfc2l6ZSA9IHRhaWwgLSBoZWFkZXI7XG4xMTA5Olx0XHR4YXR0cl9idWYgPSBrbWFsbG9jKHhhdHRyX3NpemUsIEdGUF9OT0ZTKTtcbjExMTA6XHRcdGlmICgheGF0dHJfYnVmKSB7XG4xMTExOlx0XHRcdGVycm9yID0gLUVOT01FTTtcbjExMTI6XHRcdFx0Z290byBlcnJvcjtcbjExMTM6XHRcdH1cbjExMTQ6XHRcdEJVRkZFUl9UUkFDRShpcy5pbG9jLmJoLCBcJiMzNDtnZXRfd3JpdGVfYWNjZXNzXCYjMzQ7KTtcbjExMTU6XHRcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cdTAwM2VpX3NiLCBpcy5pbG9jLmJoLCBFWFQ0X0pUUl9OT05FKTtcbjExMTY6XHRcdGlmIChlcnJvcilcbjExMTc6XHRcdFx0Z290byBlcnJvcjtcbjExMTg6XHRcdG1lbWNweShpX2Jsb2NrX2J1ZiwgKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4xMTE5Olx0XHRtZW1zZXQoKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4xMTIwOlx0XHRtZW1zZXQoZWktXHUwMDNlaV9kYXRhLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbjExMjE6XHRcdG1lbWNweSh4YXR0cl9idWYsIGhlYWRlciwgeGF0dHJfc2l6ZSk7XG4xMTIyOlx0XHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9leHRlbnRzKGlub2RlLVx1MDAzZWlfc2IpIFx1MDAyNlx1MDAyNlxuMTEyMzpcdFx0XHQoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpKSB7XG4xMTI0Olx0XHRcdGV4dDRfc2V0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4xMTI1Olx0XHRcdGV4dDRfZXh0X3RyZWVfaW5pdChoYW5kbGUsIGlub2RlKTtcbjExMjY6XHRcdFx0c3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCAwLCBOVUxMLCAwKTtcbjExMjc6XHRcbjExMjg6XHRcdFx0aWYgKElTX0VSUihwYXRoKSkge1xuMTEyOTpcdFx0XHRcdGVycm9yID0gUFRSX0VSUihwYXRoKTtcbjExMzA6XHRcdFx0XHRnb3RvIHJlY292ZXJ5O1xuMTEzMTpcdFx0XHR9XG4xMTMyOlx0XHRcdHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleDtcbjExMzM6XHRcbjExMzQ6XHRcdFx0bmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMigwKTtcbjExMzU6XHRcdFx0bmV3ZXguZWVfbGVuID0gY3B1X3RvX2xlMTYoMSk7XG4xMTM2Olx0XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcdTAwMjZuZXdleCwgYmxvY2spO1xuMTEzNzpcdFx0XHRwYXRoID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCBcdTAwMjZuZXdleCwgMCk7XG4xMTM4Olx0XHRcdGlmIChJU19FUlIocGF0aCkpIHtcbjExMzk6XHRcdFx0XHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XG4xMTQwOlx0XHRcdFx0aWYgKGVycm9yID09IC1FRFFVT1QgfHwgZXJyb3IgPT0gLUVOT1NQQylcbjExNDE6XHRcdFx0XHRcdGdvdG8gcmVjb3Zlcnk7XG4xMTQyOlx0XHRcdFx0ZWxzZVxuMTE0MzpcdFx0XHRcdFx0Z290byBub19mcmVlO1xuMTE0NDpcdFx0XHR9IGVsc2Uge1xuMTE0NTpcdFx0XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbjExNDY6XHRcdFx0fVxuMTE0NzpcdFx0fSBlbHNlIHtcbjExNDg6XHRcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7XG4xMTQ5Olx0XHR9XG4xMTUwOlx0XHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXHUwMDI2aSwgXHUwMDI2aXMpO1xuMTE1MTpcdFx0aWYgKGVycm9yKVxuMTE1MjpcdFx0XHRnb3RvIHJlY292ZXJ5O1xuMTE1MzpcdFx0aWYgKCFpcy5zLm5vdF9mb3VuZClcbjExNTQ6XHRcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4xMTU1Olx0cmVjb3Zlcnk6XG4xMTU2Olx0XHRpZiAoZXJyb3IpIHtcbjExNTc6XHRcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbjExNTg6XHRcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbjExNTk6XHRcdFx0bWVtY3B5KGhlYWRlciwgeGF0dHJfYnVmLCB4YXR0cl9zaXplKTtcbjExNjA6XHRub19mcmVlOlxuMTE2MTpcdFx0XHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xuMTE2MjpcdFx0XHRtZW1jcHkoKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgaV9ibG9ja19idWYsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuMTE2MzpcdFx0XHRtZW1jcHkoZWktXHUwMDNlaV9kYXRhLCByYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4xMTY0Olx0XHRcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNDIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIERlZXBlciBpbnRvIElubGluZSBEYXRhIGluIGV4dDQqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYGZzL2V4dDQvaW5saW5lLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhpcyBhcmVhLiBJdCBzZWVtcyBsaWtlIHRoZSBpbW1lZGlhdGUgY29udGV4dCBpc24mIzM5O3QgZW5vdWdoLCBzbyBsZXQmIzM5O3Mgem9vbSBvdXQgYSBiaXQuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IGlubGluZSBkYXRhIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhpcyBmaWxlLCBwZXJoYXBzIHRyYWNpbmcgZXhlY3V0aW9uIHBhdGhzIGZyb20gcmVsYXRlZCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgYmxvY2sgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGNvZGUsIGJlY2F1c2UgdGhlIGlubGluZSBkYXRhIHN0b3JhZ2UgaXMgc3VjaCBhbiBpbnRlcmVzdGluZyBvcHRpbWl6YXRpb24uIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkgbWlnaHQgYmUgbWlzc2luZy4gSSBuZWVkIHRvIHZlcmlmeSBhc3N1bXB0aW9ucyBhYm91dCBob3cgZGF0YSBpcyByZWFkIGFuZCB3cml0dGVuIGluIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby4gSXQmIzM5O3MgdGltZSB0byB0aG9yb3VnaGx5IHNjcnV0aW5pemUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gYnVpbGQgYSBjb21wbGV0ZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5saW5lLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTY1Olx0XHRcdGdldF9iaChpcy5pbG9jLmJoKTtcbjExNjY6XHRcdFx0ZXh0NF9tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgXHUwMDI2aXMuaWxvYyk7XG4xMTY3Olx0XHR9IGVsc2Uge1xuMTE2ODpcdFx0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xuMTE2OTpcdFx0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4xMTcwOlx0XHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbjExNzE6XHRcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuMTE3MjpcdFx0XHR9XG4xMTczOlx0XHRcdGdldF9iaChpcy5pbG9jLmJoKTtcbjExNzQ6XHRcdFx0ZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbjExNzU6XHRcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9vZmYgPSAwO1xuMTE3NjpcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xuMTE3NzpcdFx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4xMTc4Olx0XHRcdGJyZWxzZShiaCk7XG4xMTc5Olx0XHR9XG4xMTgwOlx0XHRnb3RvIG91dDtcbjExODE6XHRlcnJvcjpcbjExODI6XHRcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7XG4xMTgzOlx0XHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xuMTE4NDpcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbjExODU6XHRvdXQ6XG4xMTg2Olx0XHRicmVsc2UoaXMuaWxvYy5iaCk7XG4xMTg3Olx0XHR1cF93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbjExODg6XHRcdGtmcmVlKGlfYmxvY2tfYnVmKTtcbjExODk6XHRcdGtmcmVlKHhhdHRyX2J1Zik7XG4xMTkwOlx0XHRyZXR1cm4gZXJyb3I7XG4xMTkxOlx0fVxuMTE5MjpcdFxuMTE5MzpcdHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuMTE5NDpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuMTE5NTpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKVxuMTE5NjpcdHtcbjExOTc6XHRcdGludCBlcnJvcjtcbjExOTg6XHRcdHZvaWQgKmJ1ZiA9IE5VTEw7XG4xMTk5Olx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbjEyMDA6XHRcdGludCBpbmxpbmVfc2l6ZTtcbjEyMDE6XHRcdGV4dDRfZnNibGtfdCBuZXdibG9jayA9IDA7XG4xMjAyOlx0XHRzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXI7XG4xMjAzOlx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuMTIwNDpcdFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jaztcbjEyMDU6XHRcbjEyMDY6XHRcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xuMTIwNzpcdFx0YnVmID0ga21hbGxvYyhpbmxpbmVfc2l6ZSwgR0ZQX05PRlMpO1xuMTIwODpcdFx0aWYgKCFidWYpIHtcbjEyMDk6XHRcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuMTIxMDpcdFx0XHRnb3RvIG91dDtcbjEyMTE6XHRcdH1cbjEyMTI6XHRcbjEyMTM6XHRcdGVycm9yID0gZXh0NF9yZWFkX2lubGluZV9kYXRhKGlub2RlLCBidWYsIGlubGluZV9zaXplLCBpbG9jKTtcbjEyMTQ6XHRcdGlmIChlcnJvciBcdTAwM2MgMClcbjEyMTU6XHRcdFx0Z290byBvdXQ7XG4xMjE2Olx0XG4xMjE3Olx0XHQvKlxuMTIxODpcdFx0ICogTWFrZSBzdXJlIHRoZSBpbmxpbmUgZGlyZWN0b3J5IGVudHJpZXMgcGFzcyBjaGVja3MgYmVmb3JlIHdlIHRyeSB0b1xuMTIxOTpcdFx0ICogY29udmVydCB0aGVtLCBzbyB0aGF0IHdlIGF2b2lkIHRvdWNoaW5nIHN0dWZmIHRoYXQgbmVlZHMgZnNjay5cbjEyMjA6XHRcdCAqL1xuMTIyMTpcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuMTIyMjpcdFx0XHRlcnJvciA9IGV4dDRfY2hlY2tfYWxsX2RlKGlub2RlLCBpbG9jLVx1MDAzZWJoLFxuMTIyMzpcdFx0XHRcdFx0XHRidWYgJiM0MzsgRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUsXG4xMjI0Olx0XHRcdFx0XHRcdGlubGluZV9zaXplIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUpO1xuMTIyNTpcdFx0XHRpZiAoZXJyb3IpXG4xMjI2Olx0XHRcdFx0Z290byBvdXQ7XG4xMjI3Olx0XHR9XG4xMjI4Olx0XG4xMjI5Olx0XHRtZW1zZXQoXHUwMDI2YXIsIDAsIHNpemVvZihhcikpO1xuMTIzMDpcdFx0YXIuaW5vZGUgPSBpbm9kZTtcbjEyMzE6XHRcdGFyLmxvZ2ljYWwgPSAwO1xuMTIzMjpcdFx0YXIubGVuID0gMTtcbjEyMzM6XHRcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4xMjM0Olx0XHRcdGFyLmZsYWdzID0gRVhUNF9NQl9ISU5UX0RBVEE7XG4xMjM1Olx0XHRlbHNlXG4xMjM2Olx0XHRcdGFyLmZsYWdzID0gMDtcbjEyMzc6XHRcdG5ld2Jsb2NrID0gZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZSwgXHUwMDI2YXIsIFx1MDAyNmVycm9yKTtcbjEyMzg6XHRcdGlmIChlcnJvciBcdTAwM2MgMClcbjEyMzk6XHRcdFx0Z290byBvdXQ7XG4xMjQwOlx0XHRhbGxvY2F0ZWRfYmxvY2sgPSBFWFQ0X0MyQihzYmksIGFyLmxlbik7XG4xMjQxOlx0XHRiaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLCBuZXdibG9jayk7XG4xMjQyOlx0XHRpZiAoIWJoKSB7XG4xMjQzOlx0XHRcdGVycm9yID0gLUVOT01FTTtcbjEyNDQ6XHRcdFx0Z290byBvdXRfYmg7XG4xMjQ1Olx0XHR9XG4xMjQ2Olx0XG4xMjQ3Olx0XHRsb2NrX2J1ZmZlcihiaCk7XG4xMjQ4Olx0XHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGlub2RlLVx1MDAzZWlfc2IsIGJoLFxuMTI0OTpcdFx0XHRcdFx0XHQgICAgICAgRVhUNF9KVFJfTk9ORSk7XG4xMjUwOlx0XHRpZiAoZXJyb3IpIHtcbjEyNTE6XHRcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4xMjUyOlx0XHRcdGVycm9yID0gLUVJTztcbjEyNTM6XHRcdFx0Z290byBvdXRfYmg7XG4xMjU0Olx0XHR9XG4xMjU1Olx0XHRtZW1zZXQoYmgtXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbjEyNTY6XHRcbjEyNTc6XHRcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4xMjU4Olx0XHRcdG1lbWNweShiaC1cdTAwM2ViX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpO1xuMTI1OTpcdFx0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbjEyNjA6XHRcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4xMjYxOlx0XHRcdGVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLFxuMTI2MjpcdFx0XHRcdFx0XHRcdCAgIGlub2RlLCBiaCk7XG4xMjYzOlx0XHR9IGVsc2Uge1xuMTI2NDpcdFx0XHR1bmxvY2tfYnVmZmVyKGJoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5OTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGV4dDQgSW5saW5lIERhdGEgQ29udmVyc2lvbiBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBmcy9leHQ0L2lubGluZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBhbmQgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYC4gRmlyc3QsIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGdldCBhIHNlbnNlIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuCgpgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AgaXMgY2FsbGVkIGJ5IHR3byBmdW5jdGlvbnM6IGBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5YCBhbmQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAuICBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCwgaW4gdHVybiwgaXMgYSBrZXkgZnVuY3Rpb24sIGFzIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCBjYWxsZWQgZnJvbSBzZXZlcmFsIGNyaXRpY2FsIGFyZWFzOiBgZXh0NF9zZXRhdHRyYCwgYGV4dDRfZmFsbG9jYXRlYCwgYGV4dDRfcGFnZV9ta3dyaXRlYCwgYGV4dDRfYmVnaW5fZW5hYmxlX3Zlcml0eWAgYW5kIGBleHQ0X3NldF9jb250ZXh0YCAod2hpY2ggaXMgZnNjcnlwdCByZWxhdGVkLCBnb29kIHRvIGtlZXAgaW4gbWluZCkuCgpOb3csIGBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5YCBpcyBjYWxsZWQgZnJvbSBgZXh0NF9hZGRfZW50cnlgIGxvY2F0ZWQgaW4gYGZzL2V4dDQvbmFtZWkuY2AuIEdvb2QsIHRoYXQgZ2l2ZXMgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGluZ3MgZml0LgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZSBvZiB0aGVzZSBmdW5jdGlvbnMuIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgaXMgc3RhdGljLCB3aGljaCBpcyB3aGF0IEkgc3VzcGVjdGVkLiBTYW1lIGdvZXMgZm9yIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYC4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBpbnRlcm5hbCB0byB0aGUgYC5jYCBmaWxlLiBIb3dldmVyLCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBpcyAqbm90KiBzdGF0aWMsIHNvIGl0JiMzOTtzIGV4cG9ydGVkLCBhbmQgYGV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlgIGlzIGFsc28gbm90IHN0YXRpYy4gVGhhdCYjMzk7cyBjb25zaXN0ZW50IHdpdGggd2hhdCBJJiMzOTt2ZSBzZWVuIHdpdGggdGhlIGNhbGwgZ3JhcGguCgpUaW1lIHRvIGRyaWxsIGludG8gdGhlIGNhbGxlcnMgYW5kIGRlZmluaXRpb25zIG9mIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgIG5vdywgc2luY2UgaXQgc2VlbXMgdG8gYmUgdGhlIGxpbmNocGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDQuaD0zNzk2PWV4dGVybiBpbnQgZXh0NF9pbmxpbmVfZGF0YV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgKmhhc19pbmxpbmUpO1xuZnMvZXh0NC9leHQ0LmgtMzc5Ny1cbmZzL2V4dDQvZXh0NC5oOjM3OTg6ZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSk7XG5mcy9leHQ0L2V4dDQuaC0zNzk5LVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9NTQ2PWludCBleHQ0X3JlYWRwYWdlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNTcyLVxuZnMvZXh0NC9pbmxpbmUuYzo1NzM6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvZXh0NC9pbmxpbmUuYy01NzQtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xMDc0PXN0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTE5Mi1cbmZzL2V4dDQvaW5saW5lLmM6MTE5MzpzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbmZzL2V4dDQvaW5saW5lLmMtMTE5NC1cdFx0XHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jPTE5NDk9aW50IGV4dDRfaW5saW5lX2RhdGFfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpoYXNfaW5saW5lKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMjA2MC1cbmZzL2V4dDQvaW5saW5lLmM6MjA2MTppbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lubGluZS5jLTIwNjIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTIzMgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBJbmxpbmUgRGF0YSBDb252ZXJzaW9uIENoYW5nZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtb2RpZmljYXRpb24gdG8gdGhlIGV4dDQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYy4gRmlyc3QsIEkgc2hvdWxkIHZlcmlmeSB0aGF0IGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgYW5kIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCwgZXZlbiB0aGUgc3RhdGljIGZ1bmN0aW9ucyBpbnZvbHZlZCwgYXJlIGFjY2Vzc2libGUgc3ltYm9scy4gS25vd2luZyB0aGUgTGludXgga2VybmVsJiMzOTtzIHN5bWJvbCBiZWhhdmlvciwgSSYjMzk7bSBwcmV0dHkgc3VyZSBzdGF0aWMgZnVuY3Rpb25zIGluIGAuY2AgZmlsZXMgKmFyZSogc3ltYm9scyB1bmxlc3MgaW5saW5lZC4gQnV0IGp1c3QgdG8gYmUgc2FmZSwgSSYjMzk7bGwgaW5jbHVkZSB0aG9zZSBmdW5jdGlvbnMgYWxvbmcgd2l0aCB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIGxpa2UgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgYW5kIGBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5YCDigJMgdGhhdCYjMzk7cyBnb29kIHByYWN0aWNlIGZvciBkZWJ1Z2dpbmcsIGFuZCBmdXp6aW5nIGxhdGVyLgoKTm93LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSBgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhYCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AuIEludGVyZXN0aW5nLiBNb3JlIHNpZ25pZmljYW50bHksIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBoYXMgYmVlbiByZXdvcmtlZC4gUHJldmlvdXNseSwgaXQgZGVzdHJveWVkIHRoZSBpbmxpbmUgZGF0YSBhbmQgdGhlbiB1c2VkIGBleHQ0X21hcF9ibG9ja3NgLiBOb3csIGl0JiMzOTtzIGFsbG9jYXRpbmcgbmV3IGJsb2NrcyB1c2luZyBgZXh0NF9tYl9uZXdfYmxvY2tzYCwgd3JpdGluZyBkYXRhIHRvIHRoZSBidWZmZXIgaGVhZCwgYW5kIHRoZW4gKnVzaW5nKiBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIHRvIGluc2VydCB0aGUgZXh0ZW50IG9yIGJsb2NrICphbmQqIHJlbW92ZSB0aGUgaW5saW5lIGRhdGEgeGF0dHIuIE9mIGNvdXJzZSwgd2UmIzM5O3JlIGJ1aWxkaW5nIGluIGVycm9yIHJlY292ZXJ5IGZvciBhbGxvY2F0aW9uIG9yIGV4dGVudCBpbnNlcnRpb24gZmFpbHVyZXMuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IGlubGluZSBkYXRhIGlzIGNvbnZlcnRlZCwgcmVhbGx5IGRyaWxsaW5nIGRvd24gb24gdGhlIGNvcmUgbG9naWMuCgpHaXZlbiB0aGF0IGV4dDQgaXMgYSBjb3JlIGZpbGVzeXN0ZW0sIGZ1bGx5IGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBzeXNjYWxscyB0aGF0IHdlIHVzZSBhbGwgdGhlIHRpbWUgKGBmYWxsb2NhdGVgLCBgdHJ1bmNhdGVgLCBgd3JpdGVgLCBgbWtkaXJgLCBgb3BlbmAsIGV0Yy4pIHRoaXMgaXMgcmlwZSBmb3IgZnV6emluZy4KCkRlZmluaXRlbHkgd29ydGggdGhlIGVmZm9ydCEgVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSwgY29yZSBmaWxlc3lzdGVtIGNvZGUgc3BlY2lmaWNhbGx5IGluIGBmcy9leHQ0L2lubGluZS5jYC4gQmVmb3JlIEkgcHJvY2VlZCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWdzLiBgQ09ORklHX0VYVDRfRlNgIGlzIGEgZ2l2ZW4sIG9idmlvdXNseS4gSSBhbHNvIG5lZWQgdG8gZW5zdXJlIG5vIG90aGVyIGNvbmZpZ3MgYXJlIHJlcXVpcmVkIGFuZCBzcGVjaWZpY2FsbHkgdmVyaWZ5IGFueSBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBkaWcgaW50byB0aGUgZXh0NCBLY29uZmlnIGFuZCBjb2RlIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIGlubGluZSBkYXRhLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SU5MSU5FX0RBVEEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvY3J5cHRvLmM9MTMyPXN0YXRpYyBpbnQgZXh0NF9zZXRfY29udGV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICpjdHgsIHNpemVfdCBsZW4sXG4tLVxuZnMvZXh0NC9jcnlwdG8uYy0xNzktXHRcdFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSxcbmZzL2V4dDQvY3J5cHRvLmM6MTgwOlx0XHRcdFx0XHRFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG5mcy9leHQ0L2NyeXB0by5jLTE4MS1cdFx0XHQvKlxuLS1cbmZzL2V4dDQvZXh0NC5oPTQ0MD1zdHJ1Y3QgZmxleF9ncm91cHMge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTUwOS1cbmZzL2V4dDQvZXh0NC5oOjUxMDojZGVmaW5lIEVYVDRfSU5MSU5FX0RBVEFfRkxcdFx0MHgxMDAwMDAwMCAvKiBJbm9kZSBoYXMgaW5saW5lIGRhdGEuICovXG5mcy9leHQ0L2V4dDQuaC01MTEtI2RlZmluZSBFWFQ0X1BST0pJTkhFUklUX0ZMXHRcdDB4MjAwMDAwMDAgLyogQ3JlYXRlIHdpdGggcGFyZW50cyBwcm9qaWQgKi9cbi0tXG5mcy9leHQ0L2V4dDQuaC01NDEtXHRcdFx0XHRcdCBFWFQ0X1ZFUklUWV9GTCB8IFxcXG5mcy9leHQ0L2V4dDQuaDo1NDI6XHRcdFx0XHRcdCBFWFQ0X0lOTElORV9EQVRBX0ZMKVxuZnMvZXh0NC9leHQ0LmgtNTQzLVxuLS1cbmZzL2V4dDQvZXh0NC5oLTU2My0jZGVmaW5lIEVYVDRfREFYX01VVF9FWENMIChFWFQ0X1ZFUklUWV9GTCB8IEVYVDRfRU5DUllQVF9GTCB8XFxcbmZzL2V4dDQvZXh0NC5oOjU2NDpcdFx0XHQgICBFWFQ0X0pPVVJOQUxfREFUQV9GTCB8IEVYVDRfSU5MSU5FX0RBVEFfRkwpXG5mcy9leHQ0L2V4dDQuaC01NjUtXG4tLVxuZnMvZXh0NC9leHQ0Lmg9NTgwPWVudW0ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTYwNi1cdEVYVDRfSU5PREVfREFYXHRcdD0gMjUsXHQvKiBJbm9kZSBpcyBEQVggKi9cbmZzL2V4dDQvZXh0NC5oOjYwNzpcdEVYVDRfSU5PREVfSU5MSU5FX0RBVEFcdD0gMjgsXHQvKiBEYXRhIGluIGlub2RlLiAqL1xuZnMvZXh0NC9leHQ0LmgtNjA4LVx0RVhUNF9JTk9ERV9QUk9KSU5IRVJJVFx0PSAyOSxcdC8qIENyZWF0ZSB3aXRoIHBhcmVudHMgcHJvamlkICovXG4tLVxuZnMvZXh0NC9leHQ0Lmg9NjI5PXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2NoZWNrX2ZsYWdfdmFsdWVzKHZvaWQpXG4tLVxuZnMvZXh0NC9leHQ0LmgtNjUyLVx0Q0hFQ0tfRkxBR19WQUxVRShFQV9JTk9ERSk7XG5mcy9leHQ0L2V4dDQuaDo2NTM6XHRDSEVDS19GTEFHX1ZBTFVFKElOTElORV9EQVRBKTtcbmZzL2V4dDQvZXh0NC5oLTY1NC1cdENIRUNLX0ZMQUdfVkFMVUUoUFJPSklOSEVSSVQpO1xuLS1cbmZzL2V4dDQvZXh0NC5oPTIwMjY9ZW51bSB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtMjAzMi1cdEVYVDRfU1RBVEVfTkVXRU5UUlksXHRcdC8qIEZpbGUganVzdCBhZGRlZCB0byBkaXIgKi9cbmZzL2V4dDQvZXh0NC5oOjIwMzM6XHRFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSxcdC8qIG1heSBoYXZlIGluLWlub2RlIGRhdGEgKi9cbmZzL2V4dDQvZXh0NC5oLTIwMzQtXHRFWFQ0X1NUQVRFX0VYVF9QUkVDQUNIRUQsXHQvKiBleHRlbnRzIGhhdmUgYmVlbiBwcmVjYWNoZWQgKi9cbi0tXG5mcy9leHQ0L2V4dDQuaD0yMTI5PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1hcHBpbmdfbWV0YWRhdGFfYmhzICpleHQ0X2lfbWV0YWRhdGFfYmhzKFxuLS1cbmZzL2V4dDQvZXh0NC5oLTIyMTktI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTEFSR0VESVJcdFx0MHg0MDAwIC8qIFx1MDAzZTJHQiBvciAzLWx2bCBodHJlZSAqL1xuZnMvZXh0NC9leHQ0Lmg6MjIyMDojZGVmaW5lIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9JTkxJTkVfREFUQVx0MHg4MDAwIC8qIGRhdGEgaW4gaW5vZGUgKi9cbmZzL2V4dDQvZXh0NC5oLTIyMjEtI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRU5DUllQVFx0XHQweDEwMDAwXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MjMxOD1FWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRlVOQ1MobGFyZ2VkaXIsXHRcdExBUkdFRElSKVxuZnMvZXh0NC9leHQ0Lmg6MjMxOTpFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRlVOQ1MoaW5saW5lX2RhdGEsXHRJTkxJTkVfREFUQSlcbmZzL2V4dDQvZXh0NC5oLTIzMjAtRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZVTkNTKGVuY3J5cHQsXHRcdEVOQ1JZUFQpXG5mcy9leHQ0L2V4dDQuaD0yMzIxPUVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GVU5DUyhjYXNlZm9sZCxcdFx0Q0FTRUZPTEQpXG4tLVxuZnMvZXh0NC9leHQ0LmgtMjM0Ny1cdFx0XHRcdFx0IEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9NTVAgfCBcXFxuZnMvZXh0NC9leHQ0Lmg6MjM0ODpcdFx0XHRcdFx0IEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9JTkxJTkVfREFUQSB8IFxcXG5mcy9leHQ0L2V4dDQuaC0yMzQ5LVx0XHRcdFx0XHQgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0VOQ1JZUFQgfCBcXFxuLS1cbmZzL2V4dDQvZXh0NC5oPTMxNDk9dm9pZCBleHQ0X3NldF9pbm9kZV9tYXBwaW5nX29yZGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuZnMvZXh0NC9leHQ0LmgtMzE1MC0jZGVmaW5lIEZBTExfQkFDS19UT19OT05ERUxBTExPQyAxXG5mcy9leHQ0L2V4dDQuaDozMTUxOiNkZWZpbmUgQ09OVkVSVF9JTkxJTkVfREFUQVx0IDJcbmZzL2V4dDQvZXh0NC5oLTMxNTItXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MzgwMD1zdGF0aWMgaW5saW5lIGludCBleHQ0X2hhc19pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZXh0NC9leHQ0LmgtMzgwMS17XG5mcy9leHQ0L2V4dDQuaDozODAyOlx0cmV0dXJuIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvZXh0NC5oLTM4MDMtXHQgICAgICAgRVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9vZmY7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NTk1MD1pbnQgZXh0NF9jbHVfbWFwcGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxjbHUpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTk2Mi1cdCAqL1xuZnMvZXh0NC9leHRlbnRzLmM6NTk2MzpcdGlmIChleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSB8fFxuZnMvZXh0NC9leHRlbnRzLmMtNTk2NC1cdCAgICBleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NjIyOT1pbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy02MjM2LVxuZnMvZXh0NC9leHRlbnRzLmM6NjIzNzpcdGlmIChleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpXG5mcy9leHQ0L2V4dGVudHMuYy02MjM4LVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTExMT1zdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTEzMi1cbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxMTMzOlx0aWYgKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xMTM0LVx0XHRpbm9kZV9sZW4gPSBFWFQ0X0lOT0RFX1NJWkUoaW5vZGUtXHUwMDNlaV9zYik7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTE5NDQ9c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTkzLVx0XHR9XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTk5NDpcdH0gZWxzZSBpZiAobGUzMl90b19jcHUocmF3X2lub2RlLVx1MDAzZWlfZmxhZ3MpIFx1MDAyNiBFWFQ0X0lOTElORV9EQVRBX0ZMKSB7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMTk5NS1cdFx0bWVtY3B5KHJhd19pbm9kZS1cdTAwM2VpX2Jsb2NrLCByYXdfZmNfaW5vZGUtXHUwMDNlaV9ibG9jayxcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjAyMy1cdCAqL1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIwMjQ6XHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSlcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMDI1LVx0XHRleHQ0X2V4dF9yZXBsYXlfc2V0X2libG9ja3MoaW5vZGUpO1xuLS1cbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMzI4PXN0YXRpYyB2b2lkIGV4dDRfZmNfc2V0X2JpdG1hcHNfYW5kX2NvdW50ZXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzNDctXHRcdGVuZCA9IEVYVF9NQVhfQkxPQ0tTO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIzNDg6XHRcdGlmIChleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpIHtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0yMzQ5LVx0XHRcdGlwdXQoaW5vZGUpO1xuLS1cbmZzL2V4dDQvZmlsZS5jPTUyMT1zdGF0aWMgc3NpemVfdCBleHQ0X2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL2V4dDQvZmlsZS5jLTU3MC1cdCAqL1xuZnMvZXh0NC9maWxlLmM6NTcxOlx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuZnMvZXh0NC9maWxlLmMtNTcyLVxuLS1cbmZzL2V4dDQvaWFsbG9jLmM9OTMzPXN0cnVjdCBpbm9kZSAqX19leHQ0X25ld19pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9leHQ0L2lhbGxvYy5jLTEzMDktXHQgICAgKCEoZWktXHUwMDNlaV9mbGFncyBcdTAwMjYgKEVYVDRfREFYX0ZMfEVYVDRfRUFfSU5PREVfRkwpKSB8fCBTX0lTRElSKG1vZGUpKSlcbmZzL2V4dDQvaWFsbG9jLmM6MTMxMDpcdFx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbmZzL2V4dDQvaWFsbG9jLmMtMTMxMS1cdHJldCA9IGlub2RlO1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTktI2RlZmluZSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBXHRcJiMzNDtkYXRhXCYjMzQ7XG5mcy9leHQ0L2lubGluZS5jOjIwOiNkZWZpbmUgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRVx0KChzaXplb2YoX19sZTMyKSAqIEVYVDRfTl9CTE9DS1MpKVxuZnMvZXh0NC9pbmxpbmUuYy0yMS0jZGVmaW5lIEVYVDRfSU5MSU5FX0RPVERPVF9PRkZTRVRcdDJcbi0tXG5mcy9leHQ0L2lubGluZS5jPTExMj1pbnQgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMzYtXG5mcy9leHQ0L2lubGluZS5jOjEzNzpcdHJldHVybiBtYXhfaW5saW5lX3NpemUgJiM0MzsgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRTtcbmZzL2V4dDQvaW5saW5lLmMtMTM4LX1cbi0tXG5mcy9leHQ0L2lubGluZS5jPTE0NT1pbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTc1LVx0XHRcdFx0XHQodm9pZCAqKWV4dDRfcmF3X2lub2RlKFx1MDAyNmlzLmlsb2MpKTtcbmZzL2V4dDQvaW5saW5lLmM6MTc2Olx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFICYjNDM7XG5mcy9leHQ0L2lubGluZS5jLTE3Ny1cdFx0XHRcdGxlMzJfdG9fY3B1KGlzLnMuaGVyZS1cdTAwM2VlX3ZhbHVlX3NpemUpO1xuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTg0PXN0YXRpYyBpbnQgZXh0NF9yZWFkX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZmZlcixcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE5Ny1cbmZzL2V4dDQvaW5saW5lLmM6MTk4Olx0Y3BfbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuZnMvZXh0NC9pbmxpbmUuYy0xOTktXG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0yMjk9c3RhdGljIHZvaWQgZXh0NF93cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMjQ1LVxuZnMvZXh0NC9pbmxpbmUuYzoyNDY6XHRpZiAocG9zIFx1MDAzYyBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKSB7XG5mcy9leHQ0L2lubGluZS5jOjI0NzpcdFx0Y3BfbGVuID0gcG9zICYjNDM7IGxlbiBcdTAwM2UgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSA/XG5mcy9leHQ0L2lubGluZS5jOjI0ODpcdFx0XHQgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSAtIHBvcyA6IGxlbjtcbmZzL2V4dDQvaW5saW5lLmMtMjQ5LVx0XHRtZW1jcHkoKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jayAmIzQzOyBwb3MsIGJ1ZmZlciwgY3BfbGVuKTtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTI1OC1cbmZzL2V4dDQvaW5saW5lLmM6MjU5Olx0cG9zIC09IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XG5mcy9leHQ0L2lubGluZS5jLTI2MC1cdGhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0yNjg9c3RhdGljIGludCBleHQ0X2NyZWF0ZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMjkwLVxuZnMvZXh0NC9pbmxpbmUuYzoyOTE6XHRpZiAobGVuIFx1MDAzZSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKSB7XG5mcy9leHQ0L2lubGluZS5jLTI5Mi1cdFx0dmFsdWUgPSBFWFQ0X1pFUk9fWEFUVFJfVkFMVUU7XG5mcy9leHQ0L2lubGluZS5jOjI5MzpcdFx0bGVuIC09IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XG5mcy9leHQ0L2lubGluZS5jLTI5NC1cdH0gZWxzZSB7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0zMTYtXHRcdFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSxcbmZzL2V4dDQvaW5saW5lLmM6MzE3Olx0XHRcdFx0XHQgICAgICAgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuZnMvZXh0NC9pbmxpbmUuYy0zMTgtXHRcdGdvdG8gb3V0O1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMzIxLVx0bWVtc2V0KCh2b2lkICopZXh0NF9yYXdfaW5vZGUoXHUwMDI2aXMuaWxvYyktXHUwMDNlaV9ibG9jayxcbmZzL2V4dDQvaW5saW5lLmM6MzIyOlx0XHQwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbmZzL2V4dDQvaW5saW5lLmMtMzIzLVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMzI1LVx0XHRcdFx0ICAgICAgKHZvaWQgKilleHQ0X3Jhd19pbm9kZShcdTAwMjZpcy5pbG9jKSk7XG5mcy9leHQ0L2lubGluZS5jOjMyNjpcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9pbmxpbmVfc2l6ZSA9IGxlbiAmIzQzOyBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFO1xuZnMvZXh0NC9pbmxpbmUuYy0zMjctXHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG5mcy9leHQ0L2lubGluZS5jOjMyODpcdGV4dDRfc2V0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xuZnMvZXh0NC9pbmxpbmUuYy0zMjktXHRnZXRfYmgoaXMuaWxvYy5iaCk7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0zMzc9c3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMzY3LVxuZnMvZXh0NC9pbmxpbmUuYzozNjg6XHRsZW4gLT0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRTtcbmZzL2V4dDQvaW5saW5lLmMtMzY5LVx0dmFsdWUgPSBremFsbG9jKGxlbiwgR0ZQX05PRlMpO1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMzk1LVx0XHRcdFx0ICAgICAgKHZvaWQgKilleHQ0X3Jhd19pbm9kZShcdTAwMjZpcy5pbG9jKSk7XG5mcy9leHQ0L2lubGluZS5jOjM5NjpcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9pbmxpbmVfc2l6ZSA9IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgJiM0MztcbmZzL2V4dDQvaW5saW5lLmMtMzk3LVx0XHRcdFx0bGUzMl90b19jcHUoaXMucy5oZXJlLVx1MDAzZWVfdmFsdWVfc2l6ZSk7XG5mcy9leHQ0L2lubGluZS5jOjM5ODpcdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG5mcy9leHQ0L2lubGluZS5jLTM5OS1cdGdldF9iaChpcy5pbG9jLmJoKTtcbi0tXG5mcy9leHQ0L2lubGluZS5jPTQwOD1zdGF0aWMgaW50IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNDEzLVxuZnMvZXh0NC9pbmxpbmUuYzo0MTQ6XHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKVxuZnMvZXh0NC9pbmxpbmUuYy00MTUtXHRcdHJldHVybiAtRU5PU1BDO1xuLS1cbmZzL2V4dDQvaW5saW5lLmM9NDM3PXN0YXRpYyBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNDc3LVx0bWVtc2V0KCh2b2lkICopZXh0NF9yYXdfaW5vZGUoXHUwMDI2aXMuaWxvYyktXHUwMDNlaV9ibG9jayxcbmZzL2V4dDQvaW5saW5lLmM6NDc4Olx0XHQwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbmZzL2V4dDQvaW5saW5lLmM6NDc5Olx0bWVtc2V0KGVpLVx1MDAzZWlfZGF0YSwgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG5mcy9leHQ0L2lubGluZS5jLTQ4MC1cbi0tXG5mcy9leHQ0L2lubGluZS5jLTQ4Ny1cdH1cbmZzL2V4dDQvaW5saW5lLmM6NDg4Olx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKTtcbmZzL2V4dDQvaW5saW5lLmMtNDg5LVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtNDk0LVx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9zaXplID0gMDtcbmZzL2V4dDQvaW5saW5lLmM6NDk1Olx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuZnMvZXh0NC9pbmxpbmUuYy00OTYtb3V0OlxuLS1cbmZzL2V4dDQvaW5saW5lLmM9NTczPXN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTU4Ny1cdFx0ICovXG5mcy9leHQ0L2lubGluZS5jOjU4ODpcdFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuZnMvZXh0NC9pbmxpbmUuYy01ODktXHRcdHJldHVybiAwO1xuLS1cbmZzL2V4dDQvaW5saW5lLmM9ODg2PXN0YXRpYyBpbnQgZXh0NF9kYV9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTg5OS1cdGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XG5mcy9leHQ0L2lubGluZS5jOjkwMDpcdFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuZnMvZXh0NC9pbmxpbmUuYy05MDEtXHRcdGdvdG8gb3V0O1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtOTI0LVx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG5mcy9leHQ0L2lubGluZS5jOjkyNTpcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbmZzL2V4dDQvaW5saW5lLmM6OTI2Olx0KmZzZGF0YSA9ICh2b2lkICopQ09OVkVSVF9JTkxJTkVfREFUQTtcbmZzL2V4dDQvaW5saW5lLmMtOTI3LVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTA1Mj1zdGF0aWMgaW50IGV4dDRfdXBkYXRlX2lubGluZV9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMDU1LVx0aW50IHJldDtcbmZzL2V4dDQvaW5saW5lLmM6MTA1NjpcdGludCBvbGRfc2l6ZSA9IEVYVDRfSShkaXIpLVx1MDAzZWlfaW5saW5lX3NpemUgLSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFO1xuZnMvZXh0NC9pbmxpbmUuYy0xMDU3LVx0aW50IG5ld19zaXplID0gZ2V0X21heF9pbmxpbmVfeGF0dHJfdmFsdWVfc2l6ZShkaXIsIGlsb2MpO1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTA2Mi1cdHJldCA9IGV4dDRfdXBkYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgZGlyLFxuZnMvZXh0NC9pbmxpbmUuYzoxMDYzOlx0XHRcdFx0ICAgICAgbmV3X3NpemUgJiM0MzsgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG5mcy9leHQ0L2lubGluZS5jLTEwNjQtXHRpZiAocmV0KVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTA2OC1cdFx0XHQgICAgIEVYVDRfSShkaXIpLVx1MDAzZWlfaW5saW5lX3NpemUgLVxuZnMvZXh0NC9pbmxpbmUuYzoxMDY5Olx0XHRcdFx0XHRcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuZnMvZXh0NC9pbmxpbmUuYy0xMDcwLVx0ZGlyLVx1MDAzZWlfc2l6ZSA9IEVYVDRfSShkaXIpLVx1MDAzZWlfZGlza3NpemUgPSBFWFQ0X0koZGlyKS1cdTAwM2VpX2lubGluZV9zaXplO1xuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTA3ND1zdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jayxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTEwOTQtXG5mcy9leHQ0L2lubGluZS5jOjEwOTU6XHRpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpO1xuZnMvZXh0NC9pbmxpbmUuYy0xMDk2LVx0aWYgKCFpX2Jsb2NrX2J1Zikge1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTExNy1cdFx0Z290byBlcnJvcjtcbmZzL2V4dDQvaW5saW5lLmM6MTExODpcdG1lbWNweShpX2Jsb2NrX2J1ZiwgKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG5mcy9leHQ0L2lubGluZS5jOjExMTk6XHRtZW1zZXQoKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG5mcy9leHQ0L2lubGluZS5jOjExMjA6XHRtZW1zZXQoZWktXHUwMDNlaV9kYXRhLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbmZzL2V4dDQvaW5saW5lLmMtMTEyMS1cdG1lbWNweSh4YXR0cl9idWYsIGhlYWRlciwgeGF0dHJfc2l6ZSk7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMTYxLVx0XHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xuZnMvZXh0NC9pbmxpbmUuYzoxMTYyOlx0XHRtZW1jcHkoKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgaV9ibG9ja19idWYsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuZnMvZXh0NC9pbmxpbmUuYzoxMTYzOlx0XHRtZW1jcHkoZWktXHUwMDNlaV9kYXRhLCByYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG5mcy9leHQ0L2lubGluZS5jLTExNjQtXHRcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTExNjctXHR9IGVsc2Uge1xuZnMvZXh0NC9pbmxpbmUuYzoxMTY4Olx0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xuZnMvZXh0NC9pbmxpbmUuYy0xMTY5LVx0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMTc2LVx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xuZnMvZXh0NC9pbmxpbmUuYzoxMTc3Olx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG5mcy9leHQ0L2lubGluZS5jLTExNzgtXHRcdGJyZWxzZShiaCk7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xMjk0PWludCBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTEzMTAtXHRcdFx0XHRcdFx0IEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFO1xuZnMvZXh0NC9pbmxpbmUuYzoxMzExOlx0aW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkU7XG5mcy9leHQ0L2lubGluZS5jLTEzMTItXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMzE5LVx0aW5saW5lX3NpemUgPSBFWFQ0X0koZGlyKS1cdTAwM2VpX2lubGluZV9zaXplIC1cbmZzL2V4dDQvaW5saW5lLmM6MTMyMDpcdFx0XHRFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFO1xuZnMvZXh0NC9pbmxpbmUuYy0xMzIxLVx0aWYgKCFpbmxpbmVfc2l6ZSkge1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTMyNy1cdFx0aW5saW5lX3NpemUgPSBFWFQ0X0koZGlyKS1cdTAwM2VpX2lubGluZV9zaXplIC1cbmZzL2V4dDQvaW5saW5lLmM6MTMyODpcdFx0XHRcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XG5mcy9leHQ0L2lubGluZS5jLTEzMjktXHR9XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xNjY0PWludCBleHQ0X3RyeV9jcmVhdGVfaW5saW5lX2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE2NjYte1xuZnMvZXh0NC9pbmxpbmUuYzoxNjY3Olx0aW50IHJldCwgaW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFO1xuZnMvZXh0NC9pbmxpbmUuYy0xNjY4LVx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTY5Nz1zdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfZmluZF9pbmxpbmVfZW50cnkoc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xNzI5LVx0XHRcdFx0XHRcdEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFO1xuZnMvZXh0NC9pbmxpbmUuYzoxNzMwOlx0aW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkU7XG5mcy9leHQ0L2lubGluZS5jLTE3MzEtXHRyZXQgPSBleHQ0X3NlYXJjaF9kaXIoaXMuaWxvYy5iaCwgaW5saW5lX3N0YXJ0LCBpbmxpbmVfc2l6ZSxcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE3MzctXG5mcy9leHQ0L2lubGluZS5jOjE3Mzg6XHRpZiAoZXh0NF9nZXRfaW5saW5lX3NpemUoZGlyKSA9PSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKVxuZnMvZXh0NC9pbmxpbmUuYy0xNzM5LVx0XHRnb3RvIG91dDtcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE3NDEtXHRpbmxpbmVfc3RhcnQgPSBleHQ0X2dldF9pbmxpbmVfeGF0dHJfcG9zKGRpciwgXHUwMDI2aXMuaWxvYyk7XG5mcy9leHQ0L2lubGluZS5jOjE3NDI6XHRpbmxpbmVfc2l6ZSA9IGV4dDRfZ2V0X2lubGluZV9zaXplKGRpcikgLSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFO1xuZnMvZXh0NC9pbmxpbmUuYy0xNzQzLVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MTc2MD1pbnQgZXh0NF9kZWxldGVfaW5saW5lX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xNzgwLVx0aWYgKCh2b2lkICopZGVfZGVsIC0gKCh2b2lkICopZXh0NF9yYXdfaW5vZGUoXHUwMDI2aWxvYyktXHUwMDNlaV9ibG9jaykgXHUwMDNjXG5mcy9leHQ0L2lubGluZS5jOjE3ODE6XHRcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpIHtcbmZzL2V4dDQvaW5saW5lLmMtMTc4Mi1cdFx0aW5saW5lX3N0YXJ0ID0gKHZvaWQgKilleHQ0X3Jhd19pbm9kZShcdTAwMjZpbG9jKS1cdTAwM2VpX2Jsb2NrICYjNDM7XG5mcy9leHQ0L2lubGluZS5jLTE3ODMtXHRcdFx0XHRcdEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFO1xuZnMvZXh0NC9pbmxpbmUuYzoxNzg0Olx0XHRpbmxpbmVfc2l6ZSA9IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgLVxuZnMvZXh0NC9pbmxpbmUuYy0xNzg1LVx0XHRcdFx0RVhUNF9JTkxJTkVfRE9URE9UX1NJWkU7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xNzg4LVx0XHRpbmxpbmVfc2l6ZSA9IGV4dDRfZ2V0X2lubGluZV9zaXplKGRpcikgLVxuZnMvZXh0NC9pbmxpbmUuYzoxNzg5Olx0XHRcdFx0RVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRTtcbmZzL2V4dDQvaW5saW5lLmMtMTc5MC1cdH1cbi0tXG5mcy9leHQ0L2lubGluZS5jPTE4MTg9ZXh0NF9nZXRfaW5saW5lX2VudHJ5KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xODI3LVxuZnMvZXh0NC9pbmxpbmUuYzoxODI4Olx0aWYgKG9mZnNldCBcdTAwM2MgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSkge1xuZnMvZXh0NC9pbmxpbmUuYy0xODI5LVx0XHRpbmxpbmVfcG9zID0gKHZvaWQgKilleHQ0X3Jhd19pbm9kZShpbG9jKS1cdTAwM2VpX2Jsb2NrO1xuZnMvZXh0NC9pbmxpbmUuYzoxODMwOlx0XHQqaW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFO1xuZnMvZXh0NC9pbmxpbmUuYy0xODMxLVx0fSBlbHNlIHtcbmZzL2V4dDQvaW5saW5lLmMtMTgzMi1cdFx0aW5saW5lX3BvcyA9IGV4dDRfZ2V0X2lubGluZV94YXR0cl9wb3MoaW5vZGUsIGlsb2MpO1xuZnMvZXh0NC9pbmxpbmUuYzoxODMzOlx0XHRvZmZzZXQgLT0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRTtcbmZzL2V4dDQvaW5saW5lLmMtMTgzNC1cdFx0KmlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpIC1cbmZzL2V4dDQvaW5saW5lLmM6MTgzNTpcdFx0XHRcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XG5mcy9leHQ0L2lubGluZS5jLTE4MzYtXHR9XG4tLVxuZnMvZXh0NC9pbmxpbmUuYz0xOTQ5PWludCBleHQ0X2lubGluZV9kYXRhX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqaGFzX2lubGluZSlcbi0tXG5mcy9leHQ0L2lubGluZS5jLTE5OTQtXHRcdCAqL1xuZnMvZXh0NC9pbmxpbmUuYzoxOTk1Olx0XHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKVxuZnMvZXh0NC9pbmxpbmUuYy0xOTk2LVx0XHRcdGV4dDRfZXNfcmVtb3ZlX2V4dGVudChpbm9kZSwgMCwgRVhUX01BWF9CTE9DS1MpO1xuLS1cbmZzL2V4dDQvaW5saW5lLmMtMTk5OC1cdFx0LyogQ2xlYXIgdGhlIGNvbnRlbnQgaW4gdGhlIHhhdHRyIHNwYWNlLiAqL1xuZnMvZXh0NC9pbmxpbmUuYzoxOTk5Olx0XHRpZiAoaW5saW5lX3NpemUgXHUwMDNlIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpIHtcbmZzL2V4dDQvaW5saW5lLmMtMjAwMC1cdFx0XHRpZiAoKGVyciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXHUwMDI2aSwgXHUwMDI2aXMpKSAhPSAwKVxuLS1cbmZzL2V4dDQvaW5saW5lLmMtMjAyMi1cdFx0XHRpLnZhbHVlID0gdmFsdWU7XG5mcy9leHQ0L2lubGluZS5jOjIwMjM6XHRcdFx0aS52YWx1ZV9sZW4gPSBpX3NpemUgXHUwMDNlIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgP1xuZnMvZXh0NC9pbmxpbmUuYzoyMDI0Olx0XHRcdFx0XHRpX3NpemUgLSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIDogMDtcbmZzL2V4dDQvaW5saW5lLmMtMjAyNS1cdFx0XHRlcnIgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0yMDMwLVx0XHQvKiBDbGVhciB0aGUgY29udGVudCB3aXRoaW4gaV9ibG9ja3MuICovXG5mcy9leHQ0L2lubGluZS5jOjIwMzE6XHRcdGlmIChpX3NpemUgXHUwMDNjIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpIHtcbmZzL2V4dDQvaW5saW5lLmMtMjAzMi1cdFx0XHR2b2lkICpwID0gKHZvaWQgKikgZXh0NF9yYXdfaW5vZGUoXHUwMDI2aXMuaWxvYyktXHUwMDNlaV9ibG9jaztcbmZzL2V4dDQvaW5saW5lLmMtMjAzMy1cdFx0XHRtZW1zZXQocCAmIzQzOyBpX3NpemUsIDAsXG5mcy9leHQ0L2lubGluZS5jOjIwMzQ6XHRcdFx0ICAgICAgIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgLSBpX3NpemUpO1xuZnMvZXh0NC9pbmxpbmUuYy0yMDM1LVx0XHR9XG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0yMDM3LVx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSBpX3NpemUgXHUwMDNjXG5mcy9leHQ0L2lubGluZS5jOjIwMzg6XHRcdFx0XHRcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgP1xuZnMvZXh0NC9pbmxpbmUuYzoyMDM5Olx0XHRcdFx0XHRFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIDogaV9zaXplO1xuZnMvZXh0NC9pbmxpbmUuYy0yMDQwLVx0fVxuLS1cbmZzL2V4dDQvaW5saW5lLmM9MjA2MT1pbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0yMDY3LVx0aWYgKCFleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpIHtcbmZzL2V4dDQvaW5saW5lLmM6MjA2ODpcdFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuZnMvZXh0NC9pbmxpbmUuYy0yMDY5LVx0XHRyZXR1cm4gMDtcbmZzL2V4dDQvaW5saW5lLmM6MjA3MDpcdH0gZWxzZSBpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKSB7XG5mcy9leHQ0L2lubGluZS5jLTIwNzEtXHRcdC8qXG5mcy9leHQ0L2lubGluZS5jOjIwNzI6XHRcdCAqIElub2RlIGhhcyBpbmxpbmUgZGF0YSBidXQgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEgaXNcbmZzL2V4dDQvaW5saW5lLmMtMjA3My1cdFx0ICogY2xlYXJlZC4gVGhpcyBtZWFucyB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBtb3Zpbmcgb2Zcbi0tXG5mcy9leHQ0L2lub2RlLmM9MTI3OT1zdGF0aWMgaW50IGV4dDRfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy0xMzA0LVxuZnMvZXh0NC9pbm9kZS5jOjEzMDU6XHRpZiAoZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpIHtcbmZzL2V4dDQvaW5vZGUuYy0xMzA2LVx0XHRyZXQgPSBleHQ0X3RyeV90b193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTE0MzA9c3RhdGljIGludCBleHQ0X3dyaXRlX2VuZChjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTE0NDQtXHRpZiAoZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9pbm9kZS5jOjE0NDU6XHQgICAgZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpXG5mcy9leHQ0L2lub2RlLmMtMTQ0Ni1cdFx0cmV0dXJuIGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkLFxuLS1cbmZzL2V4dDQvaW5vZGUuYz0xNTM0PXN0YXRpYyBpbnQgZXh0NF9qb3VybmFsbGVkX3dyaXRlX2VuZChjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTE1NTQtXHRpZiAoZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9pbm9kZS5jOjE1NTU6XHQgICAgZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpXG5mcy9leHQ0L2lub2RlLmMtMTU1Ni1cdFx0cmV0dXJuIGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkLFxuLS1cbmZzL2V4dDQvaW5vZGUuYz0yNzUyPXN0YXRpYyBpbnQgZXh0NF9kb193cml0ZXBhZ2VzKHN0cnVjdCBtcGFnZV9kYV9kYXRhICptcGQpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTI4MDMtXHRcdEJVR19PTihleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsXG5mcy9leHQ0L2lub2RlLmM6MjgwNDpcdFx0XHRcdEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSk7XG5mcy9leHQ0L2lub2RlLmMtMjgwNS1cdFx0ZXh0NF9kZXN0cm95X2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0zMTEyPXN0YXRpYyBpbnQgZXh0NF9kYV93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTMxMzUtXG5mcy9leHQ0L2lub2RlLmM6MzEzNjpcdGlmIChleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSkge1xuZnMvZXh0NC9pbm9kZS5jLTMxMzctXHRcdHJldCA9IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sXG4tLVxuZnMvZXh0NC9pbm9kZS5jPTMyNjU9c3RhdGljIGludCBleHQ0X2RhX3dyaXRlX2VuZChjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTMyNzgtXG5mcy9leHQ0L2lub2RlLmM6MzI3OTpcdGlmICh3cml0ZV9tb2RlICE9IENPTlZFUlRfSU5MSU5FX0RBVEEgXHUwMDI2XHUwMDI2XG5mcy9leHQ0L2lub2RlLmM6MzI4MDpcdCAgICBleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvaW5vZGUuYy0zMjgxLVx0ICAgIGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcbi0tXG5mcy9leHQ0L2lub2RlLmM9NTE0MD1zdGF0aWMgaW5saW5lIGludCBleHQ0X2lnZXRfZXh0cmFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTE1OC1cdFx0aWYgKCFlcnIgXHUwMDI2XHUwMDI2IGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcbmZzL2V4dDQvaW5vZGUuYzo1MTU5Olx0XHRcdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG5mcy9leHQ0L2lub2RlLmMtNTE2MC1cdFx0cmV0dXJuIGVycjtcbi0tXG5mcy9leHQ0L2lub2RlLmM9NTI0NT1zdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxuLS1cbmZzL2V4dDQvaW5vZGUuYy01Mzg0LVx0LyogRGV0ZWN0IGludmFsaWQgZmxhZyBjb21iaW5hdGlvbiAtIGNhbiYjMzk7dCBoYXZlIGJvdGggaW5saW5lIGRhdGEgYW5kIGV4dGVudHMgKi9cbmZzL2V4dDQvaW5vZGUuYzo1Mzg1Olx0aWYgKGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvaW5vZGUuYy01Mzg2LVx0ICAgIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKSB7XG4tLVxuZnMvZXh0NC9pb2N0bC5jPTU2Nz1zdGF0aWMgYm9vbCBkYXhfY29tcGF0aWJsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgb2xkZmxhZ3MsXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTU3MS1cdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbmZzL2V4dDQvaW9jdGwuYzo1NzI6XHRcdGZsYWdzIFx1MDAyNj0gfkVYVDRfSU5MSU5FX0RBVEFfRkw7XG5mcy9leHQ0L2lvY3RsLmM6NTczOlx0XHRvbGRmbGFncyBcdTAwMjY9IH5FWFQ0X0lOTElORV9EQVRBX0ZMO1xuZnMvZXh0NC9pb2N0bC5jLTU3NC1cdH1cbi0tXG5mcy9leHQ0L25hbWVpLmM9Mjk2OT1pbnQgZXh0NF9pbml0X25ld19kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvZXh0NC9uYW1laS5jLTI5NzUtXG5mcy9leHQ0L25hbWVpLmM6Mjk3NjpcdGlmIChleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSkge1xuZnMvZXh0NC9uYW1laS5jLTI5NzctXHRcdGVyciA9IGV4dDRfdHJ5X2NyZWF0ZV9pbmxpbmVfZGlyKGhhbmRsZSwgZGlyLCBpbm9kZSk7XG4tLVxuZnMvZXh0NC9uYW1laS5jPTM3OTc9c3RhdGljIGludCBleHQ0X3JlbmFtZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpvbGRfZGlyLFxuLS1cbmZzL2V4dDQvbmFtZWkuYy0zOTE5LVx0Zm9yY2VfcmVyZWFkID0gKG5ldy5kaXItXHUwMDNlaV9pbm8gPT0gb2xkLmRpci1cdTAwM2VpX2lubyBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvbmFtZWkuYzozOTIwOlx0XHRcdGV4dDRfdGVzdF9pbm9kZV9mbGFnKG5ldy5kaXIsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKTtcbmZzL2V4dDQvbmFtZWkuYy0zOTIxLVxuLS1cbmZzL2V4dDQvbmFtZWkuYy0zOTQ3LVx0XHRmb3JjZV9yZXJlYWQgPSAhZXh0NF90ZXN0X2lub2RlX2ZsYWcobmV3LmRpcixcbmZzL2V4dDQvbmFtZWkuYzozOTQ4Olx0XHRcdFx0XHRcdCAgICAgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSk7XG5mcy9leHQ0L25hbWVpLmMtMzk0OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3MTcKCQkJCQkJCW91dHB1dDogMTYyCgkJCQkJCQl0aG91Z2h0czogMzk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEVYVDQgSW5saW5lIERhdGEgQ29udmVyc2lvbiBMb2dpYyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBmdW5jdGlvbnMgcmVsYXRlZCB0byBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24uIFRoZSBrZXkgcGxheWVycywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGBGb2N1c1N5bWJvbHNgLCBhcmU6IGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgLCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AsIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AsIGFuZCBgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeWAuCgpGaXJzdCwgSSBuZWVkIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgcmVsYXRlZCBmdW5jdGlvbnMuIExldCBtZSBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGRpZmYuIEFoLCBoZXJlIHdlIGdvOiBpdCBzZWVtcyBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIGlzIG5ldywgZXNzZW50aWFsbHkgcmVwbGFjaW5nIGBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGFgLCBhbmQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGhhcyBiZWVuIG1vZGlmaWVkLiBUaGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgYXBwZWFyIHRvIGJlIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgIGFuZCBgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeWAuIFRoYXQgc2VlbXMgcmVhc29uYWJsZS4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGNydWNpYWwgY29uZmlnIGlzIGBFWFQ0X0ZTYCwgd2hpY2ggZW5hYmxlcyB0aGUgZXh0NCBmaWxlIHN5c3RlbSBpdHNlbGYuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBpZiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgaW52b2x2ZWQuIFNpbmNlIHRoaXMgaXMgaW5saW5lIGRhdGEsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgc2VjdXJpdHkgYW5kIEFDTCBjb25zaWRlcmF0aW9ucyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuIEhvd2V2ZXIsIGEgcmV2aWV3IG9mIHRoZSBjb2RlIHJldmVhbHMgdGhhdCB0aGUgc3lzdGVtIHhhdHRyLCBmb3IgaW5saW5lIGRhdGEsIGlzIG1hbmFnZWQgYnkgY29yZSBleHQ0IHhhdHRyIGxvZ2ljIChpbiBgeGF0dHIuY2ApLiBUaGUgZmFjdCB0aGF0IGl0IGlzIGFsd2F5cyBidWlsdCBhbG9uZyB3aXRoIGBpbmxpbmUub2AgaW1wbGllcyB0aGlzIGlzIG5vdCBkZXBlbmRlbnQgb24gYW55IG90aGVyIGFkZGl0aW9uYWwgY29uZmlnLiBTbywgYEVYVDRfRlNgIHNlZW1zIHN1ZmZpY2llbnQuCgpJJiMzOTt2ZSByZXZpZXdlZCB0aGUgaW5zdHJ1Y3Rpb25zOiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgY29udGFpbnMgb25seSBgRVhUNF9GU2AsIHRoZSBgRm9jdXNTeW1ib2xzYCBtYXRjaCB3aGF0IEkmIzM5O3ZlIGlkZW50aWZpZWQsIGFuZCB0aGUgcmVxdWVzdGVkIGBSZWFzb25pbmdgIGlzIGNvbmNpc2Ug4oCTIHdoaWNoIEkgYmVsaWV2ZSBJJiMzOTt2ZSBhY2hpZXZlZC4KCkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gSSYjMzk7bSBzYXRpc2ZpZWQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2smIzM0OywKICAgICYjMzQ7ZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayYjMzQ7LAogICAgJiMzNDtleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEmIzM0OywKICAgICYjMzQ7ZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIG1lY2hhbmlzbSBpbiBmcy9leHQ0L2lubGluZS5jLCByZXBsYWNpbmcgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhIHdpdGggZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2sgYW5kIHJlc3RydWN0dXJpbmcgYmxvY2sgYWxsb2NhdGlvbiwgZXh0ZW50IGluc2VydGlvbiwgYW5kIGVycm9yIHJlY292ZXJ5IGhhbmRsaW5nIGR1cmluZyBpbmxpbmUgZGF0YSBjb252ZXJzaW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgd2hlbiBleHBhbmRpbmcgaW5saW5lIGZpbGVzL2RpcmVjdG9yaWVzIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayYjMzQ7LAogICAgJiMzNDtleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrJiMzNDssCiAgICAmIzM0O2V4dDRfY29udmVydF9pbmxpbmVfZGF0YSYjMzQ7LAogICAgJiMzNDtleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbWVjaGFuaXNtIGluIGZzL2V4dDQvaW5saW5lLmMsIHJlcGxhY2luZyBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEgd2l0aCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayBhbmQgcmVzdHJ1Y3R1cmluZyBibG9jayBhbGxvY2F0aW9uLCBleHRlbnQgaW5zZXJ0aW9uLCBhbmQgZXJyb3IgcmVjb3ZlcnkgaGFuZGxpbmcgZHVyaW5nIGlubGluZSBkYXRhIGNvbnZlcnNpb24uIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyB3aGVuIGV4cGFuZGluZyBpbmxpbmUgZmlsZXMvZGlyZWN0b3JpZXMgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXh0NCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGxvZ2ljIGluIGBmcy9leHQ0L2lubGluZS5jYCBieSBpbnRyb2R1Y2luZyBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIGFuZCBhbGxvY2F0aW5nIHRoZSBkZXN0aW5hdGlvbiBibG9jayBwcmlvciB0byBjbGVhcmluZyBpbmxpbmUgZGF0YSBpbiB0aGUgaW5vZGUuXG5cblJldmlld2luZyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYWNyb3NzIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6XG4xLiBBbGwgbG9jYWwgc3RhY2sgc3RydWN0dXJlcyAoYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgLCBgc3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpYCwgYHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcmAsIGFuZCBgc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgYG1lbXNldGAsIG9yIGV4cGxpY2l0IG1lbWJlciBhc3NpZ25tZW50cyBiZWZvcmUgdXNlLlxuMi4gSGVhcCBidWZmZXJzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2NgIChgaV9ibG9ja19idWZgLCBgeGF0dHJfYnVmYCwgYGJ1ZmApIGFyZSBpbW1lZGlhdGVseSBwb3B1bGF0ZWQgdmlhIGBtZW1jcHlgIG9yIGBleHQ0X3JlYWRfaW5saW5lX2RhdGFgLlxuMy4gVGhlIGJsb2NrIGJ1ZmZlciBkYXRhIChgYmgtXHUwMDNlYl9kYXRhYCkgaXMgZXhwbGljaXRseSBjbGVhcmVkIHVzaW5nIGBtZW1zZXRgIGJlZm9yZSB3cml0aW5nIGlubGluZSBkYXRhIG9yIGRpcmVjdG9yeSBlbnRyaWVzLlxuNC4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBicmFuY2hpbmcvbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG5cbkFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgZXJyb3IgcmVjb3ZlcnkgaGFuZGxpbmcsIGxvY2tpbmcsIG9yIGV4dGVudCBtYW5pcHVsYXRpb24pIGZhbGwgdW5kZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVlNTIzMTIwNGUwM2MzMDMyNDY4MzcxMjk1ZWI4YTI3ZjgwZDFkZWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDEwOjMzOjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbmxpbmUuYyBiL2ZzL2V4dDQvaW5saW5lLmMKaW5kZXggODA0NWU0ZmYyNzBjNy4uZmVmOThhY2VlNjg4ZiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbmxpbmUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lubGluZS5jCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJiMzNDtleHQ0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4YXR0ci5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dHJ1bmNhdGUuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtleHQ0X2V4dGVudHMuaCYjMzQ7CiAKICNkZWZpbmUgRVhUNF9YQVRUUl9TWVNURU1fREFUQQkmIzM0O2RhdGEmIzM0OwogI2RlZmluZSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFCSgoc2l6ZW9mKF9fbGUzMikgKiBFWFQ0X05fQkxPQ0tTKSkKQEAgLTEwNzAsMjEgJiM0MzsxMDcxLDEyMyBAQCBzdGF0aWMgaW50IGV4dDRfdXBkYXRlX2lubGluZV9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpkaXIsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICAgc3RydWN0IGV4dDRfaWxvYyAqaWxvYywKLQkJCQkgICAgIHZvaWQgKmJ1ZiwgaW50IGlubGluZV9zaXplKQomIzQzO3N0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLAomIzQzOwkJCQkJdW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlpbnQgcmV0OwomIzQzOwlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CiYjNDM7CXN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7CiYjNDM7CQkucyA9IHsgLm5vdF9mb3VuZCA9IC1FTk9EQVRBLCB9LAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGkgPSB7CiYjNDM7CQkubmFtZV9pbmRleCA9IEVYVDRfWEFUVFJfSU5ERVhfU1lTVEVNLAomIzQzOwkJLm5hbWUgPSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBLAomIzQzOwkJLnZhbHVlID0gTlVMTCwKJiM0MzsJCS52YWx1ZV9sZW4gPSAwLAomIzQzOwl9OwomIzQzOwlpbnQgZXJyb3I7CiYjNDM7CXZvaWQgKmlfYmxvY2tfYnVmID0gTlVMTDsKJiM0MzsJdm9pZCAqeGF0dHJfYnVmID0gTlVMTDsKJiM0MzsJdm9pZCAqaGVhZGVyID0gTlVMTDsKJiM0MzsJdm9pZCAqdGFpbCA9IE5VTEw7CiYjNDM7CWludCB4YXR0cl9zaXplOwomIzQzOwlzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlOwogCi0JcmV0ID0gZXh0NF9jcmVhdGVfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSwgaW5saW5lX3NpemUpOwotCWlmIChyZXQpIHsKLQkJZXh0NF9tc2coaW5vZGUtJmd0O2lfc2IsIEtFUk5fRU1FUkcsCi0JCQkmIzM0O2Vycm9yIHJlc3RvcmluZyBpbmxpbmVfZGF0YSBmb3IgaW5vZGUgLS0gcG90ZW50aWFsIGRhdGEgbG9zcyEgKGlub2RlICVsbHUsIGVycm9yICVkKSYjMzQ7LAotCQkJaW5vZGUtJmd0O2lfaW5vLCByZXQpOwotCQlyZXR1cm47CiYjNDM7CWlfYmxvY2tfYnVmID0ga21hbGxvYyhFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFLCBHRlBfTk9GUyk7CiYjNDM7CWlmICghaV9ibG9ja19idWYpIHsKJiM0MzsJCWVycm9yID0gLUVOT01FTTsKJiM0MzsJCWRvd25fd3JpdGUoJmFtcDtlaS0mZ3Q7aV9kYXRhX3NlbSk7CiYjNDM7CQlnb3RvIGVycm9yOwogCX0KLQlleHQ0X3dyaXRlX2lubGluZV9kYXRhKGlub2RlLCBpbG9jLCBidWYsIDAsIGlubGluZV9zaXplKTsKLQlleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpOwomIzQzOwlkb3duX3dyaXRlKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwomIzQzOwllcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgJmFtcDtpcy5pbG9jKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBlcnJvcjsKJiM0MzsJcmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoJmFtcDtpcy5pbG9jKTsKJiM0MzsJaGVhZGVyID0gSUhEUihpbm9kZSwgcmF3X2lub2RlKTsKJiM0MzsJdGFpbCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpOwomIzQzOwl4YXR0cl9zaXplID0gdGFpbCAtIGhlYWRlcjsKJiM0MzsJeGF0dHJfYnVmID0ga21hbGxvYyh4YXR0cl9zaXplLCBHRlBfTk9GUyk7CiYjNDM7CWlmICgheGF0dHJfYnVmKSB7CiYjNDM7CQllcnJvciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycm9yOwomIzQzOwl9CiYjNDM7CUJVRkZFUl9UUkFDRShpcy5pbG9jLmJoLCAmIzM0O2dldF93cml0ZV9hY2Nlc3MmIzM0Oyk7CiYjNDM7CWVycm9yID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS0mZ3Q7aV9zYiwgaXMuaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gZXJyb3I7CiYjNDM7CW1lbWNweShpX2Jsb2NrX2J1ZiwgKHZvaWQgKilyYXdfaW5vZGUtJmd0O2lfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpOwomIzQzOwltZW1zZXQoKHZvaWQgKilyYXdfaW5vZGUtJmd0O2lfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpOwomIzQzOwltZW1zZXQoZWktJmd0O2lfZGF0YSwgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7CiYjNDM7CW1lbWNweSh4YXR0cl9idWYsIGhlYWRlciwgeGF0dHJfc2l6ZSk7CiYjNDM7CWlmIChleHQ0X2hhc19mZWF0dXJlX2V4dGVudHMoaW5vZGUtJmd0O2lfc2IpICZhbXA7JmFtcDsKJiM0MzsJCShTX0lTRElSKGlub2RlLSZndDtpX21vZGUpIHx8IFNfSVNSRUcoaW5vZGUtJmd0O2lfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS0mZ3Q7aV9tb2RlKSkpIHsKJiM0MzsJCWV4dDRfc2V0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7CiYjNDM7CQlleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7CiYjNDM7CQlzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIDAsIE5VTEwsIDApOwomIzQzOwomIzQzOwkJaWYgKElTX0VSUihwYXRoKSkgewomIzQzOwkJCWVycm9yID0gUFRSX0VSUihwYXRoKTsKJiM0MzsJCQlnb3RvIHJlY292ZXJ5OwomIzQzOwkJfQomIzQzOwkJc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4OwomIzQzOwomIzQzOwkJbmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMigwKTsKJiM0MzsJCW5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpOwomIzQzOwkJZXh0NF9leHRfc3RvcmVfcGJsb2NrKCZhbXA7bmV3ZXgsIGJsb2NrKTsKJiM0MzsJCXBhdGggPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsICZhbXA7bmV3ZXgsIDApOwomIzQzOwkJaWYgKElTX0VSUihwYXRoKSkgewomIzQzOwkJCWVycm9yID0gUFRSX0VSUihwYXRoKTsKJiM0MzsJCQlpZiAoZXJyb3IgPT0gLUVEUVVPVCB8fCBlcnJvciA9PSAtRU5PU1BDKQomIzQzOwkJCQlnb3RvIHJlY292ZXJ5OwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJZ290byBub19mcmVlOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlFWFQ0X0koaW5vZGUpLSZndDtpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7CiYjNDM7CX0KJiM0MzsJZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsICZhbXA7aSwgJmFtcDtpcyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gcmVjb3Zlcnk7CiYjNDM7CWlmICghaXMucy5ub3RfZm91bmQpCiYjNDM7CQllcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZSwgaW5vZGUsICZhbXA7aSwgJmFtcDtpcyk7CiYjNDM7cmVjb3Zlcnk6CiYjNDM7CWlmIChlcnJvcikgewomIzQzOwkJZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTsKJiM0MzsJCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7CiYjNDM7CQltZW1jcHkoaGVhZGVyLCB4YXR0cl9idWYsIHhhdHRyX3NpemUpOwomIzQzO25vX2ZyZWU6CiYjNDM7CQlleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spOwomIzQzOwkJbWVtY3B5KCh2b2lkICopcmF3X2lub2RlLSZndDtpX2Jsb2NrLCBpX2Jsb2NrX2J1ZiwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7CiYjNDM7CQltZW1jcHkoZWktJmd0O2lfZGF0YSwgcmF3X2lub2RlLSZndDtpX2Jsb2NrLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTsKJiM0MzsJCWV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTsKJiM0MzsJCWdldF9iaChpcy5pbG9jLmJoKTsKJiM0MzsJCWV4dDRfbWFya19pbG9jX2RpcnR5KGhhbmRsZSwgaW5vZGUsICZhbXA7aXMuaWxvYyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpOwomIzQzOwkJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpIHsKJiM0MzsJCQlpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSk7CiYjNDM7CQkJRVhUNF9JKGlub2RlKS0mZ3Q7aV9kaXNrc2l6ZSA9IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKJiM0MzsJCX0KJiM0MzsJCWdldF9iaChpcy5pbG9jLmJoKTsKJiM0MzsJCWVycm9yID0gZXh0NF9tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgJmFtcDtpcy5pbG9jKTsKJiM0MzsJCUVYVDRfSShpbm9kZSktJmd0O2lfaW5saW5lX29mZiA9IDA7CiYjNDM7CQlFWFQ0X0koaW5vZGUpLSZndDtpX2lubGluZV9zaXplID0gMDsKJiM0MzsJCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTsKJiM0MzsJCWJyZWxzZShiaCk7CiYjNDM7CX0KJiM0MzsJZ290byBvdXQ7CiYjNDM7ZXJyb3I6CiYjNDM7CWV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7CiYjNDM7CWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiYjNDM7CWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7CiYjNDM7b3V0OgomIzQzOwlicmVsc2UoaXMuaWxvYy5iaCk7CiYjNDM7CXVwX3dyaXRlKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwomIzQzOwlrZnJlZShpX2Jsb2NrX2J1Zik7CiYjNDM7CWtmcmVlKHhhdHRyX2J1Zik7CiYjNDM7CXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsCkBAIC0xMDkzLDkgJiM0MzsxMTk2LDEyIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLAogewogCWludCBlcnJvcjsKIAl2b2lkICpidWYgPSBOVUxMOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqZGF0YV9iaCA9IE5VTEw7Ci0Jc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7CiYjNDM7CXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCWludCBpbmxpbmVfc2l6ZTsKJiM0MzsJZXh0NF9mc2Jsa190IG5ld2Jsb2NrID0gMDsKJiM0MzsJc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyOwomIzQzOwlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJdW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jazsKIAogCWlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpOwogCWJ1ZiA9IGttYWxsb2MoaW5saW5lX3NpemUsIEdGUF9OT0ZTKTsKQEAgLTExMjAsNjMgJiM0MzsxMjI2LDYyIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLAogCQkJZ290byBvdXQ7CiAJfQogCi0JZXJyb3IgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0KLQltYXAubV9sYmxrID0gMDsKLQltYXAubV9sZW4gPSAxOwotCW1hcC5tX2ZsYWdzID0gMDsKLQllcnJvciA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCAmYW1wO21hcCwgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSk7CiYjNDM7CW1lbXNldCgmYW1wO2FyLCAwLCBzaXplb2YoYXIpKTsKJiM0MzsJYXIuaW5vZGUgPSBpbm9kZTsKJiM0MzsJYXIubG9naWNhbCA9IDA7CiYjNDM7CWFyLmxlbiA9IDE7CiYjNDM7CWlmIChTX0lTUkVHKGlub2RlLSZndDtpX21vZGUpKQomIzQzOwkJYXIuZmxhZ3MgPSBFWFQ0X01CX0hJTlRfREFUQTsKJiM0MzsJZWxzZQomIzQzOwkJYXIuZmxhZ3MgPSAwOwomIzQzOwluZXdibG9jayA9IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGUsICZhbXA7YXIsICZhbXA7ZXJyb3IpOwogCWlmIChlcnJvciAmbHQ7IDApCi0JCWdvdG8gb3V0X3Jlc3RvcmU7Ci0JaWYgKCEobWFwLm1fZmxhZ3MgJmFtcDsgRVhUNF9NQVBfTUFQUEVEKSkgewotCQllcnJvciA9IC1FSU87Ci0JCWdvdG8gb3V0X3Jlc3RvcmU7Ci0JfQotCi0JZGF0YV9iaCA9IHNiX2dldGJsayhpbm9kZS0mZ3Q7aV9zYiwgbWFwLm1fcGJsayk7Ci0JaWYgKCFkYXRhX2JoKSB7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJYWxsb2NhdGVkX2Jsb2NrID0gRVhUNF9DMkIoc2JpLCBhci5sZW4pOwomIzQzOwliaCA9IHNiX2dldGJsayhpbm9kZS0mZ3Q7aV9zYiwgbmV3YmxvY2spOwomIzQzOwlpZiAoIWJoKSB7CiAJCWVycm9yID0gLUVOT01FTTsKLQkJZ290byBvdXRfcmVzdG9yZTsKJiM0MzsJCWdvdG8gb3V0X2JoOwogCX0KIAotCWxvY2tfYnVmZmVyKGRhdGFfYmgpOwotCWVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtJmd0O2lfc2IsIGRhdGFfYmgsCiYjNDM7CWxvY2tfYnVmZmVyKGJoKTsKJiM0MzsJZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS0mZ3Q7aV9zYiwgYmgsCiAJCQkJCSAgICAgICBFWFQ0X0pUUl9OT05FKTsKIAlpZiAoZXJyb3IpIHsKLQkJdW5sb2NrX2J1ZmZlcihkYXRhX2JoKTsKJiM0MzsJCXVubG9ja19idWZmZXIoYmgpOwogCQllcnJvciA9IC1FSU87Ci0JCWdvdG8gb3V0X3Jlc3RvcmU7CiYjNDM7CQlnb3RvIG91dF9iaDsKIAl9Ci0JbWVtc2V0KGRhdGFfYmgtJmd0O2JfZGF0YSwgMCwgaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplKTsKJiM0MzsJbWVtc2V0KGJoLSZndDtiX2RhdGEsIDAsIGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSk7CiAKIAlpZiAoIVNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpIHsKLQkJbWVtY3B5KGRhdGFfYmgtJmd0O2JfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7Ci0JCXNldF9idWZmZXJfdXB0b2RhdGUoZGF0YV9iaCk7Ci0JCXVubG9ja19idWZmZXIoZGF0YV9iaCk7CiYjNDM7CQltZW1jcHkoYmgtJmd0O2JfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7CiYjNDM7CQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKJiM0MzsJCXVubG9ja19idWZmZXIoYmgpOwogCQllcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwKLQkJCQkJCSAgIGlub2RlLCBkYXRhX2JoKTsKJiM0MzsJCQkJCQkgICBpbm9kZSwgYmgpOwogCX0gZWxzZSB7Ci0JCXVubG9ja19idWZmZXIoZGF0YV9iaCk7Ci0JCWlub2RlLSZndDtpX3NpemUgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19ibG9ja3NpemU7Ci0JCWlfc2l6ZV93cml0ZShpbm9kZSwgaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmxvY2tzaXplKTsKLQkJRVhUNF9JKGlub2RlKS0mZ3Q7aV9kaXNrc2l6ZSA9IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZTsKLQotCQllcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBkYXRhX2JoLAomIzQzOwkJdW5sb2NrX2J1ZmZlcihiaCk7CiYjNDM7CQllcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBiaCwKIAkJCSAgbGUzMl90b19jcHUoKChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKWJ1ZiktJmd0O2lub2RlKSwKIAkJCSAgYnVmICYjNDM7IEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLAogCQkJICBpbmxpbmVfc2l6ZSAtIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFKTsKLQkJaWYgKCFlcnJvcikKLQkJCWVycm9yID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOwogCX0KJiM0MztvdXRfYmg6CiYjNDM7CWlmIChlcnJvcikgewomIzQzOwkJaWYgKGJoKQomIzQzOwkJCWV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBuZXdibG9jayk7CiYjNDM7CQlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7CiAKLW91dF9yZXN0b3JlOgotCWlmIChlcnJvcikKLQkJZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlsb2MsIGJ1ZiwgaW5saW5lX3NpemUpOwotCiYjNDM7CQlkb3duX3dyaXRlKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwomIzQzOwkJZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTsKJiM0MzsJCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgbmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgMCk7CiYjNDM7CQl1cF93cml0ZSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVycm9yID0gZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlLCBpbm9kZSwKJiM0MzsJCQkJbmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgYmgpOwomIzQzOwl9CiBvdXQ6Ci0JYnJlbHNlKGRhdGFfYmgpOwogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIGVycm9yOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ2MwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEV4dDQgSW5saW5lIERhdGEgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBmaWd1cmUgb3V0IGlmIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIHRoYXQgc2NyZWFtcyBmb3IgYSBLTVNBTiBzZXNzaW9uIChOZWVkc0tNU0FOPXRydWUpLCBvciBpZiB0aGlzIGlzIGp1c3QgdHlwaWNhbCBmaWxlc3lzdGVtIGxvZ2ljLCBhIGJ1ZyBmaXgsIG9yIHNvbWUgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nIHdoZXJlIEtBU0FOIG9yIG91ciBzdGFuZGFyZCBkZXRlY3RvcnMgYXJlIGFkZXF1YXRlLiBJIG5lZWQgdG8gYmUgZWZmaWNpZW50IGhlcmUuCgpGaXJzdCwgSSBuZWVkIHRvICp1bmRlcnN0YW5kKiB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgKmRvaW5nKi4gSSYjMzk7bSBzZWVpbmcgaXQmIzM5O3MgaW4gYGZzL2V4dDQvaW5saW5lLmNgLCBhbmQgdGhlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGFuZCB0aGlzIG5ldyBoZWxwZXIgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgcmVwbGFjaW5nIGBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGFgIGFzIHdlbGwuIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSB0byBsb29rIGludG8uCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGluc3BlY3QgdGhlIGNvZGUgY2hhbmdlcyB0aGVtc2VsdmVzLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGxpbmUgYnkgbGluZSBoZXJlLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBtZW1vcnkgYXNzaWdubWVudHMsIGJsb2NrIGhhbmRsaW5nLCBvciBkYXRhIGNvcHlpbmcgb3BlcmF0aW9ucy4gSWYgSSBuZWVkIHRoZSBiaWdnZXIgcGljdHVyZSwgSeKAmWxsIGxldmVyYWdlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgY29udGV4dCB3aXRoaW4gYGZzL2V4dDQvaW5saW5lLmNgIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgZml0IGludG8gdGhlIGxhcmdlciBleHQ0IGlubGluZSBkYXRhIHBpY3R1cmUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIHJpc2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5saW5lLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjA6XHRcdFx0cmV0dXJuIC1FTk9TUEM7XG4xMDYxOlx0XG4xMDYyOlx0XHRyZXQgPSBleHQ0X3VwZGF0ZV9pbmxpbmVfZGF0YShoYW5kbGUsIGRpcixcbjEwNjM6XHRcdFx0XHRcdCAgICAgIG5ld19zaXplICYjNDM7IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuMTA2NDpcdFx0aWYgKHJldClcbjEwNjU6XHRcdFx0cmV0dXJuIHJldDtcbjEwNjY6XHRcbjEwNjc6XHRcdGV4dDRfdXBkYXRlX2ZpbmFsX2RlKGV4dDRfZ2V0X2lubGluZV94YXR0cl9wb3MoZGlyLCBpbG9jKSwgb2xkX3NpemUsXG4xMDY4Olx0XHRcdFx0ICAgICBFWFQ0X0koZGlyKS1cdTAwM2VpX2lubGluZV9zaXplIC1cbjEwNjk6XHRcdFx0XHRcdFx0XHRFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbjEwNzA6XHRcdGRpci1cdTAwM2VpX3NpemUgPSBFWFQ0X0koZGlyKS1cdTAwM2VpX2Rpc2tzaXplID0gRVhUNF9JKGRpciktXHUwMDNlaV9pbmxpbmVfc2l6ZTtcbjEwNzE6XHRcdHJldHVybiAwO1xuMTA3MjpcdH1cbjEwNzM6XHRcbjEwNzQ6XHRzdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jayxcbjEwNzU6XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbjEwNzY6XHR7XG4xMDc3Olx0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4xMDc4Olx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzID0ge1xuMTA3OTpcdFx0XHQucyA9IHsgLm5vdF9mb3VuZCA9IC1FTk9EQVRBLCB9LFxuMTA4MDpcdFx0fTtcbjEwODE6XHRcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaSA9IHtcbjEwODI6XHRcdFx0Lm5hbWVfaW5kZXggPSBFWFQ0X1hBVFRSX0lOREVYX1NZU1RFTSxcbjEwODM6XHRcdFx0Lm5hbWUgPSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBLFxuMTA4NDpcdFx0XHQudmFsdWUgPSBOVUxMLFxuMTA4NTpcdFx0XHQudmFsdWVfbGVuID0gMCxcbjEwODY6XHRcdH07XG4xMDg3Olx0XHRpbnQgZXJyb3I7XG4xMDg4Olx0XHR2b2lkICppX2Jsb2NrX2J1ZiA9IE5VTEw7XG4xMDg5Olx0XHR2b2lkICp4YXR0cl9idWYgPSBOVUxMO1xuMTA5MDpcdFx0dm9pZCAqaGVhZGVyID0gTlVMTDtcbjEwOTE6XHRcdHZvaWQgKnRhaWwgPSBOVUxMO1xuMTA5MjpcdFx0aW50IHhhdHRyX3NpemU7XG4xMDkzOlx0XHRzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlO1xuMTA5NDpcdFxuMTA5NTpcdFx0aV9ibG9ja19idWYgPSBrbWFsbG9jKEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUsIEdGUF9OT0ZTKTtcbjEwOTY6XHRcdGlmICghaV9ibG9ja19idWYpIHtcbjEwOTc6XHRcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuMTA5ODpcdFx0XHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuMTA5OTpcdFx0XHRnb3RvIGVycm9yO1xuMTEwMDpcdFx0fVxuMTEwMTpcdFx0ZG93bl93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbjExMDI6XHRcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbjExMDM6XHRcdGlmIChlcnJvcilcbjExMDQ6XHRcdFx0Z290byBlcnJvcjtcbjExMDU6XHRcdHJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKFx1MDAyNmlzLmlsb2MpO1xuMTEwNjpcdFx0aGVhZGVyID0gSUhEUihpbm9kZSwgcmF3X2lub2RlKTtcbjExMDc6XHRcdHRhaWwgPSBJVEFJTChpbm9kZSwgcmF3X2lub2RlKTtcbjExMDg6XHRcdHhhdHRyX3NpemUgPSB0YWlsIC0gaGVhZGVyO1xuMTEwOTpcdFx0eGF0dHJfYnVmID0ga21hbGxvYyh4YXR0cl9zaXplLCBHRlBfTk9GUyk7XG4xMTEwOlx0XHRpZiAoIXhhdHRyX2J1Zikge1xuMTExMTpcdFx0XHRlcnJvciA9IC1FTk9NRU07XG4xMTEyOlx0XHRcdGdvdG8gZXJyb3I7XG4xMTEzOlx0XHR9XG4xMTE0Olx0XHRCVUZGRVJfVFJBQ0UoaXMuaWxvYy5iaCwgXCYjMzQ7Z2V0X3dyaXRlX2FjY2Vzc1wmIzM0Oyk7XG4xMTE1Olx0XHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgaXMuaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7XG4xMTE2Olx0XHRpZiAoZXJyb3IpXG4xMTE3Olx0XHRcdGdvdG8gZXJyb3I7XG4xMTE4Olx0XHRtZW1jcHkoaV9ibG9ja19idWYsICh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuMTExOTpcdFx0bWVtc2V0KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuMTEyMDpcdFx0bWVtc2V0KGVpLVx1MDAzZWlfZGF0YSwgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4xMTIxOlx0XHRtZW1jcHkoeGF0dHJfYnVmLCBoZWFkZXIsIHhhdHRyX3NpemUpO1xuMTEyMjpcdFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS1cdTAwM2VpX3NiKSBcdTAwMjZcdTAwMjZcbjExMjM6XHRcdFx0KFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSkge1xuMTEyNDpcdFx0XHRleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xuMTEyNTpcdFx0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XG4xMTI2Olx0XHRcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgMCwgTlVMTCwgMCk7XG4xMTI3Olx0XG4xMTI4Olx0XHRcdGlmIChJU19FUlIocGF0aCkpIHtcbjExMjk6XHRcdFx0XHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XG4xMTMwOlx0XHRcdFx0Z290byByZWNvdmVyeTtcbjExMzE6XHRcdFx0fVxuMTEzMjpcdFx0XHRzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXg7XG4xMTMzOlx0XG4xMTM0Olx0XHRcdG5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XG4xMTM1Olx0XHRcdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpO1xuMTEzNjpcdFx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2bmV3ZXgsIGJsb2NrKTtcbjExMzc6XHRcdFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXgsIDApO1xuMTEzODpcdFx0XHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4xMTM5Olx0XHRcdFx0ZXJyb3IgPSBQVFJfRVJSKHBhdGgpO1xuMTE0MDpcdFx0XHRcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXG4xMTQxOlx0XHRcdFx0XHRnb3RvIHJlY292ZXJ5O1xuMTE0MjpcdFx0XHRcdGVsc2VcbjExNDM6XHRcdFx0XHRcdGdvdG8gbm9fZnJlZTtcbjExNDQ6XHRcdFx0fSBlbHNlIHtcbjExNDU6XHRcdFx0XHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XG4xMTQ2Olx0XHRcdH1cbjExNDc6XHRcdH0gZWxzZSB7XG4xMTQ4Olx0XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9kYXRhWzBdID0gY3B1X3RvX2xlMzIoYmxvY2spO1xuMTE0OTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTY4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgSW5saW5lIERhdGEgRnVuY3Rpb25zKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGRlZXBlciBkaXZlIGludG8gYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYCBhbmQgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgLiBJIG5lZWQgdG8gZnVsbHkgZ3Jhc3AgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCBhbmQgaG93IHRoZXkgYXJlIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgZXh0NCYjMzk7cyBpbmxpbmUgZGF0YSBpbXBsZW1lbnRhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGVzZSBmdW5jdGlvbnMgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjaGFuZ2VzIGluIGhvdyBleHQ0IHN0b3JlcyBkYXRhIGZvciBzbWFsbGVyIGZpbGVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoZXJlIGV4YWN0bHkgdGhlc2Ugcm91dGluZXMgZml0IGluIHRoZSBvdmVyYWxsIHNjaGVtZSBvZiB0aGluZ3MuIEkmIzM5O20gZ29pbmcgdG8gZ28gbGluZS1ieS1saW5lIGFuZCBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLCB0aGUgbG9ja2luZyBzZW1hbnRpY3MgKG9yIGxhY2sgdGhlcmVvZiwgaW4gdGhlIGNhc2Ugb2YgdGhlICpub2xvY2sgdmVyc2lvbiopLCBhbmQgdGhlIGVycm9yIGhhbmRsaW5nLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBhc3N1bXB0aW9ucyBiZWluZyBtYWRlIGFib3V0IHRoZSB1bmRlcmx5aW5nIGJsb2NrIGRldmljZSwgYW5kIGhvdyB0aGUgaW5saW5lIGRhdGEmIzM5O3MgaW50ZWdyaXR5IGlzIGVuc3VyZWQuIFdoYXQgYXJlIHRoZSBrZXkgaW52YXJpYW50cyBtYWludGFpbmVkPyBIb3cgZG9lcyB0aGlzIGNvZGUgcHJvdGVjdCB0aGUgbWV0YWRhdGEgY29uc2lzdGVuY3k/IEl0JiMzOTtzIGFsbCBhYm91dCBlbnN1cmluZyB0aGUgcmlnaHQgbGV2ZWwgb2YgY29uY3VycmVuY3kgYW5kIGRhdGEgaW50ZWdyaXR5IGluIHRoaXMgaW1wb3J0YW50IGFyZWEgb2YgdGhlIGZpbGVzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvZXh0NC9pbmxpbmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTE1MDpcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsIFx1MDAyNmksIFx1MDAyNmlzKTtcbjExNTE6XHRcdGlmIChlcnJvcilcbjExNTI6XHRcdFx0Z290byByZWNvdmVyeTtcbjExNTM6XHRcdGlmICghaXMucy5ub3RfZm91bmQpXG4xMTU0Olx0XHRcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlLCBpbm9kZSwgXHUwMDI2aSwgXHUwMDI2aXMpO1xuMTE1NTpcdHJlY292ZXJ5OlxuMTE1NjpcdFx0aWYgKGVycm9yKSB7XG4xMTU3Olx0XHRcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4xMTU4Olx0XHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7XG4xMTU5Olx0XHRcdG1lbWNweShoZWFkZXIsIHhhdHRyX2J1ZiwgeGF0dHJfc2l6ZSk7XG4xMTYwOlx0bm9fZnJlZTpcbjExNjE6XHRcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbjExNjI6XHRcdFx0bWVtY3B5KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIGlfYmxvY2tfYnVmLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbjExNjM6XHRcdFx0bWVtY3B5KGVpLVx1MDAzZWlfZGF0YSwgcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuMTE2NDpcdFx0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4xMTY1Olx0XHRcdGdldF9iaChpcy5pbG9jLmJoKTtcbjExNjY6XHRcdFx0ZXh0NF9tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgXHUwMDI2aXMuaWxvYyk7XG4xMTY3Olx0XHR9IGVsc2Uge1xuMTE2ODpcdFx0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xuMTE2OTpcdFx0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4xMTcwOlx0XHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbjExNzE6XHRcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuMTE3MjpcdFx0XHR9XG4xMTczOlx0XHRcdGdldF9iaChpcy5pbG9jLmJoKTtcbjExNzQ6XHRcdFx0ZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbjExNzU6XHRcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9vZmYgPSAwO1xuMTE3NjpcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xuMTE3NzpcdFx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4xMTc4Olx0XHRcdGJyZWxzZShiaCk7XG4xMTc5Olx0XHR9XG4xMTgwOlx0XHRnb3RvIG91dDtcbjExODE6XHRlcnJvcjpcbjExODI6XHRcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7XG4xMTgzOlx0XHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xuMTE4NDpcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbjExODU6XHRvdXQ6XG4xMTg2Olx0XHRicmVsc2UoaXMuaWxvYy5iaCk7XG4xMTg3Olx0XHR1cF93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbjExODg6XHRcdGtmcmVlKGlfYmxvY2tfYnVmKTtcbjExODk6XHRcdGtmcmVlKHhhdHRyX2J1Zik7XG4xMTkwOlx0XHRyZXR1cm4gZXJyb3I7XG4xMTkxOlx0fVxuMTE5MjpcdFxuMTE5MzpcdHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuMTE5NDpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuMTE5NTpcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKVxuMTE5NjpcdHtcbjExOTc6XHRcdGludCBlcnJvcjtcbjExOTg6XHRcdHZvaWQgKmJ1ZiA9IE5VTEw7XG4xMTk5Olx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbjEyMDA6XHRcdGludCBpbmxpbmVfc2l6ZTtcbjEyMDE6XHRcdGV4dDRfZnNibGtfdCBuZXdibG9jayA9IDA7XG4xMjAyOlx0XHRzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXI7XG4xMjAzOlx0XHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuMTIwNDpcdFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jaztcbjEyMDU6XHRcbjEyMDY6XHRcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xuMTIwNzpcdFx0YnVmID0ga21hbGxvYyhpbmxpbmVfc2l6ZSwgR0ZQX05PRlMpO1xuMTIwODpcdFx0aWYgKCFidWYpIHtcbjEyMDk6XHRcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuMTIxMDpcdFx0XHRnb3RvIG91dDtcbjEyMTE6XHRcdH1cbjEyMTI6XHRcbjEyMTM6XHRcdGVycm9yID0gZXh0NF9yZWFkX2lubGluZV9kYXRhKGlub2RlLCBidWYsIGlubGluZV9zaXplLCBpbG9jKTtcbjEyMTQ6XHRcdGlmIChlcnJvciBcdTAwM2MgMClcbjEyMTU6XHRcdFx0Z290byBvdXQ7XG4xMjE2Olx0XG4xMjE3Olx0XHQvKlxuMTIxODpcdFx0ICogTWFrZSBzdXJlIHRoZSBpbmxpbmUgZGlyZWN0b3J5IGVudHJpZXMgcGFzcyBjaGVja3MgYmVmb3JlIHdlIHRyeSB0b1xuMTIxOTpcdFx0ICogY29udmVydCB0aGVtLCBzbyB0aGF0IHdlIGF2b2lkIHRvdWNoaW5nIHN0dWZmIHRoYXQgbmVlZHMgZnNjay5cbjEyMjA6XHRcdCAqL1xuMTIyMTpcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuMTIyMjpcdFx0XHRlcnJvciA9IGV4dDRfY2hlY2tfYWxsX2RlKGlub2RlLCBpbG9jLVx1MDAzZWJoLFxuMTIyMzpcdFx0XHRcdFx0XHRidWYgJiM0MzsgRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUsXG4xMjI0Olx0XHRcdFx0XHRcdGlubGluZV9zaXplIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUpO1xuMTIyNTpcdFx0XHRpZiAoZXJyb3IpXG4xMjI2Olx0XHRcdFx0Z290byBvdXQ7XG4xMjI3Olx0XHR9XG4xMjI4Olx0XG4xMjI5Olx0XHRtZW1zZXQoXHUwMDI2YXIsIDAsIHNpemVvZihhcikpO1xuMTIzMDpcdFx0YXIuaW5vZGUgPSBpbm9kZTtcbjEyMzE6XHRcdGFyLmxvZ2ljYWwgPSAwO1xuMTIzMjpcdFx0YXIubGVuID0gMTtcbjEyMzM6XHRcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4xMjM0Olx0XHRcdGFyLmZsYWdzID0gRVhUNF9NQl9ISU5UX0RBVEE7XG4xMjM1Olx0XHRlbHNlXG4xMjM2Olx0XHRcdGFyLmZsYWdzID0gMDtcbjEyMzc6XHRcdG5ld2Jsb2NrID0gZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZSwgXHUwMDI2YXIsIFx1MDAyNmVycm9yKTtcbjEyMzg6XHRcdGlmIChlcnJvciBcdTAwM2MgMClcbjEyMzk6XHRcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZsb3csIHNvIEkmIzM5O2xsIGJyZWFrIGl0IGRvd24gcGllY2UgYnkgcGllY2UuIEZpcnN0LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGNvZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0JiMzOTtzIGNhbGxlZCBhbmQsIG1vc3QgaW1wb3J0YW50bHksICp3aHkqIGl0JiMzOTtzIGNhbGxlZC4gV2hhdCYjMzk7cyB0aGUgdHJpZ2dlcmluZyBldmVudD8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciB0cmFuc2FjdGlvbj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGJlIGltbWVkaWF0ZWx5IGF3YXJlIG9mLCBnaXZlbiB0aGUgJiMzNDtub2xvY2smIzM0OyBkZXNpZ25hdGlvbj8gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSByZWQgZmxhZywgc28gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jay1mcmVlIGFzcGVjdHMuCgpJJiMzOTtsbCBtZW50YWxseSBtYXAgb3V0IHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBpbm9kZSwgdGhlIGJsb2NrIGdyb3VwIGRlc2NyaXB0b3JzLCBhbmQgdGhlIGV4dGVudCB0cmVlLiBJcyBpdCBtb3ZpbmcgZGF0YSwgYWxsb2NhdGluZyBuZXcgYmxvY2tzLCBvciBzaW1wbHkgdXBkYXRpbmcgbWV0YWRhdGE/IElzIGl0IGEgZGVzdHJ1Y3RpdmUgb3BlcmF0aW9uIChsaWtlIGFuIGluLXBsYWNlIGNvbnZlcnNpb24pLCBvciBkb2VzIGl0IG1haW50YWluIHRoZSBvbGQgZGF0YSAocGVyaGFwcyBmb3IgYSBwb3RlbnRpYWwgcm9sbGJhY2spPwoKSSBzaG91bGQgYWxzbyBhbnRpY2lwYXRlIGVycm9yIHBhdGhzLiBXaGF0IGFyZSB0aGUgY29tbW9uIGZhaWx1cmUgc2NlbmFyaW9zPyBBcmUgdGhlcmUgY2hlY2tzIGZvciByZXNvdXJjZSBleGhhdXN0aW9uIChkaXNrIGZ1bGwsIGV0Yy4pPyBXaGF0IGhhcHBlbnMgaWYgYSBjcml0aWNhbCBtZXRhZGF0YSB1cGRhdGUgZmFpbHMgbWlkLW9wZXJhdGlvbj8gQXJlIHRoZXJlIGFueSBhdG9taWNpdHkgZ3VhcmFudGVlcywgb3IgaXMgdGhlcmUgYSByaXNrIG9mIGluY29uc2lzdGVudCBzdGF0ZSBpZiB0aGUgZnVuY3Rpb24gaXMgaW50ZXJydXB0ZWQ/IEhvdyBhcmUgdGhlc2UgZmFpbHVyZXMgaGFuZGxlZD8gQXJlIHRoZXJlIHJldHJpZXM/IEZhbGxiYWNrcz8gUGFuaWMgc2l0dWF0aW9ucz8KCkZpbmFsbHksIGhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGV4dDQgY29kZT8gQXJlIHRoZXJlIGFueSBhc3N1bXB0aW9ucyBtYWRlIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgZmlsZXN5c3RlbSBvciB0aGUgc3Vycm91bmRpbmcgY29udGV4dD8gQXJlIHRoZXJlIGltcGxpY2l0IGNhbGxzIHRvIG90aGVyIGZ1bmN0aW9ucyBvciBzdHJ1Y3R1cmVzPyBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEkmIzM5O20gYXdhcmUgb2YgdGhlIGRlcGVuZGVuY2llcywgc28gdGhhdCBJIGNhbiB1bmRlcnN0YW5kIGFueSBwb3NzaWJsZSByaXBwbGUgZWZmZWN0cy4gSSYjMzk7bSBnb2luZyB0byBwYXkgYXR0ZW50aW9uIHRvIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBqb3VybmFsaW5nLiBIb3cgaXMgdGhpcyBvcGVyYXRpb24gbG9nZ2VkPyBJZiBpdCYjMzk7cyBhIGNyaXRpY2FsIGNoYW5nZSwgaXMgaXQgYmVpbmcgam91cm5hbGVkPyBJZiBzbywgd2hhdCBpcyB3cml0dGVuIHRvIHRoZSBqb3VybmFsPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5saW5lLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDU1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDA6XHRcdGFsbG9jYXRlZF9ibG9jayA9IEVYVDRfQzJCKHNiaSwgYXIubGVuKTtcbjEyNDE6XHRcdGJoID0gc2JfZ2V0YmxrKGlub2RlLVx1MDAzZWlfc2IsIG5ld2Jsb2NrKTtcbjEyNDI6XHRcdGlmICghYmgpIHtcbjEyNDM6XHRcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuMTI0NDpcdFx0XHRnb3RvIG91dF9iaDtcbjEyNDU6XHRcdH1cbjEyNDY6XHRcbjEyNDc6XHRcdGxvY2tfYnVmZmVyKGJoKTtcbjEyNDg6XHRcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgYmgsXG4xMjQ5Olx0XHRcdFx0XHRcdCAgICAgICBFWFQ0X0pUUl9OT05FKTtcbjEyNTA6XHRcdGlmIChlcnJvcikge1xuMTI1MTpcdFx0XHR1bmxvY2tfYnVmZmVyKGJoKTtcbjEyNTI6XHRcdFx0ZXJyb3IgPSAtRUlPO1xuMTI1MzpcdFx0XHRnb3RvIG91dF9iaDtcbjEyNTQ6XHRcdH1cbjEyNTU6XHRcdG1lbXNldChiaC1cdTAwM2ViX2RhdGEsIDAsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuMTI1NjpcdFxuMTI1NzpcdFx0aWYgKCFTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbjEyNTg6XHRcdFx0bWVtY3B5KGJoLVx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XG4xMjU5Olx0XHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuMTI2MDpcdFx0XHR1bmxvY2tfYnVmZmVyKGJoKTtcbjEyNjE6XHRcdFx0ZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsXG4xMjYyOlx0XHRcdFx0XHRcdFx0ICAgaW5vZGUsIGJoKTtcbjEyNjM6XHRcdH0gZWxzZSB7XG4xMjY0Olx0XHRcdHVubG9ja19idWZmZXIoYmgpO1xuMTI2NTpcdFx0XHRlcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbjEyNjY6XHRcdFx0XHQgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLVx1MDAzZWlub2RlKSxcbjEyNjc6XHRcdFx0XHQgIGJ1ZiAmIzQzOyBFWFQ0X0lOTElORV9ET1RET1RfU0laRSxcbjEyNjg6XHRcdFx0XHQgIGlubGluZV9zaXplIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUpO1xuMTI2OTpcdFx0fVxuMTI3MDpcdG91dF9iaDpcbjEyNzE6XHRcdGlmIChlcnJvcikge1xuMTI3MjpcdFx0XHRpZiAoYmgpXG4xMjczOlx0XHRcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIG5ld2Jsb2NrKTtcbjEyNzQ6XHRcdFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xuMTI3NTpcdFxuMTI3NjpcdFx0XHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuMTI3NzpcdFx0XHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xuMTI3ODpcdFx0XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIDApO1xuMTI3OTpcdFx0XHR1cF93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbjEyODA6XHRcdH0gZWxzZSB7XG4xMjgxOlx0XHRcdGVycm9yID0gZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlLCBpbm9kZSxcbjEyODI6XHRcdFx0XHRcdG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIGJoKTtcbjEyODM6XHRcdH1cbjEyODQ6XHRvdXQ6XG4xMjg1Olx0XHRrZnJlZShidWYpO1xuMTI4NjpcdFx0cmV0dXJuIGVycm9yO1xuMTI4NzpcdH1cbjEyODg6XHRcbjEyODk6XHQvKlxuMTI5MDpcdCAqIFRyeSB0byBhZGQgdGhlIG5ldyBlbnRyeSB0byB0aGUgaW5saW5lIGRhdGEuXG4xMjkxOlx0ICogSWYgc3VjY2VlZHMsIHJldHVybiAwLiBJZiBub3QsIGV4dGVuZGVkIHRoZSBpbmxpbmUgZGlyIGFuZCBjb3BpZWQgZGF0YSB0b1xuMTI5MjpcdCAqIHRoZSBuZXcgY3JlYXRlZCBibG9jay5cbjEyOTM6XHQgKi9cbjEyOTQ6XHRpbnQgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzc0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogOTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW5saW5lIERhdGEgQ29udmVyc2lvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHJlYWxseSB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgYWx3YXlzICp3aHkqIHdhcyB0aGlzIGNoYW5nZSBuZWNlc3Nhcnk/IEkgc2VlIHRoYXQgaXQmIzM5O3MgYWx0ZXJpbmcgdGhlIGlubGluZSBkYXRhIGNvbnZlcnNpb24gcHJvY2Vzcy4gUHJldmlvdXNseSwgaXQgbG9va3MgbGlrZSBgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9ja2Agd2FzIGNhbGxlZCwgdGhlbiBgZXh0NF9tYXBfYmxvY2tzYC4gSWYgYGV4dDRfbWFwX2Jsb2Nrc2AgZmFpbGVkLCB0aGV5JiMzOTtkIHJvbGwgYmFjayB3aXRoIGBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGFgLiBOb3csIHRoZXkmIzM5O3JlIGFsbG9jYXRpbmcgdGhlIG5ldyBibG9jayBkaXJlY3RseSB3aXRoIGBleHQ0X21iX25ld19ibG9ja3NgLCBwb3B1bGF0aW5nIGl0LCBhbmQgKnRoZW4qIGF0b21pY2FsbHkgcmVwbGFjaW5nIHRoZSBpbmxpbmUgZGF0YSB3aXRoIHRoZSBibG9jay9leHRlbnQgdXNpbmcgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYC4gVGhlIGFkdmFudGFnZSBpcywgcHJlc3VtYWJseSwgYmV0dGVyIHJvbGxiYWNrIGNhcGFiaWxpdGllcyBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgdGhlIGNvbnZlcnNpb24uCgpNeSBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyBtZW1vcnkgc2FmZXR5LiBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IGF1ZGl0IGZvciBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLCBsZWFrcyBvZiBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdG8gdXNlcnNwYWNlLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIHRoYXQgbWlnaHQgYmUgdXNlZCBpbiBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBpbnNwZWN0IGV2ZXJ5IHZhcmlhYmxlIGFuZCBidWZmZXIgd2l0aGluIHRoZXNlIGZ1bmN0aW9ucy4KCkZpcnN0LCBsZXQmIzM5O3MgbG9vayBhdCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2A6IEkgc2VlIGEgYGJ1ZmAgYWxsb2NhdGVkIHdpdGggYGttYWxsb2NgLCB0aGUgaW5saW5lIGRhdGEgcmVhZCBpbnRvIGl0LiBHb29kLiBJdCYjMzk7cyBmcmVlZCBvbiBlcnJvci4gYGFyYCBpcyB6ZXJvZWQgb3V0LCB3aGljaCBpcyBnb29kIHByYWN0aWNlLiBgYWxsb2NhdGVkX2Jsb2NrYCBpcyBjYWxjdWxhdGVkLiBUaGVuLCBgc2JfZ2V0YmxrYCByZXRyaWV2ZXMgYSBibG9jaywgd2hpY2ggaXMgdGhlbiAqemVyb2VkIG91dCogYmVmb3JlIGFueSBkYXRhIGlzIGNvcGllZCBvciB0aGUgZGlyYmxvY2sgaXMgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSB2ZXJ5IGltcG9ydGFudCBzdGVwIGFuZCBhIGdvb2Qgc2lnbiBmb3IgbWVtb3J5IHNhZmV0eS4gYG1lbWNweWAgY29waWVzIHRoZSBpbmxpbmUgZGF0YSBpbnRvIHRoZSBibG9jay4gTm8gb2J2aW91cyBpc3N1ZXMgaGVyZSBzbyBmYXIuCgpOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AuIEkgc2VlIGBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzYCwgYW5kIHRoZSBpbXBvcnRhbnQgcGFydCBpcyB0aGF0IGBpcy5pbG9jYCAqaXMqIGluaXRpYWxpemVkIGJ5IGBleHQ0X2dldF9pbm9kZV9sb2NgLiBPa2F5LCB3ZSYjMzk7cmUgbm90IHVzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRoZXJlLiBOZXh0LCBgc3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpYCBsb29rcyBwcm9wZXJseSBpbml0aWFsaXplZC4gYGlfYmxvY2tfYnVmYCBpcyBhbGxvY2F0ZWQsIGRhdGEgaXMgY29waWVkIGludG8gaXQgZnJvbSBgcmF3X2lub2RlLSZndDtpX2Jsb2NrYCwgdGhlbiB0aGUgaW5saW5lIGRhdGEgYXJlYSBpcyAqemVyb2VkKi4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gcHJldmVudCBzdGFsZSBkYXRhLiBUaGVuIGB4YXR0cl9idWZgIGlzIGFsbG9jYXRlZCBhbmQgY29waWVkIGZyb20uIEFnYWluLCBubyByZWQgZmxhZ3MuIEkgc2VlIGEgYHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleGAgYW5kIHRob3NlIGluaXRpYWxpemVkIGV4dGVudCBmaWVsZHMuIEJ1dCwgd2FpdCEgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGV4dDRfZXh0ZW50YC4gSSYjMzk7bGwgc2VhcmNoIHRoZSBjb2RlYmFzZSB0byBtYWtlIHN1cmUgSSBrbm93IGFsbCBpdHMgZmllbGRzIHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlIHdoYXQmIzM5O3MgZ29pbmcgb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyBkYXRhIGlzIG9yZ2FuaXplZC4gT2theSwgSSYjMzk7bGwgZ28gdGhyb3VnaCBhbmQgY2hlY2sgdGhlIGBzdHJ1Y3QgZXh0NF9leHRlbnRgIGRlZmluaXRpb24gcmlnaHQgbm93Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBleHQ0X2V4dGVudCBcXHsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0X2V4dGVudHMuaD00OD1zdHJ1Y3QgZXh0NF9leHRlbnRfdGFpbCB7XG4tLVxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaC01NS0gKi9cbmZzL2V4dDQvZXh0NF9leHRlbnRzLmg6NTY6c3RydWN0IGV4dDRfZXh0ZW50IHtcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtNTctXHRfX2xlMzJcdGVlX2Jsb2NrO1x0LyogZmlyc3QgbG9naWNhbCBibG9jayBleHRlbnQgY292ZXJzICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDQ3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgZXh0NCBFeHRlbnQgU3RydWN0dXJlKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZ1bmRhbWVudGFsIGBleHQ0X2V4dGVudGAgc3RydWN0dXJlIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBkaXJlY3RseSBhdCB0aGUgaGVhZGVyIGZpbGUg4oCTIGBmcy9leHQ0L2V4dDRfZXh0ZW50cy5oYCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTYsIGFzIHRoYXQmIzM5O3MgcHJvYmFibHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgYSBjbGVhciBwaWN0dXJlIGluIG15IGhlYWQgb2YgdGhlIGNvbnN0aXR1ZW50IGZpZWxkcyBhbmQgdGhlaXIgcHVycG9zZXMuIFdoYXQgaW5mb3JtYXRpb24gZG9lcyB0aGlzIHN0cnVjdHVyZSBob2xkPyBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGtleSBjb21wb25lbnRzIOKAkyB0aGUgc3RhcnRpbmcgYmxvY2ssIHRoZSBudW1iZXIgb2YgYmxvY2tzLCBtYXliZSBhIGxlYWYgbm9kZSBwb2ludGVyIGFuZCB0aGUgbG9naWNhbCBibG9jayB0aGF0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGRpc2sgYmxvY2ssIGFuZCBpZiBpdCYjMzk7cyB0aGUgbGVhZiBub2RlLCBhIHBvaW50ZXIgdG8gdGhlIGRpcmVjdC9pbmRpcmVjdC9kb3VibGUtaW5kaXJlY3QgYmxvY2tzLCBhbmQgYWxsIHJlbGF0ZWQgbWV0YWRhdGEuIFVuZGVyc3RhbmRpbmcgdGhpcyBzdHJ1Y3R1cmUgaXMgY3J1Y2lhbCBmb3IgYW55IGRlZXBlciB3b3JrIHdpdGggZXh0ZW50cywgZXNwZWNpYWxseSBpZiBJJiMzOTttIHRyb3VibGVzaG9vdGluZyBvciBvcHRpbWl6aW5nIEkvTyBwZXJmb3JtYW5jZS4gSXQmIzM5O3MgdGhlIGJ1aWxkaW5nIGJsb2NrIGZvciBhbGwgZXh0ZW50LWJhc2VkIGJsb2NrIGFsbG9jYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L2V4dDRfZXh0ZW50cy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdH07XG4gIDUxOlx0XG4gIDUyOlx0LypcbiAgNTM6XHQgKiBUaGlzIGlzIHRoZSBleHRlbnQgb24tZGlzayBzdHJ1Y3R1cmUuXG4gIDU0Olx0ICogSXQmIzM5O3MgdXNlZCBhdCB0aGUgYm90dG9tIG9mIHRoZSB0cmVlLlxuICA1NTpcdCAqL1xuICA1NjpcdHN0cnVjdCBleHQ0X2V4dGVudCB7XG4gIDU3Olx0XHRfX2xlMzJcdGVlX2Jsb2NrO1x0LyogZmlyc3QgbG9naWNhbCBibG9jayBleHRlbnQgY292ZXJzICovXG4gIDU4Olx0XHRfX2xlMTZcdGVlX2xlbjtcdFx0LyogbnVtYmVyIG9mIGJsb2NrcyBjb3ZlcmVkIGJ5IGV4dGVudCAqL1xuICA1OTpcdFx0X19sZTE2XHRlZV9zdGFydF9oaTtcdC8qIGhpZ2ggMTYgYml0cyBvZiBwaHlzaWNhbCBibG9jayAqL1xuICA2MDpcdFx0X19sZTMyXHRlZV9zdGFydF9sbztcdC8qIGxvdyAzMiBiaXRzIG9mIHBoeXNpY2FsIGJsb2NrICovXG4gIDYxOlx0fTtcbiAgNjI6XHRcbiAgNjM6XHQvKlxuICA2NDpcdCAqIFRoaXMgaXMgaW5kZXggb24tZGlzayBzdHJ1Y3R1cmUuXG4gIDY1Olx0ICogSXQmIzM5O3MgdXNlZCBhdCBhbGwgdGhlIGxldmVscyBleGNlcHQgdGhlIGJvdHRvbS5cbiAgNjY6XHQgKi9cbiAgNjc6XHRzdHJ1Y3QgZXh0NF9leHRlbnRfaWR4IHtcbiAgNjg6XHRcdF9fbGUzMlx0ZWlfYmxvY2s7XHQvKiBpbmRleCBjb3ZlcnMgbG9naWNhbCBibG9ja3MgZnJvbSAmIzM5O2Jsb2NrJiMzOTsgKi9cbiAgNjk6XHRcdF9fbGUzMlx0ZWlfbGVhZl9sbztcdC8qIHBvaW50ZXIgdG8gdGhlIHBoeXNpY2FsIGJsb2NrIG9mIHRoZSBuZXh0ICpcbiAgNzA6XHRcdFx0XHRcdCAqIGxldmVsLiBsZWFmIG9yIG5leHQgaW5kZXggY291bGQgYmUgdGhlcmUgKi9cbiAgNzE6XHRcdF9fbGUxNlx0ZWlfbGVhZl9oaTtcdC8qIGhpZ2ggMTYgYml0cyBvZiBwaHlzaWNhbCBibG9jayAqL1xuICA3MjpcdFx0X191MTZcdGVpX3VudXNlZDtcbiAgNzM6XHR9O1xuICA3NDpcdFxuICA3NTpcdC8qXG4gIDc2Olx0ICogRWFjaCBibG9jayAobGVhdmVzIGFuZCBpbmRleGVzKSwgZXZlbiBpbm9kZS1zdG9yZWQgaGFzIGhlYWRlci5cbiAgNzc6XHQgKi9cbiAgNzg6XHRzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyIHtcbiAgNzk6XHRcdF9fbGUxNlx0ZWhfbWFnaWM7XHQvKiBwcm9iYWJseSB3aWxsIHN1cHBvcnQgZGlmZmVyZW50IGZvcm1hdHMgKi9cbiAgODA6XHRcdF9fbGUxNlx0ZWhfZW50cmllcztcdC8qIG51bWJlciBvZiB2YWxpZCBlbnRyaWVzICovXG4gIDgxOlx0XHRfX2xlMTZcdGVoX21heDtcdFx0LyogY2FwYWNpdHkgb2Ygc3RvcmUgaW4gZW50cmllcyAqL1xuICA4MjpcdFx0X19sZTE2XHRlaF9kZXB0aDtcdC8qIGhhcyB0cmVlIHJlYWwgdW5kZXJseWluZyBibG9ja3M/ICovXG4gIDgzOlx0XHRfX2xlMzJcdGVoX2dlbmVyYXRpb247XHQvKiBnZW5lcmF0aW9uIG9mIHRoZSB0cmVlICovXG4gIDg0Olx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzMjUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGV4dDRfZXh0X3N0b3JlX3BibG9jayoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGV4dDRfZXh0X3N0b3JlX3BibG9jaygmYW1wO25ld2V4LCBibG9jayk7YCBpcyBkb2luZy4gRmlyc3QsIEkmIzM5O2xsIHJlZnJlc2ggbXkgbWVtb3J5IG9mIHRoZSBgZXh0NF9leHRlbnRgIHN0cnVjdHVyZS4gUmlnaHQsIGBlZV9ibG9ja2AgaXMgNCBieXRlcywgYGVlX2xlbmAgaXMgMiBieXRlcywgdGhlbiBgZWVfc3RhcnRfaGlgIGlzIDIgYnl0ZXMgYW5kIGBlZV9zdGFydF9sb2AgaXMgNCBieXRlcywgdG90YWxpbmcgMTIgYnl0ZXMgZm9yIHRoZSBlbnRpcmUgZXh0ZW50IHN0cnVjdHVyZS4gTm93LCBJIG5lZWQgdG8ga25vdyBwcmVjaXNlbHkgd2hhdCBgZXh0NF9leHRfc3RvcmVfcGJsb2NrYCBpcyBzZXR0aW5nIHdpdGhpbiB0aGlzIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIGZpZ3VyaW5nIG91dCBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9leHRfc3RvcmVfcGJsb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NF9leHRlbnRzLmg9MjMyPXN0YXRpYyBpbmxpbmUgZXh0NF9mc2Jsa190IGV4dDRfaWR4X3BibG9jayhzdHJ1Y3QgZXh0NF9leHRlbnRfaWR4ICppeClcbi0tXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oLTI0MS0vKlxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaDoyNDI6ICogZXh0NF9leHRfc3RvcmVfcGJsb2NrOlxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaC0yNDMtICogc3RvcmVzIGEgbGFyZ2UgcGh5c2ljYWwgYmxvY2sgbnVtYmVyIGludG8gYW4gZXh0ZW50IHN0cnVjdCxcbi0tXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oLTI0NS0gKi9cbmZzL2V4dDQvZXh0NF9leHRlbnRzLmg6MjQ2OnN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2V4dF9zdG9yZV9wYmxvY2soc3RydWN0IGV4dDRfZXh0ZW50ICpleCxcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtMjQ3LVx0XHRcdFx0XHQgZXh0NF9mc2Jsa190IHBiKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM9MjIyPXN0YXRpYyBpbnQgZXh0ZW50c19rdW5pdF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTMxNC1cdEVYVF9GSVJTVF9FWFRFTlQoZWgpLVx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KEVYVF9EQVRBX0xFTik7XG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jOjMxNTpcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhFWFRfRklSU1RfRVhURU5UKGVoKSwgRVhUX0RBVEFfUEJMSyk7XG5mcy9leHQ0L2V4dGVudHMtdGVzdC5jLTMxNi1cdGlmICghcGFyYW0gfHwgcGFyYW0tXHUwMDNlaXNfdW53cml0X2F0X3N0YXJ0KVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTE5OTI9ZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTIwODUtXHRcdFx0ZXgtXHUwMDNlZWVfYmxvY2sgPSBuZXdleHQtXHUwMDNlZWVfYmxvY2s7XG5mcy9leHQ0L2V4dGVudHMuYzoyMDg2Olx0XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgZXh0NF9leHRfcGJsb2NrKG5ld2V4dCkpO1xuZnMvZXh0NC9leHRlbnRzLmMtMjA4Ny1cdFx0XHRleC1cdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNihleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleClcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0yMTk2LVx0bmVhcmV4LVx1MDAzZWVlX2Jsb2NrID0gbmV3ZXh0LVx1MDAzZWVlX2Jsb2NrO1xuZnMvZXh0NC9leHRlbnRzLmM6MjE5NzpcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhuZWFyZXgsIGV4dDRfZXh0X3BibG9jayhuZXdleHQpKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTIxOTgtXHRuZWFyZXgtXHUwMDNlZWVfbGVuID0gbmV3ZXh0LVx1MDAzZWVlX2xlbjtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz0yNjE0PWV4dDRfZXh0X3JtX2xlYWYoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy0yNzM5LVx0XHRcdC8qIHRoaXMgZXh0ZW50IGlzIHJlbW92ZWQ7IG1hcmsgc2xvdCBlbnRpcmVseSB1bnVzZWQgKi9cbmZzL2V4dDQvZXh0ZW50cy5jOjI3NDA6XHRcdFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCAwKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTI3NDEtXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MzE5MT1zdGF0aWMgc3RydWN0IGV4dDRfZXh0X3BhdGggKmV4dDRfc3BsaXRfZXh0ZW50X2F0KGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzI0Ni1cdGV4Mi1cdTAwM2VlZV9sZW4gICA9IGNwdV90b19sZTE2KGVlX2xlbiAtIChzcGxpdCAtIGVlX2Jsb2NrKSk7XG5mcy9leHQ0L2V4dGVudHMuYzozMjQ3Olx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4MiwgbmV3YmxvY2spO1xuZnMvZXh0NC9leHRlbnRzLmMtMzI0OC1cdGlmIChpc191bndyaXQpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MzU1Nz1leHQ0X2V4dF9jb252ZXJ0X3RvX2luaXRpYWxpemVkKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzY0NS1cdFx0XHRleC1cdTAwM2VlZV9ibG9jayA9IGNwdV90b19sZTMyKGVlX2Jsb2NrICYjNDM7IG1hcF9sZW4pO1xuZnMvZXh0NC9leHRlbnRzLmM6MzY0NjpcdFx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIGVlX3BibGsgJiM0MzsgbWFwX2xlbik7XG5mcy9leHQ0L2V4dGVudHMuYy0zNjQ3LVx0XHRcdGV4LVx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGVlX2xlbiAtIG1hcF9sZW4pO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTM2OTEtXHRcdFx0YWJ1dF9leC1cdTAwM2VlZV9ibG9jayA9IGNwdV90b19sZTMyKG5leHRfbGJsayAtIG1hcF9sZW4pO1xuZnMvZXh0NC9leHRlbnRzLmM6MzY5MjpcdFx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soYWJ1dF9leCwgbmV4dF9wYmxrIC0gbWFwX2xlbik7XG5mcy9leHQ0L2V4dGVudHMuYy0zNjkzLVx0XHRcdGV4LVx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGVlX2xlbiAtIG1hcF9sZW4pO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTM3NDUtXHRcdFx0XHRjcHVfdG9fbGUxNigqYWxsb2NhdGVkIC0gc3BsaXRfbWFwLm1fbGVuKTtcbmZzL2V4dDQvZXh0ZW50cy5jOjM3NDY6XHRcdFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKFx1MDAyNnplcm9fZXgxLFxuZnMvZXh0NC9leHRlbnRzLmMtMzc0Ny1cdFx0XHRcdGV4dDRfZXh0X3BibG9jayhleCkgJiM0Mzsgc3BsaXRfbWFwLm1fbGJsayAmIzQzO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTM3NjAtXHRcdFx0XHRcdFx0XHRlZV9ibG9jayk7XG5mcy9leHQ0L2V4dGVudHMuYzozNzYxOlx0XHRcdFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKFx1MDAyNnplcm9fZXgyLFxuZnMvZXh0NC9leHRlbnRzLmMtMzc2Mi1cdFx0XHRcdFx0XHQgICAgICBleHQ0X2V4dF9wYmxvY2soZXgpKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00MjY5PWludCBleHQ0X2V4dF9tYXBfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDQ3My1cdHBibGsgPSBuZXdibG9jayAmIzQzOyBvZmZzZXQ7XG5mcy9leHQ0L2V4dGVudHMuYzo0NDc0Olx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKFx1MDAyNm5ld2V4LCBwYmxrKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTQ0NzUtXHRuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNihhci5sZW4pO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTU3NjU9ZXh0NF9zd2FwX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZTEsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNTg5OS1cdFx0dG1wX2V4ID0gKmV4MTtcbmZzL2V4dDQvZXh0ZW50cy5jOjU5MDA6XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleDEsIGV4dDRfZXh0X3BibG9jayhleDIpKTtcbmZzL2V4dDQvZXh0ZW50cy5jOjU5MDE6XHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleDIsIGV4dDRfZXh0X3BibG9jayhcdTAwMjZ0bXBfZXgpKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTU5MDItXHRcdGV4MS1cdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNihlMl9sZW4pO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTYwMjk9aW50IGV4dDRfZXh0X3JlcGxheV91cGRhdGVfZXgoc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9sYmxrX3Qgc3RhcnQsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNjA4Mi1cdFx0ZXh0NF9leHRfbWFya19pbml0aWFsaXplZChleCk7XG5mcy9leHQ0L2V4dGVudHMuYzo2MDgzOlx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCBwYmxrKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTYwODQtXHRkb3duX3dyaXRlKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9kYXRhX3NlbSk7XG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTkzMT1zdGF0aWMgaW50IGV4dDRfZmNfd3JpdGVfaW5vZGVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgKmNyYylcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtOTYxLVx0XHRleC1cdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNihyYW5nZS1cdTAwM2VsZW4pO1xuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjk2MjpcdFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCByYW5nZS1cdTAwM2VwYmxrKTtcbmZzL2V4dDQvZmFzdF9jb21taXQuYy05NjMtXHRcdGlmIChyYW5nZS1cdTAwM2V1bndyaXR0ZW4pXG4tLVxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jPTIxNDg9c3RhdGljIGludCBleHQ0X2ZjX3JlcGxheV9hZGRfcmFuZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTggKnZhbClcbi0tXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjIwMi1cdFx0XHRuZXdleC5lZV9ibG9jayA9IGNwdV90b19sZTMyKGN1cik7XG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjIwMzpcdFx0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjIwNC1cdFx0XHRcdFx1MDAyNm5ld2V4LCBzdGFydF9wYmxrICYjNDM7IGN1ciAtIHN0YXJ0KTtcbi0tXG5mcy9leHQ0L2lubGluZS5jPTEwNzQ9c3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXG4tLVxuZnMvZXh0NC9pbmxpbmUuYy0xMTM1LVx0XHRuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNigxKTtcbmZzL2V4dDQvaW5saW5lLmM6MTEzNjpcdFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKFx1MDAyNm5ld2V4LCBibG9jayk7XG5mcy9leHQ0L2lubGluZS5jLTExMzctXHRcdHBhdGggPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsIFx1MDAyNm5ld2V4LCAwKTtcbi0tXG5mcy9leHQ0L21pZ3JhdGUuYz0yMT1zdGF0aWMgaW50IGZpbmlzaF9yYW5nZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvbWlncmF0ZS5jLTMzLVx0bmV3ZXh0LmVlX2xlbiAgID0gY3B1X3RvX2xlMTYobGItXHUwMDNlbGFzdF9ibG9jayAtIGxiLVx1MDAzZWZpcnN0X2Jsb2NrICYjNDM7IDEpO1xuZnMvZXh0NC9taWdyYXRlLmM6MzQ6XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2bmV3ZXh0LCBsYi1cdTAwM2VmaXJzdF9wYmxvY2spO1xuZnMvZXh0NC9taWdyYXRlLmMtMzUtXHQvKiBMb2NraW5nIG9ubHkgZm9yIGNvbnZlbmllbmNlIHNpbmNlIHdlIGFyZSBvcGVyYXRpbmcgb24gdGVtcCBpbm9kZSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAzMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzcyBhcyBJIGRlbHZlIGludG8gdGhlIGBleHQ0X2V4dF9zdG9yZV9wYmxvY2tgIGltcGxlbWVudGF0aW9uOgoKKipEaXZpbmcgaW50byBgZXh0NF9leHRfc3RvcmVfcGJsb2NrYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGV4dDRfZXh0X3N0b3JlX3BibG9ja2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBwdXJwb3NlLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gc3RvcmluZyBwaHlzaWNhbCBibG9jayBhZGRyZXNzZXMgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0mIzM5O3MgZXh0ZW50IHN0cnVjdHVyZSwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjbHVlcy4gSeKAmW0gdGhpbmtpbmcsIGlzIHRoaXMgYSB3cml0ZSBwYXRoIGZ1bmN0aW9uPyBJcyBpdCBiZWluZyBjYWxsZWQgZHVyaW5nIGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uPyBNeSBleHBlcmllbmNlIHNheXMgaXQgcHJvYmFibHkgZGVhbHMgd2l0aCBtYXBwaW5nIGxvZ2ljYWwgYmxvY2tzICh3aGF0IHRoZSB1c2VyIHNlZXMpIHRvIHBoeXNpY2FsIGJsb2NrcyAod2hlcmUgZGF0YSBpcyBhY3R1YWxseSBzdG9yZWQgb24gdGhlIGRpc2spLiBUaGUgbmFtZSwgJiMzOTtzdG9yZV9wYmxvY2smIzM5Oywgc2NyZWFtcyB0aGF0IGF0IG1lLCBvZiBjb3Vyc2UsIGJ1dCBJIHdhbnQgdG8gc2VlIHRoZSBjb250ZXh0LgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHNjZW5hcmlvczogaG93IGl0IGRlYWxzIHdpdGggZXhpc3RpbmcgZXh0ZW50cywgbmV3IGV4dGVudHMsIGFuZCBwb3NzaWJseSwgd2hhdCBpZiB0aGUgZXh0ZW50IGhhcyB0byBiZSBzcGxpdC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBoYW5kbGluZywgZXNwZWNpYWxseSB3aGF0IGhhcHBlbnMgaWYgYWxsb2NhdGlvbiBmYWlscyBvciB0aGUgZmlsZXN5c3RlbSBtZXRhZGF0YSBiZWNvbWVzIGNvcnJ1cHRlZC4gSSBrbm93IHRoYXQgZXh0NCBpcyBnZW5lcmFsbHkgcm9idXN0LCBidXQgSSBuZWVkIHRvIGlkZW50aWZ5IHBvc3NpYmxlIHdlYWsgcG9pbnRzLiBJIGFsc28gbmVlZCB0byBhc3Nlc3MgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVyYWN0aW9ucyB3aXRoIHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9ycywgaW5vZGUgbWV0YWRhdGEsIGFuZCB0aGUgZXh0ZW50IHRyZWUgc3RydWN0dXJlLiBUaGlzIGlzIGFsbCBhYm91dCB0aGUgZGV0YWlscyBvZiBob3cgZXh0NCBtYW5hZ2VzIGl0cyBzcGFjZSEgVGhlIGVmZmljaWVuY3kgb2YgdGhlIGFsbG9jYXRpb24gd2lsbCBiZSBzb21ldGhpbmcgdG8ga2VlcCBteSBleWUgb3V0IGZvciBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NF9leHRlbnRzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTgKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MDpcdFxuIDI0MTpcdC8qXG4gMjQyOlx0ICogZXh0NF9leHRfc3RvcmVfcGJsb2NrOlxuIDI0MzpcdCAqIHN0b3JlcyBhIGxhcmdlIHBoeXNpY2FsIGJsb2NrIG51bWJlciBpbnRvIGFuIGV4dGVudCBzdHJ1Y3QsXG4gMjQ0Olx0ICogYnJlYWtpbmcgaXQgaW50byBwYXJ0c1xuIDI0NTpcdCAqL1xuIDI0NjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2V4dF9zdG9yZV9wYmxvY2soc3RydWN0IGV4dDRfZXh0ZW50ICpleCxcbiAyNDc6XHRcdFx0XHRcdFx0IGV4dDRfZnNibGtfdCBwYilcbiAyNDg6XHR7XG4gMjQ5Olx0XHRleC1cdTAwM2VlZV9zdGFydF9sbyA9IGNwdV90b19sZTMyKCh1bnNpZ25lZCBsb25nKSAocGIgXHUwMDI2IDB4ZmZmZmZmZmYpKTtcbiAyNTA6XHRcdGV4LVx1MDAzZWVlX3N0YXJ0X2hpID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIGxvbmcpICgocGIgXHUwMDNlXHUwMDNlIDMxKSBcdTAwM2VcdTAwM2UgMSkgXHUwMDI2XG4gMjUxOlx0XHRcdFx0XHQgICAgICAweGZmZmYpO1xuIDI1MjpcdH1cbiAyNTM6XHRcbiAyNTQ6XHQvKlxuIDI1NTpcdCAqIGV4dDRfaWR4X3N0b3JlX3BibG9jazpcbiAyNTY6XHQgKiBzdG9yZXMgYSBsYXJnZSBwaHlzaWNhbCBibG9jayBudW1iZXIgaW50byBhbiBpbmRleCBzdHJ1Y3QsXG4gMjU3Olx0ICogYnJlYWtpbmcgaXQgaW50byBwYXJ0c1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjcxNgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEV4dGVudCBTdHJ1Y3R1cmUgYW5kIFByZXBhcmluZyBmb3IgRnVydGhlciBFeGFtaW5hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmV3ZXhgIHN0cnVjdHVyZSBhbmQgbm90aW5nIGhvdyBpdHMgZmllbGRzIGFyZSBpbml0aWFsaXplZC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCDigJMgYGVlX2Jsb2NrYCwgYGVlX2xlbmAsIGBlZV9zdGFydF9sb2AsIGFuZCBgZWVfc3RhcnRfaGlgIGFyZSBhbGwgZXhwbGljaXRseSBhc3NpZ25lZC4gYGVlX2Jsb2NrYCBhbmQgYGVlX2xlbmAgYXJlIGdldHRpbmcgYnl0ZS1vcmRlciBjb252ZXJ0ZWQsIHdoaWNoIGlzIGV4cGVjdGVkLiBUaGUgYGV4dDRfZXh0X3N0b3JlX3BibG9ja2AgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHBvcHVsYXRpbmcgYGVlX3N0YXJ0X2xvYCBhbmQgYGVlX3N0YXJ0X2hpYCwgd2hpY2ggaXMgd2hlcmUgdGhlIGJsb2NrIG1hcHBpbmcgbWFnaWMgcHJvYmFibHkgaGFwcGVucy4KClRoZSBzdHJ1Y3R1cmUgaXRzZWxmLCBgc3RydWN0IGV4dDRfZXh0ZW50YCwgbG9va3MgY2xlYW4g4oCTIG5vIHN1cnByaXNlcyB3aXRoIHRoZSBmaWVsZCBzaXplcyBhbmQgYWxpZ25tZW50LiA0IGJ5dGVzIGZvciBgZWVfYmxvY2tgLCAyIGZvciBgZWVfbGVuYCwgYW5vdGhlciAyIGZvciBgZWVfc3RhcnRfbG9gLCBhbmQgdGhlbiA0IG1vcmUgZm9yIGBlZV9zdGFydF9oaWAuIFRoYXQgc3VtcyB1cCB0byAxMiBieXRlcyB0b3RhbCwgd2hpY2ggZml0cyBuYXR1cmFsbHkgd2l0aCB0aG9zZSBgbGUzMmAgYW5kIGBsZTE2YCB0eXBlcywgc28gYWxpZ25tZW50IHNob3VsZCBiZSBva2F5LiBObyBwYWRkaW5nIHRoYXQgSSBjYW4gc2VlLCB3aGljaCBpcyBnb29kLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgc3RydWN0dXJlIGlzIGFjdHVhbGx5ICpkb2luZyogd2l0aGluIHRoZSBsYXJnZXIgY29udGV4dC4gSSBuZWVkIHRvIHBpdm90IGFuZCBzZWUgaG93IGl0IGZpdHMgaW4sIGFuZCBob3cgaXRzIGRhdGEgYXJlIHVzZWQgaW4gcHJhY3RpY2UsIGFuZCBJJiMzOTttIGdvaW5nIHRvIHR1cm4gbXkgYXR0ZW50aW9uIHRvIGBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kYCBub3cgdG8gc3RhcnQgcHV0dGluZyB0aGUgcGllY2VzIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmg9MTIxPXN0cnVjdCBleHQ0X3hhdHRyX3NlYXJjaCB7XG4tLVxuZnMvZXh0NC94YXR0ci5oLTEyOC1cbmZzL2V4dDQveGF0dHIuaDoxMjk6c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7XG5mcy9leHQ0L3hhdHRyLmgtMTMwLVx0c3RydWN0IGV4dDRfeGF0dHJfc2VhcmNoIHM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzM4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8geGF0dHIuaCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgZnMvZXh0NC94YXR0ci5oYCBoZWFkZXIgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gYXJvdW5kIGxpbmUgMTIwLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGluIHRoaXMgYXJlYS4gUHJvYmFibHkgbG9va2luZyBmb3IgYSBzcGVjaWZpYyBzdHJ1Y3R1cmUgb3IgbWFjcm8sIG1heWJlIHJlbGF0ZWQgdG8gaG93IGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRycykgYXJlIHN0b3JlZCBvciBhY2Nlc3NlZCB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoYXQgc2VjdGlvbiBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byB0aGUgb24tZGlzayBmb3JtYXQgb3IgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRob3NlIGF0dHJpYnV0ZXMuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJlc3RpbmcgZGV0YWlscyBhcm91bmQgdGhlIGFsbG9jYXRpb24gb3IgaW5kZXhpbmcgb2YgdGhlIGRhdGEuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHJlbGV2YW50IGNvbnRleHQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGlmIHRoZXJlJiMzOTtzIGFueSBoaW50IG9mIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgcG90ZW50aWFsIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBvciBhbnkga25vd24gbGltaXRhdGlvbnMgaW4gdGhpcyBhcmVhLiBJdCYjMzk7cyB0aW1lIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiBiZWhpbmQgdGhlIHNjZW5lcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExNTpcdFx0Y29uc3Qgdm9pZCAqdmFsdWU7XG4gMTE2Olx0XHRzaXplX3QgdmFsdWVfbGVuO1xuIDExNzpcdFx0aW50IG5hbWVfaW5kZXg7XG4gMTE4Olx0XHRpbnQgaW5faW5vZGU7XG4gMTE5Olx0fTtcbiAxMjA6XHRcbiAxMjE6XHRzdHJ1Y3QgZXh0NF94YXR0cl9zZWFyY2gge1xuIDEyMjpcdFx0c3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmZpcnN0O1xuIDEyMzpcdFx0dm9pZCAqYmFzZTtcbiAxMjQ6XHRcdHZvaWQgKmVuZDtcbiAxMjU6XHRcdHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICpoZXJlO1xuIDEyNjpcdFx0aW50IG5vdF9mb3VuZDtcbiAxMjc6XHR9O1xuIDEyODpcdFxuIDEyOTpcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQge1xuIDEzMDpcdFx0c3RydWN0IGV4dDRfeGF0dHJfc2VhcmNoIHM7XG4gMTMxOlx0XHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4gMTMyOlx0fTtcbiAxMzM6XHRcbiAxMzQ6XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSB7XG4gMTM1Olx0XHR1bnNpZ25lZCBpbnQgY291bnQ7XG4gMTM2Olx0XHRzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7XG4gMTM3Olx0fTtcbiAxMzg6XHRcbiAxMzk6XHRleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7XG4gMTQwOlx0ZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyO1xuIDE0MTpcdGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXI7XG4gMTQyOlx0ZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfaHVyZF9oYW5kbGVyO1xuIDE0MzpcdFxuIDE0NDpcdCNkZWZpbmUgRVhUNF9YQVRUUl9OQU1FX0VOQ1JZUFRJT05fQ09OVEVYVCBcJiMzNDtjXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDQ4CgkJCQkJCQlvdXRwdXQ6IDMwOAoJCQkJCQkJdGhvdWdodHM6IDkwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBbmFseXNpcyBvZiBFeHQ0IElubGluZSBEYXRhIENvbnZlcnNpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkmIzM5O20gbm90aW5nIHRoZSBkZXNpZ25hdGVkIGluaXRpYWxpemVycyB1c2VkIGZvciBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AgYW5kIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgLiBUaGlzIGlzIGdvb2Q7IGl0IGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgZmllbGRzIHdpdGhpbiB0aGVzZSBzdHJ1Y3RzIGFuZCB0aGVpciBuZXN0ZWQgc3RydWN0dXJlcy4gU3BlY2lmaWNhbGx5LCB0aGlzIG1lYW5zIGFsbCB0aGUgZmllbGRzIG9mIGBpc2AgYW5kIGBpYCBhcmUgY2xlYXJlZCwgYW5kIGBpcy5pbG9jYCBpcyBpbml0aWFsaXplZCBsYXRlciBieSBgZXh0NF9nZXRfaW5vZGVfbG9jYC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHByZXZlbnRpbmcgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLgoKTmV4dCwgSSYjMzk7bSB2ZXJpZnlpbmcgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGNvcHlpbmcgb3BlcmF0aW9ucy4gSSBzZWUgdGhyZWUgYGttYWxsb2NgIGNhbGxzOiBvbmUgZm9yIGBpX2Jsb2NrX2J1ZmAsIHdoaWNoIGlzIGp1c3QgdXNlZCBmb3Igc2F2aW5nIGFuZCByZXN0b3JpbmcgYHJhd19pbm9kZS0mZ3Q7aV9ibG9ja2A7IGFub3RoZXIgZm9yIGB4YXR0cl9idWZgLCB1c2VkIHNpbWlsYXJseSB0byBzYXZlL3Jlc3RvcmUgeGF0dHJzOyBhbmQgdGhlIGJsb2NrIGJ1ZmZlciBgYmgtJmd0O2JfZGF0YWAsIHdoaWNoIGdldHMgemVyb2VkIHdpdGggYG1lbXNldGAgYmVmb3JlIGFueXRoaW5nIGVsc2UgaXMgd3JpdHRlbiB0byBpdC4gVGhlIGJsb2NrIGJ1ZmZlciBpcyBsYXRlciBwb3B1bGF0ZWQgYnkgYSBgbWVtY3B5YCBvciBgZXh0NF9pbml0X2RpcmJsb2NrYC4gVGhlc2UgYWxsb2NhdGlvbiBhbmQgY29weWluZyBvcGVyYXRpb25zLCBpbiB0aGlzIGNvbnRleHQsIGxvb2sgcHJldHR5IHNhZmUuCgpUaGVuLCBJJiMzOTttIGNoZWNraW5nIGZvciBwb3RlbnRpYWwgZGF0YSBleHBvc3VyZSB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgcmVhZHMsIGFuZCBhbnkgYm91bmRzIGlzc3Vlcy4gVGhpcyBjb2RlIGlzbiYjMzk7dCBkaXJlY3RseSBjb3B5aW5nIGFueXRoaW5nIHRvIHVzZXIgc3BhY2UuIEl0IGRlYWxzIHdpdGggaW50ZXJuYWwgYmxvY2sgYWxsb2NhdGlvbiBhbmQgY29udmVydGluZyBpbmxpbmUgZGF0YSBpbnRvIHJlZ3VsYXIgYmxvY2svZXh0ZW50IGRhdGE7IHNvIHRoZSBjaGFuY2UgZm9yIGFuIGluZm9ybWF0aW9uIGxlYWsgaXMgYWxtb3N0IG5pbC4gSSBzZWUgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgZWl0aGVyLiBUaGUgYmxvY2sgYnVmZmVyIGFuZCBhbGxvY2F0ZWQgbWVtb3J5IGFyZSBleHBsaWNpdGx5IHplcm9lZC4gTGVuZ3RocyBhbmQgYm91bmRzIGFyZSBhbHNvIG5vdCBtb2RpZmllZCBpbiBhIHdheSB0aGF0IHJpc2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpOb3csIEkmIzM5O20gcnVubmluZyB0aHJvdWdoIHRoZSBOZWVkc0tNU0FOIGd1aWRlbGluZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Uga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIGl0IGRvZXNuJiMzOTt0IGludm9sdmUgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm9yIGRvZXMgaXQgaW5pdGlhbGl6ZSBjb21wbGljYXRlZCBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuIFRoZXJlIGFyZSBubyBib3VuZHMgY2hlY2tzIG9yIG1hbmlwdWxhdGlvbnMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLgoKVGhlIGd1aWRlbGluZXMgc2F5IHRvIHNldCBOZWVkc0tNU0FOIHRvIGZhbHNlIGlmIGFsbCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQsIGFuZCB0aGF0JiMzOTtzIHByZWNpc2VseSB3aGF0JiMzOTtzIGhhcHBlbmluZyBoZXJlIHdpdGggYD17MH1gLCBgbWVtc2V0YCwgYW5kIGBremFsbG9jYC4gTm8gcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgYXJlIHByZXNlbnQuIFRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiByZWZhY3RvcmluZyB0aGUgaW5saW5lIGRhdGEgY29udmVyc2lvbiwgYW5kIGFsbCBhbGxvY2F0ZWQgaGVhcCBhbmQgc3RhY2sgdmFyaWFibGVzIGFyZSBmdWxseSBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzYWdlLiBUaGUgYmxvY2sgYnVmZmVyIGlzIGV4cGxpY2l0bHkgemVyb2VkLgoKU28sIHRoZSBjb25jbHVzaW9uIGlzIGNsZWFyLiBUaGVyZSYjMzk7cyBubyBLTVNBTiBjb25jZXJuLiBOZWVkc0tNU0FOIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4gVGltZSB0byBwcmVwYXJlIHRoZSByZWFzb25pbmcgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMgaW4gYGZzL2V4dDQvaW5saW5lLmNgIGJ5IGludHJvZHVjaW5nIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgYW5kIGFsbG9jYXRpbmcgdGhlIGRlc3RpbmF0aW9uIGJsb2NrIHByaW9yIHRvIGNsZWFyaW5nIGlubGluZSBkYXRhIGluIHRoZSBpbm9kZS5cblxuUmV2aWV3aW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhY3Jvc3MgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczpcbjEuIEFsbCBsb2NhbCBzdGFjayBzdHJ1Y3R1cmVzIChgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AsIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgLCBgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyYCwgYW5kIGBzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXhgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBgbWVtc2V0YCwgb3IgZXhwbGljaXQgbWVtYmVyIGFzc2lnbm1lbnRzIGJlZm9yZSB1c2UuXG4yLiBIZWFwIGJ1ZmZlcnMgYWxsb2NhdGVkIHZpYSBga21hbGxvY2AgKGBpX2Jsb2NrX2J1ZmAsIGB4YXR0cl9idWZgLCBgYnVmYCkgYXJlIGltbWVkaWF0ZWx5IHBvcHVsYXRlZCB2aWEgYG1lbWNweWAgb3IgYGV4dDRfcmVhZF9pbmxpbmVfZGF0YWAuXG4zLiBUaGUgYmxvY2sgYnVmZmVyIGRhdGEgKGBiaC1cdTAwM2ViX2RhdGFgKSBpcyBleHBsaWNpdGx5IGNsZWFyZWQgdXNpbmcgYG1lbXNldGAgYmVmb3JlIHdyaXRpbmcgaW5saW5lIGRhdGEgb3IgZGlyZWN0b3J5IGVudHJpZXMuXG40LiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGJyYW5jaGluZy9sb2dpYyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBlcnJvciByZWNvdmVyeSBoYW5kbGluZywgbG9ja2luZywgb3IgZXh0ZW50IG1hbmlwdWxhdGlvbikgZmFsbCB1bmRlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMgaW4gYGZzL2V4dDQvaW5saW5lLmNgIGJ5IGludHJvZHVjaW5nIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgYW5kIGFsbG9jYXRpbmcgdGhlIGRlc3RpbmF0aW9uIGJsb2NrIHByaW9yIHRvIGNsZWFyaW5nIGlubGluZSBkYXRhIGluIHRoZSBpbm9kZS5cblxuUmV2aWV3aW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhY3Jvc3MgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczpcbjEuIEFsbCBsb2NhbCBzdGFjayBzdHJ1Y3R1cmVzIChgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AsIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgLCBgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyYCwgYW5kIGBzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXhgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBgbWVtc2V0YCwgb3IgZXhwbGljaXQgbWVtYmVyIGFzc2lnbm1lbnRzIGJlZm9yZSB1c2UuXG4yLiBIZWFwIGJ1ZmZlcnMgYWxsb2NhdGVkIHZpYSBga21hbGxvY2AgKGBpX2Jsb2NrX2J1ZmAsIGB4YXR0cl9idWZgLCBgYnVmYCkgYXJlIGltbWVkaWF0ZWx5IHBvcHVsYXRlZCB2aWEgYG1lbWNweWAgb3IgYGV4dDRfcmVhZF9pbmxpbmVfZGF0YWAuXG4zLiBUaGUgYmxvY2sgYnVmZmVyIGRhdGEgKGBiaC1cdTAwM2ViX2RhdGFgKSBpcyBleHBsaWNpdGx5IGNsZWFyZWQgdXNpbmcgYG1lbXNldGAgYmVmb3JlIHdyaXRpbmcgaW5saW5lIGRhdGEgb3IgZGlyZWN0b3J5IGVudHJpZXMuXG40LiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGJyYW5jaGluZy9sb2dpYyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBlcnJvciByZWNvdmVyeSBoYW5kbGluZywgbG9ja2luZywgb3IgZXh0ZW50IG1hbmlwdWxhdGlvbikgZmFsbCB1bmRlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozMzowNi4wODMzNzkxODRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzM2MjY1NDg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tcIixcbiAgICBcImV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tcIixcbiAgICBcImV4dDRfY29udmVydF9pbmxpbmVfZGF0YVwiLFxuICAgIFwiZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMgaW4gYGZzL2V4dDQvaW5saW5lLmNgIGJ5IGludHJvZHVjaW5nIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgYW5kIGFsbG9jYXRpbmcgdGhlIGRlc3RpbmF0aW9uIGJsb2NrIHByaW9yIHRvIGNsZWFyaW5nIGlubGluZSBkYXRhIGluIHRoZSBpbm9kZS5cXG5cXG5SZXZpZXdpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFjcm9zcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zOlxcbjEuIEFsbCBsb2NhbCBzdGFjayBzdHJ1Y3R1cmVzIChgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AsIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgLCBgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyYCwgYW5kIGBzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXhgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBgbWVtc2V0YCwgb3IgZXhwbGljaXQgbWVtYmVyIGFzc2lnbm1lbnRzIGJlZm9yZSB1c2UuXFxuMi4gSGVhcCBidWZmZXJzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2NgIChgaV9ibG9ja19idWZgLCBgeGF0dHJfYnVmYCwgYGJ1ZmApIGFyZSBpbW1lZGlhdGVseSBwb3B1bGF0ZWQgdmlhIGBtZW1jcHlgIG9yIGBleHQ0X3JlYWRfaW5saW5lX2RhdGFgLlxcbjMuIFRoZSBibG9jayBidWZmZXIgZGF0YSAoYGJoLVxcdTAwM2ViX2RhdGFgKSBpcyBleHBsaWNpdGx5IGNsZWFyZWQgdXNpbmcgYG1lbXNldGAgYmVmb3JlIHdyaXRpbmcgaW5saW5lIGRhdGEgb3IgZGlyZWN0b3J5IGVudHJpZXMuXFxuNC4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBicmFuY2hpbmcvbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBlcnJvciByZWNvdmVyeSBoYW5kbGluZywgbG9ja2luZywgb3IgZXh0ZW50IG1hbmlwdWxhdGlvbikgZmFsbCB1bmRlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbWVjaGFuaXNtIGluIGZzL2V4dDQvaW5saW5lLmMsIHJlcGxhY2luZyBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEgd2l0aCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayBhbmQgcmVzdHJ1Y3R1cmluZyBibG9jayBhbGxvY2F0aW9uLCBleHRlbnQgaW5zZXJ0aW9uLCBhbmQgZXJyb3IgcmVjb3ZlcnkgaGFuZGxpbmcgZHVyaW5nIGlubGluZSBkYXRhIGNvbnZlcnNpb24uIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyB3aGVuIGV4cGFuZGluZyBpbmxpbmUgZmlsZXMvZGlyZWN0b3JpZXMgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzM6MDYuMDgzMzg4ODQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjgyNDU3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1ZTUyMzEyMDRlMDNjMzAzMjQ2ODM3MTI5NWViOGEyN2Y4MGQxZGViXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMTA6MzM6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbmxpbmUuYyBiL2ZzL2V4dDQvaW5saW5lLmNcXG5pbmRleCA4MDQ1ZTRmZjI3MGM3Li5mZWY5OGFjZWU2ODhmIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvaW5saW5lLmNcXG4rKysgYi9mcy9leHQ0L2lubGluZS5jXFxuQEAgLTE0LDYgKzE0LDcgQEBcXG4gI2luY2x1ZGUgXFxcImV4dDQuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhhdHRyLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0cnVuY2F0ZS5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZXh0NF9leHRlbnRzLmhcXFwiXFxuIFxcbiAjZGVmaW5lIEVYVDRfWEFUVFJfU1lTVEVNX0RBVEFcXHRcXFwiZGF0YVxcXCJcXG4gI2RlZmluZSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFXFx0KChzaXplb2YoX19sZTMyKSAqIEVYVDRfTl9CTE9DS1MpKVxcbkBAIC0xMDcwLDIxICsxMDcxLDEyMyBAQCBzdGF0aWMgaW50IGV4dDRfdXBkYXRlX2lubGluZV9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxcbi1cXHRcXHRcXHRcXHQgICAgIHZvaWQgKmJ1ZiwgaW50IGlubGluZV9zaXplKVxcbitzdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jayxcXG4rXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4ge1xcbi1cXHRpbnQgcmV0O1xcbitcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XFxuK1xcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7XFxuK1xcdFxcdC5zID0geyAubm90X2ZvdW5kID0gLUVOT0RBVEEsIH0sXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaSA9IHtcXG4rXFx0XFx0Lm5hbWVfaW5kZXggPSBFWFQ0X1hBVFRSX0lOREVYX1NZU1RFTSxcXG4rXFx0XFx0Lm5hbWUgPSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBLFxcbitcXHRcXHQudmFsdWUgPSBOVUxMLFxcbitcXHRcXHQudmFsdWVfbGVuID0gMCxcXG4rXFx0fTtcXG4rXFx0aW50IGVycm9yO1xcbitcXHR2b2lkICppX2Jsb2NrX2J1ZiA9IE5VTEw7XFxuK1xcdHZvaWQgKnhhdHRyX2J1ZiA9IE5VTEw7XFxuK1xcdHZvaWQgKmhlYWRlciA9IE5VTEw7XFxuK1xcdHZvaWQgKnRhaWwgPSBOVUxMO1xcbitcXHRpbnQgeGF0dHJfc2l6ZTtcXG4rXFx0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcXG4gXFxuLVxcdHJldCA9IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlubGluZV9zaXplKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHRleHQ0X21zZyhpbm9kZS1cXHUwMDNlaV9zYiwgS0VSTl9FTUVSRyxcXG4tXFx0XFx0XFx0XFxcImVycm9yIHJlc3RvcmluZyBpbmxpbmVfZGF0YSBmb3IgaW5vZGUgLS0gcG90ZW50aWFsIGRhdGEgbG9zcyEgKGlub2RlICVsbHUsIGVycm9yICVkKVxcXCIsXFxuLVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2lubywgcmV0KTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpO1xcbitcXHRpZiAoIWlfYmxvY2tfYnVmKSB7XFxuK1xcdFxcdGVycm9yID0gLUVOT01FTTtcXG4rXFx0XFx0ZG93bl93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbitcXHRcXHRnb3RvIGVycm9yO1xcbiBcXHR9XFxuLVxcdGV4dDRfd3JpdGVfaW5saW5lX2RhdGEoaW5vZGUsIGlsb2MsIGJ1ZiwgMCwgaW5saW5lX3NpemUpO1xcbi1cXHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbitcXHRkb3duX3dyaXRlKFxcdTAwMjZlaS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuK1xcdGVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0Z290byBlcnJvcjtcXG4rXFx0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoXFx1MDAyNmlzLmlsb2MpO1xcbitcXHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xcbitcXHR0YWlsID0gSVRBSUwoaW5vZGUsIHJhd19pbm9kZSk7XFxuK1xcdHhhdHRyX3NpemUgPSB0YWlsIC0gaGVhZGVyO1xcbitcXHR4YXR0cl9idWYgPSBrbWFsbG9jKHhhdHRyX3NpemUsIEdGUF9OT0ZTKTtcXG4rXFx0aWYgKCF4YXR0cl9idWYpIHtcXG4rXFx0XFx0ZXJyb3IgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGVycm9yO1xcbitcXHR9XFxuK1xcdEJVRkZFUl9UUkFDRShpcy5pbG9jLmJoLCBcXFwiZ2V0X3dyaXRlX2FjY2Vzc1xcXCIpO1xcbitcXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXFx1MDAzZWlfc2IsIGlzLmlsb2MuYmgsIEVYVDRfSlRSX05PTkUpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdGdvdG8gZXJyb3I7XFxuK1xcdG1lbWNweShpX2Jsb2NrX2J1ZiwgKHZvaWQgKilyYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbitcXHRtZW1zZXQoKHZvaWQgKilyYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbitcXHRtZW1zZXQoZWktXFx1MDAzZWlfZGF0YSwgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuK1xcdG1lbWNweSh4YXR0cl9idWYsIGhlYWRlciwgeGF0dHJfc2l6ZSk7XFxuK1xcdGlmIChleHQ0X2hhc19mZWF0dXJlX2V4dGVudHMoaW5vZGUtXFx1MDAzZWlfc2IpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpIHx8IFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkpIHtcXG4rXFx0XFx0ZXh0NF9zZXRfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTtcXG4rXFx0XFx0ZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgaW5vZGUpO1xcbitcXHRcXHRzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCA9IGV4dDRfZmluZF9leHRlbnQoaW5vZGUsIDAsIE5VTEwsIDApO1xcbitcXG4rXFx0XFx0aWYgKElTX0VSUihwYXRoKSkge1xcbitcXHRcXHRcXHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XFxuK1xcdFxcdFxcdGdvdG8gcmVjb3Zlcnk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4O1xcbitcXG4rXFx0XFx0bmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMigwKTtcXG4rXFx0XFx0bmV3ZXguZWVfbGVuID0gY3B1X3RvX2xlMTYoMSk7XFxuK1xcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2bmV3ZXgsIGJsb2NrKTtcXG4rXFx0XFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXFx1MDAyNm5ld2V4LCAwKTtcXG4rXFx0XFx0aWYgKElTX0VSUihwYXRoKSkge1xcbitcXHRcXHRcXHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XFxuK1xcdFxcdFxcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXFxuK1xcdFxcdFxcdFxcdGdvdG8gcmVjb3Zlcnk7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0Z290byBub19mcmVlO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9kYXRhWzBdID0gY3B1X3RvX2xlMzIoYmxvY2spO1xcbitcXHR9XFxuK1xcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9maW5kKGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmlzKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIHJlY292ZXJ5O1xcbitcXHRpZiAoIWlzLnMubm90X2ZvdW5kKVxcbitcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZSwgaW5vZGUsIFxcdTAwMjZpLCBcXHUwMDI2aXMpO1xcbityZWNvdmVyeTpcXG4rXFx0aWYgKGVycm9yKSB7XFxuK1xcdFxcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XFxuK1xcdFxcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7XFxuK1xcdFxcdG1lbWNweShoZWFkZXIsIHhhdHRyX2J1ZiwgeGF0dHJfc2l6ZSk7XFxuK25vX2ZyZWU6XFxuK1xcdFxcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7XFxuK1xcdFxcdG1lbWNweSgodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgaV9ibG9ja19idWYsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbitcXHRcXHRtZW1jcHkoZWktXFx1MDAzZWlfZGF0YSwgcmF3X2lub2RlLVxcdTAwM2VpX2Jsb2NrLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG4rXFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xcbitcXHRcXHRnZXRfYmgoaXMuaWxvYy5iaCk7XFxuK1xcdFxcdGV4dDRfbWFya19pbG9jX2RpcnR5KGhhbmRsZSwgaW5vZGUsIFxcdTAwMjZpcy5pbG9jKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKTtcXG4rXFx0XFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4rXFx0XFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbitcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2Rpc2tzaXplID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbitcXHRcXHR9XFxuK1xcdFxcdGdldF9iaChpcy5pbG9jLmJoKTtcXG4rXFx0XFx0ZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuK1xcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX29mZiA9IDA7XFxuK1xcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xcbitcXHRcXHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XFxuK1xcdFxcdGJyZWxzZShiaCk7XFxuK1xcdH1cXG4rXFx0Z290byBvdXQ7XFxuK2Vycm9yOlxcbitcXHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xcbitcXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xcbitcXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApO1xcbitvdXQ6XFxuK1xcdGJyZWxzZShpcy5pbG9jLmJoKTtcXG4rXFx0dXBfd3JpdGUoXFx1MDAyNmVpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4rXFx0a2ZyZWUoaV9ibG9ja19idWYpO1xcbitcXHRrZnJlZSh4YXR0cl9idWYpO1xcbitcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxcbkBAIC0xMDkzLDkgKzExOTYsMTIgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuIHtcXG4gXFx0aW50IGVycm9yO1xcbiBcXHR2b2lkICpidWYgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRhdGFfYmggPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcXG4rXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XFxuIFxcdGludCBpbmxpbmVfc2l6ZTtcXG4rXFx0ZXh0NF9mc2Jsa190IG5ld2Jsb2NrID0gMDtcXG4rXFx0c3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyO1xcbitcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4rXFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jaztcXG4gXFxuIFxcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xcbiBcXHRidWYgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7XFxuQEAgLTExMjAsNjMgKzEyMjYsNjIgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHRlcnJvciA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSk7XFxuLVxcdGlmIChlcnJvcilcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRtYXAubV9sYmxrID0gMDtcXG4tXFx0bWFwLm1fbGVuID0gMTtcXG4tXFx0bWFwLm1fZmxhZ3MgPSAwO1xcbi1cXHRlcnJvciA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBcXHUwMDI2bWFwLCBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKTtcXG4rXFx0bWVtc2V0KFxcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSk7XFxuK1xcdGFyLmlub2RlID0gaW5vZGU7XFxuK1xcdGFyLmxvZ2ljYWwgPSAwO1xcbitcXHRhci5sZW4gPSAxO1xcbitcXHRpZiAoU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSlcXG4rXFx0XFx0YXIuZmxhZ3MgPSBFWFQ0X01CX0hJTlRfREFUQTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRhci5mbGFncyA9IDA7XFxuK1xcdG5ld2Jsb2NrID0gZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZSwgXFx1MDAyNmFyLCBcXHUwMDI2ZXJyb3IpO1xcbiBcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbi1cXHRpZiAoIShtYXAubV9mbGFncyBcXHUwMDI2IEVYVDRfTUFQX01BUFBFRCkpIHtcXG4tXFx0XFx0ZXJyb3IgPSAtRUlPO1xcbi1cXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbi1cXHR9XFxuLVxcbi1cXHRkYXRhX2JoID0gc2JfZ2V0YmxrKGlub2RlLVxcdTAwM2VpX3NiLCBtYXAubV9wYmxrKTtcXG4tXFx0aWYgKCFkYXRhX2JoKSB7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRhbGxvY2F0ZWRfYmxvY2sgPSBFWFQ0X0MyQihzYmksIGFyLmxlbik7XFxuK1xcdGJoID0gc2JfZ2V0YmxrKGlub2RlLVxcdTAwM2VpX3NiLCBuZXdibG9jayk7XFxuK1xcdGlmICghYmgpIHtcXG4gXFx0XFx0ZXJyb3IgPSAtRU5PTUVNO1xcbi1cXHRcXHRnb3RvIG91dF9yZXN0b3JlO1xcbitcXHRcXHRnb3RvIG91dF9iaDtcXG4gXFx0fVxcbiBcXG4tXFx0bG9ja19idWZmZXIoZGF0YV9iaCk7XFxuLVxcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXFx1MDAzZWlfc2IsIGRhdGFfYmgsXFxuK1xcdGxvY2tfYnVmZmVyKGJoKTtcXG4rXFx0ZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cXHUwMDNlaV9zYiwgYmgsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBFWFQ0X0pUUl9OT05FKTtcXG4gXFx0aWYgKGVycm9yKSB7XFxuLVxcdFxcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XFxuK1xcdFxcdHVubG9ja19idWZmZXIoYmgpO1xcbiBcXHRcXHRlcnJvciA9IC1FSU87XFxuLVxcdFxcdGdvdG8gb3V0X3Jlc3RvcmU7XFxuK1xcdFxcdGdvdG8gb3V0X2JoO1xcbiBcXHR9XFxuLVxcdG1lbXNldChkYXRhX2JoLVxcdTAwM2ViX2RhdGEsIDAsIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSk7XFxuK1xcdG1lbXNldChiaC1cXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbiBcXG4gXFx0aWYgKCFTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuLVxcdFxcdG1lbWNweShkYXRhX2JoLVxcdTAwM2ViX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpO1xcbi1cXHRcXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGRhdGFfYmgpO1xcbi1cXHRcXHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xcbitcXHRcXHRtZW1jcHkoYmgtXFx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XFxuK1xcdFxcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xcbitcXHRcXHR1bmxvY2tfYnVmZmVyKGJoKTtcXG4gXFx0XFx0ZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIGlub2RlLCBkYXRhX2JoKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgaW5vZGUsIGJoKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0dW5sb2NrX2J1ZmZlcihkYXRhX2JoKTtcXG4tXFx0XFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4tXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbi1cXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2Rpc2tzaXplID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbi1cXG4tXFx0XFx0ZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCxcXG4rXFx0XFx0dW5sb2NrX2J1ZmZlcihiaCk7XFxuK1xcdFxcdGVycm9yID0gZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxcbiBcXHRcXHRcXHQgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLVxcdTAwM2Vpbm9kZSksXFxuIFxcdFxcdFxcdCAgYnVmICsgRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUsXFxuIFxcdFxcdFxcdCAgaW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7XFxuLVxcdFxcdGlmICghZXJyb3IpXFxuLVxcdFxcdFxcdGVycm9yID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpO1xcbiBcXHR9XFxuK291dF9iaDpcXG4rXFx0aWYgKGVycm9yKSB7XFxuK1xcdFxcdGlmIChiaClcXG4rXFx0XFx0XFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIG5ld2Jsb2NrKTtcXG4rXFx0XFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xcbiBcXG4tb3V0X3Jlc3RvcmU6XFxuLVxcdGlmIChlcnJvcilcXG4tXFx0XFx0ZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlsb2MsIGJ1ZiwgaW5saW5lX3NpemUpO1xcbi1cXG4rXFx0XFx0ZG93bl93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbitcXHRcXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xcbitcXHRcXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIDApO1xcbitcXHRcXHR1cF93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlcnJvciA9IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZSwgaW5vZGUsXFxuK1xcdFxcdFxcdFxcdG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIGJoKTtcXG4rXFx0fVxcbiBvdXQ6XFxuLVxcdGJyZWxzZShkYXRhX2JoKTtcXG4gXFx0a2ZyZWUoYnVmKTtcXG4gXFx0cmV0dXJuIGVycm9yO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjA2LjQxMjMwODQ2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDIwMjg5OTY0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrXCIsXG4gICAgXCJleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrXCIsXG4gICAgXCJleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFcIixcbiAgICBcImV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZXh0NCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIG1lY2hhbmlzbSBpbiBmcy9leHQ0L2lubGluZS5jLCByZXBsYWNpbmcgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhIHdpdGggZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2sgYW5kIHJlc3RydWN0dXJpbmcgYmxvY2sgYWxsb2NhdGlvbiwgZXh0ZW50IGluc2VydGlvbiwgYW5kIGVycm9yIHJlY292ZXJ5IGhhbmRsaW5nIGR1cmluZyBpbmxpbmUgZGF0YSBjb252ZXJzaW9uLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgd2hlbiBleHBhbmRpbmcgaW5saW5lIGZpbGVzL2RpcmVjdG9yaWVzIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWU1MjMxMjA0ZTAzYzMwMzI0NjgzNzEyOTVlYjhhMjdmODBkMWRlYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTA6MzM6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lubGluZS5jIGIvZnMvZXh0NC9pbmxpbmUuY1xuaW5kZXggODA0NWU0ZmYyNzBjNy4uZmVmOThhY2VlNjg4ZiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5saW5lLmNcbisrKyBiL2ZzL2V4dDQvaW5saW5lLmNcbkBAIC0xNCw2ICsxNCw3IEBAXG4gI2luY2x1ZGUgXCJleHQ0LmhcIlxuICNpbmNsdWRlIFwieGF0dHIuaFwiXG4gI2luY2x1ZGUgXCJ0cnVuY2F0ZS5oXCJcbisjaW5jbHVkZSBcImV4dDRfZXh0ZW50cy5oXCJcbiBcbiAjZGVmaW5lIEVYVDRfWEFUVFJfU1lTVEVNX0RBVEFcdFwiZGF0YVwiXG4gI2RlZmluZSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFXHQoKHNpemVvZihfX2xlMzIpICogRVhUNF9OX0JMT0NLUykpXG5AQCAtMTA3MCwyMSArMTA3MSwxMjMgQEAgc3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jLFxuLVx0XHRcdFx0ICAgICB2b2lkICpidWYsIGludCBpbmxpbmVfc2l6ZSlcbitzdGF0aWMgaW50IGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfZnNibGtfdCBibG9jayxcbitcdFx0XHRcdFx0dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiB7XG4tXHRpbnQgcmV0O1xuK1x0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xuK1x0c3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpcyA9IHtcbitcdFx0LnMgPSB7IC5ub3RfZm91bmQgPSAtRU5PREFUQSwgfSxcbitcdH07XG4rXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGkgPSB7XG4rXHRcdC5uYW1lX2luZGV4ID0gRVhUNF9YQVRUUl9JTkRFWF9TWVNURU0sXG4rXHRcdC5uYW1lID0gRVhUNF9YQVRUUl9TWVNURU1fREFUQSxcbitcdFx0LnZhbHVlID0gTlVMTCxcbitcdFx0LnZhbHVlX2xlbiA9IDAsXG4rXHR9O1xuK1x0aW50IGVycm9yO1xuK1x0dm9pZCAqaV9ibG9ja19idWYgPSBOVUxMO1xuK1x0dm9pZCAqeGF0dHJfYnVmID0gTlVMTDtcbitcdHZvaWQgKmhlYWRlciA9IE5VTEw7XG4rXHR2b2lkICp0YWlsID0gTlVMTDtcbitcdGludCB4YXR0cl9zaXplO1xuK1x0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcbiBcbi1cdHJldCA9IGV4dDRfY3JlYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlubGluZV9zaXplKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0ZXh0NF9tc2coaW5vZGUtXHUwMDNlaV9zYiwgS0VSTl9FTUVSRyxcbi1cdFx0XHRcImVycm9yIHJlc3RvcmluZyBpbmxpbmVfZGF0YSBmb3IgaW5vZGUgLS0gcG90ZW50aWFsIGRhdGEgbG9zcyEgKGlub2RlICVsbHUsIGVycm9yICVkKVwiLFxuLVx0XHRcdGlub2RlLVx1MDAzZWlfaW5vLCByZXQpO1xuLVx0XHRyZXR1cm47XG4rXHRpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpO1xuK1x0aWYgKCFpX2Jsb2NrX2J1Zikge1xuK1x0XHRlcnJvciA9IC1FTk9NRU07XG4rXHRcdGRvd25fd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHRcdGdvdG8gZXJyb3I7XG4gXHR9XG4tXHRleHQ0X3dyaXRlX2lubGluZV9kYXRhKGlub2RlLCBpbG9jLCBidWYsIDAsIGlubGluZV9zaXplKTtcbi1cdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4rXHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuK1x0ZXJyb3IgPSBleHQ0X2dldF9pbm9kZV9sb2MoaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIGVycm9yO1xuK1x0cmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoXHUwMDI2aXMuaWxvYyk7XG4rXHRoZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpO1xuK1x0dGFpbCA9IElUQUlMKGlub2RlLCByYXdfaW5vZGUpO1xuK1x0eGF0dHJfc2l6ZSA9IHRhaWwgLSBoZWFkZXI7XG4rXHR4YXR0cl9idWYgPSBrbWFsbG9jKHhhdHRyX3NpemUsIEdGUF9OT0ZTKTtcbitcdGlmICgheGF0dHJfYnVmKSB7XG4rXHRcdGVycm9yID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJvcjtcbitcdH1cbitcdEJVRkZFUl9UUkFDRShpcy5pbG9jLmJoLCBcImdldF93cml0ZV9hY2Nlc3NcIik7XG4rXHRlcnJvciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgaXMuaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gZXJyb3I7XG4rXHRtZW1jcHkoaV9ibG9ja19idWYsICh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0bWVtc2V0KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0bWVtc2V0KGVpLVx1MDAzZWlfZGF0YSwgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4rXHRtZW1jcHkoeGF0dHJfYnVmLCBoZWFkZXIsIHhhdHRyX3NpemUpO1xuK1x0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZXh0ZW50cyhpbm9kZS1cdTAwM2VpX3NiKSBcdTAwMjZcdTAwMjZcbitcdFx0KFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSkge1xuK1x0XHRleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xuK1x0XHRleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCBpbm9kZSk7XG4rXHRcdHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gZXh0NF9maW5kX2V4dGVudChpbm9kZSwgMCwgTlVMTCwgMCk7XG4rXG4rXHRcdGlmIChJU19FUlIocGF0aCkpIHtcbitcdFx0XHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XG4rXHRcdFx0Z290byByZWNvdmVyeTtcbitcdFx0fVxuK1x0XHRzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXg7XG4rXG4rXHRcdG5ld2V4LmVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoMCk7XG4rXHRcdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpO1xuK1x0XHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soXHUwMDI2bmV3ZXgsIGJsb2NrKTtcbitcdFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXHUwMDI2bmV3ZXgsIDApO1xuK1x0XHRpZiAoSVNfRVJSKHBhdGgpKSB7XG4rXHRcdFx0ZXJyb3IgPSBQVFJfRVJSKHBhdGgpO1xuK1x0XHRcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXG4rXHRcdFx0XHRnb3RvIHJlY292ZXJ5O1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGdvdG8gbm9fZnJlZTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRleHQ0X2ZyZWVfZXh0X3BhdGgocGF0aCk7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9kYXRhWzBdID0gY3B1X3RvX2xlMzIoYmxvY2spO1xuK1x0fVxuK1x0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsIFx1MDAyNmksIFx1MDAyNmlzKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byByZWNvdmVyeTtcbitcdGlmICghaXMucy5ub3RfZm91bmQpXG4rXHRcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlLCBpbm9kZSwgXHUwMDI2aSwgXHUwMDI2aXMpO1xuK3JlY292ZXJ5OlxuK1x0aWYgKGVycm9yKSB7XG4rXHRcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4rXHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7XG4rXHRcdG1lbWNweShoZWFkZXIsIHhhdHRyX2J1ZiwgeGF0dHJfc2l6ZSk7XG4rbm9fZnJlZTpcbitcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbitcdFx0bWVtY3B5KCh2b2lkICopcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIGlfYmxvY2tfYnVmLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbitcdFx0bWVtY3B5KGVpLVx1MDAzZWlfZGF0YSwgcmF3X2lub2RlLVx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4rXHRcdGdldF9iaChpcy5pbG9jLmJoKTtcbitcdFx0ZXh0NF9tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgXHUwMDI2aXMuaWxvYyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xuK1x0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4rXHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbitcdFx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuK1x0XHR9XG4rXHRcdGdldF9iaChpcy5pbG9jLmJoKTtcbitcdFx0ZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbitcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2lubGluZV9vZmYgPSAwO1xuK1x0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xuK1x0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4rXHRcdGJyZWxzZShiaCk7XG4rXHR9XG4rXHRnb3RvIG91dDtcbitlcnJvcjpcbitcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7XG4rXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xuK1x0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbitvdXQ6XG4rXHRicmVsc2UoaXMuaWxvYy5iaCk7XG4rXHR1cF93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbitcdGtmcmVlKGlfYmxvY2tfYnVmKTtcbitcdGtmcmVlKHhhdHRyX2J1Zik7XG4rXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuQEAgLTEwOTMsOSArMTE5NiwxMiBAQCBzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcbiB7XG4gXHRpbnQgZXJyb3I7XG4gXHR2b2lkICpidWYgPSBOVUxMO1xuLVx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkYXRhX2JoID0gTlVMTDtcbi1cdHN0cnVjdCBleHQ0X21hcF9ibG9ja3MgbWFwO1xuK1x0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XG4gXHRpbnQgaW5saW5lX3NpemU7XG4rXHRleHQ0X2ZzYmxrX3QgbmV3YmxvY2sgPSAwO1xuK1x0c3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyO1xuK1x0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbitcdHVuc2lnbmVkIGludCBhbGxvY2F0ZWRfYmxvY2s7XG4gXG4gXHRpbmxpbmVfc2l6ZSA9IGV4dDRfZ2V0X2lubGluZV9zaXplKGlub2RlKTtcbiBcdGJ1ZiA9IGttYWxsb2MoaW5saW5lX3NpemUsIEdGUF9OT0ZTKTtcbkBAIC0xMTIwLDYzICsxMjI2LDYyIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0ZXJyb3IgPSBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZSwgaW5vZGUpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdG1hcC5tX2xibGsgPSAwO1xuLVx0bWFwLm1fbGVuID0gMTtcbi1cdG1hcC5tX2ZsYWdzID0gMDtcbi1cdGVycm9yID0gZXh0NF9tYXBfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIFx1MDAyNm1hcCwgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSk7XG4rXHRtZW1zZXQoXHUwMDI2YXIsIDAsIHNpemVvZihhcikpO1xuK1x0YXIuaW5vZGUgPSBpbm9kZTtcbitcdGFyLmxvZ2ljYWwgPSAwO1xuK1x0YXIubGVuID0gMTtcbitcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4rXHRcdGFyLmZsYWdzID0gRVhUNF9NQl9ISU5UX0RBVEE7XG4rXHRlbHNlXG4rXHRcdGFyLmZsYWdzID0gMDtcbitcdG5ld2Jsb2NrID0gZXh0NF9tYl9uZXdfYmxvY2tzKGhhbmRsZSwgXHUwMDI2YXIsIFx1MDAyNmVycm9yKTtcbiBcdGlmIChlcnJvciBcdTAwM2MgMClcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbi1cdGlmICghKG1hcC5tX2ZsYWdzIFx1MDAyNiBFWFQ0X01BUF9NQVBQRUQpKSB7XG4tXHRcdGVycm9yID0gLUVJTztcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbi1cdH1cbi1cbi1cdGRhdGFfYmggPSBzYl9nZXRibGsoaW5vZGUtXHUwMDNlaV9zYiwgbWFwLm1fcGJsayk7XG4tXHRpZiAoIWRhdGFfYmgpIHtcbitcdFx0Z290byBvdXQ7XG4rXHRhbGxvY2F0ZWRfYmxvY2sgPSBFWFQ0X0MyQihzYmksIGFyLmxlbik7XG4rXHRiaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLCBuZXdibG9jayk7XG4rXHRpZiAoIWJoKSB7XG4gXHRcdGVycm9yID0gLUVOT01FTTtcbi1cdFx0Z290byBvdXRfcmVzdG9yZTtcbitcdFx0Z290byBvdXRfYmg7XG4gXHR9XG4gXG4tXHRsb2NrX2J1ZmZlcihkYXRhX2JoKTtcbi1cdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgZGF0YV9iaCxcbitcdGxvY2tfYnVmZmVyKGJoKTtcbitcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXHUwMDNlaV9zYiwgYmgsXG4gXHRcdFx0XHRcdCAgICAgICBFWFQ0X0pUUl9OT05FKTtcbiBcdGlmIChlcnJvcikge1xuLVx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuK1x0XHR1bmxvY2tfYnVmZmVyKGJoKTtcbiBcdFx0ZXJyb3IgPSAtRUlPO1xuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuK1x0XHRnb3RvIG91dF9iaDtcbiBcdH1cbi1cdG1lbXNldChkYXRhX2JoLVx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSk7XG4rXHRtZW1zZXQoYmgtXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbiBcbiBcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4tXHRcdG1lbWNweShkYXRhX2JoLVx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XG4tXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoZGF0YV9iaCk7XG4tXHRcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XG4rXHRcdG1lbWNweShiaC1cdTAwM2ViX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpO1xuK1x0XHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcbitcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4gXHRcdGVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLFxuLVx0XHRcdFx0XHRcdCAgIGlub2RlLCBkYXRhX2JoKTtcbitcdFx0XHRcdFx0XHQgICBpbm9kZSwgYmgpO1xuIFx0fSBlbHNlIHtcbi1cdFx0dW5sb2NrX2J1ZmZlcihkYXRhX2JoKTtcbi1cdFx0aW5vZGUtXHUwMDNlaV9zaXplID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbi1cdFx0aV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbi1cdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2Rpc2tzaXplID0gaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbi1cbi1cdFx0ZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgZGF0YV9iaCxcbitcdFx0dW5sb2NrX2J1ZmZlcihiaCk7XG4rXHRcdGVycm9yID0gZXh0NF9pbml0X2RpcmJsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdCAgbGUzMl90b19jcHUoKChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKWJ1ZiktXHUwMDNlaW5vZGUpLFxuIFx0XHRcdCAgYnVmICsgRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUsXG4gXHRcdFx0ICBpbmxpbmVfc2l6ZSAtIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFKTtcbi1cdFx0aWYgKCFlcnJvcilcbi1cdFx0XHRlcnJvciA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTtcbiBcdH1cbitvdXRfYmg6XG4rXHRpZiAoZXJyb3IpIHtcbitcdFx0aWYgKGJoKVxuK1x0XHRcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBuZXdibG9jayk7XG4rXHRcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcbiBcbi1vdXRfcmVzdG9yZTpcbi1cdGlmIChlcnJvcilcbi1cdFx0ZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZSwgaW5vZGUsIGlsb2MsIGJ1ZiwgaW5saW5lX3NpemUpO1xuLVxuK1x0XHRkb3duX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuK1x0XHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xuK1x0XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIDApO1xuK1x0XHR1cF93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbitcdH0gZWxzZSB7XG4rXHRcdGVycm9yID0gZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlLCBpbm9kZSxcbitcdFx0XHRcdG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIGJoKTtcbitcdH1cbiBvdXQ6XG4tXHRicmVsc2UoZGF0YV9iaCk7XG4gXHRrZnJlZShidWYpO1xuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjA2LjQxMjMwOTkzMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyMTgwMzMzNTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHRoaXMgcGF0Y2ggYW5hbHlzaXMsIHB1dHRpbmcgbXlzZWxmIGluIHlvdXIgZXhwZXJ0IHNob2VzOlxuXG4qKkFuYWx5emluZyBhbiBleHQ0IElubGluZSBEYXRhIFBhdGNoKipcblxuQWxyaWdodCwgYSBwYXRjaCB0b3VjaGluZyBgZnMvZXh0NC9pbmxpbmUuY2AuIE15IHNwaWRleSBzZW5zZSBpcyB0aW5nbGluZyDigJMgZXh0NCBpcyBjcml0aWNhbCBpbmZyYXN0cnVjdHVyZSwgYW5kIGlubGluZSBkYXRhIGlzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGludGVyZXN0aW5nIGJ1Z3MuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kICpleGFjdGx5KiB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuIEknbGwgZGl2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMgdGhlbXNlbHZlcywgcmVhbGx5IGZvY3VzaW5nIG9uIHRoZSBsb2dpYyBpdCdzIGltcGxlbWVudGluZyBhbmQgd2hlcmUgaXQncyBpbXBhY3RpbmcgZXhpc3RpbmcgZnVuY3Rpb25hbGl0eS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYWxsb2NhdGlvbiwgZGVhbGxvY2F0aW9uLCBtZXRhZGF0YSB1cGRhdGVzLCBkYXRhIGJsb2NrIGhhbmRsaW5nLCBlcnJvciBwYXRocz8gS25vd2luZyB0aGUgY29yZSBhY3Rpb24gaXMgdGhlIGtleS5cblxuTmV4dCB1cCwgYSBxdWljayBzYW5pdHkgY2hlY2s6IHdoYXQgS2NvbmZpZyBvcHRpb25zIGFyZSBpbiBwbGF5PyBJcyB0aGlzIGZlYXR1cmUgY29uZGl0aW9uYWxseSBjb21waWxlZD8gQ2FuIGl0IGJlIGRpc2FibGVkLCBwb3RlbnRpYWxseSByZWR1Y2luZyBteSBmdXp6aW5nIHN1cmZhY2U/IEknbGwgZ3JlcCB0aHJvdWdoIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIGNoZWNrIGZvciBhbnkgcmVsZXZhbnQgZGVwZW5kZW5jaWVzIG9yIGRlcGVuZGVuY2llcyB0byBteSB0YXJnZXRzLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IElzIHRoaXMgY29kZSBhY3R1YWxseSAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgZXh0NCBmaWxlc3lzdGVtIHVzZSBjYXNlPyBJcyBpdCB0cmlnZ2VyZWQgdW5kZXIgbm9ybWFsIG9wZXJhdGlvbnMsIG9yIG9ubHkgd2l0aCBvYnNjdXJlIG9wdGlvbnMgb3IgY29ybmVyIGNhc2VzPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgZ3JhcGgsIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIElzIGl0IHdvcnRoIHRoZSBmdXp6aW5nIGludmVzdG1lbnQ/XG5cbkZpbmFsbHksIHRpbWUgdG8gZGlzdGlsbCB0aGUgZXNzZW5jZSBmb3IgZnV6emluZy4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zLiBXaGF0IGFyZSB0aGUga2V5IGBGb2N1c1N5bWJvbHNgPyBBbmQgd2hhdCBgRW5hYmxlQ29uZmlnc2Agd2lsbCBJIG5lZWQgdG8gYmUgc3VyZSB0aGlzIGNvZGUgcGF0aCBpcyBhY3RpdmU/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBzb21lIGJhc2ljIGdyZXBzIHRvIHBpY2sgb3V0IHRoZSBpbXBvcnRhbnQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMuIEkgbWlnaHQgZXZlbiByZWFkIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgYW5kIGhlYWRlcnMgdG8gZ2FpbiBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlLlxuXG5JbiBzaG9ydCwgSSdtIGRpZ2dpbmcgaW4gdG8gdW5kZXJzdGFuZCB0aGUgcGF0Y2gncyBwdXJwb3NlLCBpdHMgYWNjZXNzaWJpbGl0eSwgYW5kIGhvdyBJIGNhbiBiZXN0IGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyB0byByZXZlYWwgYW55IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjE4LjU5MjY0NjE0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjExMDg2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2NyeXB0by5jPTEzMj1zdGF0aWMgaW50IGV4dDRfc2V0X2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqY3R4LCBzaXplX3QgbGVuLFxcbi0tXFxuZnMvZXh0NC9jcnlwdG8uYy0xNTItXFxuZnMvZXh0NC9jcnlwdG8uYzoxNTM6XFx0cmVzID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcXG5mcy9leHQ0L2NyeXB0by5jLTE1NC1cXHRpZiAocmVzKVxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9Mzc5Nj1leHRlcm4gaW50IGV4dDRfaW5saW5lX2RhdGFfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpoYXNfaW5saW5lKTtcXG5mcy9leHQ0L2V4dDQuaC0zNzk3LVxcbmZzL2V4dDQvZXh0NC5oOjM3OTg6ZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvZXh0NC9leHQ0LmgtMzc5OS1cXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQ4NTQ9bG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00ODgzLVxcdGlub2RlX2xvY2soaW5vZGUpO1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQ4ODQ6XFx0cmV0ID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcXG5mcy9leHQ0L2V4dGVudHMuYy00ODg1LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTU0Nj1pbnQgZXh0NF9yZWFkcGFnZV9pbmxpbmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNTcyLVxcbmZzL2V4dDQvaW5saW5lLmM6NTczOnN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5mcy9leHQ0L2lubGluZS5jLTU3NC1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz02OTc9aW50IGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNzI4LVxcdFxcdFxcdC8qIFJldHJ5IGluc2lkZSAqL1xcbmZzL2V4dDQvaW5saW5lLmM6NzI5OlxcdFxcdFxcdHJldHVybiBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KG1hcHBpbmcsIGlub2RlKTtcXG5mcy9leHQ0L2lubGluZS5jLTczMC1cXHRcXHR9XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTc4ND1pbnQgZXh0NF90cnlfdG9fd3JpdGVfaW5saW5lX2RhdGEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTc4OS1cXHRpZiAocG9zICsgbGVuIFxcdTAwM2UgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKGlub2RlKSlcXG5mcy9leHQ0L2lubGluZS5jOjc5MDpcXHRcXHRyZXR1cm4gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChtYXBwaW5nLCBpbm9kZSk7XFxuZnMvZXh0NC9pbmxpbmUuYy03OTEtXFx0cmV0dXJuIGV4dDRfZ2VuZXJpY193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEwNzQ9c3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTExOTItXFxuZnMvZXh0NC9pbmxpbmUuYzoxMTkzOnN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxcbmZzL2V4dDQvaW5saW5lLmMtMTE5NC1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xMjk0PWludCBleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBleHQ0X2ZpbGVuYW1lICpmbmFtZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTM0Ni1cXHQgKi9cXG5mcy9leHQ0L2lubGluZS5jOjEzNDc6XFx0cmV0ID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGRpciwgXFx1MDAyNmlsb2MpO1xcbmZzL2V4dDQvaW5saW5lLmMtMTM0OC1cXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTk0OT1pbnQgZXh0NF9pbmxpbmVfZGF0YV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgKmhhc19pbmxpbmUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTIwNjAtXFxuZnMvZXh0NC9pbmxpbmUuYzoyMDYxOmludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L2lubGluZS5jLTIwNjIte1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0yMDk4LVxcdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXFxuZnMvZXh0NC9pbmxpbmUuYzoyMDk5OlxcdFxcdGVycm9yID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGUsIGlub2RlLCBcXHUwMDI2aWxvYyk7XFxuZnMvZXh0NC9pbmxpbmUuYy0yMTAwLVxcdGV4dDRfd3JpdGVfdW5sb2NrX3hhdHRyKGlub2RlLCBcXHUwMDI2bm9fZXhwYW5kKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01OTIyPWludCBleHQ0X3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy02MDE5LVxcdFxcdCAgICBhdHRyLVxcdTAwM2VpYV9zaXplIFxcdTAwM2UgRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfc2l6ZSkge1xcbmZzL2V4dDQvaW5vZGUuYzo2MDIwOlxcdFxcdFxcdGVycm9yID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcXG5mcy9leHQ0L2lub2RlLmMtNjAyMS1cXHRcXHRcXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9Njc4Mj12bV9mYXVsdF90IGV4dDRfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTY4MDMtXFxuZnMvZXh0NC9pbm9kZS5jOjY4MDQ6XFx0ZXJyID0gZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhKGlub2RlKTtcXG5mcy9leHQ0L2lub2RlLmMtNjgwNS1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvZXh0NC92ZXJpdHkuYz0xMDI9c3RhdGljIGludCBleHQ0X2JlZ2luX2VuYWJsZV92ZXJpdHkoc3RydWN0IGZpbGUgKmZpbHApXFxuLS1cXG5mcy9leHQ0L3Zlcml0eS5jLTEyOC1cXG5mcy9leHQ0L3Zlcml0eS5jOjEyOTpcXHRlcnIgPSBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoaW5vZGUpO1xcbmZzL2V4dDQvdmVyaXR5LmMtMTMwLVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjE4LjYzODc1OTg2M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMzMwNjM1NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgZXh0NCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoZSBleHQ0IGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBoYW5kbGUgb24gZXZlcnl0aGluZyByZWxhdGVkIHRvIGlubGluZSBkYXRhLCBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cnMpLCBhbmQgYWxsIHRoZSBvdGhlciBnb29kaWVzLiBTbywgSSdtIHRoaW5raW5nLCBgZnMvZXh0NC9LY29uZmlnYCBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGJ1aWxkLXRpbWUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciB0aGUgZXh0NCBmaWxlc3lzdGVtIGFyZSBkZWZpbmVkLiBJIGtub3cgaXQnbGwgbGlzdCB0aGUgbmVjZXNzYXJ5IEtjb25maWcgc3ltYm9scyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBuZWVkIHRvIHJldmlldyB3aGF0IG9wdGlvbnMgYXJlIHJlcXVpcmVkLCBhbmQgY29uc2lkZXIgaG93IHRoZXkgaW50ZXJhY3QsIHRvIGVuc3VyZSBhIHNvbGlkIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgc3BlY2lmaWMgYXBwbGljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMDcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozMzoyMi45NzE4MjY1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk2NjMyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVhUNFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTM0LVxcbmZzL2V4dDQvS2NvbmZpZzozNTpjb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcXG5mcy9leHQ0L0tjb25maWctMzYtXFx0Ym9vbCBcXFwiVXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNjctXFxuZnMvZXh0NC9LY29uZmlnOjY4OmNvbmZpZyBFWFQ0X0RFQlVHXFxuZnMvZXh0NC9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkV4dDQgZGVidWdnaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNzYtXFxuZnMvZXh0NC9LY29uZmlnOjc3OmNvbmZpZyBFWFQ0X0tVTklUX1RFU1RTXFxuZnMvZXh0NC9LY29uZmlnLTc4LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgZXh0NFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozMzoyMy4wMTY4MDAxMzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzI3MjEwOTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipEaWdnaW5nIGludG8gdGhlIEV4dDQgQnVpbGQgUHJvY2VzcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIEknbSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEV4dDQgZmlsZXN5c3RlbSBpcyBiZWluZyBidWlsdC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdHJhY2UgaG93IGEgY3JpdGljYWwgY29tcG9uZW50IGlzIGFzc2VtYmxlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBgZnMvZXh0NC9NYWtlZmlsZWAuIFRoYXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBmaW5kIHRoZSBidWlsZCByZWNpcGUuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBmaWd1cmluZyBvdXQgaG93IHNvbWV0aGluZyBzcGVjaWZpYywgbGlrZSBgaW5saW5lLm9gLCBpcyBjcmVhdGVkLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoaW4gdGhlIEV4dDQgY29kZSBiYXNlLCBhbmQgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCBwYXJ0IGlzIGNyZWF0ZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBpdHMgZGVwZW5kZW5jaWVzLCBjb21waWxhdGlvbiBmbGFncywgYW5kIGxpbmtpbmcgcHJvY2VzcyB3aXRoaW4gdGhlIEV4dDQgbW9kdWxlLiBGcm9tIHRoZXJlLCBJIGNhbiBsaWtlbHkgZXh0cmFwb2xhdGUgdG8gYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2lkZXIgYnVpbGQgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Nzk2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzM6MjguMzQ0MDEzMTQyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTY2MDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlubGluZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcXHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZS05LVxcdFxcdGV4dGVudHNfc3RhdHVzLm8gZmlsZS5vIGZzbWFwLm8gZnN5bmMubyBoYXNoLm8gaWFsbG9jLm8gXFxcXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTA6XFx0XFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxcXFxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cXHRcXHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozMzoyOC4zODg5ODU3MTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTQzNzQ1MDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBpbmxpbmUub2AgRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyBgaW5saW5lLm9gIGFsd2F5cyBnZXRzIGJ1aWx0IHdoZW4gYEVYVDRfRlNgIGlzIGVuYWJsZWQsIGh1aD8gVGhhdCBmZWVscyBsaWtlIGEgc2lnbmlmaWNhbnQsIHBvdGVudGlhbGx5IGltcGxpY2l0LCBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHRlci4gVGltZSB0byBkaXZlIGludG8gdGhlIGBmcy9leHQ0L0tjb25maWdgIGZpbGUuIEknbGwgbmVlZCB0byBjaGVjayBmb3IgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBvciBtYXliZSBldmVuIGRlZmF1bHQgc2V0dGluZ3Mgd2l0aGluIHRoYXQgS2NvbmZpZyB0aGF0IHRpZSBpbnRvIHRoZSBidWlsZCBvZiBgaW5saW5lLm9gLiBJcyBpdCBkaXJlY3RseSBjb250cm9sbGVkIGJ5IGEgc3BlY2lmaWMgb3B0aW9uLCBvciBkb2VzIGl0cyBpbmNsdXNpb24gc3RlbSBmcm9tIHNvbWUgYnJvYWRlciBkZXBlbmRlbmN5IGNoYWluIHdpdGhpbiB0aGUgRVhUNCBmaWxlc3lzdGVtIGNvbmZpZ3VyYXRpb24/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBcImFsd2F5c1wiIHNpdHVhdGlvbi4gR290dGEgZW5zdXJlIHRoaXMgYmVoYXZpb3IgaXMgd2VsbC11bmRlcnN0b29kIGFuZCBqdXN0aWZpYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIxNSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjMxLjUzMjczMzMwN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBFWFQ0X0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA1OlxcdFxcdHNlbGVjdCBKQkQyXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JDMTZcXG4gICA3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDg6XFx0XFx0c2VsZWN0IEZTX0lPTUFQXFxuICAgOTpcXHRcXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgVGhpcyBpcyB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIHRoZSBleHQzIGZpbGVzeXN0ZW0uXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgVW5saWtlIHRoZSBjaGFuZ2UgZnJvbSBleHQyIGZpbGVzeXN0ZW0gdG8gZXh0MyBmaWxlc3lzdGVtLFxcbiAgMTQ6XFx0XFx0ICB0aGUgb24tZGlzayBmb3JtYXQgb2YgZXh0NCBpcyBub3QgZm9yd2FyZHMgY29tcGF0aWJsZSB3aXRoXFxuICAxNTpcXHRcXHQgIGV4dDM7IGl0IGlzIGJhc2VkIG9uIGV4dGVudCBtYXBzIGFuZCBpdCBzdXBwb3J0cyA0OC1iaXRcXG4gIDE2OlxcdFxcdCAgcGh5c2ljYWwgYmxvY2sgbnVtYmVycy4gIFRoZSBleHQ0IGZpbGVzeXN0ZW0gYWxzbyBzdXBwb3J0cyBkZWxheWVkXFxuICAxNzpcXHRcXHQgIGFsbG9jYXRpb24sIHBlcnNpc3RlbnQgcHJlYWxsb2NhdGlvbiwgaGlnaCByZXNvbHV0aW9uIHRpbWUgc3RhbXBzLFxcbiAgMTg6XFx0XFx0ICBhbmQgYSBudW1iZXIgb2Ygb3RoZXIgZmVhdHVyZXMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgc3BlZWRcXG4gIDE5OlxcdFxcdCAgdXAgZnNjayB0aW1lLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHdlYiBwYWdlcyBhdFxcbiAgMjA6XFx0XFx0ICBodHRwOi8vZXh0NC53aWtpLmtlcm5lbC5vcmcuXFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcdCAgVGhlIGV4dDQgZmlsZXN5c3RlbSBzdXBwb3J0cyBtb3VudGluZyBhbiBleHQzIGZpbGVzeXN0ZW07IHdoaWxlIHRoZXJlXFxuICAyMzpcXHRcXHQgIGFyZSBzb21lIHBlcmZvcm1hbmNlIGdhaW5zIGZyb20gdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGVcXG4gIDI0OlxcdFxcdCAgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdCBwZXJmb3JtYW5jZSBnYWlucyByZXF1aXJlIGVuYWJsaW5nIGV4dDRcXG4gIDI1OlxcdFxcdCAgZmVhdHVyZXMgaW4gdGhlIGZpbGVzeXN0ZW0gdXNpbmcgdHVuZTJmcywgb3IgZm9ybWF0dGluZyBhIG5ld1xcbiAgMjY6XFx0XFx0ICBmaWxlc3lzdGVtIGFzIGFuIGV4dDQgZmlsZXN5c3RlbSBpbml0aWFsbHkuIFdpdGhvdXQgZXhwbGljaXQgZW5hYmxpbmdcXG4gIDI3OlxcdFxcdCAgb2YgZXh0NCBmZWF0dXJlcywgdGhlIG9uIGRpc2sgZmlsZXN5c3RlbSBmb3JtYXQgc3RheXMgZnVsbHkgYmFja3dhcmRcXG4gIDI4OlxcdFxcdCAgY29tcGF0aWJsZS5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZmlsZSBzeXN0ZW0gc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlXFxuICAzMTpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBleHQ0LlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiVXNlIGV4dDQgZm9yIGV4dDIgZmlsZSBzeXN0ZW1zXFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBFWFQ0X0ZTXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIEVYVDJfRlM9blxcbiAgMzk6XFx0XFx0ZGVmYXVsdCB5XFxuICA0MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjMxLjUzMjgwMDkzOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDYxNTE0NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBleHQ0IElubGluZSBEYXRhIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGVzZSBtb2RpZmljYXRpb25zLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIGRlZmluaXRlbHkgdGhlIGBmcy9leHQ0L2lubGluZS5jYCBmaWxlLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgaW5saW5lIGRhdGEgaW1wbGVtZW50YXRpb24gZGV0YWlscyB3aWxsIGJlIGhhbmdpbmcgb3V0LiBJJ20gZ29pbmcgdG8gcG9yZSBvdmVyIHRoYXQgY29kZSDigJMgaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIGlzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZXhpc3RpbmcgbWVjaGFuaXNtcyBoYXZlIGJlZW4gYWRhcHRlZCwgZXh0ZW5kZWQsIG9yIHJlcGxhY2VkIHRvIHN1cHBvcnQgdGhlc2UgaW5saW5lIGNhcGFiaWxpdGllcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHk6IGRhdGEgc3RydWN0dXJlIGNoYW5nZXMsIGFsbG9jYXRpb24gc3RyYXRlZ2llcywgdGhlIGhhbmRsaW5nIG9mIG1ldGFkYXRhLCBhbmQsIG9mIGNvdXJzZSwgaG93IHRoZXkndmUgaW50ZWdyYXRlZCBpdCB3aXRoIHRoZSBleGlzdGluZyBleHQ0IGZpbGUgc3lzdGVtIGFyY2hpdGVjdHVyZS4gTGV0J3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBJIGNhbiB1bmVhcnRoIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA1MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzM6MzMuNTk0MzE4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2lubGluZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjUsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDY1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTA2NjpcXHRcXG4xMDY3OlxcdFxcdGV4dDRfdXBkYXRlX2ZpbmFsX2RlKGV4dDRfZ2V0X2lubGluZV94YXR0cl9wb3MoZGlyLCBpbG9jKSwgb2xkX3NpemUsXFxuMTA2ODpcXHRcXHRcXHRcXHQgICAgIEVYVDRfSShkaXIpLVxcdTAwM2VpX2lubGluZV9zaXplIC1cXG4xMDY5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjEwNzA6XFx0XFx0ZGlyLVxcdTAwM2VpX3NpemUgPSBFWFQ0X0koZGlyKS1cXHUwMDNlaV9kaXNrc2l6ZSA9IEVYVDRfSShkaXIpLVxcdTAwM2VpX2lubGluZV9zaXplO1xcbjEwNzE6XFx0XFx0cmV0dXJuIDA7XFxuMTA3MjpcXHR9XFxuMTA3MzpcXHRcXG4xMDc0OlxcdHN0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLFxcbjEwNzU6XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4xMDc2OlxcdHtcXG4xMDc3OlxcdFxcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcXG4xMDc4OlxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7XFxuMTA3OTpcXHRcXHRcXHQucyA9IHsgLm5vdF9mb3VuZCA9IC1FTk9EQVRBLCB9LFxcbjEwODA6XFx0XFx0fTtcXG4xMDgxOlxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaSA9IHtcXG4xMDgyOlxcdFxcdFxcdC5uYW1lX2luZGV4ID0gRVhUNF9YQVRUUl9JTkRFWF9TWVNURU0sXFxuMTA4MzpcXHRcXHRcXHQubmFtZSA9IEVYVDRfWEFUVFJfU1lTVEVNX0RBVEEsXFxuMTA4NDpcXHRcXHRcXHQudmFsdWUgPSBOVUxMLFxcbjEwODU6XFx0XFx0XFx0LnZhbHVlX2xlbiA9IDAsXFxuMTA4NjpcXHRcXHR9O1xcbjEwODc6XFx0XFx0aW50IGVycm9yO1xcbjEwODg6XFx0XFx0dm9pZCAqaV9ibG9ja19idWYgPSBOVUxMO1xcbjEwODk6XFx0XFx0dm9pZCAqeGF0dHJfYnVmID0gTlVMTDtcXG4xMDkwOlxcdFxcdHZvaWQgKmhlYWRlciA9IE5VTEw7XFxuMTA5MTpcXHRcXHR2b2lkICp0YWlsID0gTlVMTDtcXG4xMDkyOlxcdFxcdGludCB4YXR0cl9zaXplO1xcbjEwOTM6XFx0XFx0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcXG4xMDk0OlxcdFxcbjEwOTU6XFx0XFx0aV9ibG9ja19idWYgPSBrbWFsbG9jKEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUsIEdGUF9OT0ZTKTtcXG4xMDk2OlxcdFxcdGlmICghaV9ibG9ja19idWYpIHtcXG4xMDk3OlxcdFxcdFxcdGVycm9yID0gLUVOT01FTTtcXG4xMDk4OlxcdFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNmVpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4xMDk5OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMTEwMDpcXHRcXHR9XFxuMTEwMTpcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZlaS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuMTEwMjpcXHRcXHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlzLmlsb2MpO1xcbjExMDM6XFx0XFx0aWYgKGVycm9yKVxcbjExMDQ6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4xMTA1OlxcdFxcdHJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKFxcdTAwMjZpcy5pbG9jKTtcXG4xMTA2OlxcdFxcdGhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7XFxuMTEwNzpcXHRcXHR0YWlsID0gSVRBSUwoaW5vZGUsIHJhd19pbm9kZSk7XFxuMTEwODpcXHRcXHR4YXR0cl9zaXplID0gdGFpbCAtIGhlYWRlcjtcXG4xMTA5OlxcdFxcdHhhdHRyX2J1ZiA9IGttYWxsb2MoeGF0dHJfc2l6ZSwgR0ZQX05PRlMpO1xcbjExMTA6XFx0XFx0aWYgKCF4YXR0cl9idWYpIHtcXG4xMTExOlxcdFxcdFxcdGVycm9yID0gLUVOT01FTTtcXG4xMTEyOlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMTExMzpcXHRcXHR9XFxuMTExNDpcXHRcXHRCVUZGRVJfVFJBQ0UoaXMuaWxvYy5iaCwgXFxcImdldF93cml0ZV9hY2Nlc3NcXFwiKTtcXG4xMTE1OlxcdFxcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cXHUwMDNlaV9zYiwgaXMuaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7XFxuMTExNjpcXHRcXHRpZiAoZXJyb3IpXFxuMTExNzpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjExMTg6XFx0XFx0bWVtY3B5KGlfYmxvY2tfYnVmLCAodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuMTExOTpcXHRcXHRtZW1zZXQoKHZvaWQgKilyYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjExMjA6XFx0XFx0bWVtc2V0KGVpLVxcdTAwM2VpX2RhdGEsIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjExMjE6XFx0XFx0bWVtY3B5KHhhdHRyX2J1ZiwgaGVhZGVyLCB4YXR0cl9zaXplKTtcXG4xMTIyOlxcdFxcdGlmIChleHQ0X2hhc19mZWF0dXJlX2V4dGVudHMoaW5vZGUtXFx1MDAzZWlfc2IpIFxcdTAwMjZcXHUwMDI2XFxuMTEyMzpcXHRcXHRcXHQoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fCBTX0lTUkVHKGlub2RlLVxcdTAwM2VpX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpKSB7XFxuMTEyNDpcXHRcXHRcXHRleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xcbjExMjU6XFx0XFx0XFx0ZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgaW5vZGUpO1xcbjExMjY6XFx0XFx0XFx0c3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCAwLCBOVUxMLCAwKTtcXG4xMTI3OlxcdFxcbjExMjg6XFx0XFx0XFx0aWYgKElTX0VSUihwYXRoKSkge1xcbjExMjk6XFx0XFx0XFx0XFx0ZXJyb3IgPSBQVFJfRVJSKHBhdGgpO1xcbjExMzA6XFx0XFx0XFx0XFx0Z290byByZWNvdmVyeTtcXG4xMTMxOlxcdFxcdFxcdH1cXG4xMTMyOlxcdFxcdFxcdHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleDtcXG4xMTMzOlxcdFxcbjExMzQ6XFx0XFx0XFx0bmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMigwKTtcXG4xMTM1OlxcdFxcdFxcdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpO1xcbjExMzY6XFx0XFx0XFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKFxcdTAwMjZuZXdleCwgYmxvY2spO1xcbjExMzc6XFx0XFx0XFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXFx1MDAyNm5ld2V4LCAwKTtcXG4xMTM4OlxcdFxcdFxcdGlmIChJU19FUlIocGF0aCkpIHtcXG4xMTM5OlxcdFxcdFxcdFxcdGVycm9yID0gUFRSX0VSUihwYXRoKTtcXG4xMTQwOlxcdFxcdFxcdFxcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXFxuMTE0MTpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlY292ZXJ5O1xcbjExNDI6XFx0XFx0XFx0XFx0ZWxzZVxcbjExNDM6XFx0XFx0XFx0XFx0XFx0Z290byBub19mcmVlO1xcbjExNDQ6XFx0XFx0XFx0fSBlbHNlIHtcXG4xMTQ1OlxcdFxcdFxcdFxcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcXG4xMTQ2OlxcdFxcdFxcdH1cXG4xMTQ3OlxcdFxcdH0gZWxzZSB7XFxuMTE0ODpcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7XFxuMTE0OTpcXHRcXHR9XFxuMTE1MDpcXHRcXHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXFx1MDAyNmksIFxcdTAwMjZpcyk7XFxuMTE1MTpcXHRcXHRpZiAoZXJyb3IpXFxuMTE1MjpcXHRcXHRcXHRnb3RvIHJlY292ZXJ5O1xcbjExNTM6XFx0XFx0aWYgKCFpcy5zLm5vdF9mb3VuZClcXG4xMTU0OlxcdFxcdFxcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlLCBpbm9kZSwgXFx1MDAyNmksIFxcdTAwMjZpcyk7XFxuMTE1NTpcXHRyZWNvdmVyeTpcXG4xMTU2OlxcdFxcdGlmIChlcnJvcikge1xcbjExNTc6XFx0XFx0XFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcXG4xMTU4OlxcdFxcdFxcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgYmxvY2ssIGxlbiwgMCk7XFxuMTE1OTpcXHRcXHRcXHRtZW1jcHkoaGVhZGVyLCB4YXR0cl9idWYsIHhhdHRyX3NpemUpO1xcbjExNjA6XFx0bm9fZnJlZTpcXG4xMTYxOlxcdFxcdFxcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7XFxuMTE2MjpcXHRcXHRcXHRtZW1jcHkoKHZvaWQgKilyYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2ssIGlfYmxvY2tfYnVmLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG4xMTYzOlxcdFxcdFxcdG1lbWNweShlaS1cXHUwMDNlaV9kYXRhLCByYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2ssIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjExNjQ6XFx0XFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozMzozMy41OTQ0NDcxOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDYxMDQ0MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gSW5saW5lIERhdGEgaW4gZXh0NCoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYGZzL2V4dDQvaW5saW5lLmNgIGFuZCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhpcyBhcmVhLiBJdCBzZWVtcyBsaWtlIHRoZSBpbW1lZGlhdGUgY29udGV4dCBpc24ndCBlbm91Z2gsIHNvIGxldCdzIHpvb20gb3V0IGEgYml0LiBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIGhvdyBpbmxpbmUgZGF0YSBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gdGhpcyBmaWxlLCBwZXJoYXBzIHRyYWNpbmcgZXhlY3V0aW9uIHBhdGhzIGZyb20gcmVsYXRlZCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgYmxvY2sgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIGNvZGUsIGJlY2F1c2UgdGhlIGlubGluZSBkYXRhIHN0b3JhZ2UgaXMgc3VjaCBhbiBpbnRlcmVzdGluZyBvcHRpbWl6YXRpb24uIExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgSSBtaWdodCBiZSBtaXNzaW5nLiBJIG5lZWQgdG8gdmVyaWZ5IGFzc3VtcHRpb25zIGFib3V0IGhvdyBkYXRhIGlzIHJlYWQgYW5kIHdyaXR0ZW4gaW4gdGhpcyBwYXJ0aWN1bGFyIHNjZW5hcmlvLiBJdCdzIHRpbWUgdG8gdGhvcm91Z2hseSBzY3J1dGluaXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNDIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjM2LjA1NTQ5NDMyNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9pbmxpbmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTY1LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE2NTpcXHRcXHRcXHRnZXRfYmgoaXMuaWxvYy5iaCk7XFxuMTE2NjpcXHRcXHRcXHRleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuMTE2NzpcXHRcXHR9IGVsc2Uge1xcbjExNjg6XFx0XFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKTtcXG4xMTY5OlxcdFxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuMTE3MDpcXHRcXHRcXHRcXHRpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSk7XFxuMTE3MTpcXHRcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2Rpc2tzaXplID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbjExNzI6XFx0XFx0XFx0fVxcbjExNzM6XFx0XFx0XFx0Z2V0X2JoKGlzLmlsb2MuYmgpO1xcbjExNzQ6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuMTE3NTpcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2lubGluZV9vZmYgPSAwO1xcbjExNzY6XFx0XFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfc2l6ZSA9IDA7XFxuMTE3NzpcXHRcXHRcXHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XFxuMTE3ODpcXHRcXHRcXHRicmVsc2UoYmgpO1xcbjExNzk6XFx0XFx0fVxcbjExODA6XFx0XFx0Z290byBvdXQ7XFxuMTE4MTpcXHRlcnJvcjpcXG4xMTgyOlxcdFxcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7XFxuMTE4MzpcXHRcXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xcbjExODQ6XFx0XFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcXG4xMTg1OlxcdG91dDpcXG4xMTg2OlxcdFxcdGJyZWxzZShpcy5pbG9jLmJoKTtcXG4xMTg3OlxcdFxcdHVwX3dyaXRlKFxcdTAwMjZlaS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuMTE4ODpcXHRcXHRrZnJlZShpX2Jsb2NrX2J1Zik7XFxuMTE4OTpcXHRcXHRrZnJlZSh4YXR0cl9idWYpO1xcbjExOTA6XFx0XFx0cmV0dXJuIGVycm9yO1xcbjExOTE6XFx0fVxcbjExOTI6XFx0XFxuMTE5MzpcXHRzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcXG4xMTk0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuMTE5NTpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKVxcbjExOTY6XFx0e1xcbjExOTc6XFx0XFx0aW50IGVycm9yO1xcbjExOTg6XFx0XFx0dm9pZCAqYnVmID0gTlVMTDtcXG4xMTk5OlxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xcbjEyMDA6XFx0XFx0aW50IGlubGluZV9zaXplO1xcbjEyMDE6XFx0XFx0ZXh0NF9mc2Jsa190IG5ld2Jsb2NrID0gMDtcXG4xMjAyOlxcdFxcdHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcjtcXG4xMjAzOlxcdFxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbjEyMDQ6XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jaztcXG4xMjA1OlxcdFxcbjEyMDY6XFx0XFx0aW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7XFxuMTIwNzpcXHRcXHRidWYgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7XFxuMTIwODpcXHRcXHRpZiAoIWJ1Zikge1xcbjEyMDk6XFx0XFx0XFx0ZXJyb3IgPSAtRU5PTUVNO1xcbjEyMTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTIxMTpcXHRcXHR9XFxuMTIxMjpcXHRcXG4xMjEzOlxcdFxcdGVycm9yID0gZXh0NF9yZWFkX2lubGluZV9kYXRhKGlub2RlLCBidWYsIGlubGluZV9zaXplLCBpbG9jKTtcXG4xMjE0OlxcdFxcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuMTIxNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjE2OlxcdFxcbjEyMTc6XFx0XFx0LypcXG4xMjE4OlxcdFxcdCAqIE1ha2Ugc3VyZSB0aGUgaW5saW5lIGRpcmVjdG9yeSBlbnRyaWVzIHBhc3MgY2hlY2tzIGJlZm9yZSB3ZSB0cnkgdG9cXG4xMjE5OlxcdFxcdCAqIGNvbnZlcnQgdGhlbSwgc28gdGhhdCB3ZSBhdm9pZCB0b3VjaGluZyBzdHVmZiB0aGF0IG5lZWRzIGZzY2suXFxuMTIyMDpcXHRcXHQgKi9cXG4xMjIxOlxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuMTIyMjpcXHRcXHRcXHRlcnJvciA9IGV4dDRfY2hlY2tfYWxsX2RlKGlub2RlLCBpbG9jLVxcdTAwM2ViaCxcXG4xMjIzOlxcdFxcdFxcdFxcdFxcdFxcdGJ1ZiArIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxcbjEyMjQ6XFx0XFx0XFx0XFx0XFx0XFx0aW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7XFxuMTIyNTpcXHRcXHRcXHRpZiAoZXJyb3IpXFxuMTIyNjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjI3OlxcdFxcdH1cXG4xMjI4OlxcdFxcbjEyMjk6XFx0XFx0bWVtc2V0KFxcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSk7XFxuMTIzMDpcXHRcXHRhci5pbm9kZSA9IGlub2RlO1xcbjEyMzE6XFx0XFx0YXIubG9naWNhbCA9IDA7XFxuMTIzMjpcXHRcXHRhci5sZW4gPSAxO1xcbjEyMzM6XFx0XFx0aWYgKFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuMTIzNDpcXHRcXHRcXHRhci5mbGFncyA9IEVYVDRfTUJfSElOVF9EQVRBO1xcbjEyMzU6XFx0XFx0ZWxzZVxcbjEyMzY6XFx0XFx0XFx0YXIuZmxhZ3MgPSAwO1xcbjEyMzc6XFx0XFx0bmV3YmxvY2sgPSBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlLCBcXHUwMDI2YXIsIFxcdTAwMjZlcnJvcik7XFxuMTIzODpcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbjEyMzk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTI0MDpcXHRcXHRhbGxvY2F0ZWRfYmxvY2sgPSBFWFQ0X0MyQihzYmksIGFyLmxlbik7XFxuMTI0MTpcXHRcXHRiaCA9IHNiX2dldGJsayhpbm9kZS1cXHUwMDNlaV9zYiwgbmV3YmxvY2spO1xcbjEyNDI6XFx0XFx0aWYgKCFiaCkge1xcbjEyNDM6XFx0XFx0XFx0ZXJyb3IgPSAtRU5PTUVNO1xcbjEyNDQ6XFx0XFx0XFx0Z290byBvdXRfYmg7XFxuMTI0NTpcXHRcXHR9XFxuMTI0NjpcXHRcXG4xMjQ3OlxcdFxcdGxvY2tfYnVmZmVyKGJoKTtcXG4xMjQ4OlxcdFxcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGhhbmRsZSwgaW5vZGUtXFx1MDAzZWlfc2IsIGJoLFxcbjEyNDk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIEVYVDRfSlRSX05PTkUpO1xcbjEyNTA6XFx0XFx0aWYgKGVycm9yKSB7XFxuMTI1MTpcXHRcXHRcXHR1bmxvY2tfYnVmZmVyKGJoKTtcXG4xMjUyOlxcdFxcdFxcdGVycm9yID0gLUVJTztcXG4xMjUzOlxcdFxcdFxcdGdvdG8gb3V0X2JoO1xcbjEyNTQ6XFx0XFx0fVxcbjEyNTU6XFx0XFx0bWVtc2V0KGJoLVxcdTAwM2ViX2RhdGEsIDAsIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSk7XFxuMTI1NjpcXHRcXG4xMjU3OlxcdFxcdGlmICghU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbjEyNTg6XFx0XFx0XFx0bWVtY3B5KGJoLVxcdTAwM2ViX2RhdGEsIGJ1ZiwgaW5saW5lX3NpemUpO1xcbjEyNTk6XFx0XFx0XFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7XFxuMTI2MDpcXHRcXHRcXHR1bmxvY2tfYnVmZmVyKGJoKTtcXG4xMjYxOlxcdFxcdFxcdGVycm9yID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLFxcbjEyNjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW5vZGUsIGJoKTtcXG4xMjYzOlxcdFxcdH0gZWxzZSB7XFxuMTI2NDpcXHRcXHRcXHR1bmxvY2tfYnVmZmVyKGJoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzM6MzYuMDU1NjM3OTk2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNDE0ODcyNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGV4dDQgSW5saW5lIERhdGEgQ29udmVyc2lvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGBmcy9leHQ0L2lubGluZS5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBhbmQgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYC4gRmlyc3QsIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZC5cblxuYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2tgIGlzIGNhbGxlZCBieSB0d28gZnVuY3Rpb25zOiBgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeWAgYW5kIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgLiAgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAsIGluIHR1cm4sIGlzIGEga2V5IGZ1bmN0aW9uLCBhcyBpdCdzIGV4cG9ydGVkIGFuZCBjYWxsZWQgZnJvbSBzZXZlcmFsIGNyaXRpY2FsIGFyZWFzOiBgZXh0NF9zZXRhdHRyYCwgYGV4dDRfZmFsbG9jYXRlYCwgYGV4dDRfcGFnZV9ta3dyaXRlYCwgYGV4dDRfYmVnaW5fZW5hYmxlX3Zlcml0eWAgYW5kIGBleHQ0X3NldF9jb250ZXh0YCAod2hpY2ggaXMgZnNjcnlwdCByZWxhdGVkLCBnb29kIHRvIGtlZXAgaW4gbWluZCkuXG5cbk5vdywgYGV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlgIGlzIGNhbGxlZCBmcm9tIGBleHQ0X2FkZF9lbnRyeWAgbG9jYXRlZCBpbiBgZnMvZXh0NC9uYW1laS5jYC4gR29vZCwgdGhhdCBnaXZlcyBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaW5ncyBmaXQuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLiBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIGlzIHN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gU2FtZSBnb2VzIGZvciBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AuIFRoYXQgbWVhbnMgdGhleSdyZSBpbnRlcm5hbCB0byB0aGUgYC5jYCBmaWxlLiBIb3dldmVyLCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBpcyAqbm90KiBzdGF0aWMsIHNvIGl0J3MgZXhwb3J0ZWQsIGFuZCBgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeWAgaXMgYWxzbyBub3Qgc3RhdGljLiBUaGF0J3MgY29uc2lzdGVudCB3aXRoIHdoYXQgSSd2ZSBzZWVuIHdpdGggdGhlIGNhbGwgZ3JhcGguXG5cblRpbWUgdG8gZHJpbGwgaW50byB0aGUgY2FsbGVycyBhbmQgZGVmaW5pdGlvbnMgb2YgYGV4dDRfY29udmVydF9pbmxpbmVfZGF0YWAgbm93LCBzaW5jZSBpdCBzZWVtcyB0byBiZSB0aGUgbGluY2hwaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzM6MzkuMzk3MTI3MTg1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg1OTc3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9Mzc5Nj1leHRlcm4gaW50IGV4dDRfaW5saW5lX2RhdGFfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpoYXNfaW5saW5lKTtcXG5mcy9leHQ0L2V4dDQuaC0zNzk3LVxcbmZzL2V4dDQvZXh0NC5oOjM3OTg6ZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvZXh0NC9leHQ0LmgtMzc5OS1cXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9NTQ2PWludCBleHQ0X3JlYWRwYWdlX2lubGluZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy01NzItXFxuZnMvZXh0NC9pbmxpbmUuYzo1NzM6c3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfdG9fZXh0ZW50KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmZzL2V4dDQvaW5saW5lLmMtNTc0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEwNzQ9c3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTExOTItXFxuZnMvZXh0NC9pbmxpbmUuYzoxMTkzOnN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxcbmZzL2V4dDQvaW5saW5lLmMtMTE5NC1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xOTQ5PWludCBleHQ0X2lubGluZV9kYXRhX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqaGFzX2lubGluZSlcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMjA2MC1cXG5mcy9leHQ0L2lubGluZS5jOjIwNjE6aW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvaW5saW5lLmMtMjA2Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjM5LjQ0MTk4OTA1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTA0ODc5OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIElubGluZSBEYXRhIENvbnZlcnNpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbW9kaWZpY2F0aW9uIHRvIHRoZSBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMuIEZpcnN0LCBJIHNob3VsZCB2ZXJpZnkgdGhhdCBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIGFuZCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AsIGV2ZW4gdGhlIHN0YXRpYyBmdW5jdGlvbnMgaW52b2x2ZWQsIGFyZSBhY2Nlc3NpYmxlIHN5bWJvbHMuIEtub3dpbmcgdGhlIExpbnV4IGtlcm5lbCdzIHN5bWJvbCBiZWhhdmlvciwgSSdtIHByZXR0eSBzdXJlIHN0YXRpYyBmdW5jdGlvbnMgaW4gYC5jYCBmaWxlcyAqYXJlKiBzeW1ib2xzIHVubGVzcyBpbmxpbmVkLiBCdXQganVzdCB0byBiZSBzYWZlLCBJJ2xsIGluY2x1ZGUgdGhvc2UgZnVuY3Rpb25zIGFsb25nIHdpdGggdGhlIG5vbi1zdGF0aWMgY2FsbGVycyBsaWtlIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgIGFuZCBgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeWAg4oCTIHRoYXQncyBnb29kIHByYWN0aWNlIGZvciBkZWJ1Z2dpbmcsIGFuZCBmdXp6aW5nIGxhdGVyLlxuXG5Ob3csIGxldCdzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgYGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YWAgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgLiBJbnRlcmVzdGluZy4gTW9yZSBzaWduaWZpY2FudGx5LCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AgaGFzIGJlZW4gcmV3b3JrZWQuIFByZXZpb3VzbHksIGl0IGRlc3Ryb3llZCB0aGUgaW5saW5lIGRhdGEgYW5kIHRoZW4gdXNlZCBgZXh0NF9tYXBfYmxvY2tzYC4gTm93LCBpdCdzIGFsbG9jYXRpbmcgbmV3IGJsb2NrcyB1c2luZyBgZXh0NF9tYl9uZXdfYmxvY2tzYCwgd3JpdGluZyBkYXRhIHRvIHRoZSBidWZmZXIgaGVhZCwgYW5kIHRoZW4gKnVzaW5nKiBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIHRvIGluc2VydCB0aGUgZXh0ZW50IG9yIGJsb2NrICphbmQqIHJlbW92ZSB0aGUgaW5saW5lIGRhdGEgeGF0dHIuIE9mIGNvdXJzZSwgd2UncmUgYnVpbGRpbmcgaW4gZXJyb3IgcmVjb3ZlcnkgZm9yIGFsbG9jYXRpb24gb3IgZXh0ZW50IGluc2VydGlvbiBmYWlsdXJlcy4gSXQncyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyBpbmxpbmUgZGF0YSBpcyBjb252ZXJ0ZWQsIHJlYWxseSBkcmlsbGluZyBkb3duIG9uIHRoZSBjb3JlIGxvZ2ljLlxuXG5HaXZlbiB0aGF0IGV4dDQgaXMgYSBjb3JlIGZpbGVzeXN0ZW0sIGZ1bGx5IGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBzeXNjYWxscyB0aGF0IHdlIHVzZSBhbGwgdGhlIHRpbWUgKGBmYWxsb2NhdGVgLCBgdHJ1bmNhdGVgLCBgd3JpdGVgLCBgbWtkaXJgLCBgb3BlbmAsIGV0Yy4pIHRoaXMgaXMgcmlwZSBmb3IgZnV6emluZy5cblxuRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0ISBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlLCBjb3JlIGZpbGVzeXN0ZW0gY29kZSBzcGVjaWZpY2FsbHkgaW4gYGZzL2V4dDQvaW5saW5lLmNgLiBCZWZvcmUgSSBwcm9jZWVkLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3MuIGBDT05GSUdfRVhUNF9GU2AgaXMgYSBnaXZlbiwgb2J2aW91c2x5LiBJIGFsc28gbmVlZCB0byBlbnN1cmUgbm8gb3RoZXIgY29uZmlncyBhcmUgcmVxdWlyZWQgYW5kIHNwZWNpZmljYWxseSB2ZXJpZnkgYW55IGRlcGVuZGVuY2llcy4gTGV0J3MgZGlnIGludG8gdGhlIGV4dDQgS2NvbmZpZyBhbmQgY29kZSBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBpbmxpbmUgZGF0YS4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjMyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjQzLjk0Njg3MjQyMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYxMjM4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU5MSU5FX0RBVEFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2NyeXB0by5jPTEzMj1zdGF0aWMgaW50IGV4dDRfc2V0X2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqY3R4LCBzaXplX3QgbGVuLFxcbi0tXFxuZnMvZXh0NC9jcnlwdG8uYy0xNzktXFx0XFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSxcXG5mcy9leHQ0L2NyeXB0by5jOjE4MDpcXHRcXHRcXHRcXHRcXHRFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XFxuZnMvZXh0NC9jcnlwdG8uYy0xODEtXFx0XFx0XFx0LypcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTQ0MD1zdHJ1Y3QgZmxleF9ncm91cHMge1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtNTA5LVxcbmZzL2V4dDQvZXh0NC5oOjUxMDojZGVmaW5lIEVYVDRfSU5MSU5FX0RBVEFfRkxcXHRcXHQweDEwMDAwMDAwIC8qIElub2RlIGhhcyBpbmxpbmUgZGF0YS4gKi9cXG5mcy9leHQ0L2V4dDQuaC01MTEtI2RlZmluZSBFWFQ0X1BST0pJTkhFUklUX0ZMXFx0XFx0MHgyMDAwMDAwMCAvKiBDcmVhdGUgd2l0aCBwYXJlbnRzIHByb2ppZCAqL1xcbi0tXFxuZnMvZXh0NC9leHQ0LmgtNTQxLVxcdFxcdFxcdFxcdFxcdCBFWFQ0X1ZFUklUWV9GTCB8IFxcXFxcXG5mcy9leHQ0L2V4dDQuaDo1NDI6XFx0XFx0XFx0XFx0XFx0IEVYVDRfSU5MSU5FX0RBVEFfRkwpXFxuZnMvZXh0NC9leHQ0LmgtNTQzLVxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtNTYzLSNkZWZpbmUgRVhUNF9EQVhfTVVUX0VYQ0wgKEVYVDRfVkVSSVRZX0ZMIHwgRVhUNF9FTkNSWVBUX0ZMIHxcXFxcXFxuZnMvZXh0NC9leHQ0Lmg6NTY0OlxcdFxcdFxcdCAgIEVYVDRfSk9VUk5BTF9EQVRBX0ZMIHwgRVhUNF9JTkxJTkVfREFUQV9GTClcXG5mcy9leHQ0L2V4dDQuaC01NjUtXFxuLS1cXG5mcy9leHQ0L2V4dDQuaD01ODA9ZW51bSB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC02MDYtXFx0RVhUNF9JTk9ERV9EQVhcXHRcXHQ9IDI1LFxcdC8qIElub2RlIGlzIERBWCAqL1xcbmZzL2V4dDQvZXh0NC5oOjYwNzpcXHRFWFQ0X0lOT0RFX0lOTElORV9EQVRBXFx0PSAyOCxcXHQvKiBEYXRhIGluIGlub2RlLiAqL1xcbmZzL2V4dDQvZXh0NC5oLTYwOC1cXHRFWFQ0X0lOT0RFX1BST0pJTkhFUklUXFx0PSAyOSxcXHQvKiBDcmVhdGUgd2l0aCBwYXJlbnRzIHByb2ppZCAqL1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9NjI5PXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2NoZWNrX2ZsYWdfdmFsdWVzKHZvaWQpXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC02NTItXFx0Q0hFQ0tfRkxBR19WQUxVRShFQV9JTk9ERSk7XFxuZnMvZXh0NC9leHQ0Lmg6NjUzOlxcdENIRUNLX0ZMQUdfVkFMVUUoSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvZXh0NC5oLTY1NC1cXHRDSEVDS19GTEFHX1ZBTFVFKFBST0pJTkhFUklUKTtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTIwMjY9ZW51bSB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0yMDMyLVxcdEVYVDRfU1RBVEVfTkVXRU5UUlksXFx0XFx0LyogRmlsZSBqdXN0IGFkZGVkIHRvIGRpciAqL1xcbmZzL2V4dDQvZXh0NC5oOjIwMzM6XFx0RVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEsXFx0LyogbWF5IGhhdmUgaW4taW5vZGUgZGF0YSAqL1xcbmZzL2V4dDQvZXh0NC5oLTIwMzQtXFx0RVhUNF9TVEFURV9FWFRfUFJFQ0FDSEVELFxcdC8qIGV4dGVudHMgaGF2ZSBiZWVuIHByZWNhY2hlZCAqL1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjEyOT1zdGF0aWMgaW5saW5lIHN0cnVjdCBtYXBwaW5nX21ldGFkYXRhX2JocyAqZXh0NF9pX21ldGFkYXRhX2JocyhcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTIyMTktI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTEFSR0VESVJcXHRcXHQweDQwMDAgLyogXFx1MDAzZTJHQiBvciAzLWx2bCBodHJlZSAqL1xcbmZzL2V4dDQvZXh0NC5oOjIyMjA6I2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfSU5MSU5FX0RBVEFcXHQweDgwMDAgLyogZGF0YSBpbiBpbm9kZSAqL1xcbmZzL2V4dDQvZXh0NC5oLTIyMjEtI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRU5DUllQVFxcdFxcdDB4MTAwMDBcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTIzMTg9RVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZVTkNTKGxhcmdlZGlyLFxcdFxcdExBUkdFRElSKVxcbmZzL2V4dDQvZXh0NC5oOjIzMTk6RVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZVTkNTKGlubGluZV9kYXRhLFxcdElOTElORV9EQVRBKVxcbmZzL2V4dDQvZXh0NC5oLTIzMjAtRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZVTkNTKGVuY3J5cHQsXFx0XFx0RU5DUllQVClcXG5mcy9leHQ0L2V4dDQuaD0yMzIxPUVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GVU5DUyhjYXNlZm9sZCxcXHRcXHRDQVNFRk9MRClcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTIzNDctXFx0XFx0XFx0XFx0XFx0IEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9NTVAgfCBcXFxcXFxuZnMvZXh0NC9leHQ0Lmg6MjM0ODpcXHRcXHRcXHRcXHRcXHQgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0lOTElORV9EQVRBIHwgXFxcXFxcbmZzL2V4dDQvZXh0NC5oLTIzNDktXFx0XFx0XFx0XFx0XFx0IEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9FTkNSWVBUIHwgXFxcXFxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MzE0OT12b2lkIGV4dDRfc2V0X2lub2RlX21hcHBpbmdfb3JkZXIoc3RydWN0IGlub2RlICppbm9kZSk7XFxuZnMvZXh0NC9leHQ0LmgtMzE1MC0jZGVmaW5lIEZBTExfQkFDS19UT19OT05ERUxBTExPQyAxXFxuZnMvZXh0NC9leHQ0Lmg6MzE1MTojZGVmaW5lIENPTlZFUlRfSU5MSU5FX0RBVEFcXHQgMlxcbmZzL2V4dDQvZXh0NC5oLTMxNTItXFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0zODAwPXN0YXRpYyBpbmxpbmUgaW50IGV4dDRfaGFzX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZXh0NC9leHQ0LmgtMzgwMS17XFxuZnMvZXh0NC9leHQ0Lmg6MzgwMjpcXHRyZXR1cm4gZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC9leHQ0LmgtMzgwMy1cXHQgICAgICAgRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfb2ZmO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NTk1MD1pbnQgZXh0NF9jbHVfbWFwcGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IGxjbHUpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy01OTYyLVxcdCAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjU5NjM6XFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpIHx8XFxuZnMvZXh0NC9leHRlbnRzLmMtNTk2NC1cXHQgICAgZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NjIyOT1pbnQgZXh0NF9leHRfY2xlYXJfYmIoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTYyMzYtXFxuZnMvZXh0NC9leHRlbnRzLmM6NjIzNzpcXHRpZiAoZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKVxcbmZzL2V4dDQvZXh0ZW50cy5jLTYyMzgtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MTExMT1zdGF0aWMgaW50IGV4dDRfZmNfc25hcHNob3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xMTMyLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoxMTMzOlxcdGlmIChleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTExMzQtXFx0XFx0aW5vZGVfbGVuID0gRVhUNF9JTk9ERV9TSVpFKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0xOTQ0PXN0YXRpYyBpbnQgZXh0NF9mY19yZXBsYXlfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYy0xOTkzLVxcdFxcdH1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MTk5NDpcXHR9IGVsc2UgaWYgKGxlMzJfdG9fY3B1KHJhd19pbm9kZS1cXHUwMDNlaV9mbGFncykgXFx1MDAyNiBFWFQ0X0lOTElORV9EQVRBX0ZMKSB7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTE5OTUtXFx0XFx0bWVtY3B5KHJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgcmF3X2ZjX2lub2RlLVxcdTAwM2VpX2Jsb2NrLFxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwMjMtXFx0ICovXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jOjIwMjQ6XFx0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkpXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIwMjUtXFx0XFx0ZXh0NF9leHRfcmVwbGF5X3NldF9pYmxvY2tzKGlub2RlKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz0yMzI4PXN0YXRpYyB2b2lkIGV4dDRfZmNfc2V0X2JpdG1hcHNfYW5kX2NvdW50ZXJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjM0Ny1cXHRcXHRlbmQgPSBFWFRfTUFYX0JMT0NLUztcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6MjM0ODpcXHRcXHRpZiAoZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpKSB7XFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIzNDktXFx0XFx0XFx0aXB1dChpbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz01MjE9c3RhdGljIHNzaXplX3QgZXh0NF9kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL2V4dDQvZmlsZS5jLTU3MC1cXHQgKi9cXG5mcy9leHQ0L2ZpbGUuYzo1NzE6XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvZmlsZS5jLTU3Mi1cXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmM9OTMzPXN0cnVjdCBpbm9kZSAqX19leHQ0X25ld19pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmMtMTMwOS1cXHQgICAgKCEoZWktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiAoRVhUNF9EQVhfRkx8RVhUNF9FQV9JTk9ERV9GTCkpIHx8IFNfSVNESVIobW9kZSkpKVxcbmZzL2V4dDQvaWFsbG9jLmM6MTMxMDpcXHRcXHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvaWFsbG9jLmMtMTMxMS1cXHRyZXQgPSBpbm9kZTtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTktI2RlZmluZSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBXFx0XFxcImRhdGFcXFwiXFxuZnMvZXh0NC9pbmxpbmUuYzoyMDojZGVmaW5lIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkVcXHQoKHNpemVvZihfX2xlMzIpICogRVhUNF9OX0JMT0NLUykpXFxuZnMvZXh0NC9pbmxpbmUuYy0yMS0jZGVmaW5lIEVYVDRfSU5MSU5FX0RPVERPVF9PRkZTRVRcXHQyXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTExMj1pbnQgZXh0NF9nZXRfbWF4X2lubGluZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTEzNi1cXG5mcy9leHQ0L2lubGluZS5jOjEzNzpcXHRyZXR1cm4gbWF4X2lubGluZV9zaXplICsgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRTtcXG5mcy9leHQ0L2lubGluZS5jLTEzOC19XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE0NT1pbnQgZXh0NF9maW5kX2lubGluZV9kYXRhX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNzUtXFx0XFx0XFx0XFx0XFx0KHZvaWQgKilleHQ0X3Jhd19pbm9kZShcXHUwMDI2aXMuaWxvYykpO1xcbmZzL2V4dDQvaW5saW5lLmM6MTc2OlxcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFICtcXG5mcy9leHQ0L2lubGluZS5jLTE3Ny1cXHRcXHRcXHRcXHRsZTMyX3RvX2NwdShpcy5zLmhlcmUtXFx1MDAzZWVfdmFsdWVfc2l6ZSk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE4ND1zdGF0aWMgaW50IGV4dDRfcmVhZF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWZmZXIsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE5Ny1cXG5mcy9leHQ0L2lubGluZS5jOjE5ODpcXHRjcF9sZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xOTktXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTIyOT1zdGF0aWMgdm9pZCBleHQ0X3dyaXRlX2lubGluZV9kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTI0NS1cXG5mcy9leHQ0L2lubGluZS5jOjI0NjpcXHRpZiAocG9zIFxcdTAwM2MgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSkge1xcbmZzL2V4dDQvaW5saW5lLmM6MjQ3OlxcdFxcdGNwX2xlbiA9IHBvcyArIGxlbiBcXHUwMDNlIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgP1xcbmZzL2V4dDQvaW5saW5lLmM6MjQ4OlxcdFxcdFxcdCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIC0gcG9zIDogbGVuO1xcbmZzL2V4dDQvaW5saW5lLmMtMjQ5LVxcdFxcdG1lbWNweSgodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jayArIHBvcywgYnVmZmVyLCBjcF9sZW4pO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0yNTgtXFxuZnMvZXh0NC9pbmxpbmUuYzoyNTk6XFx0cG9zIC09IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0yNjAtXFx0aGVhZGVyID0gSUhEUihpbm9kZSwgcmF3X2lub2RlKTtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MjY4PXN0YXRpYyBpbnQgZXh0NF9jcmVhdGVfaW5saW5lX2RhdGEoaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMjkwLVxcbmZzL2V4dDQvaW5saW5lLmM6MjkxOlxcdGlmIChsZW4gXFx1MDAzZSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKSB7XFxuZnMvZXh0NC9pbmxpbmUuYy0yOTItXFx0XFx0dmFsdWUgPSBFWFQ0X1pFUk9fWEFUVFJfVkFMVUU7XFxuZnMvZXh0NC9pbmxpbmUuYzoyOTM6XFx0XFx0bGVuIC09IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0yOTQtXFx0fSBlbHNlIHtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMzE2LVxcdFxcdFxcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsXFxuZnMvZXh0NC9pbmxpbmUuYzozMTc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcXG5mcy9leHQ0L2lubGluZS5jLTMxOC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMzIxLVxcdG1lbXNldCgodm9pZCAqKWV4dDRfcmF3X2lub2RlKFxcdTAwMjZpcy5pbG9jKS1cXHUwMDNlaV9ibG9jayxcXG5mcy9leHQ0L2lubGluZS5jOjMyMjpcXHRcXHQwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG5mcy9leHQ0L2lubGluZS5jLTMyMy1cXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMzI1LVxcdFxcdFxcdFxcdCAgICAgICh2b2lkICopZXh0NF9yYXdfaW5vZGUoXFx1MDAyNmlzLmlsb2MpKTtcXG5mcy9leHQ0L2lubGluZS5jOjMyNjpcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2lubGluZV9zaXplID0gbGVuICsgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRTtcXG5mcy9leHQ0L2lubGluZS5jLTMyNy1cXHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XFxuZnMvZXh0NC9pbmxpbmUuYzozMjg6XFx0ZXh0NF9zZXRfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSk7XFxuZnMvZXh0NC9pbmxpbmUuYy0zMjktXFx0Z2V0X2JoKGlzLmlsb2MuYmgpO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0zMzc9c3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0zNjctXFxuZnMvZXh0NC9pbmxpbmUuYzozNjg6XFx0bGVuIC09IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0zNjktXFx0dmFsdWUgPSBremFsbG9jKGxlbiwgR0ZQX05PRlMpO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0zOTUtXFx0XFx0XFx0XFx0ICAgICAgKHZvaWQgKilleHQ0X3Jhd19pbm9kZShcXHUwMDI2aXMuaWxvYykpO1xcbmZzL2V4dDQvaW5saW5lLmM6Mzk2OlxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFICtcXG5mcy9leHQ0L2lubGluZS5jLTM5Ny1cXHRcXHRcXHRcXHRsZTMyX3RvX2NwdShpcy5zLmhlcmUtXFx1MDAzZWVfdmFsdWVfc2l6ZSk7XFxuZnMvZXh0NC9pbmxpbmUuYzozOTg6XFx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcXG5mcy9leHQ0L2lubGluZS5jLTM5OS1cXHRnZXRfYmgoaXMuaWxvYy5iaCk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTQwOD1zdGF0aWMgaW50IGV4dDRfcHJlcGFyZV9pbmxpbmVfZGF0YShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy00MTMtXFxuZnMvZXh0NC9pbmxpbmUuYzo0MTQ6XFx0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSlcXG5mcy9leHQ0L2lubGluZS5jLTQxNS1cXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9NDM3PXN0YXRpYyBpbnQgZXh0NF9kZXN0cm95X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy00NzctXFx0bWVtc2V0KCh2b2lkICopZXh0NF9yYXdfaW5vZGUoXFx1MDAyNmlzLmlsb2MpLVxcdTAwM2VpX2Jsb2NrLFxcbmZzL2V4dDQvaW5saW5lLmM6NDc4OlxcdFxcdDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbmZzL2V4dDQvaW5saW5lLmM6NDc5OlxcdG1lbXNldChlaS1cXHUwMDNlaV9kYXRhLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG5mcy9leHQ0L2lubGluZS5jLTQ4MC1cXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNDg3LVxcdH1cXG5mcy9leHQ0L2lubGluZS5jOjQ4ODpcXHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvaW5saW5lLmMtNDg5LVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy00OTQtXFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfc2l6ZSA9IDA7XFxuZnMvZXh0NC9pbmxpbmUuYzo0OTU6XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvaW5saW5lLmMtNDk2LW91dDpcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9NTczPXN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtNTg3LVxcdFxcdCAqL1xcbmZzL2V4dDQvaW5saW5lLmM6NTg4OlxcdFxcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcXG5mcy9leHQ0L2lubGluZS5jLTU4OS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9ODg2PXN0YXRpYyBpbnQgZXh0NF9kYV9jb252ZXJ0X2lubGluZV9kYXRhX3RvX2V4dGVudChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtODk5LVxcdGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XFxuZnMvZXh0NC9pbmxpbmUuYzo5MDA6XFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvaW5saW5lLmMtOTAxLVxcdFxcdGdvdG8gb3V0O1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy05MjQtXFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XFxuZnMvZXh0NC9pbmxpbmUuYzo5MjU6XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvaW5saW5lLmM6OTI2OlxcdCpmc2RhdGEgPSAodm9pZCAqKUNPTlZFUlRfSU5MSU5FX0RBVEE7XFxuZnMvZXh0NC9pbmxpbmUuYy05MjctXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEwNTI9c3RhdGljIGludCBleHQ0X3VwZGF0ZV9pbmxpbmVfZGlyKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMDU1LVxcdGludCByZXQ7XFxuZnMvZXh0NC9pbmxpbmUuYzoxMDU2OlxcdGludCBvbGRfc2l6ZSA9IEVYVDRfSShkaXIpLVxcdTAwM2VpX2lubGluZV9zaXplIC0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRTtcXG5mcy9leHQ0L2lubGluZS5jLTEwNTctXFx0aW50IG5ld19zaXplID0gZ2V0X21heF9pbmxpbmVfeGF0dHJfdmFsdWVfc2l6ZShkaXIsIGlsb2MpO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMDYyLVxcdHJldCA9IGV4dDRfdXBkYXRlX2lubGluZV9kYXRhKGhhbmRsZSwgZGlyLFxcbmZzL2V4dDQvaW5saW5lLmM6MTA2MzpcXHRcXHRcXHRcXHQgICAgICBuZXdfc2l6ZSArIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbmZzL2V4dDQvaW5saW5lLmMtMTA2NC1cXHRpZiAocmV0KVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMDY4LVxcdFxcdFxcdCAgICAgRVhUNF9JKGRpciktXFx1MDAzZWlfaW5saW5lX3NpemUgLVxcbmZzL2V4dDQvaW5saW5lLmM6MTA2OTpcXHRcXHRcXHRcXHRcXHRcXHRFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG5mcy9leHQ0L2lubGluZS5jLTEwNzAtXFx0ZGlyLVxcdTAwM2VpX3NpemUgPSBFWFQ0X0koZGlyKS1cXHUwMDNlaV9kaXNrc2l6ZSA9IEVYVDRfSShkaXIpLVxcdTAwM2VpX2lubGluZV9zaXplO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYz0xMDc0PXN0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMDk0LVxcbmZzL2V4dDQvaW5saW5lLmM6MTA5NTpcXHRpX2Jsb2NrX2J1ZiA9IGttYWxsb2MoRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSwgR0ZQX05PRlMpO1xcbmZzL2V4dDQvaW5saW5lLmMtMTA5Ni1cXHRpZiAoIWlfYmxvY2tfYnVmKSB7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTExMTctXFx0XFx0Z290byBlcnJvcjtcXG5mcy9leHQ0L2lubGluZS5jOjExMTg6XFx0bWVtY3B5KGlfYmxvY2tfYnVmLCAodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuZnMvZXh0NC9pbmxpbmUuYzoxMTE5OlxcdG1lbXNldCgodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuZnMvZXh0NC9pbmxpbmUuYzoxMTIwOlxcdG1lbXNldChlaS1cXHUwMDNlaV9kYXRhLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG5mcy9leHQ0L2lubGluZS5jLTExMjEtXFx0bWVtY3B5KHhhdHRyX2J1ZiwgaGVhZGVyLCB4YXR0cl9zaXplKTtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTE2MS1cXHRcXHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xcbmZzL2V4dDQvaW5saW5lLmM6MTE2MjpcXHRcXHRtZW1jcHkoKHZvaWQgKilyYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2ssIGlfYmxvY2tfYnVmLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcXG5mcy9leHQ0L2lubGluZS5jOjExNjM6XFx0XFx0bWVtY3B5KGVpLVxcdTAwM2VpX2RhdGEsIHJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xMTY0LVxcdFxcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTtcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTE2Ny1cXHR9IGVsc2Uge1xcbmZzL2V4dDQvaW5saW5lLmM6MTE2ODpcXHRcXHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvaW5saW5lLmMtMTE2OS1cXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMTc2LVxcdFxcdEVYVDRfSShpbm9kZSktXFx1MDAzZWlfaW5saW5lX3NpemUgPSAwO1xcbmZzL2V4dDQvaW5saW5lLmM6MTE3NzpcXHRcXHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XFxuZnMvZXh0NC9pbmxpbmUuYy0xMTc4LVxcdFxcdGJyZWxzZShiaCk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEyOTQ9aW50IGV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGV4dDRfZmlsZW5hbWUgKmZuYW1lLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMzEwLVxcdFxcdFxcdFxcdFxcdFxcdCBFWFQ0X0lOTElORV9ET1RET1RfU0laRTtcXG5mcy9leHQ0L2lubGluZS5jOjEzMTE6XFx0aW5saW5lX3NpemUgPSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0xMzEyLVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xMzE5LVxcdGlubGluZV9zaXplID0gRVhUNF9JKGRpciktXFx1MDAzZWlfaW5saW5lX3NpemUgLVxcbmZzL2V4dDQvaW5saW5lLmM6MTMyMDpcXHRcXHRcXHRFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFO1xcbmZzL2V4dDQvaW5saW5lLmMtMTMyMS1cXHRpZiAoIWlubGluZV9zaXplKSB7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTEzMjctXFx0XFx0aW5saW5lX3NpemUgPSBFWFQ0X0koZGlyKS1cXHUwMDNlaV9pbmxpbmVfc2l6ZSAtXFxuZnMvZXh0NC9pbmxpbmUuYzoxMzI4OlxcdFxcdFxcdFxcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0xMzI5LVxcdH1cXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTY2ND1pbnQgZXh0NF90cnlfY3JlYXRlX2lubGluZV9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE2NjYte1xcbmZzL2V4dDQvaW5saW5lLmM6MTY2NzpcXHRpbnQgcmV0LCBpbmxpbmVfc2l6ZSA9IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0xNjY4LVxcdHN0cnVjdCBleHQ0X2lsb2MgaWxvYztcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTY5Nz1zdHJ1Y3QgYnVmZmVyX2hlYWQgKmV4dDRfZmluZF9pbmxpbmVfZW50cnkoc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE3MjktXFx0XFx0XFx0XFx0XFx0XFx0RVhUNF9JTkxJTkVfRE9URE9UX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYzoxNzMwOlxcdGlubGluZV9zaXplID0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSAtIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFO1xcbmZzL2V4dDQvaW5saW5lLmMtMTczMS1cXHRyZXQgPSBleHQ0X3NlYXJjaF9kaXIoaXMuaWxvYy5iaCwgaW5saW5lX3N0YXJ0LCBpbmxpbmVfc2l6ZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTczNy1cXG5mcy9leHQ0L2lubGluZS5jOjE3Mzg6XFx0aWYgKGV4dDRfZ2V0X2lubGluZV9zaXplKGRpcikgPT0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSlcXG5mcy9leHQ0L2lubGluZS5jLTE3MzktXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE3NDEtXFx0aW5saW5lX3N0YXJ0ID0gZXh0NF9nZXRfaW5saW5lX3hhdHRyX3BvcyhkaXIsIFxcdTAwMjZpcy5pbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jOjE3NDI6XFx0aW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShkaXIpIC0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRTtcXG5mcy9leHQ0L2lubGluZS5jLTE3NDMtXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTE3NjA9aW50IGV4dDRfZGVsZXRlX2lubGluZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNzgwLVxcdGlmICgodm9pZCAqKWRlX2RlbCAtICgodm9pZCAqKWV4dDRfcmF3X2lub2RlKFxcdTAwMjZpbG9jKS1cXHUwMDNlaV9ibG9jaykgXFx1MDAzY1xcbmZzL2V4dDQvaW5saW5lLmM6MTc4MTpcXHRcXHRFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKSB7XFxuZnMvZXh0NC9pbmxpbmUuYy0xNzgyLVxcdFxcdGlubGluZV9zdGFydCA9ICh2b2lkICopZXh0NF9yYXdfaW5vZGUoXFx1MDAyNmlsb2MpLVxcdTAwM2VpX2Jsb2NrICtcXG5mcy9leHQ0L2lubGluZS5jLTE3ODMtXFx0XFx0XFx0XFx0XFx0RVhUNF9JTkxJTkVfRE9URE9UX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYzoxNzg0OlxcdFxcdGlubGluZV9zaXplID0gRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSAtXFxuZnMvZXh0NC9pbmxpbmUuYy0xNzg1LVxcdFxcdFxcdFxcdEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xNzg4LVxcdFxcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoZGlyKSAtXFxuZnMvZXh0NC9pbmxpbmUuYzoxNzg5OlxcdFxcdFxcdFxcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0xNzkwLVxcdH1cXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTgxOD1leHQ0X2dldF9pbmxpbmVfZW50cnkoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5saW5lLmMtMTgyNy1cXG5mcy9leHQ0L2lubGluZS5jOjE4Mjg6XFx0aWYgKG9mZnNldCBcXHUwMDNjIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpIHtcXG5mcy9leHQ0L2lubGluZS5jLTE4MjktXFx0XFx0aW5saW5lX3BvcyA9ICh2b2lkICopZXh0NF9yYXdfaW5vZGUoaWxvYyktXFx1MDAzZWlfYmxvY2s7XFxuZnMvZXh0NC9pbmxpbmUuYzoxODMwOlxcdFxcdCppbmxpbmVfc2l6ZSA9IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0xODMxLVxcdH0gZWxzZSB7XFxuZnMvZXh0NC9pbmxpbmUuYy0xODMyLVxcdFxcdGlubGluZV9wb3MgPSBleHQ0X2dldF9pbmxpbmVfeGF0dHJfcG9zKGlub2RlLCBpbG9jKTtcXG5mcy9leHQ0L2lubGluZS5jOjE4MzM6XFx0XFx0b2Zmc2V0IC09IEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0xODM0LVxcdFxcdCppbmxpbmVfc2l6ZSA9IGV4dDRfZ2V0X2lubGluZV9zaXplKGlub2RlKSAtXFxuZnMvZXh0NC9pbmxpbmUuYzoxODM1OlxcdFxcdFxcdFxcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkU7XFxuZnMvZXh0NC9pbmxpbmUuYy0xODM2LVxcdH1cXG4tLVxcbmZzL2V4dDQvaW5saW5lLmM9MTk0OT1pbnQgZXh0NF9pbmxpbmVfZGF0YV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgKmhhc19pbmxpbmUpXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTE5OTQtXFx0XFx0ICovXFxuZnMvZXh0NC9pbmxpbmUuYzoxOTk1OlxcdFxcdGlmICghZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpXFxuZnMvZXh0NC9pbmxpbmUuYy0xOTk2LVxcdFxcdFxcdGV4dDRfZXNfcmVtb3ZlX2V4dGVudChpbm9kZSwgMCwgRVhUX01BWF9CTE9DS1MpO1xcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0xOTk4LVxcdFxcdC8qIENsZWFyIHRoZSBjb250ZW50IGluIHRoZSB4YXR0ciBzcGFjZS4gKi9cXG5mcy9leHQ0L2lubGluZS5jOjE5OTk6XFx0XFx0aWYgKGlubGluZV9zaXplIFxcdTAwM2UgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSkge1xcbmZzL2V4dDQvaW5saW5lLmMtMjAwMC1cXHRcXHRcXHRpZiAoKGVyciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXFx1MDAyNmksIFxcdTAwMjZpcykpICE9IDApXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTIwMjItXFx0XFx0XFx0aS52YWx1ZSA9IHZhbHVlO1xcbmZzL2V4dDQvaW5saW5lLmM6MjAyMzpcXHRcXHRcXHRpLnZhbHVlX2xlbiA9IGlfc2l6ZSBcXHUwMDNlIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgP1xcbmZzL2V4dDQvaW5saW5lLmM6MjAyNDpcXHRcXHRcXHRcXHRcXHRpX3NpemUgLSBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIDogMDtcXG5mcy9leHQ0L2lubGluZS5jLTIwMjUtXFx0XFx0XFx0ZXJyID0gZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlLCBpbm9kZSwgXFx1MDAyNmksIFxcdTAwMjZpcyk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTIwMzAtXFx0XFx0LyogQ2xlYXIgdGhlIGNvbnRlbnQgd2l0aGluIGlfYmxvY2tzLiAqL1xcbmZzL2V4dDQvaW5saW5lLmM6MjAzMTpcXHRcXHRpZiAoaV9zaXplIFxcdTAwM2MgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSkge1xcbmZzL2V4dDQvaW5saW5lLmMtMjAzMi1cXHRcXHRcXHR2b2lkICpwID0gKHZvaWQgKikgZXh0NF9yYXdfaW5vZGUoXFx1MDAyNmlzLmlsb2MpLVxcdTAwM2VpX2Jsb2NrO1xcbmZzL2V4dDQvaW5saW5lLmMtMjAzMy1cXHRcXHRcXHRtZW1zZXQocCArIGlfc2l6ZSwgMCxcXG5mcy9leHQ0L2lubGluZS5jOjIwMzQ6XFx0XFx0XFx0ICAgICAgIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgLSBpX3NpemUpO1xcbmZzL2V4dDQvaW5saW5lLmMtMjAzNS1cXHRcXHR9XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTIwMzctXFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfc2l6ZSA9IGlfc2l6ZSBcXHUwMDNjXFxuZnMvZXh0NC9pbmxpbmUuYzoyMDM4OlxcdFxcdFxcdFxcdFxcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUgP1xcbmZzL2V4dDQvaW5saW5lLmM6MjAzOTpcXHRcXHRcXHRcXHRcXHRFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFIDogaV9zaXplO1xcbmZzL2V4dDQvaW5saW5lLmMtMjA0MC1cXHR9XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTIwNjE9aW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9pbmxpbmUuYy0yMDY3LVxcdGlmICghZXh0NF9oYXNfaW5saW5lX2RhdGEoaW5vZGUpKSB7XFxuZnMvZXh0NC9pbmxpbmUuYzoyMDY4OlxcdFxcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcXG5mcy9leHQ0L2lubGluZS5jLTIwNjktXFx0XFx0cmV0dXJuIDA7XFxuZnMvZXh0NC9pbmxpbmUuYzoyMDcwOlxcdH0gZWxzZSBpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKSB7XFxuZnMvZXh0NC9pbmxpbmUuYy0yMDcxLVxcdFxcdC8qXFxuZnMvZXh0NC9pbmxpbmUuYzoyMDcyOlxcdFxcdCAqIElub2RlIGhhcyBpbmxpbmUgZGF0YSBidXQgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEgaXNcXG5mcy9leHQ0L2lubGluZS5jLTIwNzMtXFx0XFx0ICogY2xlYXJlZC4gVGhpcyBtZWFucyB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBtb3Zpbmcgb2ZcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0xMjc5PXN0YXRpYyBpbnQgZXh0NF93cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMTMwNC1cXG5mcy9leHQ0L2lub2RlLmM6MTMwNTpcXHRpZiAoZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpIHtcXG5mcy9leHQ0L2lub2RlLmMtMTMwNi1cXHRcXHRyZXQgPSBleHQ0X3RyeV90b193cml0ZV9pbmxpbmVfZGF0YShtYXBwaW5nLCBpbm9kZSwgcG9zLCBsZW4sXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9MTQzMD1zdGF0aWMgaW50IGV4dDRfd3JpdGVfZW5kKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0xNDQ0LVxcdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2lub2RlLmM6MTQ0NTpcXHQgICAgZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpXFxuZnMvZXh0NC9pbm9kZS5jLTE0NDYtXFx0XFx0cmV0dXJuIGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTE1MzQ9c3RhdGljIGludCBleHQ0X2pvdXJuYWxsZWRfd3JpdGVfZW5kKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0xNTU0LVxcdGlmIChleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2lub2RlLmM6MTU1NTpcXHQgICAgZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSkpXFxuZnMvZXh0NC9pbm9kZS5jLTE1NTYtXFx0XFx0cmV0dXJuIGV4dDRfd3JpdGVfaW5saW5lX2RhdGFfZW5kKGlub2RlLCBwb3MsIGxlbiwgY29waWVkLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTI3NTI9c3RhdGljIGludCBleHQ0X2RvX3dyaXRlcGFnZXMoc3RydWN0IG1wYWdlX2RhX2RhdGEgKm1wZClcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy0yODAzLVxcdFxcdEJVR19PTihleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsXFxuZnMvZXh0NC9pbm9kZS5jOjI4MDQ6XFx0XFx0XFx0XFx0RVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKTtcXG5mcy9leHQ0L2lub2RlLmMtMjgwNS1cXHRcXHRleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9MzExMj1zdGF0aWMgaW50IGV4dDRfZGFfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTMxMzUtXFxuZnMvZXh0NC9pbm9kZS5jOjMxMzY6XFx0aWYgKGV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpKSB7XFxuZnMvZXh0NC9pbm9kZS5jLTMxMzctXFx0XFx0cmV0ID0gZXh0NF9nZW5lcmljX3dyaXRlX2lubGluZV9kYXRhKG1hcHBpbmcsIGlub2RlLCBwb3MsIGxlbixcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0zMjY1PXN0YXRpYyBpbnQgZXh0NF9kYV93cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTMyNzgtXFxuZnMvZXh0NC9pbm9kZS5jOjMyNzk6XFx0aWYgKHdyaXRlX21vZGUgIT0gQ09OVkVSVF9JTkxJTkVfREFUQSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvaW5vZGUuYzozMjgwOlxcdCAgICBleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvaW5vZGUuYy0zMjgxLVxcdCAgICBleHQ0X2hhc19pbmxpbmVfZGF0YShpbm9kZSkpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTE0MD1zdGF0aWMgaW5saW5lIGludCBleHQ0X2lnZXRfZXh0cmFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01MTU4LVxcdFxcdGlmICghZXJyIFxcdTAwMjZcXHUwMDI2IGV4dDRfaGFzX2lubGluZV9kYXRhKGlub2RlKSlcXG5mcy9leHQ0L2lub2RlLmM6NTE1OTpcXHRcXHRcXHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvaW5vZGUuYy01MTYwLVxcdFxcdHJldHVybiBlcnI7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTI0NT1zdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUzODQtXFx0LyogRGV0ZWN0IGludmFsaWQgZmxhZyBjb21iaW5hdGlvbiAtIGNhbid0IGhhdmUgYm90aCBpbmxpbmUgZGF0YSBhbmQgZXh0ZW50cyAqL1xcbmZzL2V4dDQvaW5vZGUuYzo1Mzg1OlxcdGlmIChleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2lub2RlLmMtNTM4Ni1cXHQgICAgZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpIHtcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYz01Njc9c3RhdGljIGJvb2wgZGF4X2NvbXBhdGlibGUoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IG9sZGZsYWdzLFxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTU3MS1cXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbmZzL2V4dDQvaW9jdGwuYzo1NzI6XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfkVYVDRfSU5MSU5FX0RBVEFfRkw7XFxuZnMvZXh0NC9pb2N0bC5jOjU3MzpcXHRcXHRvbGRmbGFncyBcXHUwMDI2PSB+RVhUNF9JTkxJTkVfREFUQV9GTDtcXG5mcy9leHQ0L2lvY3RsLmMtNTc0LVxcdH1cXG4tLVxcbmZzL2V4dDQvbmFtZWkuYz0yOTY5PWludCBleHQ0X2luaXRfbmV3X2RpcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2V4dDQvbmFtZWkuYy0yOTc1LVxcbmZzL2V4dDQvbmFtZWkuYzoyOTc2OlxcdGlmIChleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKSkge1xcbmZzL2V4dDQvbmFtZWkuYy0yOTc3LVxcdFxcdGVyciA9IGV4dDRfdHJ5X2NyZWF0ZV9pbmxpbmVfZGlyKGhhbmRsZSwgZGlyLCBpbm9kZSk7XFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9Mzc5Nz1zdGF0aWMgaW50IGV4dDRfcmVuYW1lKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMzkxOS1cXHRmb3JjZV9yZXJlYWQgPSAobmV3LmRpci1cXHUwMDNlaV9pbm8gPT0gb2xkLmRpci1cXHUwMDNlaV9pbm8gXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L25hbWVpLmM6MzkyMDpcXHRcXHRcXHRleHQ0X3Rlc3RfaW5vZGVfZmxhZyhuZXcuZGlyLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKSk7XFxuZnMvZXh0NC9uYW1laS5jLTM5MjEtXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMzk0Ny1cXHRcXHRmb3JjZV9yZXJlYWQgPSAhZXh0NF90ZXN0X2lub2RlX2ZsYWcobmV3LmRpcixcXG5mcy9leHQ0L25hbWVpLmM6Mzk0ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEVYVDRfSU5PREVfSU5MSU5FX0RBVEEpO1xcbmZzL2V4dDQvbmFtZWkuYy0zOTQ5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozMzo0My45OTMwMDEyMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzY0MTIwMTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEVYVDQgSW5saW5lIERhdGEgQ29udmVyc2lvbiBMb2dpYyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBmdW5jdGlvbnMgcmVsYXRlZCB0byBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24uIFRoZSBrZXkgcGxheWVycywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGBGb2N1c1N5bWJvbHNgLCBhcmU6IGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFgLCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AsIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AsIGFuZCBgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeWAuXG5cbkZpcnN0LCBJIG5lZWQgdG8gZW5zdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQgbWUgcXVpY2tseSByZS1leGFtaW5lIHRoZSBkaWZmLiBBaCwgaGVyZSB3ZSBnbzogaXQgc2VlbXMgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYCBpcyBuZXcsIGVzc2VudGlhbGx5IHJlcGxhY2luZyBgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhYCwgYW5kIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBoYXMgYmVlbiBtb2RpZmllZC4gVGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGFwcGVhciB0byBiZSBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhYCBhbmQgYGV4dDRfdHJ5X2FkZF9pbmxpbmVfZW50cnlgLiBUaGF0IHNlZW1zIHJlYXNvbmFibGUuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgY3J1Y2lhbCBjb25maWcgaXMgYEVYVDRfRlNgLCB3aGljaCBlbmFibGVzIHRoZSBleHQ0IGZpbGUgc3lzdGVtIGl0c2VsZi4gSSBzaG91bGQgZG91YmxlLWNoZWNrIGlmIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBpbnZvbHZlZC4gU2luY2UgdGhpcyBpcyBpbmxpbmUgZGF0YSwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzZWN1cml0eSBhbmQgQUNMIGNvbnNpZGVyYXRpb25zIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4gSG93ZXZlciwgYSByZXZpZXcgb2YgdGhlIGNvZGUgcmV2ZWFscyB0aGF0IHRoZSBzeXN0ZW0geGF0dHIsIGZvciBpbmxpbmUgZGF0YSwgaXMgbWFuYWdlZCBieSBjb3JlIGV4dDQgeGF0dHIgbG9naWMgKGluIGB4YXR0ci5jYCkuIFRoZSBmYWN0IHRoYXQgaXQgaXMgYWx3YXlzIGJ1aWx0IGFsb25nIHdpdGggYGlubGluZS5vYCBpbXBsaWVzIHRoaXMgaXMgbm90IGRlcGVuZGVudCBvbiBhbnkgb3RoZXIgYWRkaXRpb25hbCBjb25maWcuIFNvLCBgRVhUNF9GU2Agc2VlbXMgc3VmZmljaWVudC5cblxuSSd2ZSByZXZpZXdlZCB0aGUgaW5zdHJ1Y3Rpb25zOiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gYHRydWVgLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgY29udGFpbnMgb25seSBgRVhUNF9GU2AsIHRoZSBgRm9jdXNTeW1ib2xzYCBtYXRjaCB3aGF0IEkndmUgaWRlbnRpZmllZCwgYW5kIHRoZSByZXF1ZXN0ZWQgYFJlYXNvbmluZ2AgaXMgY29uY2lzZSDigJMgd2hpY2ggSSBiZWxpZXZlIEkndmUgYWNoaWV2ZWQuXG5cbkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gSSdtIHNhdGlzZmllZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTcxNywiT3V0cHV0VG9rZW5zIjoxNjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzM6NDguMzU3MTIzNjI1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQxNzgxOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja1wiLFxuICAgIFwiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja1wiLFxuICAgIFwiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhXCIsXG4gICAgXCJleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4dDQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBtZWNoYW5pc20gaW4gZnMvZXh0NC9pbmxpbmUuYywgcmVwbGFjaW5nIGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YSB3aXRoIGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrIGFuZCByZXN0cnVjdHVyaW5nIGJsb2NrIGFsbG9jYXRpb24sIGV4dGVudCBpbnNlcnRpb24sIGFuZCBlcnJvciByZWNvdmVyeSBoYW5kbGluZyBkdXJpbmcgaW5saW5lIGRhdGEgY29udmVyc2lvbi4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBvcGVyYXRpb25zIHdoZW4gZXhwYW5kaW5nIGlubGluZSBmaWxlcy9kaXJlY3RvcmllcyBhbmQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja1wiLFxuICAgIFwiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja1wiLFxuICAgIFwiZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhXCIsXG4gICAgXCJleHQ0X3RyeV9hZGRfaW5saW5lX2VudHJ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGV4dDQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBtZWNoYW5pc20gaW4gZnMvZXh0NC9pbmxpbmUuYywgcmVwbGFjaW5nIGV4dDRfcmVzdG9yZV9pbmxpbmVfZGF0YSB3aXRoIGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrIGFuZCByZXN0cnVjdHVyaW5nIGJsb2NrIGFsbG9jYXRpb24sIGV4dGVudCBpbnNlcnRpb24sIGFuZCBlcnJvciByZWNvdmVyeSBoYW5kbGluZyBkdXJpbmcgaW5saW5lIGRhdGEgY29udmVyc2lvbi4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBvcGVyYXRpb25zIHdoZW4gZXhwYW5kaW5nIGlubGluZSBmaWxlcy9kaXJlY3RvcmllcyBhbmQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozMzo0OC40NDEzMDg3ODJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MDA0NzEyNzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzM6NDguNDQxNzY5NTkyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTUwMDQyNDY4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXh0NCBpbmxpbmUgZGF0YSBjb252ZXJzaW9uIGxvZ2ljIGluIGBmcy9leHQ0L2lubGluZS5jYCBieSBpbnRyb2R1Y2luZyBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIGFuZCBhbGxvY2F0aW5nIHRoZSBkZXN0aW5hdGlvbiBibG9jayBwcmlvciB0byBjbGVhcmluZyBpbmxpbmUgZGF0YSBpbiB0aGUgaW5vZGUuXFxuXFxuUmV2aWV3aW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhY3Jvc3MgdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczpcXG4xLiBBbGwgbG9jYWwgc3RhY2sgc3RydWN0dXJlcyAoYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgLCBgc3RydWN0IGV4dDRfeGF0dHJfaW5mbyBpYCwgYHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcmAsIGFuZCBgc3RydWN0IGV4dDRfZXh0ZW50IG5ld2V4YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgYG1lbXNldGAsIG9yIGV4cGxpY2l0IG1lbWJlciBhc3NpZ25tZW50cyBiZWZvcmUgdXNlLlxcbjIuIEhlYXAgYnVmZmVycyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jYCAoYGlfYmxvY2tfYnVmYCwgYHhhdHRyX2J1ZmAsIGBidWZgKSBhcmUgaW1tZWRpYXRlbHkgcG9wdWxhdGVkIHZpYSBgbWVtY3B5YCBvciBgZXh0NF9yZWFkX2lubGluZV9kYXRhYC5cXG4zLiBUaGUgYmxvY2sgYnVmZmVyIGRhdGEgKGBiaC1cXHUwMDNlYl9kYXRhYCkgaXMgZXhwbGljaXRseSBjbGVhcmVkIHVzaW5nIGBtZW1zZXRgIGJlZm9yZSB3cml0aW5nIGlubGluZSBkYXRhIG9yIGRpcmVjdG9yeSBlbnRyaWVzLlxcbjQuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gYnJhbmNoaW5nL2xvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyByZXN1bHRpbmcgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiwgZXJyb3IgcmVjb3ZlcnkgaGFuZGxpbmcsIGxvY2tpbmcsIG9yIGV4dGVudCBtYW5pcHVsYXRpb24pIGZhbGwgdW5kZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1ZTUyMzEyMDRlMDNjMzAzMjQ2ODM3MTI5NWViOGEyN2Y4MGQxZGViXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxMDozMzowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5saW5lLmMgYi9mcy9leHQ0L2lubGluZS5jXG5pbmRleCA4MDQ1ZTRmZjI3MGM3Li5mZWY5OGFjZWU2ODhmIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbmxpbmUuY1xuKysrIGIvZnMvZXh0NC9pbmxpbmUuY1xuQEAgLTE0LDYgKzE0LDcgQEBcbiAjaW5jbHVkZSBcImV4dDQuaFwiXG4gI2luY2x1ZGUgXCJ4YXR0ci5oXCJcbiAjaW5jbHVkZSBcInRydW5jYXRlLmhcIlxuKyNpbmNsdWRlIFwiZXh0NF9leHRlbnRzLmhcIlxuIFxuICNkZWZpbmUgRVhUNF9YQVRUUl9TWVNURU1fREFUQVx0XCJkYXRhXCJcbiAjZGVmaW5lIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkVcdCgoc2l6ZW9mKF9fbGUzMikgKiBFWFQ0X05fQkxPQ0tTKSlcbkBAIC0xMDcwLDIxICsxMDcxLDEyMyBAQCBzdGF0aWMgaW50IGV4dDRfdXBkYXRlX2lubGluZV9kaXIoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBleHQ0X2lsb2MgKmlsb2MsXG4tXHRcdFx0XHQgICAgIHZvaWQgKmJ1ZiwgaW50IGlubGluZV9zaXplKVxuK3N0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLFxuK1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgbGVuLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuIHtcbi1cdGludCByZXQ7XG4rXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IEVYVDRfSShpbm9kZSk7XG4rXHRzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzID0ge1xuK1x0XHQucyA9IHsgLm5vdF9mb3VuZCA9IC1FTk9EQVRBLCB9LFxuK1x0fTtcbitcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaSA9IHtcbitcdFx0Lm5hbWVfaW5kZXggPSBFWFQ0X1hBVFRSX0lOREVYX1NZU1RFTSxcbitcdFx0Lm5hbWUgPSBFWFQ0X1hBVFRSX1NZU1RFTV9EQVRBLFxuK1x0XHQudmFsdWUgPSBOVUxMLFxuK1x0XHQudmFsdWVfbGVuID0gMCxcbitcdH07XG4rXHRpbnQgZXJyb3I7XG4rXHR2b2lkICppX2Jsb2NrX2J1ZiA9IE5VTEw7XG4rXHR2b2lkICp4YXR0cl9idWYgPSBOVUxMO1xuK1x0dm9pZCAqaGVhZGVyID0gTlVMTDtcbitcdHZvaWQgKnRhaWwgPSBOVUxMO1xuK1x0aW50IHhhdHRyX3NpemU7XG4rXHRzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlO1xuIFxuLVx0cmV0ID0gZXh0NF9jcmVhdGVfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSwgaW5saW5lX3NpemUpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRleHQ0X21zZyhpbm9kZS1cdTAwM2VpX3NiLCBLRVJOX0VNRVJHLFxuLVx0XHRcdFwiZXJyb3IgcmVzdG9yaW5nIGlubGluZV9kYXRhIGZvciBpbm9kZSAtLSBwb3RlbnRpYWwgZGF0YSBsb3NzISAoaW5vZGUgJWxsdSwgZXJyb3IgJWQpXCIsXG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9pbm8sIHJldCk7XG4tXHRcdHJldHVybjtcbitcdGlfYmxvY2tfYnVmID0ga21hbGxvYyhFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFLCBHRlBfTk9GUyk7XG4rXHRpZiAoIWlfYmxvY2tfYnVmKSB7XG4rXHRcdGVycm9yID0gLUVOT01FTTtcbitcdFx0ZG93bl93cml0ZShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbitcdFx0Z290byBlcnJvcjtcbiBcdH1cbi1cdGV4dDRfd3JpdGVfaW5saW5lX2RhdGEoaW5vZGUsIGlsb2MsIGJ1ZiwgMCwgaW5saW5lX3NpemUpO1xuLVx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbitcdGRvd25fd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXHUwMDI2aXMuaWxvYyk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gZXJyb3I7XG4rXHRyYXdfaW5vZGUgPSBleHQ0X3Jhd19pbm9kZShcdTAwMjZpcy5pbG9jKTtcbitcdGhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7XG4rXHR0YWlsID0gSVRBSUwoaW5vZGUsIHJhd19pbm9kZSk7XG4rXHR4YXR0cl9zaXplID0gdGFpbCAtIGhlYWRlcjtcbitcdHhhdHRyX2J1ZiA9IGttYWxsb2MoeGF0dHJfc2l6ZSwgR0ZQX05PRlMpO1xuK1x0aWYgKCF4YXR0cl9idWYpIHtcbitcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGVycm9yO1xuK1x0fVxuK1x0QlVGRkVSX1RSQUNFKGlzLmlsb2MuYmgsIFwiZ2V0X3dyaXRlX2FjY2Vzc1wiKTtcbitcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cdTAwM2VpX3NiLCBpcy5pbG9jLmJoLCBFWFQ0X0pUUl9OT05FKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBlcnJvcjtcbitcdG1lbWNweShpX2Jsb2NrX2J1ZiwgKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4rXHRtZW1zZXQoKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgMCwgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4rXHRtZW1zZXQoZWktXHUwMDNlaV9kYXRhLCAwLCBFWFQ0X01JTl9JTkxJTkVfREFUQV9TSVpFKTtcbitcdG1lbWNweSh4YXR0cl9idWYsIGhlYWRlciwgeGF0dHJfc2l6ZSk7XG4rXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9leHRlbnRzKGlub2RlLVx1MDAzZWlfc2IpIFx1MDAyNlx1MDAyNlxuK1x0XHQoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpKSB7XG4rXHRcdGV4dDRfc2V0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XG4rXHRcdGV4dDRfZXh0X3RyZWVfaW5pdChoYW5kbGUsIGlub2RlKTtcbitcdFx0c3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCAwLCBOVUxMLCAwKTtcbitcbitcdFx0aWYgKElTX0VSUihwYXRoKSkge1xuK1x0XHRcdGVycm9yID0gUFRSX0VSUihwYXRoKTtcbitcdFx0XHRnb3RvIHJlY292ZXJ5O1xuK1x0XHR9XG4rXHRcdHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleDtcbitcbitcdFx0bmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMigwKTtcbitcdFx0bmV3ZXguZWVfbGVuID0gY3B1X3RvX2xlMTYoMSk7XG4rXHRcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcdTAwMjZuZXdleCwgYmxvY2spO1xuK1x0XHRwYXRoID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCBcdTAwMjZuZXdleCwgMCk7XG4rXHRcdGlmIChJU19FUlIocGF0aCkpIHtcbitcdFx0XHRlcnJvciA9IFBUUl9FUlIocGF0aCk7XG4rXHRcdFx0aWYgKGVycm9yID09IC1FRFFVT1QgfHwgZXJyb3IgPT0gLUVOT1NQQylcbitcdFx0XHRcdGdvdG8gcmVjb3Zlcnk7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0Z290byBub19mcmVlO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0RVhUNF9JKGlub2RlKS1cdTAwM2VpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7XG4rXHR9XG4rXHRlcnJvciA9IGV4dDRfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgXHUwMDI2aSwgXHUwMDI2aXMpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIHJlY292ZXJ5O1xuK1x0aWYgKCFpcy5zLm5vdF9mb3VuZClcbitcdFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCBcdTAwMjZpLCBcdTAwMjZpcyk7XG4rcmVjb3Zlcnk6XG4rXHRpZiAoZXJyb3IpIHtcbitcdFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcbitcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcbitcdFx0bWVtY3B5KGhlYWRlciwgeGF0dHJfYnVmLCB4YXR0cl9zaXplKTtcbitub19mcmVlOlxuK1x0XHRleHQ0X2ZvcmdldChoYW5kbGUsIDAsIGlub2RlLCBiaCwgYmxvY2spO1xuK1x0XHRtZW1jcHkoKHZvaWQgKilyYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgaV9ibG9ja19idWYsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xuK1x0XHRtZW1jcHkoZWktXHUwMDNlaV9kYXRhLCByYXdfaW5vZGUtXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XG4rXHRcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTtcbitcdFx0Z2V0X2JoKGlzLmlsb2MuYmgpO1xuK1x0XHRleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcdTAwMjZpcy5pbG9jKTtcbitcdH0gZWxzZSB7XG4rXHRcdGV4dDRfY2xlYXJfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9JTkxJTkVfREFUQSk7XG4rXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbitcdFx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuK1x0XHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9kaXNrc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemU7XG4rXHRcdH1cbitcdFx0Z2V0X2JoKGlzLmlsb2MuYmgpO1xuK1x0XHRlcnJvciA9IGV4dDRfbWFya19pbG9jX2RpcnR5KGhhbmRsZSwgaW5vZGUsIFx1MDAyNmlzLmlsb2MpO1xuK1x0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfaW5saW5lX29mZiA9IDA7XG4rXHRcdEVYVDRfSShpbm9kZSktXHUwMDNlaV9pbmxpbmVfc2l6ZSA9IDA7XG4rXHRcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcbitcdFx0YnJlbHNlKGJoKTtcbitcdH1cbitcdGdvdG8gb3V0O1xuK2Vycm9yOlxuK1x0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcbitcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4rXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIE5VTEwsIGJsb2NrLCBsZW4sIDApO1xuK291dDpcbitcdGJyZWxzZShpcy5pbG9jLmJoKTtcbitcdHVwX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuK1x0a2ZyZWUoaV9ibG9ja19idWYpO1xuK1x0a2ZyZWUoeGF0dHJfYnVmKTtcbitcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4gc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG5AQCAtMTA5Myw5ICsxMTk2LDEyIEBAIHN0YXRpYyBpbnQgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9jayhoYW5kbGVfdCAqaGFuZGxlLFxuIHtcbiBcdGludCBlcnJvcjtcbiBcdHZvaWQgKmJ1ZiA9IE5VTEw7XG4tXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRhdGFfYmggPSBOVUxMO1xuLVx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XG4rXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbiBcdGludCBpbmxpbmVfc2l6ZTtcbitcdGV4dDRfZnNibGtfdCBuZXdibG9jayA9IDA7XG4rXHRzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXI7XG4rXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0dW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jaztcbiBcbiBcdGlubGluZV9zaXplID0gZXh0NF9nZXRfaW5saW5lX3NpemUoaW5vZGUpO1xuIFx0YnVmID0ga21hbGxvYyhpbmxpbmVfc2l6ZSwgR0ZQX05PRlMpO1xuQEAgLTExMjAsNjMgKzEyMjYsNjIgQEAgc3RhdGljIGludCBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRlcnJvciA9IGV4dDRfZGVzdHJveV9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlLCBpbm9kZSk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0bWFwLm1fbGJsayA9IDA7XG4tXHRtYXAubV9sZW4gPSAxO1xuLVx0bWFwLm1fZmxhZ3MgPSAwO1xuLVx0ZXJyb3IgPSBleHQ0X21hcF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgXHUwMDI2bWFwLCBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKTtcbitcdG1lbXNldChcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSk7XG4rXHRhci5pbm9kZSA9IGlub2RlO1xuK1x0YXIubG9naWNhbCA9IDA7XG4rXHRhci5sZW4gPSAxO1xuK1x0aWYgKFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbitcdFx0YXIuZmxhZ3MgPSBFWFQ0X01CX0hJTlRfREFUQTtcbitcdGVsc2VcbitcdFx0YXIuZmxhZ3MgPSAwO1xuK1x0bmV3YmxvY2sgPSBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlLCBcdTAwMjZhciwgXHUwMDI2ZXJyb3IpO1xuIFx0aWYgKGVycm9yIFx1MDAzYyAwKVxuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuLVx0aWYgKCEobWFwLm1fZmxhZ3MgXHUwMDI2IEVYVDRfTUFQX01BUFBFRCkpIHtcbi1cdFx0ZXJyb3IgPSAtRUlPO1xuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuLVx0fVxuLVxuLVx0ZGF0YV9iaCA9IHNiX2dldGJsayhpbm9kZS1cdTAwM2VpX3NiLCBtYXAubV9wYmxrKTtcbi1cdGlmICghZGF0YV9iaCkge1xuK1x0XHRnb3RvIG91dDtcbitcdGFsbG9jYXRlZF9ibG9jayA9IEVYVDRfQzJCKHNiaSwgYXIubGVuKTtcbitcdGJoID0gc2JfZ2V0YmxrKGlub2RlLVx1MDAzZWlfc2IsIG5ld2Jsb2NrKTtcbitcdGlmICghYmgpIHtcbiBcdFx0ZXJyb3IgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dF9yZXN0b3JlO1xuK1x0XHRnb3RvIG91dF9iaDtcbiBcdH1cbiBcbi1cdGxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuLVx0ZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cdTAwM2VpX3NiLCBkYXRhX2JoLFxuK1x0bG9ja19idWZmZXIoYmgpO1xuK1x0ZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cdTAwM2VpX3NiLCBiaCxcbiBcdFx0XHRcdFx0ICAgICAgIEVYVDRfSlRSX05PTkUpO1xuIFx0aWYgKGVycm9yKSB7XG4tXHRcdHVubG9ja19idWZmZXIoZGF0YV9iaCk7XG4rXHRcdHVubG9ja19idWZmZXIoYmgpO1xuIFx0XHRlcnJvciA9IC1FSU87XG4tXHRcdGdvdG8gb3V0X3Jlc3RvcmU7XG4rXHRcdGdvdG8gb3V0X2JoO1xuIFx0fVxuLVx0bWVtc2V0KGRhdGFfYmgtXHUwMDNlYl9kYXRhLCAwLCBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKTtcbitcdG1lbXNldChiaC1cdTAwM2ViX2RhdGEsIDAsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuIFxuIFx0aWYgKCFTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbi1cdFx0bWVtY3B5KGRhdGFfYmgtXHUwMDNlYl9kYXRhLCBidWYsIGlubGluZV9zaXplKTtcbi1cdFx0c2V0X2J1ZmZlcl91cHRvZGF0ZShkYXRhX2JoKTtcbi1cdFx0dW5sb2NrX2J1ZmZlcihkYXRhX2JoKTtcbitcdFx0bWVtY3B5KGJoLVx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XG4rXHRcdHNldF9idWZmZXJfdXB0b2RhdGUoYmgpO1xuK1x0XHR1bmxvY2tfYnVmZmVyKGJoKTtcbiBcdFx0ZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsXG4tXHRcdFx0XHRcdFx0ICAgaW5vZGUsIGRhdGFfYmgpO1xuK1x0XHRcdFx0XHRcdCAgIGlub2RlLCBiaCk7XG4gXHR9IGVsc2Uge1xuLVx0XHR1bmxvY2tfYnVmZmVyKGRhdGFfYmgpO1xuLVx0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuLVx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuLVx0XHRFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZGlza3NpemUgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplO1xuLVxuLVx0XHRlcnJvciA9IGV4dDRfaW5pdF9kaXJibG9jayhoYW5kbGUsIGlub2RlLCBkYXRhX2JoLFxuK1x0XHR1bmxvY2tfYnVmZmVyKGJoKTtcbitcdFx0ZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsXG4gXHRcdFx0ICBsZTMyX3RvX2NwdSgoKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopYnVmKS1cdTAwM2Vpbm9kZSksXG4gXHRcdFx0ICBidWYgKyBFWFQ0X0lOTElORV9ET1RET1RfU0laRSxcbiBcdFx0XHQgIGlubGluZV9zaXplIC0gRVhUNF9JTkxJTkVfRE9URE9UX1NJWkUpO1xuLVx0XHRpZiAoIWVycm9yKVxuLVx0XHRcdGVycm9yID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpO1xuIFx0fVxuK291dF9iaDpcbitcdGlmIChlcnJvcikge1xuK1x0XHRpZiAoYmgpXG4rXHRcdFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIG5ld2Jsb2NrKTtcbitcdFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpO1xuIFxuLW91dF9yZXN0b3JlOlxuLVx0aWYgKGVycm9yKVxuLVx0XHRleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGEoaGFuZGxlLCBpbm9kZSwgaWxvYywgYnVmLCBpbmxpbmVfc2l6ZSk7XG4tXG4rXHRcdGRvd25fd3JpdGUoXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4rXHRcdGV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7XG4rXHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgbmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgMCk7XG4rXHRcdHVwX3dyaXRlKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuK1x0fSBlbHNlIHtcbitcdFx0ZXJyb3IgPSBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGUsIGlub2RlLFxuK1x0XHRcdFx0bmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgYmgpO1xuK1x0fVxuIG91dDpcbi1cdGJyZWxzZShkYXRhX2JoKTtcbiBcdGtmcmVlKGJ1Zik7XG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzM6NDguNDQxNzcwODEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYzNDI0NTM0NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHQ0IElubGluZSBEYXRhIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgaWYgd2UncmUgbG9va2luZyBhdCBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSB0aGF0IHNjcmVhbXMgZm9yIGEgS01TQU4gc2Vzc2lvbiAoTmVlZHNLTVNBTj10cnVlKSwgb3IgaWYgdGhpcyBpcyBqdXN0IHR5cGljYWwgZmlsZXN5c3RlbSBsb2dpYywgYSBidWcgZml4LCBvciBzb21lIHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZyB3aGVyZSBLQVNBTiBvciBvdXIgc3RhbmRhcmQgZGV0ZWN0b3JzIGFyZSBhZGVxdWF0ZS4gSSBuZWVkIHRvIGJlIGVmZmljaWVudCBoZXJlLlxuXG5GaXJzdCwgSSBuZWVkIHRvICp1bmRlcnN0YW5kKiB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgKmRvaW5nKi4gSSdtIHNlZWluZyBpdCdzIGluIGBmcy9leHQ0L2lubGluZS5jYCwgYW5kIHRoZSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYCBhbmQgdGhpcyBuZXcgaGVscGVyIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AuIEl0IGxvb2tzIGxpa2Ugd2UncmUgcmVwbGFjaW5nIGBleHQ0X3Jlc3RvcmVfaW5saW5lX2RhdGFgIGFzIHdlbGwuIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHRvIGxvb2sgaW50by5cblxuTm93LCBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGluc3BlY3QgdGhlIGNvZGUgY2hhbmdlcyB0aGVtc2VsdmVzLiBJJ2xsIG5lZWQgdG8gZ28gbGluZSBieSBsaW5lIGhlcmUsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IG1lbW9yeSBhc3NpZ25tZW50cywgYmxvY2sgaGFuZGxpbmcsIG9yIGRhdGEgY29weWluZyBvcGVyYXRpb25zLiBJZiBJIG5lZWQgdGhlIGJpZ2dlciBwaWN0dXJlLCBJ4oCZbGwgbGV2ZXJhZ2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBjb250ZXh0IHdpdGhpbiBgZnMvZXh0NC9pbmxpbmUuY2AgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgbGFyZ2VyIGV4dDQgaW5saW5lIGRhdGEgcGljdHVyZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBwb3RlbnRpYWwgcmlza3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozMzo1NC43ODQyMjc0MTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvaW5saW5lLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA2MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA2MDpcXHRcXHRcXHRyZXR1cm4gLUVOT1NQQztcXG4xMDYxOlxcdFxcbjEwNjI6XFx0XFx0cmV0ID0gZXh0NF91cGRhdGVfaW5saW5lX2RhdGEoaGFuZGxlLCBkaXIsXFxuMTA2MzpcXHRcXHRcXHRcXHRcXHQgICAgICBuZXdfc2l6ZSArIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjEwNjQ6XFx0XFx0aWYgKHJldClcXG4xMDY1OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMTA2NjpcXHRcXG4xMDY3OlxcdFxcdGV4dDRfdXBkYXRlX2ZpbmFsX2RlKGV4dDRfZ2V0X2lubGluZV94YXR0cl9wb3MoZGlyLCBpbG9jKSwgb2xkX3NpemUsXFxuMTA2ODpcXHRcXHRcXHRcXHQgICAgIEVYVDRfSShkaXIpLVxcdTAwM2VpX2lubGluZV9zaXplIC1cXG4xMDY5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjEwNzA6XFx0XFx0ZGlyLVxcdTAwM2VpX3NpemUgPSBFWFQ0X0koZGlyKS1cXHUwMDNlaV9kaXNrc2l6ZSA9IEVYVDRfSShkaXIpLVxcdTAwM2VpX2lubGluZV9zaXplO1xcbjEwNzE6XFx0XFx0cmV0dXJuIDA7XFxuMTA3MjpcXHR9XFxuMTA3MzpcXHRcXG4xMDc0OlxcdHN0YXRpYyBpbnQgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgZXh0NF9mc2Jsa190IGJsb2NrLFxcbjEwNzU6XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGxlbiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4xMDc2OlxcdHtcXG4xMDc3OlxcdFxcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcXG4xMDc4OlxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXMgPSB7XFxuMTA3OTpcXHRcXHRcXHQucyA9IHsgLm5vdF9mb3VuZCA9IC1FTk9EQVRBLCB9LFxcbjEwODA6XFx0XFx0fTtcXG4xMDgxOlxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaSA9IHtcXG4xMDgyOlxcdFxcdFxcdC5uYW1lX2luZGV4ID0gRVhUNF9YQVRUUl9JTkRFWF9TWVNURU0sXFxuMTA4MzpcXHRcXHRcXHQubmFtZSA9IEVYVDRfWEFUVFJfU1lTVEVNX0RBVEEsXFxuMTA4NDpcXHRcXHRcXHQudmFsdWUgPSBOVUxMLFxcbjEwODU6XFx0XFx0XFx0LnZhbHVlX2xlbiA9IDAsXFxuMTA4NjpcXHRcXHR9O1xcbjEwODc6XFx0XFx0aW50IGVycm9yO1xcbjEwODg6XFx0XFx0dm9pZCAqaV9ibG9ja19idWYgPSBOVUxMO1xcbjEwODk6XFx0XFx0dm9pZCAqeGF0dHJfYnVmID0gTlVMTDtcXG4xMDkwOlxcdFxcdHZvaWQgKmhlYWRlciA9IE5VTEw7XFxuMTA5MTpcXHRcXHR2b2lkICp0YWlsID0gTlVMTDtcXG4xMDkyOlxcdFxcdGludCB4YXR0cl9zaXplO1xcbjEwOTM6XFx0XFx0c3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTtcXG4xMDk0OlxcdFxcbjEwOTU6XFx0XFx0aV9ibG9ja19idWYgPSBrbWFsbG9jKEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUsIEdGUF9OT0ZTKTtcXG4xMDk2OlxcdFxcdGlmICghaV9ibG9ja19idWYpIHtcXG4xMDk3OlxcdFxcdFxcdGVycm9yID0gLUVOT01FTTtcXG4xMDk4OlxcdFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNmVpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4xMDk5OlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMTEwMDpcXHRcXHR9XFxuMTEwMTpcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZlaS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuMTEwMjpcXHRcXHRlcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgXFx1MDAyNmlzLmlsb2MpO1xcbjExMDM6XFx0XFx0aWYgKGVycm9yKVxcbjExMDQ6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4xMTA1OlxcdFxcdHJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKFxcdTAwMjZpcy5pbG9jKTtcXG4xMTA2OlxcdFxcdGhlYWRlciA9IElIRFIoaW5vZGUsIHJhd19pbm9kZSk7XFxuMTEwNzpcXHRcXHR0YWlsID0gSVRBSUwoaW5vZGUsIHJhd19pbm9kZSk7XFxuMTEwODpcXHRcXHR4YXR0cl9zaXplID0gdGFpbCAtIGhlYWRlcjtcXG4xMTA5OlxcdFxcdHhhdHRyX2J1ZiA9IGttYWxsb2MoeGF0dHJfc2l6ZSwgR0ZQX05PRlMpO1xcbjExMTA6XFx0XFx0aWYgKCF4YXR0cl9idWYpIHtcXG4xMTExOlxcdFxcdFxcdGVycm9yID0gLUVOT01FTTtcXG4xMTEyOlxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuMTExMzpcXHRcXHR9XFxuMTExNDpcXHRcXHRCVUZGRVJfVFJBQ0UoaXMuaWxvYy5iaCwgXFxcImdldF93cml0ZV9hY2Nlc3NcXFwiKTtcXG4xMTE1OlxcdFxcdGVycm9yID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cXHUwMDNlaV9zYiwgaXMuaWxvYy5iaCwgRVhUNF9KVFJfTk9ORSk7XFxuMTExNjpcXHRcXHRpZiAoZXJyb3IpXFxuMTExNzpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjExMTg6XFx0XFx0bWVtY3B5KGlfYmxvY2tfYnVmLCAodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuMTExOTpcXHRcXHRtZW1zZXQoKHZvaWQgKilyYXdfaW5vZGUtXFx1MDAzZWlfYmxvY2ssIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjExMjA6XFx0XFx0bWVtc2V0KGVpLVxcdTAwM2VpX2RhdGEsIDAsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjExMjE6XFx0XFx0bWVtY3B5KHhhdHRyX2J1ZiwgaGVhZGVyLCB4YXR0cl9zaXplKTtcXG4xMTIyOlxcdFxcdGlmIChleHQ0X2hhc19mZWF0dXJlX2V4dGVudHMoaW5vZGUtXFx1MDAzZWlfc2IpIFxcdTAwMjZcXHUwMDI2XFxuMTEyMzpcXHRcXHRcXHQoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fCBTX0lTUkVHKGlub2RlLVxcdTAwM2VpX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpKSB7XFxuMTEyNDpcXHRcXHRcXHRleHQ0X3NldF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpO1xcbjExMjU6XFx0XFx0XFx0ZXh0NF9leHRfdHJlZV9pbml0KGhhbmRsZSwgaW5vZGUpO1xcbjExMjY6XFx0XFx0XFx0c3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGggPSBleHQ0X2ZpbmRfZXh0ZW50KGlub2RlLCAwLCBOVUxMLCAwKTtcXG4xMTI3OlxcdFxcbjExMjg6XFx0XFx0XFx0aWYgKElTX0VSUihwYXRoKSkge1xcbjExMjk6XFx0XFx0XFx0XFx0ZXJyb3IgPSBQVFJfRVJSKHBhdGgpO1xcbjExMzA6XFx0XFx0XFx0XFx0Z290byByZWNvdmVyeTtcXG4xMTMxOlxcdFxcdFxcdH1cXG4xMTMyOlxcdFxcdFxcdHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleDtcXG4xMTMzOlxcdFxcbjExMzQ6XFx0XFx0XFx0bmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMigwKTtcXG4xMTM1OlxcdFxcdFxcdG5ld2V4LmVlX2xlbiA9IGNwdV90b19sZTE2KDEpO1xcbjExMzY6XFx0XFx0XFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKFxcdTAwMjZuZXdleCwgYmxvY2spO1xcbjExMzc6XFx0XFx0XFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXFx1MDAyNm5ld2V4LCAwKTtcXG4xMTM4OlxcdFxcdFxcdGlmIChJU19FUlIocGF0aCkpIHtcXG4xMTM5OlxcdFxcdFxcdFxcdGVycm9yID0gUFRSX0VSUihwYXRoKTtcXG4xMTQwOlxcdFxcdFxcdFxcdGlmIChlcnJvciA9PSAtRURRVU9UIHx8IGVycm9yID09IC1FTk9TUEMpXFxuMTE0MTpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlY292ZXJ5O1xcbjExNDI6XFx0XFx0XFx0XFx0ZWxzZVxcbjExNDM6XFx0XFx0XFx0XFx0XFx0Z290byBub19mcmVlO1xcbjExNDQ6XFx0XFx0XFx0fSBlbHNlIHtcXG4xMTQ1OlxcdFxcdFxcdFxcdGV4dDRfZnJlZV9leHRfcGF0aChwYXRoKTtcXG4xMTQ2OlxcdFxcdFxcdH1cXG4xMTQ3OlxcdFxcdH0gZWxzZSB7XFxuMTE0ODpcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFbMF0gPSBjcHVfdG9fbGUzMihibG9jayk7XFxuMTE0OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjU0Ljc4NDM4OTQ5M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzc5MzU5NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJbmxpbmUgRGF0YSBGdW5jdGlvbnMqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byB0YWtlIGEgZGVlcGVyIGRpdmUgaW50byBgZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2tgIGFuZCBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AuIEkgbmVlZCB0byBmdWxseSBncmFzcCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IGFuZCBob3cgdGhleSBhcmUgdXNlZCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBleHQ0J3MgaW5saW5lIGRhdGEgaW1wbGVtZW50YXRpb24uIFVuZGVyc3RhbmRpbmcgdGhlc2UgZnVuY3Rpb25zIGFyZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY2hhbmdlcyBpbiBob3cgZXh0NCBzdG9yZXMgZGF0YSBmb3Igc21hbGxlciBmaWxlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSBleGFjdGx5IHRoZXNlIHJvdXRpbmVzIGZpdCBpbiB0aGUgb3ZlcmFsbCBzY2hlbWUgb2YgdGhpbmdzLiBJJ20gZ29pbmcgdG8gZ28gbGluZS1ieS1saW5lIGFuZCBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIG1hbmlwdWxhdGVkLCB0aGUgbG9ja2luZyBzZW1hbnRpY3MgKG9yIGxhY2sgdGhlcmVvZiwgaW4gdGhlIGNhc2Ugb2YgdGhlICpub2xvY2sgdmVyc2lvbiopLCBhbmQgdGhlIGVycm9yIGhhbmRsaW5nLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGFzc3VtcHRpb25zIGJlaW5nIG1hZGUgYWJvdXQgdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLCBhbmQgaG93IHRoZSBpbmxpbmUgZGF0YSdzIGludGVncml0eSBpcyBlbnN1cmVkLiBXaGF0IGFyZSB0aGUga2V5IGludmFyaWFudHMgbWFpbnRhaW5lZD8gSG93IGRvZXMgdGhpcyBjb2RlIHByb3RlY3QgdGhlIG1ldGFkYXRhIGNvbnNpc3RlbmN5PyBJdCdzIGFsbCBhYm91dCBlbnN1cmluZyB0aGUgcmlnaHQgbGV2ZWwgb2YgY29uY3VycmVuY3kgYW5kIGRhdGEgaW50ZWdyaXR5IGluIHRoaXMgaW1wb3J0YW50IGFyZWEgb2YgdGhlIGZpbGVzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjU3LjE2Mzc1MjAwMloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjEzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9pbmxpbmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTUwOlxcdFxcdGVycm9yID0gZXh0NF94YXR0cl9pYm9keV9maW5kKGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmlzKTtcXG4xMTUxOlxcdFxcdGlmIChlcnJvcilcXG4xMTUyOlxcdFxcdFxcdGdvdG8gcmVjb3Zlcnk7XFxuMTE1MzpcXHRcXHRpZiAoIWlzLnMubm90X2ZvdW5kKVxcbjExNTQ6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGUsIGlub2RlLCBcXHUwMDI2aSwgXFx1MDAyNmlzKTtcXG4xMTU1OlxcdHJlY292ZXJ5OlxcbjExNTY6XFx0XFx0aWYgKGVycm9yKSB7XFxuMTE1NzpcXHRcXHRcXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xcbjExNTg6XFx0XFx0XFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcXG4xMTU5OlxcdFxcdFxcdG1lbWNweShoZWFkZXIsIHhhdHRyX2J1ZiwgeGF0dHJfc2l6ZSk7XFxuMTE2MDpcXHRub19mcmVlOlxcbjExNjE6XFx0XFx0XFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIGJsb2NrKTtcXG4xMTYyOlxcdFxcdFxcdG1lbWNweSgodm9pZCAqKXJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgaV9ibG9ja19idWYsIEVYVDRfTUlOX0lOTElORV9EQVRBX1NJWkUpO1xcbjExNjM6XFx0XFx0XFx0bWVtY3B5KGVpLVxcdTAwM2VpX2RhdGEsIHJhd19pbm9kZS1cXHUwMDNlaV9ibG9jaywgRVhUNF9NSU5fSU5MSU5FX0RBVEFfU0laRSk7XFxuMTE2NDpcXHRcXHRcXHRleHQ0X2NsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUyk7XFxuMTE2NTpcXHRcXHRcXHRnZXRfYmgoaXMuaWxvYy5iaCk7XFxuMTE2NjpcXHRcXHRcXHRleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuMTE2NzpcXHRcXHR9IGVsc2Uge1xcbjExNjg6XFx0XFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0lOTElORV9EQVRBKTtcXG4xMTY5OlxcdFxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuMTE3MDpcXHRcXHRcXHRcXHRpX3NpemVfd3JpdGUoaW5vZGUsIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Jsb2Nrc2l6ZSk7XFxuMTE3MTpcXHRcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2Rpc2tzaXplID0gaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplO1xcbjExNzI6XFx0XFx0XFx0fVxcbjExNzM6XFx0XFx0XFx0Z2V0X2JoKGlzLmlsb2MuYmgpO1xcbjExNzQ6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X21hcmtfaWxvY19kaXJ0eShoYW5kbGUsIGlub2RlLCBcXHUwMDI2aXMuaWxvYyk7XFxuMTE3NTpcXHRcXHRcXHRFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2lubGluZV9vZmYgPSAwO1xcbjExNzY6XFx0XFx0XFx0RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9pbmxpbmVfc2l6ZSA9IDA7XFxuMTE3NzpcXHRcXHRcXHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XFxuMTE3ODpcXHRcXHRcXHRicmVsc2UoYmgpO1xcbjExNzk6XFx0XFx0fVxcbjExODA6XFx0XFx0Z290byBvdXQ7XFxuMTE4MTpcXHRlcnJvcjpcXG4xMTgyOlxcdFxcdGV4dDRfZm9yZ2V0KGhhbmRsZSwgMCwgaW5vZGUsIGJoLCBibG9jayk7XFxuMTE4MzpcXHRcXHRleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpO1xcbjExODQ6XFx0XFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBOVUxMLCBibG9jaywgbGVuLCAwKTtcXG4xMTg1OlxcdG91dDpcXG4xMTg2OlxcdFxcdGJyZWxzZShpcy5pbG9jLmJoKTtcXG4xMTg3OlxcdFxcdHVwX3dyaXRlKFxcdTAwMjZlaS1cXHUwMDNlaV9kYXRhX3NlbSk7XFxuMTE4ODpcXHRcXHRrZnJlZShpX2Jsb2NrX2J1Zik7XFxuMTE4OTpcXHRcXHRrZnJlZSh4YXR0cl9idWYpO1xcbjExOTA6XFx0XFx0cmV0dXJuIGVycm9yO1xcbjExOTE6XFx0fVxcbjExOTI6XFx0XFxuMTE5MzpcXHRzdGF0aWMgaW50IGV4dDRfY29udmVydF9pbmxpbmVfZGF0YV9ub2xvY2soaGFuZGxlX3QgKmhhbmRsZSxcXG4xMTk0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuMTE5NTpcXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZXh0NF9pbG9jICppbG9jKVxcbjExOTY6XFx0e1xcbjExOTc6XFx0XFx0aW50IGVycm9yO1xcbjExOTg6XFx0XFx0dm9pZCAqYnVmID0gTlVMTDtcXG4xMTk5OlxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xcbjEyMDA6XFx0XFx0aW50IGlubGluZV9zaXplO1xcbjEyMDE6XFx0XFx0ZXh0NF9mc2Jsa190IG5ld2Jsb2NrID0gMDtcXG4xMjAyOlxcdFxcdHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fcmVxdWVzdCBhcjtcXG4xMjAzOlxcdFxcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbjEyMDQ6XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jYXRlZF9ibG9jaztcXG4xMjA1OlxcdFxcbjEyMDY6XFx0XFx0aW5saW5lX3NpemUgPSBleHQ0X2dldF9pbmxpbmVfc2l6ZShpbm9kZSk7XFxuMTIwNzpcXHRcXHRidWYgPSBrbWFsbG9jKGlubGluZV9zaXplLCBHRlBfTk9GUyk7XFxuMTIwODpcXHRcXHRpZiAoIWJ1Zikge1xcbjEyMDk6XFx0XFx0XFx0ZXJyb3IgPSAtRU5PTUVNO1xcbjEyMTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTIxMTpcXHRcXHR9XFxuMTIxMjpcXHRcXG4xMjEzOlxcdFxcdGVycm9yID0gZXh0NF9yZWFkX2lubGluZV9kYXRhKGlub2RlLCBidWYsIGlubGluZV9zaXplLCBpbG9jKTtcXG4xMjE0OlxcdFxcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuMTIxNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjE2OlxcdFxcbjEyMTc6XFx0XFx0LypcXG4xMjE4OlxcdFxcdCAqIE1ha2Ugc3VyZSB0aGUgaW5saW5lIGRpcmVjdG9yeSBlbnRyaWVzIHBhc3MgY2hlY2tzIGJlZm9yZSB3ZSB0cnkgdG9cXG4xMjE5OlxcdFxcdCAqIGNvbnZlcnQgdGhlbSwgc28gdGhhdCB3ZSBhdm9pZCB0b3VjaGluZyBzdHVmZiB0aGF0IG5lZWRzIGZzY2suXFxuMTIyMDpcXHRcXHQgKi9cXG4xMjIxOlxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuMTIyMjpcXHRcXHRcXHRlcnJvciA9IGV4dDRfY2hlY2tfYWxsX2RlKGlub2RlLCBpbG9jLVxcdTAwM2ViaCxcXG4xMjIzOlxcdFxcdFxcdFxcdFxcdFxcdGJ1ZiArIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxcbjEyMjQ6XFx0XFx0XFx0XFx0XFx0XFx0aW5saW5lX3NpemUgLSBFWFQ0X0lOTElORV9ET1RET1RfU0laRSk7XFxuMTIyNTpcXHRcXHRcXHRpZiAoZXJyb3IpXFxuMTIyNjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4xMjI3OlxcdFxcdH1cXG4xMjI4OlxcdFxcbjEyMjk6XFx0XFx0bWVtc2V0KFxcdTAwMjZhciwgMCwgc2l6ZW9mKGFyKSk7XFxuMTIzMDpcXHRcXHRhci5pbm9kZSA9IGlub2RlO1xcbjEyMzE6XFx0XFx0YXIubG9naWNhbCA9IDA7XFxuMTIzMjpcXHRcXHRhci5sZW4gPSAxO1xcbjEyMzM6XFx0XFx0aWYgKFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuMTIzNDpcXHRcXHRcXHRhci5mbGFncyA9IEVYVDRfTUJfSElOVF9EQVRBO1xcbjEyMzU6XFx0XFx0ZWxzZVxcbjEyMzY6XFx0XFx0XFx0YXIuZmxhZ3MgPSAwO1xcbjEyMzc6XFx0XFx0bmV3YmxvY2sgPSBleHQ0X21iX25ld19ibG9ja3MoaGFuZGxlLCBcXHUwMDI2YXIsIFxcdTAwMjZlcnJvcik7XFxuMTIzODpcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbjEyMzk6XFx0XFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjMzOjU3LjE2MzkxNTIzM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjg5NjI3MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZXh0NF9jb252ZXJ0X2lubGluZV9kYXRhX25vbG9ja2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmbG93LCBzbyBJJ2xsIGJyZWFrIGl0IGRvd24gcGllY2UgYnkgcGllY2UuIEZpcnN0LCBJIHdhbnQgdG8gdHJhY2UgdGhlIGNvZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGl0J3MgY2FsbGVkIGFuZCwgbW9zdCBpbXBvcnRhbnRseSwgKndoeSogaXQncyBjYWxsZWQuIFdoYXQncyB0aGUgdHJpZ2dlcmluZyBldmVudD8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciB0cmFuc2FjdGlvbj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGJlIGltbWVkaWF0ZWx5IGF3YXJlIG9mLCBnaXZlbiB0aGUgXCJub2xvY2tcIiBkZXNpZ25hdGlvbj8gVGhhdCdzIHRoZSBwcmltYXJ5IHJlZCBmbGFnLCBzbyBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGxvY2stZnJlZSBhc3BlY3RzLlxuXG5JJ2xsIG1lbnRhbGx5IG1hcCBvdXQgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgaW5vZGUsIHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9ycywgYW5kIHRoZSBleHRlbnQgdHJlZS4gSXMgaXQgbW92aW5nIGRhdGEsIGFsbG9jYXRpbmcgbmV3IGJsb2Nrcywgb3Igc2ltcGx5IHVwZGF0aW5nIG1ldGFkYXRhPyBJcyBpdCBhIGRlc3RydWN0aXZlIG9wZXJhdGlvbiAobGlrZSBhbiBpbi1wbGFjZSBjb252ZXJzaW9uKSwgb3IgZG9lcyBpdCBtYWludGFpbiB0aGUgb2xkIGRhdGEgKHBlcmhhcHMgZm9yIGEgcG90ZW50aWFsIHJvbGxiYWNrKT9cblxuSSBzaG91bGQgYWxzbyBhbnRpY2lwYXRlIGVycm9yIHBhdGhzLiBXaGF0IGFyZSB0aGUgY29tbW9uIGZhaWx1cmUgc2NlbmFyaW9zPyBBcmUgdGhlcmUgY2hlY2tzIGZvciByZXNvdXJjZSBleGhhdXN0aW9uIChkaXNrIGZ1bGwsIGV0Yy4pPyBXaGF0IGhhcHBlbnMgaWYgYSBjcml0aWNhbCBtZXRhZGF0YSB1cGRhdGUgZmFpbHMgbWlkLW9wZXJhdGlvbj8gQXJlIHRoZXJlIGFueSBhdG9taWNpdHkgZ3VhcmFudGVlcywgb3IgaXMgdGhlcmUgYSByaXNrIG9mIGluY29uc2lzdGVudCBzdGF0ZSBpZiB0aGUgZnVuY3Rpb24gaXMgaW50ZXJydXB0ZWQ/IEhvdyBhcmUgdGhlc2UgZmFpbHVyZXMgaGFuZGxlZD8gQXJlIHRoZXJlIHJldHJpZXM/IEZhbGxiYWNrcz8gUGFuaWMgc2l0dWF0aW9ucz9cblxuRmluYWxseSwgaG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgZXh0NCBjb2RlPyBBcmUgdGhlcmUgYW55IGFzc3VtcHRpb25zIG1hZGUgYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSBmaWxlc3lzdGVtIG9yIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0PyBBcmUgdGhlcmUgaW1wbGljaXQgY2FsbHMgdG8gb3RoZXIgZnVuY3Rpb25zIG9yIHN0cnVjdHVyZXM/IEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgSSdtIGF3YXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMsIHNvIHRoYXQgSSBjYW4gdW5kZXJzdGFuZCBhbnkgcG9zc2libGUgcmlwcGxlIGVmZmVjdHMuIEknbSBnb2luZyB0byBwYXkgYXR0ZW50aW9uIHRvIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBqb3VybmFsaW5nLiBIb3cgaXMgdGhpcyBvcGVyYXRpb24gbG9nZ2VkPyBJZiBpdCdzIGEgY3JpdGljYWwgY2hhbmdlLCBpcyBpdCBiZWluZyBqb3VybmFsZWQ/IElmIHNvLCB3aGF0IGlzIHdyaXR0ZW4gdG8gdGhlIGpvdXJuYWw/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjM0OjAwLjQ1MzU0NTY3M1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9pbmxpbmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjQwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjQwOlxcdFxcdGFsbG9jYXRlZF9ibG9jayA9IEVYVDRfQzJCKHNiaSwgYXIubGVuKTtcXG4xMjQxOlxcdFxcdGJoID0gc2JfZ2V0YmxrKGlub2RlLVxcdTAwM2VpX3NiLCBuZXdibG9jayk7XFxuMTI0MjpcXHRcXHRpZiAoIWJoKSB7XFxuMTI0MzpcXHRcXHRcXHRlcnJvciA9IC1FTk9NRU07XFxuMTI0NDpcXHRcXHRcXHRnb3RvIG91dF9iaDtcXG4xMjQ1OlxcdFxcdH1cXG4xMjQ2OlxcdFxcbjEyNDc6XFx0XFx0bG9ja19idWZmZXIoYmgpO1xcbjEyNDg6XFx0XFx0ZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBpbm9kZS1cXHUwMDNlaV9zYiwgYmgsXFxuMTI0OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgRVhUNF9KVFJfTk9ORSk7XFxuMTI1MDpcXHRcXHRpZiAoZXJyb3IpIHtcXG4xMjUxOlxcdFxcdFxcdHVubG9ja19idWZmZXIoYmgpO1xcbjEyNTI6XFx0XFx0XFx0ZXJyb3IgPSAtRUlPO1xcbjEyNTM6XFx0XFx0XFx0Z290byBvdXRfYmg7XFxuMTI1NDpcXHRcXHR9XFxuMTI1NTpcXHRcXHRtZW1zZXQoYmgtXFx1MDAzZWJfZGF0YSwgMCwgaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplKTtcXG4xMjU2OlxcdFxcbjEyNTc6XFx0XFx0aWYgKCFTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuMTI1ODpcXHRcXHRcXHRtZW1jcHkoYmgtXFx1MDAzZWJfZGF0YSwgYnVmLCBpbmxpbmVfc2l6ZSk7XFxuMTI1OTpcXHRcXHRcXHRzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTtcXG4xMjYwOlxcdFxcdFxcdHVubG9ja19idWZmZXIoYmgpO1xcbjEyNjE6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsXFxuMTI2MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBpbm9kZSwgYmgpO1xcbjEyNjM6XFx0XFx0fSBlbHNlIHtcXG4xMjY0OlxcdFxcdFxcdHVubG9ja19idWZmZXIoYmgpO1xcbjEyNjU6XFx0XFx0XFx0ZXJyb3IgPSBleHQ0X2luaXRfZGlyYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsXFxuMTI2NjpcXHRcXHRcXHRcXHQgIGxlMzJfdG9fY3B1KCgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKilidWYpLVxcdTAwM2Vpbm9kZSksXFxuMTI2NzpcXHRcXHRcXHRcXHQgIGJ1ZiArIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFLFxcbjEyNjg6XFx0XFx0XFx0XFx0ICBpbmxpbmVfc2l6ZSAtIEVYVDRfSU5MSU5FX0RPVERPVF9TSVpFKTtcXG4xMjY5OlxcdFxcdH1cXG4xMjcwOlxcdG91dF9iaDpcXG4xMjcxOlxcdFxcdGlmIChlcnJvcikge1xcbjEyNzI6XFx0XFx0XFx0aWYgKGJoKVxcbjEyNzM6XFx0XFx0XFx0XFx0ZXh0NF9mb3JnZXQoaGFuZGxlLCAwLCBpbm9kZSwgYmgsIG5ld2Jsb2NrKTtcXG4xMjc0OlxcdFxcdFxcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTtcXG4xMjc1OlxcdFxcbjEyNzY6XFx0XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbjEyNzc6XFx0XFx0XFx0ZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTtcXG4xMjc4OlxcdFxcdFxcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgTlVMTCwgbmV3YmxvY2ssIGFsbG9jYXRlZF9ibG9jaywgMCk7XFxuMTI3OTpcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbjEyODA6XFx0XFx0fSBlbHNlIHtcXG4xMjgxOlxcdFxcdFxcdGVycm9yID0gZXh0NF9zZXRfaW5saW5lX2RhdGFfYmxvY2soaGFuZGxlLCBpbm9kZSxcXG4xMjgyOlxcdFxcdFxcdFxcdFxcdG5ld2Jsb2NrLCBhbGxvY2F0ZWRfYmxvY2ssIGJoKTtcXG4xMjgzOlxcdFxcdH1cXG4xMjg0OlxcdG91dDpcXG4xMjg1OlxcdFxcdGtmcmVlKGJ1Zik7XFxuMTI4NjpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuMTI4NzpcXHR9XFxuMTI4ODpcXHRcXG4xMjg5OlxcdC8qXFxuMTI5MDpcXHQgKiBUcnkgdG8gYWRkIHRoZSBuZXcgZW50cnkgdG8gdGhlIGlubGluZSBkYXRhLlxcbjEyOTE6XFx0ICogSWYgc3VjY2VlZHMsIHJldHVybiAwLiBJZiBub3QsIGV4dGVuZGVkIHRoZSBpbmxpbmUgZGlyIGFuZCBjb3BpZWQgZGF0YSB0b1xcbjEyOTI6XFx0ICogdGhlIG5ldyBjcmVhdGVkIGJsb2NrLlxcbjEyOTM6XFx0ICovXFxuMTI5NDpcXHRpbnQgZXh0NF90cnlfYWRkX2lubGluZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgZXh0NF9maWxlbmFtZSAqZm5hbWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjM0OjAwLjQ1MzcxNDA1M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODg3ODE1MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW5saW5lIERhdGEgQ29udmVyc2lvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCByZWFsbHkgdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgYWx3YXlzICp3aHkqIHdhcyB0aGlzIGNoYW5nZSBuZWNlc3Nhcnk/IEkgc2VlIHRoYXQgaXQncyBhbHRlcmluZyB0aGUgaW5saW5lIGRhdGEgY29udmVyc2lvbiBwcm9jZXNzLiBQcmV2aW91c2x5LCBpdCBsb29rcyBsaWtlIGBleHQ0X2Rlc3Ryb3lfaW5saW5lX2RhdGFfbm9sb2NrYCB3YXMgY2FsbGVkLCB0aGVuIGBleHQ0X21hcF9ibG9ja3NgLiBJZiBgZXh0NF9tYXBfYmxvY2tzYCBmYWlsZWQsIHRoZXknZCByb2xsIGJhY2sgd2l0aCBgZXh0NF9yZXN0b3JlX2lubGluZV9kYXRhYC4gTm93LCB0aGV5J3JlIGFsbG9jYXRpbmcgdGhlIG5ldyBibG9jayBkaXJlY3RseSB3aXRoIGBleHQ0X21iX25ld19ibG9ja3NgLCBwb3B1bGF0aW5nIGl0LCBhbmQgKnRoZW4qIGF0b21pY2FsbHkgcmVwbGFjaW5nIHRoZSBpbmxpbmUgZGF0YSB3aXRoIHRoZSBibG9jay9leHRlbnQgdXNpbmcgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYC4gVGhlIGFkdmFudGFnZSBpcywgcHJlc3VtYWJseSwgYmV0dGVyIHJvbGxiYWNrIGNhcGFiaWxpdGllcyBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgdGhlIGNvbnZlcnNpb24uXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIG1lbW9yeSBzYWZldHkuIEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgYXVkaXQgZm9yIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMsIGxlYWtzIG9mIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgdGhhdCBtaWdodCBiZSB1c2VkIGluIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgaW5zcGVjdCBldmVyeSB2YXJpYWJsZSBhbmQgYnVmZmVyIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMuXG5cbkZpcnN0LCBsZXQncyBsb29rIGF0IGBleHQ0X2NvbnZlcnRfaW5saW5lX2RhdGFfbm9sb2NrYDogSSBzZWUgYSBgYnVmYCBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY2AsIHRoZSBpbmxpbmUgZGF0YSByZWFkIGludG8gaXQuIEdvb2QuIEl0J3MgZnJlZWQgb24gZXJyb3IuIGBhcmAgaXMgemVyb2VkIG91dCwgd2hpY2ggaXMgZ29vZCBwcmFjdGljZS4gYGFsbG9jYXRlZF9ibG9ja2AgaXMgY2FsY3VsYXRlZC4gVGhlbiwgYHNiX2dldGJsa2AgcmV0cmlldmVzIGEgYmxvY2ssIHdoaWNoIGlzIHRoZW4gKnplcm9lZCBvdXQqIGJlZm9yZSBhbnkgZGF0YSBpcyBjb3BpZWQgb3IgdGhlIGRpcmJsb2NrIGlzIGluaXRpYWxpemVkLiBUaGlzIGlzIGEgdmVyeSBpbXBvcnRhbnQgc3RlcCBhbmQgYSBnb29kIHNpZ24gZm9yIG1lbW9yeSBzYWZldHkuIGBtZW1jcHlgIGNvcGllcyB0aGUgaW5saW5lIGRhdGEgaW50byB0aGUgYmxvY2suIE5vIG9idmlvdXMgaXNzdWVzIGhlcmUgc28gZmFyLlxuXG5Ob3csIGxldCdzIG1vdmUgb24gdG8gYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYC4gSSBzZWUgYHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgaXNgLCBhbmQgdGhlIGltcG9ydGFudCBwYXJ0IGlzIHRoYXQgYGlzLmlsb2NgICppcyogaW5pdGlhbGl6ZWQgYnkgYGV4dDRfZ2V0X2lub2RlX2xvY2AuIE9rYXksIHdlJ3JlIG5vdCB1c2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0aGVyZS4gTmV4dCwgYHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaWAgbG9va3MgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIGBpX2Jsb2NrX2J1ZmAgaXMgYWxsb2NhdGVkLCBkYXRhIGlzIGNvcGllZCBpbnRvIGl0IGZyb20gYHJhd19pbm9kZS1cdTAwM2VpX2Jsb2NrYCwgdGhlbiB0aGUgaW5saW5lIGRhdGEgYXJlYSBpcyAqemVyb2VkKi4gVGhpcyBpcyBlc3NlbnRpYWwgdG8gcHJldmVudCBzdGFsZSBkYXRhLiBUaGVuIGB4YXR0cl9idWZgIGlzIGFsbG9jYXRlZCBhbmQgY29waWVkIGZyb20uIEFnYWluLCBubyByZWQgZmxhZ3MuIEkgc2VlIGEgYHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleGAgYW5kIHRob3NlIGluaXRpYWxpemVkIGV4dGVudCBmaWVsZHMuIEJ1dCwgd2FpdCEgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IGV4dDRfZXh0ZW50YC4gSSdsbCBzZWFyY2ggdGhlIGNvZGViYXNlIHRvIG1ha2Ugc3VyZSBJIGtub3cgYWxsIGl0cyBmaWVsZHMgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUgd2hhdCdzIGdvaW5nIG9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgZGF0YSBpcyBvcmdhbml6ZWQuIE9rYXksIEknbGwgZ28gdGhyb3VnaCBhbmQgY2hlY2sgdGhlIGBzdHJ1Y3QgZXh0NF9leHRlbnRgIGRlZmluaXRpb24gcmlnaHQgbm93Li4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzc0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzQ6MDYuMzQxNTMxNzI0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTcyNzA1NTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBleHQ0X2V4dGVudCBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDRfZXh0ZW50cy5oPTQ4PXN0cnVjdCBleHQ0X2V4dGVudF90YWlsIHtcXG4tLVxcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtNTUtICovXFxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaDo1NjpzdHJ1Y3QgZXh0NF9leHRlbnQge1xcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtNTctXFx0X19sZTMyXFx0ZWVfYmxvY2s7XFx0LyogZmlyc3QgbG9naWNhbCBibG9jayBleHRlbnQgY292ZXJzICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjM0OjA4LjUxNDI0Mjc5MloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTU0NjUzNjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgZXh0NCBFeHRlbnQgU3RydWN0dXJlKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZnVuZGFtZW50YWwgYGV4dDRfZXh0ZW50YCBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgZGlyZWN0bHkgYXQgdGhlIGhlYWRlciBmaWxlIOKAkyBgZnMvZXh0NC9leHQ0X2V4dGVudHMuaGAgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU2LCBhcyB0aGF0J3MgcHJvYmFibHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHdhbnQgYSBjbGVhciBwaWN0dXJlIGluIG15IGhlYWQgb2YgdGhlIGNvbnN0aXR1ZW50IGZpZWxkcyBhbmQgdGhlaXIgcHVycG9zZXMuIFdoYXQgaW5mb3JtYXRpb24gZG9lcyB0aGlzIHN0cnVjdHVyZSBob2xkPyBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUga2V5IGNvbXBvbmVudHMg4oCTIHRoZSBzdGFydGluZyBibG9jaywgdGhlIG51bWJlciBvZiBibG9ja3MsIG1heWJlIGEgbGVhZiBub2RlIHBvaW50ZXIgYW5kIHRoZSBsb2dpY2FsIGJsb2NrIHRoYXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgZGlzayBibG9jaywgYW5kIGlmIGl0J3MgdGhlIGxlYWYgbm9kZSwgYSBwb2ludGVyIHRvIHRoZSBkaXJlY3QvaW5kaXJlY3QvZG91YmxlLWluZGlyZWN0IGJsb2NrcywgYW5kIGFsbCByZWxhdGVkIG1ldGFkYXRhLiBVbmRlcnN0YW5kaW5nIHRoaXMgc3RydWN0dXJlIGlzIGNydWNpYWwgZm9yIGFueSBkZWVwZXIgd29yayB3aXRoIGV4dGVudHMsIGVzcGVjaWFsbHkgaWYgSSdtIHRyb3VibGVzaG9vdGluZyBvciBvcHRpbWl6aW5nIEkvTyBwZXJmb3JtYW5jZS4gSXQncyB0aGUgYnVpbGRpbmcgYmxvY2sgZm9yIGFsbCBleHRlbnQtYmFzZWQgYmxvY2sgYWxsb2NhdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0NDcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozNDoxNS4wNjg4OTg3MjVaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXh0NC9leHQ0X2V4dGVudHMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHR9O1xcbiAgNTE6XFx0XFxuICA1MjpcXHQvKlxcbiAgNTM6XFx0ICogVGhpcyBpcyB0aGUgZXh0ZW50IG9uLWRpc2sgc3RydWN0dXJlLlxcbiAgNTQ6XFx0ICogSXQncyB1c2VkIGF0IHRoZSBib3R0b20gb2YgdGhlIHRyZWUuXFxuICA1NTpcXHQgKi9cXG4gIDU2OlxcdHN0cnVjdCBleHQ0X2V4dGVudCB7XFxuICA1NzpcXHRcXHRfX2xlMzJcXHRlZV9ibG9jaztcXHQvKiBmaXJzdCBsb2dpY2FsIGJsb2NrIGV4dGVudCBjb3ZlcnMgKi9cXG4gIDU4OlxcdFxcdF9fbGUxNlxcdGVlX2xlbjtcXHRcXHQvKiBudW1iZXIgb2YgYmxvY2tzIGNvdmVyZWQgYnkgZXh0ZW50ICovXFxuICA1OTpcXHRcXHRfX2xlMTZcXHRlZV9zdGFydF9oaTtcXHQvKiBoaWdoIDE2IGJpdHMgb2YgcGh5c2ljYWwgYmxvY2sgKi9cXG4gIDYwOlxcdFxcdF9fbGUzMlxcdGVlX3N0YXJ0X2xvO1xcdC8qIGxvdyAzMiBiaXRzIG9mIHBoeXNpY2FsIGJsb2NrICovXFxuICA2MTpcXHR9O1xcbiAgNjI6XFx0XFxuICA2MzpcXHQvKlxcbiAgNjQ6XFx0ICogVGhpcyBpcyBpbmRleCBvbi1kaXNrIHN0cnVjdHVyZS5cXG4gIDY1OlxcdCAqIEl0J3MgdXNlZCBhdCBhbGwgdGhlIGxldmVscyBleGNlcHQgdGhlIGJvdHRvbS5cXG4gIDY2OlxcdCAqL1xcbiAgNjc6XFx0c3RydWN0IGV4dDRfZXh0ZW50X2lkeCB7XFxuICA2ODpcXHRcXHRfX2xlMzJcXHRlaV9ibG9jaztcXHQvKiBpbmRleCBjb3ZlcnMgbG9naWNhbCBibG9ja3MgZnJvbSAnYmxvY2snICovXFxuICA2OTpcXHRcXHRfX2xlMzJcXHRlaV9sZWFmX2xvO1xcdC8qIHBvaW50ZXIgdG8gdGhlIHBoeXNpY2FsIGJsb2NrIG9mIHRoZSBuZXh0ICpcXG4gIDcwOlxcdFxcdFxcdFxcdFxcdCAqIGxldmVsLiBsZWFmIG9yIG5leHQgaW5kZXggY291bGQgYmUgdGhlcmUgKi9cXG4gIDcxOlxcdFxcdF9fbGUxNlxcdGVpX2xlYWZfaGk7XFx0LyogaGlnaCAxNiBiaXRzIG9mIHBoeXNpY2FsIGJsb2NrICovXFxuICA3MjpcXHRcXHRfX3UxNlxcdGVpX3VudXNlZDtcXG4gIDczOlxcdH07XFxuICA3NDpcXHRcXG4gIDc1OlxcdC8qXFxuICA3NjpcXHQgKiBFYWNoIGJsb2NrIChsZWF2ZXMgYW5kIGluZGV4ZXMpLCBldmVuIGlub2RlLXN0b3JlZCBoYXMgaGVhZGVyLlxcbiAgNzc6XFx0ICovXFxuICA3ODpcXHRzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyIHtcXG4gIDc5OlxcdFxcdF9fbGUxNlxcdGVoX21hZ2ljO1xcdC8qIHByb2JhYmx5IHdpbGwgc3VwcG9ydCBkaWZmZXJlbnQgZm9ybWF0cyAqL1xcbiAgODA6XFx0XFx0X19sZTE2XFx0ZWhfZW50cmllcztcXHQvKiBudW1iZXIgb2YgdmFsaWQgZW50cmllcyAqL1xcbiAgODE6XFx0XFx0X19sZTE2XFx0ZWhfbWF4O1xcdFxcdC8qIGNhcGFjaXR5IG9mIHN0b3JlIGluIGVudHJpZXMgKi9cXG4gIDgyOlxcdFxcdF9fbGUxNlxcdGVoX2RlcHRoO1xcdC8qIGhhcyB0cmVlIHJlYWwgdW5kZXJseWluZyBibG9ja3M/ICovXFxuICA4MzpcXHRcXHRfX2xlMzJcXHRlaF9nZW5lcmF0aW9uO1xcdC8qIGdlbmVyYXRpb24gb2YgdGhlIHRyZWUgKi9cXG4gIDg0OlxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjM0OjE1LjA2ODk3NDYxNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzU3OTk5MzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBleHQ0X2V4dF9zdG9yZV9wYmxvY2sqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgZXh0NF9leHRfc3RvcmVfcGJsb2NrKFx1MDAyNm5ld2V4LCBibG9jayk7YCBpcyBkb2luZy4gRmlyc3QsIEknbGwgcmVmcmVzaCBteSBtZW1vcnkgb2YgdGhlIGBleHQ0X2V4dGVudGAgc3RydWN0dXJlLiBSaWdodCwgYGVlX2Jsb2NrYCBpcyA0IGJ5dGVzLCBgZWVfbGVuYCBpcyAyIGJ5dGVzLCB0aGVuIGBlZV9zdGFydF9oaWAgaXMgMiBieXRlcyBhbmQgYGVlX3N0YXJ0X2xvYCBpcyA0IGJ5dGVzLCB0b3RhbGluZyAxMiBieXRlcyBmb3IgdGhlIGVudGlyZSBleHRlbnQgc3RydWN0dXJlLiBOb3csIEkgbmVlZCB0byBrbm93IHByZWNpc2VseSB3aGF0IGBleHQ0X2V4dF9zdG9yZV9wYmxvY2tgIGlzIHNldHRpbmcgd2l0aGluIHRoaXMgc3RydWN0dXJlLiBUaGF0J3MgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgaG93IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzI1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzQ6MTYuODI2OTc3NDRaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDQ3MDQ0MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9leHRfc3RvcmVfcGJsb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NF9leHRlbnRzLmg9MjMyPXN0YXRpYyBpbmxpbmUgZXh0NF9mc2Jsa190IGV4dDRfaWR4X3BibG9jayhzdHJ1Y3QgZXh0NF9leHRlbnRfaWR4ICppeClcXG4tLVxcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtMjQxLS8qXFxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaDoyNDI6ICogZXh0NF9leHRfc3RvcmVfcGJsb2NrOlxcbmZzL2V4dDQvZXh0NF9leHRlbnRzLmgtMjQzLSAqIHN0b3JlcyBhIGxhcmdlIHBoeXNpY2FsIGJsb2NrIG51bWJlciBpbnRvIGFuIGV4dGVudCBzdHJ1Y3QsXFxuLS1cXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oLTI0NS0gKi9cXG5mcy9leHQ0L2V4dDRfZXh0ZW50cy5oOjI0NjpzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9leHRfc3RvcmVfcGJsb2NrKHN0cnVjdCBleHQ0X2V4dGVudCAqZXgsXFxuZnMvZXh0NC9leHQ0X2V4dGVudHMuaC0yNDctXFx0XFx0XFx0XFx0XFx0IGV4dDRfZnNibGtfdCBwYilcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM9MjIyPXN0YXRpYyBpbnQgZXh0ZW50c19rdW5pdF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmMtMzE0LVxcdEVYVF9GSVJTVF9FWFRFTlQoZWgpLVxcdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNihFWFRfREFUQV9MRU4pO1xcbmZzL2V4dDQvZXh0ZW50cy10ZXN0LmM6MzE1OlxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhFWFRfRklSU1RfRVhURU5UKGVoKSwgRVhUX0RBVEFfUEJMSyk7XFxuZnMvZXh0NC9leHRlbnRzLXRlc3QuYy0zMTYtXFx0aWYgKCFwYXJhbSB8fCBwYXJhbS1cXHUwMDNlaXNfdW53cml0X2F0X3N0YXJ0KVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9MTk5Mj1leHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy0yMDg1LVxcdFxcdFxcdGV4LVxcdTAwM2VlZV9ibG9jayA9IG5ld2V4dC1cXHUwMDNlZWVfYmxvY2s7XFxuZnMvZXh0NC9leHRlbnRzLmM6MjA4NjpcXHRcXHRcXHRleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgsIGV4dDRfZXh0X3BibG9jayhuZXdleHQpKTtcXG5mcy9leHQ0L2V4dGVudHMuYy0yMDg3LVxcdFxcdFxcdGV4LVxcdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNihleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleClcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTIxOTYtXFx0bmVhcmV4LVxcdTAwM2VlZV9ibG9jayA9IG5ld2V4dC1cXHUwMDNlZWVfYmxvY2s7XFxuZnMvZXh0NC9leHRlbnRzLmM6MjE5NzpcXHRleHQ0X2V4dF9zdG9yZV9wYmxvY2sobmVhcmV4LCBleHQ0X2V4dF9wYmxvY2sobmV3ZXh0KSk7XFxuZnMvZXh0NC9leHRlbnRzLmMtMjE5OC1cXHRuZWFyZXgtXFx1MDAzZWVlX2xlbiA9IG5ld2V4dC1cXHUwMDNlZWVfbGVuO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9MjYxND1leHQ0X2V4dF9ybV9sZWFmKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy0yNzM5LVxcdFxcdFxcdC8qIHRoaXMgZXh0ZW50IGlzIHJlbW92ZWQ7IG1hcmsgc2xvdCBlbnRpcmVseSB1bnVzZWQgKi9cXG5mcy9leHQ0L2V4dGVudHMuYzoyNzQwOlxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgMCk7XFxuZnMvZXh0NC9leHRlbnRzLmMtMjc0MS1cXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTMxOTE9c3RhdGljIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpleHQ0X3NwbGl0X2V4dGVudF9hdChoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzI0Ni1cXHRleDItXFx1MDAzZWVlX2xlbiAgID0gY3B1X3RvX2xlMTYoZWVfbGVuIC0gKHNwbGl0IC0gZWVfYmxvY2spKTtcXG5mcy9leHQ0L2V4dGVudHMuYzozMjQ3OlxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleDIsIG5ld2Jsb2NrKTtcXG5mcy9leHQ0L2V4dGVudHMuYy0zMjQ4LVxcdGlmIChpc191bndyaXQpXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz0zNTU3PWV4dDRfZXh0X2NvbnZlcnRfdG9faW5pdGlhbGl6ZWQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTM2NDUtXFx0XFx0XFx0ZXgtXFx1MDAzZWVlX2Jsb2NrID0gY3B1X3RvX2xlMzIoZWVfYmxvY2sgKyBtYXBfbGVuKTtcXG5mcy9leHQ0L2V4dGVudHMuYzozNjQ2OlxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgZWVfcGJsayArIG1hcF9sZW4pO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTM2NDctXFx0XFx0XFx0ZXgtXFx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGVlX2xlbiAtIG1hcF9sZW4pO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzY5MS1cXHRcXHRcXHRhYnV0X2V4LVxcdTAwM2VlZV9ibG9jayA9IGNwdV90b19sZTMyKG5leHRfbGJsayAtIG1hcF9sZW4pO1xcbmZzL2V4dDQvZXh0ZW50cy5jOjM2OTI6XFx0XFx0XFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKGFidXRfZXgsIG5leHRfcGJsayAtIG1hcF9sZW4pO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTM2OTMtXFx0XFx0XFx0ZXgtXFx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGVlX2xlbiAtIG1hcF9sZW4pO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzc0NS1cXHRcXHRcXHRcXHRjcHVfdG9fbGUxNigqYWxsb2NhdGVkIC0gc3BsaXRfbWFwLm1fbGVuKTtcXG5mcy9leHQ0L2V4dGVudHMuYzozNzQ2OlxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2emVyb19leDEsXFxuZnMvZXh0NC9leHRlbnRzLmMtMzc0Ny1cXHRcXHRcXHRcXHRleHQ0X2V4dF9wYmxvY2soZXgpICsgc3BsaXRfbWFwLm1fbGJsayArXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy0zNzYwLVxcdFxcdFxcdFxcdFxcdFxcdFxcdGVlX2Jsb2NrKTtcXG5mcy9leHQ0L2V4dGVudHMuYzozNzYxOlxcdFxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2emVyb19leDIsXFxuZnMvZXh0NC9leHRlbnRzLmMtMzc2Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBleHQ0X2V4dF9wYmxvY2soZXgpKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQyNjk9aW50IGV4dDRfZXh0X21hcF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ0NzMtXFx0cGJsayA9IG5ld2Jsb2NrICsgb2Zmc2V0O1xcbmZzL2V4dDQvZXh0ZW50cy5jOjQ0NzQ6XFx0ZXh0NF9leHRfc3RvcmVfcGJsb2NrKFxcdTAwMjZuZXdleCwgcGJsayk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNDQ3NS1cXHRuZXdleC5lZV9sZW4gPSBjcHVfdG9fbGUxNihhci5sZW4pO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NTc2NT1leHQ0X3N3YXBfZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlMSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTU4OTktXFx0XFx0dG1wX2V4ID0gKmV4MTtcXG5mcy9leHQ0L2V4dGVudHMuYzo1OTAwOlxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleDEsIGV4dDRfZXh0X3BibG9jayhleDIpKTtcXG5mcy9leHQ0L2V4dGVudHMuYzo1OTAxOlxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleDIsIGV4dDRfZXh0X3BibG9jayhcXHUwMDI2dG1wX2V4KSk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNTkwMi1cXHRcXHRleDEtXFx1MDAzZWVlX2xlbiA9IGNwdV90b19sZTE2KGUyX2xlbik7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz02MDI5PWludCBleHQ0X2V4dF9yZXBsYXlfdXBkYXRlX2V4KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfbGJsa190IHN0YXJ0LFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNjA4Mi1cXHRcXHRleHQ0X2V4dF9tYXJrX2luaXRpYWxpemVkKGV4KTtcXG5mcy9leHQ0L2V4dGVudHMuYzo2MDgzOlxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgcGJsayk7XFxuZnMvZXh0NC9leHRlbnRzLmMtNjA4NC1cXHRkb3duX3dyaXRlKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4tLVxcbmZzL2V4dDQvZmFzdF9jb21taXQuYz05MzE9c3RhdGljIGludCBleHQ0X2ZjX3dyaXRlX2lub2RlX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgdTMyICpjcmMpXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtOTYxLVxcdFxcdGV4LVxcdTAwM2VlZV9sZW4gPSBjcHVfdG9fbGUxNihyYW5nZS1cXHUwMDNlbGVuKTtcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM6OTYyOlxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgcmFuZ2UtXFx1MDAzZXBibGspO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYy05NjMtXFx0XFx0aWYgKHJhbmdlLVxcdTAwM2V1bndyaXR0ZW4pXFxuLS1cXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmM9MjE0OD1zdGF0aWMgaW50IGV4dDRfZmNfcmVwbGF5X2FkZF9yYW5nZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1OCAqdmFsKVxcbi0tXFxuZnMvZXh0NC9mYXN0X2NvbW1pdC5jLTIyMDItXFx0XFx0XFx0bmV3ZXguZWVfYmxvY2sgPSBjcHVfdG9fbGUzMihjdXIpO1xcbmZzL2V4dDQvZmFzdF9jb21taXQuYzoyMjAzOlxcdFxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXG5mcy9leHQ0L2Zhc3RfY29tbWl0LmMtMjIwNC1cXHRcXHRcXHRcXHRcXHUwMDI2bmV3ZXgsIHN0YXJ0X3BibGsgKyBjdXIgLSBzdGFydCk7XFxuLS1cXG5mcy9leHQ0L2lubGluZS5jPTEwNzQ9c3RhdGljIGludCBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2ZzYmxrX3QgYmxvY2ssXFxuLS1cXG5mcy9leHQ0L2lubGluZS5jLTExMzUtXFx0XFx0bmV3ZXguZWVfbGVuID0gY3B1X3RvX2xlMTYoMSk7XFxuZnMvZXh0NC9pbmxpbmUuYzoxMTM2OlxcdFxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2bmV3ZXgsIGJsb2NrKTtcXG5mcy9leHQ0L2lubGluZS5jLTExMzctXFx0XFx0cGF0aCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgXFx1MDAyNm5ld2V4LCAwKTtcXG4tLVxcbmZzL2V4dDQvbWlncmF0ZS5jPTIxPXN0YXRpYyBpbnQgZmluaXNoX3JhbmdlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L21pZ3JhdGUuYy0zMy1cXHRuZXdleHQuZWVfbGVuICAgPSBjcHVfdG9fbGUxNihsYi1cXHUwMDNlbGFzdF9ibG9jayAtIGxiLVxcdTAwM2VmaXJzdF9ibG9jayArIDEpO1xcbmZzL2V4dDQvbWlncmF0ZS5jOjM0OlxcdGV4dDRfZXh0X3N0b3JlX3BibG9jayhcXHUwMDI2bmV3ZXh0LCBsYi1cXHUwMDNlZmlyc3RfcGJsb2NrKTtcXG5mcy9leHQ0L21pZ3JhdGUuYy0zNS1cXHQvKiBMb2NraW5nIG9ubHkgZm9yIGNvbnZlbmllbmNlIHNpbmNlIHdlIGFyZSBvcGVyYXRpbmcgb24gdGVtcCBpbm9kZSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozNDoxOC4zNzE2ODYzMjVaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc3MjIzNjE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzcyBhcyBJIGRlbHZlIGludG8gdGhlIGBleHQ0X2V4dF9zdG9yZV9wYmxvY2tgIGltcGxlbWVudGF0aW9uOlxuXG4qKkRpdmluZyBpbnRvIGBleHQ0X2V4dF9zdG9yZV9wYmxvY2tgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGV4dDRfZXh0X3N0b3JlX3BibG9ja2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBwdXJwb3NlLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IGl0J3MgcmVsYXRlZCB0byBzdG9yaW5nIHBoeXNpY2FsIGJsb2NrIGFkZHJlc3NlcyB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSdzIGV4dGVudCBzdHJ1Y3R1cmUsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjbHVlcy4gSeKAmW0gdGhpbmtpbmcsIGlzIHRoaXMgYSB3cml0ZSBwYXRoIGZ1bmN0aW9uPyBJcyBpdCBiZWluZyBjYWxsZWQgZHVyaW5nIGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uPyBNeSBleHBlcmllbmNlIHNheXMgaXQgcHJvYmFibHkgZGVhbHMgd2l0aCBtYXBwaW5nIGxvZ2ljYWwgYmxvY2tzICh3aGF0IHRoZSB1c2VyIHNlZXMpIHRvIHBoeXNpY2FsIGJsb2NrcyAod2hlcmUgZGF0YSBpcyBhY3R1YWxseSBzdG9yZWQgb24gdGhlIGRpc2spLiBUaGUgbmFtZSwgJ3N0b3JlX3BibG9jaycsIHNjcmVhbXMgdGhhdCBhdCBtZSwgb2YgY291cnNlLCBidXQgSSB3YW50IHRvIHNlZSB0aGUgY29udGV4dC5cblxuSSdsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgc2NlbmFyaW9zOiBob3cgaXQgZGVhbHMgd2l0aCBleGlzdGluZyBleHRlbnRzLCBuZXcgZXh0ZW50cywgYW5kIHBvc3NpYmx5LCB3aGF0IGlmIHRoZSBleHRlbnQgaGFzIHRvIGJlIHNwbGl0LiBJJ2xsIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0byBhbnkgZXJyb3IgaGFuZGxpbmcsIGVzcGVjaWFsbHkgd2hhdCBoYXBwZW5zIGlmIGFsbG9jYXRpb24gZmFpbHMgb3IgdGhlIGZpbGVzeXN0ZW0gbWV0YWRhdGEgYmVjb21lcyBjb3JydXB0ZWQuIEkga25vdyB0aGF0IGV4dDQgaXMgZ2VuZXJhbGx5IHJvYnVzdCwgYnV0IEkgbmVlZCB0byBpZGVudGlmeSBwb3NzaWJsZSB3ZWFrIHBvaW50cy4gSSBhbHNvIG5lZWQgdG8gYXNzZXNzIHRoZSBmdW5jdGlvbidzIGludGVyYWN0aW9ucyB3aXRoIHRoZSBibG9jayBncm91cCBkZXNjcmlwdG9ycywgaW5vZGUgbWV0YWRhdGEsIGFuZCB0aGUgZXh0ZW50IHRyZWUgc3RydWN0dXJlLiBUaGlzIGlzIGFsbCBhYm91dCB0aGUgZGV0YWlscyBvZiBob3cgZXh0NCBtYW5hZ2VzIGl0cyBzcGFjZSEgVGhlIGVmZmljaWVuY3kgb2YgdGhlIGFsbG9jYXRpb24gd2lsbCBiZSBzb21ldGhpbmcgdG8ga2VlcCBteSBleWUgb3V0IGZvciBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjAzMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjM0OjIyLjE0MzkyOTA5NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9leHQ0L2V4dDRfZXh0ZW50cy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0MCxcbiAgXCJMaW5lQ291bnRcIjogMThcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0MDpcXHRcXG4gMjQxOlxcdC8qXFxuIDI0MjpcXHQgKiBleHQ0X2V4dF9zdG9yZV9wYmxvY2s6XFxuIDI0MzpcXHQgKiBzdG9yZXMgYSBsYXJnZSBwaHlzaWNhbCBibG9jayBudW1iZXIgaW50byBhbiBleHRlbnQgc3RydWN0LFxcbiAyNDQ6XFx0ICogYnJlYWtpbmcgaXQgaW50byBwYXJ0c1xcbiAyNDU6XFx0ICovXFxuIDI0NjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9leHRfc3RvcmVfcGJsb2NrKHN0cnVjdCBleHQ0X2V4dGVudCAqZXgsXFxuIDI0NzpcXHRcXHRcXHRcXHRcXHRcXHQgZXh0NF9mc2Jsa190IHBiKVxcbiAyNDg6XFx0e1xcbiAyNDk6XFx0XFx0ZXgtXFx1MDAzZWVlX3N0YXJ0X2xvID0gY3B1X3RvX2xlMzIoKHVuc2lnbmVkIGxvbmcpIChwYiBcXHUwMDI2IDB4ZmZmZmZmZmYpKTtcXG4gMjUwOlxcdFxcdGV4LVxcdTAwM2VlZV9zdGFydF9oaSA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBsb25nKSAoKHBiIFxcdTAwM2VcXHUwMDNlIDMxKSBcXHUwMDNlXFx1MDAzZSAxKSBcXHUwMDI2XFxuIDI1MTpcXHRcXHRcXHRcXHRcXHQgICAgICAweGZmZmYpO1xcbiAyNTI6XFx0fVxcbiAyNTM6XFx0XFxuIDI1NDpcXHQvKlxcbiAyNTU6XFx0ICogZXh0NF9pZHhfc3RvcmVfcGJsb2NrOlxcbiAyNTY6XFx0ICogc3RvcmVzIGEgbGFyZ2UgcGh5c2ljYWwgYmxvY2sgbnVtYmVyIGludG8gYW4gaW5kZXggc3RydWN0LFxcbiAyNTc6XFx0ICogYnJlYWtpbmcgaXQgaW50byBwYXJ0c1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozNDoyMi4xNDQwMTIzNzVaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQyNzAwMjkzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEV4dGVudCBTdHJ1Y3R1cmUgYW5kIFByZXBhcmluZyBmb3IgRnVydGhlciBFeGFtaW5hdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG5ld2V4YCBzdHJ1Y3R1cmUgYW5kIG5vdGluZyBob3cgaXRzIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gg4oCTIGBlZV9ibG9ja2AsIGBlZV9sZW5gLCBgZWVfc3RhcnRfbG9gLCBhbmQgYGVlX3N0YXJ0X2hpYCBhcmUgYWxsIGV4cGxpY2l0bHkgYXNzaWduZWQuIGBlZV9ibG9ja2AgYW5kIGBlZV9sZW5gIGFyZSBnZXR0aW5nIGJ5dGUtb3JkZXIgY29udmVydGVkLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlIGBleHQ0X2V4dF9zdG9yZV9wYmxvY2tgIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBwb3B1bGF0aW5nIGBlZV9zdGFydF9sb2AgYW5kIGBlZV9zdGFydF9oaWAsIHdoaWNoIGlzIHdoZXJlIHRoZSBibG9jayBtYXBwaW5nIG1hZ2ljIHByb2JhYmx5IGhhcHBlbnMuXG5cblRoZSBzdHJ1Y3R1cmUgaXRzZWxmLCBgc3RydWN0IGV4dDRfZXh0ZW50YCwgbG9va3MgY2xlYW4g4oCTIG5vIHN1cnByaXNlcyB3aXRoIHRoZSBmaWVsZCBzaXplcyBhbmQgYWxpZ25tZW50LiA0IGJ5dGVzIGZvciBgZWVfYmxvY2tgLCAyIGZvciBgZWVfbGVuYCwgYW5vdGhlciAyIGZvciBgZWVfc3RhcnRfbG9gLCBhbmQgdGhlbiA0IG1vcmUgZm9yIGBlZV9zdGFydF9oaWAuIFRoYXQgc3VtcyB1cCB0byAxMiBieXRlcyB0b3RhbCwgd2hpY2ggZml0cyBuYXR1cmFsbHkgd2l0aCB0aG9zZSBgbGUzMmAgYW5kIGBsZTE2YCB0eXBlcywgc28gYWxpZ25tZW50IHNob3VsZCBiZSBva2F5LiBObyBwYWRkaW5nIHRoYXQgSSBjYW4gc2VlLCB3aGljaCBpcyBnb29kLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzdHJ1Y3R1cmUgaXMgYWN0dWFsbHkgKmRvaW5nKiB3aXRoaW4gdGhlIGxhcmdlciBjb250ZXh0LiBJIG5lZWQgdG8gcGl2b3QgYW5kIHNlZSBob3cgaXQgZml0cyBpbiwgYW5kIGhvdyBpdHMgZGF0YSBhcmUgdXNlZCBpbiBwcmFjdGljZSwgYW5kIEknbSBnb2luZyB0byB0dXJuIG15IGF0dGVudGlvbiB0byBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZGAgbm93IHRvIHN0YXJ0IHB1dHRpbmcgdGhlIHBpZWNlcyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MTYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozNDoyNS41NzEwMTc3OVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5OTE0MTE1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIFxcXFx7XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuaD0xMjE9c3RydWN0IGV4dDRfeGF0dHJfc2VhcmNoIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuaC0xMjgtXFxuZnMvZXh0NC94YXR0ci5oOjEyOTpzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIHtcXG5mcy9leHQ0L3hhdHRyLmgtMTMwLVxcdHN0cnVjdCBleHQ0X3hhdHRyX3NlYXJjaCBzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMDozNDoyNy42NzAxNjQ3ODFaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMxMDI1MjU5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8geGF0dHIuaCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBmcy9leHQ0L3hhdHRyLmhgIGhlYWRlciBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIGFyb3VuZCBsaW5lIDEyMC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyBpbiB0aGlzIGFyZWEuIFByb2JhYmx5IGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgc3RydWN0dXJlIG9yIG1hY3JvLCBtYXliZSByZWxhdGVkIHRvIGhvdyBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cnMpIGFyZSBzdG9yZWQgb3IgYWNjZXNzZWQgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEknbSBnb2luZyB0byBzY2FuIHRoYXQgc2VjdGlvbiBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byB0aGUgb24tZGlzayBmb3JtYXQgb3IgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRob3NlIGF0dHJpYnV0ZXMuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJlc3RpbmcgZGV0YWlscyBhcm91bmQgdGhlIGFsbG9jYXRpb24gb3IgaW5kZXhpbmcgb2YgdGhlIGRhdGEuIEknbSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCB0aGUgcmVsZXZhbnQgY29udGV4dC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpZiB0aGVyZSdzIGFueSBoaW50IG9mIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgcG90ZW50aWFsIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLCBvciBhbnkga25vd24gbGltaXRhdGlvbnMgaW4gdGhpcyBhcmVhLiBJdCdzIHRpbWUgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24gYmVoaW5kIHRoZSBzY2VuZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzM4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzQ6MjkuOTgwNDIwNjEzWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQveGF0dHIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTU6XFx0XFx0Y29uc3Qgdm9pZCAqdmFsdWU7XFxuIDExNjpcXHRcXHRzaXplX3QgdmFsdWVfbGVuO1xcbiAxMTc6XFx0XFx0aW50IG5hbWVfaW5kZXg7XFxuIDExODpcXHRcXHRpbnQgaW5faW5vZGU7XFxuIDExOTpcXHR9O1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRzdHJ1Y3QgZXh0NF94YXR0cl9zZWFyY2gge1xcbiAxMjI6XFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmZpcnN0O1xcbiAxMjM6XFx0XFx0dm9pZCAqYmFzZTtcXG4gMTI0OlxcdFxcdHZvaWQgKmVuZDtcXG4gMTI1OlxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICpoZXJlO1xcbiAxMjY6XFx0XFx0aW50IG5vdF9mb3VuZDtcXG4gMTI3OlxcdH07XFxuIDEyODpcXHRcXG4gMTI5OlxcdHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQge1xcbiAxMzA6XFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfc2VhcmNoIHM7XFxuIDEzMTpcXHRcXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XFxuIDEzMjpcXHR9O1xcbiAxMzM6XFx0XFxuIDEzNDpcXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSB7XFxuIDEzNTpcXHRcXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuIDEzNjpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7XFxuIDEzNzpcXHR9O1xcbiAxMzg6XFx0XFxuIDEzOTpcXHRleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7XFxuIDE0MDpcXHRleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7XFxuIDE0MTpcXHRleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyO1xcbiAxNDI6XFx0ZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfaHVyZF9oYW5kbGVyO1xcbiAxNDM6XFx0XFxuIDE0NDpcXHQjZGVmaW5lIEVYVDRfWEFUVFJfTkFNRV9FTkNSWVBUSU9OX0NPTlRFWFQgXFxcImNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDEwOjM0OjI5Ljk4MDQ5MDQ5M1oiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzQ2NTUwMjExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBbmFseXNpcyBvZiBFeHQ0IElubGluZSBEYXRhIENvbnZlcnNpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbm90aW5nIHRoZSBkZXNpZ25hdGVkIGluaXRpYWxpemVycyB1c2VkIGZvciBgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AgYW5kIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgLiBUaGlzIGlzIGdvb2Q7IGl0IGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgZmllbGRzIHdpdGhpbiB0aGVzZSBzdHJ1Y3RzIGFuZCB0aGVpciBuZXN0ZWQgc3RydWN0dXJlcy4gU3BlY2lmaWNhbGx5LCB0aGlzIG1lYW5zIGFsbCB0aGUgZmllbGRzIG9mIGBpc2AgYW5kIGBpYCBhcmUgY2xlYXJlZCwgYW5kIGBpcy5pbG9jYCBpcyBpbml0aWFsaXplZCBsYXRlciBieSBgZXh0NF9nZXRfaW5vZGVfbG9jYC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHByZXZlbnRpbmcgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLlxuXG5OZXh0LCBJJ20gdmVyaWZ5aW5nIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBjb3B5aW5nIG9wZXJhdGlvbnMuIEkgc2VlIHRocmVlIGBrbWFsbG9jYCBjYWxsczogb25lIGZvciBgaV9ibG9ja19idWZgLCB3aGljaCBpcyBqdXN0IHVzZWQgZm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nIGByYXdfaW5vZGUtXHUwMDNlaV9ibG9ja2A7IGFub3RoZXIgZm9yIGB4YXR0cl9idWZgLCB1c2VkIHNpbWlsYXJseSB0byBzYXZlL3Jlc3RvcmUgeGF0dHJzOyBhbmQgdGhlIGJsb2NrIGJ1ZmZlciBgYmgtXHUwMDNlYl9kYXRhYCwgd2hpY2ggZ2V0cyB6ZXJvZWQgd2l0aCBgbWVtc2V0YCBiZWZvcmUgYW55dGhpbmcgZWxzZSBpcyB3cml0dGVuIHRvIGl0LiBUaGUgYmxvY2sgYnVmZmVyIGlzIGxhdGVyIHBvcHVsYXRlZCBieSBhIGBtZW1jcHlgIG9yIGBleHQ0X2luaXRfZGlyYmxvY2tgLiBUaGVzZSBhbGxvY2F0aW9uIGFuZCBjb3B5aW5nIG9wZXJhdGlvbnMsIGluIHRoaXMgY29udGV4dCwgbG9vayBwcmV0dHkgc2FmZS5cblxuVGhlbiwgSSdtIGNoZWNraW5nIGZvciBwb3RlbnRpYWwgZGF0YSBleHBvc3VyZSB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgcmVhZHMsIGFuZCBhbnkgYm91bmRzIGlzc3Vlcy4gVGhpcyBjb2RlIGlzbid0IGRpcmVjdGx5IGNvcHlpbmcgYW55dGhpbmcgdG8gdXNlciBzcGFjZS4gSXQgZGVhbHMgd2l0aCBpbnRlcm5hbCBibG9jayBhbGxvY2F0aW9uIGFuZCBjb252ZXJ0aW5nIGlubGluZSBkYXRhIGludG8gcmVndWxhciBibG9jay9leHRlbnQgZGF0YTsgc28gdGhlIGNoYW5jZSBmb3IgYW4gaW5mb3JtYXRpb24gbGVhayBpcyBhbG1vc3QgbmlsLiBJIHNlZSBubyBldmlkZW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBlaXRoZXIuIFRoZSBibG9jayBidWZmZXIgYW5kIGFsbG9jYXRlZCBtZW1vcnkgYXJlIGV4cGxpY2l0bHkgemVyb2VkLiBMZW5ndGhzIGFuZCBib3VuZHMgYXJlIGFsc28gbm90IG1vZGlmaWVkIGluIGEgd2F5IHRoYXQgcmlza3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBieXRlcy5cblxuTm93LCBJJ20gcnVubmluZyB0aHJvdWdoIHRoZSBOZWVkc0tNU0FOIGd1aWRlbGluZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Uga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIGl0IGRvZXNuJ3QgaW52b2x2ZSBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBub3IgZG9lcyBpdCBpbml0aWFsaXplIGNvbXBsaWNhdGVkIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlcmUgYXJlIG5vIGJvdW5kcyBjaGVja3Mgb3IgbWFuaXB1bGF0aW9ucyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEuXG5cblRoZSBndWlkZWxpbmVzIHNheSB0byBzZXQgTmVlZHNLTVNBTiB0byBmYWxzZSBpZiBhbGwgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkLCBhbmQgdGhhdCdzIHByZWNpc2VseSB3aGF0J3MgaGFwcGVuaW5nIGhlcmUgd2l0aCBgPXswfWAsIGBtZW1zZXRgLCBhbmQgYGt6YWxsb2NgLiBObyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBhcmUgcHJlc2VudC4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIHJlZmFjdG9yaW5nIHRoZSBpbmxpbmUgZGF0YSBjb252ZXJzaW9uLCBhbmQgYWxsIGFsbG9jYXRlZCBoZWFwIGFuZCBzdGFjayB2YXJpYWJsZXMgYXJlIGZ1bGx5IGFuZCBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgdXNhZ2UuIFRoZSBibG9jayBidWZmZXIgaXMgZXhwbGljaXRseSB6ZXJvZWQuXG5cblNvLCB0aGUgY29uY2x1c2lvbiBpcyBjbGVhci4gVGhlcmUncyBubyBLTVNBTiBjb25jZXJuLiBOZWVkc0tNU0FOIGlzIGRlZmluaXRlbHkgYGZhbHNlYC4gVGltZSB0byBwcmVwYXJlIHRoZSByZWFzb25pbmcgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNDgsIk91dHB1dFRva2VucyI6MzA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTA6MzQ6NDMuNDQ1OTk1NjQ0WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGV4dDQgaW5saW5lIGRhdGEgY29udmVyc2lvbiBsb2dpYyBpbiBgZnMvZXh0NC9pbmxpbmUuY2AgYnkgaW50cm9kdWNpbmcgYGV4dDRfc2V0X2lubGluZV9kYXRhX2Jsb2NrYCBhbmQgYWxsb2NhdGluZyB0aGUgZGVzdGluYXRpb24gYmxvY2sgcHJpb3IgdG8gY2xlYXJpbmcgaW5saW5lIGRhdGEgaW4gdGhlIGlub2RlLlxcblxcblJldmlld2luZyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYWNyb3NzIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6XFxuMS4gQWxsIGxvY2FsIHN0YWNrIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIGlzYCwgYHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gaWAsIGBzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgYXJgLCBhbmQgYHN0cnVjdCBleHQ0X2V4dGVudCBuZXdleGApIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIGBtZW1zZXRgLCBvciBleHBsaWNpdCBtZW1iZXIgYXNzaWdubWVudHMgYmVmb3JlIHVzZS5cXG4yLiBIZWFwIGJ1ZmZlcnMgYWxsb2NhdGVkIHZpYSBga21hbGxvY2AgKGBpX2Jsb2NrX2J1ZmAsIGB4YXR0cl9idWZgLCBgYnVmYCkgYXJlIGltbWVkaWF0ZWx5IHBvcHVsYXRlZCB2aWEgYG1lbWNweWAgb3IgYGV4dDRfcmVhZF9pbmxpbmVfZGF0YWAuXFxuMy4gVGhlIGJsb2NrIGJ1ZmZlciBkYXRhIChgYmgtXFx1MDAzZWJfZGF0YWApIGlzIGV4cGxpY2l0bHkgY2xlYXJlZCB1c2luZyBgbWVtc2V0YCBiZWZvcmUgd3JpdGluZyBpbmxpbmUgZGF0YSBvciBkaXJlY3RvcnkgZW50cmllcy5cXG40LiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGJyYW5jaGluZy9sb2dpYyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgcmVzdWx0aW5nIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4sIGVycm9yIHJlY292ZXJ5IGhhbmRsaW5nLCBsb2NraW5nLCBvciBleHRlbnQgbWFuaXB1bGF0aW9uKSBmYWxsIHVuZGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleHQ0IGlubGluZSBkYXRhIGNvbnZlcnNpb24gbG9naWMgaW4gYGZzL2V4dDQvaW5saW5lLmNgIGJ5IGludHJvZHVjaW5nIGBleHQ0X3NldF9pbmxpbmVfZGF0YV9ibG9ja2AgYW5kIGFsbG9jYXRpbmcgdGhlIGRlc3RpbmF0aW9uIGJsb2NrIHByaW9yIHRvIGNsZWFyaW5nIGlubGluZSBkYXRhIGluIHRoZSBpbm9kZS5cXG5cXG5SZXZpZXdpbmcgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFjcm9zcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zOlxcbjEuIEFsbCBsb2NhbCBzdGFjayBzdHJ1Y3R1cmVzIChgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCBpc2AsIGBzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvIGlgLCBgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyYCwgYW5kIGBzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXhgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBgbWVtc2V0YCwgb3IgZXhwbGljaXQgbWVtYmVyIGFzc2lnbm1lbnRzIGJlZm9yZSB1c2UuXFxuMi4gSGVhcCBidWZmZXJzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2NgIChgaV9ibG9ja19idWZgLCBgeGF0dHJfYnVmYCwgYGJ1ZmApIGFyZSBpbW1lZGlhdGVseSBwb3B1bGF0ZWQgdmlhIGBtZW1jcHlgIG9yIGBleHQ0X3JlYWRfaW5saW5lX2RhdGFgLlxcbjMuIFRoZSBibG9jayBidWZmZXIgZGF0YSAoYGJoLVxcdTAwM2ViX2RhdGFgKSBpcyBleHBsaWNpdGx5IGNsZWFyZWQgdXNpbmcgYG1lbXNldGAgYmVmb3JlIHdyaXRpbmcgaW5saW5lIGRhdGEgb3IgZGlyZWN0b3J5IGVudHJpZXMuXFxuNC4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBicmFuY2hpbmcvbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIHJlc3VsdGluZyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuLCBlcnJvciByZWNvdmVyeSBoYW5kbGluZywgbG9ja2luZywgb3IgZXh0ZW50IG1hbmlwdWxhdGlvbikgZmFsbCB1bmRlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7p2j[1] Phase: Succeeded StartedAt: 2026-09-05 10:34:54 +0000 UTC FinishedAt: 2026-09-05 10:34:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 10:34:54 +0000 UTC FinishedAt: 2026-09-05 10:34:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2] Phase: Succeeded StartedAt: 2026-09-05 10:34:54 +0000 UTC FinishedAt: 2026-09-05 14:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 10:34:54 +0000 UTC FinishedAt: 2026-09-05 14:14:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 10:34:54 +0000 UTC FinishedAt: 2026-09-05 10:35:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 10:34:54 +0000 UTC FinishedAt: 2026-09-05 10:35:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowq7p2j/series-workflowq7p2j-convert-artifact-3930448393/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 10:35:05 +0000 UTC FinishedAt: 2026-09-05 10:50:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 10:35:05 +0000 UTC FinishedAt: 2026-09-05 10:50:49 +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:*2f82cdb9-8c5e-4b47-a90e-067733c47659,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-workflowq7p2j/series-workflowq7p2j-convert-artifact-3930448393/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": "1fd5d753-223f-422f-8de5-38b4ba67c039", "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-workflowq7p2j/series-workflowq7p2j-build-action-4007566055/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 10:35:05 +0000 UTC FinishedAt: 2026-09-05 10:50:39 +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:*2f82cdb9-8c5e-4b47-a90e-067733c47659,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-workflowq7p2j/series-workflowq7p2j-convert-artifact-3930448393/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": "1fd5d753-223f-422f-8de5-38b4ba67c039", "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-workflowq7p2j/series-workflowq7p2j-build-action-4007566055/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 10:50:49 +0000 UTC FinishedAt: 2026-09-05 10:50:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 10:50:49 +0000 UTC FinishedAt: 2026-09-05 10:50:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 10:50:49 +0000 UTC FinishedAt: 2026-09-05 10:50:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 10:50:49 +0000 UTC FinishedAt: 2026-09-05 10:50:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowq7p2j/series-workflowq7p2j-convert-artifact-229144092/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 10:50:59 +0000 UTC FinishedAt: 2026-09-05 10:53:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 10:50:59 +0000 UTC FinishedAt: 2026-09-05 10:52:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1fd5d753-223f-422f-8de5-38b4ba67c039,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-workflowq7p2j/series-workflowq7p2j-build-action-4007566055/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-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 10:53:04 +0000 UTC FinishedAt: 2026-09-05 10:53:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 10:53:04 +0000 UTC FinishedAt: 2026-09-05 10:53:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 10:53:04 +0000 UTC FinishedAt: 2026-09-05 11:09:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 10:53:04 +0000 UTC FinishedAt: 2026-09-05 11:09:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2f82cdb9-8c5e-4b47-a90e-067733c47659,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-workflowq7p2j/series-workflowq7p2j-convert-artifact-229144092/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": "6691e5a0-72ee-4bb7-aa2c-e6a8ceef71b4", "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-workflowq7p2j/series-workflowq7p2j-build-action-2107513208/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 10:53:04 +0000 UTC FinishedAt: 2026-09-05 11:09:13 +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:*2f82cdb9-8c5e-4b47-a90e-067733c47659,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-workflowq7p2j/series-workflowq7p2j-convert-artifact-229144092/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": "6691e5a0-72ee-4bb7-aa2c-e6a8ceef71b4", "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-workflowq7p2j/series-workflowq7p2j-build-action-2107513208/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 11:09:23 +0000 UTC FinishedAt: 2026-09-05 11:09:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 11:09:23 +0000 UTC FinishedAt: 2026-09-05 11:09:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 11:09:23 +0000 UTC FinishedAt: 2026-09-05 11:11:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 11:09:23 +0000 UTC FinishedAt: 2026-09-05 11:11:17 +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:*6691e5a0-72ee-4bb7-aa2c-e6a8ceef71b4,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-workflowq7p2j/series-workflowq7p2j-build-action-2107513208/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-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 11:11:27 +0000 UTC FinishedAt: 2026-09-05 14:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 11:11:27 +0000 UTC FinishedAt: 2026-09-05 14:14:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"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:*1fd5d753-223f-422f-8de5-38b4ba67c039,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6691e5a0-72ee-4bb7-aa2c-e6a8ceef71b4,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-workflowq7p2j/series-workflowq7p2j-build-action-4007566055/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-workflowq7p2j/series-workflowq7p2j-build-action-2107513208/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 11:11:27 +0000 UTC FinishedAt: 2026-09-05 11:11:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 11:11:27 +0000 UTC FinishedAt: 2026-09-05 11:11:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"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-workflowq7p2j/series-workflowq7p2j-convert-artifact-3360720101/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 11:11:27 +0000 UTC FinishedAt: 2026-09-05 11:11:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 11:11:27 +0000 UTC FinishedAt: 2026-09-05 11:11:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 11:11:27 +0000 UTC FinishedAt: 2026-09-05 11:11:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 11:11:37 +0000 UTC FinishedAt: 2026-09-05 14:14:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq7p2j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_set_inline_data_block","ext4_convert_inline_data_nolock","ext4_convert_inline_data","ext4_try_add_inline_entry"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"41e6f03658adfa9df68642750b53a046f1abdea9","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"67ae394f-0af5-4960-a6b4-a3d39b5f36a5","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 11:11:37 +0000 UTC FinishedAt: 2026-09-05 14:14:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1fd5d753-223f-422f-8de5-38b4ba67c039,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6691e5a0-72ee-4bb7-aa2c-e6a8ceef71b4,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-workflowq7p2j/series-workflowq7p2j-build-action-4007566055/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-workflowq7p2j/series-workflowq7p2j-build-action-2107513208/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-workflowq7p2j/series-workflowq7p2j-convert-artifact-3360720101/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,}