Name: series-workflowmn6n2 Phase: Succeeded StartedAt: 2026-08-14 06:52:43 +0000 UTC FinishedAt: 2026-08-14 11:16:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[0] Phase: Succeeded StartedAt: 2026-08-14 06:52:43 +0000 UTC FinishedAt: 2026-08-14 07:36:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 06:52:43 +0000 UTC FinishedAt: 2026-08-14 07:36:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6057f06ef7afa9893ed33603f7917fa39d237b5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6057f06ef7afa9893ed33603f7917fa39d237b5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "cc308655-7e0a-49bd-bd0d-42c76ef926e8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_connect", "tcp_conn_request", "tcp_make_synack", "tcp_v4_syn_recv_sock" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfY29ubmVjdCYjMzQ7LAogICAgJiMzNDt0Y3BfY29ubl9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O3RjcF9tYWtlX3N5bmFjayYjMzQ7LAogICAgJiMzNDt0Y3BfdjRfc3luX3JlY3Zfc29jayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBUQ1AgTVNTIGJ5IGludHJvZHVjaW5nIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoKWAgYW5kIGBpcDZfZHN0X210dV9jb25maWd1cmVkKClgLiBUaGVzZSBmdW5jdGlvbnMgcmVhZCBleGlzdGluZywgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gcm91dGluZyBhbmQgZGV2aWNlIHN0cnVjdHVyZXMgKGBkc3RfZW50cnlgLCBgcnQ2X2luZm9gLCBgZmliNl9pbmZvYCwgYG5ldF9kZXZpY2VgLCBgaW5ldDZfZGV2YCkgdG8gZGV0ZXJtaW5lIHRoZSBjb25maWd1cmVkIE1UVSwgaWdub3JpbmcgSUNNUC1sZWFybmVkIHBhdGggTVRVLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBuZXcgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBUQ1AgTVNTIGluIElQdjQgYW5kIElQdjYuIEl0IGludHJvZHVjZXMgYGlwX2RzdF9tdHVfY29uZmlndXJlZGAgYW5kIGBpcDZfZHN0X210dV9jb25maWd1cmVkYCB0byBpZ25vcmUgSUNNUC1sZWFybmVkIHBhdGggTVRVIGFuZCBpbnN0ZWFkIHVzZSB0aGUgY29uZmlndXJlZCByb3V0ZSBvciBkZXZpY2UgTVRVLiBUaGlzIGFmZmVjdHMgdGhlIFRDUCBNU1MgYWR2ZXJ0aXNlZCBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cCAoU1lOL1NZTi1BQ0spLiBUaGUgY2hhbmdlcyBhcmUgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXIgaG93IE1TUyBpcyBkZXRlcm1pbmVkLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzhkNjc0Yjk4Yzg1OWM3ZjNhNjJjMWNjNGY3YmU5ODMwZGM4NTMxOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA3OjMzOjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oXG5pbmRleCA3ZjJmZTFhODQwMWIxLi5hOGY1N2I0ZjRhYTIzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXAuaFxuQEAgLTUwNiw2ICYjNDM7NTA2LDMxIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbiYjNDM7LyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxuJiM0MzsgKlxuJiM0MzsgKiBVbmxpa2UgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgZGVsaWJlcmF0ZWx5IGlnbm9yZXMgdGhlXG4mIzQzOyAqIElDTVAtbGVhcm5lZCBwYXRoIE1UVSAocnQtXHUwMDNlcnRfcG10dSkuICBUaGUgYWR2ZXJ0aXNlZCBNU1MgYm91bmRzIHdoYXQgdGhlXG4mIzQzOyAqIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZSBjYXBhYmlsaXR5ICh0aGUgZGV2aWNlIG9yXG4mIzQzOyAqIHJvdXRlLWNvbmZpZ3VyZWQgTVRVKSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZClcbiYjNDM7ICogZGlyZWN0aW9uLCB3aGljaCBtYXkgbm90IGFwcGx5IHRvIHRoZSBwZWVyLVx1MDAzZXVzIHBhdGggYW5kIG91dGxpdmVzIHRoZSBmbmhlXG4mIzQzOyAqIGZvciB0aGUgd2hvbGUgY29ubmVjdGlvbi4gIFNlZSBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmVcbiYjNDM7ICogdGNwX2FkdmVydGlzZV9tc3MoKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbXR1LCByZXM7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRtdHUgPSBkc3RfbWV0cmljX3Jhdyhkc3QsIFJUQVhfTVRVKTtcbiYjNDM7XHRpZiAoIW10dSlcbiYjNDM7XHRcdG10dSA9IFJFQURfT05DRShkc3RfZGV2X3JjdShkc3QpLVx1MDAzZW10dSk7XG4mIzQzO1x0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQX01BWF9NVFUpO1xuJiM0MztcdHJlcyA9IG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggMDlmZmUwZjEzY2U3NS4uYWMxYWNjMGI3NDM2OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTM4NSw2ICYjNDM7Mzg1LDQzIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0XG4gXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuIH1cbiBcbiYjNDM7LyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxuJiM0MzsgKlxuJiM0MzsgKiBVbmxpa2UgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGlnbm9yZXMgYW55IElDTVB2Ni1sZWFybmVkIHBhdGhcbiYjNDM7ICogTVRVICh3aGljaCBpcyBrZXB0IG9uIHRoZSBSVEZfQ0FDSEUgZXhjZXB0aW9uIHJvdXRlKSBhbmQgcmV0dXJucyB0aGUgTVRVIG9mXG4mIzQzOyAqIHRoZSB1bmRlcmx5aW5nIHJvdXRlIChmaWI2X3BtdHUpIG9yIHRoZSBlZ3Jlc3MgZGV2aWNlLiAgVGhlIGFkdmVydGlzZWQgTVNTXG4mIzQzOyAqIGJvdW5kcyB3aGF0IHRoZSBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmVcbiYjNDM7ICogY2FwYWJpbGl0eSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZCkgZGlyZWN0aW9uLiAgU2VlXG4mIzQzOyAqIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZSB0Y3BfYWR2ZXJ0aXNlX21zcygpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZpYjZfaW5mbyAqZnJvbTtcbiYjNDM7XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xuJiM0MztcdHVuc2lnbmVkIGludCBtdHUgPSAwO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0LyogSVB2NiBrZWVwcyB0aGUgbGVhcm5lZCBQTVRVIGFuZCB0aGUgY29uZmlndXJlZCBNVFUgaW4gdGhlIHNhbWVcbiYjNDM7XHQgKiBSVEFYX01UVSBzbG90OiB0aGUgbGVhcm5lZCB2YWx1ZSBzaXRzIG9uIHRoaXMgKHBvc3NpYmx5IFJURl9DQUNIRSlcbiYjNDM7XHQgKiBkc3QsIHRoZSBjb25maWd1cmVkIG9uZSBvbiB0aGUgdW5kZXJseWluZyByb3V0ZS4gIFJlYWNoIHRoZSBsYXR0ZXJcbiYjNDM7XHQgKiB2aWEgLVx1MDAzZWZyb20gKGZpYjZfcG10dSksIHBvcHVsYXRlZCBieSBpcDZfcm91dGVfaW5mb19jcmVhdGUoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmcm9tID0gcmN1X2RlcmVmZXJlbmNlKHJ0LVx1MDAzZWZyb20pO1xuJiM0MztcdGlmIChmcm9tKVxuJiM0MztcdFx0bXR1ID0gZnJvbS1cdTAwM2VmaWI2X3BtdHU7XG4mIzQzO1x0aWYgKCFtdHUpIHtcbiYjNDM7XHRcdG10dSA9IElQVjZfTUlOX01UVTtcbiYjNDM7XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXZfcmN1KGRzdCkpO1xuJiM0MztcdFx0aWYgKGlkZXYpXG4mIzQzO1x0XHRcdG10dSA9IG1heF90KHVuc2lnbmVkIGludCwgbXR1LCBSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYubXR1NikpO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcbiYjNDM7XHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuJiM0Mzt9XG4mIzQzO1xuIHUzMiBpcDZfbXR1X2Zyb21fZmliNihjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcyxcbiBcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcbiBcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcik7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmNcbmluZGV4IGZkNjg4ZTFmODc5ZjUuLjQ2YWE5OGM5MjE4MzMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9yb3V0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9yb3V0ZS5jXG5AQCAtMTMzNCw4ICYjNDM7MTMzNCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRuZXQgPSBkc3RfZGV2X25ldF9yY3UoZHN0KTtcbi1cdGFkdm1zcyA9IG1heF90KHVuc2lnbmVkIGludCwgaXB2NF9tdHUoZHN0KSAtIGhlYWRlcl9zaXplLFxuLVx0XHRcdFx0ICAgbmV0LVx1MDAzZWlwdjQuaXBfcnRfbWluX2Fkdm1zcyk7XG4mIzQzO1x0YWR2bXNzID0gbWF4X3QodW5zaWduZWQgaW50LCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KSAtIGhlYWRlcl9zaXplLFxuJiM0MztcdFx0ICAgICAgIG5ldC1cdTAwM2VpcHY0LmlwX3J0X21pbl9hZHZtc3MpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gbWluKGFkdm1zcywgSVBWNF9NQVhfUE1UVSAtIGhlYWRlcl9zaXplKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggNTk2OGNlNWFkMTUwOC4uZTIwNTZiZDBkZjNjNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC0zMjYxLDcgJiM0MzszMjYxLDcgQEAgdm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbXR1ID0gZHN0Nl9tdHUoZHN0KTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbXR1ID0gaXA2X2RzdF9tdHVfY29uZmlndXJlZChkc3QpO1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFxuIFx0bXR1IC09IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7dGNwX2Nvbm5fcmVxdWVzdCYjMzQ7LAogICAgJiMzNDt0Y3BfbWFrZV9zeW5hY2smIzM0OywKICAgICYjMzQ7dGNwX3Y0X3N5bl9yZWN2X3NvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIFRDUCBNU1MgaW4gSVB2NCBhbmQgSVB2Ni4gSXQgaW50cm9kdWNlcyBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgIHRvIGlnbm9yZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgYW5kIGluc3RlYWQgdXNlIHRoZSBjb25maWd1cmVkIHJvdXRlIG9yIGRldmljZSBNVFUuIFRoaXMgYWZmZWN0cyB0aGUgVENQIE1TUyBhZHZlcnRpc2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwIChTWU4vU1lOLUFDSykuIFRoZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIGZ1bmN0aW9uYWxseSBhbHRlciBob3cgTVNTIGlzIGRldGVybWluZWQsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjOGQ2NzRiOThjODU5YzdmM2E2MmMxY2M0ZjdiZTk4MzBkYzg1MzE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMDc6MzM6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcC5oIGIvaW5jbHVkZS9uZXQvaXAuaAppbmRleCA3ZjJmZTFhODQwMWIxLi5hOGY1N2I0ZjRhYTIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwLmgKQEAgLTUwNiw2ICYjNDM7NTA2LDMxIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCiAJcmV0dXJuIHJlczsKIH0KIAomIzQzOy8qIENvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIGEgcm91dGUsIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUy4KJiM0MzsgKgomIzQzOyAqIFVubGlrZSBpcF9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBkZWxpYmVyYXRlbHkgaWdub3JlcyB0aGUKJiM0MzsgKiBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgKHJ0LSZndDtydF9wbXR1KS4gIFRoZSBhZHZlcnRpc2VkIE1TUyBib3VuZHMgd2hhdCB0aGUKJiM0MzsgKiBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmUgY2FwYWJpbGl0eSAodGhlIGRldmljZSBvcgomIzQzOyAqIHJvdXRlLWNvbmZpZ3VyZWQgTVRVKSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZCkKJiM0MzsgKiBkaXJlY3Rpb24sIHdoaWNoIG1heSBub3QgYXBwbHkgdG8gdGhlIHBlZXItJmd0O3VzIHBhdGggYW5kIG91dGxpdmVzIHRoZSBmbmhlCiYjNDM7ICogZm9yIHRoZSB3aG9sZSBjb25uZWN0aW9uLiAgU2VlIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZQomIzQzOyAqIHRjcF9hZHZlcnRpc2VfbXNzKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBtdHUsIHJlczsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwltdHUgPSBkc3RfbWV0cmljX3Jhdyhkc3QsIFJUQVhfTVRVKTsKJiM0MzsJaWYgKCFtdHUpCiYjNDM7CQltdHUgPSBSRUFEX09OQ0UoZHN0X2Rldl9yY3UoZHN0KS0mZ3Q7bXR1KTsKJiM0MzsJbXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQX01BWF9NVFUpOwomIzQzOwlyZXMgPSBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtJmd0O2x3dHN0YXRlLCBtdHUpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKaW5kZXggMDlmZmUwZjEzY2U3NS4uYWMxYWNjMGI3NDM2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKQEAgLTM4NSw2ICYjNDM7Mzg1LDQzIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0CiAJcmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC0mZ3Q7bHd0c3RhdGUsIG10dSk7CiB9CiAKJiM0MzsvKiBDb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiBhIHJvdXRlLCBmb3IgYWR2ZXJ0aXNpbmcgdGhlIFRDUCBNU1MuCiYjNDM7ICoKJiM0MzsgKiBVbmxpa2UgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGlnbm9yZXMgYW55IElDTVB2Ni1sZWFybmVkIHBhdGgKJiM0MzsgKiBNVFUgKHdoaWNoIGlzIGtlcHQgb24gdGhlIFJURl9DQUNIRSBleGNlcHRpb24gcm91dGUpIGFuZCByZXR1cm5zIHRoZSBNVFUgb2YKJiM0MzsgKiB0aGUgdW5kZXJseWluZyByb3V0ZSAoZmliNl9wbXR1KSBvciB0aGUgZWdyZXNzIGRldmljZS4gIFRoZSBhZHZlcnRpc2VkIE1TUwomIzQzOyAqIGJvdW5kcyB3aGF0IHRoZSBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmUKJiM0MzsgKiBjYXBhYmlsaXR5LCBub3QgYSBwYXRoIE1UVSBsZWFybmVkIG9uIHRoZSByZXZlcnNlIChzZW5kKSBkaXJlY3Rpb24uICBTZWUKJiM0MzsgKiBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmUgdGNwX2FkdmVydGlzZV9tc3MoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQgPSBkc3RfcnQ2X2luZm8oZHN0KTsKJiM0MzsJY29uc3Qgc3RydWN0IGZpYjZfaW5mbyAqZnJvbTsKJiM0MzsJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKJiM0MzsJdW5zaWduZWQgaW50IG10dSA9IDA7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJLyogSVB2NiBrZWVwcyB0aGUgbGVhcm5lZCBQTVRVIGFuZCB0aGUgY29uZmlndXJlZCBNVFUgaW4gdGhlIHNhbWUKJiM0MzsJICogUlRBWF9NVFUgc2xvdDogdGhlIGxlYXJuZWQgdmFsdWUgc2l0cyBvbiB0aGlzIChwb3NzaWJseSBSVEZfQ0FDSEUpCiYjNDM7CSAqIGRzdCwgdGhlIGNvbmZpZ3VyZWQgb25lIG9uIHRoZSB1bmRlcmx5aW5nIHJvdXRlLiAgUmVhY2ggdGhlIGxhdHRlcgomIzQzOwkgKiB2aWEgLSZndDtmcm9tIChmaWI2X3BtdHUpLCBwb3B1bGF0ZWQgYnkgaXA2X3JvdXRlX2luZm9fY3JlYXRlKCkuCiYjNDM7CSAqLwomIzQzOwlmcm9tID0gcmN1X2RlcmVmZXJlbmNlKHJ0LSZndDtmcm9tKTsKJiM0MzsJaWYgKGZyb20pCiYjNDM7CQltdHUgPSBmcm9tLSZndDtmaWI2X3BtdHU7CiYjNDM7CWlmICghbXR1KSB7CiYjNDM7CQltdHUgPSBJUFY2X01JTl9NVFU7CiYjNDM7CQlpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2X3JjdShkc3QpKTsKJiM0MzsJCWlmIChpZGV2KQomIzQzOwkJCW10dSA9IG1heF90KHVuc2lnbmVkIGludCwgbXR1LCBSRUFEX09OQ0UoaWRldi0mZ3Q7Y25mLm10dTYpKTsKJiM0MzsJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJbXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTsKJiM0MzsJcmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC0mZ3Q7bHd0c3RhdGUsIG10dSk7CiYjNDM7fQomIzQzOwogdTMyIGlwNl9tdHVfZnJvbV9maWI2KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLAogCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IGZkNjg4ZTFmODc5ZjUuLjQ2YWE5OGM5MjE4MzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMTMzNCw4ICYjNDM7MTMzNCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbmV0ID0gZHN0X2Rldl9uZXRfcmN1KGRzdCk7Ci0JYWR2bXNzID0gbWF4X3QodW5zaWduZWQgaW50LCBpcHY0X210dShkc3QpIC0gaGVhZGVyX3NpemUsCi0JCQkJICAgbmV0LSZndDtpcHY0LmlwX3J0X21pbl9hZHZtc3MpOwomIzQzOwlhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwX2RzdF9tdHVfY29uZmlndXJlZChkc3QpIC0gaGVhZGVyX3NpemUsCiYjNDM7CQkgICAgICAgbmV0LSZndDtpcHY0LmlwX3J0X21pbl9hZHZtc3MpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIG1pbihhZHZtc3MsIElQVjRfTUFYX1BNVFUgLSBoZWFkZXJfc2l6ZSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCA1OTY4Y2U1YWQxNTA4Li5lMjA1NmJkMGRmM2M0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTMyNjEsNyAmIzQzOzMyNjEsNyBAQCB2b2lkIGlwNl9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIHsKLQl1bnNpZ25lZCBpbnQgbXR1ID0gZHN0Nl9tdHUoZHN0KTsKJiM0MzsJdW5zaWduZWQgaW50IG10dSA9IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KTsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAKIAltdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSAmIzQzOyBzaXplb2Yoc3RydWN0IHRjcGhkcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NzEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBOZXR3b3JraW5nIFN0YWNrIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgYSBjcnVjaWFsIGNoYW5nZSB0byBob3cgd2UgaGFuZGxlIE1heGltdW0gU2VnbWVudCBTaXplIChNU1MpIGFkdmVydGlzZW1lbnRzIGluIHRoZSBUQ1Agc3RhY2suIEl0IHNlZW1zIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIHNwZWNpZmljYWxseSBJUHY0IGFuZCBJUHY2IHJvdXRpbmcsIGlzIGJlaW5nIHVwZGF0ZWQuIFRoZSBrZXkgaXMgaW4gdGhlc2UgbW9kaWZpY2F0aW9ucyB0byBgaXB2NF9kZWZhdWx0X2Fkdm1zc2AgYW5kIGBpcDZfZGVmYXVsdF9hZHZtc3NgLiBUaGV5JiMzOTtyZSBub3cgdXNpbmcgdGhlc2UgbmV3bHkgZGVmaW5lZCBmdW5jdGlvbnMsIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAsIGluc3RlYWQgb2YgdGhlIG9sZCBkaXJlY3QgTVRVIGxvb2t1cHMgKGBpcHY0X210dWAgYW5kIGBkc3Q2X210dWApLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgaW1wcm92ZW1lbnQgaW4gdGhlIGxvbmcgcnVuLgoKVGhpcyBpcyBpbW1lZGlhdGVseSBmbGFnZ2VkIGFzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBBbnkgY2hhbmdlIGxpa2UgdGhpcywgZXNwZWNpYWxseSB3aXRoaW4gdGhlIElQdjQgYW5kIElQdjYgcm91dGluZyBjb3JlLCBjYW4gb3BlbiB1cCBhIGxvdCBvZiBpbnRlcmVzdGluZyBhdHRhY2sgdmVjdG9ycy4gTm93LCB0aGUgbWFpbiBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgaXB2NF9kZWZhdWx0X2Fkdm1zc2AgYW5kIGBpcDZfZGVmYXVsdF9hZHZtc3NgIChib3RoIHN0YXRpYywgYXMgSSByZWNhbGwpLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGV4YWN0bHkgd2hlcmUgdGhvc2UgYXJlIGJlaW5nIHV0aWxpemVkLiBJIHN1c3BlY3QgdGhleSYjMzk7cmUgYmVpbmcgYXNzaWduZWQgdG8gYGRzdF9vcHMtJmd0O2RlZmF1bHRfYWR2bXNzYCBvciBzb21ldGhpbmcgc2ltaWxhciwgbGlrZWx5IGFzIHBhcnQgb2YgdGhlIGRlc3RpbmF0aW9uIG9wdGlvbiBmb3Igcm91dGluZy4gVGhlIG5leHQgc3RlcCBpcyBhIGNvZGUgc2VhcmNoOyBJJiMzOTtsbCBsb29rIGZvciBkaXJlY3QgcmVmZXJlbmNlcyB0byBgaXB2NF9kZWZhdWx0X2Fkdm1zc2AgYW5kIGBpcDZfZGVmYXVsdF9hZHZtc3NgIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyB1c2luZyB0aGVzZSBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIHRoZSBNU1MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2NF9kZWZhdWx0X2Fkdm1zcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9yb3V0ZS5jPTEyOT1zdHJ1Y3QgZHN0X2VudHJ5XHQqaXB2NF9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgY29va2llKTtcbm5ldC9pcHY0L3JvdXRlLmM6MTMwOnN0YXRpYyB1bnNpZ25lZCBpbnRcdCBpcHY0X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7XG5uZXQvaXB2NC9yb3V0ZS5jLTEzMS1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTU0PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcHY0X2RzdF9vcHMgPSB7XG4tLVxubmV0L2lwdjQvcm91dGUuYy0xNTYtXHQuY2hlY2sgPVx0XHRpcHY0X2RzdF9jaGVjayxcbm5ldC9pcHY0L3JvdXRlLmM6MTU3Olx0LmRlZmF1bHRfYWR2bXNzID1cdGlwdjRfZGVmYXVsdF9hZHZtc3MsXG5uZXQvaXB2NC9yb3V0ZS5jLTE1OC1cdC5tdHUgPVx0XHRcdGlwdjRfbXR1LFxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTMyMD1zdGF0aWMgdm9pZCBzZXRfY2xhc3NfdGFnKHN0cnVjdCBydGFibGUgKnJ0LCB1MzIgdGFnKVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTMyOC1cbm5ldC9pcHY0L3JvdXRlLmM6MTMyOTpzdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxubmV0L2lwdjQvcm91dGUuYy0xMzMwLXtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI4ODE9c3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwdjRfZHN0X2JsYWNraG9sZV9vcHMgPSB7XG5uZXQvaXB2NC9yb3V0ZS5jLTI4ODItXHQuZmFtaWx5XHRcdFx0PSBBRl9JTkVULFxubmV0L2lwdjQvcm91dGUuYzoyODgzOlx0LmRlZmF1bHRfYWR2bXNzXHRcdD0gaXB2NF9kZWZhdWx0X2Fkdm1zcyxcbm5ldC9pcHY0L3JvdXRlLmMtMjg4NC1cdC5uZWlnaF9sb29rdXBcdFx0PSBpcHY0X25laWdoX2xvb2t1cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDkxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCBhbmQgY29uc2lkZXJpbmcgdGhlIHByb21wdCYjMzk7cyBwcm92aWRlZCAmIzM0O3Rob3VnaHQmIzM0OzoKCioqRGVsdmluZyBpbnRvIElQdjYgTVNTIEFkanVzdG1lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYGlwNl9kZWZhdWx0X2Fkdm1zc2AuIFJpZ2h0LiBTbywgSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBhcyBhIGNydWNpYWwgcGFyYW1ldGVyIHJlbGF0ZWQgdG8gSVB2NiBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSBhbmQgUGF0aCBNVFUgRGlzY292ZXJ5IChQTVRVRCksIHNwZWNpZmljYWxseSBhdCB0aGUgc3lzdGVtJiMzOTtzIGRlZmF1bHQgbGV2ZWwuIE15IG1pbmQgcmFjZXMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoaXMgdmFyaWFibGUgaW1wYWN0cyB0aGUgaW5pdGlhbCBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3MuIEVzc2VudGlhbGx5LCBpdCBkZWZpbmVzIHRoZSAqYWR2ZXJ0aXNlZCogTVNTIHZhbHVlIHRoYXQgdGhlIGxvY2FsIHN5c3RlbSB3aWxsIHN1Z2dlc3QgdG8gYSByZW1vdGUgaG9zdCBkdXJpbmcgdGhlIFRDUCBoYW5kc2hha2UsIHdoaWNoIHRoZW4gYWxsb3dzIGVhY2ggZW5kIHRvIG5lZ290aWF0ZSBob3cgbGFyZ2Ugb2YgYSBwYWNrZXQgc2l6ZSB0aGV5IGNhbiBib3RoIHVzZS4KCknigJltIGFscmVhZHkgY29uc2lkZXJpbmcgdGhlIHNjZW5hcmlvcyB3aGVyZSB0aGlzIHNldHRpbmcgaXMgaW1wb3J0YW50LiBJdCYjMzk7cyBvZnRlbiB0aGUgZmlyc3QgaHVyZGxlIHdoZW4gZGVhbGluZyB3aXRoIElQdjYgZnJhZ21lbnRhdGlvbiBhbmQgUGF0aCBNVFUgaXNzdWVzLiBJZiB0aGUgZGVmYXVsdCBpcyBzZXQgdG9vIGhpZ2gsIHdlJiMzOTtsbCBzZWUgYSBsb3Qgb2YgZnJhZ21lbnRhdGlvbiwgd2hpY2ggd2lsbCBpbXBhY3QgcGVyZm9ybWFuY2UuIElmIGl0JiMzOTtzIHRvbyBsb3csIHdlIG1pZ2h0IGJlIHVuZGVydXRpbGl6aW5nIG5ldHdvcmsgYmFuZHdpZHRoLiBBIHRob3VnaHRmdWwgdmFsdWUgZW5zdXJlcyBzbW9vdGggY29tbXVuaWNhdGlvbiB3aXRob3V0IGludHJvZHVjaW5nIHRvbyBtdWNoIG92ZXJoZWFkLgoKSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBiZSB1c2luZyB0aGlzIHBhcmFtZXRlciBvZnRlbiBkdXJpbmcgbmV0d29yayBvcHRpbWl6YXRpb25zLiBTbywgbGV04oCZcyBjb25zaWRlcjogd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvbiBkaWZmZXJlbnQgbmV0d29yayBjb25maWd1cmF0aW9ucywgY29uc2lkZXJpbmcgY29tbW9uIE1UVSBzaXplcyBsaWtlIDE1MDAgYnl0ZXMgZm9yIHN0YW5kYXJkIEV0aGVybmV0IHZlcnN1cyBsYXJnZXIgTVRVcyBpbiBlbnZpcm9ubWVudHMgbGlrZSBqdW1ibyBmcmFtZXMgb3IgVlBOIHR1bm5lbHM/IEl0JiMzOTtzIGFsbCBhYm91dCBmaW5kaW5nIHRoZSBzd2VldCBzcG90LCBzdHJpa2luZyB0aGF0IGNyaXRpY2FsIGJhbGFuY2UgYmV0d2VlbiBlZmZpY2llbmN5IGFuZCByZWxpYWJpbGl0eSwgdG8gYWxsb3cgc2VhbWxlc3MgdHJhbnNmZXIuIFRoZSBzeXN0ZW0gY2FuIG9mdGVuIHVzZSBJQ01QIG1lc3NhZ2VzIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgaXNzdWVzLCBidXQgYSB3ZWxsLXR1bmVkIHZhbHVlIGhlbHBzIHRvIG1pdGlnYXRlIHBvdGVudGlhbCBpc3N1ZXMgYmVmb3JlIHRoZXkgYXJpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X2RlZmF1bHRfYWR2bXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmM9ODY9c3RydWN0IGRzdF9lbnRyeVx0KmlwNl9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgY29va2llKTtcbm5ldC9pcHY2L3JvdXRlLmM6ODc6c3RhdGljIHVuc2lnbmVkIGludFx0IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpO1xubmV0L2lwdjYvcm91dGUuYy04OC1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MjQ5PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X29wc190ZW1wbGF0ZSA9IHtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTI1My1cdC5jaGVja1x0XHRcdD1cdGlwNl9kc3RfY2hlY2ssXG5uZXQvaXB2Ni9yb3V0ZS5jOjI1NDpcdC5kZWZhdWx0X2Fkdm1zc1x0XHQ9XHRpcDZfZGVmYXVsdF9hZHZtc3MsXG5uZXQvaXB2Ni9yb3V0ZS5jLTI1NS1cdC5tdHVcdFx0XHQ9XHRpcDZfbXR1LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MjY4PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X2JsYWNraG9sZV9vcHMgPSB7XG5uZXQvaXB2Ni9yb3V0ZS5jLTI2OS1cdC5mYW1pbHlcdFx0XHQ9IEFGX0lORVQ2LFxubmV0L2lwdjYvcm91dGUuYzoyNzA6XHQuZGVmYXVsdF9hZHZtc3NcdFx0PSBpcDZfZGVmYXVsdF9hZHZtc3MsXG5uZXQvaXB2Ni9yb3V0ZS5jLTI3MS1cdC5uZWlnaF9sb29rdXBcdFx0PSBpcDZfZHN0X25laWdoX2xvb2t1cCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTMyNTY9dm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzI2MS1cbm5ldC9pcHY2L3JvdXRlLmM6MzI2MjpzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyNjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMzEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgYGRlZmF1bHRfYWR2bXNzYCoqCgpPa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXMsIHdoZXJlIGlzIHRoaXMgYGRlZmF1bHRfYWR2bXNzYCBmdW5jdGlvbiBiZWluZyBjYWxsZWQ/IEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaG93IGl0IGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSBrbm93IHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgc2V0dGluZywgcHJvYmFibHkgcmVsYXRlZCB0byBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSBpbiB0aGUgY29udGV4dCBvZiBhZHZhbmNlZCBNU1MgY29uZmlndXJhdGlvbiwgb3IgaXQgY291bGQgYmUgc29tZSBkZWZhdWx0IG9yIGZhbGxiYWNrIHZhbHVlLgoKTXkgaW5pdGlhbCBsaW5lIG9mIGF0dGFjayBpcyBnb2luZyB0byBiZSBhIGNvZGUgc2VhcmNoLiBJJiMzOTtsbCBuZWVkIHRvIHBpbnBvaW50IGFsbCBpbnN0YW5jZXMgb2YgdGhlIGZ1bmN0aW9uIG5hbWUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGdsb2JhbCBzZWFyY2ggb2YgdGhlIGNvZGViYXNlLCB1c2luZyBhIHRvb2wgbGlrZSBncmVwIG9yIHJpcGdyZXAuIEkmIzM5O2xsIGxvb2sgZm9yIGRpcmVjdCBjYWxscyB0byBgZGVmYXVsdF9hZHZtc3NgIGluIHRoZSBjb2RlLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzeW1ib2xpYyBsaW5rcywgYWxpYXNlcyBvciBhbnkgb3RoZXIgc2ltaWxhciBmb3JtcyB0aGF0IGFyZSByZWZlcnJpbmcgdG8gaXQgYXMgd2VsbC4KCkJhc2VkIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBJJiMzOTtsbCBzdGFydCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIHBvc3NpYmxlIGNhbGwgcGF0aHMuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZCBpcyBrZXkuIEkmIzM5O20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBvZiBlYWNoIGNhbGwgdG8gc2VlIGhvdyB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgdXNlZC4gSXMgaXQgcGFzc2VkIHRvIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUsIHVzZWQgaW4gYW4gYXJpdGhtZXRpYyBjYWxjdWxhdGlvbj8gVGhpcyB3aWxsIG5hcnJvdyBkb3duIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIHByb2dyYW0uCgpJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGRpY3RhdGUgd2hlbiBgZGVmYXVsdF9hZHZtc3NgIGlzIHVzZWQuIERvZXMgaXQgc2VydmUgYXMgYSBkZWZhdWx0IHZhbHVlIGlmIGFub3RoZXIgY29uZmlndXJhdGlvbiBzZXR0aW5nIGlzbiYjMzk7dCBleHBsaWNpdGx5IHNldD8gT3IgbWF5YmUgaXQmIzM5O3MgdXNlZCBiYXNlZCBvbiBuZXR3b3JrIGNvbmRpdGlvbnMgb3IgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiBJIHdhbnQgdG8ga25vdyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdHMgcmVzdWx0IGlzIGFwcGxpZWQuCgpGaW5hbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoYXQgYGRlZmF1bHRfYWR2bXNzYCBoYXMgc29tZSBmb3JtIG9mIGNvbmZpZ3VyYWJsZSBpbnRlcmZhY2UuIEkmIzM5O20gY3VyaW91cyB3aGF0IGtpbmQgb2YgZW52aXJvbm1lbnQgb3Igc2V0dXAgc2V0dGluZ3MgaXQgbWlnaHQgcmVmZXJlbmNlLiBEb2VzIGl0IGdldCBvdmVycmlkZGVuIGJ5IHVzZXIgY29uZmlndXJhdGlvbnM/IElzIGl0IHRpZWQgaW50byBhIHBhcnRpY3VsYXIgbW9kdWxlPyBUaGlzIGlzIHRoZSBraW5kIG9mIHN0dWZmIHRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFVsdGltYXRlbHksIEkmIzM5O20gbG9va2luZyBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlLCBhIHJvYWRtYXAgb2YgdGhpcyBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIHdpdGhpbiB0aGlzIHByb2plY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmYXVsdF9hZHZtc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvZHN0Lmg9MTg1PWRzdF9tZXRyaWNfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbi0tXG5pbmNsdWRlL25ldC9kc3QuaC0xODktXHRpZiAoIWFkdm1zcylcbmluY2x1ZGUvbmV0L2RzdC5oOjE5MDpcdFx0YWR2bXNzID0gZHN0LVx1MDAzZW9wcy1cdTAwM2VkZWZhdWx0X2Fkdm1zcyhkc3QpO1xuaW5jbHVkZS9uZXQvZHN0LmgtMTkxLVxuLS1cbmluY2x1ZGUvbmV0L2RzdF9vcHMuaD0xNT1zdHJ1Y3QgZHN0X29wcyB7XG4tLVxuaW5jbHVkZS9uZXQvZHN0X29wcy5oLTIwLVx0c3RydWN0IGRzdF9lbnRyeSAqXHQoKmNoZWNrKShzdHJ1Y3QgZHN0X2VudHJ5ICosIF9fdTMyIGNvb2tpZSk7XG5pbmNsdWRlL25ldC9kc3Rfb3BzLmg6MjE6XHR1bnNpZ25lZCBpbnRcdFx0KCpkZWZhdWx0X2Fkdm1zcykoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqKTtcbmluY2x1ZGUvbmV0L2RzdF9vcHMuaC0yMi1cdHVuc2lnbmVkIGludFx0XHQoKm10dSkoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqKTtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTEyOT1zdHJ1Y3QgZHN0X2VudHJ5XHQqaXB2NF9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgY29va2llKTtcbm5ldC9pcHY0L3JvdXRlLmM6MTMwOnN0YXRpYyB1bnNpZ25lZCBpbnRcdCBpcHY0X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7XG5uZXQvaXB2NC9yb3V0ZS5jLTEzMS1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTU0PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcHY0X2RzdF9vcHMgPSB7XG4tLVxubmV0L2lwdjQvcm91dGUuYy0xNTYtXHQuY2hlY2sgPVx0XHRpcHY0X2RzdF9jaGVjayxcbm5ldC9pcHY0L3JvdXRlLmM6MTU3Olx0LmRlZmF1bHRfYWR2bXNzID1cdGlwdjRfZGVmYXVsdF9hZHZtc3MsXG5uZXQvaXB2NC9yb3V0ZS5jLTE1OC1cdC5tdHUgPVx0XHRcdGlwdjRfbXR1LFxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTMyMD1zdGF0aWMgdm9pZCBzZXRfY2xhc3NfdGFnKHN0cnVjdCBydGFibGUgKnJ0LCB1MzIgdGFnKVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTMyOC1cbm5ldC9pcHY0L3JvdXRlLmM6MTMyOTpzdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxubmV0L2lwdjQvcm91dGUuYy0xMzMwLXtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI4ODE9c3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwdjRfZHN0X2JsYWNraG9sZV9vcHMgPSB7XG5uZXQvaXB2NC9yb3V0ZS5jLTI4ODItXHQuZmFtaWx5XHRcdFx0PSBBRl9JTkVULFxubmV0L2lwdjQvcm91dGUuYzoyODgzOlx0LmRlZmF1bHRfYWR2bXNzXHRcdD0gaXB2NF9kZWZhdWx0X2Fkdm1zcyxcbm5ldC9pcHY0L3JvdXRlLmMtMjg4NC1cdC5uZWlnaF9sb29rdXBcdFx0PSBpcHY0X25laWdoX2xvb2t1cCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTg2PXN0cnVjdCBkc3RfZW50cnlcdCppcDZfZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdTMyIGNvb2tpZSk7XG5uZXQvaXB2Ni9yb3V0ZS5jOjg3OnN0YXRpYyB1bnNpZ25lZCBpbnRcdCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTtcbm5ldC9pcHY2L3JvdXRlLmMtODgtSU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTI0OT1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9vcHNfdGVtcGxhdGUgPSB7XG4tLVxubmV0L2lwdjYvcm91dGUuYy0yNTMtXHQuY2hlY2tcdFx0XHQ9XHRpcDZfZHN0X2NoZWNrLFxubmV0L2lwdjYvcm91dGUuYzoyNTQ6XHQuZGVmYXVsdF9hZHZtc3NcdFx0PVx0aXA2X2RlZmF1bHRfYWR2bXNzLFxubmV0L2lwdjYvcm91dGUuYy0yNTUtXHQubXR1XHRcdFx0PVx0aXA2X210dSxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTI2OD1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9ibGFja2hvbGVfb3BzID0ge1xubmV0L2lwdjYvcm91dGUuYy0yNjktXHQuZmFtaWx5XHRcdFx0PSBBRl9JTkVUNixcbm5ldC9pcHY2L3JvdXRlLmM6MjcwOlx0LmRlZmF1bHRfYWR2bXNzXHRcdD0gaXA2X2RlZmF1bHRfYWR2bXNzLFxubmV0L2lwdjYvcm91dGUuYy0yNzEtXHQubmVpZ2hfbG9va3VwXHRcdD0gaXA2X2RzdF9uZWlnaF9sb29rdXAsXG4tLVxubmV0L2lwdjYvcm91dGUuYz0zMjU2PXZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyNjEtXG5uZXQvaXB2Ni9yb3V0ZS5jOjMyNjI6c3RhdGljIHVuc2lnbmVkIGludCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxubmV0L2lwdjYvcm91dGUuYy0zMjYzLXtcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTM5OTQ9c3RhdGljIGludCB4ZnJtX2J1bmRsZV9vayhzdHJ1Y3QgeGZybV9kc3QgKmZpcnN0KVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDA2MS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDA2MjpzdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MDYzLXtcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQxMTE9aW50IHhmcm1fcG9saWN5X3JlZ2lzdGVyX2FmaW5mbyhjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8sIGludCBmYW1pbHkpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTI2LVx0XHRcdGRzdF9vcHMtXHUwMDNlY2hlY2sgPSB4ZnJtX2RzdF9jaGVjaztcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDEyNzpcdFx0aWYgKGxpa2VseShkc3Rfb3BzLVx1MDAzZWRlZmF1bHRfYWR2bXNzID09IE5VTEwpKVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0MTI4Olx0XHRcdGRzdF9vcHMtXHUwMDNlZGVmYXVsdF9hZHZtc3MgPSB4ZnJtX2RlZmF1bHRfYWR2bXNzO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTI5LVx0XHRpZiAobGlrZWx5KGRzdF9vcHMtXHUwMDNlbXR1ID09IE5VTEwpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxODIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgdGhlIGBkc3RfbWV0cmljX2Fkdm1zc2AgQ2FsbCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hlbiBJIHNlZSBgZHN0X21ldHJpY19hZHZtc3NgLCBteSBicmFpbiBqdW1wcyB0bzogJiMzNDtPa2F5LCBzbyB0aGlzIGZ1bmN0aW9uIGlzIGludm9raW5nIGBkc3QtJmd0O29wcy0mZ3Q7ZGVmYXVsdF9hZHZtc3MoZHN0KWAuICBDbGFzc2ljIGludGVyZmFjZSBwYXR0ZXJuLiBCdXQgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uICphbHdheXMqIGFyaXNlcyAtIGNvbnRleHQgaXMga2luZyBpbiB0aGVzZSBzY2VuYXJpb3MsIHJpZ2h0PyYjMzQ7CgpNeSBpbnRlcm5hbCBtb25vbG9ndWUgdGhlbiBhc2tzLCAmIzM0O1doZXJlIHRoZSAqaGVsbCogaXMgYGRzdF9tZXRyaWNfYWR2bXNzYCBpdHNlbGYgYmVpbmcgY2FsbGVkPyBXaGF0JiMzOTtzIHRoZSBjYWxsIHN0YWNrPyBXaGF0IHByb2Nlc3MgaXMgaW52b2tpbmcgdGhpcyBmdW5jdGlvbj8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgc3Vycm91bmRpbmcgY29uZGl0aW9ucywgYW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBwYXJ0aWN1bGFyIGNhbGwuIFdpdGhvdXQgdGhhdCBicm9hZGVyIHBlcnNwZWN0aXZlLCBJJiMzOTttIGp1c3QgbG9va2luZyBhdCBhIHNpbmdsZSB0aHJlYWQgaW4gYSB2ZXJ5IGNvbXBsZXggd2VhdmUuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgdXNlZCBnaXZlcyB0aGUgYWxsLWltcG9ydGFudCBjb250ZXh0LiBUaGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJlIGltcG9ydGFudCBpbiBteSBmaWVsZCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gbWFrZSBpbmZvcm1lZCBkZWNpc2lvbnMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RzdF9tZXRyaWNfYWR2bXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5jPTEwOTg9dW5zaWduZWQgaW50IGN4Z2JpX3NvY2tfc2VsZWN0X21zcyhzdHJ1Y3QgY3hnYmlfc29jayAqY3NrLCB1bnNpZ25lZCBpbnQgcG10dSlcbi0tXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYy0xMTAyLVxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmM6MTEwMzpcdGNzay1cdTAwM2VhZHZtc3MgPSBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpO1xuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmMtMTEwNC1cbi0tXG5pbmNsdWRlL25ldC9kc3QuaD0xODQ9c3RhdGljIGlubGluZSB1MzJcbmluY2x1ZGUvbmV0L2RzdC5oOjE4NTpkc3RfbWV0cmljX2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG5pbmNsdWRlL25ldC9kc3QuaC0xODYte1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MTY3ND1zdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTczOC1cdHRjcF9zeW5jX21zcyhuZXdzaywgZHN0NF9tdHUoZHN0KSk7XG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE3Mzk6XHRuZXd0cC1cdTAwM2VhZHZtc3MgPSB0Y3BfbXNzX2NsYW1wKHRjcF9zayhzayksIGRzdF9tZXRyaWNfYWR2bXNzKGRzdCkpO1xubmV0L2lwdjQvdGNwX2lwdjQuYy0xNzQwLVxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz00MzE9dm9pZCB0Y3Bfb3BlbnJlcV9pbml0X3J3aW4oc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy00NDItXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NDQzOlx0bXNzID0gdGNwX21zc19jbGFtcCh0cCwgZHN0X21ldHJpY19hZHZtc3MoZHN0KSk7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDQ0LVx0d2luZG93X2NsYW1wID0gUkVBRF9PTkNFKHRwLVx1MDAzZXdpbmRvd19jbGFtcCk7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTEzOT1zdGF0aWMgX191MTYgdGNwX2FkdmVydGlzZV9tc3Moc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNDUtXHRpZiAoZHN0KSB7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTQ2Olx0XHR1bnNpZ25lZCBpbnQgbWV0cmljID0gZHN0X21ldHJpY19hZHZtc3MoZHN0KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNDctXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM5MzE9c3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzk3NC1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozOTc1Olx0bXNzID0gdGNwX21zc19jbGFtcCh0cCwgZHN0X21ldHJpY19hZHZtc3MoZHN0KSk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzk3Ni1cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDEwMT1zdGF0aWMgdm9pZCB0Y3BfY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDEzMC1cdFx0V1JJVEVfT05DRSh0cC1cdTAwM2V3aW5kb3dfY2xhbXAsIGRzdF9tZXRyaWMoZHN0LCBSVEFYX1dJTkRPVykpO1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjQxMzE6XHR0cC1cdTAwM2VhZHZtc3MgPSB0Y3BfbXNzX2NsYW1wKHRwLCBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTMyLVxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTM4Mj1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF92Nl9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE0ODktXHR0Y3Bfc3luY19tc3MobmV3c2ssIGRzdDZfbXR1KGRzdCkpO1xubmV0L2lwdjYvdGNwX2lwdjYuYzoxNDkwOlx0bmV3dHAtXHUwMDNlYWR2bXNzID0gdGNwX21zc19jbGFtcCh0Y3Bfc2soc2spLCBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpKTtcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTQ5MS1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQwNjI9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDA2My17XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQwNjQ6XHRyZXR1cm4gZHN0X21ldHJpY19hZHZtc3MoeGZybV9kc3RfcGF0aChkc3QpKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDA2NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NjYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgTXkgRnV6emluZyBFZmZvcnRzIGZvciBNYXhpbXVtIEltcGFjdCoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLCBgZHN0X21ldHJpY19hZHZtc3NgIGlzIHRoZSB0YXJnZXQgaGVyZS4gSSBjYW4gc2VlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXM6IGB0Y3BfYWR2ZXJ0aXNlX21zc2AsIGB0Y3BfY29ubmVjdF9pbml0YCwgYHRjcF9tYWtlX3N5bmFja2AsIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gLCBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgLCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhleSBhcmUgYWxsIGludm9sdmVkIGluIFRDUCBjb25uZWN0aW9uIHNldHVwIGFuZCBNU1MgYWR2ZXJ0aXNlbWVudC4KClNvLCBJIHNob3VsZCBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhlIGVudHJ5IHBvaW50czogYHRjcF9hZHZlcnRpc2VfbXNzYCwgYHRjcF9jb25uZWN0X2luaXRgLCBgdGNwX21ha2Vfc3luYWNrYCwgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCwgYW5kIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AuIFJpZ2h0LCB0aGVzZSBhcmUgdGhlIHBsYWNlcyB3aGVyZSBpbnRlcmVzdGluZyBpbnB1dCBpcyBsaWtlbHkgdG8gaGl0IGBkc3RfbWV0cmljX2Fkdm1zc2AuCgpIb2xkIG9uLi4uIGB0Y3BfYWR2ZXJ0aXNlX21zc2AgYW5kIGB0Y3BfY29ubmVjdF9pbml0YCBhcmUgYm90aCBzdGF0aWMsIHNvIHRoYXQgbGltaXRzIG15IG9wdGlvbnMuIEkgbmVlZCB0byB0aGluayBhYm91dCB0aGF0LiBCdXQgYHRjcF9tYWtlX3N5bmFja2AgaXMgZXhwb3J0ZWQuIE9rYXksIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfbWFrZV9zeW5hY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9NTcxPWVudW0gdGNwX3N5bmFja190eXBlIHtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaC01NzYtfTtcbmluY2x1ZGUvbmV0L3RjcC5oOjU3NzpzdHJ1Y3Qgc2tfYnVmZiAqdGNwX21ha2Vfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuaW5jbHVkZS9uZXQvdGNwLmgtNTc4LVx0XHRcdFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MTE2Mj1zdGF0aWMgaW50IHRjcF92NF9zZW5kX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTExNzgtXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjExNzk6XHRza2IgPSB0Y3BfbWFrZV9zeW5hY2soc2ssIGRzdCwgcmVxLCBmb2MsIHN5bmFja190eXBlLCBzeW5fc2tiKTtcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTE4MC1cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9Mzg4Nz1pbnQgdGNwX3NlbmRfc3luYWNrKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzkyMS0vKipcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozOTIyOiAqIHRjcF9tYWtlX3N5bmFjayAtIEFsbG9jYXRlIG9uZSBza2IgYW5kIGJ1aWxkIGEgU1lOQUNLIHBhY2tldC5cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zOTIzLSAqIEBzazogbGlzdGVuZXIgc29ja2V0XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM5MzAtICovXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzkzMTpzdHJ1Y3Qgc2tfYnVmZiAqdGNwX21ha2Vfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM5MzItXHRcdFx0XHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz01NTA9c3RhdGljIGludCB0Y3BfdjZfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYy01NjktXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjU3MDpcdHNrYiA9IHRjcF9tYWtlX3N5bmFjayhzaywgZHN0LCByZXEsIGZvYywgc3luYWNrX3R5cGUsIHN5bl9za2IpO1xubmV0L2lwdjYvdGNwX2lwdjYuYy01NzEtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9jb25uZWN0LWRlbnkuYz0yMjE9c3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9jb25uZWN0LWRlbnkuYy0yNDktXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9jb25uZWN0LWRlbnkuYzoyNTA6XHQgKiBYWFg6IFRoZSB0ZXN0IGRvZXNuJiMzOTt0IGluY3JlYXNlIGFueSBjb3VudGVycywgc2VlIHRjcF9tYWtlX3N5bmFjaygpLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9jb25uZWN0LWRlbnkuYy0yNTEtXHQgKiBQb3RlbnRpYWxseSwgaXQgY2FuIGJlIHNwZWVkIHVwIGJ5IHNldHRpbmcgc2tfcGFpciA9IC1FVElNRURPVVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc0MwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFRDUCBTWU4tQUNLIEhhbmRsaW5nKioKCkhtbSwgc28gYHRjcF9tYWtlX3N5bmFja2AgaXNuJiMzOTt0IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgbWVhbnMgdGhlcmUmIzM5O3Mgc29tZSBkeW5hbWljIHNlbGVjdGlvbiBwcm9jZXNzIGdvaW5nIG9uIHdoZW4gY3JhZnRpbmcgdGhvc2UgU1lOLUFDSyBwYWNrZXRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBBbmQgaW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIG90aGVyIGtleSBwaWVjZXM6IGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AgYW5kIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGFkZHJlc3MgZmFtaWx5IHBsYXlzIGEgcm9sZSBoZXJlLCBidXQgaXMgdGhhdCAqYWxsKiB0aGF0IGRpY3RhdGVzIHRoZSBjYWxsIHBhdGhzPwoKSSBzdXNwZWN0IHRob3NlIGAqX3N5bl9yZWN2X3NvY2tgIGZ1bmN0aW9ucyBoYW5kbGUgdGhlIGluaXRpYWwgc29ja2V0IHNldHVwIGFuZCB0aGUgaW5pdGlhbCBzdGF0ZSB0cmFuc2l0aW9uLiBgdGNwX21ha2Vfc3luYWNrYCBsaWtlbHkgZm9jdXNlcyBvbiBjcmFmdGluZyB0aGUgc3BlY2lmaWMgcGFja2V0IGNvbnRlbnRzLCBwb3NzaWJseSBkcmF3aW5nIHVwb24gdGhlIHBhcmFtZXRlcnMgc2V0IGJ5IHRob3NlIGVhcmxpZXIgZnVuY3Rpb25zIG9yIGhhdmluZyBpdHMgYmVoYXZpb3IgaW5mbHVlbmNlZCBieSB0aGUgc29ja2V04oCZcyBmbGFncyBvciBvcHRpb25zLiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgY29ubmVjdGlvbiBxdWV1aW5nLCBhbmQgd2hldGhlciBhbnkgb2YgdGhvc2Ugc3RydWN0dXJlcyBhcmUgY29uc3VsdGVkIGR1cmluZyB0aGUgU1lOLUFDSyBnZW5lcmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsaW5nIGNoYWluIGFuZCBleGFtaW5lIHRoZSBkYXRhIGZsb3cgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gVGhpcyBmZWVscyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZGl2aW5nIGludG8gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF92NF9zeW5fcmVjdl9zb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTU2MD12b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTtcbmluY2x1ZGUvbmV0L3RjcC5oOjU2MTpzdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9uZXQvdGNwLmgtNTYyLVx0XHRcdFx0ICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0xNjU1PWludCB0Y3BfdjRfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE2NzMtICovXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE2NzQ6c3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTY3NS1cdFx0XHRcdCAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MjM1OD1jb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjRfc3BlY2lmaWMgPSB7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMzYyLVx0LmNvbm5fcmVxdWVzdFx0ICAgPSB0Y3BfdjRfY29ubl9yZXF1ZXN0LFxubmV0L2lwdjQvdGNwX2lwdjQuYzoyMzYzOlx0LnN5bl9yZWN2X3NvY2tcdCAgID0gdGNwX3Y0X3N5bl9yZWN2X3NvY2ssXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzNjQtXHQubmV0X2hlYWRlcl9sZW5cdCAgID0gc2l6ZW9mKHN0cnVjdCBpcGhkciksXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz0xMzM3PXN0YXRpYyB2b2lkIHRjcF92Nl9yZXN0b3JlX2NiKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzQ2LVxubmV0L2lwdjYvdGNwX2lwdjYuYzoxMzQ3Oi8qIENhbGxlZCBmcm9tIHRjcF92NF9zeW5fcmVjdl9zb2NrKCkgZm9yIHY2X21hcHBlZCBjaGlsZHJlbi4gKi9cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTM0OC1zdGF0aWMgdm9pZCB0Y3BfdjZfbWFwcGVkX2NoaWxkX2luaXQoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzcyLVxubmV0L2lwdjYvdGNwX2lwdjYuYzoxMzczOlx0LyogdGNwX3Y0X3N5bl9yZWN2X3NvY2soKSBoYXMgaW5pdGlhbGl6ZWQgbmV3aW5ldC1cdTAwM2VtY197aW5kZXgsdHRsfSAqL1xubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzc0LVx0bmV3bnAtXHUwMDNlbWNhc3Rfb2lmICAgPSBuZXdpbmV0LVx1MDAzZW1jX2luZGV4O1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTM4Mj1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF92Nl9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE0MDQtXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSlcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTQwNTpcdFx0cmV0dXJuIHRjcF92NF9zeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgZHN0LFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xNDA2LVx0XHRcdFx0XHQgICAgcmVxX3VuaGFzaCwgb3duX3JlcSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NjIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBUQ1B2NiBTb2NrZXQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgVENQIGNvZGUsIHByb2JhYmx5IGtlcm5lbC1sZXZlbCBzdHVmZiwgYW5kIEkgc2VlIHRoZXNlIGZ1bmN0aW9uczogYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCB0aG9zZSBzb3VuZCBsaWtlIHRoZXkgaGFuZGxlIFNZTiBwYWNrZXRzLCB0aGUgaW5pdGlhbCBjb25uZWN0aW9uIHJlcXVlc3QsIGZvciBUQ1B2NCBhbmQgVENQdjYgcmVzcGVjdGl2ZWx5LiYjMzQ7IEkmIzM5O20gYWxzbyBub3RpY2luZyB0aGF0IHRoZXkgYXJlIGxpa2VseSBleHBvcnRlZCwgb3IgYXQgbGVhc3QgdmlzaWJsZSBvdXRzaWRlIHRoZWlyIG93biBzb3VyY2UgZmlsZS4gTWFrZXMgc2Vuc2UsIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBrZXkgdG8gYWNjZXB0aW5nIG5ldyBjb25uZWN0aW9ucy4KCkhhbmcgb24gYSBzZWNvbmTigKZJIHRob3VnaHQgSSBzYXcgc29tZXRoaW5nIGFib3V0IGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AgYmVpbmcgKnN0YXRpYyouIFRoYXTigJlzIG9kZC4gSWYgaXQmIzM5O3Mgc3RhdGljLCBpdCB3b3VsZG4mIzM5O3QgYmUgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0IGNhbiYjMzk7dCBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIGZpbGUgaXQmIzM5O3MgZGVjbGFyZWQgaW4uIFRoaXMgcmVxdWlyZXMgY2xvc2VyIGluc3BlY3Rpb24uIExldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgbGlrZWx5IHBsYWNlIHRvIGZpbmQgaXQgaXMgYG5ldC9pcHY2L3RjcF9pcHY2LmNgLiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIHNvdXJjZSBJJiMzOTttIGxvb2tpbmcgYXQgbWF0Y2hlcyBteSBleHBlY3RhdGlvbnMuIEdvdHRhIGNoZWNrIHRoYXQgc3BlY2lmaWMgc291cmNlIGZpbGUgYW5kIGNvbmZpcm0gd2hldGhlciBgdGNwX3Y2X3N5bl9yZWN2X3NvY2tgIGlzIGluZGVlZCBzdGF0aWMgb3Igbm90LiBUaGlzIHdpbGwgcHJvdmlkZSBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgcmVnYXJkaW5nIElQdjYgVENQIGNvbm5lY3Rpb24gaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF92Nl9zeW5fcmVjdl9zb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3N5bmNvb2tpZXMuYz0xNzQ9c3RydWN0IHNvY2sgKmNvb2tpZV92Nl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc3luY29va2llcy5jLTIyOS1cdCAqIFdlIG5lZWQgdG8gbG9va3VwIHRoZSBkc3RfZW50cnkgdG8gZ2V0IHRoZSBjb3JyZWN0IHdpbmRvdyBzaXplLlxubmV0L2lwdjYvc3luY29va2llcy5jOjIzMDpcdCAqIFRoaXMgaXMgdGFrZW4gZnJvbSB0Y3BfdjZfc3luX3JlY3Zfc29jay4gIFNvbWVib2R5IHBsZWFzZSBlbmxpZ2h0ZW5cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0yMzEtXHQgKiBtZSBpZiB0aGVyZSBpcyBhIHByZWZlcnJlZCB3YXkuXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz0xMzQ4PXN0YXRpYyB2b2lkIHRjcF92Nl9tYXBwZWRfY2hpbGRfaW5pdChzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTEzODEtXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjEzODI6c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfdjZfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTEzODMtXHRcdFx0XHRcdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMDA3PWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgaXB2Nl9zcGVjaWZpYyA9IHtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIwMTEtXHQuY29ubl9yZXF1ZXN0XHQgICA9IHRjcF92Nl9jb25uX3JlcXVlc3QsXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIwMTI6XHQuc3luX3JlY3Zfc29ja1x0ICAgPSB0Y3BfdjZfc3luX3JlY3Zfc29jayxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjAxMy1cdC5uZXRfaGVhZGVyX2xlblx0ICAgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLFxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjAzOD1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X21hcHBlZCA9IHtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIwNDItXHQuY29ubl9yZXF1ZXN0XHQgICA9IHRjcF92Nl9jb25uX3JlcXVlc3QsXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIwNDM6XHQuc3luX3JlY3Zfc29ja1x0ICAgPSB0Y3BfdjZfc3luX3JlY3Zfc29jayxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjA0NC1cdC5uZXRfaGVhZGVyX2xlblx0ICAgPSBzaXplb2Yoc3RydWN0IGlwaGRyKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NDEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVENQIENvbm5lY3Rpb24gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIFRDUCBjb25uZWN0aW9uIHNldHVwIGFuZCBJJiMzOTttIHN0YXJ0aW5nIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUuIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AgaXMgY2xlYXJseSBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHByb2JhYmx5IG5vdCB0aGUgY29yZSBhcmVhIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIHJpZ2h0IG5vdy4gSSYjMzk7bSBnb2luZyB0byBzaGlmdCBteSBmb2N1cyB0byBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgIGFuZCB0aGUgZnVuY3Rpb24gYHRjcF9tYWtlX3N5bmFja2Ag4oCTIHRob3NlIHNlZW0gbGlrZSBtb3JlIHByb21pc2luZyBjYW5kaWRhdGVzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsIGhhbmRzaGFrZS4KCkp1c3QgYSBxdWljayBjaGVjay4uLndoYXQgYWJvdXQgYHRjcF9jb25uZWN0X2luaXRgPyBPaCwgaXQmIzM5O3MgYWxzbyBzdGF0aWMuIEFscmlnaHQsIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuIE5vIG5lZWQgdG8gY2hhc2UgZG93biBpdHMgaW50ZXJuYWxzIGp1c3QgeWV0LiBNeSBuZXh0IHN0ZXAgaXMgdG8gcGlucG9pbnQgd2hlcmUgYHRjcF9jb25uZWN0X2luaXRgIGlzIGFjdHVhbGx5ICpjYWxsZWQqLiBLbm93aW5nIGl0cyBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgY29ubmVjdGlvbiBpbml0aWF0aW9uIHByb2Nlc3MgYW5kIHBvdGVudGlhbGx5IHJldmVhbCBzb21lIGhpZGRlbiBhc3N1bXB0aW9ucyBvciBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY2FsbCBncmFwaCB0ZWxscyBtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2Nvbm5lY3RfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0PTE2PXN0cnVjdCB0aW1lcl9saXN0ICAgICAgICAgICAgICAgICAgIGljc2tfa2VlcGFsaXZlX3RpbWVyXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjE3OnUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcnRvICAgICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9jd25kX3ZhbGlkYXRlLHRjcF9zY2hlZHVsZV9sby4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0xOC11MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3J0b19taW5cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0PTIwPXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfZGVsYWNrX21heFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyMTp1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3BtdHVfY29va2llICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bfc3luY19tc3MsdGNwX2N1cnJlbnRfbXNzLHRjcF8uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MjI6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAgICAgICAgICAgaWNza19jYV9vcHMgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2N3bmRfdmFsaWRhdGUsdGNwX3Rzb19zZWdzLHRjLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjIzOnN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgIGljc2tfYWZfb3BzICAgICAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9maW5pc2hfY29ubmVjdCx0Y3Bfc2VuZF9zeW5fZC4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0yNC1zdHJ1Y3QgdGNwX3VscF9vcHMqICAgICAgICAgICAgICAgICBpY3NrX3VscF9vcHNcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0PTI4PXU4OjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfY2Ffc2V0c29ja29wdFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyOTp1ODoxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2NhX2RzdF9sb2NrZWQgICAgIHdyaXRlX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY2FfZHN0X2luaXQsdGNwX2Nvbm5lY3RfaW5pdCwuLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MzA6dTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19yZXRyYW5zbWl0cyAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2Nvbm5lY3RfaW5pdCx0Y3BfY29ubmVjdFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0zMS11OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3BlbmRpbmcgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmV0X2Nza19yZXNldF94bWl0X3RpbWVyLHRjcF9jb24uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MzI6dTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19iYWNrb2ZmICAgICAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3dyaXRlX3F1ZXVlX3B1cmdlLHRjcF9jb25uZWN0Li4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTMzLXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfc3luX3JldHJpZXNcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0PTQxPXN0cnVjdCBpY3NrX2Fja191MzIgICAgICAgICAgICAgICAgIGxyY3Z0aW1lICAgICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9maW5pc2hfY29ubmVjdCx0Y3BfY29ubmVjdCx0Yy4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0MjpzdHJ1Y3QgaWNza19hY2tfdTE2ICAgICAgICAgICAgICAgICByY3ZfbXNzICAgICAgICAgICAgICAgIHdyaXRlX21vc3RseSAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICBfX3RjcF9zZWxlY3Rfd2luZG93LF9fdGNwX2NsZWFudXAuLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDM6c3RydWN0IGljc2tfbXR1cF9pbnQgICAgICAgICAgICAgICAgc2VhcmNoX2hpZ2ggICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dXBfaW5pdCx0Y3Bfc3luY19tc3MsdGNwX2NvLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQ0OnN0cnVjdCBpY3NrX210dXBfaW50ICAgICAgICAgICAgICAgIHNlYXJjaF9sb3cgICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVfcHJvYmUsdGNwX210dV9jaGVja19yZXByby4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0NTpzdHJ1Y3QgaWNza19tdHVwX3UzMjozMSAgICAgICAgICAgICBwcm9iZV9zaXplICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfbXR1cF9pbml0LHRjcF9jb25uZWN0X2luaXQsX18uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDY6c3RydWN0IGljc2tfbXR1cF91MzI6MSAgICAgICAgICAgICAgZW5hYmxlZCAgICAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dXBfaW5pdCx0Y3Bfc3luY19tc3MsdGNwX2NvLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQ3OnN0cnVjdCBpY3NrX210dXBfdTMyICAgICAgICAgICAgICAgIHByb2JlX3RpbWVzdGFtcCAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVwX2luaXQsdGNwX2Nvbm5lY3RfaW5pdCx0Yy4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC00OC11MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3Byb2Jlc190c3RhbXBcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDA4MT1zdGF0aWMgdm9pZCB0Y3BfY2FfZHN0X2luaXQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxMDAtLyogRG8gYWxsIGNvbm5lY3Qgc29ja2V0IHNldHVwcyB0aGF0IGNhbiBiZSBkb25lIEFGIGluZGVwZW5kZW50LiAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjQxMDE6c3RhdGljIHZvaWQgdGNwX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDEwMi17XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQyOTg9aW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDM1OS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MzYwOlx0dGNwX2Nvbm5lY3RfaW5pdChzayk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDM2MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MTQKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVENQIENvbm5lY3Rpb24gRnVuY3Rpb25zKioKCk9rYXksIHNvIGB0Y3BfY29ubmVjdGAgaXMgZGVmaW5pdGVseSBleHBvcnRlZCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgaXQgYSBrZXkgZnVuY3Rpb24gdG8gaW52ZXN0aWdhdGUuIFRoaXMgbWVhbnMgbXkgZm9jdXMgZm9yIG5vdyBzaG91bGQgYmUgb24gZnVuY3Rpb25zIGxpa2UgYHRjcF9jb25uZWN0YCBpdHNlbGYsIGFsb25nIHdpdGggcmVsYXRlZCBwcm9jZXNzZXMgc3VjaCBhcyBgdGNwX21ha2Vfc3luYWNrYCBhbmQgYHRjcF92NF9zeW5fcmVjdl9zb2NrYC4gSXQmIzM5O3Mgd29ydGggY29uZmlybWluZyB0aGF0IGB0Y3BfY29ubmVjdGAgaXMgaW5kZWVkIGFjY2Vzc2libGUgZXh0ZXJuYWxseSwgYXMgdGhpcyB3b3VsZCBwcm92aWRlIGEgdml0YWwgZW50cnkgcG9pbnQgZm9yIG15IGFuYWx5c2lzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGVsdmluZyBpbnRvIGB0Y3BfY29ubmVjdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9jb25uZWN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2NjQgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q9OT1UeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgIGZhc3RwYXRoX3R4X2FjY2VzcyAgZmFzdHBhdGhfcnhfYWNjZXNzICBjb21tZW50XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTEwLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoxMTpzdHJ1Y3QgaW5ldF9zb2NrICAgICAgICAgICAgICAgICAgICBpY3NrX2luZXQgICAgICAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICB0Y3BfaW5pdF9idWZmZXJfc3BhY2UsdGNwX2luaXRfdHIuLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtMTItc3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAgICAgICAgICAgaWNza19hY2NlcHRfcXVldWVcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0PTE0PXN0cnVjdCBpbmV0X2JpbmQyX2J1Y2tldCAgICAgICAgICAgIGljc2tfYmluZDJfaGFzaCAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9zZXRfc3RhdGUsaW5ldF9wdXRfcG9ydFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoxNTpzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICAgICAgICAgICAgICBpY3NrX2RlbGFja190aW1lciAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmV0X2Nza19yZXNldF94bWl0X3RpbWVyLHRjcF9jb24uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtMTYtc3RydWN0IHRpbWVyX2xpc3QgICAgICAgICAgICAgICAgICAgaWNza19rZWVwYWxpdmVfdGltZXJcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MTc6dTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19ydG8gICAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2N3bmRfdmFsaWRhdGUsdGNwX3NjaGVkdWxlX2xvLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTE4LXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcnRvX21pblxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q9MjA9dTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19kZWxhY2tfbWF4XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjIxOnUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcG10dV9jb29raWUgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9zeW5jX21zcyx0Y3BfY3VycmVudF9tc3MsdGNwXy4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyMjpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICAgICAgICAgICBpY3NrX2NhX29wcyAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY3duZF92YWxpZGF0ZSx0Y3BfdHNvX3NlZ3MsdGMuLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MjM6c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyAgaWNza19hZl9vcHMgICAgICAgICAgICByZWFkX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2ZpbmlzaF9jb25uZWN0LHRjcF9zZW5kX3N5bl9kLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTI0LXN0cnVjdCB0Y3BfdWxwX29wcyogICAgICAgICAgICAgICAgIGljc2tfdWxwX29wc1xuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q9MjY9dTg6NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19jYV9zdGF0ZSAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2N3bmRfYXBwbGljYXRpb25fbGltaXRlZCx0Y3BfLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjI3OnU4OjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfY2FfaW5pdGlhbGl6ZWQgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9pbml0X3RyYW5zZmVyLHRjcF9pbml0X2Nvbmdlcy4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0yOC11ODoxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2NhX3NldHNvY2tvcHRcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6Mjk6dTg6MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19jYV9kc3RfbG9ja2VkICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2NhX2RzdF9pbml0LHRjcF9jb25uZWN0X2luaXQsLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjMwOnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcmV0cmFuc21pdHMgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9jb25uZWN0X2luaXQsdGNwX2Nvbm5lY3RcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MzE6dTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19wZW5kaW5nICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9jc2tfcmVzZXRfeG1pdF90aW1lcix0Y3BfY29uLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjMyOnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfYmFja29mZiAgICAgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF93cml0ZV9xdWV1ZV9wdXJnZSx0Y3BfY29ubmVjdC4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0zMy11OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3N5bl9yZXRyaWVzXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD00MD1zdHJ1Y3QgaWNza19hY2tfdTggICAgICAgICAgICAgICAgICBhdG8gICAgICAgICAgICAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICB0Y3BfZGVjX3F1aWNrYWNrX21vZGUsdGNwX2V2ZW50X2EuLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDE6c3RydWN0IGljc2tfYWNrX3UzMiAgICAgICAgICAgICAgICAgbHJjdnRpbWUgICAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2ZpbmlzaF9jb25uZWN0LHRjcF9jb25uZWN0LHRjLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQyOnN0cnVjdCBpY3NrX2Fja191MTYgICAgICAgICAgICAgICAgIHJjdl9tc3MgICAgICAgICAgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICByZWFkX21vc3RseSAgICAgICAgIF9fdGNwX3NlbGVjdF93aW5kb3csX190Y3BfY2xlYW51cC4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0MzpzdHJ1Y3QgaWNza19tdHVwX2ludCAgICAgICAgICAgICAgICBzZWFyY2hfaGlnaCAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfbXR1cF9pbml0LHRjcF9zeW5jX21zcyx0Y3BfY28uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDQ6c3RydWN0IGljc2tfbXR1cF9pbnQgICAgICAgICAgICAgICAgc2VhcmNoX2xvdyAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dV9wcm9iZSx0Y3BfbXR1X2NoZWNrX3JlcHJvLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQ1OnN0cnVjdCBpY3NrX210dXBfdTMyOjMxICAgICAgICAgICAgIHByb2JlX3NpemUgICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVwX2luaXQsdGNwX2Nvbm5lY3RfaW5pdCxfXy4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0NjpzdHJ1Y3QgaWNza19tdHVwX3UzMjoxICAgICAgICAgICAgICBlbmFibGVkICAgICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfbXR1cF9pbml0LHRjcF9zeW5jX21zcyx0Y3BfY28uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDc6c3RydWN0IGljc2tfbXR1cF91MzIgICAgICAgICAgICAgICAgcHJvYmVfdGltZXN0YW1wICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dXBfaW5pdCx0Y3BfY29ubmVjdF9pbml0LHRjLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTQ4LXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcHJvYmVzX3RzdGFtcFxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X3NvY2sucnN0PTk9VHlwZSAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICBmYXN0cGF0aF90eF9hY2Nlc3MgIGZhc3RwYXRoX3J4X2FjY2VzcyAgY29tbWVudFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfc29jay5yc3QtMTAtPT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X3NvY2sucnN0OjExOnN0cnVjdCBzb2NrICAgICAgICAgICAgICBzayAgICAgICAgICAgICAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICByZWFkX21vc3RseSAgICAgICAgIHRjcF9pbml0X2J1ZmZlcl9zcGFjZSx0Y3BfaW5pdF90cmFuc2Zlcix0Y3BfZmluaXNoX2Nvbm5lLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9zb2NrLnJzdC0xMi1zdHJ1Y3QgaXB2Nl9waW5mbyogICAgICAgcGluZXQ2XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaHNpLmg9OTI2Mz1zdHJ1Y3QgaXdhcnBfbXBhX29mZmxvYWRfcmFtcm9kX2RhdGEge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2hzaS5oLTkyNjYtXHR1OCBtb2RlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaHNpLmg6OTI2NzpcdHU4IHRjcF9jb25uZWN0X3NpZGU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9oc2kuaC05MjY4LVx0dTggcnRyX3ByZWY7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYz04MTk9cWVkX2l3YXJwX21wYV9vZmZsb2FkKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLCBzdHJ1Y3QgcWVkX2l3YXJwX2VwICplcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5jLTg3My1cdFx0XHRvZmZzZXRvZihzdHJ1Y3QgcWVkX2l3YXJwX2VwX21lbW9yeSwgaW5fcGRhdGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYzo4NzQ6XHRwX21wYV9yYW1yb2QtXHUwMDNldGNwX2Nvbm5lY3Rfc2lkZSA9IGVwLVx1MDAzZWNvbm5lY3RfbW9kZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmMtODc1LVx0RE1BX1JFR1BBSVJfTEUocF9tcGFfcmFtcm9kLVx1MDAzZWluY29taW5nX3VscF9idWZmZXIuYWRkcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5jPTI5NTc9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmM6Mjk1ODpxZWRfaXdhcnBfdGNwX2Nvbm5lY3RfdW5zdWNjZXNzZnVsKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYy0yOTU5LVx0XHRcdFx0ICAgc3RydWN0IHFlZF9pd2FycF9lcCAqZXAsIHU4IGZ3X3JldHVybl9jb2RlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmM9MzAxOT1xZWRfaXdhcnBfY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5jLTMwMzMtXHRcdGVsc2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmM6MzAzNDpcdFx0XHRxZWRfaXdhcnBfdGNwX2Nvbm5lY3RfdW5zdWNjZXNzZnVsKHBfaHdmbiwgZXAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5jLTMwMzUtXHRcdFx0XHRcdFx0XHQgICBmd19yZXR1cm5fY29kZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYy0zMDM5LVx0XHRlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5jOjMwNDA6XHRcdFx0cWVkX2l3YXJwX3RjcF9jb25uZWN0X3Vuc3VjY2Vzc2Z1bChwX2h3Zm4sIGVwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYy0zMDQxLVx0XHRcdFx0XHRcdFx0ICAgZndfcmV0dXJuX2NvZGUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmg9MTEyPXN0cnVjdCBxZWRfaXdhcnBfZXAge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmgtMTE5LVx0c3RydWN0IHFlZF9pd2FycF9jbV9pbmZvIGNtX2luZm87XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5oOjEyMDpcdGVudW0gdGNwX2Nvbm5lY3RfbW9kZSBjb25uZWN0X21vZGU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5oLTEyMS1cdGVudW0gbXBhX3J0cl90eXBlIHJ0cl90eXBlO1xuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0Lmg9MTUzNj1zdHJ1Y3QgbmRpc19vZmZsb2FkX3BhcmFtcyB7XG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaC0xNTQ2LVx0dTggbHNvX3YyX2lwdjY7XG5kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oOjE1NDc6XHR1OCB0Y3BfY29ubmVjdGlvbl9pcF92NDtcbmRyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0Lmg6MTU0ODpcdHU4IHRjcF9jb25uZWN0aW9uX2lwX3Y2O1xuZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaC0xNTQ5LVx0dTMyIGZsYWdzO1xuLS1cbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmg9MTExMD1zdHJ1Y3QgYmVfZXFfZGVsYXlfcGFyYW1zX2luIHtcbi0tXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oLTExMTUtXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oOjExMTY6c3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luIHtcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgtMTExNy1cdHN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7XG4tLVxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaC0xMTI5LVxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaDoxMTMwOnN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9pbl92MSB7XG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oLTExMzEtXHRzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyO1xuLS1cbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgtMTE0OS1cbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmg6MTE1MDpzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfb3V0IHtcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgtMTE1MS1cdHN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyO1xuLS1cbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jPTEwNTA9c3RhdGljIGludCBiZWlzY3NpX29wZW5fY29ubihzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLFxuLS1cbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jLTEwNTUtXHRzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBiZWlzY3NpX2VwLVx1MDAzZXBoYmE7XG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYzoxMDU2Olx0c3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX291dCAqcHRjcGNuY3Rfb3V0O1xuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMtMTA1Ny1cdHN0cnVjdCBiZV9kbWFfbWVtIG5vbmVtYl9jbWQ7XG4tLVxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMtMTA4MC1cdGlmIChpc19jaGlwX2JlMl9iZTNyKHBoYmEpKVxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmM6MTA4MTpcdFx0cmVxX21lbXNpemUgPSBzaXplb2Yoc3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luKTtcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jLTEwODItXHRlbHNlXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYzoxMDgzOlx0XHRyZXFfbWVtc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfaW5fdjEpO1xuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMtMTA4NC1cbi0tXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYy0xMTI1LVxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmM6MTEyNjpcdHB0Y3BjbmN0X291dCA9IChzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfb3V0ICopbm9uZW1iX2NtZC52YTtcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jLTExMjctXHRiZWlzY3NpX2VwID0gZXAtXHUwMDNlZGRfZGF0YTtcbi0tXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5jPTEwOT1pbnQgbWdtdF9vcGVuX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLFxuLS1cbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMtMTE5LVx0c3RydWN0IGJlX21jY193cmIgKndyYjtcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmM6MTIwOlx0c3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luX3YxICpyZXE7XG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5jLTEyMS1cdHVuc2lnbmVkIHNob3J0IGRlZl9oZHJfaWQ7XG4tLVxuaW5jbHVkZS9saW51eC9jZXBoL21lc3Nlbmdlci5oPTUyNz12b2lkIGNlcGhfZW5jb2RlX215X2FkZHIoc3RydWN0IGNlcGhfbWVzc2VuZ2VyICptc2dyKTtcbmluY2x1ZGUvbGludXgvY2VwaC9tZXNzZW5nZXIuaC01MjgtXG5pbmNsdWRlL2xpbnV4L2NlcGgvbWVzc2VuZ2VyLmg6NTI5OmludCBjZXBoX3RjcF9jb25uZWN0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbik7XG5pbmNsdWRlL2xpbnV4L2NlcGgvbWVzc2VuZ2VyLmgtNTMwLWludCBjZXBoX2Nvbl9jbG9zZV9zb2NrZXQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3FlZC9udm1ldGNwX2NvbW1vbi5oPTE5OT1zdHJ1Y3QgbnZtZXRjcF9ob3N0X2NjY2lkX2l0aWRfZW50cnkge1xuLS1cbmluY2x1ZGUvbGludXgvcWVkL252bWV0Y3BfY29tbW9uLmgtMjAyLVxuaW5jbHVkZS9saW51eC9xZWQvbnZtZXRjcF9jb21tb24uaDoyMDM6c3RydWN0IG52bWV0Y3BfY29ubmVjdF9kb25lX3Jlc3VsdHMge1xuaW5jbHVkZS9saW51eC9xZWQvbnZtZXRjcF9jb21tb24uaC0yMDQtXHRfX2xlMTYgaWNpZDtcbi0tXG5pbmNsdWRlL2xpbnV4L3FlZC90Y3BfY29tbW9uLmg9MTc9c3RydWN0IG9vb19vcGFxdWUge1xuLS1cbmluY2x1ZGUvbGludXgvcWVkL3RjcF9jb21tb24uaC0yNS0vKiB0Y3AgY29ubmVjdCBtb2RlIGVudW0gKi9cbmluY2x1ZGUvbGludXgvcWVkL3RjcF9jb21tb24uaDoyNjplbnVtIHRjcF9jb25uZWN0X21vZGUge1xuaW5jbHVkZS9saW51eC9xZWQvdGNwX2NvbW1vbi5oLTI3LVx0VENQX0NPTk5FQ1RfQUNUSVZFLFxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTU2OT1pbnQgdGNwX3Y0X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBhZGRyX2xlbik7XG5pbmNsdWRlL25ldC90Y3AuaDo1NzA6aW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC90Y3AuaC01NzEtZW51bSB0Y3Bfc3luYWNrX3R5cGUge1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTIxMDM9c3RydWN0IHRjcF9mYXN0b3Blbl9yZXF1ZXN0IHtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaC0yMTA3LVx0c2l6ZV90XHRcdFx0XHRzaXplO1xuaW5jbHVkZS9uZXQvdGNwLmg6MjEwODpcdGludFx0XHRcdFx0Y29waWVkO1x0LyogcXVldWVkIGluIHRjcF9jb25uZWN0KCkgKi9cbmluY2x1ZGUvbmV0L3RjcC5oLTIxMDktXHRzdHJ1Y3QgdWJ1Zl9pbmZvXHRcdCp1YXJnO1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jPTQxNz1zdGF0aWMgdm9pZCBzZXRfc29ja19jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy00MzQtICovXG5uZXQvY2VwaC9tZXNzZW5nZXIuYzo0MzU6aW50IGNlcGhfdGNwX2Nvbm5lY3Qoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtNDM2LXtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYz0xNDY5PWludCBjZXBoX2Nvbl92MV90cnlfd3JpdGUoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTE0OTMtXHRcdCAgICAgY29uLCBjb24tXHUwMDNlc3RhdGUpO1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6MTQ5NDpcdFx0cmV0ID0gY2VwaF90Y3BfY29ubmVjdChjb24pO1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtMTQ5NS1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTMzNTQ9aW50IGNlcGhfY29uX3YyX3RyeV93cml0ZShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzM4OC1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMzODk6XHRcdHJldCA9IGNlcGhfdGNwX2Nvbm5lY3QoY29uKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMzOTAtXHRcdGlmIChyZXQpIHtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMzOTE6XHRcdFx0cHJfZXJyKFwmIzM0O2NlcGhfdGNwX2Nvbm5lY3QgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMzOTItXHRcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwmIzM0O2Nvbm5lY3QgZXJyb3JcJiMzNDs7XG4tLVxubmV0L2lwdjQvdGNwLmM9MTA1MT1pbnQgdGNwX3NlbmRtc2dfZmFzdG9wZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCAqY29waWVkLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTEwNzUtXHRpZiAoaW5ldF90ZXN0X2JpdChERUZFUl9DT05ORUNULCBzaykpIHtcbm5ldC9pcHY0L3RjcC5jOjEwNzY6XHRcdGVyciA9IHRjcF9jb25uZWN0KHNrKTtcbm5ldC9pcHY0L3RjcC5jLTEwNzctXHRcdC8qIFNhbWUgZmFpbHVyZSBwcm9jZWR1cmUgYXMgaW4gdGNwX3Y0LzZfY29ubmVjdCAqL1xuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTExMzY9dm9pZCB0Y3BfYW9fY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMTg5LVx0fSBlbHNlIHtcbm5ldC9pcHY0L3RjcF9hby5jOjExOTA6XHRcdC8qIENhbiYjMzk7dCBoYXBwZW46IHRjcF9jb25uZWN0KCkgdmVyaWZpZXMgdGhhdCB0aGVyZSYjMzk7c1xubmV0L2lwdjQvdGNwX2FvLmMtMTE5MS1cdFx0ICogYXQgbGVhc3Qgb25lIHRjcC1hbyBrZXkgdGhhdCBtYXRjaGVzIHRoZSByZW1vdGUgcGVlci5cbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTIyMT1pbnQgdGNwX3Y0X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBhZGRyX2xlbilcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM0NC1cbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzQ1Olx0ZXJyID0gdGNwX2Nvbm5lY3Qoc2spO1xubmV0L2lwdjQvdGNwX2lwdjQuYy0zNDYtXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQwODE9c3RhdGljIHZvaWQgdGNwX2NhX2RzdF9pbml0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTAwLS8qIERvIGFsbCBjb25uZWN0IHNvY2tldCBzZXR1cHMgdGhhdCBjYW4gYmUgZG9uZSBBRiBpbmRlcGVuZGVudC4gKi9cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MTAxOnN0YXRpYyB2b2lkIHRjcF9jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxMDIte1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTgwLVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQxODE6c3RhdGljIHZvaWQgdGNwX2Nvbm5lY3RfcXVldWVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTgyLXtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDIwMT1zdGF0aWMgaW50IHRjcF9zZW5kX3N5bl9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnN5bilcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDI1OC1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MjU5Olx0dGNwX2Nvbm5lY3RfcXVldWVfc2tiKHNrLCBzeW5fZGF0YSk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDI2MC1cdGlmIChzeW5fZGF0YS1cdTAwM2VsZW4pXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQyOTctLyogQnVpbGQgYSBTWU4gYW5kIHNlbmQgaXQgb2ZmLiAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjQyOTg6aW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00Mjk5LXtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDM1OS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MzYwOlx0dGNwX2Nvbm5lY3RfaW5pdChzayk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDM2MS1cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDM3MS1cdC8qIFNZTiBlYXRzIGEgc2VxdWVuY2UgYnl0ZSwgd3JpdGVfc2VxIHVwZGF0ZWQgYnlcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MzcyOlx0ICogdGNwX2Nvbm5lY3RfcXVldWVfc2tiKCkuXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDM3My1cdCAqL1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00Mzc2LVx0dHAtXHUwMDNlcmV0cmFuc19zdGFtcCA9IHRjcF90aW1lX3N0YW1wX3RzKHRwKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0Mzc3Olx0dGNwX2Nvbm5lY3RfcXVldWVfc2tiKHNrLCBidWZmKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00Mzc4LVx0dGNwX2Vjbl9zZW5kX3N5bihzaywgYnVmZik7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQ0MDMtfVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQ0MDQ6RVhQT1JUX1NZTUJPTCh0Y3BfY29ubmVjdCk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQwNS1cbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTEzMz1zdGF0aWMgaW50IHRjcF92Nl9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLFxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMzQ1LVxubmV0L2lwdjYvdGNwX2lwdjYuYzozNDY6XHRlcnIgPSB0Y3BfY29ubmVjdChzayk7XG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTM0Ny1cdGlmIChlcnIpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDA4NT1zdGF0aWMgaW50IG1wdGNwX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQxMTctXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MTE4OnN0YXRpYyBpbnQgbXB0Y3BfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQxMTktXHRcdFx0IGludCBhZGRyX2xlbilcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MTk2PXN0YXRpYyBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdCA9IHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MTk5LVx0LmluaXRcdFx0PSBtcHRjcF9pbml0X3NvY2ssXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjAwOlx0LmNvbm5lY3RcdD0gbXB0Y3BfY29ubmVjdCxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMDEtXHQuZGlzY29ubmVjdFx0PSBtcHRjcF9kaXNjb25uZWN0LFxuLS1cbm5ldC9yZHMvTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX1JEU19UQ1ApICYjNDM7PSByZHNfdGNwLm9cbm5ldC9yZHMvTWFrZWZpbGU6MTQ6cmRzX3RjcC15IDo9XHRcdHRjcC5vIHRjcF9jb25uZWN0Lm8gdGNwX2xpc3Rlbi5vIHRjcF9yZWN2Lm8gXFxcbm5ldC9yZHMvTWFrZWZpbGUtMTUtXHRcdFx0dGNwX3NlbmQubyB0Y3Bfc3RhdHMub1xuLS1cbm5ldC9yZHMvdGNwLmM9NDc9c3RhdGljIExJU1RfSEVBRChyZHNfdGNwX3RjX2xpc3QpO1xubmV0L3Jkcy90Y3AuYy00OC1cbm5ldC9yZHMvdGNwLmM6NDk6LyogVHJhY2sgcmRzX3RjcF9jb25uZWN0aW9uIHN0cnVjdHMgc28gdGhleSBjYW4gYmUgY2xlYW5lZCB1cCAqL1xubmV0L3Jkcy90Y3AuYy01MC1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc190Y3BfY29ubl9sb2NrKTtcbi0tXG5uZXQvcmRzL3RjcC5jPTY0PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHJkc190Y3Bfc3lzY3RsX3RhYmxlW10gPSB7XG4tLVxubmV0L3Jkcy90Y3AuYy04NC1cbm5ldC9yZHMvdGNwLmM6ODU6dTMyIHJkc190Y3Bfd3JpdGVfc2VxKHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjKVxubmV0L3Jkcy90Y3AuYy04Ni17XG4tLVxubmV0L3Jkcy90Y3AuYy05MC1cbm5ldC9yZHMvdGNwLmM6OTE6dTMyIHJkc190Y3Bfc25kX3VuYShzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0Yylcbm5ldC9yZHMvdGNwLmMtOTIte1xuLS1cbm5ldC9yZHMvdGNwLmM9OTY9dm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQvcmRzL3RjcC5jOjk3Olx0XHRcdCAgICAgICBzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0Yylcbm5ldC9yZHMvdGNwLmMtOTgte1xuLS1cbm5ldC9yZHMvdGNwLmM9MTI2PXZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvcmRzL3RjcC5jLTEyOC17XG5uZXQvcmRzL3RjcC5jOjEyOTpcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XG5uZXQvcmRzL3RjcC5jLTEzMC1cdHN0cnVjdCBzb2NrZXQgKm9zb2NrID0gdGMtXHUwMDNldF9zb2NrO1xuLS1cbm5ldC9yZHMvdGNwLmM9MTgxPXZvaWQgcmRzX3RjcF9zZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvdGNwLmMtMTgyLXtcbm5ldC9yZHMvdGNwLmM6MTgzOlx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjcC1cdTAwM2VjcF90cmFuc3BvcnRfZGF0YTtcbm5ldC9yZHMvdGNwLmMtMTg0LVxuLS1cbm5ldC9yZHMvdGNwLmM9MjE5PXN0YXRpYyB2b2lkIHJkc190Y3BfdGNfaW5mbyhzdHJ1Y3Qgc29ja2V0ICpyZHNfc29jaywgdW5zaWduZWQgaW50IGxlbixcbi0tXG5uZXQvcmRzL3RjcC5jLTIyNC1cdHN0cnVjdCByZHNfaW5mb190Y3Bfc29ja2V0IHRzaW5mbztcbm5ldC9yZHMvdGNwLmM6MjI1Olx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGM7XG5uZXQvcmRzL3RjcC5jLTIyNi1cdHVuc2lnbmVkIGludCBjb3BpZWQgPSAwO1xuLS1cbm5ldC9yZHMvdGNwLmM9Mjg0PXN0YXRpYyB2b2lkIHJkczZfdGNwX3RjX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbixcbi0tXG5uZXQvcmRzL3RjcC5jLTI4OS1cdHN0cnVjdCByZHM2X2luZm9fdGNwX3NvY2tldCB0c2luZm82O1xubmV0L3Jkcy90Y3AuYzoyOTA6XHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0Yztcbm5ldC9yZHMvdGNwLmMtMjkxLVx0dW5zaWduZWQgaW50IGNvcGllZCA9IDA7XG4tLVxubmV0L3Jkcy90Y3AuYz0zODA9c3RhdGljIHZvaWQgcmRzX3RjcF9jb25uX2ZyZWUodm9pZCAqYXJnKVxubmV0L3Jkcy90Y3AuYy0zODEte1xubmV0L3Jkcy90Y3AuYzozODI6XHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGFyZztcbm5ldC9yZHMvdGNwLmMtMzgzLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5uZXQvcmRzL3RjcC5jPTM5NT1zdGF0aWMgaW50IHJkc190Y3BfY29ubl9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcClcbm5ldC9yZHMvdGNwLmMtMzk2LXtcbm5ldC9yZHMvdGNwLmM6Mzk3Olx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGM7XG5uZXQvcmRzL3RjcC5jLTM5OC1cdGludCBpLCBqO1xuLS1cbm5ldC9yZHMvdGNwLmM9NDM3PXN0YXRpYyBib29sIGxpc3RfaGFzX2Nvbm4oc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxubmV0L3Jkcy90Y3AuYy00Mzgte1xubmV0L3Jkcy90Y3AuYzo0Mzk6XHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YywgKl90Yztcbm5ldC9yZHMvdGNwLmMtNDQwLVxuLS1cbm5ldC9yZHMvdGNwLmM9NDU4PXN0YXRpYyB2b2lkIHJkc190Y3BfZGVzdHJveV9jb25ucyh2b2lkKVxubmV0L3Jkcy90Y3AuYy00NTkte1xubmV0L3Jkcy90Y3AuYzo0NjA6XHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YywgKl90Yztcbm5ldC9yZHMvdGNwLmMtNDYxLVx0TElTVF9IRUFEKHRtcF9saXN0KTtcbi0tXG5uZXQvcmRzL3RjcC5jPTYyOT1zdGF0aWMgdm9pZCByZHNfdGNwX2tpbGxfc29jayhzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvcmRzL3RjcC5jLTYzMC17XG5uZXQvcmRzL3RjcC5jOjYzMTpcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjLCAqX3RjO1xubmV0L3Jkcy90Y3AuYy02MzItXHRMSVNUX0hFQUQodG1wX2xpc3QpO1xuLS1cbm5ldC9yZHMvdGNwLmM9Njk0PXN0YXRpYyB2b2lkIHJkc190Y3Bfc3lzY3RsX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9yZHMvdGNwLmMtNjk1LXtcbm5ldC9yZHMvdGNwLmM6Njk2Olx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMsICpfdGM7XG5uZXQvcmRzL3RjcC5jLTY5Ny1cbi0tXG5uZXQvcmRzL3RjcC5jPTc2Nz1zdGF0aWMgaW50IF9faW5pdCByZHNfdGNwX2luaXQodm9pZClcbi0tXG5uZXQvcmRzL3RjcC5jLTc3MC1cbm5ldC9yZHMvdGNwLmM6NzcxOlx0cmRzX3RjcF9jb25uX3NsYWIgPSBLTUVNX0NBQ0hFKHJkc190Y3BfY29ubmVjdGlvbiwgMCk7XG5uZXQvcmRzL3RjcC5jLTc3Mi1cdGlmICghcmRzX3RjcF9jb25uX3NsYWIpIHtcbi0tXG5uZXQvcmRzL3RjcC5oPTIyPXN0cnVjdCByZHNfdGNwX2luY29taW5nIHtcbi0tXG5uZXQvcmRzL3RjcC5oLTI2LVxubmV0L3Jkcy90Y3AuaDoyNzpzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uIHtcbm5ldC9yZHMvdGNwLmgtMjgtXG4tLVxubmV0L3Jkcy90Y3AuaD02Mz1zdHJ1Y3QgcmRzX3RjcF9zdGF0aXN0aWNzIHtcbi0tXG5uZXQvcmRzL3RjcC5oLTY2LVx0dWludDY0X3RcdHNfdGNwX3NuZGJ1Zl9mdWxsO1xubmV0L3Jkcy90Y3AuaDo2NzpcdHVpbnQ2NF90XHRzX3RjcF9jb25uZWN0X3JhY2VkO1xubmV0L3Jkcy90Y3AuaC02OC1cdHVpbnQ2NF90XHRzX3RjcF9saXN0ZW5fY2xvc2VkX3N0YWxlO1xuLS1cbm5ldC9yZHMvdGNwLmg9NzY9dm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQvcmRzL3RjcC5oOjc3Olx0XHRcdCAgICAgICBzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0Yyk7XG5uZXQvcmRzL3RjcC5oOjc4OnUzMiByZHNfdGNwX3dyaXRlX3NlcShzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0Yyk7XG5uZXQvcmRzL3RjcC5oOjc5OnUzMiByZHNfdGNwX3NuZF91bmEoc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMpO1xubmV0L3Jkcy90Y3AuaC04MC1leHRlcm4gc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX3RjcF90cmFuc3BvcnQ7XG4tLVxubmV0L3Jkcy90Y3AuaD04Mj1pbnQgcmRzX3RjcF9sYWRkcl9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcixcbm5ldC9yZHMvdGNwLmgtODMtXHRcdFx0X191MzIgc2NvcGVfaWQpO1xubmV0L3Jkcy90Y3AuaDo4NDovKiB0Y3BfY29ubmVjdC5jICovXG5uZXQvcmRzL3RjcC5oLTg1LWludCByZHNfdGNwX2Nvbm5fcGF0aF9jb25uZWN0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XG4tLVxubmV0L3Jkcy90Y3BfY29ubmVjdC5jPTQwPXZvaWQgcmRzX3RjcF9zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYy00My1cdHN0cnVjdCByZHNfY29ubl9wYXRoICpjcDtcbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYzo0NDpcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjO1xubmV0L3Jkcy90Y3BfY29ubmVjdC5jLTQ1LVxuLS1cbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYz05OD1pbnQgcmRzX3RjcF9jb25uX3BhdGhfY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4tLVxubmV0L3Jkcy90Y3BfY29ubmVjdC5jLTEwOS1cdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNwLVx1MDAzZWNwX2Nvbm47XG5uZXQvcmRzL3RjcF9jb25uZWN0LmM6MTEwOlx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjcC1cdTAwM2VjcF90cmFuc3BvcnRfZGF0YTtcbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYy0xMTEtXG4tLVxubmV0L3Jkcy90Y3BfY29ubmVjdC5jPTIzMz12b2lkIHJkc190Y3BfY29ubl9wYXRoX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYy0yMzQte1xubmV0L3Jkcy90Y3BfY29ubmVjdC5jOjIzNTpcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XG5uZXQvcmRzL3RjcF9jb25uZWN0LmMtMjM2LVx0c3RydWN0IHNvY2tldCAqc29jayA9IHRjLVx1MDAzZXRfc29jaztcbi0tXG5uZXQvcmRzL3RjcF9saXN0ZW4uYz02MD1yZHNfdGNwX2dldF9wZWVyX3Nwb3J0KHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtNzUtICovXG5uZXQvcmRzL3RjcF9saXN0ZW4uYzo3NjpzdGF0aWMgc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy03Ny1yZHNfdGNwX2FjY2VwdF9vbmVfcGF0aChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3Jkcy90Y3BfbGlzdGVuLmM9MTA4PXZvaWQgcmRzX3RjcF9jb25uX3Nsb3RzX2F2YWlsYWJsZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGJvb2wgZmFuX291dClcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTEwOS17XG5uZXQvcmRzL3RjcF9saXN0ZW4uYzoxMTA6XHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0Yztcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTExMS1cdHN0cnVjdCByZHNfdGNwX25ldCAqcnRuO1xuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jPTE1Mj1pbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTE1OC1cdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG5uZXQvcmRzL3RjcF9saXN0ZW4uYzoxNTk6XHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICpyc190Y3AgPSBOVUxMO1xubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMTYwLVx0aW50IGNvbm5fc3RhdGU7XG4tLVxubmV0L3Jkcy90Y3BfcmVjdi5jPTE1NT1zdGF0aWMgaW50IHJkc190Y3BfZGF0YV9yZWN2KHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9yZHMvdGNwX3JlY3YuYy0xNTktXHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3AgPSBhcmctXHUwMDNlY29ubl9wYXRoO1xubmV0L3Jkcy90Y3BfcmVjdi5jOjE2MDpcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XG5uZXQvcmRzL3RjcF9yZWN2LmMtMTYxLVx0c3RydWN0IHJkc190Y3BfaW5jb21pbmcgKnRpbmMgPSB0Yy1cdTAwM2V0X3RpbmM7XG4tLVxubmV0L3Jkcy90Y3BfcmVjdi5jPTI2Mz1zdGF0aWMgaW50IHJkc190Y3BfcmVhZF9zb2NrKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCwgZ2ZwX3QgZ2ZwKVxubmV0L3Jkcy90Y3BfcmVjdi5jLTI2NC17XG5uZXQvcmRzL3RjcF9yZWN2LmM6MjY1Olx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjcC1cdTAwM2VjcF90cmFuc3BvcnRfZGF0YTtcbm5ldC9yZHMvdGNwX3JlY3YuYy0yNjYtXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gdGMtXHUwMDNldF9zb2NrO1xuLS1cbm5ldC9yZHMvdGNwX3JlY3YuYz0yOTU9aW50IHJkc190Y3BfcmVjdl9wYXRoKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvdGNwX3JlY3YuYy0yOTYte1xubmV0L3Jkcy90Y3BfcmVjdi5jOjI5NzpcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XG5uZXQvcmRzL3RjcF9yZWN2LmMtMjk4LVx0c3RydWN0IHNvY2tldCAqc29jayA9IHRjLVx1MDAzZXRfc29jaztcbi0tXG5uZXQvcmRzL3RjcF9yZWN2LmM9MzExPXZvaWQgcmRzX3RjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvcmRzL3RjcF9yZWN2LmMtMzE0LVx0c3RydWN0IHJkc19jb25uX3BhdGggKmNwO1xubmV0L3Jkcy90Y3BfcmVjdi5jOjMxNTpcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjO1xubmV0L3Jkcy90Y3BfcmVjdi5jLTMxNi1cbi0tXG5uZXQvcmRzL3RjcF9zZW5kLmM9NDE9dm9pZCByZHNfdGNwX3htaXRfcGF0aF9wcmVwYXJlKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvdGNwX3NlbmQuYy00Mi17XG5uZXQvcmRzL3RjcF9zZW5kLmM6NDM6XHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLVx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xubmV0L3Jkcy90Y3Bfc2VuZC5jLTQ0LVxuLS1cbm5ldC9yZHMvdGNwX3NlbmQuYz00OD12b2lkIHJkc190Y3BfeG1pdF9wYXRoX2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvdGNwX3NlbmQuYy00OS17XG5uZXQvcmRzL3RjcF9zZW5kLmM6NTA6XHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLVx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xubmV0L3Jkcy90Y3Bfc2VuZC5jLTUxLVxuLS1cbm5ldC9yZHMvdGNwX3NlbmQuYz03MD1pbnQgcmRzX3RjcF94bWl0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbi0tXG5uZXQvcmRzL3RjcF9zZW5kLmMtNzMtXHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3AgPSBybS1cdTAwM2VtX2luYy5pX2Nvbm5fcGF0aDtcbm5ldC9yZHMvdGNwX3NlbmQuYzo3NDpcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XG5uZXQvcmRzL3RjcF9zZW5kLmMtNzUtXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHt9O1xuLS1cbm5ldC9yZHMvdGNwX3NlbmQuYz0xNzk9dm9pZCByZHNfdGNwX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvcmRzL3RjcF9zZW5kLmMtMTgyLVx0c3RydWN0IHJkc19jb25uX3BhdGggKmNwO1xubmV0L3Jkcy90Y3Bfc2VuZC5jOjE4MzpcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjO1xubmV0L3Jkcy90Y3Bfc2VuZC5jLTE4NC1cbi0tXG5uZXQvcmRzL3RjcF9zdGF0cy5jPTQzPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmRzX3RjcF9zdGF0X25hbWVzW10gPSB7XG4tLVxubmV0L3Jkcy90Y3Bfc3RhdHMuYy00Ni1cdFwmIzM0O3RjcF9zbmRidWZfZnVsbFwmIzM0Oyxcbm5ldC9yZHMvdGNwX3N0YXRzLmM6NDc6XHRcJiMzNDt0Y3BfY29ubmVjdF9yYWNlZFwmIzM0Oyxcbm5ldC9yZHMvdGNwX3N0YXRzLmMtNDgtXHRcJiMzNDt0Y3BfbGlzdGVuX2Nsb3NlZF9zdGFsZVwmIzM0Oyxcbi0tXG5zYW1wbGVzL2xhbmRsb2NrL3NhbmRib3hlci5jPTMxMz1zdGF0aWMgaW50IGFkZF9xdWlldF9hY2Nlc3MoY29uc3QgY2hhciAqY29uc3QgZW52X3Zhcixcbi0tXG5zYW1wbGVzL2xhbmRsb2NrL3NhbmRib3hlci5jLTM0Mi1cdFx0XHRcdExBTkRMT0NLX0FDQ0VTU19ORVRfQklORF9UQ1A7XG5zYW1wbGVzL2xhbmRsb2NrL3NhbmRib3hlci5jOjM0MzpcdFx0ZWxzZSBpZiAoc3RyY21wKHN0cl9hY2Nlc3MsIFwmIzM0O3RjcF9jb25uZWN0XCYjMzQ7KSA9PSAwKVxuc2FtcGxlcy9sYW5kbG9jay9zYW5kYm94ZXIuYy0zNDQtXHRcdFx0cnVsZXNldF9hdHRyLVx1MDAzZXF1aWV0X2FjY2Vzc19uZXQgfD1cbi0tXG5zYW1wbGVzL2xhbmRsb2NrL3NhbmRib3hlci5jPTM3OT1zdGF0aWMgY29uc3QgY2hhciBoZWxwW10gPVxuLS1cbnNhbXBsZXMvbGFuZGxvY2svc2FuZGJveGVyLmMtNDEzLVx0XCYjMzQ7ICAtIFxcXCYjMzQ7dGNwX2JpbmRcXFwmIzM0OyB0byBxdWlldCB0Y3AgYmluZCBkZW5pYWxzXFxuXCYjMzQ7XG5zYW1wbGVzL2xhbmRsb2NrL3NhbmRib3hlci5jOjQxNDpcdFwmIzM0OyAgLSBcXFwmIzM0O3RjcF9jb25uZWN0XFxcJiMzNDsgdG8gcXVpZXQgdGNwIGNvbm5lY3QgZGVuaWFsc1xcblwmIzM0O1xuc2FtcGxlcy9sYW5kbG9jay9zYW5kYm94ZXIuYy00MTUtXHRcJiMzNDsgIC0gXFxcJiMzNDt1ZHBfYmluZFxcXCYjMzQ7IHRvIHF1aWV0IHVkcCBiaW5kIGRlbmlhbHNcXG5cJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19zdG9yYWdlX3RyYWNpbmcuYz03MT1pbnQgQlBGX1BST0codHJhY2VfaW5ldF9jc2tfbGlzdGVuX3N0YXJ0LCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfc3RvcmFnZV90cmFjaW5nLmMtNzctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19zdG9yYWdlX3RyYWNpbmcuYzo3ODpTRUMoXCYjMzQ7ZmVudHJ5L3RjcF9jb25uZWN0XCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfc3RvcmFnZV90cmFjaW5nLmM6Nzk6aW50IEJQRl9QUk9HKHRyYWNlX3RjcF9jb25uZWN0LCBzdHJ1Y3Qgc29jayAqc2spXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19zdG9yYWdlX3RyYWNpbmcuYy04MC17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jPTg5PXN0YXRpYyBpbnQgdGNwX2xpc3Rlbih2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYy0xMDctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmM6MTA4OnN0YXRpYyB2b2lkIHRjcF9jb25uZWN0KGludCBsaXN0ZW5lciwgdWludDMyX3QgZmxvd2xhYmVsLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jLTEwOS1cdFx0XHRpbnQgKmNsaWVudCwgaW50ICphY2NlcHRlZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmM9NDUwPVRFU1RfRihmbG93bGFiZWwsIHJlbW90ZV9mbGFnKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYy00NjItXHRsaXN0ZW5lciA9IHRjcF9saXN0ZW4oKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYzo0NjM6XHR0Y3BfY29ubmVjdChsaXN0ZW5lciwgNywgXHUwMDI2Y2ZkLCBcdTAwMjZhZmQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jLTQ2NC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmM9NDkyPVRFU1RfRihmbG93bGFiZWwsIHJlZmxlY3RfZmxhZylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMtNTIwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jOjUyMTpcdHRjcF9jb25uZWN0KGxpc3RlbmVyLCA4LCBcdTAwMjZjZmQsIFx1MDAyNmFmZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMtNTIyLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC8uZ2l0aWdub3JlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvLmdpdGlnbm9yZToyOm1wdGNwX2Nvbm5lY3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC8uZ2l0aWdub3JlLTMtbXB0Y3BfZGlhZ1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9NYWtlZmlsZT04PVRFU1RfUFJPR1MgOj0gXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9NYWtlZmlsZS05LVx0ZGlhZy5zaCBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlOjEwOlx0bXB0Y3BfY29ubmVjdC5zaCBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlOjExOlx0bXB0Y3BfY29ubmVjdF9jaGVja3N1bS5zaCBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlOjEyOlx0bXB0Y3BfY29ubmVjdF9tbWFwLnNoIFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvTWFrZWZpbGU6MTM6XHRtcHRjcF9jb25uZWN0X3NlbmRmaWxlLnNoIFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvTWFrZWZpbGU6MTQ6XHRtcHRjcF9jb25uZWN0X3NwbGljZS5zaCBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlLTE1LVx0bXB0Y3Bfam9pbi5zaCBcXFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9NYWtlZmlsZT0yMj1URVNUX0dFTl9GSUxFUyA6PSBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlOjIzOlx0bXB0Y3BfY29ubmVjdCBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlLTI0LVx0bXB0Y3BfZGlhZyBcXFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9kaWFnLnNoPTE2PWZsdXNoX3BpZHMoKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2gtMTcte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2g6MTg6XHQjIG1wdGNwX2Nvbm5lY3QgaW4gam9pbiBtb2RlIHdpbGwgc2xlZXAgYSBiaXQgYmVmb3JlIGNvbXBsZXRpbmcsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaC0xOS1cdCMgZ2l2ZSBpdCBzb21lIHRpbWVcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaD0zNTU9ZWNobyBcJiMzNDthXCYjMzQ7IHwgXFxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaC0zNTctXHRcdGlwIG5ldG5zIGV4ZWMgJG5zIFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaDozNTg6XHRcdFx0Li9tcHRjcF9jb25uZWN0IC1wIDEwMDAwIC1sIC10ICR7dGltZW91dF9wb2xsfSAtdyAyMCBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2gtMzU5LVx0XHRcdFx0MC4wLjAuMCBcdTAwM2UvZGV2L251bGwgXHUwMDI2XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2g9MzY0PWVjaG8gXCYjMzQ7YlwmIzM0OyB8IFxcXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2gtMzY2LVx0XHRpcCBuZXRucyBleGVjICRucyBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2g6MzY3Olx0XHRcdC4vbXB0Y3BfY29ubmVjdCAtcCAxMDAwMCAtciAwIC10ICR7dGltZW91dF9wb2xsfSAtdyAyMCBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2gtMzY4LVx0XHRcdFx0MTI3LjAuMC4xIFx1MDAzZS9kZXYvbnVsbCBcdTAwMjZcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaD0zODQ9ZWNobyBcJiMzNDthXCYjMzQ7IHwgXFxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaC0zODYtXHRcdGlwIG5ldG5zIGV4ZWMgJG5zIFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaDozODc6XHRcdFx0Li9tcHRjcF9jb25uZWN0IC1wIDEwMDAxIC1sIC1zIFRDUCAtdCAke3RpbWVvdXRfcG9sbH0gLXcgMjAgXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9kaWFnLnNoLTM4OC1cdFx0XHRcdDAuMC4wLjAgXHUwMDNlL2Rldi9udWxsIFx1MDAyNlxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTY2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBgdGNwX2Nvbm5lY3RgIGlzIGV4cG9ydGVkLCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGB0Y3BfY29ubmVjdGAsIGB0Y3BfbWFrZV9zeW5hY2tgLCBhbmQgYHRjcF92NF9zeW5fcmVjdl9zb2NrYC4gTGV0JiMzOTtzIGNsYXJpZnkgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYCBzaW5jZSBpdCYjMzk7cyBzdGF0aWMgYW5kIHNob3VsZG4mIzM5O3QgYmUgZXhwb3J0ZWQsIHdoaWNoIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcuIE9oLCBidXQgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBpcyBleHBvcnRlZCwgaW50ZXJlc3RpbmcuIE5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHN0YXRpYyBuYXR1cmUgb2YgYHRjcF9jb25uZWN0X2luaXRgIGFnYWluLCBnb29kLiBBbmQgdGhlIHN0YXR1cyBvZiBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgLCB0aGV5IGFyZSBzdGF0aWMgaW5saW5lIGFzIGV4cGVjdGVkLiBXaGF0IGFib3V0IGBpcHY0X2RlZmF1bHRfYWR2bXNzYCBhbmQgYGlwNl9kZWZhdWx0X2Fkdm1zc2A/IFRoZXkgYXJlIHN0YXRpYywgZ290IGl0LgoKVGltZSB0byBsb29rIGF0IHRoZSBjb25maWcgb3B0aW9ucy4gVGhlIG1vZGlmaWNhdGlvbnMgYXJlIGluIGBuZXQvaXB2NC9yb3V0ZS5jYCBhbmQgYG5ldC9pcHY2L3JvdXRlLmNgLCB3aGljaCBpcyBjb3JlIElQdjQgYW5kIElQdjYgcm91dGluZy4gSSYjMzk7bGwgbmVlZCBgQ09ORklHX0lORVRgIGZvciBJUHY0IGFuZCBgQ09ORklHX0lQVjZgIGZvciBJUHY2LiBTaW5jZSBpdCYjMzk7cyBjb3JlIG5ldHdvcmtpbmcsIHRoZXJlIHNob3VsZG4mIzM5O3QgYmUgYW55IHVudXN1YWwgY29uZmlnIGRlcGVuZGVuY2llcyBiZXlvbmQgdGhlIHN0YW5kYXJkIG9uZXMgcmVxdWlyZWQgZm9yIElQdjQvSVB2NiBzdXBwb3J0LgoKTm93LCBsZXQmIzM5O3MgcmUtZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLiBJIHNlZSB0aGF0IGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAgYXJlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBjYWxsZWQgZnJvbSBgaXB2NF9kZWZhdWx0X2Fkdm1zc2AgYW5kIGBpcDZfZGVmYXVsdF9hZHZtc3NgLCB3aGljaCBhcmUgYXNzaWduZWQgdG8gYGRzdF9vcHMtJmd0O2RlZmF1bHRfYWR2bXNzYC4gYGRzdF9tZXRyaWNfYWR2bXNzYCBjYWxscyBgZHN0LSZndDtvcHMtJmd0O2RlZmF1bHRfYWR2bXNzKGRzdClgLiBUaGVzZSBhcmUgdGhlbiBjYWxsZWQgZnJvbSBgdGNwX2Nvbm5lY3RfaW5pdGAsIGB0Y3BfYWR2ZXJ0aXNlX21zc2AsIGB0Y3BfbWFrZV9zeW5hY2tgLCBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgLCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gVGhpcyByZWluZm9yY2VzIG15IGluaXRpYWwgYXNzZXNzbWVudCB0aGF0IGB0Y3BfY29ubmVjdGAsIGB0Y3BfbWFrZV9zeW5hY2tgLCBhbmQgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9sbG93LiBKdXN0IGNvbmZpcm1pbmcgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBpcyBleHBvcnRlZC4uLiBhbmQgeWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnRjcF92NF9zeW5fcmVjdl9zb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0NzAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsbHkgSGlkZGVuIFN5bWJvbCoqCgpIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEkmIzM5O20gbG9va2luZyBhdCBhIGZ1bmN0aW9uIHRoYXQgaXNuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTGAsIHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQmIzM5O3MgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhlIG1vZHVsZSBvciBrZXJuZWwgaXQmIzM5O3MgZGVmaW5lZCBpbi4gSG93ZXZlciwgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAqbm90KiBkZWNsYXJlZCBhcyBgc3RhdGljYCBpcyByYWlzaW5nIGEgZmxhZy4gSWYgaXQgd2VyZW4mIzM5O3QgYHN0YXRpY2AsIGJ1dCBhbHNvICpub3QqIGV4cG9ydGVkLCBob3cgaXMgaXQgaW50ZW5kZWQgdG8gYmUgdXNlZD8KCk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiwgd2hhdGV2ZXIgaXQgaXMsIGlzIGJlaW5nIGNhbGxlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gZXhhbWluaW5nIGB0Y3BfbWFrZV9zeW5hY2tgLiBJdCYjMzk7cyBhIGNvbW1vbiBhcmVhIGZvciB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGFzIGl0cyBuYW1lIHN1Z2dlc3RzIGl0IHdvdWxkIGNvbnN0cnVjdCBhIFNZTi1BQ0sgcGFja2V0LCBhbmQgdGhhdCBtYWtlcyBpdCBhIHByaW1lIHN1c3BlY3QgZm9yIGFuIHVuZXhwZWN0ZWQgY2FsbC4gSSYjMzk7bSBiZXR0aW5nIHRoYXQmIzM5O2xsIHlpZWxkIHNvbWUgaW5zaWdodHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdGNwX21ha2Vfc3luYWNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3NTEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06CgoqKkRpZ2dpbmcgaW50byBhIE5vbi1FeHBvcnRlZCBTeW1ib2wqKgoKT2theSwgc28gdGhpcyBzeW1ib2wgaXNuJiMzOTt0IGV4cG9ydGVkIHdpdGggYEVYUE9SVF9TWU1CT0xgLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoYXQgbGlrZWx5IG1lYW5zIGl0JiMzOTtzIGludGVuZGVkIGZvciBpbnRlcm5hbCBrZXJuZWwgdXNlLCBub3QgZGlyZWN0IG1vZHVsZSBhY2Nlc3MuIEJ1dCBpdCYjMzk7cyAqYWxzbyogbm90IGBzdGF0aWNgLCBzbyBpdCYjMzk7cyB0ZWNobmljYWxseSB2aXNpYmxlIHdpdGhpbiB0aGUgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggb2ZmZXJzIHNvbWUgY2x1ZXMgYWJvdXQgaXRzIHNjb3BlLiBUaW1lIHRvIGRpZyBkZWVwZXIsIHN0YXJ0aW5nIHdpdGggYSBjcnVjaWFsIGZ1bmN0aW9uIOKAkyBsZXQmIzM5O3MgY2hlY2sgYHRjcF9jb25uZWN0YC4gVGhhdCYjMzk7cyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgbmV0d29yayBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIHdoZXJlIHRoaXMgbm9uLWV4cG9ydGVkIHN5bWJvbCBtaWdodCBmaXQgaW4uIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCB0aGlzIHN5bWJvbCByZWxhdGVzIHRvIFRDUCBzb2NrZXQgY29ubmVjdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZSBpZiBteSBodW5jaCBob2xkcyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdGNwX2Nvbm5lY3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX291dHB1dC5jPTQyOTg9aW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQwMy19XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDQwNDpFWFBPUlRfU1lNQk9MKHRjcF9jb25uZWN0KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00NDA1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzA2MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVENQIENvbm5lY3Rpb24gRnVuY3Rpb24gRXhwbG9yYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgdGNwX2Nvbm5lY3RgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQgYW5kIGF2YWlsYWJsZSBmb3IgdXNlLiBUaGF0JiMzOTtzIGFzIGV4cGVjdGVkLiBOb3csIEkgbmVlZCB0byBjb25zaWRlciBJUHY2IGNvbXBhdGliaWxpdHkgYW5kIHdoYXQgdGhlIGVxdWl2YWxlbnQgZnVuY3Rpb24gaXMuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGUgc3lzdGVtIGxldmVyYWdlIGEgc2VwYXJhdGUsIGV4cGxpY2l0bHkgSVB2Ni1zcGVjaWZpYyBmdW5jdGlvbiBsaWtlIGB0Y3BfdjZfY29ubmVjdGAsIG9yIGlzIHRoaXMgZnVuY3Rpb25hbGl0eSBoYW5kbGVkIHdpdGhpbiBgdGNwX2Nvbm5lY3RgPyBJdCYjMzk7cyBsaWtlbHkgSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIHRvIGRldGVybWluZSBob3cgdGhpcyBpcyBkb25lIGFuZCBpZiB0aGlzIGlzIGEgcGxhdGZvcm0tc3BlY2lmaWMgY29uc2lkZXJhdGlvbi4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuLCBhbmQgdGhlIG51YW5jZXMgb2YgdGhlIGltcGxlbWVudGF0aW9uIHdpbGwgZ3VpZGUgd2hhdCBJIGNhbiBkbyBmcm9tIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdGNwX3Y2X2Nvbm5lY3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzI3NAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ29uc2lkZXJpbmcgYHRjcF92NF9jb25uZWN0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHdoYXQmIzM5O3Mgb24gdGhlIHRhYmxlIG5vdz8gV2UmIzM5O3JlIGFkZHJlc3Npbmcgc29tZSBuZXR3b3JraW5nIGlzc3VlLCBwcm9iYWJseSByZWxhdGVkIHRvIGVzdGFibGlzaGluZyBjb25uZWN0aW9ucywgYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHRjcF92NF9jb25uZWN0YC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbiwgcmlnaHQ/IEEgY29yZSBidWlsZGluZyBibG9jayBmb3IgYW55IFRDUC9JUC1iYXNlZCBhcHBsaWNhdGlvbi4gVGhpcyBpbXBsaWVzIHRoZSBjdXJyZW50IGNoYWxsZW5nZSBsaWtlbHkgYm9pbHMgZG93biB0byAqaG93KiBhIGNvbm5lY3Rpb24gaXMgYmVpbmcgYXR0ZW1wdGVkLCBvciBwZXJoYXBzIGlzc3VlcyBzdXJyb3VuZGluZyAqd2hlbiogYW5kICp3aGVyZSouIEFyZSB0aGVyZSBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBzb2NrZXQgY3JlYXRpb24sIHRoZSBpbml0aWFsIGhhbmRzaGFrZSwgb3IgZXZlbiB0aGUgc3Vic2VxdWVudCBkYXRhIGZsb3cgb25jZSBhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQ/CgpLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRoZSBpc3N1ZSwgd2hhdCBzcGVjaWZpY2FsbHkgaXMgdHJpcHBpbmcgdGhlIGZ1bmN0aW9uIHVwPyBDb3VsZCB0aGVyZSBiZSBhIHByb2JsZW0gd2l0aCB0aGUgYXJndW1lbnRzIGJlaW5nIHBhc3NlZD8gVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZmFtaWx5IChBRl9JTkVUKSwgdGhlIHByb3RvY29sIHR5cGUgKFNPQ0tfU1RSRUFNKT8gUGVyaGFwcyBhbiBpc3N1ZSB3aXRoIHRoZSBsb2NhbCBwb3J0IGJpbmRpbmcgb24gdGhlIGNsaWVudCBzaWRlLCBvciBldmVuIGZpcmV3YWxsIGNvbmZpZ3VyYXRpb25zPyBJcyBpdCB0aGUgKnN5c3RlbSBjYWxsKiBpdHNlbGYsIG9yIHNvbWV0aGluZyBpdCBkZXBlbmRzIHVwb24sIHRoYXTigJlzIGZhaWxpbmc/IEkgbmVlZCB0byBhbmFseXplIHRoaXMgZnVydGhlci4gYHRjcF92NF9jb25uZWN0YCBpcyBhIGNsYXNzaWMgY2FzZSBzdHVkeSBvZiBwcm90b2NvbCBvcGVyYXRpb24gYW5kIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBpbiBhIFRDUC9JUCBuZXR3b3JrLCBhIGZ1bmN0aW9uIHRoYXQgd2FycmFudHMgY2xvc2UgZXhhbWluYXRpb24gaWYgYSBjb25uZWN0aW9uIGlzIG5vdCBzdWNjZXNzZnVsbHkgZXN0YWJsaXNoZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdGNwX3Y0X2Nvbm5lY3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYxNAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgdGhlIGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AgU3ltYm9sKioKCkFscmlnaHQsIHRoZSBjb3JlIGlzc3VlIGlzIHdoZXRoZXIgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBvciBub3QuIEl0JiMzOTtzIGNydWNpYWwgZm9yIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgY29kZSBvcGVyYXRlcy4gVGhlIGtleSB0YWtlYXdheSBpczogaWYgaXQmIzM5O3MgKm5vdCogc3RhdGljLCB0aGVuIGl0JiMzOTtsbCBoYXZlIGl0cyBvd24gc3BlY2lmaWMsIHVuaXF1ZSBzeW1ib2wgYWRkcmVzcy4gVGhhdCYjMzk7cyBnb29kOyBpdCBtZWFucyBJIGNhbiB0cmFjZSBpdCBtb3JlIHJlYWRpbHkuCgpTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IGl0cyBkZWNsYXJhdGlvbi4gSSBuZWVkIHRvIHZlcmlmeSBpdHMgbG9jYXRpb24sIGFuZCBtYWtlIHN1cmUgaXQmIzM5O3MgaW4gdGhlIHVzdWFsIHBsYWNlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIGl0cyBkZWZpbml0aW9uIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2lwdjQuY2AuIEkgZXhwZWN0IHRvIGZpbmQgaXQgdGhlcmUsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGNvbW1vbiBsb2NhdGlvbiwgYnV0IEkmIzM5O20gbm90IGdvaW5nIHRvIGFzc3VtZSBhbnl0aGluZy4gQ2hlY2tpbmcgaXQgaXMgdGhlIGJlc3Qgc3RlcCB0byBkbyBhdCB0aGlzIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc29jayBcXCp0Y3BfdjRfc3luX3JlY3Zfc29jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD01NjA9dm9pZCB0Y3BfY2Ffb3BlbnJlcV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7XG5pbmNsdWRlL25ldC90Y3AuaDo1NjE6c3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L3RjcC5oLTU2Mi1cdFx0XHRcdCAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MTY1NT1pbnQgdGNwX3Y0X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNjczLSAqL1xubmV0L2lwdjQvdGNwX2lwdjQuYzoxNjc0OnN0cnVjdCBzb2NrICp0Y3BfdjRfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE2NzUtXHRcdFx0XHQgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxNTYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBkc3RfbWV0cmljX2Fkdm1zc2AgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIHJpZ2h0IGZ1bmN0aW9uIGhlcmUuIE5vdywgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIHRoaXMgYGRzdF9tZXRyaWNfYWR2bXNzYCBpcyBiZWluZyB1c2VkIGluIHRoZSBzeXN0ZW0sIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bGwgY29udGV4dC4gTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2Nhbi4gQWgsIGdvb2QsIHRoZSBjb2RlIHNlYXJjaCB0dXJucyB1cCBhIGZldyBpbnRlcmVzdGluZyBjYWxscy4gYGN4Z2JpX3NvY2tfc2VsZWN0X21zc2AgaW4gdGhlIENYR0JJIFNDU0kgZHJpdmVyLCBgdGNwX29wZW5yZXFfaW5pdF9yd2luYCBpbiB0aGUgVENQIGluaXRpYWxpemF0aW9uLCBhbmQgYHhmcm1fZGVmYXVsdF9hZHZtc3NgIHdpdGhpbiB0aGUgSVBzZWMgZnJhbWV3b3JrLiBUaGF0IGdpdmVzIG1lIGEgbXVjaCBiZXR0ZXIgcGljdHVyZS4gUmlnaHQsIG5leHQgSSYjMzk7bGwgZm9jdXMgb24gYHRjcF9vcGVucmVxX2luaXRfcndpbmAsIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3Bfb3BlbnJlcV9pbml0X3J3aW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9MTgyMz1zdGF0aWMgaW5saW5lIGJvb2wgdGNwX2Vwb2xsaW5fcmVhZHkoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBpbnQgdGFyZ2V0KVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTE4MzQtXG5pbmNsdWRlL25ldC90Y3AuaDoxODM1OmV4dGVybiB2b2lkIHRjcF9vcGVucmVxX2luaXRfcndpbihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG5pbmNsdWRlL25ldC90Y3AuaC0xODM2LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzYyMD1pbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzU5LVx0dGNwX3JzayhyZXEpLVx1MDAzZXN5bl90b3MgPSBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlaXBfZHNmaWVsZDtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc3NjA6XHR0Y3Bfb3BlbnJlcV9pbml0X3J3aW4ocmVxLCBzaywgZHN0KTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3NjEtXHRza19yeF9xdWV1ZV9zZXQocmVxX3RvX3NrKHJlcSksIHNrYik7XG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTQxMj12b2lkIHRjcF90d3NrX3B1cmdlKHN0cnVjdCBsaXN0X2hlYWQgKm5ldF9leGl0X2xpc3QpXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQzMC0gKi9cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo0MzE6dm9pZCB0Y3Bfb3BlbnJlcV9pbml0X3J3aW4oc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQzMi1cdFx0XHQgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODcwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbm5lciBtb25vbG9ndWU6CgoqKkZvY3VzaW5nIG9uIFRDUCBDb25uZWN0aW9uIEluaXRpYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHpvb20gaW4uIEl0JiMzOTtzIGNsZWFyIHRoYXQgYHRjcF9vcGVucmVxX2luaXRfcndpbmAgaXMgZGlyZWN0bHkgaW52b2tlZCBieSBgdGNwX2Nvbm5fcmVxdWVzdGAuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yLiBgdGNwX2Nvbm5fcmVxdWVzdGAgaXRzZWxmIHNlZW1zIHRvIGJlIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50LCB0aGUgcmVhbCBoZWFydCBvZiB0aGUgY29ubmVjdGlvbiBpbml0aWF0aW9uIHByb2Nlc3MuIEl0JiMzOTtzIHRoZSByaWdodCBwbGFjZSB0byBwdXQgb3VyIGF0dGVudGlvbiwgdG8gZGlzc2VjdCB0aGUgb3JjaGVzdHJhdGlvbiBvZiBldmVudHMgYW5kIHVuZGVyc3RhbmQgaG93IGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIHRvIHJlY2VpdmUgZGF0YS4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSByZWNlaXZlIHdpbmRvdyBpbml0aWFsaXphdGlvbiBpcyBkb25lIHJpZ2h0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjb25uZWN0aW9uIHNldHVwLCBiZWZvcmUgbXVjaCBlbHNlIGlzIGhhbmRsZWQsIHdoaWNoIG1ha2VzIGxvZ2ljYWwgc2Vuc2UsIGluIHRlcm1zIG9mIHJlc291cmNlIHByZXBhcmF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoYXQgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBhbmQgaG93IHRoZSBgcndpbmAgaXMgaGFuZGxlZCBoZXJlIHdpbGwgdGVsbCB1cyBhIGxvdCBhYm91dCB0aGUgb3ZlcmFsbCBjb25uZWN0aW9uIHN0cmF0ZWd5LiBXZSBuZWVkIHRvIGZvbGxvdyB0aGUgZXhlY3V0aW9uIHBhdGggY2xvc2VseSBmcm9tIHRoaXMgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9jb25uX3JlcXVlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9MjQ2Nz1pbnQgdGNwX3J0eF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuaW5jbHVkZS9uZXQvdGNwLmg6MjQ2ODppbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcbmluY2x1ZGUvbmV0L3RjcC5oLTI0NjktXHRcdCAgICAgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzICphZl9vcHMsXG4tLVxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM9MzI2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMzgwLVx0dHAtXHUwMDNlcmN2X213bmRfc2VxID0gdHAtXHUwMDNlcmN2X3d1cCAmIzQzOyB0cC1cdTAwM2VyY3Zfd25kO1xubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM6MzgxOlx0LyogdGNwX2Nvbm5fcmVxdWVzdCgpIGlzIHNlbmRpbmcgdGhlIFNZTkFDSyxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTM4Mi1cdCAqIGFuZCBxdWV1ZXMgdGhlIGNoaWxkIGludG8gbGlzdGVuZXIgYWNjZXB0IHF1ZXVlLlxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc1OTQ9dTE2IHRjcF9nZXRfc3luY29va2llX21zcyhzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjE5LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzYyMDppbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2MjEtXHRcdCAgICAgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzICphZl9vcHMsXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0xNjU1PWludCB0Y3BfdjRfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE2NjAtXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE2NjE6XHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX29wcyxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTY2Mi1cdFx0XHRcdFx1MDAyNnRjcF9yZXF1ZXN0X3NvY2tfaXB2NF9vcHMsIHNrLCBza2IpO1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTMxNj1zdGF0aWMgaW50IHRjcF92Nl9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTMyOC1cbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTMyOTpcdHJldHVybiB0Y3BfY29ubl9yZXF1ZXN0KFx1MDAyNnRjcDZfcmVxdWVzdF9zb2NrX29wcyxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTMzMC1cdFx0XHRcdFx1MDAyNnRjcF9yZXF1ZXN0X3NvY2tfaXB2Nl9vcHMsIHNrLCBza2IpO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NjY5PXN0YXRpYyBpbnQgc3ViZmxvd192NF9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNjc4LVxubmV0L21wdGNwL3N1YmZsb3cuYzo2Nzk6XHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcdTAwMjZtcHRjcF9zdWJmbG93X3Y0X3JlcXVlc3Rfc29ja19vcHMsXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY4MC1cdFx0XHRcdFx1MDAyNnN1YmZsb3dfcmVxdWVzdF9zb2NrX2lwdjRfb3BzLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NzAwPXN0YXRpYyBpbnQgc3ViZmxvd192Nl9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNzE2LVxubmV0L21wdGNwL3N1YmZsb3cuYzo3MTc6XHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcdTAwMjZtcHRjcF9zdWJmbG93X3Y2X3JlcXVlc3Rfc29ja19vcHMsXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTcxOC1cdFx0XHRcdFx1MDAyNnN1YmZsb3dfcmVxdWVzdF9zb2NrX2lwdjZfb3BzLCBzaywgc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwNDQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVENQIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgVENQIGNvbm5lY3Rpb24gcHJvY2Vzcy4gYHRjcF9jb25uX3JlcXVlc3RgIGltbWVkaWF0ZWx5IGp1bXBzIG91dC4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIHRoZSBpbmNvbWluZyBTWU4gcGFja2V0cyBhcmUgcHJvY2Vzc2VkLCBhbmQgaXQgaGFuZGxlcyB0aGUgaW5pdGlhbCByZXF1ZXN0IHNvY2tldCBzZXR1cCwgaW5jbHVkaW5nIGNhbGN1bGF0aW5nIHRoZSBNYXhpbXVtIFNlZ21lbnQgU2l6ZS4gVGhhdCBzb3VuZHMgbGlrZSBhIHByZXR0eSBjcml0aWNhbCBmdW5jdGlvbi4KClRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9ucyBJIHJlYWxseSB3YW50IHRvIGZvY3VzIG9uIGFyZTogYHRjcF9jb25uZWN0YCwgd2hpY2ggaW5pdGlhdGVzIHRoZSBjb25uZWN0aW9uLCB0aGVuLCBvZiBjb3Vyc2UsICBgdGNwX2Nvbm5fcmVxdWVzdGAgaXRzZWxmLCB3aGljaCBzZWVtcyBrZXkgdG8gdGhlIHNlcnZlci1zaWRlLCB0aGVuIGB0Y3BfbWFrZV9zeW5hY2tgIGFzIGl0IHNlZW1zIHRvIGJlIGltcG9ydGFudCwgYW5kIGxhc3RseSBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgIC0gdGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiBoYW5kbGluZyB0aGUgU1lOL0FDSywgaXNuJiMzOTt0IGl0PwoKUmlnaHQsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBzdXJlIGB0Y3BfY29ubl9yZXF1ZXN0YCBpcyBleHBvcnRlZC4gTmVlZCB0byBjb25maXJtIHRoYXQgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnRjcF9jb25uX3JlcXVlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDM3MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgaXNuJiMzOTt0IGEgc2ltcGxlIHN0YXRpYyB2YXJpYWJsZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoOyBpdCYjMzk7cyBtb3JlIGR5bmFtaWMgdGhhbiB0aGF0LCB3aGljaCBpcyBnb29kIHRvIGtlZXAgaW4gbWluZC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGlzIHdvcmtzLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgdGNwX3Y0X2Nvbm5fcmVxdWVzdGAgYW5kIGB0Y3BfdjZfY29ubl9yZXF1ZXN0YCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaW5ncy4gUmlnaHQsIGB0Y3BfdjRfY29ubl9yZXF1ZXN0YCBpc24mIzM5O3Qgc3RhdGljLCBidXQgYHRjcF92Nl9jb25uX3JlcXVlc3RgIGlzLiBTbywgd2UgaGF2ZSBhIGxpc3Qgb2YgcG90ZW50aWFsbHkgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIGV4YW1pbmUgZnVydGhlcjogYHRjcF9jb25uZWN0YCwgYHRjcF9jb25uX3JlcXVlc3RgLCBgdGNwX21ha2Vfc3luYWNrYCwgYW5kIGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AuCgpOb3csIEkgbmVlZCB0byBzZWUgaWYgdGhpcyBjaGFuZ2UgaGFzIGFueSB3aWRlciByaXBwbGUgZWZmZWN0cy4gQXJlIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIG9yIGBpcDZfZHN0X210dV9jb25maWd1cmVkYCB1c2VkICphbnl3aGVyZSogZWxzZT8gTm8sIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBpc29sYXRlZCB0byBtb2RpZnlpbmcgYGlwdjRfZGVmYXVsdF9hZHZtc3NgIGFuZCBgaXA2X2RlZmF1bHRfYWR2bXNzYCwgd2hpY2ggaXMgaGVscGZ1bC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNvbmZpZyBvcHRpb25zLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG5ldC9pcHY0L3JvdXRlLmNgIGFuZCBgbmV0L2lwdjYvcm91dGUuY2AuIFNvLCBpZiBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgIGFyZSBlbmFibGVkLCB0aGVzZSBmaWxlcyBhcmUgY29tcGlsZWQuIFdlIGFscmVhZHkga25vdyB0aGF0IGBDT05GSUdfSU5FVGAgaXMgYWx3YXlzIGVuYWJsZWQgaW4gTGludXggbmV0d29ya2luZywgYW5kIGBDT05GSUdfSVBWNmAgc2VlbXMgbGlrZSBhIHByZXR0eSBzYWZlIGJldCB0byBpbmNsdWRlLiBMZXQgbWUgY2hlY2sgYW5kIG1ha2Ugc3VyZSB0aGF0IGBJUFY2YCBpcyBhY3R1YWxseSBuZWVkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWctNS1cbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcbm5ldC9pcHY2L0tjb25maWctNy1cdGJvb2wgXCYjMzQ7VGhlIElQdjYgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE5PWlmIElQVjZcbm5ldC9pcHY2L0tjb25maWctMjAtXG5uZXQvaXB2Ni9LY29uZmlnOjIxOmNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXG5uZXQvaXB2Ni9LY29uZmlnLTIyLVx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTM4LVxubmV0L2lwdjYvS2NvbmZpZzozOTpjb25maWcgSVBWNl9PUFRJTUlTVElDX0RBRFxubmV0L2lwdjYvS2NvbmZpZy00MC1cdGJvb2wgXCYjMzQ7SVB2NjogRW5hYmxlIFJGQyA0NDI5IE9wdGltaXN0aWMgREFEXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xMDI9Y29uZmlnIElORVQ2X0lQQ09NUFxuLS1cbm5ldC9pcHY2L0tjb25maWctMTExLVxubmV0L2lwdjYvS2NvbmZpZzoxMTI6Y29uZmlnIElQVjZfTUlQNlxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBNb2JpbGl0eVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTE5LVxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXG5uZXQvaXB2Ni9LY29uZmlnLTEyMS1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xNDY9Y29uZmlnIElORVQ2X1RVTk5FTFxuLS1cbm5ldC9pcHY2L0tjb25maWctMTQ5LVxubmV0L2lwdjYvS2NvbmZpZzoxNTA6Y29uZmlnIElQVjZfVlRJXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgKHNlY3VyZSkgSVB2NjogdHVubmVsaW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNjEtXG5uZXQvaXB2Ni9LY29uZmlnOjE2Mjpjb25maWcgSVBWNl9TSVRcbm5ldC9pcHY2L0tjb25maWctMTYzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSVB2Ni1pbi1JUHY0IHR1bm5lbCAoU0lUIGRyaXZlcilcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE3Ni1cbm5ldC9pcHY2L0tjb25maWc6MTc3OmNvbmZpZyBJUFY2X1NJVF82UkRcbm5ldC9pcHY2L0tjb25maWctMTc4LVx0Ym9vbCBcJiMzNDtJUHY2OiBJUHY2IFJhcGlkIERlcGxveW1lbnQgKDZSRClcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE5NS1cbm5ldC9pcHY2L0tjb25maWc6MTk2OmNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXG5uZXQvaXB2Ni9LY29uZmlnLTE5Ny1cdGJvb2xcbm5ldC9pcHY2L0tjb25maWctMTk4LVxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjA5LVxubmV0L2lwdjYvS2NvbmZpZzoyMTA6Y29uZmlnIElQVjZfR1JFXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEdSRSB0dW5uZWxcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIyNy1cbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxubmV0L2lwdjYvS2NvbmZpZy0yMjktXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY2L0tjb25maWctMjMxLVxubmV0L2lwdjYvS2NvbmZpZzoyMzI6Y29uZmlnIElQVjZfRk9VX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY2L0tjb25maWctMjM2LVxubmV0L2lwdjYvS2NvbmZpZzoyMzc6Y29uZmlnIElQVjZfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTIzOC1cdGJvb2wgXCYjMzQ7SVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI0Mi1cbm5ldC9pcHY2L0tjb25maWc6MjQzOmNvbmZpZyBJUFY2X1NVQlRSRUVTXG5uZXQvaXB2Ni9LY29uZmlnLTI0NC1cdGJvb2wgXCYjMzQ7SVB2Njogc291cmNlIGFkZHJlc3MgYmFzZWQgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjU2LVxubmV0L2lwdjYvS2NvbmZpZzoyNTc6Y29uZmlnIElQVjZfTVJPVVRFXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI2NC1cbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L0tjb25maWctMjY2LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI3OC1cbm5ldC9pcHY2L0tjb25maWc6Mjc5OmNvbmZpZyBJUFY2X1BJTVNNX1YyXG5uZXQvaXB2Ni9LY29uZmlnLTI4MC1cdGJvb2wgXCYjMzQ7SVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yODUtXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvS2NvbmZpZy0zMDEtXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cdGRlZl9ib29sIHlcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMxNi1cbm5ldC9pcHY2L0tjb25maWc6MzE3OmNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0zMTgtXHRib29sIFwmIzM0O0lQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzI3LVxubmV0L2lwdjYvS2NvbmZpZzozMjg6Y29uZmlnIElQVjZfSU9BTTZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzI5LVx0Ym9vbCBcJiMzNDtJUHY2OiBJT0FNIFByZS1hbGxvY2F0ZWQgVHJhY2UgaW5zZXJ0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1NTcKCQkJCQkJCW91dHB1dDogMTY3CgkJCQkJCQl0aG91Z2h0czogNDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUQ1AgTVNTIFBhdGNoKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93bi4gVGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IHdlIGNhbGN1bGF0ZSBhbmQgYWR2ZXJ0aXNlIHRoZSBUQ1AgTWF4aW11bSBTZWdtZW50IFNpemUgKE1TUykgaW4gYm90aCBJUHY0IGFuZCBJUHY2LiBJdCYjMzk7cyBlc3NlbnRpYWxseSBpbnRyb2R1Y2luZyBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgIHRvIGJ5cGFzcyBJQ01QLWRlcml2ZWQgUGF0aCBNVFUgKFBNVFUpIGFuZCBpbnN0ZWFkIHVzZSB0aGUgY29uZmlndXJlZCByb3V0ZSBvciBkZXZpY2UgTVRVLiBUaGlzIGNoYW5nZSBkaXJlY3RseSBpbXBhY3RzIHRoZSBNU1MgdmFsdWVzIHNlbnQgZHVyaW5nIHRoZSBjb25uZWN0aW9uIHNldHVwIHByb2Nlc3Mg4oCTIHRoZSBTWU4gYW5kIFNZTi1BQ0sgcGFja2V0cy4gR2l2ZW4gaXRzIGNvcmUgbmV0d29ya2luZyBuYXR1cmUgYW5kIHRoZSBwb3RlbnRpYWwgZnVuY3Rpb25hbCBzaGlmdCBpbiBNU1MgZGV0ZXJtaW5hdGlvbiwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIHRoZXNlIGZ1bmN0aW9ucywgZ2l2ZW4gdGhlIHBhdGNoJiMzOTtzIHNjb3BlOgoKKiAgIGB0Y3BfY29ubmVjdGAKKiAgIGB0Y3BfY29ubl9yZXF1ZXN0YAoqICAgYHRjcF9tYWtlX3N5bmFja2AKKiAgIGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AKCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgSVBWNmAgY29uZmlnIGlzIHRoZSByZWxldmFudCBvbmUgaGVyZS4gSSBhbHNvIGRvdWJsZS1jaGVja2VkIGFuZCB2ZXJpZmllZCB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvaXB2NC9yb3V0ZS5jYCBhbmQgYG5ldC9pcHY2L3JvdXRlLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWdzIG5lZWRlZCBmb3IgdGhpcyBhbmFseXNpcy4KCkkmIzM5O3ZlIGFsc28gdmFsaWRhdGVkIHRoYXQgYHRjcF9jb25uX3JlcXVlc3RgIGlzIGluZGVlZCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEl0JiMzOTtzIHVzZWQgZm9yIGJvdGggSVB2NCBhbmQgSVB2NiB2aWEgdGhlIGB0Y3BfdjRfY29ubl9yZXF1ZXN0YCBhbmQgYHRjcF92Nl9jb25uX3JlcXVlc3RgIGZ1bmN0aW9ucywgYW5kIGNydWNpYWxseSwgaXQgY2FsbHMgYHRjcF9vcGVucmVxX2luaXRfcndpbmAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYGRzdF9tZXRyaWNfYWR2bXNzYC4gVGhpcyBpcyBhIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgbWFuaXB1bGF0aW5nIHRoZSBNU1MgY2FsY3VsYXRpb24sIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZS4KCkFzIGZvciB0aGUgcmVtYWluaW5nIGZ1bmN0aW9ucywgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBpcyB1c2VkIGZvciBJUHY0LCBhbmQgYWxzbyBmb3IgSVB2NC1tYXBwZWQgSVB2NiBhZGRyZXNzZXMsIHNvIHRoYXQgc2VlbXMgb2suIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AgaXMgdGhlcmUgZm9yIElQdjYsIGJ1dCBpcyBzdGF0aWMsIHdoaWNoIGlzIHdvcnRoIGNvbnNpZGVyaW5nLiBUaGUgb3RoZXIgZnVuY3Rpb25zIGB0Y3BfbWFrZV9zeW5hY2tgIGFuZCBgdGNwX2Nvbm5lY3RgIGFsc28gaGF2ZSB2ZXJzaW9ucyB0aGF0IGFyZSBjYWxsZWQgZm9yIGJvdGggSVB2NCBhbmQgSVB2NiByZXNwZWN0aXZlbHkuCgpHaXZlbiB0aGlzIGFuYWx5c2lzLCBteSBmdW5jdGlvbiBsaXN0IGlzIHNvbGlkLiBJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQuIE5vdywgSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfY29ubmVjdCYjMzQ7LAogICAgJiMzNDt0Y3BfY29ubl9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O3RjcF9tYWtlX3N5bmFjayYjMzQ7LAogICAgJiMzNDt0Y3BfdjRfc3luX3JlY3Zfc29jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGFkdmVydGlzZWQgVENQIE1TUyBpbiBJUHY0IGFuZCBJUHY2LiBJdCBpbnRyb2R1Y2VzIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAgdG8gaWdub3JlIElDTVAtbGVhcm5lZCBwYXRoIE1UVSBhbmQgaW5zdGVhZCB1c2UgdGhlIGNvbmZpZ3VyZWQgcm91dGUgb3IgZGV2aWNlIE1UVS4gVGhpcyBhZmZlY3RzIHRoZSBUQ1AgTVNTIGFkdmVydGlzZWQgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAgKFNZTi9TWU4tQUNLKS4gVGhlIGNoYW5nZXMgYXJlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgZnVuY3Rpb25hbGx5IGFsdGVyIGhvdyBNU1MgaXMgZGV0ZXJtaW5lZCwgd2hpY2ggaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9jb25uZWN0JiMzNDssCiAgICAmIzM0O3RjcF9jb25uX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7dGNwX21ha2Vfc3luYWNrJiMzNDssCiAgICAmIzM0O3RjcF92NF9zeW5fcmVjdl9zb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBUQ1AgTVNTIGluIElQdjQgYW5kIElQdjYuIEl0IGludHJvZHVjZXMgYGlwX2RzdF9tdHVfY29uZmlndXJlZGAgYW5kIGBpcDZfZHN0X210dV9jb25maWd1cmVkYCB0byBpZ25vcmUgSUNNUC1sZWFybmVkIHBhdGggTVRVIGFuZCBpbnN0ZWFkIHVzZSB0aGUgY29uZmlndXJlZCByb3V0ZSBvciBkZXZpY2UgTVRVLiBUaGlzIGFmZmVjdHMgdGhlIFRDUCBNU1MgYWR2ZXJ0aXNlZCBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cCAoU1lOL1NZTi1BQ0spLiBUaGUgY2hhbmdlcyBhcmUgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXIgaG93IE1TUyBpcyBkZXRlcm1pbmVkLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBUQ1AgTVNTIGJ5IGludHJvZHVjaW5nIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoKWAgYW5kIGBpcDZfZHN0X210dV9jb25maWd1cmVkKClgLiBUaGVzZSBmdW5jdGlvbnMgcmVhZCBleGlzdGluZywgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gcm91dGluZyBhbmQgZGV2aWNlIHN0cnVjdHVyZXMgKGBkc3RfZW50cnlgLCBgcnQ2X2luZm9gLCBgZmliNl9pbmZvYCwgYG5ldF9kZXZpY2VgLCBgaW5ldDZfZGV2YCkgdG8gZGV0ZXJtaW5lIHRoZSBjb25maWd1cmVkIE1UVSwgaWdub3JpbmcgSUNNUC1sZWFybmVkIHBhdGggTVRVLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBuZXcgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM4ZDY3NGI5OGM4NTljN2YzYTYyYzFjYzRmN2JlOTgzMGRjODUzMTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwNzozMzoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oCmluZGV4IDdmMmZlMWE4NDAxYjEuLmE4ZjU3YjRmNGFhMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXAuaApAQCAtNTA2LDYgJiM0Mzs1MDYsMzEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKIAlyZXR1cm4gcmVzOwogfQogCiYjNDM7LyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLgomIzQzOyAqCiYjNDM7ICogVW5saWtlIGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGRlbGliZXJhdGVseSBpZ25vcmVzIHRoZQomIzQzOyAqIElDTVAtbGVhcm5lZCBwYXRoIE1UVSAocnQtJmd0O3J0X3BtdHUpLiAgVGhlIGFkdmVydGlzZWQgTVNTIGJvdW5kcyB3aGF0IHRoZQomIzQzOyAqIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZSBjYXBhYmlsaXR5ICh0aGUgZGV2aWNlIG9yCiYjNDM7ICogcm91dGUtY29uZmlndXJlZCBNVFUpLCBub3QgYSBwYXRoIE1UVSBsZWFybmVkIG9uIHRoZSByZXZlcnNlIChzZW5kKQomIzQzOyAqIGRpcmVjdGlvbiwgd2hpY2ggbWF5IG5vdCBhcHBseSB0byB0aGUgcGVlci0mZ3Q7dXMgcGF0aCBhbmQgb3V0bGl2ZXMgdGhlIGZuaGUKJiM0MzsgKiBmb3IgdGhlIHdob2xlIGNvbm5lY3Rpb24uICBTZWUgUkZDIDI5MjMgc2VjdGlvbiAyLjMgYW5kIHRoZSBjb21tZW50IGFib3ZlCiYjNDM7ICogdGNwX2FkdmVydGlzZV9tc3MoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IG10dSwgcmVzOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW10dSA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9NVFUpOwomIzQzOwlpZiAoIW10dSkKJiM0MzsJCW10dSA9IFJFQURfT05DRShkc3RfZGV2X3JjdShkc3QpLSZndDttdHUpOwomIzQzOwltdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7CiYjNDM7CXJlcyA9IG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC0mZ3Q7bHd0c3RhdGUsIG10dSk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3NrYl9kc3RfbXR1KHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAppbmRleCAwOWZmZTBmMTNjZTc1Li5hYzFhY2MwYjc0MzY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaApAQCAtMzg1LDYgJiM0MzszODUsNDMgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QKIAlyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LSZndDtsd3RzdGF0ZSwgbXR1KTsKIH0KIAomIzQzOy8qIENvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIGEgcm91dGUsIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUy4KJiM0MzsgKgomIzQzOyAqIFVubGlrZSBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgaWdub3JlcyBhbnkgSUNNUHY2LWxlYXJuZWQgcGF0aAomIzQzOyAqIE1UVSAod2hpY2ggaXMga2VwdCBvbiB0aGUgUlRGX0NBQ0hFIGV4Y2VwdGlvbiByb3V0ZSkgYW5kIHJldHVybnMgdGhlIE1UVSBvZgomIzQzOyAqIHRoZSB1bmRlcmx5aW5nIHJvdXRlIChmaWI2X3BtdHUpIG9yIHRoZSBlZ3Jlc3MgZGV2aWNlLiAgVGhlIGFkdmVydGlzZWQgTVNTCiYjNDM7ICogYm91bmRzIHdoYXQgdGhlIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZQomIzQzOyAqIGNhcGFiaWxpdHksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpIGRpcmVjdGlvbi4gIFNlZQomIzQzOyAqIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZSB0Y3BfYWR2ZXJ0aXNlX21zcygpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCA9IGRzdF9ydDZfaW5mbyhkc3QpOwomIzQzOwljb25zdCBzdHJ1Y3QgZmliNl9pbmZvICpmcm9tOwomIzQzOwlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwomIzQzOwl1bnNpZ25lZCBpbnQgbXR1ID0gMDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkvKiBJUHY2IGtlZXBzIHRoZSBsZWFybmVkIFBNVFUgYW5kIHRoZSBjb25maWd1cmVkIE1UVSBpbiB0aGUgc2FtZQomIzQzOwkgKiBSVEFYX01UVSBzbG90OiB0aGUgbGVhcm5lZCB2YWx1ZSBzaXRzIG9uIHRoaXMgKHBvc3NpYmx5IFJURl9DQUNIRSkKJiM0MzsJICogZHN0LCB0aGUgY29uZmlndXJlZCBvbmUgb24gdGhlIHVuZGVybHlpbmcgcm91dGUuICBSZWFjaCB0aGUgbGF0dGVyCiYjNDM7CSAqIHZpYSAtJmd0O2Zyb20gKGZpYjZfcG10dSksIHBvcHVsYXRlZCBieSBpcDZfcm91dGVfaW5mb19jcmVhdGUoKS4KJiM0MzsJICovCiYjNDM7CWZyb20gPSByY3VfZGVyZWZlcmVuY2UocnQtJmd0O2Zyb20pOwomIzQzOwlpZiAoZnJvbSkKJiM0MzsJCW10dSA9IGZyb20tJmd0O2ZpYjZfcG10dTsKJiM0MzsJaWYgKCFtdHUpIHsKJiM0MzsJCW10dSA9IElQVjZfTUlOX01UVTsKJiM0MzsJCWlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXZfcmN1KGRzdCkpOwomIzQzOwkJaWYgKGlkZXYpCiYjNDM7CQkJbXR1ID0gbWF4X3QodW5zaWduZWQgaW50LCBtdHUsIFJFQURfT05DRShpZGV2LSZndDtjbmYubXR1NikpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwltdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpOwomIzQzOwlyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LSZndDtsd3RzdGF0ZSwgbXR1KTsKJiM0Mzt9CiYjNDM7CiB1MzIgaXA2X210dV9mcm9tX2ZpYjYoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggZmQ2ODhlMWY4NzlmNS4uNDZhYTk4YzkyMTgzMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0xMzM0LDggJiM0MzsxMzM0LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBpcHY0X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIAogCXJjdV9yZWFkX2xvY2soKTsKIAluZXQgPSBkc3RfZGV2X25ldF9yY3UoZHN0KTsKLQlhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwdjRfbXR1KGRzdCkgLSBoZWFkZXJfc2l6ZSwKLQkJCQkgICBuZXQtJmd0O2lwdjQuaXBfcnRfbWluX2Fkdm1zcyk7CiYjNDM7CWFkdm1zcyA9IG1heF90KHVuc2lnbmVkIGludCwgaXBfZHN0X210dV9jb25maWd1cmVkKGRzdCkgLSBoZWFkZXJfc2l6ZSwKJiM0MzsJCSAgICAgICBuZXQtJmd0O2lwdjQuaXBfcnRfbWluX2Fkdm1zcyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gbWluKGFkdm1zcywgSVBWNF9NQVhfUE1UVSAtIGhlYWRlcl9zaXplKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IDU5NjhjZTVhZDE1MDguLmUyMDU2YmQwZGYzYzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtMzI2MSw3ICYjNDM7MzI2MSw3IEBAIHZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKIAogc3RhdGljIHVuc2lnbmVkIGludCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQogewotCXVuc2lnbmVkIGludCBtdHUgPSBkc3Q2X210dShkc3QpOwomIzQzOwl1bnNpZ25lZCBpbnQgbXR1ID0gaXA2X2RzdF9tdHVfY29uZmlndXJlZChkc3QpOwogCXN0cnVjdCBuZXQgKm5ldDsKIAogCW10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NjgKCQkJCQkJCW91dHB1dDogMTkwCgkJCQkJCQl0aG91Z2h0czogNjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIHRoaW5ncyB1cCB3aXRoIGhvdyB3ZSBjYWxjdWxhdGUgdGhlIGFkdmVydGlzZWQgVENQIE1TUywgc3BlY2lmaWNhbGx5IGJ5IHVzaW5nIHRoZXNlIG5ldyBgaXBfZHN0X210dV9jb25maWd1cmVkKClgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZCgpYCBmdW5jdGlvbnMgaW4gYGlwdjRfZGVmYXVsdF9hZHZtc3MoKWAgYW5kIGBpcDZfZGVmYXVsdF9hZHZtc3MoKWAuIFRoZSB3aG9sZSBwb2ludCBpcyB0byBpZ25vcmUgcGF0aCBNVFUgbGVhcm5lZCB2aWEgSUNNUCwgd2hpY2ggbWFrZXMgc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgdHVuaW5nIFRDUCBiZWhhdmlvci4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBkYXRhIGZsb3cuIEZvciBJUHY0LCB0aGUgcGF0Y2ggbm93IGdyYWJzIHRoZSBNVFUgZnJvbSBgZHN0X21ldHJpY19yYXcoZHN0LCBSVEFYX01UVSlgIGFuZCBgZHN0X2Rldl9yY3UoZHN0KS0mZ3Q7bXR1YC4gRm9yIElQdjYsIGl0JiMzOTtzIHB1bGxpbmcgZnJvbSBgcnQtJmd0O2Zyb20tJmd0O2ZpYjZfcG10dWAgYW5kIGBpZGV2LSZndDtjbmYubXR1NmAuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZXNlIHZhbHVlcyBhcmUgYmVpbmcgdXNlZCB0byBjb21wdXRlIGBhZHZtc3NgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXM/IEFmdGVyIGxvb2tpbmcgaW50byBpdCwgSSBjYW4gc2VlIHRoYXQgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludm9sdmUgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMuIEl0JiMzOTtzIGp1c3QgbW9kaWZ5aW5nIGhvdyB3ZSAqcmVhZCogdGhlIE1UVSBpbmZvcm1hdGlvbiBmcm9tIGV4aXN0aW5nLCBhbHJlYWR5IGluaXRpYWxpemVkIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBTcGVjaWZpY2FsbHkgd2UmIzM5O3JlIHJlYWRpbmcgYGRzdF9lbnRyeWAsIGBydDZfaW5mb2AsIGBmaWI2X2luZm9gLCBgaW5ldDZfZGV2YCBmaWVsZHMgdG8gZ2V0IHRoZSB2YWx1ZXMgZnJvbS4gSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IHRoZXJlJiMzOTtzIG5vIHdheSB0aGlzIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYSB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLgoKVGhlIHZhcmlhYmxlcyBiZWluZyByZWFkIGFyZSBzdGFuZGFyZCBmaWVsZHMgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgc3RydWN0czsgYGRzdC0mZ3Q7bWV0cmljc2AsIGBuZXRfZGV2aWNlLSZndDttdHVgLCBgZmliNl9pbmZvYCwgYW5kIGBpbmV0Nl9kZXZgIGFuZCBhcmUgYWxsIHByaW1pdGl2ZSB0eXBlcy4gU3RhbmRhcmQgY2hlY2tzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAgd2lsbCBiZSBlbm91Z2ggdG8gY2F0Y2ggYW55IGJ1Z3MgaW4gdGhlIGxvZ2ljIGNoYW5nZSBpZiB0aGV5IHdlcmUgaW50cm9kdWNlZC4gS01TQU4gaXMgZ3JlYXQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgYnV0IGl0JiMzOTtzIG5vdCBhcHBsaWNhYmxlIGhlcmUuCgpUbyBiZSBleHRyYSBjZXJ0YWluLCBJIGp1c3Qgd2VudCB0aHJvdWdoIHRoZSBmaWVsZHMuIGBkc3RfbWV0cmljX3Jhd2AgYWNjZXNzZXMgYGRzdC0mZ3Q7bWV0cmljc2AuIGBkc3RfZGV2X3JjdShkc3QpLSZndDttdHVgIHJlYWRzIGZyb20gYG5ldF9kZXZpY2UtJmd0O210dWAuIGBydC0mZ3Q7ZnJvbWAgZGVyZWZlcmVuY2VzIGEgYGZpYjZfaW5mb2AgcG9pbnRlci4gYGZyb20tJmd0O2ZpYjZfcG10dWAgaXMgYSBgdTMyYC4gYGlkZXYtJmd0O2NuZi5tdHU2YCBpcyBhbiBgczMyYC4gQWxsIG9mIHRoZXNlIGFyZSBpbml0aWFsaXplZCBmaWVsZHMsIHNvIG5vLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpJbiBzaG9ydCwgbXkgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBjaGFuZ2VzIE1UVSBjYWxjdWxhdGlvbiwgcmVhZGluZyBleGlzdGluZyBhbmQgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gYGRzdF9lbnRyeWAsIGBydDZfaW5mb2AsIGBmaWI2X2luZm9gLCBgbmV0X2RldmljZWAgYW5kIGBpbmV0Nl9kZXZgIGZvciBJUHY0IGFuZCBJUHY2IHRvIGRldGVybWluZSB0aGUgY29uZmlndXJlZCBNVFUuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3Igb3RoZXJ3aXNlIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd2lsbCBoYW5kbGUgYW55IHByb2JsZW1zIHRoYXQgbWlnaHQgYXJpc2UgZnJvbSB0aGUgcGF0Y2guIE5vIEtNU0FOIGlzIG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIFRDUCBNU1MgYnkgaW50cm9kdWNpbmcgYGlwX2RzdF9tdHVfY29uZmlndXJlZCgpYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoKWAuIFRoZXNlIGZ1bmN0aW9ucyByZWFkIGV4aXN0aW5nLCBpbml0aWFsaXplZCBmaWVsZHMgZnJvbSByb3V0aW5nIGFuZCBkZXZpY2Ugc3RydWN0dXJlcyAoYGRzdF9lbnRyeWAsIGBydDZfaW5mb2AsIGBmaWI2X2luZm9gLCBgbmV0X2RldmljZWAsIGBpbmV0Nl9kZXZgKSB0byBkZXRlcm1pbmUgdGhlIGNvbmZpZ3VyZWQgTVRVLCBpZ25vcmluZyBJQ01QLWxlYXJuZWQgcGF0aCBNVFUuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIG5ldyBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBUQ1AgTVNTIGJ5IGludHJvZHVjaW5nIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoKWAgYW5kIGBpcDZfZHN0X210dV9jb25maWd1cmVkKClgLiBUaGVzZSBmdW5jdGlvbnMgcmVhZCBleGlzdGluZywgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gcm91dGluZyBhbmQgZGV2aWNlIHN0cnVjdHVyZXMgKGBkc3RfZW50cnlgLCBgcnQ2X2luZm9gLCBgZmliNl9pbmZvYCwgYG5ldF9kZXZpY2VgLCBgaW5ldDZfZGV2YCkgdG8gZGV0ZXJtaW5lIHRoZSBjb25maWd1cmVkIE1UVSwgaWdub3JpbmcgSUNNUC1sZWFybmVkIHBhdGggTVRVLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBuZXcgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjMzOjE0Ljk1MTkyOTAyM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTE3ODQwNjA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2Nvbm5lY3RcIixcbiAgICBcInRjcF9jb25uX3JlcXVlc3RcIixcbiAgICBcInRjcF9tYWtlX3N5bmFja1wiLFxuICAgIFwidGNwX3Y0X3N5bl9yZWN2X3NvY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBUQ1AgTVNTIGJ5IGludHJvZHVjaW5nIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoKWAgYW5kIGBpcDZfZHN0X210dV9jb25maWd1cmVkKClgLiBUaGVzZSBmdW5jdGlvbnMgcmVhZCBleGlzdGluZywgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gcm91dGluZyBhbmQgZGV2aWNlIHN0cnVjdHVyZXMgKGBkc3RfZW50cnlgLCBgcnQ2X2luZm9gLCBgZmliNl9pbmZvYCwgYG5ldF9kZXZpY2VgLCBgaW5ldDZfZGV2YCkgdG8gZGV0ZXJtaW5lIHRoZSBjb25maWd1cmVkIE1UVSwgaWdub3JpbmcgSUNNUC1sZWFybmVkIHBhdGggTVRVLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBuZXcgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIFRDUCBNU1MgaW4gSVB2NCBhbmQgSVB2Ni4gSXQgaW50cm9kdWNlcyBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgIHRvIGlnbm9yZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgYW5kIGluc3RlYWQgdXNlIHRoZSBjb25maWd1cmVkIHJvdXRlIG9yIGRldmljZSBNVFUuIFRoaXMgYWZmZWN0cyB0aGUgVENQIE1TUyBhZHZlcnRpc2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwIChTWU4vU1lOLUFDSykuIFRoZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIGZ1bmN0aW9uYWxseSBhbHRlciBob3cgTVNTIGlzIGRldGVybWluZWQsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjMzOjE0Ljk1MTkzNTg5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0OTU5MTI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM4ZDY3NGI5OGM4NTljN2YzYTYyYzFjYzRmN2JlOTgzMGRjODUzMThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMDc6MzM6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmhcXG5pbmRleCA3ZjJmZTFhODQwMWIxLi5hOGY1N2I0ZjRhYTIzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2lwLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcC5oXFxuQEAgLTUwNiw2ICs1MDYsMzEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4gXFx0cmV0dXJuIHJlcztcXG4gfVxcbiBcXG4rLyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxcbisgKlxcbisgKiBVbmxpa2UgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgZGVsaWJlcmF0ZWx5IGlnbm9yZXMgdGhlXFxuKyAqIElDTVAtbGVhcm5lZCBwYXRoIE1UVSAocnQtXFx1MDAzZXJ0X3BtdHUpLiAgVGhlIGFkdmVydGlzZWQgTVNTIGJvdW5kcyB3aGF0IHRoZVxcbisgKiBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmUgY2FwYWJpbGl0eSAodGhlIGRldmljZSBvclxcbisgKiByb3V0ZS1jb25maWd1cmVkIE1UVSksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpXFxuKyAqIGRpcmVjdGlvbiwgd2hpY2ggbWF5IG5vdCBhcHBseSB0byB0aGUgcGVlci1cXHUwMDNldXMgcGF0aCBhbmQgb3V0bGl2ZXMgdGhlIGZuaGVcXG4rICogZm9yIHRoZSB3aG9sZSBjb25uZWN0aW9uLiAgU2VlIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZVxcbisgKiB0Y3BfYWR2ZXJ0aXNlX21zcygpLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgbXR1LCByZXM7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdG10dSA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9NVFUpO1xcbitcXHRpZiAoIW10dSlcXG4rXFx0XFx0bXR1ID0gUkVBRF9PTkNFKGRzdF9kZXZfcmN1KGRzdCktXFx1MDAzZW10dSk7XFxuK1xcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUF9NQVhfTVRVKTtcXG4rXFx0cmVzID0gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuaW5kZXggMDlmZmUwZjEzY2U3NS4uYWMxYWNjMGI3NDM2OCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuQEAgLTM4NSw2ICszODUsNDMgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RcXG4gXFx0cmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cXHUwMDNlbHd0c3RhdGUsIG10dSk7XFxuIH1cXG4gXFxuKy8qIENvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIGEgcm91dGUsIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUy5cXG4rICpcXG4rICogVW5saWtlIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBpZ25vcmVzIGFueSBJQ01QdjYtbGVhcm5lZCBwYXRoXFxuKyAqIE1UVSAod2hpY2ggaXMga2VwdCBvbiB0aGUgUlRGX0NBQ0hFIGV4Y2VwdGlvbiByb3V0ZSkgYW5kIHJldHVybnMgdGhlIE1UVSBvZlxcbisgKiB0aGUgdW5kZXJseWluZyByb3V0ZSAoZmliNl9wbXR1KSBvciB0aGUgZWdyZXNzIGRldmljZS4gIFRoZSBhZHZlcnRpc2VkIE1TU1xcbisgKiBib3VuZHMgd2hhdCB0aGUgcGVlciBtYXkgc2VuZCB0byB1cyBhbmQgbXVzdCByZWZsZWN0IG91ciByZWNlaXZlXFxuKyAqIGNhcGFiaWxpdHksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpIGRpcmVjdGlvbi4gIFNlZVxcbisgKiBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmUgdGNwX2FkdmVydGlzZV9tc3MoKS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQgPSBkc3RfcnQ2X2luZm8oZHN0KTtcXG4rXFx0Y29uc3Qgc3RydWN0IGZpYjZfaW5mbyAqZnJvbTtcXG4rXFx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcXG4rXFx0dW5zaWduZWQgaW50IG10dSA9IDA7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdC8qIElQdjYga2VlcHMgdGhlIGxlYXJuZWQgUE1UVSBhbmQgdGhlIGNvbmZpZ3VyZWQgTVRVIGluIHRoZSBzYW1lXFxuK1xcdCAqIFJUQVhfTVRVIHNsb3Q6IHRoZSBsZWFybmVkIHZhbHVlIHNpdHMgb24gdGhpcyAocG9zc2libHkgUlRGX0NBQ0hFKVxcbitcXHQgKiBkc3QsIHRoZSBjb25maWd1cmVkIG9uZSBvbiB0aGUgdW5kZXJseWluZyByb3V0ZS4gIFJlYWNoIHRoZSBsYXR0ZXJcXG4rXFx0ICogdmlhIC1cXHUwMDNlZnJvbSAoZmliNl9wbXR1KSwgcG9wdWxhdGVkIGJ5IGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZSgpLlxcbitcXHQgKi9cXG4rXFx0ZnJvbSA9IHJjdV9kZXJlZmVyZW5jZShydC1cXHUwMDNlZnJvbSk7XFxuK1xcdGlmIChmcm9tKVxcbitcXHRcXHRtdHUgPSBmcm9tLVxcdTAwM2VmaWI2X3BtdHU7XFxuK1xcdGlmICghbXR1KSB7XFxuK1xcdFxcdG10dSA9IElQVjZfTUlOX01UVTtcXG4rXFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZHN0X2Rldl9yY3UoZHN0KSk7XFxuK1xcdFxcdGlmIChpZGV2KVxcbitcXHRcXHRcXHRtdHUgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIG10dSwgUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5tdHU2KSk7XFxuK1xcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpO1xcbitcXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4rfVxcbitcXG4gdTMyIGlwNl9tdHVfZnJvbV9maWI2KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxcbiBcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxcbiBcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmNcXG5pbmRleCBmZDY4OGUxZjg3OWY1Li40NmFhOThjOTIxODMzIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3JvdXRlLmNcXG4rKysgYi9uZXQvaXB2NC9yb3V0ZS5jXFxuQEAgLTEzMzQsOCArMTMzNCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdG5ldCA9IGRzdF9kZXZfbmV0X3JjdShkc3QpO1xcbi1cXHRhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwdjRfbXR1KGRzdCkgLSBoZWFkZXJfc2l6ZSxcXG4tXFx0XFx0XFx0XFx0ICAgbmV0LVxcdTAwM2VpcHY0LmlwX3J0X21pbl9hZHZtc3MpO1xcbitcXHRhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwX2RzdF9tdHVfY29uZmlndXJlZChkc3QpIC0gaGVhZGVyX3NpemUsXFxuK1xcdFxcdCAgICAgICBuZXQtXFx1MDAzZWlwdjQuaXBfcnRfbWluX2Fkdm1zcyk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0cmV0dXJuIG1pbihhZHZtc3MsIElQVjRfTUFYX1BNVFUgLSBoZWFkZXJfc2l6ZSk7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuaW5kZXggNTk2OGNlNWFkMTUwOC4uZTIwNTZiZDBkZjNjNCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXFxuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xcbkBAIC0zMjYxLDcgKzMyNjEsNyBAQCB2b2lkIGlwNl9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxuIFxcbiBzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IG10dSA9IGRzdDZfbXR1KGRzdCk7XFxuK1xcdHVuc2lnbmVkIGludCBtdHUgPSBpcDZfZHN0X210dV9jb25maWd1cmVkKGRzdCk7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gXFxuIFxcdG10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozMzoxNi4yMDIzNjk0NDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzY4MDAzNDA0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9jb25uZWN0XCIsXG4gICAgXCJ0Y3BfY29ubl9yZXF1ZXN0XCIsXG4gICAgXCJ0Y3BfbWFrZV9zeW5hY2tcIixcbiAgICBcInRjcF92NF9zeW5fcmVjdl9zb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIFRDUCBNU1MgaW4gSVB2NCBhbmQgSVB2Ni4gSXQgaW50cm9kdWNlcyBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgIHRvIGlnbm9yZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgYW5kIGluc3RlYWQgdXNlIHRoZSBjb25maWd1cmVkIHJvdXRlIG9yIGRldmljZSBNVFUuIFRoaXMgYWZmZWN0cyB0aGUgVENQIE1TUyBhZHZlcnRpc2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwIChTWU4vU1lOLUFDSykuIFRoZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIGZ1bmN0aW9uYWxseSBhbHRlciBob3cgTVNTIGlzIGRldGVybWluZWQsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4ZDY3NGI5OGM4NTljN2YzYTYyYzFjYzRmN2JlOTgzMGRjODUzMThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwNzozMzoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oXG5pbmRleCA3ZjJmZTFhODQwMWIxLi5hOGY1N2I0ZjRhYTIzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXAuaFxuKysrIGIvaW5jbHVkZS9uZXQvaXAuaFxuQEAgLTUwNiw2ICs1MDYsMzEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbiBcdHJldHVybiByZXM7XG4gfVxuIFxuKy8qIENvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIGEgcm91dGUsIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUy5cbisgKlxuKyAqIFVubGlrZSBpcF9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBkZWxpYmVyYXRlbHkgaWdub3JlcyB0aGVcbisgKiBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgKHJ0LVx1MDAzZXJ0X3BtdHUpLiAgVGhlIGFkdmVydGlzZWQgTVNTIGJvdW5kcyB3aGF0IHRoZVxuKyAqIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZSBjYXBhYmlsaXR5ICh0aGUgZGV2aWNlIG9yXG4rICogcm91dGUtY29uZmlndXJlZCBNVFUpLCBub3QgYSBwYXRoIE1UVSBsZWFybmVkIG9uIHRoZSByZXZlcnNlIChzZW5kKVxuKyAqIGRpcmVjdGlvbiwgd2hpY2ggbWF5IG5vdCBhcHBseSB0byB0aGUgcGVlci1cdTAwM2V1cyBwYXRoIGFuZCBvdXRsaXZlcyB0aGUgZm5oZVxuKyAqIGZvciB0aGUgd2hvbGUgY29ubmVjdGlvbi4gIFNlZSBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmVcbisgKiB0Y3BfYWR2ZXJ0aXNlX21zcygpLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4re1xuK1x0dW5zaWduZWQgaW50IG10dSwgcmVzO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bXR1ID0gZHN0X21ldHJpY19yYXcoZHN0LCBSVEFYX01UVSk7XG4rXHRpZiAoIW10dSlcbitcdFx0bXR1ID0gUkVBRF9PTkNFKGRzdF9kZXZfcmN1KGRzdCktXHUwMDNlbXR1KTtcbitcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUF9NQVhfTVRVKTtcbitcdHJlcyA9IG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfc2tiX2RzdF9tdHUoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbmluZGV4IDA5ZmZlMGYxM2NlNzUuLmFjMWFjYzBiNzQzNjggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbkBAIC0zODUsNiArMzg1LDQzIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0XG4gXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuIH1cbiBcbisvKiBDb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiBhIHJvdXRlLCBmb3IgYWR2ZXJ0aXNpbmcgdGhlIFRDUCBNU1MuXG4rICpcbisgKiBVbmxpa2UgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGlnbm9yZXMgYW55IElDTVB2Ni1sZWFybmVkIHBhdGhcbisgKiBNVFUgKHdoaWNoIGlzIGtlcHQgb24gdGhlIFJURl9DQUNIRSBleGNlcHRpb24gcm91dGUpIGFuZCByZXR1cm5zIHRoZSBNVFUgb2ZcbisgKiB0aGUgdW5kZXJseWluZyByb3V0ZSAoZmliNl9wbXR1KSBvciB0aGUgZWdyZXNzIGRldmljZS4gIFRoZSBhZHZlcnRpc2VkIE1TU1xuKyAqIGJvdW5kcyB3aGF0IHRoZSBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmVcbisgKiBjYXBhYmlsaXR5LCBub3QgYSBwYXRoIE1UVSBsZWFybmVkIG9uIHRoZSByZXZlcnNlIChzZW5kKSBkaXJlY3Rpb24uICBTZWVcbisgKiBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmUgdGNwX2FkdmVydGlzZV9tc3MoKS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XG4rXHRjb25zdCBzdHJ1Y3QgZmliNl9pbmZvICpmcm9tO1xuK1x0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcbitcdHVuc2lnbmVkIGludCBtdHUgPSAwO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0LyogSVB2NiBrZWVwcyB0aGUgbGVhcm5lZCBQTVRVIGFuZCB0aGUgY29uZmlndXJlZCBNVFUgaW4gdGhlIHNhbWVcbitcdCAqIFJUQVhfTVRVIHNsb3Q6IHRoZSBsZWFybmVkIHZhbHVlIHNpdHMgb24gdGhpcyAocG9zc2libHkgUlRGX0NBQ0hFKVxuK1x0ICogZHN0LCB0aGUgY29uZmlndXJlZCBvbmUgb24gdGhlIHVuZGVybHlpbmcgcm91dGUuICBSZWFjaCB0aGUgbGF0dGVyXG4rXHQgKiB2aWEgLVx1MDAzZWZyb20gKGZpYjZfcG10dSksIHBvcHVsYXRlZCBieSBpcDZfcm91dGVfaW5mb19jcmVhdGUoKS5cbitcdCAqL1xuK1x0ZnJvbSA9IHJjdV9kZXJlZmVyZW5jZShydC1cdTAwM2Vmcm9tKTtcbitcdGlmIChmcm9tKVxuK1x0XHRtdHUgPSBmcm9tLVx1MDAzZWZpYjZfcG10dTtcbitcdGlmICghbXR1KSB7XG4rXHRcdG10dSA9IElQVjZfTUlOX01UVTtcbitcdFx0aWRldiA9IF9faW42X2Rldl9nZXQoZHN0X2Rldl9yY3UoZHN0KSk7XG4rXHRcdGlmIChpZGV2KVxuK1x0XHRcdG10dSA9IG1heF90KHVuc2lnbmVkIGludCwgbXR1LCBSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYubXR1NikpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpO1xuK1x0cmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbit9XG4rXG4gdTMyIGlwNl9tdHVfZnJvbV9maWI2KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxuIFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuIFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuY1xuaW5kZXggZmQ2ODhlMWY4NzlmNS4uNDZhYTk4YzkyMTgzMyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3JvdXRlLmNcbisrKyBiL25ldC9pcHY0L3JvdXRlLmNcbkBAIC0xMzM0LDggKzEzMzQsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0bmV0ID0gZHN0X2Rldl9uZXRfcmN1KGRzdCk7XG4tXHRhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwdjRfbXR1KGRzdCkgLSBoZWFkZXJfc2l6ZSxcbi1cdFx0XHRcdCAgIG5ldC1cdTAwM2VpcHY0LmlwX3J0X21pbl9hZHZtc3MpO1xuK1x0YWR2bXNzID0gbWF4X3QodW5zaWduZWQgaW50LCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KSAtIGhlYWRlcl9zaXplLFxuK1x0XHQgICAgICAgbmV0LVx1MDAzZWlwdjQuaXBfcnRfbWluX2Fkdm1zcyk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiBtaW4oYWR2bXNzLCBJUFY0X01BWF9QTVRVIC0gaGVhZGVyX3NpemUpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCA1OTY4Y2U1YWQxNTA4Li5lMjA1NmJkMGRmM2M0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xuQEAgLTMyNjEsNyArMzI2MSw3IEBAIHZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbiBcbiBzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4ge1xuLVx0dW5zaWduZWQgaW50IG10dSA9IGRzdDZfbXR1KGRzdCk7XG4rXHR1bnNpZ25lZCBpbnQgbXR1ID0gaXA2X2RzdF9tdHVfY29uZmlndXJlZChkc3QpO1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFxuIFx0bXR1IC09IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyBzaXplb2Yoc3RydWN0IHRjcGhkcik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozMzoxNi4yMDIzNzExMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODkzNTEzMjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgTmV0d29ya2luZyBTdGFjayBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgbWFraW5nIGEgY3J1Y2lhbCBjaGFuZ2UgdG8gaG93IHdlIGhhbmRsZSBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSBhZHZlcnRpc2VtZW50cyBpbiB0aGUgVENQIHN0YWNrLiBJdCBzZWVtcyB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLCBzcGVjaWZpY2FsbHkgSVB2NCBhbmQgSVB2NiByb3V0aW5nLCBpcyBiZWluZyB1cGRhdGVkLiBUaGUga2V5IGlzIGluIHRoZXNlIG1vZGlmaWNhdGlvbnMgdG8gYGlwdjRfZGVmYXVsdF9hZHZtc3NgIGFuZCBgaXA2X2RlZmF1bHRfYWR2bXNzYC4gVGhleSdyZSBub3cgdXNpbmcgdGhlc2UgbmV3bHkgZGVmaW5lZCBmdW5jdGlvbnMsIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAsIGluc3RlYWQgb2YgdGhlIG9sZCBkaXJlY3QgTVRVIGxvb2t1cHMgKGBpcHY0X210dWAgYW5kIGBkc3Q2X210dWApLiBUaGF0J3MgYSBkZWZpbml0ZSBpbXByb3ZlbWVudCBpbiB0aGUgbG9uZyBydW4uXG5cblRoaXMgaXMgaW1tZWRpYXRlbHkgZmxhZ2dlZCBhcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gQW55IGNoYW5nZSBsaWtlIHRoaXMsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBJUHY0IGFuZCBJUHY2IHJvdXRpbmcgY29yZSwgY2FuIG9wZW4gdXAgYSBsb3Qgb2YgaW50ZXJlc3RpbmcgYXR0YWNrIHZlY3RvcnMuIE5vdywgdGhlIG1haW4gZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYGlwdjRfZGVmYXVsdF9hZHZtc3NgIGFuZCBgaXA2X2RlZmF1bHRfYWR2bXNzYCAoYm90aCBzdGF0aWMsIGFzIEkgcmVjYWxsKS4gSSBuZWVkIHRvIGRldGVybWluZSBleGFjdGx5IHdoZXJlIHRob3NlIGFyZSBiZWluZyB1dGlsaXplZC4gSSBzdXNwZWN0IHRoZXkncmUgYmVpbmcgYXNzaWduZWQgdG8gYGRzdF9vcHMtXHUwMDNlZGVmYXVsdF9hZHZtc3NgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBsaWtlbHkgYXMgcGFydCBvZiB0aGUgZGVzdGluYXRpb24gb3B0aW9uIGZvciByb3V0aW5nLiBUaGUgbmV4dCBzdGVwIGlzIGEgY29kZSBzZWFyY2g7IEknbGwgbG9vayBmb3IgZGlyZWN0IHJlZmVyZW5jZXMgdG8gYGlwdjRfZGVmYXVsdF9hZHZtc3NgIGFuZCBgaXA2X2RlZmF1bHRfYWR2bXNzYCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaXMgdXNpbmcgdGhlc2UgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSB0aGUgTVNTLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDcxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzM6MjMuMDk1ODg4MTk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjUxMjc3ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2NF9kZWZhdWx0X2Fkdm1zc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9yb3V0ZS5jPTEyOT1zdHJ1Y3QgZHN0X2VudHJ5XFx0KmlwdjRfZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdTMyIGNvb2tpZSk7XFxubmV0L2lwdjQvcm91dGUuYzoxMzA6c3RhdGljIHVuc2lnbmVkIGludFxcdCBpcHY0X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7XFxubmV0L2lwdjQvcm91dGUuYy0xMzEtSU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTU0PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcHY0X2RzdF9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE1Ni1cXHQuY2hlY2sgPVxcdFxcdGlwdjRfZHN0X2NoZWNrLFxcbm5ldC9pcHY0L3JvdXRlLmM6MTU3OlxcdC5kZWZhdWx0X2Fkdm1zcyA9XFx0aXB2NF9kZWZhdWx0X2Fkdm1zcyxcXG5uZXQvaXB2NC9yb3V0ZS5jLTE1OC1cXHQubXR1ID1cXHRcXHRcXHRpcHY0X210dSxcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTMyMD1zdGF0aWMgdm9pZCBzZXRfY2xhc3NfdGFnKHN0cnVjdCBydGFibGUgKnJ0LCB1MzIgdGFnKVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xMzI4LVxcbm5ldC9pcHY0L3JvdXRlLmM6MTMyOTpzdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbm5ldC9pcHY0L3JvdXRlLmMtMTMzMC17XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTI4ODE9c3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwdjRfZHN0X2JsYWNraG9sZV9vcHMgPSB7XFxubmV0L2lwdjQvcm91dGUuYy0yODgyLVxcdC5mYW1pbHlcXHRcXHRcXHQ9IEFGX0lORVQsXFxubmV0L2lwdjQvcm91dGUuYzoyODgzOlxcdC5kZWZhdWx0X2Fkdm1zc1xcdFxcdD0gaXB2NF9kZWZhdWx0X2Fkdm1zcyxcXG5uZXQvaXB2NC9yb3V0ZS5jLTI4ODQtXFx0Lm5laWdoX2xvb2t1cFxcdFxcdD0gaXB2NF9uZWlnaF9sb29rdXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjMzOjI0Ljk2MTAyMTA0N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MzQwNTAwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQgYW5kIGNvbnNpZGVyaW5nIHRoZSBwcm9tcHQncyBwcm92aWRlZCBcInRob3VnaHRcIjpcblxuKipEZWx2aW5nIGludG8gSVB2NiBNU1MgQWRqdXN0bWVudCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgd2UncmUgdGFsa2luZyBhYm91dCBgaXA2X2RlZmF1bHRfYWR2bXNzYC4gUmlnaHQuIFNvLCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIGEgY3J1Y2lhbCBwYXJhbWV0ZXIgcmVsYXRlZCB0byBJUHY2IE1heGltdW0gU2VnbWVudCBTaXplIChNU1MpIGFuZCBQYXRoIE1UVSBEaXNjb3ZlcnkgKFBNVFVEKSwgc3BlY2lmaWNhbGx5IGF0IHRoZSBzeXN0ZW0ncyBkZWZhdWx0IGxldmVsLiBNeSBtaW5kIHJhY2VzLiBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoaXMgdmFyaWFibGUgaW1wYWN0cyB0aGUgaW5pdGlhbCBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3MuIEVzc2VudGlhbGx5LCBpdCBkZWZpbmVzIHRoZSAqYWR2ZXJ0aXNlZCogTVNTIHZhbHVlIHRoYXQgdGhlIGxvY2FsIHN5c3RlbSB3aWxsIHN1Z2dlc3QgdG8gYSByZW1vdGUgaG9zdCBkdXJpbmcgdGhlIFRDUCBoYW5kc2hha2UsIHdoaWNoIHRoZW4gYWxsb3dzIGVhY2ggZW5kIHRvIG5lZ290aWF0ZSBob3cgbGFyZ2Ugb2YgYSBwYWNrZXQgc2l6ZSB0aGV5IGNhbiBib3RoIHVzZS5cblxuSeKAmW0gYWxyZWFkeSBjb25zaWRlcmluZyB0aGUgc2NlbmFyaW9zIHdoZXJlIHRoaXMgc2V0dGluZyBpcyBpbXBvcnRhbnQuIEl0J3Mgb2Z0ZW4gdGhlIGZpcnN0IGh1cmRsZSB3aGVuIGRlYWxpbmcgd2l0aCBJUHY2IGZyYWdtZW50YXRpb24gYW5kIFBhdGggTVRVIGlzc3Vlcy4gSWYgdGhlIGRlZmF1bHQgaXMgc2V0IHRvbyBoaWdoLCB3ZSdsbCBzZWUgYSBsb3Qgb2YgZnJhZ21lbnRhdGlvbiwgd2hpY2ggd2lsbCBpbXBhY3QgcGVyZm9ybWFuY2UuIElmIGl0J3MgdG9vIGxvdywgd2UgbWlnaHQgYmUgdW5kZXJ1dGlsaXppbmcgbmV0d29yayBiYW5kd2lkdGguIEEgdGhvdWdodGZ1bCB2YWx1ZSBlbnN1cmVzIHNtb290aCBjb21tdW5pY2F0aW9uIHdpdGhvdXQgaW50cm9kdWNpbmcgdG9vIG11Y2ggb3ZlcmhlYWQuXG5cbkknbSBwcm9iYWJseSBnb2luZyB0byBiZSB1c2luZyB0aGlzIHBhcmFtZXRlciBvZnRlbiBkdXJpbmcgbmV0d29yayBvcHRpbWl6YXRpb25zLiBTbywgbGV04oCZcyBjb25zaWRlcjogd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvbiBkaWZmZXJlbnQgbmV0d29yayBjb25maWd1cmF0aW9ucywgY29uc2lkZXJpbmcgY29tbW9uIE1UVSBzaXplcyBsaWtlIDE1MDAgYnl0ZXMgZm9yIHN0YW5kYXJkIEV0aGVybmV0IHZlcnN1cyBsYXJnZXIgTVRVcyBpbiBlbnZpcm9ubWVudHMgbGlrZSBqdW1ibyBmcmFtZXMgb3IgVlBOIHR1bm5lbHM/IEl0J3MgYWxsIGFib3V0IGZpbmRpbmcgdGhlIHN3ZWV0IHNwb3QsIHN0cmlraW5nIHRoYXQgY3JpdGljYWwgYmFsYW5jZSBiZXR3ZWVuIGVmZmljaWVuY3kgYW5kIHJlbGlhYmlsaXR5LCB0byBhbGxvdyBzZWFtbGVzcyB0cmFuc2Zlci4gVGhlIHN5c3RlbSBjYW4gb2Z0ZW4gdXNlIElDTVAgbWVzc2FnZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBpc3N1ZXMsIGJ1dCBhIHdlbGwtdHVuZWQgdmFsdWUgaGVscHMgdG8gbWl0aWdhdGUgcG90ZW50aWFsIGlzc3VlcyBiZWZvcmUgdGhleSBhcmlzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjMzOjMyLjM5NTA3MzU5NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc2MjU3NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl9kZWZhdWx0X2Fkdm1zc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jPTg2PXN0cnVjdCBkc3RfZW50cnlcXHQqaXA2X2RzdF9jaGVjayhzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBjb29raWUpO1xcbm5ldC9pcHY2L3JvdXRlLmM6ODc6c3RhdGljIHVuc2lnbmVkIGludFxcdCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTg4LUlORElSRUNUX0NBTExBQkxFX1NDT1BFXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTI0OT1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9vcHNfdGVtcGxhdGUgPSB7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTI1My1cXHQuY2hlY2tcXHRcXHRcXHQ9XFx0aXA2X2RzdF9jaGVjayxcXG5uZXQvaXB2Ni9yb3V0ZS5jOjI1NDpcXHQuZGVmYXVsdF9hZHZtc3NcXHRcXHQ9XFx0aXA2X2RlZmF1bHRfYWR2bXNzLFxcbm5ldC9pcHY2L3JvdXRlLmMtMjU1LVxcdC5tdHVcXHRcXHRcXHQ9XFx0aXA2X210dSxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9MjY4PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X2JsYWNraG9sZV9vcHMgPSB7XFxubmV0L2lwdjYvcm91dGUuYy0yNjktXFx0LmZhbWlseVxcdFxcdFxcdD0gQUZfSU5FVDYsXFxubmV0L2lwdjYvcm91dGUuYzoyNzA6XFx0LmRlZmF1bHRfYWR2bXNzXFx0XFx0PSBpcDZfZGVmYXVsdF9hZHZtc3MsXFxubmV0L2lwdjYvcm91dGUuYy0yNzEtXFx0Lm5laWdoX2xvb2t1cFxcdFxcdD0gaXA2X2RzdF9uZWlnaF9sb29rdXAsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTMyNTY9dm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0zMjYxLVxcbm5ldC9pcHY2L3JvdXRlLmM6MzI2MjpzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxubmV0L2lwdjYvcm91dGUuYy0zMjYzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzM6MzQuMTcxMzQ0MDg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM1MzY5MDQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIGBkZWZhdWx0X2Fkdm1zc2AqKlxuXG5Pa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXMsIHdoZXJlIGlzIHRoaXMgYGRlZmF1bHRfYWR2bXNzYCBmdW5jdGlvbiBiZWluZyBjYWxsZWQ/IEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBob3cgaXQgZml0cyBpbnRvIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBJIGtub3cgdGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBzZXR0aW5nLCBwcm9iYWJseSByZWxhdGVkIHRvIE1heGltdW0gU2VnbWVudCBTaXplIChNU1MpIGluIHRoZSBjb250ZXh0IG9mIGFkdmFuY2VkIE1TUyBjb25maWd1cmF0aW9uLCBvciBpdCBjb3VsZCBiZSBzb21lIGRlZmF1bHQgb3IgZmFsbGJhY2sgdmFsdWUuXG5cbk15IGluaXRpYWwgbGluZSBvZiBhdHRhY2sgaXMgZ29pbmcgdG8gYmUgYSBjb2RlIHNlYXJjaC4gSSdsbCBuZWVkIHRvIHBpbnBvaW50IGFsbCBpbnN0YW5jZXMgb2YgdGhlIGZ1bmN0aW9uIG5hbWUuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgZ2xvYmFsIHNlYXJjaCBvZiB0aGUgY29kZWJhc2UsIHVzaW5nIGEgdG9vbCBsaWtlIGdyZXAgb3IgcmlwZ3JlcC4gSSdsbCBsb29rIGZvciBkaXJlY3QgY2FsbHMgdG8gYGRlZmF1bHRfYWR2bXNzYCBpbiB0aGUgY29kZS4gSSdtIGFsc28gZ29pbmcgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzeW1ib2xpYyBsaW5rcywgYWxpYXNlcyBvciBhbnkgb3RoZXIgc2ltaWxhciBmb3JtcyB0aGF0IGFyZSByZWZlcnJpbmcgdG8gaXQgYXMgd2VsbC5cblxuQmFzZWQgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIEknbGwgc3RhcnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBwb3NzaWJsZSBjYWxsIHBhdGhzLiBLbm93aW5nIHdoZXJlIGl0J3MgYmVpbmcgdXNlZCBpcyBrZXkuIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb250ZXh0IG9mIGVhY2ggY2FsbCB0byBzZWUgaG93IHRoZSByZXR1cm5lZCB2YWx1ZSBpcyB1c2VkLiBJcyBpdCBwYXNzZWQgdG8gYSBzcGVjaWZpYyBmdW5jdGlvbiwgYXNzaWduZWQgdG8gYSB2YXJpYWJsZSwgdXNlZCBpbiBhbiBhcml0aG1ldGljIGNhbGN1bGF0aW9uPyBUaGlzIHdpbGwgbmFycm93IGRvd24gaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCdzIGJlaW5nIGludGVncmF0ZWQgd2l0aGluIHRoZSBwcm9ncmFtLlxuXG5JJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgZGljdGF0ZSB3aGVuIGBkZWZhdWx0X2Fkdm1zc2AgaXMgdXNlZC4gRG9lcyBpdCBzZXJ2ZSBhcyBhIGRlZmF1bHQgdmFsdWUgaWYgYW5vdGhlciBjb25maWd1cmF0aW9uIHNldHRpbmcgaXNuJ3QgZXhwbGljaXRseSBzZXQ/IE9yIG1heWJlIGl0J3MgdXNlZCBiYXNlZCBvbiBuZXR3b3JrIGNvbmRpdGlvbnMgb3IgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiBJIHdhbnQgdG8ga25vdyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdHMgcmVzdWx0IGlzIGFwcGxpZWQuXG5cbkZpbmFsbHksIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGF0IGBkZWZhdWx0X2Fkdm1zc2AgaGFzIHNvbWUgZm9ybSBvZiBjb25maWd1cmFibGUgaW50ZXJmYWNlLiBJJ20gY3VyaW91cyB3aGF0IGtpbmQgb2YgZW52aXJvbm1lbnQgb3Igc2V0dXAgc2V0dGluZ3MgaXQgbWlnaHQgcmVmZXJlbmNlLiBEb2VzIGl0IGdldCBvdmVycmlkZGVuIGJ5IHVzZXIgY29uZmlndXJhdGlvbnM/IElzIGl0IHRpZWQgaW50byBhIHBhcnRpY3VsYXIgbW9kdWxlPyBUaGlzIGlzIHRoZSBraW5kIG9mIHN0dWZmIHRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFVsdGltYXRlbHksIEknbSBsb29raW5nIGZvciBhIGNvbXBsZXRlIHBpY3R1cmUsIGEgcm9hZG1hcCBvZiB0aGlzIGZ1bmN0aW9uJ3MgcHVycG9zZSB3aXRoaW4gdGhpcyBwcm9qZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzMxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzM6NDAuNTI1MDM3MDk1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzczNTAxMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmYXVsdF9hZHZtc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvZHN0Lmg9MTg1PWRzdF9tZXRyaWNfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG4tLVxcbmluY2x1ZGUvbmV0L2RzdC5oLTE4OS1cXHRpZiAoIWFkdm1zcylcXG5pbmNsdWRlL25ldC9kc3QuaDoxOTA6XFx0XFx0YWR2bXNzID0gZHN0LVxcdTAwM2VvcHMtXFx1MDAzZWRlZmF1bHRfYWR2bXNzKGRzdCk7XFxuaW5jbHVkZS9uZXQvZHN0LmgtMTkxLVxcbi0tXFxuaW5jbHVkZS9uZXQvZHN0X29wcy5oPTE1PXN0cnVjdCBkc3Rfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2RzdF9vcHMuaC0yMC1cXHRzdHJ1Y3QgZHN0X2VudHJ5ICpcXHQoKmNoZWNrKShzdHJ1Y3QgZHN0X2VudHJ5ICosIF9fdTMyIGNvb2tpZSk7XFxuaW5jbHVkZS9uZXQvZHN0X29wcy5oOjIxOlxcdHVuc2lnbmVkIGludFxcdFxcdCgqZGVmYXVsdF9hZHZtc3MpKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKik7XFxuaW5jbHVkZS9uZXQvZHN0X29wcy5oLTIyLVxcdHVuc2lnbmVkIGludFxcdFxcdCgqbXR1KShjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICopO1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0xMjk9c3RydWN0IGRzdF9lbnRyeVxcdCppcHY0X2RzdF9jaGVjayhzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBjb29raWUpO1xcbm5ldC9pcHY0L3JvdXRlLmM6MTMwOnN0YXRpYyB1bnNpZ25lZCBpbnRcXHQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTMxLUlORElSRUNUX0NBTExBQkxFX1NDT1BFXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTE1ND1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXB2NF9kc3Rfb3BzID0ge1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xNTYtXFx0LmNoZWNrID1cXHRcXHRpcHY0X2RzdF9jaGVjayxcXG5uZXQvaXB2NC9yb3V0ZS5jOjE1NzpcXHQuZGVmYXVsdF9hZHZtc3MgPVxcdGlwdjRfZGVmYXVsdF9hZHZtc3MsXFxubmV0L2lwdjQvcm91dGUuYy0xNTgtXFx0Lm10dSA9XFx0XFx0XFx0aXB2NF9tdHUsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTEzMjA9c3RhdGljIHZvaWQgc2V0X2NsYXNzX3RhZyhzdHJ1Y3QgcnRhYmxlICpydCwgdTMyIHRhZylcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTMyOC1cXG5uZXQvaXB2NC9yb3V0ZS5jOjEzMjk6c3RhdGljIHVuc2lnbmVkIGludCBpcHY0X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG5uZXQvaXB2NC9yb3V0ZS5jLTEzMzAte1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0yODgxPXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcHY0X2RzdF9ibGFja2hvbGVfb3BzID0ge1xcbm5ldC9pcHY0L3JvdXRlLmMtMjg4Mi1cXHQuZmFtaWx5XFx0XFx0XFx0PSBBRl9JTkVULFxcbm5ldC9pcHY0L3JvdXRlLmM6Mjg4MzpcXHQuZGVmYXVsdF9hZHZtc3NcXHRcXHQ9IGlwdjRfZGVmYXVsdF9hZHZtc3MsXFxubmV0L2lwdjQvcm91dGUuYy0yODg0LVxcdC5uZWlnaF9sb29rdXBcXHRcXHQ9IGlwdjRfbmVpZ2hfbG9va3VwLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz04Nj1zdHJ1Y3QgZHN0X2VudHJ5XFx0KmlwNl9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgY29va2llKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjg3OnN0YXRpYyB1bnNpZ25lZCBpbnRcXHQgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7XFxubmV0L2lwdjYvcm91dGUuYy04OC1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0yNDk9c3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwNl9kc3Rfb3BzX3RlbXBsYXRlID0ge1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0yNTMtXFx0LmNoZWNrXFx0XFx0XFx0PVxcdGlwNl9kc3RfY2hlY2ssXFxubmV0L2lwdjYvcm91dGUuYzoyNTQ6XFx0LmRlZmF1bHRfYWR2bXNzXFx0XFx0PVxcdGlwNl9kZWZhdWx0X2Fkdm1zcyxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTI1NS1cXHQubXR1XFx0XFx0XFx0PVxcdGlwNl9tdHUsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTI2OD1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9ibGFja2hvbGVfb3BzID0ge1xcbm5ldC9pcHY2L3JvdXRlLmMtMjY5LVxcdC5mYW1pbHlcXHRcXHRcXHQ9IEFGX0lORVQ2LFxcbm5ldC9pcHY2L3JvdXRlLmM6MjcwOlxcdC5kZWZhdWx0X2Fkdm1zc1xcdFxcdD0gaXA2X2RlZmF1bHRfYWR2bXNzLFxcbm5ldC9pcHY2L3JvdXRlLmMtMjcxLVxcdC5uZWlnaF9sb29rdXBcXHRcXHQ9IGlwNl9kc3RfbmVpZ2hfbG9va3VwLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0zMjU2PXZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzI2MS1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjMyNjI6c3RhdGljIHVuc2lnbmVkIGludCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbm5ldC9pcHY2L3JvdXRlLmMtMzI2My17XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTM5OTQ9c3RhdGljIGludCB4ZnJtX2J1bmRsZV9vayhzdHJ1Y3QgeGZybV9kc3QgKmZpcnN0KVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MDYxLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDA2MjpzdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDA2My17XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQxMTE9aW50IHhmcm1fcG9saWN5X3JlZ2lzdGVyX2FmaW5mbyhjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8sIGludCBmYW1pbHkpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQxMjYtXFx0XFx0XFx0ZHN0X29wcy1cXHUwMDNlY2hlY2sgPSB4ZnJtX2RzdF9jaGVjaztcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQxMjc6XFx0XFx0aWYgKGxpa2VseShkc3Rfb3BzLVxcdTAwM2VkZWZhdWx0X2Fkdm1zcyA9PSBOVUxMKSlcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQxMjg6XFx0XFx0XFx0ZHN0X29wcy1cXHUwMDNlZGVmYXVsdF9hZHZtc3MgPSB4ZnJtX2RlZmF1bHRfYWR2bXNzO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDEyOS1cXHRcXHRpZiAobGlrZWx5KGRzdF9vcHMtXFx1MDAzZW10dSA9PSBOVUxMKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzM6NDIuMTYyMzkxNzc5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI2MTMyMDMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlY29kaW5nIHRoZSBgZHN0X21ldHJpY19hZHZtc3NgIENhbGwqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGVuIEkgc2VlIGBkc3RfbWV0cmljX2Fkdm1zc2AsIG15IGJyYWluIGp1bXBzIHRvOiBcIk9rYXksIHNvIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tpbmcgYGRzdC1cdTAwM2VvcHMtXHUwMDNlZGVmYXVsdF9hZHZtc3MoZHN0KWAuICBDbGFzc2ljIGludGVyZmFjZSBwYXR0ZXJuLiBCdXQgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uICphbHdheXMqIGFyaXNlcyAtIGNvbnRleHQgaXMga2luZyBpbiB0aGVzZSBzY2VuYXJpb3MsIHJpZ2h0P1wiXG5cbk15IGludGVybmFsIG1vbm9sb2d1ZSB0aGVuIGFza3MsIFwiV2hlcmUgdGhlICpoZWxsKiBpcyBgZHN0X21ldHJpY19hZHZtc3NgIGl0c2VsZiBiZWluZyBjYWxsZWQ/IFdoYXQncyB0aGUgY2FsbCBzdGFjaz8gV2hhdCBwcm9jZXNzIGlzIGludm9raW5nIHRoaXMgZnVuY3Rpb24/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIHN1cnJvdW5kaW5nIGNvbmRpdGlvbnMsIGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMgcGFydGljdWxhciBjYWxsLiBXaXRob3V0IHRoYXQgYnJvYWRlciBwZXJzcGVjdGl2ZSwgSSdtIGp1c3QgbG9va2luZyBhdCBhIHNpbmdsZSB0aHJlYWQgaW4gYSB2ZXJ5IGNvbXBsZXggd2VhdmUuIEtub3dpbmcgd2hlcmUgaXQncyB1c2VkIGdpdmVzIHRoZSBhbGwtaW1wb3J0YW50IGNvbnRleHQuIFRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhcmUgaW1wb3J0YW50IGluIG15IGZpZWxkLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBtYWtlIGluZm9ybWVkIGRlY2lzaW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6NzE4MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjMzOjQ4LjQyMzcxNDUyOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MjY2NTUzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkc3RfbWV0cmljX2Fkdm1zc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYz0xMDk4PXVuc2lnbmVkIGludCBjeGdiaV9zb2NrX3NlbGVjdF9tc3Moc3RydWN0IGN4Z2JpX3NvY2sgKmNzaywgdW5zaWduZWQgaW50IHBtdHUpXFxuLS1cXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYy0xMTAyLVxcbmRyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5jOjExMDM6XFx0Y3NrLVxcdTAwM2VhZHZtc3MgPSBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpO1xcbmRyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5jLTExMDQtXFxuLS1cXG5pbmNsdWRlL25ldC9kc3QuaD0xODQ9c3RhdGljIGlubGluZSB1MzJcXG5pbmNsdWRlL25ldC9kc3QuaDoxODU6ZHN0X21ldHJpY19hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbmluY2x1ZGUvbmV0L2RzdC5oLTE4Ni17XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTE2NzQ9c3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTczOC1cXHR0Y3Bfc3luY19tc3MobmV3c2ssIGRzdDRfbXR1KGRzdCkpO1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTczOTpcXHRuZXd0cC1cXHUwMDNlYWR2bXNzID0gdGNwX21zc19jbGFtcCh0Y3Bfc2soc2spLCBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE3NDAtXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NDMxPXZvaWQgdGNwX29wZW5yZXFfaW5pdF9yd2luKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy00NDItXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjQ0MzpcXHRtc3MgPSB0Y3BfbXNzX2NsYW1wKHRwLCBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpKTtcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDQ0LVxcdHdpbmRvd19jbGFtcCA9IFJFQURfT05DRSh0cC1cXHUwMDNld2luZG93X2NsYW1wKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0xMzk9c3RhdGljIF9fdTE2IHRjcF9hZHZlcnRpc2VfbXNzKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNDUtXFx0aWYgKGRzdCkge1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxNDY6XFx0XFx0dW5zaWduZWQgaW50IG1ldHJpYyA9IGRzdF9tZXRyaWNfYWR2bXNzKGRzdCk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTE0Ny1cXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0zOTMxPXN0cnVjdCBza19idWZmICp0Y3BfbWFrZV9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzk3NC1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6Mzk3NTpcXHRtc3MgPSB0Y3BfbXNzX2NsYW1wKHRwLCBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzk3Ni1cXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz00MTAxPXN0YXRpYyB2b2lkIHRjcF9jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxMzAtXFx0XFx0V1JJVEVfT05DRSh0cC1cXHUwMDNld2luZG93X2NsYW1wLCBkc3RfbWV0cmljKGRzdCwgUlRBWF9XSU5ET1cpKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDEzMTpcXHR0cC1cXHUwMDNlYWR2bXNzID0gdGNwX21zc19jbGFtcCh0cCwgZHN0X21ldHJpY19hZHZtc3MoZHN0KSk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxMzItXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTEzODI9c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfdjZfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE0ODktXFx0dGNwX3N5bmNfbXNzKG5ld3NrLCBkc3Q2X210dShkc3QpKTtcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjE0OTA6XFx0bmV3dHAtXFx1MDAzZWFkdm1zcyA9IHRjcF9tc3NfY2xhbXAodGNwX3NrKHNrKSwgZHN0X21ldHJpY19hZHZtc3MoZHN0KSk7XFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xNDkxLVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00MDYyPXN0YXRpYyB1bnNpZ25lZCBpbnQgeGZybV9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MDYzLXtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQwNjQ6XFx0cmV0dXJuIGRzdF9tZXRyaWNfYWR2bXNzKHhmcm1fZHN0X3BhdGgoZHN0KSk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MDY1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzM6NDkuOTk2Mzg1NjMyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3Mjk1NDI3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgTXkgRnV6emluZyBFZmZvcnRzIGZvciBNYXhpbXVtIEltcGFjdCoqXG5cbk9rYXksIGxldCdzIHNlZSwgYGRzdF9tZXRyaWNfYWR2bXNzYCBpcyB0aGUgdGFyZ2V0IGhlcmUuIEkgY2FuIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXM6IGB0Y3BfYWR2ZXJ0aXNlX21zc2AsIGB0Y3BfY29ubmVjdF9pbml0YCwgYHRjcF9tYWtlX3N5bmFja2AsIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gLCBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgLCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhleSBhcmUgYWxsIGludm9sdmVkIGluIFRDUCBjb25uZWN0aW9uIHNldHVwIGFuZCBNU1MgYWR2ZXJ0aXNlbWVudC5cblxuU28sIEkgc2hvdWxkIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiB0aGUgZW50cnkgcG9pbnRzOiBgdGNwX2FkdmVydGlzZV9tc3NgLCBgdGNwX2Nvbm5lY3RfaW5pdGAsIGB0Y3BfbWFrZV9zeW5hY2tgLCBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgLCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gUmlnaHQsIHRoZXNlIGFyZSB0aGUgcGxhY2VzIHdoZXJlIGludGVyZXN0aW5nIGlucHV0IGlzIGxpa2VseSB0byBoaXQgYGRzdF9tZXRyaWNfYWR2bXNzYC5cblxuSG9sZCBvbi4uLiBgdGNwX2FkdmVydGlzZV9tc3NgIGFuZCBgdGNwX2Nvbm5lY3RfaW5pdGAgYXJlIGJvdGggc3RhdGljLCBzbyB0aGF0IGxpbWl0cyBteSBvcHRpb25zLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhhdC4gQnV0IGB0Y3BfbWFrZV9zeW5hY2tgIGlzIGV4cG9ydGVkLiBPa2F5LCBsZXQncyB2ZXJpZnkgdGhhdCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTY2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjMzOjU2LjcyNTkzMTU0NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMzU0MzQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfbWFrZV9zeW5hY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9NTcxPWVudW0gdGNwX3N5bmFja190eXBlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTU3Ni19O1xcbmluY2x1ZGUvbmV0L3RjcC5oOjU3NzpzdHJ1Y3Qgc2tfYnVmZiAqdGNwX21ha2Vfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbmluY2x1ZGUvbmV0L3RjcC5oLTU3OC1cXHRcXHRcXHRcXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTExNjI9c3RhdGljIGludCB0Y3BfdjRfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTExNzgtXFxubmV0L2lwdjQvdGNwX2lwdjQuYzoxMTc5OlxcdHNrYiA9IHRjcF9tYWtlX3N5bmFjayhzaywgZHN0LCByZXEsIGZvYywgc3luYWNrX3R5cGUsIHN5bl9za2IpO1xcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTE4MC1cXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0zODg3PWludCB0Y3Bfc2VuZF9zeW5hY2soc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM5MjEtLyoqXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjM5MjI6ICogdGNwX21ha2Vfc3luYWNrIC0gQWxsb2NhdGUgb25lIHNrYiBhbmQgYnVpbGQgYSBTWU5BQ0sgcGFja2V0Llxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zOTIzLSAqIEBzazogbGlzdGVuZXIgc29ja2V0XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzkzMC0gKi9cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzkzMTpzdHJ1Y3Qgc2tfYnVmZiAqdGNwX21ha2Vfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zOTMyLVxcdFxcdFxcdFxcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9NTUwPXN0YXRpYyBpbnQgdGNwX3Y2X3NlbmRfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy01NjktXFxubmV0L2lwdjYvdGNwX2lwdjYuYzo1NzA6XFx0c2tiID0gdGNwX21ha2Vfc3luYWNrKHNrLCBkc3QsIHJlcSwgZm9jLCBzeW5hY2tfdHlwZSwgc3luX3NrYik7XFxubmV0L2lwdjYvdGNwX2lwdjYuYy01NzEtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2Nvbm5lY3QtZGVueS5jPTIyMT1zdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC1kZW55LmMtMjQ5LVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9jb25uZWN0LWRlbnkuYzoyNTA6XFx0ICogWFhYOiBUaGUgdGVzdCBkb2Vzbid0IGluY3JlYXNlIGFueSBjb3VudGVycywgc2VlIHRjcF9tYWtlX3N5bmFjaygpLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC1kZW55LmMtMjUxLVxcdCAqIFBvdGVudGlhbGx5LCBpdCBjYW4gYmUgc3BlZWQgdXAgYnkgc2V0dGluZyBza19wYWlyID0gLUVUSU1FRE9VVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozMzo1OC4zNTk0ODA5NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjAzMTg0ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFRDUCBTWU4tQUNLIEhhbmRsaW5nKipcblxuSG1tLCBzbyBgdGNwX21ha2Vfc3luYWNrYCBpc24ndCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IG1lYW5zIHRoZXJlJ3Mgc29tZSBkeW5hbWljIHNlbGVjdGlvbiBwcm9jZXNzIGdvaW5nIG9uIHdoZW4gY3JhZnRpbmcgdGhvc2UgU1lOLUFDSyBwYWNrZXRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBBbmQgaW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIG90aGVyIGtleSBwaWVjZXM6IGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AgYW5kIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AuIEl0J3MgY2xlYXIgdGhhdCB0aGUgYWRkcmVzcyBmYW1pbHkgcGxheXMgYSByb2xlIGhlcmUsIGJ1dCBpcyB0aGF0ICphbGwqIHRoYXQgZGljdGF0ZXMgdGhlIGNhbGwgcGF0aHM/XG5cbkkgc3VzcGVjdCB0aG9zZSBgKl9zeW5fcmVjdl9zb2NrYCBmdW5jdGlvbnMgaGFuZGxlIHRoZSBpbml0aWFsIHNvY2tldCBzZXR1cCBhbmQgdGhlIGluaXRpYWwgc3RhdGUgdHJhbnNpdGlvbi4gYHRjcF9tYWtlX3N5bmFja2AgbGlrZWx5IGZvY3VzZXMgb24gY3JhZnRpbmcgdGhlIHNwZWNpZmljIHBhY2tldCBjb250ZW50cywgcG9zc2libHkgZHJhd2luZyB1cG9uIHRoZSBwYXJhbWV0ZXJzIHNldCBieSB0aG9zZSBlYXJsaWVyIGZ1bmN0aW9ucyBvciBoYXZpbmcgaXRzIGJlaGF2aW9yIGluZmx1ZW5jZWQgYnkgdGhlIHNvY2tldOKAmXMgZmxhZ3Mgb3Igb3B0aW9ucy4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGNvbm5lY3Rpb24gcXVldWluZywgYW5kIHdoZXRoZXIgYW55IG9mIHRob3NlIHN0cnVjdHVyZXMgYXJlIGNvbnN1bHRlZCBkdXJpbmcgdGhlIFNZTi1BQ0sgZ2VuZXJhdGlvbi4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsaW5nIGNoYWluIGFuZCBleGFtaW5lIHRoZSBkYXRhIGZsb3cgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gVGhpcyBmZWVscyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZGl2aW5nIGludG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3NDMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNDowNC41NjI2Njg1MzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzY0NDU4NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3Y0X3N5bl9yZWN2X3NvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9NTYwPXZvaWQgdGNwX2NhX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjU2MTpzdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbmV0L3RjcC5oLTU2Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MTY1NT1pbnQgdGNwX3Y0X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE2NzMtICovXFxubmV0L2lwdjQvdGNwX2lwdjQuYzoxNjc0OnN0cnVjdCBzb2NrICp0Y3BfdjRfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNjc1LVxcdFxcdFxcdFxcdCAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0yMzU4PWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgaXB2NF9zcGVjaWZpYyA9IHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjM2Mi1cXHQuY29ubl9yZXF1ZXN0XFx0ICAgPSB0Y3BfdjRfY29ubl9yZXF1ZXN0LFxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MjM2MzpcXHQuc3luX3JlY3Zfc29ja1xcdCAgID0gdGNwX3Y0X3N5bl9yZWN2X3NvY2ssXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMzY0LVxcdC5uZXRfaGVhZGVyX2xlblxcdCAgID0gc2l6ZW9mKHN0cnVjdCBpcGhkciksXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTEzMzc9c3RhdGljIHZvaWQgdGNwX3Y2X3Jlc3RvcmVfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTM0Ni1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjEzNDc6LyogQ2FsbGVkIGZyb20gdGNwX3Y0X3N5bl9yZWN2X3NvY2soKSBmb3IgdjZfbWFwcGVkIGNoaWxkcmVuLiAqL1xcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTM0OC1zdGF0aWMgdm9pZCB0Y3BfdjZfbWFwcGVkX2NoaWxkX2luaXQoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTEzNzItXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoxMzczOlxcdC8qIHRjcF92NF9zeW5fcmVjdl9zb2NrKCkgaGFzIGluaXRpYWxpemVkIG5ld2luZXQtXFx1MDAzZW1jX3tpbmRleCx0dGx9ICovXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzc0LVxcdG5ld25wLVxcdTAwM2VtY2FzdF9vaWYgICA9IG5ld2luZXQtXFx1MDAzZW1jX2luZGV4O1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0xMzgyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX3Y2X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xNDA0LVxcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSlcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjE0MDU6XFx0XFx0cmV0dXJuIHRjcF92NF9zeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgZHN0LFxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTQwNi1cXHRcXHRcXHRcXHRcXHQgICAgcmVxX3VuaGFzaCwgb3duX3JlcSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzQ6MDYuMTk5MTE5MzAzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2ODExNTA1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIFRDUHY2IFNvY2tldCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgVENQIGNvZGUsIHByb2JhYmx5IGtlcm5lbC1sZXZlbCBzdHVmZiwgYW5kIEkgc2VlIHRoZXNlIGZ1bmN0aW9uczogYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCB0aG9zZSBzb3VuZCBsaWtlIHRoZXkgaGFuZGxlIFNZTiBwYWNrZXRzLCB0aGUgaW5pdGlhbCBjb25uZWN0aW9uIHJlcXVlc3QsIGZvciBUQ1B2NCBhbmQgVENQdjYgcmVzcGVjdGl2ZWx5LlwiIEknbSBhbHNvIG5vdGljaW5nIHRoYXQgdGhleSBhcmUgbGlrZWx5IGV4cG9ydGVkLCBvciBhdCBsZWFzdCB2aXNpYmxlIG91dHNpZGUgdGhlaXIgb3duIHNvdXJjZSBmaWxlLiBNYWtlcyBzZW5zZSwgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGtleSB0byBhY2NlcHRpbmcgbmV3IGNvbm5lY3Rpb25zLlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmSSB0aG91Z2h0IEkgc2F3IHNvbWV0aGluZyBhYm91dCBgdGNwX3Y2X3N5bl9yZWN2X3NvY2tgIGJlaW5nICpzdGF0aWMqLiBUaGF04oCZcyBvZGQuIElmIGl0J3Mgc3RhdGljLCBpdCB3b3VsZG4ndCBiZSBleHBvcnRlZCwgd2hpY2ggbWVhbnMgaXQgY2FuJ3QgYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBmaWxlIGl0J3MgZGVjbGFyZWQgaW4uIFRoaXMgcmVxdWlyZXMgY2xvc2VyIGluc3BlY3Rpb24uIExldCdzIGRpZyBkZWVwZXIuIFRoZSBsaWtlbHkgcGxhY2UgdG8gZmluZCBpdCBpcyBgbmV0L2lwdjYvdGNwX2lwdjYuY2AuIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgc291cmNlIEknbSBsb29raW5nIGF0IG1hdGNoZXMgbXkgZXhwZWN0YXRpb25zLiBHb3R0YSBjaGVjayB0aGF0IHNwZWNpZmljIHNvdXJjZSBmaWxlIGFuZCBjb25maXJtIHdoZXRoZXIgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYCBpcyBpbmRlZWQgc3RhdGljIG9yIG5vdC4gVGhpcyB3aWxsIHByb3ZpZGUgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlIHJlZ2FyZGluZyBJUHY2IFRDUCBjb25uZWN0aW9uIGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg2MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM0OjEyLjg4MDI3MzUyOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NTY5MjAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfdjZfc3luX3JlY3Zfc29ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9zeW5jb29raWVzLmM9MTc0PXN0cnVjdCBzb2NrICpjb29raWVfdjZfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvc3luY29va2llcy5jLTIyOS1cXHQgKiBXZSBuZWVkIHRvIGxvb2t1cCB0aGUgZHN0X2VudHJ5IHRvIGdldCB0aGUgY29ycmVjdCB3aW5kb3cgc2l6ZS5cXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM6MjMwOlxcdCAqIFRoaXMgaXMgdGFrZW4gZnJvbSB0Y3BfdjZfc3luX3JlY3Zfc29jay4gIFNvbWVib2R5IHBsZWFzZSBlbmxpZ2h0ZW5cXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMjMxLVxcdCAqIG1lIGlmIHRoZXJlIGlzIGEgcHJlZmVycmVkIHdheS5cXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTM0OD1zdGF0aWMgdm9pZCB0Y3BfdjZfbWFwcGVkX2NoaWxkX2luaXQoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTEzODEtXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoxMzgyOnN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX3Y2X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTM4My1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMDA3PWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgaXB2Nl9zcGVjaWZpYyA9IHtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjAxMS1cXHQuY29ubl9yZXF1ZXN0XFx0ICAgPSB0Y3BfdjZfY29ubl9yZXF1ZXN0LFxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MjAxMjpcXHQuc3luX3JlY3Zfc29ja1xcdCAgID0gdGNwX3Y2X3N5bl9yZWN2X3NvY2ssXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMDEzLVxcdC5uZXRfaGVhZGVyX2xlblxcdCAgID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSxcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjAzOD1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X21hcHBlZCA9IHtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjA0Mi1cXHQuY29ubl9yZXF1ZXN0XFx0ICAgPSB0Y3BfdjZfY29ubl9yZXF1ZXN0LFxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MjA0MzpcXHQuc3luX3JlY3Zfc29ja1xcdCAgID0gdGNwX3Y2X3N5bl9yZWN2X3NvY2ssXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMDQ0LVxcdC5uZXRfaGVhZGVyX2xlblxcdCAgID0gc2l6ZW9mKHN0cnVjdCBpcGhkciksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM0OjE0LjU2NTk3NjA0MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTYyOTA2MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUQ1AgQ29ubmVjdGlvbiBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIFRDUCBjb25uZWN0aW9uIHNldHVwIGFuZCBJJ20gc3RhcnRpbmcgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZS4gYHRjcF92Nl9zeW5fcmVjdl9zb2NrYCBpcyBjbGVhcmx5IHN0YXRpYywgd2hpY2ggbWVhbnMgaXQncyBwcm9iYWJseSBub3QgdGhlIGNvcmUgYXJlYSBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlciByaWdodCBub3cuIEknbSBnb2luZyB0byBzaGlmdCBteSBmb2N1cyB0byBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgIGFuZCB0aGUgZnVuY3Rpb24gYHRjcF9tYWtlX3N5bmFja2Ag4oCTIHRob3NlIHNlZW0gbGlrZSBtb3JlIHByb21pc2luZyBjYW5kaWRhdGVzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsIGhhbmRzaGFrZS5cblxuSnVzdCBhIHF1aWNrIGNoZWNrLi4ud2hhdCBhYm91dCBgdGNwX2Nvbm5lY3RfaW5pdGA/IE9oLCBpdCdzIGFsc28gc3RhdGljLiBBbHJpZ2h0LCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LiBObyBuZWVkIHRvIGNoYXNlIGRvd24gaXRzIGludGVybmFscyBqdXN0IHlldC4gTXkgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50IHdoZXJlIGB0Y3BfY29ubmVjdF9pbml0YCBpcyBhY3R1YWxseSAqY2FsbGVkKi4gS25vd2luZyBpdHMgY29udGV4dCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGNvbm5lY3Rpb24gaW5pdGlhdGlvbiBwcm9jZXNzIGFuZCBwb3RlbnRpYWxseSByZXZlYWwgc29tZSBoaWRkZW4gYXNzdW1wdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUgd2hhdCB0aGUgY2FsbCBncmFwaCB0ZWxscyBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NDEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNDoyMS4xMjg4ODU0MTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDA2NTE0NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2Nvbm5lY3RfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0PTE2PXN0cnVjdCB0aW1lcl9saXN0ICAgICAgICAgICAgICAgICAgIGljc2tfa2VlcGFsaXZlX3RpbWVyXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoxNzp1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3J0byAgICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY3duZF92YWxpZGF0ZSx0Y3Bfc2NoZWR1bGVfbG8uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTE4LXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcnRvX21pblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD0yMD11MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2RlbGFja19tYXhcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjIxOnUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcG10dV9jb29raWUgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9zeW5jX21zcyx0Y3BfY3VycmVudF9tc3MsdGNwXy4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MjI6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAgICAgICAgICAgaWNza19jYV9vcHMgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2N3bmRfdmFsaWRhdGUsdGNwX3Rzb19zZWdzLHRjLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyMzpzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzICBpY3NrX2FmX29wcyAgICAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfZmluaXNoX2Nvbm5lY3QsdGNwX3NlbmRfc3luX2QuLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTI0LXN0cnVjdCB0Y3BfdWxwX29wcyogICAgICAgICAgICAgICAgIGljc2tfdWxwX29wc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD0yOD11ODoxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2NhX3NldHNvY2tvcHRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjI5OnU4OjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfY2FfZHN0X2xvY2tlZCAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9jYV9kc3RfaW5pdCx0Y3BfY29ubmVjdF9pbml0LC4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MzA6dTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19yZXRyYW5zbWl0cyAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2Nvbm5lY3RfaW5pdCx0Y3BfY29ubmVjdFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtMzEtdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19wZW5kaW5nICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9jc2tfcmVzZXRfeG1pdF90aW1lcix0Y3BfY29uLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDozMjp1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2JhY2tvZmYgICAgICAgICAgIHdyaXRlX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bfd3JpdGVfcXVldWVfcHVyZ2UsdGNwX2Nvbm5lY3QuLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTMzLXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfc3luX3JldHJpZXNcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q9NDE9c3RydWN0IGljc2tfYWNrX3UzMiAgICAgICAgICAgICAgICAgbHJjdnRpbWUgICAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2ZpbmlzaF9jb25uZWN0LHRjcF9jb25uZWN0LHRjLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0MjpzdHJ1Y3QgaWNza19hY2tfdTE2ICAgICAgICAgICAgICAgICByY3ZfbXNzICAgICAgICAgICAgICAgIHdyaXRlX21vc3RseSAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICBfX3RjcF9zZWxlY3Rfd2luZG93LF9fdGNwX2NsZWFudXAuLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQzOnN0cnVjdCBpY3NrX210dXBfaW50ICAgICAgICAgICAgICAgIHNlYXJjaF9oaWdoICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVwX2luaXQsdGNwX3N5bmNfbXNzLHRjcF9jby4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDQ6c3RydWN0IGljc2tfbXR1cF9pbnQgICAgICAgICAgICAgICAgc2VhcmNoX2xvdyAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dV9wcm9iZSx0Y3BfbXR1X2NoZWNrX3JlcHJvLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0NTpzdHJ1Y3QgaWNza19tdHVwX3UzMjozMSAgICAgICAgICAgICBwcm9iZV9zaXplICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfbXR1cF9pbml0LHRjcF9jb25uZWN0X2luaXQsX18uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQ2OnN0cnVjdCBpY3NrX210dXBfdTMyOjEgICAgICAgICAgICAgIGVuYWJsZWQgICAgICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVwX2luaXQsdGNwX3N5bmNfbXNzLHRjcF9jby4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDc6c3RydWN0IGljc2tfbXR1cF91MzIgICAgICAgICAgICAgICAgcHJvYmVfdGltZXN0YW1wICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dXBfaW5pdCx0Y3BfY29ubmVjdF9pbml0LHRjLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC00OC11MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3Byb2Jlc190c3RhbXBcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz00MDgxPXN0YXRpYyB2b2lkIHRjcF9jYV9kc3RfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTAwLS8qIERvIGFsbCBjb25uZWN0IHNvY2tldCBzZXR1cHMgdGhhdCBjYW4gYmUgZG9uZSBBRiBpbmRlcGVuZGVudC4gKi9cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDEwMTpzdGF0aWMgdm9pZCB0Y3BfY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDEwMi17XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDI5OD1pbnQgdGNwX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzNTktXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQzNjA6XFx0dGNwX2Nvbm5lY3RfaW5pdChzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzNjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM0OjIyLjc2OTU0MzE4MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDg0ODQ1MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUQ1AgQ29ubmVjdGlvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgdGNwX2Nvbm5lY3RgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIGl0IGEga2V5IGZ1bmN0aW9uIHRvIGludmVzdGlnYXRlLiBUaGlzIG1lYW5zIG15IGZvY3VzIGZvciBub3cgc2hvdWxkIGJlIG9uIGZ1bmN0aW9ucyBsaWtlIGB0Y3BfY29ubmVjdGAgaXRzZWxmLCBhbG9uZyB3aXRoIHJlbGF0ZWQgcHJvY2Vzc2VzIHN1Y2ggYXMgYHRjcF9tYWtlX3N5bmFja2AgYW5kIGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AuIEl0J3Mgd29ydGggY29uZmlybWluZyB0aGF0IGB0Y3BfY29ubmVjdGAgaXMgaW5kZWVkIGFjY2Vzc2libGUgZXh0ZXJuYWxseSwgYXMgdGhpcyB3b3VsZCBwcm92aWRlIGEgdml0YWwgZW50cnkgcG9pbnQgZm9yIG15IGFuYWx5c2lzLiBMZXQncyBzdGFydCBieSBkZWx2aW5nIGludG8gYHRjcF9jb25uZWN0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MTQsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNDoyOS44NTQzOTI1ODJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDk5MTE0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2Nvbm5lY3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2NjQgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q9OT1UeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgIGZhc3RwYXRoX3R4X2FjY2VzcyAgZmFzdHBhdGhfcnhfYWNjZXNzICBjb21tZW50XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0xMC09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjExOnN0cnVjdCBpbmV0X3NvY2sgICAgICAgICAgICAgICAgICAgIGljc2tfaW5ldCAgICAgICAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICByZWFkX21vc3RseSAgICAgICAgIHRjcF9pbml0X2J1ZmZlcl9zcGFjZSx0Y3BfaW5pdF90ci4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtMTItc3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAgICAgICAgICAgaWNza19hY2NlcHRfcXVldWVcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q9MTQ9c3RydWN0IGluZXRfYmluZDJfYnVja2V0ICAgICAgICAgICAgaWNza19iaW5kMl9oYXNoICAgICAgICByZWFkX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3NldF9zdGF0ZSxpbmV0X3B1dF9wb3J0XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoxNTpzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICAgICAgICAgICAgICBpY3NrX2RlbGFja190aW1lciAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmV0X2Nza19yZXNldF94bWl0X3RpbWVyLHRjcF9jb24uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTE2LXN0cnVjdCB0aW1lcl9saXN0ICAgICAgICAgICAgICAgICAgIGljc2tfa2VlcGFsaXZlX3RpbWVyXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoxNzp1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3J0byAgICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY3duZF92YWxpZGF0ZSx0Y3Bfc2NoZWR1bGVfbG8uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTE4LXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcnRvX21pblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD0yMD11MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2RlbGFja19tYXhcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjIxOnUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcG10dV9jb29raWUgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9zeW5jX21zcyx0Y3BfY3VycmVudF9tc3MsdGNwXy4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MjI6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAgICAgICAgICAgaWNza19jYV9vcHMgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2N3bmRfdmFsaWRhdGUsdGNwX3Rzb19zZWdzLHRjLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyMzpzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzICBpY3NrX2FmX29wcyAgICAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfZmluaXNoX2Nvbm5lY3QsdGNwX3NlbmRfc3luX2QuLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTI0LXN0cnVjdCB0Y3BfdWxwX29wcyogICAgICAgICAgICAgICAgIGljc2tfdWxwX29wc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD0yNj11ODo1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2NhX3N0YXRlICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY3duZF9hcHBsaWNhdGlvbl9saW1pdGVkLHRjcF8uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjI3OnU4OjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfY2FfaW5pdGlhbGl6ZWQgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9pbml0X3RyYW5zZmVyLHRjcF9pbml0X2Nvbmdlcy4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtMjgtdTg6MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19jYV9zZXRzb2Nrb3B0XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyOTp1ODoxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2NhX2RzdF9sb2NrZWQgICAgIHdyaXRlX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY2FfZHN0X2luaXQsdGNwX2Nvbm5lY3RfaW5pdCwuLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjMwOnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcmV0cmFuc21pdHMgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9jb25uZWN0X2luaXQsdGNwX2Nvbm5lY3RcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjMxOnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcGVuZGluZyAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZXRfY3NrX3Jlc2V0X3htaXRfdGltZXIsdGNwX2Nvbi4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MzI6dTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19iYWNrb2ZmICAgICAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3dyaXRlX3F1ZXVlX3B1cmdlLHRjcF9jb25uZWN0Li4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0zMy11OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3N5bl9yZXRyaWVzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0PTQwPXN0cnVjdCBpY3NrX2Fja191OCAgICAgICAgICAgICAgICAgIGF0byAgICAgICAgICAgICAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgIHRjcF9kZWNfcXVpY2thY2tfbW9kZSx0Y3BfZXZlbnRfYS4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDE6c3RydWN0IGljc2tfYWNrX3UzMiAgICAgICAgICAgICAgICAgbHJjdnRpbWUgICAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2ZpbmlzaF9jb25uZWN0LHRjcF9jb25uZWN0LHRjLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0MjpzdHJ1Y3QgaWNza19hY2tfdTE2ICAgICAgICAgICAgICAgICByY3ZfbXNzICAgICAgICAgICAgICAgIHdyaXRlX21vc3RseSAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICBfX3RjcF9zZWxlY3Rfd2luZG93LF9fdGNwX2NsZWFudXAuLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQzOnN0cnVjdCBpY3NrX210dXBfaW50ICAgICAgICAgICAgICAgIHNlYXJjaF9oaWdoICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVwX2luaXQsdGNwX3N5bmNfbXNzLHRjcF9jby4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDQ6c3RydWN0IGljc2tfbXR1cF9pbnQgICAgICAgICAgICAgICAgc2VhcmNoX2xvdyAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dV9wcm9iZSx0Y3BfbXR1X2NoZWNrX3JlcHJvLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0NTpzdHJ1Y3QgaWNza19tdHVwX3UzMjozMSAgICAgICAgICAgICBwcm9iZV9zaXplICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfbXR1cF9pbml0LHRjcF9jb25uZWN0X2luaXQsX18uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQ2OnN0cnVjdCBpY3NrX210dXBfdTMyOjEgICAgICAgICAgICAgIGVuYWJsZWQgICAgICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVwX2luaXQsdGNwX3N5bmNfbXNzLHRjcF9jby4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDc6c3RydWN0IGljc2tfbXR1cF91MzIgICAgICAgICAgICAgICAgcHJvYmVfdGltZXN0YW1wICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dXBfaW5pdCx0Y3BfY29ubmVjdF9pbml0LHRjLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC00OC11MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3Byb2Jlc190c3RhbXBcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X3NvY2sucnN0PTk9VHlwZSAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICBmYXN0cGF0aF90eF9hY2Nlc3MgIGZhc3RwYXRoX3J4X2FjY2VzcyAgY29tbWVudFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X3NvY2sucnN0LTEwLT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Li4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfc29jay5yc3Q6MTE6c3RydWN0IHNvY2sgICAgICAgICAgICAgIHNrICAgICAgICAgICAgICAgICAgICByZWFkX21vc3RseSAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgdGNwX2luaXRfYnVmZmVyX3NwYWNlLHRjcF9pbml0X3RyYW5zZmVyLHRjcF9maW5pc2hfY29ubmUuLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9zb2NrLnJzdC0xMi1zdHJ1Y3QgaXB2Nl9waW5mbyogICAgICAgcGluZXQ2XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9oc2kuaD05MjYzPXN0cnVjdCBpd2FycF9tcGFfb2ZmbG9hZF9yYW1yb2RfZGF0YSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9oc2kuaC05MjY2LVxcdHU4IG1vZGU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaHNpLmg6OTI2NzpcXHR1OCB0Y3BfY29ubmVjdF9zaWRlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2hzaS5oLTkyNjgtXFx0dTggcnRyX3ByZWY7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5jPTgxOT1xZWRfaXdhcnBfbXBhX29mZmxvYWQoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sIHN0cnVjdCBxZWRfaXdhcnBfZXAgKmVwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYy04NzMtXFx0XFx0XFx0b2Zmc2V0b2Yoc3RydWN0IHFlZF9pd2FycF9lcF9tZW1vcnksIGluX3BkYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5jOjg3NDpcXHRwX21wYV9yYW1yb2QtXFx1MDAzZXRjcF9jb25uZWN0X3NpZGUgPSBlcC1cXHUwMDNlY29ubmVjdF9tb2RlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmMtODc1LVxcdERNQV9SRUdQQUlSX0xFKHBfbXBhX3JhbXJvZC1cXHUwMDNlaW5jb21pbmdfdWxwX2J1ZmZlci5hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYz0yOTU3PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYzoyOTU4OnFlZF9pd2FycF90Y3BfY29ubmVjdF91bnN1Y2Nlc3NmdWwoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYy0yOTU5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBxZWRfaXdhcnBfZXAgKmVwLCB1OCBmd19yZXR1cm5fY29kZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmM9MzAxOT1xZWRfaXdhcnBfY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmMtMzAzMy1cXHRcXHRlbHNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYzozMDM0OlxcdFxcdFxcdHFlZF9pd2FycF90Y3BfY29ubmVjdF91bnN1Y2Nlc3NmdWwocF9od2ZuLCBlcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5jLTMwMzUtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZndfcmV0dXJuX2NvZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYy0zMDM5LVxcdFxcdGVsc2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5jOjMwNDA6XFx0XFx0XFx0cWVkX2l3YXJwX3RjcF9jb25uZWN0X3Vuc3VjY2Vzc2Z1bChwX2h3Zm4sIGVwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmMtMzA0MS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBmd19yZXR1cm5fY29kZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5oPTExMj1zdHJ1Y3QgcWVkX2l3YXJwX2VwIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmgtMTE5LVxcdHN0cnVjdCBxZWRfaXdhcnBfY21faW5mbyBjbV9pbmZvO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmg6MTIwOlxcdGVudW0gdGNwX2Nvbm5lY3RfbW9kZSBjb25uZWN0X21vZGU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuaC0xMjEtXFx0ZW51bSBtcGFfcnRyX3R5cGUgcnRyX3R5cGU7XFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oPTE1MzY9c3RydWN0IG5kaXNfb2ZmbG9hZF9wYXJhbXMge1xcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaC0xNTQ2LVxcdHU4IGxzb192Ml9pcHY2O1xcbmRyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0Lmg6MTU0NzpcXHR1OCB0Y3BfY29ubmVjdGlvbl9pcF92NDtcXG5kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oOjE1NDg6XFx0dTggdGNwX2Nvbm5lY3Rpb25faXBfdjY7XFxuZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaC0xNTQ5LVxcdHUzMiBmbGFncztcXG4tLVxcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmg9MTExMD1zdHJ1Y3QgYmVfZXFfZGVsYXlfcGFyYW1zX2luIHtcXG4tLVxcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgtMTExNS1cXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oOjExMTY6c3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luIHtcXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oLTExMTctXFx0c3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjtcXG4tLVxcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgtMTEyOS1cXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oOjExMzA6c3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luX3YxIHtcXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oLTExMzEtXFx0c3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjtcXG4tLVxcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgtMTE0OS1cXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oOjExNTA6c3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX291dCB7XFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaC0xMTUxLVxcdHN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyO1xcbi0tXFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmM9MTA1MD1zdGF0aWMgaW50IGJlaXNjc2lfb3Blbl9jb25uKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAsXFxuLS1cXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYy0xMDU1LVxcdHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfZXAtXFx1MDAzZXBoYmE7XFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmM6MTA1NjpcXHRzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfb3V0ICpwdGNwY25jdF9vdXQ7XFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMtMTA1Ny1cXHRzdHJ1Y3QgYmVfZG1hX21lbSBub25lbWJfY21kO1xcbi0tXFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMtMTA4MC1cXHRpZiAoaXNfY2hpcF9iZTJfYmUzcihwaGJhKSlcXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYzoxMDgxOlxcdFxcdHJlcV9tZW1zaXplID0gc2l6ZW9mKHN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9pbik7XFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMtMTA4Mi1cXHRlbHNlXFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmM6MTA4MzpcXHRcXHRyZXFfbWVtc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfaW5fdjEpO1xcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jLTEwODQtXFxuLS1cXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYy0xMTI1LVxcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jOjExMjY6XFx0cHRjcGNuY3Rfb3V0ID0gKHN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9vdXQgKilub25lbWJfY21kLnZhO1xcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jLTExMjctXFx0YmVpc2NzaV9lcCA9IGVwLVxcdTAwM2VkZF9kYXRhO1xcbi0tXFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYz0xMDk9aW50IG1nbXRfb3Blbl9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSxcXG4tLVxcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMtMTE5LVxcdHN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7XFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYzoxMjA6XFx0c3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luX3YxICpyZXE7XFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYy0xMjEtXFx0dW5zaWduZWQgc2hvcnQgZGVmX2hkcl9pZDtcXG4tLVxcbmluY2x1ZGUvbGludXgvY2VwaC9tZXNzZW5nZXIuaD01Mjc9dm9pZCBjZXBoX2VuY29kZV9teV9hZGRyKHN0cnVjdCBjZXBoX21lc3NlbmdlciAqbXNncik7XFxuaW5jbHVkZS9saW51eC9jZXBoL21lc3Nlbmdlci5oLTUyOC1cXG5pbmNsdWRlL2xpbnV4L2NlcGgvbWVzc2VuZ2VyLmg6NTI5OmludCBjZXBoX3RjcF9jb25uZWN0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbik7XFxuaW5jbHVkZS9saW51eC9jZXBoL21lc3Nlbmdlci5oLTUzMC1pbnQgY2VwaF9jb25fY2xvc2Vfc29ja2V0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3FlZC9udm1ldGNwX2NvbW1vbi5oPTE5OT1zdHJ1Y3QgbnZtZXRjcF9ob3N0X2NjY2lkX2l0aWRfZW50cnkge1xcbi0tXFxuaW5jbHVkZS9saW51eC9xZWQvbnZtZXRjcF9jb21tb24uaC0yMDItXFxuaW5jbHVkZS9saW51eC9xZWQvbnZtZXRjcF9jb21tb24uaDoyMDM6c3RydWN0IG52bWV0Y3BfY29ubmVjdF9kb25lX3Jlc3VsdHMge1xcbmluY2x1ZGUvbGludXgvcWVkL252bWV0Y3BfY29tbW9uLmgtMjA0LVxcdF9fbGUxNiBpY2lkO1xcbi0tXFxuaW5jbHVkZS9saW51eC9xZWQvdGNwX2NvbW1vbi5oPTE3PXN0cnVjdCBvb29fb3BhcXVlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcWVkL3RjcF9jb21tb24uaC0yNS0vKiB0Y3AgY29ubmVjdCBtb2RlIGVudW0gKi9cXG5pbmNsdWRlL2xpbnV4L3FlZC90Y3BfY29tbW9uLmg6MjY6ZW51bSB0Y3BfY29ubmVjdF9tb2RlIHtcXG5pbmNsdWRlL2xpbnV4L3FlZC90Y3BfY29tbW9uLmgtMjctXFx0VENQX0NPTk5FQ1RfQUNUSVZFLFxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9NTY5PWludCB0Y3BfdjRfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuKTtcXG5pbmNsdWRlL25ldC90Y3AuaDo1NzA6aW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzayk7XFxuaW5jbHVkZS9uZXQvdGNwLmgtNTcxLWVudW0gdGNwX3N5bmFja190eXBlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oPTIxMDM9c3RydWN0IHRjcF9mYXN0b3Blbl9yZXF1ZXN0IHtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTIxMDctXFx0c2l6ZV90XFx0XFx0XFx0XFx0c2l6ZTtcXG5pbmNsdWRlL25ldC90Y3AuaDoyMTA4OlxcdGludFxcdFxcdFxcdFxcdGNvcGllZDtcXHQvKiBxdWV1ZWQgaW4gdGNwX2Nvbm5lY3QoKSAqL1xcbmluY2x1ZGUvbmV0L3RjcC5oLTIxMDktXFx0c3RydWN0IHVidWZfaW5mb1xcdFxcdCp1YXJnO1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM9NDE3PXN0YXRpYyB2b2lkIHNldF9zb2NrX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtNDM0LSAqL1xcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjQzNTppbnQgY2VwaF90Y3BfY29ubmVjdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtNDM2LXtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jPTE0Njk9aW50IGNlcGhfY29uX3YxX3RyeV93cml0ZShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy0xNDkzLVxcdFxcdCAgICAgY29uLCBjb24tXFx1MDAzZXN0YXRlKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzoxNDk0OlxcdFxcdHJldCA9IGNlcGhfdGNwX2Nvbm5lY3QoY29uKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy0xNDk1LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0zMzU0PWludCBjZXBoX2Nvbl92Ml90cnlfd3JpdGUoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzM4OC1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMzg5OlxcdFxcdHJldCA9IGNlcGhfdGNwX2Nvbm5lY3QoY29uKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMzkwLVxcdFxcdGlmIChyZXQpIHtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMzkxOlxcdFxcdFxcdHByX2VycihcXFwiY2VwaF90Y3BfY29ubmVjdCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMzOTItXFx0XFx0XFx0Y29uLVxcdTAwM2VlcnJvcl9tc2cgPSBcXFwiY29ubmVjdCBlcnJvclxcXCI7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMDUxPWludCB0Y3Bfc2VuZG1zZ19mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50ICpjb3BpZWQsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMDc1LVxcdGlmIChpbmV0X3Rlc3RfYml0KERFRkVSX0NPTk5FQ1QsIHNrKSkge1xcbm5ldC9pcHY0L3RjcC5jOjEwNzY6XFx0XFx0ZXJyID0gdGNwX2Nvbm5lY3Qoc2spO1xcbm5ldC9pcHY0L3RjcC5jLTEwNzctXFx0XFx0LyogU2FtZSBmYWlsdXJlIHByb2NlZHVyZSBhcyBpbiB0Y3BfdjQvNl9jb25uZWN0ICovXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0xMTM2PXZvaWQgdGNwX2FvX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMTg5LVxcdH0gZWxzZSB7XFxubmV0L2lwdjQvdGNwX2FvLmM6MTE5MDpcXHRcXHQvKiBDYW4ndCBoYXBwZW46IHRjcF9jb25uZWN0KCkgdmVyaWZpZXMgdGhhdCB0aGVyZSdzXFxubmV0L2lwdjQvdGNwX2FvLmMtMTE5MS1cXHRcXHQgKiBhdCBsZWFzdCBvbmUgdGNwLWFvIGtleSB0aGF0IG1hdGNoZXMgdGhlIHJlbW90ZSBwZWVyLlxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0yMjE9aW50IHRjcF92NF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4pXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM0NC1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjM0NTpcXHRlcnIgPSB0Y3BfY29ubmVjdChzayk7XFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNDYtXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDA4MT1zdGF0aWMgdm9pZCB0Y3BfY2FfZHN0X2luaXQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDEwMC0vKiBEbyBhbGwgY29ubmVjdCBzb2NrZXQgc2V0dXBzIHRoYXQgY2FuIGJlIGRvbmUgQUYgaW5kZXBlbmRlbnQuICovXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQxMDE6c3RhdGljIHZvaWQgdGNwX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxMDIte1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxODAtXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQxODE6c3RhdGljIHZvaWQgdGNwX2Nvbm5lY3RfcXVldWVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDE4Mi17XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDIwMT1zdGF0aWMgaW50IHRjcF9zZW5kX3N5bl9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnN5bilcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MjU4LVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MjU5OlxcdHRjcF9jb25uZWN0X3F1ZXVlX3NrYihzaywgc3luX2RhdGEpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MjYwLVxcdGlmIChzeW5fZGF0YS1cXHUwMDNlbGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQyOTctLyogQnVpbGQgYSBTWU4gYW5kIHNlbmQgaXQgb2ZmLiAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0Mjk4OmludCB0Y3BfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQyOTkte1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzNTktXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQzNjA6XFx0dGNwX2Nvbm5lY3RfaW5pdChzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzNjEtXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDM3MS1cXHQvKiBTWU4gZWF0cyBhIHNlcXVlbmNlIGJ5dGUsIHdyaXRlX3NlcSB1cGRhdGVkIGJ5XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQzNzI6XFx0ICogdGNwX2Nvbm5lY3RfcXVldWVfc2tiKCkuXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzNzMtXFx0ICovXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDM3Ni1cXHR0cC1cXHUwMDNlcmV0cmFuc19zdGFtcCA9IHRjcF90aW1lX3N0YW1wX3RzKHRwKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDM3NzpcXHR0Y3BfY29ubmVjdF9xdWV1ZV9za2Ioc2ssIGJ1ZmYpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00Mzc4LVxcdHRjcF9lY25fc2VuZF9zeW4oc2ssIGJ1ZmYpO1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQ0MDMtfVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0NDA0OkVYUE9SVF9TWU1CT0wodGNwX2Nvbm5lY3QpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00NDA1LVxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0xMzM9c3RhdGljIGludCB0Y3BfdjZfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMzQ1LVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MzQ2OlxcdGVyciA9IHRjcF9jb25uZWN0KHNrKTtcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTM0Ny1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NDA4NT1zdGF0aWMgaW50IG1wdGNwX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDExNy1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MTE4OnN0YXRpYyBpbnQgbXB0Y3BfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MTE5LVxcdFxcdFxcdCBpbnQgYWRkcl9sZW4pXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MTk2PXN0YXRpYyBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdCA9IHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQxOTktXFx0LmluaXRcXHRcXHQ9IG1wdGNwX2luaXRfc29jayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjAwOlxcdC5jb25uZWN0XFx0PSBtcHRjcF9jb25uZWN0LFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMDEtXFx0LmRpc2Nvbm5lY3RcXHQ9IG1wdGNwX2Rpc2Nvbm5lY3QsXFxuLS1cXG5uZXQvcmRzL01ha2VmaWxlPTEzPW9iai0kKENPTkZJR19SRFNfVENQKSArPSByZHNfdGNwLm9cXG5uZXQvcmRzL01ha2VmaWxlOjE0OnJkc190Y3AteSA6PVxcdFxcdHRjcC5vIHRjcF9jb25uZWN0Lm8gdGNwX2xpc3Rlbi5vIHRjcF9yZWN2Lm8gXFxcXFxcbm5ldC9yZHMvTWFrZWZpbGUtMTUtXFx0XFx0XFx0dGNwX3NlbmQubyB0Y3Bfc3RhdHMub1xcbi0tXFxubmV0L3Jkcy90Y3AuYz00Nz1zdGF0aWMgTElTVF9IRUFEKHJkc190Y3BfdGNfbGlzdCk7XFxubmV0L3Jkcy90Y3AuYy00OC1cXG5uZXQvcmRzL3RjcC5jOjQ5Oi8qIFRyYWNrIHJkc190Y3BfY29ubmVjdGlvbiBzdHJ1Y3RzIHNvIHRoZXkgY2FuIGJlIGNsZWFuZWQgdXAgKi9cXG5uZXQvcmRzL3RjcC5jLTUwLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socmRzX3RjcF9jb25uX2xvY2spO1xcbi0tXFxubmV0L3Jkcy90Y3AuYz02ND1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSByZHNfdGNwX3N5c2N0bF90YWJsZVtdID0ge1xcbi0tXFxubmV0L3Jkcy90Y3AuYy04NC1cXG5uZXQvcmRzL3RjcC5jOjg1OnUzMiByZHNfdGNwX3dyaXRlX3NlcShzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YylcXG5uZXQvcmRzL3RjcC5jLTg2LXtcXG4tLVxcbm5ldC9yZHMvdGNwLmMtOTAtXFxubmV0L3Jkcy90Y3AuYzo5MTp1MzIgcmRzX3RjcF9zbmRfdW5hKHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjKVxcbm5ldC9yZHMvdGNwLmMtOTIte1xcbi0tXFxubmV0L3Jkcy90Y3AuYz05Nj12b2lkIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQvcmRzL3RjcC5jOjk3OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YylcXG5uZXQvcmRzL3RjcC5jLTk4LXtcXG4tLVxcbm5ldC9yZHMvdGNwLmM9MTI2PXZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbm5ldC9yZHMvdGNwLmMtMTI4LXtcXG5uZXQvcmRzL3RjcC5jOjEyOTpcXHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLVxcdTAwM2VjcF90cmFuc3BvcnRfZGF0YTtcXG5uZXQvcmRzL3RjcC5jLTEzMC1cXHRzdHJ1Y3Qgc29ja2V0ICpvc29jayA9IHRjLVxcdTAwM2V0X3NvY2s7XFxuLS1cXG5uZXQvcmRzL3RjcC5jPTE4MT12b2lkIHJkc190Y3Bfc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy90Y3AuYy0xODIte1xcbm5ldC9yZHMvdGNwLmM6MTgzOlxcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXFx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvdGNwLmMtMTg0LVxcbi0tXFxubmV0L3Jkcy90Y3AuYz0yMTk9c3RhdGljIHZvaWQgcmRzX3RjcF90Y19pbmZvKHN0cnVjdCBzb2NrZXQgKnJkc19zb2NrLCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxubmV0L3Jkcy90Y3AuYy0yMjQtXFx0c3RydWN0IHJkc19pbmZvX3RjcF9zb2NrZXQgdHNpbmZvO1xcbm5ldC9yZHMvdGNwLmM6MjI1OlxcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjO1xcbm5ldC9yZHMvdGNwLmMtMjI2LVxcdHVuc2lnbmVkIGludCBjb3BpZWQgPSAwO1xcbi0tXFxubmV0L3Jkcy90Y3AuYz0yODQ9c3RhdGljIHZvaWQgcmRzNl90Y3BfdGNfaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxubmV0L3Jkcy90Y3AuYy0yODktXFx0c3RydWN0IHJkczZfaW5mb190Y3Bfc29ja2V0IHRzaW5mbzY7XFxubmV0L3Jkcy90Y3AuYzoyOTA6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGM7XFxubmV0L3Jkcy90Y3AuYy0yOTEtXFx0dW5zaWduZWQgaW50IGNvcGllZCA9IDA7XFxuLS1cXG5uZXQvcmRzL3RjcC5jPTM4MD1zdGF0aWMgdm9pZCByZHNfdGNwX2Nvbm5fZnJlZSh2b2lkICphcmcpXFxubmV0L3Jkcy90Y3AuYy0zODEte1xcbm5ldC9yZHMvdGNwLmM6MzgyOlxcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gYXJnO1xcbm5ldC9yZHMvdGNwLmMtMzgzLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLS1cXG5uZXQvcmRzL3RjcC5jPTM5NT1zdGF0aWMgaW50IHJkc190Y3BfY29ubl9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcClcXG5uZXQvcmRzL3RjcC5jLTM5Ni17XFxubmV0L3Jkcy90Y3AuYzozOTc6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGM7XFxubmV0L3Jkcy90Y3AuYy0zOTgtXFx0aW50IGksIGo7XFxuLS1cXG5uZXQvcmRzL3RjcC5jPTQzNz1zdGF0aWMgYm9vbCBsaXN0X2hhc19jb25uKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcXG5uZXQvcmRzL3RjcC5jLTQzOC17XFxubmV0L3Jkcy90Y3AuYzo0Mzk6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMsICpfdGM7XFxubmV0L3Jkcy90Y3AuYy00NDAtXFxuLS1cXG5uZXQvcmRzL3RjcC5jPTQ1OD1zdGF0aWMgdm9pZCByZHNfdGNwX2Rlc3Ryb3lfY29ubnModm9pZClcXG5uZXQvcmRzL3RjcC5jLTQ1OS17XFxubmV0L3Jkcy90Y3AuYzo0NjA6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMsICpfdGM7XFxubmV0L3Jkcy90Y3AuYy00NjEtXFx0TElTVF9IRUFEKHRtcF9saXN0KTtcXG4tLVxcbm5ldC9yZHMvdGNwLmM9NjI5PXN0YXRpYyB2b2lkIHJkc190Y3Bfa2lsbF9zb2NrKHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvcmRzL3RjcC5jLTYzMC17XFxubmV0L3Jkcy90Y3AuYzo2MzE6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMsICpfdGM7XFxubmV0L3Jkcy90Y3AuYy02MzItXFx0TElTVF9IRUFEKHRtcF9saXN0KTtcXG4tLVxcbm5ldC9yZHMvdGNwLmM9Njk0PXN0YXRpYyB2b2lkIHJkc190Y3Bfc3lzY3RsX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvcmRzL3RjcC5jLTY5NS17XFxubmV0L3Jkcy90Y3AuYzo2OTY6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMsICpfdGM7XFxubmV0L3Jkcy90Y3AuYy02OTctXFxuLS1cXG5uZXQvcmRzL3RjcC5jPTc2Nz1zdGF0aWMgaW50IF9faW5pdCByZHNfdGNwX2luaXQodm9pZClcXG4tLVxcbm5ldC9yZHMvdGNwLmMtNzcwLVxcbm5ldC9yZHMvdGNwLmM6NzcxOlxcdHJkc190Y3BfY29ubl9zbGFiID0gS01FTV9DQUNIRShyZHNfdGNwX2Nvbm5lY3Rpb24sIDApO1xcbm5ldC9yZHMvdGNwLmMtNzcyLVxcdGlmICghcmRzX3RjcF9jb25uX3NsYWIpIHtcXG4tLVxcbm5ldC9yZHMvdGNwLmg9MjI9c3RydWN0IHJkc190Y3BfaW5jb21pbmcge1xcbi0tXFxubmV0L3Jkcy90Y3AuaC0yNi1cXG5uZXQvcmRzL3RjcC5oOjI3OnN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24ge1xcbm5ldC9yZHMvdGNwLmgtMjgtXFxuLS1cXG5uZXQvcmRzL3RjcC5oPTYzPXN0cnVjdCByZHNfdGNwX3N0YXRpc3RpY3Mge1xcbi0tXFxubmV0L3Jkcy90Y3AuaC02Ni1cXHR1aW50NjRfdFxcdHNfdGNwX3NuZGJ1Zl9mdWxsO1xcbm5ldC9yZHMvdGNwLmg6Njc6XFx0dWludDY0X3RcXHRzX3RjcF9jb25uZWN0X3JhY2VkO1xcbm5ldC9yZHMvdGNwLmgtNjgtXFx0dWludDY0X3RcXHRzX3RjcF9saXN0ZW5fY2xvc2VkX3N0YWxlO1xcbi0tXFxubmV0L3Jkcy90Y3AuaD03Nj12b2lkIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQvcmRzL3RjcC5oOjc3OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0Yyk7XFxubmV0L3Jkcy90Y3AuaDo3ODp1MzIgcmRzX3RjcF93cml0ZV9zZXEoc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMpO1xcbm5ldC9yZHMvdGNwLmg6Nzk6dTMyIHJkc190Y3Bfc25kX3VuYShzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0Yyk7XFxubmV0L3Jkcy90Y3AuaC04MC1leHRlcm4gc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX3RjcF90cmFuc3BvcnQ7XFxuLS1cXG5uZXQvcmRzL3RjcC5oPTgyPWludCByZHNfdGNwX2xhZGRyX2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLFxcbm5ldC9yZHMvdGNwLmgtODMtXFx0XFx0XFx0X191MzIgc2NvcGVfaWQpO1xcbm5ldC9yZHMvdGNwLmg6ODQ6LyogdGNwX2Nvbm5lY3QuYyAqL1xcbm5ldC9yZHMvdGNwLmgtODUtaW50IHJkc190Y3BfY29ubl9wYXRoX2Nvbm5lY3Qoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKTtcXG4tLVxcbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYz00MD12b2lkIHJkc190Y3Bfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYy00My1cXHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3A7XFxubmV0L3Jkcy90Y3BfY29ubmVjdC5jOjQ0OlxcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjO1xcbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYy00NS1cXG4tLVxcbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYz05OD1pbnQgcmRzX3RjcF9jb25uX3BhdGhfY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuLS1cXG5uZXQvcmRzL3RjcF9jb25uZWN0LmMtMTA5LVxcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNwLVxcdTAwM2VjcF9jb25uO1xcbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYzoxMTA6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjcC1cXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XFxubmV0L3Jkcy90Y3BfY29ubmVjdC5jLTExMS1cXG4tLVxcbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYz0yMzM9dm9pZCByZHNfdGNwX2Nvbm5fcGF0aF9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy90Y3BfY29ubmVjdC5jLTIzNC17XFxubmV0L3Jkcy90Y3BfY29ubmVjdC5jOjIzNTpcXHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLVxcdTAwM2VjcF90cmFuc3BvcnRfZGF0YTtcXG5uZXQvcmRzL3RjcF9jb25uZWN0LmMtMjM2LVxcdHN0cnVjdCBzb2NrZXQgKnNvY2sgPSB0Yy1cXHUwMDNldF9zb2NrO1xcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM9NjA9cmRzX3RjcF9nZXRfcGVlcl9zcG9ydChzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtNzUtICovXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM6NzY6c3RhdGljIHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKlxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTc3LXJkc190Y3BfYWNjZXB0X29uZV9wYXRoKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jPTEwOD12b2lkIHJkc190Y3BfY29ubl9zbG90c19hdmFpbGFibGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBib29sIGZhbl9vdXQpXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMTA5LXtcXG5uZXQvcmRzL3RjcF9saXN0ZW4uYzoxMTA6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGM7XFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMTExLVxcdHN0cnVjdCByZHNfdGNwX25ldCAqcnRuO1xcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM9MTUyPWludCByZHNfdGNwX2FjY2VwdF9vbmUoc3RydWN0IHJkc190Y3BfbmV0ICpydG4pXFxuLS1cXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0xNTgtXFx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcXG5uZXQvcmRzL3RjcF9saXN0ZW4uYzoxNTk6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqcnNfdGNwID0gTlVMTDtcXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0xNjAtXFx0aW50IGNvbm5fc3RhdGU7XFxuLS1cXG5uZXQvcmRzL3RjcF9yZWN2LmM9MTU1PXN0YXRpYyBpbnQgcmRzX3RjcF9kYXRhX3JlY3YocmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvcmRzL3RjcF9yZWN2LmMtMTU5LVxcdHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCA9IGFyZy1cXHUwMDNlY29ubl9wYXRoO1xcbm5ldC9yZHMvdGNwX3JlY3YuYzoxNjA6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjcC1cXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XFxubmV0L3Jkcy90Y3BfcmVjdi5jLTE2MS1cXHRzdHJ1Y3QgcmRzX3RjcF9pbmNvbWluZyAqdGluYyA9IHRjLVxcdTAwM2V0X3RpbmM7XFxuLS1cXG5uZXQvcmRzL3RjcF9yZWN2LmM9MjYzPXN0YXRpYyBpbnQgcmRzX3RjcF9yZWFkX3NvY2soc3RydWN0IHJkc19jb25uX3BhdGggKmNwLCBnZnBfdCBnZnApXFxubmV0L3Jkcy90Y3BfcmVjdi5jLTI2NC17XFxubmV0L3Jkcy90Y3BfcmVjdi5jOjI2NTpcXHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLVxcdTAwM2VjcF90cmFuc3BvcnRfZGF0YTtcXG5uZXQvcmRzL3RjcF9yZWN2LmMtMjY2LVxcdHN0cnVjdCBzb2NrZXQgKnNvY2sgPSB0Yy1cXHUwMDNldF9zb2NrO1xcbi0tXFxubmV0L3Jkcy90Y3BfcmVjdi5jPTI5NT1pbnQgcmRzX3RjcF9yZWN2X3BhdGgoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbm5ldC9yZHMvdGNwX3JlY3YuYy0yOTYte1xcbm5ldC9yZHMvdGNwX3JlY3YuYzoyOTc6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjcC1cXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XFxubmV0L3Jkcy90Y3BfcmVjdi5jLTI5OC1cXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gdGMtXFx1MDAzZXRfc29jaztcXG4tLVxcbm5ldC9yZHMvdGNwX3JlY3YuYz0zMTE9dm9pZCByZHNfdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3Jkcy90Y3BfcmVjdi5jLTMxNC1cXHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3A7XFxubmV0L3Jkcy90Y3BfcmVjdi5jOjMxNTpcXHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YztcXG5uZXQvcmRzL3RjcF9yZWN2LmMtMzE2LVxcbi0tXFxubmV0L3Jkcy90Y3Bfc2VuZC5jPTQxPXZvaWQgcmRzX3RjcF94bWl0X3BhdGhfcHJlcGFyZShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy90Y3Bfc2VuZC5jLTQyLXtcXG5uZXQvcmRzL3RjcF9zZW5kLmM6NDM6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjcC1cXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XFxubmV0L3Jkcy90Y3Bfc2VuZC5jLTQ0LVxcbi0tXFxubmV0L3Jkcy90Y3Bfc2VuZC5jPTQ4PXZvaWQgcmRzX3RjcF94bWl0X3BhdGhfY29tcGxldGUoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbm5ldC9yZHMvdGNwX3NlbmQuYy00OS17XFxubmV0L3Jkcy90Y3Bfc2VuZC5jOjUwOlxcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXFx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvdGNwX3NlbmQuYy01MS1cXG4tLVxcbm5ldC9yZHMvdGNwX3NlbmQuYz03MD1pbnQgcmRzX3RjcF94bWl0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4tLVxcbm5ldC9yZHMvdGNwX3NlbmQuYy03My1cXHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3AgPSBybS1cXHUwMDNlbV9pbmMuaV9jb25uX3BhdGg7XFxubmV0L3Jkcy90Y3Bfc2VuZC5jOjc0OlxcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXFx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvdGNwX3NlbmQuYy03NS1cXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHt9O1xcbi0tXFxubmV0L3Jkcy90Y3Bfc2VuZC5jPTE3OT12b2lkIHJkc190Y3Bfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3Jkcy90Y3Bfc2VuZC5jLTE4Mi1cXHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3A7XFxubmV0L3Jkcy90Y3Bfc2VuZC5jOjE4MzpcXHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YztcXG5uZXQvcmRzL3RjcF9zZW5kLmMtMTg0LVxcbi0tXFxubmV0L3Jkcy90Y3Bfc3RhdHMuYz00Mz1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJkc190Y3Bfc3RhdF9uYW1lc1tdID0ge1xcbi0tXFxubmV0L3Jkcy90Y3Bfc3RhdHMuYy00Ni1cXHRcXFwidGNwX3NuZGJ1Zl9mdWxsXFxcIixcXG5uZXQvcmRzL3RjcF9zdGF0cy5jOjQ3OlxcdFxcXCJ0Y3BfY29ubmVjdF9yYWNlZFxcXCIsXFxubmV0L3Jkcy90Y3Bfc3RhdHMuYy00OC1cXHRcXFwidGNwX2xpc3Rlbl9jbG9zZWRfc3RhbGVcXFwiLFxcbi0tXFxuc2FtcGxlcy9sYW5kbG9jay9zYW5kYm94ZXIuYz0zMTM9c3RhdGljIGludCBhZGRfcXVpZXRfYWNjZXNzKGNvbnN0IGNoYXIgKmNvbnN0IGVudl92YXIsXFxuLS1cXG5zYW1wbGVzL2xhbmRsb2NrL3NhbmRib3hlci5jLTM0Mi1cXHRcXHRcXHRcXHRMQU5ETE9DS19BQ0NFU1NfTkVUX0JJTkRfVENQO1xcbnNhbXBsZXMvbGFuZGxvY2svc2FuZGJveGVyLmM6MzQzOlxcdFxcdGVsc2UgaWYgKHN0cmNtcChzdHJfYWNjZXNzLCBcXFwidGNwX2Nvbm5lY3RcXFwiKSA9PSAwKVxcbnNhbXBsZXMvbGFuZGxvY2svc2FuZGJveGVyLmMtMzQ0LVxcdFxcdFxcdHJ1bGVzZXRfYXR0ci1cXHUwMDNlcXVpZXRfYWNjZXNzX25ldCB8PVxcbi0tXFxuc2FtcGxlcy9sYW5kbG9jay9zYW5kYm94ZXIuYz0zNzk9c3RhdGljIGNvbnN0IGNoYXIgaGVscFtdID1cXG4tLVxcbnNhbXBsZXMvbGFuZGxvY2svc2FuZGJveGVyLmMtNDEzLVxcdFxcXCIgIC0gXFxcXFxcXCJ0Y3BfYmluZFxcXFxcXFwiIHRvIHF1aWV0IHRjcCBiaW5kIGRlbmlhbHNcXFxcblxcXCJcXG5zYW1wbGVzL2xhbmRsb2NrL3NhbmRib3hlci5jOjQxNDpcXHRcXFwiICAtIFxcXFxcXFwidGNwX2Nvbm5lY3RcXFxcXFxcIiB0byBxdWlldCB0Y3AgY29ubmVjdCBkZW5pYWxzXFxcXG5cXFwiXFxuc2FtcGxlcy9sYW5kbG9jay9zYW5kYm94ZXIuYy00MTUtXFx0XFxcIiAgLSBcXFxcXFxcInVkcF9iaW5kXFxcXFxcXCIgdG8gcXVpZXQgdWRwIGJpbmQgZGVuaWFsc1xcXFxuXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfc3RvcmFnZV90cmFjaW5nLmM9NzE9aW50IEJQRl9QUk9HKHRyYWNlX2luZXRfY3NrX2xpc3Rlbl9zdGFydCwgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfc3RvcmFnZV90cmFjaW5nLmMtNzctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfc3RvcmFnZV90cmFjaW5nLmM6Nzg6U0VDKFxcXCJmZW50cnkvdGNwX2Nvbm5lY3RcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX3N0b3JhZ2VfdHJhY2luZy5jOjc5OmludCBCUEZfUFJPRyh0cmFjZV90Y3BfY29ubmVjdCwgc3RydWN0IHNvY2sgKnNrKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX3N0b3JhZ2VfdHJhY2luZy5jLTgwLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYz04OT1zdGF0aWMgaW50IHRjcF9saXN0ZW4odm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYy0xMDctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jOjEwODpzdGF0aWMgdm9pZCB0Y3BfY29ubmVjdChpbnQgbGlzdGVuZXIsIHVpbnQzMl90IGZsb3dsYWJlbCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMtMTA5LVxcdFxcdFxcdGludCAqY2xpZW50LCBpbnQgKmFjY2VwdGVkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jPTQ1MD1URVNUX0YoZmxvd2xhYmVsLCByZW1vdGVfZmxhZylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYy00NjItXFx0bGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jOjQ2MzpcXHR0Y3BfY29ubmVjdChsaXN0ZW5lciwgNywgXFx1MDAyNmNmZCwgXFx1MDAyNmFmZCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jLTQ2NC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYz00OTI9VEVTVF9GKGZsb3dsYWJlbCwgcmVmbGVjdF9mbGFnKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jLTUyMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmM6NTIxOlxcdHRjcF9jb25uZWN0KGxpc3RlbmVyLCA4LCBcXHUwMDI2Y2ZkLCBcXHUwMDI2YWZkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMtNTIyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwLy5naXRpZ25vcmUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvLmdpdGlnbm9yZToyOm1wdGNwX2Nvbm5lY3RcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvLmdpdGlnbm9yZS0zLW1wdGNwX2RpYWdcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9NYWtlZmlsZT04PVRFU1RfUFJPR1MgOj0gXFxcXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9NYWtlZmlsZS05LVxcdGRpYWcuc2ggXFxcXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9NYWtlZmlsZToxMDpcXHRtcHRjcF9jb25uZWN0LnNoIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvTWFrZWZpbGU6MTE6XFx0bXB0Y3BfY29ubmVjdF9jaGVja3N1bS5zaCBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlOjEyOlxcdG1wdGNwX2Nvbm5lY3RfbW1hcC5zaCBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlOjEzOlxcdG1wdGNwX2Nvbm5lY3Rfc2VuZGZpbGUuc2ggXFxcXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9NYWtlZmlsZToxNDpcXHRtcHRjcF9jb25uZWN0X3NwbGljZS5zaCBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlLTE1LVxcdG1wdGNwX2pvaW4uc2ggXFxcXFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlPTIyPVRFU1RfR0VOX0ZJTEVTIDo9IFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvTWFrZWZpbGU6MjM6XFx0bXB0Y3BfY29ubmVjdCBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlLTI0LVxcdG1wdGNwX2RpYWcgXFxcXFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2g9MTY9Zmx1c2hfcGlkcygpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2gtMTcte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9kaWFnLnNoOjE4OlxcdCMgbXB0Y3BfY29ubmVjdCBpbiBqb2luIG1vZGUgd2lsbCBzbGVlcCBhIGJpdCBiZWZvcmUgY29tcGxldGluZyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaC0xOS1cXHQjIGdpdmUgaXQgc29tZSB0aW1lXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaD0zNTU9ZWNobyBcXFwiYVxcXCIgfCBcXFxcXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaC0zNTctXFx0XFx0aXAgbmV0bnMgZXhlYyAkbnMgXFxcXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9kaWFnLnNoOjM1ODpcXHRcXHRcXHQuL21wdGNwX2Nvbm5lY3QgLXAgMTAwMDAgLWwgLXQgJHt0aW1lb3V0X3BvbGx9IC13IDIwIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaC0zNTktXFx0XFx0XFx0XFx0MC4wLjAuMCBcXHUwMDNlL2Rldi9udWxsIFxcdTAwMjZcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9kaWFnLnNoPTM2ND1lY2hvIFxcXCJiXFxcIiB8IFxcXFxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9kaWFnLnNoLTM2Ni1cXHRcXHRpcCBuZXRucyBleGVjICRucyBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2g6MzY3OlxcdFxcdFxcdC4vbXB0Y3BfY29ubmVjdCAtcCAxMDAwMCAtciAwIC10ICR7dGltZW91dF9wb2xsfSAtdyAyMCBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2gtMzY4LVxcdFxcdFxcdFxcdDEyNy4wLjAuMSBcXHUwMDNlL2Rldi9udWxsIFxcdTAwMjZcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9kaWFnLnNoPTM4ND1lY2hvIFxcXCJhXFxcIiB8IFxcXFxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9kaWFnLnNoLTM4Ni1cXHRcXHRpcCBuZXRucyBleGVjICRucyBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2g6Mzg3OlxcdFxcdFxcdC4vbXB0Y3BfY29ubmVjdCAtcCAxMDAwMSAtbCAtcyBUQ1AgLXQgJHt0aW1lb3V0X3BvbGx9IC13IDIwIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaC0zODgtXFx0XFx0XFx0XFx0MC4wLjAuMCBcXHUwMDNlL2Rldi9udWxsIFxcdTAwMjZcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzQ6MzEuNDY0MzEwMzY2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDM3MjA5NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIGB0Y3BfY29ubmVjdGAgaXMgZXhwb3J0ZWQsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGZvY3VzIHNob3VsZCBiZSBvbiBgdGNwX2Nvbm5lY3RgLCBgdGNwX21ha2Vfc3luYWNrYCwgYW5kIGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AuIExldCdzIGNsYXJpZnkgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYCBzaW5jZSBpdCdzIHN0YXRpYyBhbmQgc2hvdWxkbid0IGJlIGV4cG9ydGVkLCB3aGljaCBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nLiBPaCwgYnV0IGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AgaXMgZXhwb3J0ZWQsIGludGVyZXN0aW5nLiBOb3csIGxldCdzIGNvbmZpcm0gdGhlIHN0YXRpYyBuYXR1cmUgb2YgYHRjcF9jb25uZWN0X2luaXRgIGFnYWluLCBnb29kLiBBbmQgdGhlIHN0YXR1cyBvZiBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgLCB0aGV5IGFyZSBzdGF0aWMgaW5saW5lIGFzIGV4cGVjdGVkLiBXaGF0IGFib3V0IGBpcHY0X2RlZmF1bHRfYWR2bXNzYCBhbmQgYGlwNl9kZWZhdWx0X2Fkdm1zc2A/IFRoZXkgYXJlIHN0YXRpYywgZ290IGl0LlxuXG5UaW1lIHRvIGxvb2sgYXQgdGhlIGNvbmZpZyBvcHRpb25zLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgaW4gYG5ldC9pcHY0L3JvdXRlLmNgIGFuZCBgbmV0L2lwdjYvcm91dGUuY2AsIHdoaWNoIGlzIGNvcmUgSVB2NCBhbmQgSVB2NiByb3V0aW5nLiBJJ2xsIG5lZWQgYENPTkZJR19JTkVUYCBmb3IgSVB2NCBhbmQgYENPTkZJR19JUFY2YCBmb3IgSVB2Ni4gU2luY2UgaXQncyBjb3JlIG5ldHdvcmtpbmcsIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgdW51c3VhbCBjb25maWcgZGVwZW5kZW5jaWVzIGJleW9uZCB0aGUgc3RhbmRhcmQgb25lcyByZXF1aXJlZCBmb3IgSVB2NC9JUHY2IHN1cHBvcnQuXG5cbk5vdywgbGV0J3MgcmUtZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLiBJIHNlZSB0aGF0IGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAgYXJlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLiBUaGV5J3JlIGNhbGxlZCBmcm9tIGBpcHY0X2RlZmF1bHRfYWR2bXNzYCBhbmQgYGlwNl9kZWZhdWx0X2Fkdm1zc2AsIHdoaWNoIGFyZSBhc3NpZ25lZCB0byBgZHN0X29wcy1cdTAwM2VkZWZhdWx0X2Fkdm1zc2AuIGBkc3RfbWV0cmljX2Fkdm1zc2AgY2FsbHMgYGRzdC1cdTAwM2VvcHMtXHUwMDNlZGVmYXVsdF9hZHZtc3MoZHN0KWAuIFRoZXNlIGFyZSB0aGVuIGNhbGxlZCBmcm9tIGB0Y3BfY29ubmVjdF9pbml0YCwgYHRjcF9hZHZlcnRpc2VfbXNzYCwgYHRjcF9tYWtlX3N5bmFja2AsIGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AsIGFuZCBgdGNwX3Y2X3N5bl9yZWN2X3NvY2tgLiBUaGlzIHJlaW5mb3JjZXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHRoYXQgYHRjcF9jb25uZWN0YCwgYHRjcF9tYWtlX3N5bmFja2AsIGFuZCBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2xsb3cuIEp1c3QgY29uZmlybWluZyBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgIGlzIGV4cG9ydGVkLi4uIGFuZCB5ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTY2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM0OjQxLjkwMTUyMjY5M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2MjU2Mjg2NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdGNwX3Y0X3N5bl9yZWN2X3NvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM0OjQ0LjI2NDA5NDg4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMDY4NjY5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWxseSBIaWRkZW4gU3ltYm9sKipcblxuSG1tLCB0aGlzIGlzIGludGVyZXN0aW5nLiBJJ20gbG9va2luZyBhdCBhIGZ1bmN0aW9uIHRoYXQgaXNuJ3QgZXhwbGljaXRseSBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MYCwgd2hpY2ggdXN1YWxseSBtZWFucyBpdCdzIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIHRoZSBtb2R1bGUgb3Iga2VybmVsIGl0J3MgZGVmaW5lZCBpbi4gSG93ZXZlciwgdGhlIGZhY3QgdGhhdCBpdCdzICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGlzIHJhaXNpbmcgYSBmbGFnLiBJZiBpdCB3ZXJlbid0IGBzdGF0aWNgLCBidXQgYWxzbyAqbm90KiBleHBvcnRlZCwgaG93IGlzIGl0IGludGVuZGVkIHRvIGJlIHVzZWQ/XG5cbk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiwgd2hhdGV2ZXIgaXQgaXMsIGlzIGJlaW5nIGNhbGxlZC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBleGFtaW5pbmcgYHRjcF9tYWtlX3N5bmFja2AuIEl0J3MgYSBjb21tb24gYXJlYSBmb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGFzIGl0cyBuYW1lIHN1Z2dlc3RzIGl0IHdvdWxkIGNvbnN0cnVjdCBhIFNZTi1BQ0sgcGFja2V0LCBhbmQgdGhhdCBtYWtlcyBpdCBhIHByaW1lIHN1c3BlY3QgZm9yIGFuIHVuZXhwZWN0ZWQgY2FsbC4gSSdtIGJldHRpbmcgdGhhdCdsbCB5aWVsZCBzb21lIGluc2lnaHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ3MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM0OjUwLjM3MDk2NTE4MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNTU5ODk3NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdGNwX21ha2Vfc3luYWNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNDo1Mi42OTY1NzkzNzhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg4OTYzMjc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipEaWdnaW5nIGludG8gYSBOb24tRXhwb3J0ZWQgU3ltYm9sKipcblxuT2theSwgc28gdGhpcyBzeW1ib2wgaXNuJ3QgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTGAsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gVGhhdCBsaWtlbHkgbWVhbnMgaXQncyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwga2VybmVsIHVzZSwgbm90IGRpcmVjdCBtb2R1bGUgYWNjZXNzLiBCdXQgaXQncyAqYWxzbyogbm90IGBzdGF0aWNgLCBzbyBpdCdzIHRlY2huaWNhbGx5IHZpc2libGUgd2l0aGluIHRoZSBjb21waWxhdGlvbiB1bml0LCB3aGljaCBvZmZlcnMgc29tZSBjbHVlcyBhYm91dCBpdHMgc2NvcGUuIFRpbWUgdG8gZGlnIGRlZXBlciwgc3RhcnRpbmcgd2l0aCBhIGNydWNpYWwgZnVuY3Rpb24g4oCTIGxldCdzIGNoZWNrIGB0Y3BfY29ubmVjdGAuIFRoYXQncyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgbmV0d29yayBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIHdoZXJlIHRoaXMgbm9uLWV4cG9ydGVkIHN5bWJvbCBtaWdodCBmaXQgaW4uIEknbSBndWVzc2luZyB0aGF0IHRoaXMgc3ltYm9sIHJlbGF0ZXMgdG8gVENQIHNvY2tldCBjb25uZWN0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBzZWUgaWYgbXkgaHVuY2ggaG9sZHMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzUxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzQ6NTkuNTg2MjE0NTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NzgxNDEyMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdGNwX2Nvbm5lY3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX291dHB1dC5jPTQyOTg9aW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00NDAzLX1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDQwNDpFWFBPUlRfU1lNQk9MKHRjcF9jb25uZWN0KTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQwNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzU6MDIuNTY0MzYwOTkxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2OTQyNTM4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVENQIENvbm5lY3Rpb24gRnVuY3Rpb24gRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGB0Y3BfY29ubmVjdGAgaXMgZGVmaW5pdGVseSBleHBvcnRlZCBhbmQgYXZhaWxhYmxlIGZvciB1c2UuIFRoYXQncyBhcyBleHBlY3RlZC4gTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgSVB2NiBjb21wYXRpYmlsaXR5IGFuZCB3aGF0IHRoZSBlcXVpdmFsZW50IGZ1bmN0aW9uIGlzLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhlIHN5c3RlbSBsZXZlcmFnZSBhIHNlcGFyYXRlLCBleHBsaWNpdGx5IElQdjYtc3BlY2lmaWMgZnVuY3Rpb24gbGlrZSBgdGNwX3Y2X2Nvbm5lY3RgLCBvciBpcyB0aGlzIGZ1bmN0aW9uYWxpdHkgaGFuZGxlZCB3aXRoaW4gYHRjcF9jb25uZWN0YD8gSXQncyBsaWtlbHkgSSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgdG8gZGV0ZXJtaW5lIGhvdyB0aGlzIGlzIGRvbmUgYW5kIGlmIHRoaXMgaXMgYSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25zaWRlcmF0aW9uLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4sIGFuZCB0aGUgbnVhbmNlcyBvZiB0aGUgaW1wbGVtZW50YXRpb24gd2lsbCBndWlkZSB3aGF0IEkgY2FuIGRvIGZyb20gaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwNjIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNTowOS4yNTg2MTc5MTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDM4NDkzNTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnRjcF92Nl9jb25uZWN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNToxMS42NjI0Nzg3ODJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY2NTkyMzAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDb25zaWRlcmluZyBgdGNwX3Y0X2Nvbm5lY3RgKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHdoYXQncyBvbiB0aGUgdGFibGUgbm93PyBXZSdyZSBhZGRyZXNzaW5nIHNvbWUgbmV0d29ya2luZyBpc3N1ZSwgcHJvYmFibHkgcmVsYXRlZCB0byBlc3RhYmxpc2hpbmcgY29ubmVjdGlvbnMsIGFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGB0Y3BfdjRfY29ubmVjdGAuIEl0J3MgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbiwgcmlnaHQ/IEEgY29yZSBidWlsZGluZyBibG9jayBmb3IgYW55IFRDUC9JUC1iYXNlZCBhcHBsaWNhdGlvbi4gVGhpcyBpbXBsaWVzIHRoZSBjdXJyZW50IGNoYWxsZW5nZSBsaWtlbHkgYm9pbHMgZG93biB0byAqaG93KiBhIGNvbm5lY3Rpb24gaXMgYmVpbmcgYXR0ZW1wdGVkLCBvciBwZXJoYXBzIGlzc3VlcyBzdXJyb3VuZGluZyAqd2hlbiogYW5kICp3aGVyZSouIEFyZSB0aGVyZSBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBzb2NrZXQgY3JlYXRpb24sIHRoZSBpbml0aWFsIGhhbmRzaGFrZSwgb3IgZXZlbiB0aGUgc3Vic2VxdWVudCBkYXRhIGZsb3cgb25jZSBhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQ/XG5cbktub3dpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGlzc3VlLCB3aGF0IHNwZWNpZmljYWxseSBpcyB0cmlwcGluZyB0aGUgZnVuY3Rpb24gdXA/IENvdWxkIHRoZXJlIGJlIGEgcHJvYmxlbSB3aXRoIHRoZSBhcmd1bWVudHMgYmVpbmcgcGFzc2VkPyBUaGUgZGVzdGluYXRpb24gYWRkcmVzcyBmYW1pbHkgKEFGX0lORVQpLCB0aGUgcHJvdG9jb2wgdHlwZSAoU09DS19TVFJFQU0pPyBQZXJoYXBzIGFuIGlzc3VlIHdpdGggdGhlIGxvY2FsIHBvcnQgYmluZGluZyBvbiB0aGUgY2xpZW50IHNpZGUsIG9yIGV2ZW4gZmlyZXdhbGwgY29uZmlndXJhdGlvbnM/IElzIGl0IHRoZSAqc3lzdGVtIGNhbGwqIGl0c2VsZiwgb3Igc29tZXRoaW5nIGl0IGRlcGVuZHMgdXBvbiwgdGhhdOKAmXMgZmFpbGluZz8gSSBuZWVkIHRvIGFuYWx5emUgdGhpcyBmdXJ0aGVyLiBgdGNwX3Y0X2Nvbm5lY3RgIGlzIGEgY2xhc3NpYyBjYXNlIHN0dWR5IG9mIHByb3RvY29sIG9wZXJhdGlvbiBhbmQgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGluIGEgVENQL0lQIG5ldHdvcmssIGEgZnVuY3Rpb24gdGhhdCB3YXJyYW50cyBjbG9zZSBleGFtaW5hdGlvbiBpZiBhIGNvbm5lY3Rpb24gaXMgbm90IHN1Y2Nlc3NmdWxseSBlc3RhYmxpc2hlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyNzQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNToxOC4zMjg0MDQ0MjdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzk5Mjg3NTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnRjcF92NF9jb25uZWN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNToyMC42NjgzNDMwNTNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgyOTUxNTA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AgU3ltYm9sKipcblxuQWxyaWdodCwgdGhlIGNvcmUgaXNzdWUgaXMgd2hldGhlciBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIG9yIG5vdC4gSXQncyBjcnVjaWFsIGZvciBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGNvZGUgb3BlcmF0ZXMuIFRoZSBrZXkgdGFrZWF3YXkgaXM6IGlmIGl0J3MgKm5vdCogc3RhdGljLCB0aGVuIGl0J2xsIGhhdmUgaXRzIG93biBzcGVjaWZpYywgdW5pcXVlIHN5bWJvbCBhZGRyZXNzLiBUaGF0J3MgZ29vZDsgaXQgbWVhbnMgSSBjYW4gdHJhY2UgaXQgbW9yZSByZWFkaWx5LlxuXG5TbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IGl0cyBkZWNsYXJhdGlvbi4gSSBuZWVkIHRvIHZlcmlmeSBpdHMgbG9jYXRpb24sIGFuZCBtYWtlIHN1cmUgaXQncyBpbiB0aGUgdXN1YWwgcGxhY2UuIEknbSBnb2luZyB0byBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSBpdHMgZGVmaW5pdGlvbiB3aXRoaW4gYG5ldC9pcHY0L3RjcF9pcHY0LmNgLiBJIGV4cGVjdCB0byBmaW5kIGl0IHRoZXJlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZS4gVGhhdCdzIHRoZSBtb3N0IGNvbW1vbiBsb2NhdGlvbiwgYnV0IEknbSBub3QgZ29pbmcgdG8gYXNzdW1lIGFueXRoaW5nLiBDaGVja2luZyBpdCBpcyB0aGUgYmVzdCBzdGVwIHRvIGRvIGF0IHRoaXMgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjE0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzU6MjcuNDk3ODYwNzI2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTgxODM1NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBzb2NrIFxcXFwqdGNwX3Y0X3N5bl9yZWN2X3NvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9NTYwPXZvaWQgdGNwX2NhX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjU2MTpzdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbmV0L3RjcC5oLTU2Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MTY1NT1pbnQgdGNwX3Y0X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE2NzMtICovXFxubmV0L2lwdjQvdGNwX2lwdjQuYzoxNjc0OnN0cnVjdCBzb2NrICp0Y3BfdjRfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNjc1LVxcdFxcdFxcdFxcdCAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNTozMC4wNzk3MDE2MTFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg0NzMyNDU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGRzdF9tZXRyaWNfYWR2bXNzYCBVc2FnZSoqXG5cbk9rYXksIHNvIEknbSBjb25maXJtaW5nIHRoYXQgd2UncmUgdGFsa2luZyBhYm91dCB0aGUgcmlnaHQgZnVuY3Rpb24gaGVyZS4gTm93LCBJIG5lZWQgdG8gc2VlICp3aGVyZSogdGhpcyBgZHN0X21ldHJpY19hZHZtc3NgIGlzIGJlaW5nIHVzZWQgaW4gdGhlIHN5c3RlbSwgdG8gdW5kZXJzdGFuZCBpdHMgZnVsbCBjb250ZXh0LiBMZXQncyBkbyBhIHF1aWNrIHNjYW4uIEFoLCBnb29kLCB0aGUgY29kZSBzZWFyY2ggdHVybnMgdXAgYSBmZXcgaW50ZXJlc3RpbmcgY2FsbHMuIGBjeGdiaV9zb2NrX3NlbGVjdF9tc3NgIGluIHRoZSBDWEdCSSBTQ1NJIGRyaXZlciwgYHRjcF9vcGVucmVxX2luaXRfcndpbmAgaW4gdGhlIFRDUCBpbml0aWFsaXphdGlvbiwgYW5kIGB4ZnJtX2RlZmF1bHRfYWR2bXNzYCB3aXRoaW4gdGhlIElQc2VjIGZyYW1ld29yay4gVGhhdCBnaXZlcyBtZSBhIG11Y2ggYmV0dGVyIHBpY3R1cmUuIFJpZ2h0LCBuZXh0IEknbGwgZm9jdXMgb24gYHRjcF9vcGVucmVxX2luaXRfcndpbmAsIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODE1NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNTozNi45MjcwMjg1OTRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjI4OTM2MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX29wZW5yZXFfaW5pdF9yd2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTE4MjM9c3RhdGljIGlubGluZSBib29sIHRjcF9lcG9sbGluX3JlYWR5KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgaW50IHRhcmdldClcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTE4MzQtXFxuaW5jbHVkZS9uZXQvdGNwLmg6MTgzNTpleHRlcm4gdm9pZCB0Y3Bfb3BlbnJlcV9pbml0X3J3aW4oc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbmluY2x1ZGUvbmV0L3RjcC5oLTE4MzYtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzc1OS1cXHR0Y3BfcnNrKHJlcSktXFx1MDAzZXN5bl90b3MgPSBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWlwX2RzZmllbGQ7XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6Nzc2MDpcXHR0Y3Bfb3BlbnJlcV9pbml0X3J3aW4ocmVxLCBzaywgZHN0KTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzYxLVxcdHNrX3J4X3F1ZXVlX3NldChyZXFfdG9fc2socmVxKSwgc2tiKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz00MTI9dm9pZCB0Y3BfdHdza19wdXJnZShzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfZXhpdF9saXN0KVxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQzMC0gKi9cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NDMxOnZvaWQgdGNwX29wZW5yZXFfaW5pdF9yd2luKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDMyLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzU6MzguNTg5OTI5NTg4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MzM3MjA5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkZvY3VzaW5nIG9uIFRDUCBDb25uZWN0aW9uIEluaXRpYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyB6b29tIGluLiBJdCdzIGNsZWFyIHRoYXQgYHRjcF9vcGVucmVxX2luaXRfcndpbmAgaXMgZGlyZWN0bHkgaW52b2tlZCBieSBgdGNwX2Nvbm5fcmVxdWVzdGAuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0b3IuIGB0Y3BfY29ubl9yZXF1ZXN0YCBpdHNlbGYgc2VlbXMgdG8gYmUgdGhlIGNydWNpYWwgZW50cnkgcG9pbnQsIHRoZSByZWFsIGhlYXJ0IG9mIHRoZSBjb25uZWN0aW9uIGluaXRpYXRpb24gcHJvY2Vzcy4gSXQncyB0aGUgcmlnaHQgcGxhY2UgdG8gcHV0IG91ciBhdHRlbnRpb24sIHRvIGRpc3NlY3QgdGhlIG9yY2hlc3RyYXRpb24gb2YgZXZlbnRzIGFuZCB1bmRlcnN0YW5kIGhvdyBldmVyeXRoaW5nIGlzIHNldCB1cCB0byByZWNlaXZlIGRhdGEuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgcmVjZWl2ZSB3aW5kb3cgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSByaWdodCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgY29ubmVjdGlvbiBzZXR1cCwgYmVmb3JlIG11Y2ggZWxzZSBpcyBoYW5kbGVkLCB3aGljaCBtYWtlcyBsb2dpY2FsIHNlbnNlLCBpbiB0ZXJtcyBvZiByZXNvdXJjZSBwcmVwYXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGF0IHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgYW5kIGhvdyB0aGUgYHJ3aW5gIGlzIGhhbmRsZWQgaGVyZSB3aWxsIHRlbGwgdXMgYSBsb3QgYWJvdXQgdGhlIG92ZXJhbGwgY29ubmVjdGlvbiBzdHJhdGVneS4gV2UgbmVlZCB0byBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBwYXRoIGNsb3NlbHkgZnJvbSB0aGlzIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg3MCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM1OjQ1LjQyMzY1MzkxMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MzMzMzEzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfY29ubl9yZXF1ZXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTI0Njc9aW50IHRjcF9ydHhfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcXG5pbmNsdWRlL25ldC90Y3AuaDoyNDY4OmludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxcbmluY2x1ZGUvbmV0L3RjcC5oLTI0NjktXFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja19vcHMgKmFmX29wcyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jPTMyNj1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMzgwLVxcdHRwLVxcdTAwM2VyY3ZfbXduZF9zZXEgPSB0cC1cXHUwMDNlcmN2X3d1cCArIHRwLVxcdTAwM2VyY3Zfd25kO1xcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jOjM4MTpcXHQvKiB0Y3BfY29ubl9yZXF1ZXN0KCkgaXMgc2VuZGluZyB0aGUgU1lOQUNLLFxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTM4Mi1cXHQgKiBhbmQgcXVldWVzIHRoZSBjaGlsZCBpbnRvIGxpc3RlbmVyIGFjY2VwdCBxdWV1ZS5cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc1OTQ9dTE2IHRjcF9nZXRfc3luY29va2llX21zcyhzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2MTktXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzYyMDppbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjIxLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzICphZl9vcHMsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTE2NTU9aW50IHRjcF92NF9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNjYwLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTY2MTpcXHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcXHUwMDI2dGNwX3JlcXVlc3Rfc29ja19vcHMsXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNjYyLVxcdFxcdFxcdFxcdFxcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX2lwdjRfb3BzLCBzaywgc2tiKTtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTMxNj1zdGF0aWMgaW50IHRjcF92Nl9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzI4LVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTMyOTpcXHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcXHUwMDI2dGNwNl9yZXF1ZXN0X3NvY2tfb3BzLFxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTMzMC1cXHRcXHRcXHRcXHRcXHUwMDI2dGNwX3JlcXVlc3Rfc29ja19pcHY2X29wcywgc2ssIHNrYik7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTY2OT1zdGF0aWMgaW50IHN1YmZsb3dfdjRfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjc4LVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6Njc5OlxcdHJldHVybiB0Y3BfY29ubl9yZXF1ZXN0KFxcdTAwMjZtcHRjcF9zdWJmbG93X3Y0X3JlcXVlc3Rfc29ja19vcHMsXFxubmV0L21wdGNwL3N1YmZsb3cuYy02ODAtXFx0XFx0XFx0XFx0XFx1MDAyNnN1YmZsb3dfcmVxdWVzdF9zb2NrX2lwdjRfb3BzLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz03MDA9c3RhdGljIGludCBzdWJmbG93X3Y2X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTcxNi1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjcxNzpcXHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcXHUwMDI2bXB0Y3Bfc3ViZmxvd192Nl9yZXF1ZXN0X3NvY2tfb3BzLFxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzE4LVxcdFxcdFxcdFxcdFxcdTAwMjZzdWJmbG93X3JlcXVlc3Rfc29ja19pcHY2X29wcywgc2ssIHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM1OjQ3LjA5Njk5MzkyNVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjQyNjE0MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUQ1AgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgVENQIGNvbm5lY3Rpb24gcHJvY2Vzcy4gYHRjcF9jb25uX3JlcXVlc3RgIGltbWVkaWF0ZWx5IGp1bXBzIG91dC4gSXQncyB0aGUgcG9pbnQgd2hlcmUgdGhlIGluY29taW5nIFNZTiBwYWNrZXRzIGFyZSBwcm9jZXNzZWQsIGFuZCBpdCBoYW5kbGVzIHRoZSBpbml0aWFsIHJlcXVlc3Qgc29ja2V0IHNldHVwLCBpbmNsdWRpbmcgY2FsY3VsYXRpbmcgdGhlIE1heGltdW0gU2VnbWVudCBTaXplLiBUaGF0IHNvdW5kcyBsaWtlIGEgcHJldHR5IGNyaXRpY2FsIGZ1bmN0aW9uLlxuXG5UaGVyZWZvcmUsIHRoZSBmdW5jdGlvbnMgSSByZWFsbHkgd2FudCB0byBmb2N1cyBvbiBhcmU6IGB0Y3BfY29ubmVjdGAsIHdoaWNoIGluaXRpYXRlcyB0aGUgY29ubmVjdGlvbiwgdGhlbiwgb2YgY291cnNlLCAgYHRjcF9jb25uX3JlcXVlc3RgIGl0c2VsZiwgd2hpY2ggc2VlbXMga2V5IHRvIHRoZSBzZXJ2ZXItc2lkZSwgdGhlbiBgdGNwX21ha2Vfc3luYWNrYCBhcyBpdCBzZWVtcyB0byBiZSBpbXBvcnRhbnQsIGFuZCBsYXN0bHkgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCAtIHRoYXQncyBhIGtleSBmdW5jdGlvbiBpbiBoYW5kbGluZyB0aGUgU1lOL0FDSywgaXNuJ3QgaXQ/XG5cblJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSBgdGNwX2Nvbm5fcmVxdWVzdGAgaXMgZXhwb3J0ZWQuIE5lZWQgdG8gY29uZmlybSB0aGF0IGJlZm9yZSBJIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwNDQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNTo1My43Mzk2MTE2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzIyMDU0ODk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLip0Y3BfY29ubl9yZXF1ZXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNTo1Ni4wNjE2NzQ4NjdaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcxODQyODgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiB0aGlzIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBpc24ndCBhIHNpbXBsZSBzdGF0aWMgdmFyaWFibGUgd2UncmUgZGVhbGluZyB3aXRoOyBpdCdzIG1vcmUgZHluYW1pYyB0aGFuIHRoYXQsIHdoaWNoIGlzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLiBMZXQncyBkaWcgaW4gYW5kIHNlZSBob3cgdGhpcyB3b3Jrcy4gSSdsbCB0YWtlIGEgbG9vayBhdCBgdGNwX3Y0X2Nvbm5fcmVxdWVzdGAgYW5kIGB0Y3BfdjZfY29ubl9yZXF1ZXN0YCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaW5ncy4gUmlnaHQsIGB0Y3BfdjRfY29ubl9yZXF1ZXN0YCBpc24ndCBzdGF0aWMsIGJ1dCBgdGNwX3Y2X2Nvbm5fcmVxdWVzdGAgaXMuIFNvLCB3ZSBoYXZlIGEgbGlzdCBvZiBwb3RlbnRpYWxseSByZWxldmFudCBmdW5jdGlvbnMgdG8gZXhhbWluZSBmdXJ0aGVyOiBgdGNwX2Nvbm5lY3RgLCBgdGNwX2Nvbm5fcmVxdWVzdGAsIGB0Y3BfbWFrZV9zeW5hY2tgLCBhbmQgYHRjcF92NF9zeW5fcmVjdl9zb2NrYC5cblxuTm93LCBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIGhhcyBhbnkgd2lkZXIgcmlwcGxlIGVmZmVjdHMuIEFyZSBgaXBfZHN0X210dV9jb25maWd1cmVkYCBvciBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAgdXNlZCAqYW55d2hlcmUqIGVsc2U/IE5vLCBpdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgaXNvbGF0ZWQgdG8gbW9kaWZ5aW5nIGBpcHY0X2RlZmF1bHRfYWR2bXNzYCBhbmQgYGlwNl9kZWZhdWx0X2Fkdm1zc2AsIHdoaWNoIGlzIGhlbHBmdWwuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlnIG9wdGlvbnMuIFRoZSBwYXRjaCBtb2RpZmllcyBgbmV0L2lwdjQvcm91dGUuY2AgYW5kIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gU28sIGlmIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAgYXJlIGVuYWJsZWQsIHRoZXNlIGZpbGVzIGFyZSBjb21waWxlZC4gV2UgYWxyZWFkeSBrbm93IHRoYXQgYENPTkZJR19JTkVUYCBpcyBhbHdheXMgZW5hYmxlZCBpbiBMaW51eCBuZXR3b3JraW5nLCBhbmQgYENPTkZJR19JUFY2YCBzZWVtcyBsaWtlIGEgcHJldHR5IHNhZmUgYmV0IHRvIGluY2x1ZGUuIExldCBtZSBjaGVjayBhbmQgbWFrZSBzdXJlIHRoYXQgYElQVjZgIGlzIGFjdHVhbGx5IG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzNzMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzY6MDIuNzgwMTA3MjYxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk0Mzc5NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWctNS1cXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlRoZSBJUHY2IHByb3RvY29sXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy0yMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxOmNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXFxubmV0L2lwdjYvS2NvbmZpZy0yMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxcbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L0tjb25maWctMzItXFx0Ym9vbCBcXFwiSVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zOC1cXG5uZXQvaXB2Ni9LY29uZmlnOjM5OmNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXFxubmV0L2lwdjYvS2NvbmZpZy00MC1cXHRib29sIFxcXCJJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjExMjpjb25maWcgSVBWNl9NSVA2XFxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IE1vYmlsaXR5XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMTktXFxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXFxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xNDY9Y29uZmlnIElORVQ2X1RVTk5FTFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNDktXFxubmV0L2lwdjYvS2NvbmZpZzoxNTA6Y29uZmlnIElQVjZfVlRJXFxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgKHNlY3VyZSkgSVB2NjogdHVubmVsaW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNjEtXFxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXFxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxcbm5ldC9pcHY2L0tjb25maWctMTc4LVxcdGJvb2wgXFxcIklQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTk1LVxcbm5ldC9pcHY2L0tjb25maWc6MTk2OmNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXFxubmV0L2lwdjYvS2NvbmZpZy0xOTctXFx0Ym9vbFxcbm5ldC9pcHY2L0tjb25maWctMTk4LVxcbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjAwLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogR1JFIHR1bm5lbFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjI3LVxcbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxcbm5ldC9pcHY2L0tjb25maWctMjI5LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjM2LVxcbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjM4LVxcdGJvb2wgXFxcIklQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNDItXFxubmV0L2lwdjYvS2NvbmZpZzoyNDM6Y29uZmlnIElQVjZfU1VCVFJFRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI0NC1cXHRib29sIFxcXCJJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXFxubmV0L2lwdjYvS2NvbmZpZzoyNTc6Y29uZmlnIElQVjZfTVJPVVRFXFxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI2NC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yNjYtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXFxubmV0L2lwdjYvS2NvbmZpZzoyNzk6Y29uZmlnIElQVjZfUElNU01fVjJcXG5uZXQvaXB2Ni9LY29uZmlnLTI4MC1cXHRib29sIFxcXCJJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yODctXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXFxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTMxOC1cXHRib29sIFxcXCJJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cXG5uZXQvaXB2Ni9LY29uZmlnOjMyODpjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzI5LVxcdGJvb2wgXFxcIklQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzY6MDQuNDc0NDk3ODE0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0NTUzOTg0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRDUCBNU1MgUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGJyZWFrZG93bi4gVGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgd2UgY2FsY3VsYXRlIGFuZCBhZHZlcnRpc2UgdGhlIFRDUCBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSBpbiBib3RoIElQdjQgYW5kIElQdjYuIEl0J3MgZXNzZW50aWFsbHkgaW50cm9kdWNpbmcgYGlwX2RzdF9tdHVfY29uZmlndXJlZGAgYW5kIGBpcDZfZHN0X210dV9jb25maWd1cmVkYCB0byBieXBhc3MgSUNNUC1kZXJpdmVkIFBhdGggTVRVIChQTVRVKSBhbmQgaW5zdGVhZCB1c2UgdGhlIGNvbmZpZ3VyZWQgcm91dGUgb3IgZGV2aWNlIE1UVS4gVGhpcyBjaGFuZ2UgZGlyZWN0bHkgaW1wYWN0cyB0aGUgTVNTIHZhbHVlcyBzZW50IGR1cmluZyB0aGUgY29ubmVjdGlvbiBzZXR1cCBwcm9jZXNzIOKAkyB0aGUgU1lOIGFuZCBTWU4tQUNLIHBhY2tldHMuIEdpdmVuIGl0cyBjb3JlIG5ldHdvcmtpbmcgbmF0dXJlIGFuZCB0aGUgcG90ZW50aWFsIGZ1bmN0aW9uYWwgc2hpZnQgaW4gTVNTIGRldGVybWluYXRpb24sIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIHRoZXNlIGZ1bmN0aW9ucywgZ2l2ZW4gdGhlIHBhdGNoJ3Mgc2NvcGU6XG5cbiogICBgdGNwX2Nvbm5lY3RgXG4qICAgYHRjcF9jb25uX3JlcXVlc3RgXG4qICAgYHRjcF9tYWtlX3N5bmFja2BcbiogICBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgXG5cbkkndmUgY29uZmlybWVkIHRoYXQgdGhlIGBJUFY2YCBjb25maWcgaXMgdGhlIHJlbGV2YW50IG9uZSBoZXJlLiBJIGFsc28gZG91YmxlLWNoZWNrZWQgYW5kIHZlcmlmaWVkIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgYG5ldC9pcHY0L3JvdXRlLmNgIGFuZCBgbmV0L2lwdjYvcm91dGUuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVyZSBhcmVuJ3QgYW55IG90aGVyIGNydWNpYWwgY29uZmlncyBuZWVkZWQgZm9yIHRoaXMgYW5hbHlzaXMuXG5cbkkndmUgYWxzbyB2YWxpZGF0ZWQgdGhhdCBgdGNwX2Nvbm5fcmVxdWVzdGAgaXMgaW5kZWVkIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSXQncyB1c2VkIGZvciBib3RoIElQdjQgYW5kIElQdjYgdmlhIHRoZSBgdGNwX3Y0X2Nvbm5fcmVxdWVzdGAgYW5kIGB0Y3BfdjZfY29ubl9yZXF1ZXN0YCBmdW5jdGlvbnMsIGFuZCBjcnVjaWFsbHksIGl0IGNhbGxzIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBkc3RfbWV0cmljX2Fkdm1zc2AuIFRoaXMgaXMgYSBkaXJlY3QgZW50cnkgcG9pbnQgZm9yIG1hbmlwdWxhdGluZyB0aGUgTVNTIGNhbGN1bGF0aW9uLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUuXG5cbkFzIGZvciB0aGUgcmVtYWluaW5nIGZ1bmN0aW9ucywgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBpcyB1c2VkIGZvciBJUHY0LCBhbmQgYWxzbyBmb3IgSVB2NC1tYXBwZWQgSVB2NiBhZGRyZXNzZXMsIHNvIHRoYXQgc2VlbXMgb2suIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AgaXMgdGhlcmUgZm9yIElQdjYsIGJ1dCBpcyBzdGF0aWMsIHdoaWNoIGlzIHdvcnRoIGNvbnNpZGVyaW5nLiBUaGUgb3RoZXIgZnVuY3Rpb25zIGB0Y3BfbWFrZV9zeW5hY2tgIGFuZCBgdGNwX2Nvbm5lY3RgIGFsc28gaGF2ZSB2ZXJzaW9ucyB0aGF0IGFyZSBjYWxsZWQgZm9yIGJvdGggSVB2NCBhbmQgSVB2NiByZXNwZWN0aXZlbHkuXG5cbkdpdmVuIHRoaXMgYW5hbHlzaXMsIG15IGZ1bmN0aW9uIGxpc3QgaXMgc29saWQuIEknbSByZWFkeSB0byBwcm9jZWVkLiBOb3csIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTU3LCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNjoxMi45Mjk4OTkyNTJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjgwODE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9jb25uZWN0XCIsXG4gICAgXCJ0Y3BfY29ubl9yZXF1ZXN0XCIsXG4gICAgXCJ0Y3BfbWFrZV9zeW5hY2tcIixcbiAgICBcInRjcF92NF9zeW5fcmVjdl9zb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIFRDUCBNU1MgaW4gSVB2NCBhbmQgSVB2Ni4gSXQgaW50cm9kdWNlcyBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgIHRvIGlnbm9yZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgYW5kIGluc3RlYWQgdXNlIHRoZSBjb25maWd1cmVkIHJvdXRlIG9yIGRldmljZSBNVFUuIFRoaXMgYWZmZWN0cyB0aGUgVENQIE1TUyBhZHZlcnRpc2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwIChTWU4vU1lOLUFDSykuIFRoZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIGZ1bmN0aW9uYWxseSBhbHRlciBob3cgTVNTIGlzIGRldGVybWluZWQsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9jb25uZWN0XCIsXG4gICAgXCJ0Y3BfY29ubl9yZXF1ZXN0XCIsXG4gICAgXCJ0Y3BfbWFrZV9zeW5hY2tcIixcbiAgICBcInRjcF92NF9zeW5fcmVjdl9zb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIFRDUCBNU1MgaW4gSVB2NCBhbmQgSVB2Ni4gSXQgaW50cm9kdWNlcyBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgIHRvIGlnbm9yZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgYW5kIGluc3RlYWQgdXNlIHRoZSBjb25maWd1cmVkIHJvdXRlIG9yIGRldmljZSBNVFUuIFRoaXMgYWZmZWN0cyB0aGUgVENQIE1TUyBhZHZlcnRpc2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwIChTWU4vU1lOLUFDSykuIFRoZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIGZ1bmN0aW9uYWxseSBhbHRlciBob3cgTVNTIGlzIGRldGVybWluZWQsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM2OjEzLjAwMjcxNDA2MVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMjc2MDk1NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNjoxMy4wMDMyODE5NjFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTExMjcwMzc5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBUQ1AgTVNTIGJ5IGludHJvZHVjaW5nIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoKWAgYW5kIGBpcDZfZHN0X210dV9jb25maWd1cmVkKClgLiBUaGVzZSBmdW5jdGlvbnMgcmVhZCBleGlzdGluZywgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gcm91dGluZyBhbmQgZGV2aWNlIHN0cnVjdHVyZXMgKGBkc3RfZW50cnlgLCBgcnQ2X2luZm9gLCBgZmliNl9pbmZvYCwgYG5ldF9kZXZpY2VgLCBgaW5ldDZfZGV2YCkgdG8gZGV0ZXJtaW5lIHRoZSBjb25maWd1cmVkIE1UVSwgaWdub3JpbmcgSUNNUC1sZWFybmVkIHBhdGggTVRVLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBuZXcgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzhkNjc0Yjk4Yzg1OWM3ZjNhNjJjMWNjNGY3YmU5ODMwZGM4NTMxOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA3OjMzOjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmhcbmluZGV4IDdmMmZlMWE4NDAxYjEuLmE4ZjU3YjRmNGFhMjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcC5oXG4rKysgYi9pbmNsdWRlL25ldC9pcC5oXG5AQCAtNTA2LDYgKzUwNiwzMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuIFx0cmV0dXJuIHJlcztcbiB9XG4gXG4rLyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxuKyAqXG4rICogVW5saWtlIGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGRlbGliZXJhdGVseSBpZ25vcmVzIHRoZVxuKyAqIElDTVAtbGVhcm5lZCBwYXRoIE1UVSAocnQtXHUwMDNlcnRfcG10dSkuICBUaGUgYWR2ZXJ0aXNlZCBNU1MgYm91bmRzIHdoYXQgdGhlXG4rICogcGVlciBtYXkgc2VuZCB0byB1cyBhbmQgbXVzdCByZWZsZWN0IG91ciByZWNlaXZlIGNhcGFiaWxpdHkgKHRoZSBkZXZpY2Ugb3JcbisgKiByb3V0ZS1jb25maWd1cmVkIE1UVSksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpXG4rICogZGlyZWN0aW9uLCB3aGljaCBtYXkgbm90IGFwcGx5IHRvIHRoZSBwZWVyLVx1MDAzZXVzIHBhdGggYW5kIG91dGxpdmVzIHRoZSBmbmhlXG4rICogZm9yIHRoZSB3aG9sZSBjb25uZWN0aW9uLiAgU2VlIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZVxuKyAqIHRjcF9hZHZlcnRpc2VfbXNzKCkuXG4rICovXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbit7XG4rXHR1bnNpZ25lZCBpbnQgbXR1LCByZXM7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRtdHUgPSBkc3RfbWV0cmljX3Jhdyhkc3QsIFJUQVhfTVRVKTtcbitcdGlmICghbXR1KVxuK1x0XHRtdHUgPSBSRUFEX09OQ0UoZHN0X2Rldl9yY3UoZHN0KS1cdTAwM2VtdHUpO1xuK1x0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQX01BWF9NVFUpO1xuK1x0cmVzID0gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggMDlmZmUwZjEzY2U3NS4uYWMxYWNjMGI3NDM2OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTM4NSw2ICszODUsNDMgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RcbiBcdHJldHVybiBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtXHUwMDNlbHd0c3RhdGUsIG10dSk7XG4gfVxuIFxuKy8qIENvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIGEgcm91dGUsIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUy5cbisgKlxuKyAqIFVubGlrZSBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgaWdub3JlcyBhbnkgSUNNUHY2LWxlYXJuZWQgcGF0aFxuKyAqIE1UVSAod2hpY2ggaXMga2VwdCBvbiB0aGUgUlRGX0NBQ0hFIGV4Y2VwdGlvbiByb3V0ZSkgYW5kIHJldHVybnMgdGhlIE1UVSBvZlxuKyAqIHRoZSB1bmRlcmx5aW5nIHJvdXRlIChmaWI2X3BtdHUpIG9yIHRoZSBlZ3Jlc3MgZGV2aWNlLiAgVGhlIGFkdmVydGlzZWQgTVNTXG4rICogYm91bmRzIHdoYXQgdGhlIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZVxuKyAqIGNhcGFiaWxpdHksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpIGRpcmVjdGlvbi4gIFNlZVxuKyAqIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZSB0Y3BfYWR2ZXJ0aXNlX21zcygpLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQgPSBkc3RfcnQ2X2luZm8oZHN0KTtcbitcdGNvbnN0IHN0cnVjdCBmaWI2X2luZm8gKmZyb207XG4rXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xuK1x0dW5zaWduZWQgaW50IG10dSA9IDA7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHQvKiBJUHY2IGtlZXBzIHRoZSBsZWFybmVkIFBNVFUgYW5kIHRoZSBjb25maWd1cmVkIE1UVSBpbiB0aGUgc2FtZVxuK1x0ICogUlRBWF9NVFUgc2xvdDogdGhlIGxlYXJuZWQgdmFsdWUgc2l0cyBvbiB0aGlzIChwb3NzaWJseSBSVEZfQ0FDSEUpXG4rXHQgKiBkc3QsIHRoZSBjb25maWd1cmVkIG9uZSBvbiB0aGUgdW5kZXJseWluZyByb3V0ZS4gIFJlYWNoIHRoZSBsYXR0ZXJcbitcdCAqIHZpYSAtXHUwMDNlZnJvbSAoZmliNl9wbXR1KSwgcG9wdWxhdGVkIGJ5IGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZSgpLlxuK1x0ICovXG4rXHRmcm9tID0gcmN1X2RlcmVmZXJlbmNlKHJ0LVx1MDAzZWZyb20pO1xuK1x0aWYgKGZyb20pXG4rXHRcdG10dSA9IGZyb20tXHUwMDNlZmliNl9wbXR1O1xuK1x0aWYgKCFtdHUpIHtcbitcdFx0bXR1ID0gSVBWNl9NSU5fTVRVO1xuK1x0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2X3JjdShkc3QpKTtcbitcdFx0aWYgKGlkZXYpXG4rXHRcdFx0bXR1ID0gbWF4X3QodW5zaWduZWQgaW50LCBtdHUsIFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5tdHU2KSk7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XG4rXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuK31cbitcbiB1MzIgaXA2X210dV9mcm9tX2ZpYjYoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsXG4gXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsXG4gXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jXG5pbmRleCBmZDY4OGUxZjg3OWY1Li40NmFhOThjOTIxODMzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvcm91dGUuY1xuKysrIGIvbmV0L2lwdjQvcm91dGUuY1xuQEAgLTEzMzQsOCArMTMzNCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRuZXQgPSBkc3RfZGV2X25ldF9yY3UoZHN0KTtcbi1cdGFkdm1zcyA9IG1heF90KHVuc2lnbmVkIGludCwgaXB2NF9tdHUoZHN0KSAtIGhlYWRlcl9zaXplLFxuLVx0XHRcdFx0ICAgbmV0LVx1MDAzZWlwdjQuaXBfcnRfbWluX2Fkdm1zcyk7XG4rXHRhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwX2RzdF9tdHVfY29uZmlndXJlZChkc3QpIC0gaGVhZGVyX3NpemUsXG4rXHRcdCAgICAgICBuZXQtXHUwMDNlaXB2NC5pcF9ydF9taW5fYWR2bXNzKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIG1pbihhZHZtc3MsIElQVjRfTUFYX1BNVFUgLSBoZWFkZXJfc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmNcbmluZGV4IDU5NjhjZTVhZDE1MDguLmUyMDU2YmQwZGYzYzQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5AQCAtMzI2MSw3ICszMjYxLDcgQEAgdm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbXR1ID0gZHN0Nl9tdHUoZHN0KTtcbitcdHVuc2lnbmVkIGludCBtdHUgPSBpcDZfZHN0X210dV9jb25maWd1cmVkKGRzdCk7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQ7XG4gXG4gXHRtdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM2OjEzLjAwMzI4MjYxMVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTEyNzAxNDY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBzd2l0Y2hpbmcgdGhpbmdzIHVwIHdpdGggaG93IHdlIGNhbGN1bGF0ZSB0aGUgYWR2ZXJ0aXNlZCBUQ1AgTVNTLCBzcGVjaWZpY2FsbHkgYnkgdXNpbmcgdGhlc2UgbmV3IGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoKWAgYW5kIGBpcDZfZHN0X210dV9jb25maWd1cmVkKClgIGZ1bmN0aW9ucyBpbiBgaXB2NF9kZWZhdWx0X2Fkdm1zcygpYCBhbmQgYGlwNl9kZWZhdWx0X2Fkdm1zcygpYC4gVGhlIHdob2xlIHBvaW50IGlzIHRvIGlnbm9yZSBwYXRoIE1UVSBsZWFybmVkIHZpYSBJQ01QLCB3aGljaCBtYWtlcyBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiB0dW5pbmcgVENQIGJlaGF2aW9yLlxuXG5MZXQncyBicmVhayBkb3duIHRoZSBkYXRhIGZsb3cuIEZvciBJUHY0LCB0aGUgcGF0Y2ggbm93IGdyYWJzIHRoZSBNVFUgZnJvbSBgZHN0X21ldHJpY19yYXcoZHN0LCBSVEFYX01UVSlgIGFuZCBgZHN0X2Rldl9yY3UoZHN0KS1cdTAwM2VtdHVgLiBGb3IgSVB2NiwgaXQncyBwdWxsaW5nIGZyb20gYHJ0LVx1MDAzZWZyb20tXHUwMDNlZmliNl9wbXR1YCBhbmQgYGlkZXYtXHUwMDNlY25mLm10dTZgLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZXNlIHZhbHVlcyBhcmUgYmVpbmcgdXNlZCB0byBjb21wdXRlIGBhZHZtc3NgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcz8gQWZ0ZXIgbG9va2luZyBpbnRvIGl0LCBJIGNhbiBzZWUgdGhhdCB0aGUgcGF0Y2ggZG9lc24ndCBpbnZvbHZlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLiBJdCdzIGp1c3QgbW9kaWZ5aW5nIGhvdyB3ZSAqcmVhZCogdGhlIE1UVSBpbmZvcm1hdGlvbiBmcm9tIGV4aXN0aW5nLCBhbHJlYWR5IGluaXRpYWxpemVkIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBTcGVjaWZpY2FsbHkgd2UncmUgcmVhZGluZyBgZHN0X2VudHJ5YCwgYHJ0Nl9pbmZvYCwgYGZpYjZfaW5mb2AsIGBpbmV0Nl9kZXZgIGZpZWxkcyB0byBnZXQgdGhlIHZhbHVlcyBmcm9tLiBJJ20gcHJldHR5IGNvbmZpZGVudCB0aGVyZSdzIG5vIHdheSB0aGlzIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYSB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLlxuXG5UaGUgdmFyaWFibGVzIGJlaW5nIHJlYWQgYXJlIHN0YW5kYXJkIGZpZWxkcyB3aXRoaW4gdGhlaXIgcmVzcGVjdGl2ZSBzdHJ1Y3RzOyBgZHN0LVx1MDAzZW1ldHJpY3NgLCBgbmV0X2RldmljZS1cdTAwM2VtdHVgLCBgZmliNl9pbmZvYCwgYW5kIGBpbmV0Nl9kZXZgIGFuZCBhcmUgYWxsIHByaW1pdGl2ZSB0eXBlcy4gU3RhbmRhcmQgY2hlY2tzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAgd2lsbCBiZSBlbm91Z2ggdG8gY2F0Y2ggYW55IGJ1Z3MgaW4gdGhlIGxvZ2ljIGNoYW5nZSBpZiB0aGV5IHdlcmUgaW50cm9kdWNlZC4gS01TQU4gaXMgZ3JlYXQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgYnV0IGl0J3Mgbm90IGFwcGxpY2FibGUgaGVyZS5cblxuVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBqdXN0IHdlbnQgdGhyb3VnaCB0aGUgZmllbGRzLiBgZHN0X21ldHJpY19yYXdgIGFjY2Vzc2VzIGBkc3QtXHUwMDNlbWV0cmljc2AuIGBkc3RfZGV2X3JjdShkc3QpLVx1MDAzZW10dWAgcmVhZHMgZnJvbSBgbmV0X2RldmljZS1cdTAwM2VtdHVgLiBgcnQtXHUwMDNlZnJvbWAgZGVyZWZlcmVuY2VzIGEgYGZpYjZfaW5mb2AgcG9pbnRlci4gYGZyb20tXHUwMDNlZmliNl9wbXR1YCBpcyBhIGB1MzJgLiBgaWRldi1cdTAwM2VjbmYubXR1NmAgaXMgYW4gYHMzMmAuIEFsbCBvZiB0aGVzZSBhcmUgaW5pdGlhbGl6ZWQgZmllbGRzLCBzbyBubywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5JbiBzaG9ydCwgbXkgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBjaGFuZ2VzIE1UVSBjYWxjdWxhdGlvbiwgcmVhZGluZyBleGlzdGluZyBhbmQgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gYGRzdF9lbnRyeWAsIGBydDZfaW5mb2AsIGBmaWI2X2luZm9gLCBgbmV0X2RldmljZWAgYW5kIGBpbmV0Nl9kZXZgIGZvciBJUHY0IGFuZCBJUHY2IHRvIGRldGVybWluZSB0aGUgY29uZmlndXJlZCBNVFUuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBvdGhlcndpc2UgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyB3aWxsIGhhbmRsZSBhbnkgcHJvYmxlbXMgdGhhdCBtaWdodCBhcmlzZSBmcm9tIHRoZSBwYXRjaC4gTm8gS01TQU4gaXMgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDY4LCJPdXRwdXRUb2tlbnMiOjE5MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM2OjI0LjEzMDMwMDkyMloiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIFRDUCBNU1MgYnkgaW50cm9kdWNpbmcgYGlwX2RzdF9tdHVfY29uZmlndXJlZCgpYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoKWAuIFRoZXNlIGZ1bmN0aW9ucyByZWFkIGV4aXN0aW5nLCBpbml0aWFsaXplZCBmaWVsZHMgZnJvbSByb3V0aW5nIGFuZCBkZXZpY2Ugc3RydWN0dXJlcyAoYGRzdF9lbnRyeWAsIGBydDZfaW5mb2AsIGBmaWI2X2luZm9gLCBgbmV0X2RldmljZWAsIGBpbmV0Nl9kZXZgKSB0byBkZXRlcm1pbmUgdGhlIGNvbmZpZ3VyZWQgTVRVLCBpZ25vcmluZyBJQ01QLWxlYXJuZWQgcGF0aCBNVFUuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIG5ldyBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGFkdmVydGlzZWQgVENQIE1TUyBieSBpbnRyb2R1Y2luZyBgaXBfZHN0X210dV9jb25maWd1cmVkKClgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZCgpYC4gVGhlc2UgZnVuY3Rpb25zIHJlYWQgZXhpc3RpbmcsIGluaXRpYWxpemVkIGZpZWxkcyBmcm9tIHJvdXRpbmcgYW5kIGRldmljZSBzdHJ1Y3R1cmVzIChgZHN0X2VudHJ5YCwgYHJ0Nl9pbmZvYCwgYGZpYjZfaW5mb2AsIGBuZXRfZGV2aWNlYCwgYGluZXQ2X2RldmApIHRvIGRldGVybWluZSB0aGUgY29uZmlndXJlZCBNVFUsIGlnbm9yaW5nIElDTVAtbGVhcm5lZCBwYXRoIE1UVS4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowmn6n2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 06:52:43 +0000 UTC FinishedAt: 2026-08-14 07:36:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6057f06ef7afa9893ed33603f7917fa39d237b5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6057f06ef7afa9893ed33603f7917fa39d237b5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "cc308655-7e0a-49bd-bd0d-42c76ef926e8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_connect", "tcp_conn_request", "tcp_make_synack", "tcp_v4_syn_recv_sock" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfY29ubmVjdCYjMzQ7LAogICAgJiMzNDt0Y3BfY29ubl9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O3RjcF9tYWtlX3N5bmFjayYjMzQ7LAogICAgJiMzNDt0Y3BfdjRfc3luX3JlY3Zfc29jayYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBUQ1AgTVNTIGJ5IGludHJvZHVjaW5nIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoKWAgYW5kIGBpcDZfZHN0X210dV9jb25maWd1cmVkKClgLiBUaGVzZSBmdW5jdGlvbnMgcmVhZCBleGlzdGluZywgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gcm91dGluZyBhbmQgZGV2aWNlIHN0cnVjdHVyZXMgKGBkc3RfZW50cnlgLCBgcnQ2X2luZm9gLCBgZmliNl9pbmZvYCwgYG5ldF9kZXZpY2VgLCBgaW5ldDZfZGV2YCkgdG8gZGV0ZXJtaW5lIHRoZSBjb25maWd1cmVkIE1UVSwgaWdub3JpbmcgSUNNUC1sZWFybmVkIHBhdGggTVRVLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBuZXcgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBUQ1AgTVNTIGluIElQdjQgYW5kIElQdjYuIEl0IGludHJvZHVjZXMgYGlwX2RzdF9tdHVfY29uZmlndXJlZGAgYW5kIGBpcDZfZHN0X210dV9jb25maWd1cmVkYCB0byBpZ25vcmUgSUNNUC1sZWFybmVkIHBhdGggTVRVIGFuZCBpbnN0ZWFkIHVzZSB0aGUgY29uZmlndXJlZCByb3V0ZSBvciBkZXZpY2UgTVRVLiBUaGlzIGFmZmVjdHMgdGhlIFRDUCBNU1MgYWR2ZXJ0aXNlZCBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cCAoU1lOL1NZTi1BQ0spLiBUaGUgY2hhbmdlcyBhcmUgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXIgaG93IE1TUyBpcyBkZXRlcm1pbmVkLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzhkNjc0Yjk4Yzg1OWM3ZjNhNjJjMWNjNGY3YmU5ODMwZGM4NTMxOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA3OjMzOjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oXG5pbmRleCA3ZjJmZTFhODQwMWIxLi5hOGY1N2I0ZjRhYTIzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXAuaFxuQEAgLTUwNiw2ICYjNDM7NTA2LDMxIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbiYjNDM7LyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxuJiM0MzsgKlxuJiM0MzsgKiBVbmxpa2UgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgZGVsaWJlcmF0ZWx5IGlnbm9yZXMgdGhlXG4mIzQzOyAqIElDTVAtbGVhcm5lZCBwYXRoIE1UVSAocnQtXHUwMDNlcnRfcG10dSkuICBUaGUgYWR2ZXJ0aXNlZCBNU1MgYm91bmRzIHdoYXQgdGhlXG4mIzQzOyAqIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZSBjYXBhYmlsaXR5ICh0aGUgZGV2aWNlIG9yXG4mIzQzOyAqIHJvdXRlLWNvbmZpZ3VyZWQgTVRVKSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZClcbiYjNDM7ICogZGlyZWN0aW9uLCB3aGljaCBtYXkgbm90IGFwcGx5IHRvIHRoZSBwZWVyLVx1MDAzZXVzIHBhdGggYW5kIG91dGxpdmVzIHRoZSBmbmhlXG4mIzQzOyAqIGZvciB0aGUgd2hvbGUgY29ubmVjdGlvbi4gIFNlZSBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmVcbiYjNDM7ICogdGNwX2FkdmVydGlzZV9tc3MoKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbXR1LCByZXM7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRtdHUgPSBkc3RfbWV0cmljX3Jhdyhkc3QsIFJUQVhfTVRVKTtcbiYjNDM7XHRpZiAoIW10dSlcbiYjNDM7XHRcdG10dSA9IFJFQURfT05DRShkc3RfZGV2X3JjdShkc3QpLVx1MDAzZW10dSk7XG4mIzQzO1x0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQX01BWF9NVFUpO1xuJiM0MztcdHJlcyA9IG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggMDlmZmUwZjEzY2U3NS4uYWMxYWNjMGI3NDM2OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTM4NSw2ICYjNDM7Mzg1LDQzIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0XG4gXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuIH1cbiBcbiYjNDM7LyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxuJiM0MzsgKlxuJiM0MzsgKiBVbmxpa2UgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGlnbm9yZXMgYW55IElDTVB2Ni1sZWFybmVkIHBhdGhcbiYjNDM7ICogTVRVICh3aGljaCBpcyBrZXB0IG9uIHRoZSBSVEZfQ0FDSEUgZXhjZXB0aW9uIHJvdXRlKSBhbmQgcmV0dXJucyB0aGUgTVRVIG9mXG4mIzQzOyAqIHRoZSB1bmRlcmx5aW5nIHJvdXRlIChmaWI2X3BtdHUpIG9yIHRoZSBlZ3Jlc3MgZGV2aWNlLiAgVGhlIGFkdmVydGlzZWQgTVNTXG4mIzQzOyAqIGJvdW5kcyB3aGF0IHRoZSBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmVcbiYjNDM7ICogY2FwYWJpbGl0eSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZCkgZGlyZWN0aW9uLiAgU2VlXG4mIzQzOyAqIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZSB0Y3BfYWR2ZXJ0aXNlX21zcygpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZpYjZfaW5mbyAqZnJvbTtcbiYjNDM7XHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xuJiM0MztcdHVuc2lnbmVkIGludCBtdHUgPSAwO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0LyogSVB2NiBrZWVwcyB0aGUgbGVhcm5lZCBQTVRVIGFuZCB0aGUgY29uZmlndXJlZCBNVFUgaW4gdGhlIHNhbWVcbiYjNDM7XHQgKiBSVEFYX01UVSBzbG90OiB0aGUgbGVhcm5lZCB2YWx1ZSBzaXRzIG9uIHRoaXMgKHBvc3NpYmx5IFJURl9DQUNIRSlcbiYjNDM7XHQgKiBkc3QsIHRoZSBjb25maWd1cmVkIG9uZSBvbiB0aGUgdW5kZXJseWluZyByb3V0ZS4gIFJlYWNoIHRoZSBsYXR0ZXJcbiYjNDM7XHQgKiB2aWEgLVx1MDAzZWZyb20gKGZpYjZfcG10dSksIHBvcHVsYXRlZCBieSBpcDZfcm91dGVfaW5mb19jcmVhdGUoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmcm9tID0gcmN1X2RlcmVmZXJlbmNlKHJ0LVx1MDAzZWZyb20pO1xuJiM0MztcdGlmIChmcm9tKVxuJiM0MztcdFx0bXR1ID0gZnJvbS1cdTAwM2VmaWI2X3BtdHU7XG4mIzQzO1x0aWYgKCFtdHUpIHtcbiYjNDM7XHRcdG10dSA9IElQVjZfTUlOX01UVTtcbiYjNDM7XHRcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXZfcmN1KGRzdCkpO1xuJiM0MztcdFx0aWYgKGlkZXYpXG4mIzQzO1x0XHRcdG10dSA9IG1heF90KHVuc2lnbmVkIGludCwgbXR1LCBSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYubXR1NikpO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTtcbiYjNDM7XHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuJiM0Mzt9XG4mIzQzO1xuIHUzMiBpcDZfbXR1X2Zyb21fZmliNihjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcyxcbiBcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkcixcbiBcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkcik7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmNcbmluZGV4IGZkNjg4ZTFmODc5ZjUuLjQ2YWE5OGM5MjE4MzMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9yb3V0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9yb3V0ZS5jXG5AQCAtMTMzNCw4ICYjNDM7MTMzNCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRuZXQgPSBkc3RfZGV2X25ldF9yY3UoZHN0KTtcbi1cdGFkdm1zcyA9IG1heF90KHVuc2lnbmVkIGludCwgaXB2NF9tdHUoZHN0KSAtIGhlYWRlcl9zaXplLFxuLVx0XHRcdFx0ICAgbmV0LVx1MDAzZWlwdjQuaXBfcnRfbWluX2Fkdm1zcyk7XG4mIzQzO1x0YWR2bXNzID0gbWF4X3QodW5zaWduZWQgaW50LCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KSAtIGhlYWRlcl9zaXplLFxuJiM0MztcdFx0ICAgICAgIG5ldC1cdTAwM2VpcHY0LmlwX3J0X21pbl9hZHZtc3MpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gbWluKGFkdm1zcywgSVBWNF9NQVhfUE1UVSAtIGhlYWRlcl9zaXplKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xuaW5kZXggNTk2OGNlNWFkMTUwOC4uZTIwNTZiZDBkZjNjNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmNcbkBAIC0zMjYxLDcgJiM0MzszMjYxLDcgQEAgdm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbXR1ID0gZHN0Nl9tdHUoZHN0KTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbXR1ID0gaXA2X2RzdF9tdHVfY29uZmlndXJlZChkc3QpO1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFxuIFx0bXR1IC09IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7dGNwX2Nvbm5fcmVxdWVzdCYjMzQ7LAogICAgJiMzNDt0Y3BfbWFrZV9zeW5hY2smIzM0OywKICAgICYjMzQ7dGNwX3Y0X3N5bl9yZWN2X3NvY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIFRDUCBNU1MgaW4gSVB2NCBhbmQgSVB2Ni4gSXQgaW50cm9kdWNlcyBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgIHRvIGlnbm9yZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgYW5kIGluc3RlYWQgdXNlIHRoZSBjb25maWd1cmVkIHJvdXRlIG9yIGRldmljZSBNVFUuIFRoaXMgYWZmZWN0cyB0aGUgVENQIE1TUyBhZHZlcnRpc2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwIChTWU4vU1lOLUFDSykuIFRoZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIGZ1bmN0aW9uYWxseSBhbHRlciBob3cgTVNTIGlzIGRldGVybWluZWQsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjOGQ2NzRiOThjODU5YzdmM2E2MmMxY2M0ZjdiZTk4MzBkYzg1MzE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMDc6MzM6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcC5oIGIvaW5jbHVkZS9uZXQvaXAuaAppbmRleCA3ZjJmZTFhODQwMWIxLi5hOGY1N2I0ZjRhYTIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwLmgKQEAgLTUwNiw2ICYjNDM7NTA2LDMxIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCiAJcmV0dXJuIHJlczsKIH0KIAomIzQzOy8qIENvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIGEgcm91dGUsIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUy4KJiM0MzsgKgomIzQzOyAqIFVubGlrZSBpcF9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBkZWxpYmVyYXRlbHkgaWdub3JlcyB0aGUKJiM0MzsgKiBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgKHJ0LSZndDtydF9wbXR1KS4gIFRoZSBhZHZlcnRpc2VkIE1TUyBib3VuZHMgd2hhdCB0aGUKJiM0MzsgKiBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmUgY2FwYWJpbGl0eSAodGhlIGRldmljZSBvcgomIzQzOyAqIHJvdXRlLWNvbmZpZ3VyZWQgTVRVKSwgbm90IGEgcGF0aCBNVFUgbGVhcm5lZCBvbiB0aGUgcmV2ZXJzZSAoc2VuZCkKJiM0MzsgKiBkaXJlY3Rpb24sIHdoaWNoIG1heSBub3QgYXBwbHkgdG8gdGhlIHBlZXItJmd0O3VzIHBhdGggYW5kIG91dGxpdmVzIHRoZSBmbmhlCiYjNDM7ICogZm9yIHRoZSB3aG9sZSBjb25uZWN0aW9uLiAgU2VlIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZQomIzQzOyAqIHRjcF9hZHZlcnRpc2VfbXNzKCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBtdHUsIHJlczsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwltdHUgPSBkc3RfbWV0cmljX3Jhdyhkc3QsIFJUQVhfTVRVKTsKJiM0MzsJaWYgKCFtdHUpCiYjNDM7CQltdHUgPSBSRUFEX09OQ0UoZHN0X2Rldl9yY3UoZHN0KS0mZ3Q7bXR1KTsKJiM0MzsJbXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQX01BWF9NVFUpOwomIzQzOwlyZXMgPSBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtJmd0O2x3dHN0YXRlLCBtdHUpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKaW5kZXggMDlmZmUwZjEzY2U3NS4uYWMxYWNjMGI3NDM2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKQEAgLTM4NSw2ICYjNDM7Mzg1LDQzIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0CiAJcmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC0mZ3Q7bHd0c3RhdGUsIG10dSk7CiB9CiAKJiM0MzsvKiBDb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiBhIHJvdXRlLCBmb3IgYWR2ZXJ0aXNpbmcgdGhlIFRDUCBNU1MuCiYjNDM7ICoKJiM0MzsgKiBVbmxpa2UgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGlnbm9yZXMgYW55IElDTVB2Ni1sZWFybmVkIHBhdGgKJiM0MzsgKiBNVFUgKHdoaWNoIGlzIGtlcHQgb24gdGhlIFJURl9DQUNIRSBleGNlcHRpb24gcm91dGUpIGFuZCByZXR1cm5zIHRoZSBNVFUgb2YKJiM0MzsgKiB0aGUgdW5kZXJseWluZyByb3V0ZSAoZmliNl9wbXR1KSBvciB0aGUgZWdyZXNzIGRldmljZS4gIFRoZSBhZHZlcnRpc2VkIE1TUwomIzQzOyAqIGJvdW5kcyB3aGF0IHRoZSBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmUKJiM0MzsgKiBjYXBhYmlsaXR5LCBub3QgYSBwYXRoIE1UVSBsZWFybmVkIG9uIHRoZSByZXZlcnNlIChzZW5kKSBkaXJlY3Rpb24uICBTZWUKJiM0MzsgKiBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmUgdGNwX2FkdmVydGlzZV9tc3MoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQgPSBkc3RfcnQ2X2luZm8oZHN0KTsKJiM0MzsJY29uc3Qgc3RydWN0IGZpYjZfaW5mbyAqZnJvbTsKJiM0MzsJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKJiM0MzsJdW5zaWduZWQgaW50IG10dSA9IDA7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJLyogSVB2NiBrZWVwcyB0aGUgbGVhcm5lZCBQTVRVIGFuZCB0aGUgY29uZmlndXJlZCBNVFUgaW4gdGhlIHNhbWUKJiM0MzsJICogUlRBWF9NVFUgc2xvdDogdGhlIGxlYXJuZWQgdmFsdWUgc2l0cyBvbiB0aGlzIChwb3NzaWJseSBSVEZfQ0FDSEUpCiYjNDM7CSAqIGRzdCwgdGhlIGNvbmZpZ3VyZWQgb25lIG9uIHRoZSB1bmRlcmx5aW5nIHJvdXRlLiAgUmVhY2ggdGhlIGxhdHRlcgomIzQzOwkgKiB2aWEgLSZndDtmcm9tIChmaWI2X3BtdHUpLCBwb3B1bGF0ZWQgYnkgaXA2X3JvdXRlX2luZm9fY3JlYXRlKCkuCiYjNDM7CSAqLwomIzQzOwlmcm9tID0gcmN1X2RlcmVmZXJlbmNlKHJ0LSZndDtmcm9tKTsKJiM0MzsJaWYgKGZyb20pCiYjNDM7CQltdHUgPSBmcm9tLSZndDtmaWI2X3BtdHU7CiYjNDM7CWlmICghbXR1KSB7CiYjNDM7CQltdHUgPSBJUFY2X01JTl9NVFU7CiYjNDM7CQlpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2X3JjdShkc3QpKTsKJiM0MzsJCWlmIChpZGV2KQomIzQzOwkJCW10dSA9IG1heF90KHVuc2lnbmVkIGludCwgbXR1LCBSRUFEX09OQ0UoaWRldi0mZ3Q7Y25mLm10dTYpKTsKJiM0MzsJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJbXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQNl9NQVhfTVRVKTsKJiM0MzsJcmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC0mZ3Q7bHd0c3RhdGUsIG10dSk7CiYjNDM7fQomIzQzOwogdTMyIGlwNl9tdHVfZnJvbV9maWI2KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLAogCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IGZkNjg4ZTFmODc5ZjUuLjQ2YWE5OGM5MjE4MzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMTMzNCw4ICYjNDM7MTMzNCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbmV0ID0gZHN0X2Rldl9uZXRfcmN1KGRzdCk7Ci0JYWR2bXNzID0gbWF4X3QodW5zaWduZWQgaW50LCBpcHY0X210dShkc3QpIC0gaGVhZGVyX3NpemUsCi0JCQkJICAgbmV0LSZndDtpcHY0LmlwX3J0X21pbl9hZHZtc3MpOwomIzQzOwlhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwX2RzdF9tdHVfY29uZmlndXJlZChkc3QpIC0gaGVhZGVyX3NpemUsCiYjNDM7CQkgICAgICAgbmV0LSZndDtpcHY0LmlwX3J0X21pbl9hZHZtc3MpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIG1pbihhZHZtc3MsIElQVjRfTUFYX1BNVFUgLSBoZWFkZXJfc2l6ZSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCA1OTY4Y2U1YWQxNTA4Li5lMjA1NmJkMGRmM2M0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTMyNjEsNyAmIzQzOzMyNjEsNyBAQCB2b2lkIGlwNl9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIHsKLQl1bnNpZ25lZCBpbnQgbXR1ID0gZHN0Nl9tdHUoZHN0KTsKJiM0MzsJdW5zaWduZWQgaW50IG10dSA9IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KTsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAKIAltdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSAmIzQzOyBzaXplb2Yoc3RydWN0IHRjcGhkcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NzEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYSBOZXR3b3JraW5nIFN0YWNrIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgYSBjcnVjaWFsIGNoYW5nZSB0byBob3cgd2UgaGFuZGxlIE1heGltdW0gU2VnbWVudCBTaXplIChNU1MpIGFkdmVydGlzZW1lbnRzIGluIHRoZSBUQ1Agc3RhY2suIEl0IHNlZW1zIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2ssIHNwZWNpZmljYWxseSBJUHY0IGFuZCBJUHY2IHJvdXRpbmcsIGlzIGJlaW5nIHVwZGF0ZWQuIFRoZSBrZXkgaXMgaW4gdGhlc2UgbW9kaWZpY2F0aW9ucyB0byBgaXB2NF9kZWZhdWx0X2Fkdm1zc2AgYW5kIGBpcDZfZGVmYXVsdF9hZHZtc3NgLiBUaGV5JiMzOTtyZSBub3cgdXNpbmcgdGhlc2UgbmV3bHkgZGVmaW5lZCBmdW5jdGlvbnMsIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAsIGluc3RlYWQgb2YgdGhlIG9sZCBkaXJlY3QgTVRVIGxvb2t1cHMgKGBpcHY0X210dWAgYW5kIGBkc3Q2X210dWApLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgaW1wcm92ZW1lbnQgaW4gdGhlIGxvbmcgcnVuLgoKVGhpcyBpcyBpbW1lZGlhdGVseSBmbGFnZ2VkIGFzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBBbnkgY2hhbmdlIGxpa2UgdGhpcywgZXNwZWNpYWxseSB3aXRoaW4gdGhlIElQdjQgYW5kIElQdjYgcm91dGluZyBjb3JlLCBjYW4gb3BlbiB1cCBhIGxvdCBvZiBpbnRlcmVzdGluZyBhdHRhY2sgdmVjdG9ycy4gTm93LCB0aGUgbWFpbiBmdW5jdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgaXB2NF9kZWZhdWx0X2Fkdm1zc2AgYW5kIGBpcDZfZGVmYXVsdF9hZHZtc3NgIChib3RoIHN0YXRpYywgYXMgSSByZWNhbGwpLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGV4YWN0bHkgd2hlcmUgdGhvc2UgYXJlIGJlaW5nIHV0aWxpemVkLiBJIHN1c3BlY3QgdGhleSYjMzk7cmUgYmVpbmcgYXNzaWduZWQgdG8gYGRzdF9vcHMtJmd0O2RlZmF1bHRfYWR2bXNzYCBvciBzb21ldGhpbmcgc2ltaWxhciwgbGlrZWx5IGFzIHBhcnQgb2YgdGhlIGRlc3RpbmF0aW9uIG9wdGlvbiBmb3Igcm91dGluZy4gVGhlIG5leHQgc3RlcCBpcyBhIGNvZGUgc2VhcmNoOyBJJiMzOTtsbCBsb29rIGZvciBkaXJlY3QgcmVmZXJlbmNlcyB0byBgaXB2NF9kZWZhdWx0X2Fkdm1zc2AgYW5kIGBpcDZfZGVmYXVsdF9hZHZtc3NgIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyB1c2luZyB0aGVzZSBmdW5jdGlvbnMgdG8gY2FsY3VsYXRlIHRoZSBNU1MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2NF9kZWZhdWx0X2Fkdm1zcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9yb3V0ZS5jPTEyOT1zdHJ1Y3QgZHN0X2VudHJ5XHQqaXB2NF9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgY29va2llKTtcbm5ldC9pcHY0L3JvdXRlLmM6MTMwOnN0YXRpYyB1bnNpZ25lZCBpbnRcdCBpcHY0X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7XG5uZXQvaXB2NC9yb3V0ZS5jLTEzMS1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTU0PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcHY0X2RzdF9vcHMgPSB7XG4tLVxubmV0L2lwdjQvcm91dGUuYy0xNTYtXHQuY2hlY2sgPVx0XHRpcHY0X2RzdF9jaGVjayxcbm5ldC9pcHY0L3JvdXRlLmM6MTU3Olx0LmRlZmF1bHRfYWR2bXNzID1cdGlwdjRfZGVmYXVsdF9hZHZtc3MsXG5uZXQvaXB2NC9yb3V0ZS5jLTE1OC1cdC5tdHUgPVx0XHRcdGlwdjRfbXR1LFxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTMyMD1zdGF0aWMgdm9pZCBzZXRfY2xhc3NfdGFnKHN0cnVjdCBydGFibGUgKnJ0LCB1MzIgdGFnKVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTMyOC1cbm5ldC9pcHY0L3JvdXRlLmM6MTMyOTpzdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxubmV0L2lwdjQvcm91dGUuYy0xMzMwLXtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI4ODE9c3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwdjRfZHN0X2JsYWNraG9sZV9vcHMgPSB7XG5uZXQvaXB2NC9yb3V0ZS5jLTI4ODItXHQuZmFtaWx5XHRcdFx0PSBBRl9JTkVULFxubmV0L2lwdjQvcm91dGUuYzoyODgzOlx0LmRlZmF1bHRfYWR2bXNzXHRcdD0gaXB2NF9kZWZhdWx0X2Fkdm1zcyxcbm5ldC9pcHY0L3JvdXRlLmMtMjg4NC1cdC5uZWlnaF9sb29rdXBcdFx0PSBpcHY0X25laWdoX2xvb2t1cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDkxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCBhbmQgY29uc2lkZXJpbmcgdGhlIHByb21wdCYjMzk7cyBwcm92aWRlZCAmIzM0O3Rob3VnaHQmIzM0OzoKCioqRGVsdmluZyBpbnRvIElQdjYgTVNTIEFkanVzdG1lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYGlwNl9kZWZhdWx0X2Fkdm1zc2AuIFJpZ2h0LiBTbywgSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBhcyBhIGNydWNpYWwgcGFyYW1ldGVyIHJlbGF0ZWQgdG8gSVB2NiBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSBhbmQgUGF0aCBNVFUgRGlzY292ZXJ5IChQTVRVRCksIHNwZWNpZmljYWxseSBhdCB0aGUgc3lzdGVtJiMzOTtzIGRlZmF1bHQgbGV2ZWwuIE15IG1pbmQgcmFjZXMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRoaXMgdmFyaWFibGUgaW1wYWN0cyB0aGUgaW5pdGlhbCBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3MuIEVzc2VudGlhbGx5LCBpdCBkZWZpbmVzIHRoZSAqYWR2ZXJ0aXNlZCogTVNTIHZhbHVlIHRoYXQgdGhlIGxvY2FsIHN5c3RlbSB3aWxsIHN1Z2dlc3QgdG8gYSByZW1vdGUgaG9zdCBkdXJpbmcgdGhlIFRDUCBoYW5kc2hha2UsIHdoaWNoIHRoZW4gYWxsb3dzIGVhY2ggZW5kIHRvIG5lZ290aWF0ZSBob3cgbGFyZ2Ugb2YgYSBwYWNrZXQgc2l6ZSB0aGV5IGNhbiBib3RoIHVzZS4KCknigJltIGFscmVhZHkgY29uc2lkZXJpbmcgdGhlIHNjZW5hcmlvcyB3aGVyZSB0aGlzIHNldHRpbmcgaXMgaW1wb3J0YW50LiBJdCYjMzk7cyBvZnRlbiB0aGUgZmlyc3QgaHVyZGxlIHdoZW4gZGVhbGluZyB3aXRoIElQdjYgZnJhZ21lbnRhdGlvbiBhbmQgUGF0aCBNVFUgaXNzdWVzLiBJZiB0aGUgZGVmYXVsdCBpcyBzZXQgdG9vIGhpZ2gsIHdlJiMzOTtsbCBzZWUgYSBsb3Qgb2YgZnJhZ21lbnRhdGlvbiwgd2hpY2ggd2lsbCBpbXBhY3QgcGVyZm9ybWFuY2UuIElmIGl0JiMzOTtzIHRvbyBsb3csIHdlIG1pZ2h0IGJlIHVuZGVydXRpbGl6aW5nIG5ldHdvcmsgYmFuZHdpZHRoLiBBIHRob3VnaHRmdWwgdmFsdWUgZW5zdXJlcyBzbW9vdGggY29tbXVuaWNhdGlvbiB3aXRob3V0IGludHJvZHVjaW5nIHRvbyBtdWNoIG92ZXJoZWFkLgoKSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBiZSB1c2luZyB0aGlzIHBhcmFtZXRlciBvZnRlbiBkdXJpbmcgbmV0d29yayBvcHRpbWl6YXRpb25zLiBTbywgbGV04oCZcyBjb25zaWRlcjogd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvbiBkaWZmZXJlbnQgbmV0d29yayBjb25maWd1cmF0aW9ucywgY29uc2lkZXJpbmcgY29tbW9uIE1UVSBzaXplcyBsaWtlIDE1MDAgYnl0ZXMgZm9yIHN0YW5kYXJkIEV0aGVybmV0IHZlcnN1cyBsYXJnZXIgTVRVcyBpbiBlbnZpcm9ubWVudHMgbGlrZSBqdW1ibyBmcmFtZXMgb3IgVlBOIHR1bm5lbHM/IEl0JiMzOTtzIGFsbCBhYm91dCBmaW5kaW5nIHRoZSBzd2VldCBzcG90LCBzdHJpa2luZyB0aGF0IGNyaXRpY2FsIGJhbGFuY2UgYmV0d2VlbiBlZmZpY2llbmN5IGFuZCByZWxpYWJpbGl0eSwgdG8gYWxsb3cgc2VhbWxlc3MgdHJhbnNmZXIuIFRoZSBzeXN0ZW0gY2FuIG9mdGVuIHVzZSBJQ01QIG1lc3NhZ2VzIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgaXNzdWVzLCBidXQgYSB3ZWxsLXR1bmVkIHZhbHVlIGhlbHBzIHRvIG1pdGlnYXRlIHBvdGVudGlhbCBpc3N1ZXMgYmVmb3JlIHRoZXkgYXJpc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X2RlZmF1bHRfYWR2bXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmM9ODY9c3RydWN0IGRzdF9lbnRyeVx0KmlwNl9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgY29va2llKTtcbm5ldC9pcHY2L3JvdXRlLmM6ODc6c3RhdGljIHVuc2lnbmVkIGludFx0IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpO1xubmV0L2lwdjYvcm91dGUuYy04OC1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MjQ5PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X29wc190ZW1wbGF0ZSA9IHtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTI1My1cdC5jaGVja1x0XHRcdD1cdGlwNl9kc3RfY2hlY2ssXG5uZXQvaXB2Ni9yb3V0ZS5jOjI1NDpcdC5kZWZhdWx0X2Fkdm1zc1x0XHQ9XHRpcDZfZGVmYXVsdF9hZHZtc3MsXG5uZXQvaXB2Ni9yb3V0ZS5jLTI1NS1cdC5tdHVcdFx0XHQ9XHRpcDZfbXR1LFxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MjY4PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X2JsYWNraG9sZV9vcHMgPSB7XG5uZXQvaXB2Ni9yb3V0ZS5jLTI2OS1cdC5mYW1pbHlcdFx0XHQ9IEFGX0lORVQ2LFxubmV0L2lwdjYvcm91dGUuYzoyNzA6XHQuZGVmYXVsdF9hZHZtc3NcdFx0PSBpcDZfZGVmYXVsdF9hZHZtc3MsXG5uZXQvaXB2Ni9yb3V0ZS5jLTI3MS1cdC5uZWlnaF9sb29rdXBcdFx0PSBpcDZfZHN0X25laWdoX2xvb2t1cCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTMyNTY9dm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzI2MS1cbm5ldC9pcHY2L3JvdXRlLmM6MzI2MjpzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyNjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMzEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgYGRlZmF1bHRfYWR2bXNzYCoqCgpPa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXMsIHdoZXJlIGlzIHRoaXMgYGRlZmF1bHRfYWR2bXNzYCBmdW5jdGlvbiBiZWluZyBjYWxsZWQ/IEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaG93IGl0IGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSBrbm93IHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgc2V0dGluZywgcHJvYmFibHkgcmVsYXRlZCB0byBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSBpbiB0aGUgY29udGV4dCBvZiBhZHZhbmNlZCBNU1MgY29uZmlndXJhdGlvbiwgb3IgaXQgY291bGQgYmUgc29tZSBkZWZhdWx0IG9yIGZhbGxiYWNrIHZhbHVlLgoKTXkgaW5pdGlhbCBsaW5lIG9mIGF0dGFjayBpcyBnb2luZyB0byBiZSBhIGNvZGUgc2VhcmNoLiBJJiMzOTtsbCBuZWVkIHRvIHBpbnBvaW50IGFsbCBpbnN0YW5jZXMgb2YgdGhlIGZ1bmN0aW9uIG5hbWUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGdsb2JhbCBzZWFyY2ggb2YgdGhlIGNvZGViYXNlLCB1c2luZyBhIHRvb2wgbGlrZSBncmVwIG9yIHJpcGdyZXAuIEkmIzM5O2xsIGxvb2sgZm9yIGRpcmVjdCBjYWxscyB0byBgZGVmYXVsdF9hZHZtc3NgIGluIHRoZSBjb2RlLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzeW1ib2xpYyBsaW5rcywgYWxpYXNlcyBvciBhbnkgb3RoZXIgc2ltaWxhciBmb3JtcyB0aGF0IGFyZSByZWZlcnJpbmcgdG8gaXQgYXMgd2VsbC4KCkJhc2VkIG9uIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBJJiMzOTtsbCBzdGFydCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIHBvc3NpYmxlIGNhbGwgcGF0aHMuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdXNlZCBpcyBrZXkuIEkmIzM5O20gZ29pbmcgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBvZiBlYWNoIGNhbGwgdG8gc2VlIGhvdyB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgdXNlZC4gSXMgaXQgcGFzc2VkIHRvIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUsIHVzZWQgaW4gYW4gYXJpdGhtZXRpYyBjYWxjdWxhdGlvbj8gVGhpcyB3aWxsIG5hcnJvdyBkb3duIGl0cyBwdXJwb3NlIGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIHByb2dyYW0uCgpJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGRpY3RhdGUgd2hlbiBgZGVmYXVsdF9hZHZtc3NgIGlzIHVzZWQuIERvZXMgaXQgc2VydmUgYXMgYSBkZWZhdWx0IHZhbHVlIGlmIGFub3RoZXIgY29uZmlndXJhdGlvbiBzZXR0aW5nIGlzbiYjMzk7dCBleHBsaWNpdGx5IHNldD8gT3IgbWF5YmUgaXQmIzM5O3MgdXNlZCBiYXNlZCBvbiBuZXR3b3JrIGNvbmRpdGlvbnMgb3IgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiBJIHdhbnQgdG8ga25vdyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdHMgcmVzdWx0IGlzIGFwcGxpZWQuCgpGaW5hbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoYXQgYGRlZmF1bHRfYWR2bXNzYCBoYXMgc29tZSBmb3JtIG9mIGNvbmZpZ3VyYWJsZSBpbnRlcmZhY2UuIEkmIzM5O20gY3VyaW91cyB3aGF0IGtpbmQgb2YgZW52aXJvbm1lbnQgb3Igc2V0dXAgc2V0dGluZ3MgaXQgbWlnaHQgcmVmZXJlbmNlLiBEb2VzIGl0IGdldCBvdmVycmlkZGVuIGJ5IHVzZXIgY29uZmlndXJhdGlvbnM/IElzIGl0IHRpZWQgaW50byBhIHBhcnRpY3VsYXIgbW9kdWxlPyBUaGlzIGlzIHRoZSBraW5kIG9mIHN0dWZmIHRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFVsdGltYXRlbHksIEkmIzM5O20gbG9va2luZyBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlLCBhIHJvYWRtYXAgb2YgdGhpcyBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlIHdpdGhpbiB0aGlzIHByb2plY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVmYXVsdF9hZHZtc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvZHN0Lmg9MTg1PWRzdF9tZXRyaWNfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbi0tXG5pbmNsdWRlL25ldC9kc3QuaC0xODktXHRpZiAoIWFkdm1zcylcbmluY2x1ZGUvbmV0L2RzdC5oOjE5MDpcdFx0YWR2bXNzID0gZHN0LVx1MDAzZW9wcy1cdTAwM2VkZWZhdWx0X2Fkdm1zcyhkc3QpO1xuaW5jbHVkZS9uZXQvZHN0LmgtMTkxLVxuLS1cbmluY2x1ZGUvbmV0L2RzdF9vcHMuaD0xNT1zdHJ1Y3QgZHN0X29wcyB7XG4tLVxuaW5jbHVkZS9uZXQvZHN0X29wcy5oLTIwLVx0c3RydWN0IGRzdF9lbnRyeSAqXHQoKmNoZWNrKShzdHJ1Y3QgZHN0X2VudHJ5ICosIF9fdTMyIGNvb2tpZSk7XG5pbmNsdWRlL25ldC9kc3Rfb3BzLmg6MjE6XHR1bnNpZ25lZCBpbnRcdFx0KCpkZWZhdWx0X2Fkdm1zcykoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqKTtcbmluY2x1ZGUvbmV0L2RzdF9vcHMuaC0yMi1cdHVuc2lnbmVkIGludFx0XHQoKm10dSkoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqKTtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTEyOT1zdHJ1Y3QgZHN0X2VudHJ5XHQqaXB2NF9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgY29va2llKTtcbm5ldC9pcHY0L3JvdXRlLmM6MTMwOnN0YXRpYyB1bnNpZ25lZCBpbnRcdCBpcHY0X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7XG5uZXQvaXB2NC9yb3V0ZS5jLTEzMS1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTU0PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcHY0X2RzdF9vcHMgPSB7XG4tLVxubmV0L2lwdjQvcm91dGUuYy0xNTYtXHQuY2hlY2sgPVx0XHRpcHY0X2RzdF9jaGVjayxcbm5ldC9pcHY0L3JvdXRlLmM6MTU3Olx0LmRlZmF1bHRfYWR2bXNzID1cdGlwdjRfZGVmYXVsdF9hZHZtc3MsXG5uZXQvaXB2NC9yb3V0ZS5jLTE1OC1cdC5tdHUgPVx0XHRcdGlwdjRfbXR1LFxuLS1cbm5ldC9pcHY0L3JvdXRlLmM9MTMyMD1zdGF0aWMgdm9pZCBzZXRfY2xhc3NfdGFnKHN0cnVjdCBydGFibGUgKnJ0LCB1MzIgdGFnKVxuLS1cbm5ldC9pcHY0L3JvdXRlLmMtMTMyOC1cbm5ldC9pcHY0L3JvdXRlLmM6MTMyOTpzdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxubmV0L2lwdjQvcm91dGUuYy0xMzMwLXtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTI4ODE9c3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwdjRfZHN0X2JsYWNraG9sZV9vcHMgPSB7XG5uZXQvaXB2NC9yb3V0ZS5jLTI4ODItXHQuZmFtaWx5XHRcdFx0PSBBRl9JTkVULFxubmV0L2lwdjQvcm91dGUuYzoyODgzOlx0LmRlZmF1bHRfYWR2bXNzXHRcdD0gaXB2NF9kZWZhdWx0X2Fkdm1zcyxcbm5ldC9pcHY0L3JvdXRlLmMtMjg4NC1cdC5uZWlnaF9sb29rdXBcdFx0PSBpcHY0X25laWdoX2xvb2t1cCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTg2PXN0cnVjdCBkc3RfZW50cnlcdCppcDZfZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdTMyIGNvb2tpZSk7XG5uZXQvaXB2Ni9yb3V0ZS5jOjg3OnN0YXRpYyB1bnNpZ25lZCBpbnRcdCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTtcbm5ldC9pcHY2L3JvdXRlLmMtODgtSU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTI0OT1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9vcHNfdGVtcGxhdGUgPSB7XG4tLVxubmV0L2lwdjYvcm91dGUuYy0yNTMtXHQuY2hlY2tcdFx0XHQ9XHRpcDZfZHN0X2NoZWNrLFxubmV0L2lwdjYvcm91dGUuYzoyNTQ6XHQuZGVmYXVsdF9hZHZtc3NcdFx0PVx0aXA2X2RlZmF1bHRfYWR2bXNzLFxubmV0L2lwdjYvcm91dGUuYy0yNTUtXHQubXR1XHRcdFx0PVx0aXA2X210dSxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTI2OD1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9ibGFja2hvbGVfb3BzID0ge1xubmV0L2lwdjYvcm91dGUuYy0yNjktXHQuZmFtaWx5XHRcdFx0PSBBRl9JTkVUNixcbm5ldC9pcHY2L3JvdXRlLmM6MjcwOlx0LmRlZmF1bHRfYWR2bXNzXHRcdD0gaXA2X2RlZmF1bHRfYWR2bXNzLFxubmV0L2lwdjYvcm91dGUuYy0yNzEtXHQubmVpZ2hfbG9va3VwXHRcdD0gaXA2X2RzdF9uZWlnaF9sb29rdXAsXG4tLVxubmV0L2lwdjYvcm91dGUuYz0zMjU2PXZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTMyNjEtXG5uZXQvaXB2Ni9yb3V0ZS5jOjMyNjI6c3RhdGljIHVuc2lnbmVkIGludCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxubmV0L2lwdjYvcm91dGUuYy0zMjYzLXtcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTM5OTQ9c3RhdGljIGludCB4ZnJtX2J1bmRsZV9vayhzdHJ1Y3QgeGZybV9kc3QgKmZpcnN0KVxuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDA2MS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDA2MjpzdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MDYzLXtcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQxMTE9aW50IHhmcm1fcG9saWN5X3JlZ2lzdGVyX2FmaW5mbyhjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8sIGludCBmYW1pbHkpXG4tLVxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTI2LVx0XHRcdGRzdF9vcHMtXHUwMDNlY2hlY2sgPSB4ZnJtX2RzdF9jaGVjaztcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDEyNzpcdFx0aWYgKGxpa2VseShkc3Rfb3BzLVx1MDAzZWRlZmF1bHRfYWR2bXNzID09IE5VTEwpKVxubmV0L3hmcm0veGZybV9wb2xpY3kuYzo0MTI4Olx0XHRcdGRzdF9vcHMtXHUwMDNlZGVmYXVsdF9hZHZtc3MgPSB4ZnJtX2RlZmF1bHRfYWR2bXNzO1xubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MTI5LVx0XHRpZiAobGlrZWx5KGRzdF9vcHMtXHUwMDNlbXR1ID09IE5VTEwpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxODIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVjb2RpbmcgdGhlIGBkc3RfbWV0cmljX2Fkdm1zc2AgQ2FsbCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hlbiBJIHNlZSBgZHN0X21ldHJpY19hZHZtc3NgLCBteSBicmFpbiBqdW1wcyB0bzogJiMzNDtPa2F5LCBzbyB0aGlzIGZ1bmN0aW9uIGlzIGludm9raW5nIGBkc3QtJmd0O29wcy0mZ3Q7ZGVmYXVsdF9hZHZtc3MoZHN0KWAuICBDbGFzc2ljIGludGVyZmFjZSBwYXR0ZXJuLiBCdXQgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uICphbHdheXMqIGFyaXNlcyAtIGNvbnRleHQgaXMga2luZyBpbiB0aGVzZSBzY2VuYXJpb3MsIHJpZ2h0PyYjMzQ7CgpNeSBpbnRlcm5hbCBtb25vbG9ndWUgdGhlbiBhc2tzLCAmIzM0O1doZXJlIHRoZSAqaGVsbCogaXMgYGRzdF9tZXRyaWNfYWR2bXNzYCBpdHNlbGYgYmVpbmcgY2FsbGVkPyBXaGF0JiMzOTtzIHRoZSBjYWxsIHN0YWNrPyBXaGF0IHByb2Nlc3MgaXMgaW52b2tpbmcgdGhpcyBmdW5jdGlvbj8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgc3Vycm91bmRpbmcgY29uZGl0aW9ucywgYW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBwYXJ0aWN1bGFyIGNhbGwuIFdpdGhvdXQgdGhhdCBicm9hZGVyIHBlcnNwZWN0aXZlLCBJJiMzOTttIGp1c3QgbG9va2luZyBhdCBhIHNpbmdsZSB0aHJlYWQgaW4gYSB2ZXJ5IGNvbXBsZXggd2VhdmUuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgdXNlZCBnaXZlcyB0aGUgYWxsLWltcG9ydGFudCBjb250ZXh0LiBUaGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJlIGltcG9ydGFudCBpbiBteSBmaWVsZCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gbWFrZSBpbmZvcm1lZCBkZWNpc2lvbnMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RzdF9tZXRyaWNfYWR2bXNzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5jPTEwOTg9dW5zaWduZWQgaW50IGN4Z2JpX3NvY2tfc2VsZWN0X21zcyhzdHJ1Y3QgY3hnYmlfc29jayAqY3NrLCB1bnNpZ25lZCBpbnQgcG10dSlcbi0tXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYy0xMTAyLVxuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmM6MTEwMzpcdGNzay1cdTAwM2VhZHZtc3MgPSBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpO1xuZHJpdmVycy9zY3NpL2N4Z2JpL2xpYmN4Z2JpLmMtMTEwNC1cbi0tXG5pbmNsdWRlL25ldC9kc3QuaD0xODQ9c3RhdGljIGlubGluZSB1MzJcbmluY2x1ZGUvbmV0L2RzdC5oOjE4NTpkc3RfbWV0cmljX2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG5pbmNsdWRlL25ldC9kc3QuaC0xODYte1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MTY3ND1zdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTczOC1cdHRjcF9zeW5jX21zcyhuZXdzaywgZHN0NF9tdHUoZHN0KSk7XG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE3Mzk6XHRuZXd0cC1cdTAwM2VhZHZtc3MgPSB0Y3BfbXNzX2NsYW1wKHRjcF9zayhzayksIGRzdF9tZXRyaWNfYWR2bXNzKGRzdCkpO1xubmV0L2lwdjQvdGNwX2lwdjQuYy0xNzQwLVxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz00MzE9dm9pZCB0Y3Bfb3BlbnJlcV9pbml0X3J3aW4oc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy00NDItXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NDQzOlx0bXNzID0gdGNwX21zc19jbGFtcCh0cCwgZHN0X21ldHJpY19hZHZtc3MoZHN0KSk7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDQ0LVx0d2luZG93X2NsYW1wID0gUkVBRF9PTkNFKHRwLVx1MDAzZXdpbmRvd19jbGFtcCk7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTEzOT1zdGF0aWMgX191MTYgdGNwX2FkdmVydGlzZV9tc3Moc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNDUtXHRpZiAoZHN0KSB7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MTQ2Olx0XHR1bnNpZ25lZCBpbnQgbWV0cmljID0gZHN0X21ldHJpY19hZHZtc3MoZHN0KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNDctXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTM5MzE9c3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzk3NC1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozOTc1Olx0bXNzID0gdGNwX21zc19jbGFtcCh0cCwgZHN0X21ldHJpY19hZHZtc3MoZHN0KSk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzk3Ni1cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDEwMT1zdGF0aWMgdm9pZCB0Y3BfY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDEzMC1cdFx0V1JJVEVfT05DRSh0cC1cdTAwM2V3aW5kb3dfY2xhbXAsIGRzdF9tZXRyaWMoZHN0LCBSVEFYX1dJTkRPVykpO1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjQxMzE6XHR0cC1cdTAwM2VhZHZtc3MgPSB0Y3BfbXNzX2NsYW1wKHRwLCBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTMyLVxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTM4Mj1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF92Nl9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE0ODktXHR0Y3Bfc3luY19tc3MobmV3c2ssIGRzdDZfbXR1KGRzdCkpO1xubmV0L2lwdjYvdGNwX2lwdjYuYzoxNDkwOlx0bmV3dHAtXHUwMDNlYWR2bXNzID0gdGNwX21zc19jbGFtcCh0Y3Bfc2soc2spLCBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpKTtcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTQ5MS1cbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQwNjI9c3RhdGljIHVuc2lnbmVkIGludCB4ZnJtX2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDA2My17XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQwNjQ6XHRyZXR1cm4gZHN0X21ldHJpY19hZHZtc3MoeGZybV9kc3RfcGF0aChkc3QpKTtcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDA2NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1NjYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgTXkgRnV6emluZyBFZmZvcnRzIGZvciBNYXhpbXVtIEltcGFjdCoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLCBgZHN0X21ldHJpY19hZHZtc3NgIGlzIHRoZSB0YXJnZXQgaGVyZS4gSSBjYW4gc2VlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXM6IGB0Y3BfYWR2ZXJ0aXNlX21zc2AsIGB0Y3BfY29ubmVjdF9pbml0YCwgYHRjcF9tYWtlX3N5bmFja2AsIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gLCBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgLCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhleSBhcmUgYWxsIGludm9sdmVkIGluIFRDUCBjb25uZWN0aW9uIHNldHVwIGFuZCBNU1MgYWR2ZXJ0aXNlbWVudC4KClNvLCBJIHNob3VsZCBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhlIGVudHJ5IHBvaW50czogYHRjcF9hZHZlcnRpc2VfbXNzYCwgYHRjcF9jb25uZWN0X2luaXRgLCBgdGNwX21ha2Vfc3luYWNrYCwgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCwgYW5kIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AuIFJpZ2h0LCB0aGVzZSBhcmUgdGhlIHBsYWNlcyB3aGVyZSBpbnRlcmVzdGluZyBpbnB1dCBpcyBsaWtlbHkgdG8gaGl0IGBkc3RfbWV0cmljX2Fkdm1zc2AuCgpIb2xkIG9uLi4uIGB0Y3BfYWR2ZXJ0aXNlX21zc2AgYW5kIGB0Y3BfY29ubmVjdF9pbml0YCBhcmUgYm90aCBzdGF0aWMsIHNvIHRoYXQgbGltaXRzIG15IG9wdGlvbnMuIEkgbmVlZCB0byB0aGluayBhYm91dCB0aGF0LiBCdXQgYHRjcF9tYWtlX3N5bmFja2AgaXMgZXhwb3J0ZWQuIE9rYXksIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfbWFrZV9zeW5hY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9NTcxPWVudW0gdGNwX3N5bmFja190eXBlIHtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaC01NzYtfTtcbmluY2x1ZGUvbmV0L3RjcC5oOjU3NzpzdHJ1Y3Qgc2tfYnVmZiAqdGNwX21ha2Vfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuaW5jbHVkZS9uZXQvdGNwLmgtNTc4LVx0XHRcdFx0c3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MTE2Mj1zdGF0aWMgaW50IHRjcF92NF9zZW5kX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTExNzgtXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjExNzk6XHRza2IgPSB0Y3BfbWFrZV9zeW5hY2soc2ssIGRzdCwgcmVxLCBmb2MsIHN5bmFja190eXBlLCBzeW5fc2tiKTtcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTE4MC1cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9Mzg4Nz1pbnQgdGNwX3NlbmRfc3luYWNrKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzkyMS0vKipcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzozOTIyOiAqIHRjcF9tYWtlX3N5bmFjayAtIEFsbG9jYXRlIG9uZSBza2IgYW5kIGJ1aWxkIGEgU1lOQUNLIHBhY2tldC5cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zOTIzLSAqIEBzazogbGlzdGVuZXIgc29ja2V0XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM5MzAtICovXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzkzMTpzdHJ1Y3Qgc2tfYnVmZiAqdGNwX21ha2Vfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM5MzItXHRcdFx0XHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz01NTA9c3RhdGljIGludCB0Y3BfdjZfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYy01NjktXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjU3MDpcdHNrYiA9IHRjcF9tYWtlX3N5bmFjayhzaywgZHN0LCByZXEsIGZvYywgc3luYWNrX3R5cGUsIHN5bl9za2IpO1xubmV0L2lwdjYvdGNwX2lwdjYuYy01NzEtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9jb25uZWN0LWRlbnkuYz0yMjE9c3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9jb25uZWN0LWRlbnkuYy0yNDktXHQvKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9jb25uZWN0LWRlbnkuYzoyNTA6XHQgKiBYWFg6IFRoZSB0ZXN0IGRvZXNuJiMzOTt0IGluY3JlYXNlIGFueSBjb3VudGVycywgc2VlIHRjcF9tYWtlX3N5bmFjaygpLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9jb25uZWN0LWRlbnkuYy0yNTEtXHQgKiBQb3RlbnRpYWxseSwgaXQgY2FuIGJlIHNwZWVkIHVwIGJ5IHNldHRpbmcgc2tfcGFpciA9IC1FVElNRURPVVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc0MwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFRDUCBTWU4tQUNLIEhhbmRsaW5nKioKCkhtbSwgc28gYHRjcF9tYWtlX3N5bmFja2AgaXNuJiMzOTt0IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgbWVhbnMgdGhlcmUmIzM5O3Mgc29tZSBkeW5hbWljIHNlbGVjdGlvbiBwcm9jZXNzIGdvaW5nIG9uIHdoZW4gY3JhZnRpbmcgdGhvc2UgU1lOLUFDSyBwYWNrZXRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBBbmQgaW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIG90aGVyIGtleSBwaWVjZXM6IGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AgYW5kIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGFkZHJlc3MgZmFtaWx5IHBsYXlzIGEgcm9sZSBoZXJlLCBidXQgaXMgdGhhdCAqYWxsKiB0aGF0IGRpY3RhdGVzIHRoZSBjYWxsIHBhdGhzPwoKSSBzdXNwZWN0IHRob3NlIGAqX3N5bl9yZWN2X3NvY2tgIGZ1bmN0aW9ucyBoYW5kbGUgdGhlIGluaXRpYWwgc29ja2V0IHNldHVwIGFuZCB0aGUgaW5pdGlhbCBzdGF0ZSB0cmFuc2l0aW9uLiBgdGNwX21ha2Vfc3luYWNrYCBsaWtlbHkgZm9jdXNlcyBvbiBjcmFmdGluZyB0aGUgc3BlY2lmaWMgcGFja2V0IGNvbnRlbnRzLCBwb3NzaWJseSBkcmF3aW5nIHVwb24gdGhlIHBhcmFtZXRlcnMgc2V0IGJ5IHRob3NlIGVhcmxpZXIgZnVuY3Rpb25zIG9yIGhhdmluZyBpdHMgYmVoYXZpb3IgaW5mbHVlbmNlZCBieSB0aGUgc29ja2V04oCZcyBmbGFncyBvciBvcHRpb25zLiBJIHNob3VsZCBhbHNvIGNvbnNpZGVyIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgY29ubmVjdGlvbiBxdWV1aW5nLCBhbmQgd2hldGhlciBhbnkgb2YgdGhvc2Ugc3RydWN0dXJlcyBhcmUgY29uc3VsdGVkIGR1cmluZyB0aGUgU1lOLUFDSyBnZW5lcmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsaW5nIGNoYWluIGFuZCBleGFtaW5lIHRoZSBkYXRhIGZsb3cgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gVGhpcyBmZWVscyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZGl2aW5nIGludG8gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF92NF9zeW5fcmVjdl9zb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjcC5oPTU2MD12b2lkIHRjcF9jYV9vcGVucmVxX2NoaWxkKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTtcbmluY2x1ZGUvbmV0L3RjcC5oOjU2MTpzdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuaW5jbHVkZS9uZXQvdGNwLmgtNTYyLVx0XHRcdFx0ICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0xNjU1PWludCB0Y3BfdjRfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE2NzMtICovXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE2NzQ6c3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTY3NS1cdFx0XHRcdCAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MjM1OD1jb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjRfc3BlY2lmaWMgPSB7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMzYyLVx0LmNvbm5fcmVxdWVzdFx0ICAgPSB0Y3BfdjRfY29ubl9yZXF1ZXN0LFxubmV0L2lwdjQvdGNwX2lwdjQuYzoyMzYzOlx0LnN5bl9yZWN2X3NvY2tcdCAgID0gdGNwX3Y0X3N5bl9yZWN2X3NvY2ssXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTIzNjQtXHQubmV0X2hlYWRlcl9sZW5cdCAgID0gc2l6ZW9mKHN0cnVjdCBpcGhkciksXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz0xMzM3PXN0YXRpYyB2b2lkIHRjcF92Nl9yZXN0b3JlX2NiKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzQ2LVxubmV0L2lwdjYvdGNwX2lwdjYuYzoxMzQ3Oi8qIENhbGxlZCBmcm9tIHRjcF92NF9zeW5fcmVjdl9zb2NrKCkgZm9yIHY2X21hcHBlZCBjaGlsZHJlbi4gKi9cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTM0OC1zdGF0aWMgdm9pZCB0Y3BfdjZfbWFwcGVkX2NoaWxkX2luaXQoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzcyLVxubmV0L2lwdjYvdGNwX2lwdjYuYzoxMzczOlx0LyogdGNwX3Y0X3N5bl9yZWN2X3NvY2soKSBoYXMgaW5pdGlhbGl6ZWQgbmV3aW5ldC1cdTAwM2VtY197aW5kZXgsdHRsfSAqL1xubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzc0LVx0bmV3bnAtXHUwMDNlbWNhc3Rfb2lmICAgPSBuZXdpbmV0LVx1MDAzZW1jX2luZGV4O1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTM4Mj1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF92Nl9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE0MDQtXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSlcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTQwNTpcdFx0cmV0dXJuIHRjcF92NF9zeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgZHN0LFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xNDA2LVx0XHRcdFx0XHQgICAgcmVxX3VuaGFzaCwgb3duX3JlcSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NjIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBUQ1B2NiBTb2NrZXQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgVENQIGNvZGUsIHByb2JhYmx5IGtlcm5lbC1sZXZlbCBzdHVmZiwgYW5kIEkgc2VlIHRoZXNlIGZ1bmN0aW9uczogYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCB0aG9zZSBzb3VuZCBsaWtlIHRoZXkgaGFuZGxlIFNZTiBwYWNrZXRzLCB0aGUgaW5pdGlhbCBjb25uZWN0aW9uIHJlcXVlc3QsIGZvciBUQ1B2NCBhbmQgVENQdjYgcmVzcGVjdGl2ZWx5LiYjMzQ7IEkmIzM5O20gYWxzbyBub3RpY2luZyB0aGF0IHRoZXkgYXJlIGxpa2VseSBleHBvcnRlZCwgb3IgYXQgbGVhc3QgdmlzaWJsZSBvdXRzaWRlIHRoZWlyIG93biBzb3VyY2UgZmlsZS4gTWFrZXMgc2Vuc2UsIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBrZXkgdG8gYWNjZXB0aW5nIG5ldyBjb25uZWN0aW9ucy4KCkhhbmcgb24gYSBzZWNvbmTigKZJIHRob3VnaHQgSSBzYXcgc29tZXRoaW5nIGFib3V0IGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AgYmVpbmcgKnN0YXRpYyouIFRoYXTigJlzIG9kZC4gSWYgaXQmIzM5O3Mgc3RhdGljLCBpdCB3b3VsZG4mIzM5O3QgYmUgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0IGNhbiYjMzk7dCBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIGZpbGUgaXQmIzM5O3MgZGVjbGFyZWQgaW4uIFRoaXMgcmVxdWlyZXMgY2xvc2VyIGluc3BlY3Rpb24uIExldCYjMzk7cyBkaWcgZGVlcGVyLiBUaGUgbGlrZWx5IHBsYWNlIHRvIGZpbmQgaXQgaXMgYG5ldC9pcHY2L3RjcF9pcHY2LmNgLiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIHNvdXJjZSBJJiMzOTttIGxvb2tpbmcgYXQgbWF0Y2hlcyBteSBleHBlY3RhdGlvbnMuIEdvdHRhIGNoZWNrIHRoYXQgc3BlY2lmaWMgc291cmNlIGZpbGUgYW5kIGNvbmZpcm0gd2hldGhlciBgdGNwX3Y2X3N5bl9yZWN2X3NvY2tgIGlzIGluZGVlZCBzdGF0aWMgb3Igbm90LiBUaGlzIHdpbGwgcHJvdmlkZSBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgcmVnYXJkaW5nIElQdjYgVENQIGNvbm5lY3Rpb24gaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF92Nl9zeW5fcmVjdl9zb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3N5bmNvb2tpZXMuYz0xNzQ9c3RydWN0IHNvY2sgKmNvb2tpZV92Nl9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvc3luY29va2llcy5jLTIyOS1cdCAqIFdlIG5lZWQgdG8gbG9va3VwIHRoZSBkc3RfZW50cnkgdG8gZ2V0IHRoZSBjb3JyZWN0IHdpbmRvdyBzaXplLlxubmV0L2lwdjYvc3luY29va2llcy5jOjIzMDpcdCAqIFRoaXMgaXMgdGFrZW4gZnJvbSB0Y3BfdjZfc3luX3JlY3Zfc29jay4gIFNvbWVib2R5IHBsZWFzZSBlbmxpZ2h0ZW5cbm5ldC9pcHY2L3N5bmNvb2tpZXMuYy0yMzEtXHQgKiBtZSBpZiB0aGVyZSBpcyBhIHByZWZlcnJlZCB3YXkuXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz0xMzQ4PXN0YXRpYyB2b2lkIHRjcF92Nl9tYXBwZWRfY2hpbGRfaW5pdChzdHJ1Y3Qgc29jayAqbmV3c2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTEzODEtXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjEzODI6c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfdjZfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTEzODMtXHRcdFx0XHRcdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG4tLVxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMDA3PWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgaXB2Nl9zcGVjaWZpYyA9IHtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIwMTEtXHQuY29ubl9yZXF1ZXN0XHQgICA9IHRjcF92Nl9jb25uX3JlcXVlc3QsXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIwMTI6XHQuc3luX3JlY3Zfc29ja1x0ICAgPSB0Y3BfdjZfc3luX3JlY3Zfc29jayxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjAxMy1cdC5uZXRfaGVhZGVyX2xlblx0ICAgPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLFxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjAzOD1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X21hcHBlZCA9IHtcbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTIwNDItXHQuY29ubl9yZXF1ZXN0XHQgICA9IHRjcF92Nl9jb25uX3JlcXVlc3QsXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjIwNDM6XHQuc3luX3JlY3Zfc29ja1x0ICAgPSB0Y3BfdjZfc3luX3JlY3Zfc29jayxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjA0NC1cdC5uZXRfaGVhZGVyX2xlblx0ICAgPSBzaXplb2Yoc3RydWN0IGlwaGRyKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NDEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVENQIENvbm5lY3Rpb24gSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIFRDUCBjb25uZWN0aW9uIHNldHVwIGFuZCBJJiMzOTttIHN0YXJ0aW5nIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUuIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AgaXMgY2xlYXJseSBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHByb2JhYmx5IG5vdCB0aGUgY29yZSBhcmVhIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIHJpZ2h0IG5vdy4gSSYjMzk7bSBnb2luZyB0byBzaGlmdCBteSBmb2N1cyB0byBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgIGFuZCB0aGUgZnVuY3Rpb24gYHRjcF9tYWtlX3N5bmFja2Ag4oCTIHRob3NlIHNlZW0gbGlrZSBtb3JlIHByb21pc2luZyBjYW5kaWRhdGVzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsIGhhbmRzaGFrZS4KCkp1c3QgYSBxdWljayBjaGVjay4uLndoYXQgYWJvdXQgYHRjcF9jb25uZWN0X2luaXRgPyBPaCwgaXQmIzM5O3MgYWxzbyBzdGF0aWMuIEFscmlnaHQsIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuIE5vIG5lZWQgdG8gY2hhc2UgZG93biBpdHMgaW50ZXJuYWxzIGp1c3QgeWV0LiBNeSBuZXh0IHN0ZXAgaXMgdG8gcGlucG9pbnQgd2hlcmUgYHRjcF9jb25uZWN0X2luaXRgIGlzIGFjdHVhbGx5ICpjYWxsZWQqLiBLbm93aW5nIGl0cyBjb250ZXh0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgY29ubmVjdGlvbiBpbml0aWF0aW9uIHByb2Nlc3MgYW5kIHBvdGVudGlhbGx5IHJldmVhbCBzb21lIGhpZGRlbiBhc3N1bXB0aW9ucyBvciBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY2FsbCBncmFwaCB0ZWxscyBtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2Nvbm5lY3RfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0PTE2PXN0cnVjdCB0aW1lcl9saXN0ICAgICAgICAgICAgICAgICAgIGljc2tfa2VlcGFsaXZlX3RpbWVyXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjE3OnUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcnRvICAgICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9jd25kX3ZhbGlkYXRlLHRjcF9zY2hlZHVsZV9sby4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0xOC11MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3J0b19taW5cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0PTIwPXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfZGVsYWNrX21heFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyMTp1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3BtdHVfY29va2llICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bfc3luY19tc3MsdGNwX2N1cnJlbnRfbXNzLHRjcF8uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MjI6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAgICAgICAgICAgaWNza19jYV9vcHMgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2N3bmRfdmFsaWRhdGUsdGNwX3Rzb19zZWdzLHRjLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjIzOnN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgIGljc2tfYWZfb3BzICAgICAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9maW5pc2hfY29ubmVjdCx0Y3Bfc2VuZF9zeW5fZC4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0yNC1zdHJ1Y3QgdGNwX3VscF9vcHMqICAgICAgICAgICAgICAgICBpY3NrX3VscF9vcHNcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0PTI4PXU4OjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfY2Ffc2V0c29ja29wdFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyOTp1ODoxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2NhX2RzdF9sb2NrZWQgICAgIHdyaXRlX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY2FfZHN0X2luaXQsdGNwX2Nvbm5lY3RfaW5pdCwuLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MzA6dTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19yZXRyYW5zbWl0cyAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2Nvbm5lY3RfaW5pdCx0Y3BfY29ubmVjdFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0zMS11OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3BlbmRpbmcgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmV0X2Nza19yZXNldF94bWl0X3RpbWVyLHRjcF9jb24uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MzI6dTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19iYWNrb2ZmICAgICAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3dyaXRlX3F1ZXVlX3B1cmdlLHRjcF9jb25uZWN0Li4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTMzLXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfc3luX3JldHJpZXNcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0PTQxPXN0cnVjdCBpY3NrX2Fja191MzIgICAgICAgICAgICAgICAgIGxyY3Z0aW1lICAgICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9maW5pc2hfY29ubmVjdCx0Y3BfY29ubmVjdCx0Yy4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0MjpzdHJ1Y3QgaWNza19hY2tfdTE2ICAgICAgICAgICAgICAgICByY3ZfbXNzICAgICAgICAgICAgICAgIHdyaXRlX21vc3RseSAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICBfX3RjcF9zZWxlY3Rfd2luZG93LF9fdGNwX2NsZWFudXAuLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDM6c3RydWN0IGljc2tfbXR1cF9pbnQgICAgICAgICAgICAgICAgc2VhcmNoX2hpZ2ggICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dXBfaW5pdCx0Y3Bfc3luY19tc3MsdGNwX2NvLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQ0OnN0cnVjdCBpY3NrX210dXBfaW50ICAgICAgICAgICAgICAgIHNlYXJjaF9sb3cgICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVfcHJvYmUsdGNwX210dV9jaGVja19yZXByby4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0NTpzdHJ1Y3QgaWNza19tdHVwX3UzMjozMSAgICAgICAgICAgICBwcm9iZV9zaXplICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfbXR1cF9pbml0LHRjcF9jb25uZWN0X2luaXQsX18uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDY6c3RydWN0IGljc2tfbXR1cF91MzI6MSAgICAgICAgICAgICAgZW5hYmxlZCAgICAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dXBfaW5pdCx0Y3Bfc3luY19tc3MsdGNwX2NvLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQ3OnN0cnVjdCBpY3NrX210dXBfdTMyICAgICAgICAgICAgICAgIHByb2JlX3RpbWVzdGFtcCAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVwX2luaXQsdGNwX2Nvbm5lY3RfaW5pdCx0Yy4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC00OC11MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3Byb2Jlc190c3RhbXBcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDA4MT1zdGF0aWMgdm9pZCB0Y3BfY2FfZHN0X2luaXQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxMDAtLyogRG8gYWxsIGNvbm5lY3Qgc29ja2V0IHNldHVwcyB0aGF0IGNhbiBiZSBkb25lIEFGIGluZGVwZW5kZW50LiAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjQxMDE6c3RhdGljIHZvaWQgdGNwX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDEwMi17XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQyOTg9aW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDM1OS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MzYwOlx0dGNwX2Nvbm5lY3RfaW5pdChzayk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDM2MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MTQKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVENQIENvbm5lY3Rpb24gRnVuY3Rpb25zKioKCk9rYXksIHNvIGB0Y3BfY29ubmVjdGAgaXMgZGVmaW5pdGVseSBleHBvcnRlZCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgaXQgYSBrZXkgZnVuY3Rpb24gdG8gaW52ZXN0aWdhdGUuIFRoaXMgbWVhbnMgbXkgZm9jdXMgZm9yIG5vdyBzaG91bGQgYmUgb24gZnVuY3Rpb25zIGxpa2UgYHRjcF9jb25uZWN0YCBpdHNlbGYsIGFsb25nIHdpdGggcmVsYXRlZCBwcm9jZXNzZXMgc3VjaCBhcyBgdGNwX21ha2Vfc3luYWNrYCBhbmQgYHRjcF92NF9zeW5fcmVjdl9zb2NrYC4gSXQmIzM5O3Mgd29ydGggY29uZmlybWluZyB0aGF0IGB0Y3BfY29ubmVjdGAgaXMgaW5kZWVkIGFjY2Vzc2libGUgZXh0ZXJuYWxseSwgYXMgdGhpcyB3b3VsZCBwcm92aWRlIGEgdml0YWwgZW50cnkgcG9pbnQgZm9yIG15IGFuYWx5c2lzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGVsdmluZyBpbnRvIGB0Y3BfY29ubmVjdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9jb25uZWN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2NjQgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q9OT1UeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgIGZhc3RwYXRoX3R4X2FjY2VzcyAgZmFzdHBhdGhfcnhfYWNjZXNzICBjb21tZW50XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTEwLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoxMTpzdHJ1Y3QgaW5ldF9zb2NrICAgICAgICAgICAgICAgICAgICBpY3NrX2luZXQgICAgICAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICB0Y3BfaW5pdF9idWZmZXJfc3BhY2UsdGNwX2luaXRfdHIuLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtMTItc3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAgICAgICAgICAgaWNza19hY2NlcHRfcXVldWVcbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0PTE0PXN0cnVjdCBpbmV0X2JpbmQyX2J1Y2tldCAgICAgICAgICAgIGljc2tfYmluZDJfaGFzaCAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9zZXRfc3RhdGUsaW5ldF9wdXRfcG9ydFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoxNTpzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICAgICAgICAgICAgICBpY3NrX2RlbGFja190aW1lciAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmV0X2Nza19yZXNldF94bWl0X3RpbWVyLHRjcF9jb24uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtMTYtc3RydWN0IHRpbWVyX2xpc3QgICAgICAgICAgICAgICAgICAgaWNza19rZWVwYWxpdmVfdGltZXJcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MTc6dTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19ydG8gICAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2N3bmRfdmFsaWRhdGUsdGNwX3NjaGVkdWxlX2xvLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTE4LXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcnRvX21pblxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q9MjA9dTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19kZWxhY2tfbWF4XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjIxOnUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcG10dV9jb29raWUgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9zeW5jX21zcyx0Y3BfY3VycmVudF9tc3MsdGNwXy4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyMjpzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICAgICAgICAgICBpY3NrX2NhX29wcyAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY3duZF92YWxpZGF0ZSx0Y3BfdHNvX3NlZ3MsdGMuLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MjM6c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyAgaWNza19hZl9vcHMgICAgICAgICAgICByZWFkX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2ZpbmlzaF9jb25uZWN0LHRjcF9zZW5kX3N5bl9kLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTI0LXN0cnVjdCB0Y3BfdWxwX29wcyogICAgICAgICAgICAgICAgIGljc2tfdWxwX29wc1xuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q9MjY9dTg6NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19jYV9zdGF0ZSAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2N3bmRfYXBwbGljYXRpb25fbGltaXRlZCx0Y3BfLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjI3OnU4OjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfY2FfaW5pdGlhbGl6ZWQgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9pbml0X3RyYW5zZmVyLHRjcF9pbml0X2Nvbmdlcy4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0yOC11ODoxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2NhX3NldHNvY2tvcHRcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6Mjk6dTg6MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19jYV9kc3RfbG9ja2VkICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2NhX2RzdF9pbml0LHRjcF9jb25uZWN0X2luaXQsLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjMwOnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcmV0cmFuc21pdHMgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9jb25uZWN0X2luaXQsdGNwX2Nvbm5lY3RcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MzE6dTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19wZW5kaW5nICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9jc2tfcmVzZXRfeG1pdF90aW1lcix0Y3BfY29uLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjMyOnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfYmFja29mZiAgICAgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF93cml0ZV9xdWV1ZV9wdXJnZSx0Y3BfY29ubmVjdC4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0zMy11OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3N5bl9yZXRyaWVzXG4tLVxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD00MD1zdHJ1Y3QgaWNza19hY2tfdTggICAgICAgICAgICAgICAgICBhdG8gICAgICAgICAgICAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICB0Y3BfZGVjX3F1aWNrYWNrX21vZGUsdGNwX2V2ZW50X2EuLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDE6c3RydWN0IGljc2tfYWNrX3UzMiAgICAgICAgICAgICAgICAgbHJjdnRpbWUgICAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2ZpbmlzaF9jb25uZWN0LHRjcF9jb25uZWN0LHRjLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQyOnN0cnVjdCBpY3NrX2Fja191MTYgICAgICAgICAgICAgICAgIHJjdl9tc3MgICAgICAgICAgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICByZWFkX21vc3RseSAgICAgICAgIF9fdGNwX3NlbGVjdF93aW5kb3csX190Y3BfY2xlYW51cC4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0MzpzdHJ1Y3QgaWNza19tdHVwX2ludCAgICAgICAgICAgICAgICBzZWFyY2hfaGlnaCAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfbXR1cF9pbml0LHRjcF9zeW5jX21zcyx0Y3BfY28uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDQ6c3RydWN0IGljc2tfbXR1cF9pbnQgICAgICAgICAgICAgICAgc2VhcmNoX2xvdyAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dV9wcm9iZSx0Y3BfbXR1X2NoZWNrX3JlcHJvLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQ1OnN0cnVjdCBpY3NrX210dXBfdTMyOjMxICAgICAgICAgICAgIHByb2JlX3NpemUgICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVwX2luaXQsdGNwX2Nvbm5lY3RfaW5pdCxfXy4uLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0NjpzdHJ1Y3QgaWNza19tdHVwX3UzMjoxICAgICAgICAgICAgICBlbmFibGVkICAgICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfbXR1cF9pbml0LHRjcF9zeW5jX21zcyx0Y3BfY28uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDc6c3RydWN0IGljc2tfbXR1cF91MzIgICAgICAgICAgICAgICAgcHJvYmVfdGltZXN0YW1wICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dXBfaW5pdCx0Y3BfY29ubmVjdF9pbml0LHRjLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTQ4LXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcHJvYmVzX3RzdGFtcFxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X3NvY2sucnN0PTk9VHlwZSAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICBmYXN0cGF0aF90eF9hY2Nlc3MgIGZhc3RwYXRoX3J4X2FjY2VzcyAgY29tbWVudFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfc29jay5yc3QtMTAtPT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0uLi5cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X3NvY2sucnN0OjExOnN0cnVjdCBzb2NrICAgICAgICAgICAgICBzayAgICAgICAgICAgICAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICByZWFkX21vc3RseSAgICAgICAgIHRjcF9pbml0X2J1ZmZlcl9zcGFjZSx0Y3BfaW5pdF90cmFuc2Zlcix0Y3BfZmluaXNoX2Nvbm5lLi4uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9zb2NrLnJzdC0xMi1zdHJ1Y3QgaXB2Nl9waW5mbyogICAgICAgcGluZXQ2XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaHNpLmg9OTI2Mz1zdHJ1Y3QgaXdhcnBfbXBhX29mZmxvYWRfcmFtcm9kX2RhdGEge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2hzaS5oLTkyNjYtXHR1OCBtb2RlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaHNpLmg6OTI2NzpcdHU4IHRjcF9jb25uZWN0X3NpZGU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9oc2kuaC05MjY4LVx0dTggcnRyX3ByZWY7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYz04MTk9cWVkX2l3YXJwX21wYV9vZmZsb2FkKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLCBzdHJ1Y3QgcWVkX2l3YXJwX2VwICplcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5jLTg3My1cdFx0XHRvZmZzZXRvZihzdHJ1Y3QgcWVkX2l3YXJwX2VwX21lbW9yeSwgaW5fcGRhdGEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYzo4NzQ6XHRwX21wYV9yYW1yb2QtXHUwMDNldGNwX2Nvbm5lY3Rfc2lkZSA9IGVwLVx1MDAzZWNvbm5lY3RfbW9kZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmMtODc1LVx0RE1BX1JFR1BBSVJfTEUocF9tcGFfcmFtcm9kLVx1MDAzZWluY29taW5nX3VscF9idWZmZXIuYWRkcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5jPTI5NTc9c3RhdGljIHZvaWRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmM6Mjk1ODpxZWRfaXdhcnBfdGNwX2Nvbm5lY3RfdW5zdWNjZXNzZnVsKHN0cnVjdCBxZWRfaHdmbiAqcF9od2ZuLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYy0yOTU5LVx0XHRcdFx0ICAgc3RydWN0IHFlZF9pd2FycF9lcCAqZXAsIHU4IGZ3X3JldHVybl9jb2RlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmM9MzAxOT1xZWRfaXdhcnBfY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5jLTMwMzMtXHRcdGVsc2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmM6MzAzNDpcdFx0XHRxZWRfaXdhcnBfdGNwX2Nvbm5lY3RfdW5zdWNjZXNzZnVsKHBfaHdmbiwgZXAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5jLTMwMzUtXHRcdFx0XHRcdFx0XHQgICBmd19yZXR1cm5fY29kZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYy0zMDM5LVx0XHRlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5jOjMwNDA6XHRcdFx0cWVkX2l3YXJwX3RjcF9jb25uZWN0X3Vuc3VjY2Vzc2Z1bChwX2h3Zm4sIGVwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYy0zMDQxLVx0XHRcdFx0XHRcdFx0ICAgZndfcmV0dXJuX2NvZGUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmg9MTEyPXN0cnVjdCBxZWRfaXdhcnBfZXAge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmgtMTE5LVx0c3RydWN0IHFlZF9pd2FycF9jbV9pbmZvIGNtX2luZm87XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5oOjEyMDpcdGVudW0gdGNwX2Nvbm5lY3RfbW9kZSBjb25uZWN0X21vZGU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5oLTEyMS1cdGVudW0gbXBhX3J0cl90eXBlIHJ0cl90eXBlO1xuLS1cbmRyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0Lmg9MTUzNj1zdHJ1Y3QgbmRpc19vZmZsb2FkX3BhcmFtcyB7XG4tLVxuZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaC0xNTQ2LVx0dTggbHNvX3YyX2lwdjY7XG5kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oOjE1NDc6XHR1OCB0Y3BfY29ubmVjdGlvbl9pcF92NDtcbmRyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0Lmg6MTU0ODpcdHU4IHRjcF9jb25uZWN0aW9uX2lwX3Y2O1xuZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaC0xNTQ5LVx0dTMyIGZsYWdzO1xuLS1cbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmg9MTExMD1zdHJ1Y3QgYmVfZXFfZGVsYXlfcGFyYW1zX2luIHtcbi0tXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oLTExMTUtXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oOjExMTY6c3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luIHtcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgtMTExNy1cdHN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7XG4tLVxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaC0xMTI5LVxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaDoxMTMwOnN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9pbl92MSB7XG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oLTExMzEtXHRzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyO1xuLS1cbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgtMTE0OS1cbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmg6MTE1MDpzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfb3V0IHtcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgtMTE1MS1cdHN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyO1xuLS1cbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jPTEwNTA9c3RhdGljIGludCBiZWlzY3NpX29wZW5fY29ubihzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLFxuLS1cbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jLTEwNTUtXHRzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBiZWlzY3NpX2VwLVx1MDAzZXBoYmE7XG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYzoxMDU2Olx0c3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX291dCAqcHRjcGNuY3Rfb3V0O1xuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMtMTA1Ny1cdHN0cnVjdCBiZV9kbWFfbWVtIG5vbmVtYl9jbWQ7XG4tLVxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMtMTA4MC1cdGlmIChpc19jaGlwX2JlMl9iZTNyKHBoYmEpKVxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmM6MTA4MTpcdFx0cmVxX21lbXNpemUgPSBzaXplb2Yoc3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luKTtcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jLTEwODItXHRlbHNlXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYzoxMDgzOlx0XHRyZXFfbWVtc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfaW5fdjEpO1xuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMtMTA4NC1cbi0tXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYy0xMTI1LVxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmM6MTEyNjpcdHB0Y3BjbmN0X291dCA9IChzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfb3V0ICopbm9uZW1iX2NtZC52YTtcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jLTExMjctXHRiZWlzY3NpX2VwID0gZXAtXHUwMDNlZGRfZGF0YTtcbi0tXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5jPTEwOT1pbnQgbWdtdF9vcGVuX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLFxuLS1cbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMtMTE5LVx0c3RydWN0IGJlX21jY193cmIgKndyYjtcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmM6MTIwOlx0c3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luX3YxICpyZXE7XG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWdtdC5jLTEyMS1cdHVuc2lnbmVkIHNob3J0IGRlZl9oZHJfaWQ7XG4tLVxuaW5jbHVkZS9saW51eC9jZXBoL21lc3Nlbmdlci5oPTUyNz12b2lkIGNlcGhfZW5jb2RlX215X2FkZHIoc3RydWN0IGNlcGhfbWVzc2VuZ2VyICptc2dyKTtcbmluY2x1ZGUvbGludXgvY2VwaC9tZXNzZW5nZXIuaC01MjgtXG5pbmNsdWRlL2xpbnV4L2NlcGgvbWVzc2VuZ2VyLmg6NTI5OmludCBjZXBoX3RjcF9jb25uZWN0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbik7XG5pbmNsdWRlL2xpbnV4L2NlcGgvbWVzc2VuZ2VyLmgtNTMwLWludCBjZXBoX2Nvbl9jbG9zZV9zb2NrZXQoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3FlZC9udm1ldGNwX2NvbW1vbi5oPTE5OT1zdHJ1Y3QgbnZtZXRjcF9ob3N0X2NjY2lkX2l0aWRfZW50cnkge1xuLS1cbmluY2x1ZGUvbGludXgvcWVkL252bWV0Y3BfY29tbW9uLmgtMjAyLVxuaW5jbHVkZS9saW51eC9xZWQvbnZtZXRjcF9jb21tb24uaDoyMDM6c3RydWN0IG52bWV0Y3BfY29ubmVjdF9kb25lX3Jlc3VsdHMge1xuaW5jbHVkZS9saW51eC9xZWQvbnZtZXRjcF9jb21tb24uaC0yMDQtXHRfX2xlMTYgaWNpZDtcbi0tXG5pbmNsdWRlL2xpbnV4L3FlZC90Y3BfY29tbW9uLmg9MTc9c3RydWN0IG9vb19vcGFxdWUge1xuLS1cbmluY2x1ZGUvbGludXgvcWVkL3RjcF9jb21tb24uaC0yNS0vKiB0Y3AgY29ubmVjdCBtb2RlIGVudW0gKi9cbmluY2x1ZGUvbGludXgvcWVkL3RjcF9jb21tb24uaDoyNjplbnVtIHRjcF9jb25uZWN0X21vZGUge1xuaW5jbHVkZS9saW51eC9xZWQvdGNwX2NvbW1vbi5oLTI3LVx0VENQX0NPTk5FQ1RfQUNUSVZFLFxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTU2OT1pbnQgdGNwX3Y0X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBhZGRyX2xlbik7XG5pbmNsdWRlL25ldC90Y3AuaDo1NzA6aW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzayk7XG5pbmNsdWRlL25ldC90Y3AuaC01NzEtZW51bSB0Y3Bfc3luYWNrX3R5cGUge1xuLS1cbmluY2x1ZGUvbmV0L3RjcC5oPTIxMDM9c3RydWN0IHRjcF9mYXN0b3Blbl9yZXF1ZXN0IHtcbi0tXG5pbmNsdWRlL25ldC90Y3AuaC0yMTA3LVx0c2l6ZV90XHRcdFx0XHRzaXplO1xuaW5jbHVkZS9uZXQvdGNwLmg6MjEwODpcdGludFx0XHRcdFx0Y29waWVkO1x0LyogcXVldWVkIGluIHRjcF9jb25uZWN0KCkgKi9cbmluY2x1ZGUvbmV0L3RjcC5oLTIxMDktXHRzdHJ1Y3QgdWJ1Zl9pbmZvXHRcdCp1YXJnO1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlci5jPTQxNz1zdGF0aWMgdm9pZCBzZXRfc29ja19jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXIuYy00MzQtICovXG5uZXQvY2VwaC9tZXNzZW5nZXIuYzo0MzU6aW50IGNlcGhfdGNwX2Nvbm5lY3Qoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtNDM2LXtcbi0tXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYz0xNDY5PWludCBjZXBoX2Nvbl92MV90cnlfd3JpdGUoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jLTE0OTMtXHRcdCAgICAgY29uLCBjb24tXHUwMDNlc3RhdGUpO1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmM6MTQ5NDpcdFx0cmV0ID0gY2VwaF90Y3BfY29ubmVjdChjb24pO1xubmV0L2NlcGgvbWVzc2VuZ2VyX3YxLmMtMTQ5NS1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jPTMzNTQ9aW50IGNlcGhfY29uX3YyX3RyeV93cml0ZShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXG4tLVxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzM4OC1cbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMzODk6XHRcdHJldCA9IGNlcGhfdGNwX2Nvbm5lY3QoY29uKTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMzOTAtXHRcdGlmIChyZXQpIHtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jOjMzOTE6XHRcdFx0cHJfZXJyKFwmIzM0O2NlcGhfdGNwX2Nvbm5lY3QgZmFpbGVkOiAlZFxcblwmIzM0OywgcmV0KTtcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMzOTItXHRcdFx0Y29uLVx1MDAzZWVycm9yX21zZyA9IFwmIzM0O2Nvbm5lY3QgZXJyb3JcJiMzNDs7XG4tLVxubmV0L2lwdjQvdGNwLmM9MTA1MT1pbnQgdGNwX3NlbmRtc2dfZmFzdG9wZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCAqY29waWVkLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTEwNzUtXHRpZiAoaW5ldF90ZXN0X2JpdChERUZFUl9DT05ORUNULCBzaykpIHtcbm5ldC9pcHY0L3RjcC5jOjEwNzY6XHRcdGVyciA9IHRjcF9jb25uZWN0KHNrKTtcbm5ldC9pcHY0L3RjcC5jLTEwNzctXHRcdC8qIFNhbWUgZmFpbHVyZSBwcm9jZWR1cmUgYXMgaW4gdGNwX3Y0LzZfY29ubmVjdCAqL1xuLS1cbm5ldC9pcHY0L3RjcF9hby5jPTExMzY9dm9pZCB0Y3BfYW9fY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3BfYW8uYy0xMTg5LVx0fSBlbHNlIHtcbm5ldC9pcHY0L3RjcF9hby5jOjExOTA6XHRcdC8qIENhbiYjMzk7dCBoYXBwZW46IHRjcF9jb25uZWN0KCkgdmVyaWZpZXMgdGhhdCB0aGVyZSYjMzk7c1xubmV0L2lwdjQvdGNwX2FvLmMtMTE5MS1cdFx0ICogYXQgbGVhc3Qgb25lIHRjcC1hbyBrZXkgdGhhdCBtYXRjaGVzIHRoZSByZW1vdGUgcGVlci5cbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTIyMT1pbnQgdGNwX3Y0X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBhZGRyX2xlbilcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM0NC1cbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzQ1Olx0ZXJyID0gdGNwX2Nvbm5lY3Qoc2spO1xubmV0L2lwdjQvdGNwX2lwdjQuYy0zNDYtXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jPTQwODE9c3RhdGljIHZvaWQgdGNwX2NhX2RzdF9pbml0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTAwLS8qIERvIGFsbCBjb25uZWN0IHNvY2tldCBzZXR1cHMgdGhhdCBjYW4gYmUgZG9uZSBBRiBpbmRlcGVuZGVudC4gKi9cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MTAxOnN0YXRpYyB2b2lkIHRjcF9jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxMDIte1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTgwLVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQxODE6c3RhdGljIHZvaWQgdGNwX2Nvbm5lY3RfcXVldWVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTgyLXtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDIwMT1zdGF0aWMgaW50IHRjcF9zZW5kX3N5bl9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnN5bilcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDI1OC1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MjU5Olx0dGNwX2Nvbm5lY3RfcXVldWVfc2tiKHNrLCBzeW5fZGF0YSk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDI2MC1cdGlmIChzeW5fZGF0YS1cdTAwM2VsZW4pXG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQyOTctLyogQnVpbGQgYSBTWU4gYW5kIHNlbmQgaXQgb2ZmLiAqL1xubmV0L2lwdjQvdGNwX291dHB1dC5jOjQyOTg6aW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00Mjk5LXtcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDM1OS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MzYwOlx0dGNwX2Nvbm5lY3RfaW5pdChzayk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDM2MS1cbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDM3MS1cdC8qIFNZTiBlYXRzIGEgc2VxdWVuY2UgYnl0ZSwgd3JpdGVfc2VxIHVwZGF0ZWQgYnlcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MzcyOlx0ICogdGNwX2Nvbm5lY3RfcXVldWVfc2tiKCkuXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDM3My1cdCAqL1xuLS1cbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00Mzc2LVx0dHAtXHUwMDNlcmV0cmFuc19zdGFtcCA9IHRjcF90aW1lX3N0YW1wX3RzKHRwKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0Mzc3Olx0dGNwX2Nvbm5lY3RfcXVldWVfc2tiKHNrLCBidWZmKTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00Mzc4LVx0dGNwX2Vjbl9zZW5kX3N5bihzaywgYnVmZik7XG4tLVxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQ0MDMtfVxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQ0MDQ6RVhQT1JUX1NZTUJPTCh0Y3BfY29ubmVjdCk7XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQwNS1cbi0tXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTEzMz1zdGF0aWMgaW50IHRjcF92Nl9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLFxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMzQ1LVxubmV0L2lwdjYvdGNwX2lwdjYuYzozNDY6XHRlcnIgPSB0Y3BfY29ubmVjdChzayk7XG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTM0Ny1cdGlmIChlcnIpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDA4NT1zdGF0aWMgaW50IG1wdGNwX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQxMTctXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MTE4OnN0YXRpYyBpbnQgbXB0Y3BfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQxMTktXHRcdFx0IGludCBhZGRyX2xlbilcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MTk2PXN0YXRpYyBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdCA9IHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MTk5LVx0LmluaXRcdFx0PSBtcHRjcF9pbml0X3NvY2ssXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjAwOlx0LmNvbm5lY3RcdD0gbXB0Y3BfY29ubmVjdCxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMDEtXHQuZGlzY29ubmVjdFx0PSBtcHRjcF9kaXNjb25uZWN0LFxuLS1cbm5ldC9yZHMvTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX1JEU19UQ1ApICYjNDM7PSByZHNfdGNwLm9cbm5ldC9yZHMvTWFrZWZpbGU6MTQ6cmRzX3RjcC15IDo9XHRcdHRjcC5vIHRjcF9jb25uZWN0Lm8gdGNwX2xpc3Rlbi5vIHRjcF9yZWN2Lm8gXFxcbm5ldC9yZHMvTWFrZWZpbGUtMTUtXHRcdFx0dGNwX3NlbmQubyB0Y3Bfc3RhdHMub1xuLS1cbm5ldC9yZHMvdGNwLmM9NDc9c3RhdGljIExJU1RfSEVBRChyZHNfdGNwX3RjX2xpc3QpO1xubmV0L3Jkcy90Y3AuYy00OC1cbm5ldC9yZHMvdGNwLmM6NDk6LyogVHJhY2sgcmRzX3RjcF9jb25uZWN0aW9uIHN0cnVjdHMgc28gdGhleSBjYW4gYmUgY2xlYW5lZCB1cCAqL1xubmV0L3Jkcy90Y3AuYy01MC1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc190Y3BfY29ubl9sb2NrKTtcbi0tXG5uZXQvcmRzL3RjcC5jPTY0PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHJkc190Y3Bfc3lzY3RsX3RhYmxlW10gPSB7XG4tLVxubmV0L3Jkcy90Y3AuYy04NC1cbm5ldC9yZHMvdGNwLmM6ODU6dTMyIHJkc190Y3Bfd3JpdGVfc2VxKHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjKVxubmV0L3Jkcy90Y3AuYy04Ni17XG4tLVxubmV0L3Jkcy90Y3AuYy05MC1cbm5ldC9yZHMvdGNwLmM6OTE6dTMyIHJkc190Y3Bfc25kX3VuYShzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0Yylcbm5ldC9yZHMvdGNwLmMtOTIte1xuLS1cbm5ldC9yZHMvdGNwLmM9OTY9dm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQvcmRzL3RjcC5jOjk3Olx0XHRcdCAgICAgICBzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0Yylcbm5ldC9yZHMvdGNwLmMtOTgte1xuLS1cbm5ldC9yZHMvdGNwLmM9MTI2PXZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvcmRzL3RjcC5jLTEyOC17XG5uZXQvcmRzL3RjcC5jOjEyOTpcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XG5uZXQvcmRzL3RjcC5jLTEzMC1cdHN0cnVjdCBzb2NrZXQgKm9zb2NrID0gdGMtXHUwMDNldF9zb2NrO1xuLS1cbm5ldC9yZHMvdGNwLmM9MTgxPXZvaWQgcmRzX3RjcF9zZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvdGNwLmMtMTgyLXtcbm5ldC9yZHMvdGNwLmM6MTgzOlx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjcC1cdTAwM2VjcF90cmFuc3BvcnRfZGF0YTtcbm5ldC9yZHMvdGNwLmMtMTg0LVxuLS1cbm5ldC9yZHMvdGNwLmM9MjE5PXN0YXRpYyB2b2lkIHJkc190Y3BfdGNfaW5mbyhzdHJ1Y3Qgc29ja2V0ICpyZHNfc29jaywgdW5zaWduZWQgaW50IGxlbixcbi0tXG5uZXQvcmRzL3RjcC5jLTIyNC1cdHN0cnVjdCByZHNfaW5mb190Y3Bfc29ja2V0IHRzaW5mbztcbm5ldC9yZHMvdGNwLmM6MjI1Olx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGM7XG5uZXQvcmRzL3RjcC5jLTIyNi1cdHVuc2lnbmVkIGludCBjb3BpZWQgPSAwO1xuLS1cbm5ldC9yZHMvdGNwLmM9Mjg0PXN0YXRpYyB2b2lkIHJkczZfdGNwX3RjX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbixcbi0tXG5uZXQvcmRzL3RjcC5jLTI4OS1cdHN0cnVjdCByZHM2X2luZm9fdGNwX3NvY2tldCB0c2luZm82O1xubmV0L3Jkcy90Y3AuYzoyOTA6XHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0Yztcbm5ldC9yZHMvdGNwLmMtMjkxLVx0dW5zaWduZWQgaW50IGNvcGllZCA9IDA7XG4tLVxubmV0L3Jkcy90Y3AuYz0zODA9c3RhdGljIHZvaWQgcmRzX3RjcF9jb25uX2ZyZWUodm9pZCAqYXJnKVxubmV0L3Jkcy90Y3AuYy0zODEte1xubmV0L3Jkcy90Y3AuYzozODI6XHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGFyZztcbm5ldC9yZHMvdGNwLmMtMzgzLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5uZXQvcmRzL3RjcC5jPTM5NT1zdGF0aWMgaW50IHJkc190Y3BfY29ubl9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcClcbm5ldC9yZHMvdGNwLmMtMzk2LXtcbm5ldC9yZHMvdGNwLmM6Mzk3Olx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGM7XG5uZXQvcmRzL3RjcC5jLTM5OC1cdGludCBpLCBqO1xuLS1cbm5ldC9yZHMvdGNwLmM9NDM3PXN0YXRpYyBib29sIGxpc3RfaGFzX2Nvbm4oc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxubmV0L3Jkcy90Y3AuYy00Mzgte1xubmV0L3Jkcy90Y3AuYzo0Mzk6XHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YywgKl90Yztcbm5ldC9yZHMvdGNwLmMtNDQwLVxuLS1cbm5ldC9yZHMvdGNwLmM9NDU4PXN0YXRpYyB2b2lkIHJkc190Y3BfZGVzdHJveV9jb25ucyh2b2lkKVxubmV0L3Jkcy90Y3AuYy00NTkte1xubmV0L3Jkcy90Y3AuYzo0NjA6XHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YywgKl90Yztcbm5ldC9yZHMvdGNwLmMtNDYxLVx0TElTVF9IRUFEKHRtcF9saXN0KTtcbi0tXG5uZXQvcmRzL3RjcC5jPTYyOT1zdGF0aWMgdm9pZCByZHNfdGNwX2tpbGxfc29jayhzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvcmRzL3RjcC5jLTYzMC17XG5uZXQvcmRzL3RjcC5jOjYzMTpcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjLCAqX3RjO1xubmV0L3Jkcy90Y3AuYy02MzItXHRMSVNUX0hFQUQodG1wX2xpc3QpO1xuLS1cbm5ldC9yZHMvdGNwLmM9Njk0PXN0YXRpYyB2b2lkIHJkc190Y3Bfc3lzY3RsX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9yZHMvdGNwLmMtNjk1LXtcbm5ldC9yZHMvdGNwLmM6Njk2Olx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMsICpfdGM7XG5uZXQvcmRzL3RjcC5jLTY5Ny1cbi0tXG5uZXQvcmRzL3RjcC5jPTc2Nz1zdGF0aWMgaW50IF9faW5pdCByZHNfdGNwX2luaXQodm9pZClcbi0tXG5uZXQvcmRzL3RjcC5jLTc3MC1cbm5ldC9yZHMvdGNwLmM6NzcxOlx0cmRzX3RjcF9jb25uX3NsYWIgPSBLTUVNX0NBQ0hFKHJkc190Y3BfY29ubmVjdGlvbiwgMCk7XG5uZXQvcmRzL3RjcC5jLTc3Mi1cdGlmICghcmRzX3RjcF9jb25uX3NsYWIpIHtcbi0tXG5uZXQvcmRzL3RjcC5oPTIyPXN0cnVjdCByZHNfdGNwX2luY29taW5nIHtcbi0tXG5uZXQvcmRzL3RjcC5oLTI2LVxubmV0L3Jkcy90Y3AuaDoyNzpzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uIHtcbm5ldC9yZHMvdGNwLmgtMjgtXG4tLVxubmV0L3Jkcy90Y3AuaD02Mz1zdHJ1Y3QgcmRzX3RjcF9zdGF0aXN0aWNzIHtcbi0tXG5uZXQvcmRzL3RjcC5oLTY2LVx0dWludDY0X3RcdHNfdGNwX3NuZGJ1Zl9mdWxsO1xubmV0L3Jkcy90Y3AuaDo2NzpcdHVpbnQ2NF90XHRzX3RjcF9jb25uZWN0X3JhY2VkO1xubmV0L3Jkcy90Y3AuaC02OC1cdHVpbnQ2NF90XHRzX3RjcF9saXN0ZW5fY2xvc2VkX3N0YWxlO1xuLS1cbm5ldC9yZHMvdGNwLmg9NzY9dm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQvcmRzL3RjcC5oOjc3Olx0XHRcdCAgICAgICBzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0Yyk7XG5uZXQvcmRzL3RjcC5oOjc4OnUzMiByZHNfdGNwX3dyaXRlX3NlcShzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0Yyk7XG5uZXQvcmRzL3RjcC5oOjc5OnUzMiByZHNfdGNwX3NuZF91bmEoc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMpO1xubmV0L3Jkcy90Y3AuaC04MC1leHRlcm4gc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX3RjcF90cmFuc3BvcnQ7XG4tLVxubmV0L3Jkcy90Y3AuaD04Mj1pbnQgcmRzX3RjcF9sYWRkcl9jaGVjayhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcixcbm5ldC9yZHMvdGNwLmgtODMtXHRcdFx0X191MzIgc2NvcGVfaWQpO1xubmV0L3Jkcy90Y3AuaDo4NDovKiB0Y3BfY29ubmVjdC5jICovXG5uZXQvcmRzL3RjcC5oLTg1LWludCByZHNfdGNwX2Nvbm5fcGF0aF9jb25uZWN0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XG4tLVxubmV0L3Jkcy90Y3BfY29ubmVjdC5jPTQwPXZvaWQgcmRzX3RjcF9zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYy00My1cdHN0cnVjdCByZHNfY29ubl9wYXRoICpjcDtcbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYzo0NDpcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjO1xubmV0L3Jkcy90Y3BfY29ubmVjdC5jLTQ1LVxuLS1cbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYz05OD1pbnQgcmRzX3RjcF9jb25uX3BhdGhfY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4tLVxubmV0L3Jkcy90Y3BfY29ubmVjdC5jLTEwOS1cdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNwLVx1MDAzZWNwX2Nvbm47XG5uZXQvcmRzL3RjcF9jb25uZWN0LmM6MTEwOlx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjcC1cdTAwM2VjcF90cmFuc3BvcnRfZGF0YTtcbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYy0xMTEtXG4tLVxubmV0L3Jkcy90Y3BfY29ubmVjdC5jPTIzMz12b2lkIHJkc190Y3BfY29ubl9wYXRoX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYy0yMzQte1xubmV0L3Jkcy90Y3BfY29ubmVjdC5jOjIzNTpcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XG5uZXQvcmRzL3RjcF9jb25uZWN0LmMtMjM2LVx0c3RydWN0IHNvY2tldCAqc29jayA9IHRjLVx1MDAzZXRfc29jaztcbi0tXG5uZXQvcmRzL3RjcF9saXN0ZW4uYz02MD1yZHNfdGNwX2dldF9wZWVyX3Nwb3J0KHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtNzUtICovXG5uZXQvcmRzL3RjcF9saXN0ZW4uYzo3NjpzdGF0aWMgc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy03Ny1yZHNfdGNwX2FjY2VwdF9vbmVfcGF0aChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L3Jkcy90Y3BfbGlzdGVuLmM9MTA4PXZvaWQgcmRzX3RjcF9jb25uX3Nsb3RzX2F2YWlsYWJsZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGJvb2wgZmFuX291dClcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTEwOS17XG5uZXQvcmRzL3RjcF9saXN0ZW4uYzoxMTA6XHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0Yztcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTExMS1cdHN0cnVjdCByZHNfdGNwX25ldCAqcnRuO1xuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jPTE1Mj1pbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTE1OC1cdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7XG5uZXQvcmRzL3RjcF9saXN0ZW4uYzoxNTk6XHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICpyc190Y3AgPSBOVUxMO1xubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMTYwLVx0aW50IGNvbm5fc3RhdGU7XG4tLVxubmV0L3Jkcy90Y3BfcmVjdi5jPTE1NT1zdGF0aWMgaW50IHJkc190Y3BfZGF0YV9yZWN2KHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9yZHMvdGNwX3JlY3YuYy0xNTktXHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3AgPSBhcmctXHUwMDNlY29ubl9wYXRoO1xubmV0L3Jkcy90Y3BfcmVjdi5jOjE2MDpcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XG5uZXQvcmRzL3RjcF9yZWN2LmMtMTYxLVx0c3RydWN0IHJkc190Y3BfaW5jb21pbmcgKnRpbmMgPSB0Yy1cdTAwM2V0X3RpbmM7XG4tLVxubmV0L3Jkcy90Y3BfcmVjdi5jPTI2Mz1zdGF0aWMgaW50IHJkc190Y3BfcmVhZF9zb2NrKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCwgZ2ZwX3QgZ2ZwKVxubmV0L3Jkcy90Y3BfcmVjdi5jLTI2NC17XG5uZXQvcmRzL3RjcF9yZWN2LmM6MjY1Olx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjcC1cdTAwM2VjcF90cmFuc3BvcnRfZGF0YTtcbm5ldC9yZHMvdGNwX3JlY3YuYy0yNjYtXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gdGMtXHUwMDNldF9zb2NrO1xuLS1cbm5ldC9yZHMvdGNwX3JlY3YuYz0yOTU9aW50IHJkc190Y3BfcmVjdl9wYXRoKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvdGNwX3JlY3YuYy0yOTYte1xubmV0L3Jkcy90Y3BfcmVjdi5jOjI5NzpcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XG5uZXQvcmRzL3RjcF9yZWN2LmMtMjk4LVx0c3RydWN0IHNvY2tldCAqc29jayA9IHRjLVx1MDAzZXRfc29jaztcbi0tXG5uZXQvcmRzL3RjcF9yZWN2LmM9MzExPXZvaWQgcmRzX3RjcF9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvcmRzL3RjcF9yZWN2LmMtMzE0LVx0c3RydWN0IHJkc19jb25uX3BhdGggKmNwO1xubmV0L3Jkcy90Y3BfcmVjdi5jOjMxNTpcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjO1xubmV0L3Jkcy90Y3BfcmVjdi5jLTMxNi1cbi0tXG5uZXQvcmRzL3RjcF9zZW5kLmM9NDE9dm9pZCByZHNfdGNwX3htaXRfcGF0aF9wcmVwYXJlKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvdGNwX3NlbmQuYy00Mi17XG5uZXQvcmRzL3RjcF9zZW5kLmM6NDM6XHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLVx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xubmV0L3Jkcy90Y3Bfc2VuZC5jLTQ0LVxuLS1cbm5ldC9yZHMvdGNwX3NlbmQuYz00OD12b2lkIHJkc190Y3BfeG1pdF9wYXRoX2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvdGNwX3NlbmQuYy00OS17XG5uZXQvcmRzL3RjcF9zZW5kLmM6NTA6XHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLVx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xubmV0L3Jkcy90Y3Bfc2VuZC5jLTUxLVxuLS1cbm5ldC9yZHMvdGNwX3NlbmQuYz03MD1pbnQgcmRzX3RjcF94bWl0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19tZXNzYWdlICpybSxcbi0tXG5uZXQvcmRzL3RjcF9zZW5kLmMtNzMtXHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3AgPSBybS1cdTAwM2VtX2luYy5pX2Nvbm5fcGF0aDtcbm5ldC9yZHMvdGNwX3NlbmQuYzo3NDpcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XG5uZXQvcmRzL3RjcF9zZW5kLmMtNzUtXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHt9O1xuLS1cbm5ldC9yZHMvdGNwX3NlbmQuYz0xNzk9dm9pZCByZHNfdGNwX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvcmRzL3RjcF9zZW5kLmMtMTgyLVx0c3RydWN0IHJkc19jb25uX3BhdGggKmNwO1xubmV0L3Jkcy90Y3Bfc2VuZC5jOjE4MzpcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjO1xubmV0L3Jkcy90Y3Bfc2VuZC5jLTE4NC1cbi0tXG5uZXQvcmRzL3RjcF9zdGF0cy5jPTQzPXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmRzX3RjcF9zdGF0X25hbWVzW10gPSB7XG4tLVxubmV0L3Jkcy90Y3Bfc3RhdHMuYy00Ni1cdFwmIzM0O3RjcF9zbmRidWZfZnVsbFwmIzM0Oyxcbm5ldC9yZHMvdGNwX3N0YXRzLmM6NDc6XHRcJiMzNDt0Y3BfY29ubmVjdF9yYWNlZFwmIzM0Oyxcbm5ldC9yZHMvdGNwX3N0YXRzLmMtNDgtXHRcJiMzNDt0Y3BfbGlzdGVuX2Nsb3NlZF9zdGFsZVwmIzM0Oyxcbi0tXG5zYW1wbGVzL2xhbmRsb2NrL3NhbmRib3hlci5jPTMxMz1zdGF0aWMgaW50IGFkZF9xdWlldF9hY2Nlc3MoY29uc3QgY2hhciAqY29uc3QgZW52X3Zhcixcbi0tXG5zYW1wbGVzL2xhbmRsb2NrL3NhbmRib3hlci5jLTM0Mi1cdFx0XHRcdExBTkRMT0NLX0FDQ0VTU19ORVRfQklORF9UQ1A7XG5zYW1wbGVzL2xhbmRsb2NrL3NhbmRib3hlci5jOjM0MzpcdFx0ZWxzZSBpZiAoc3RyY21wKHN0cl9hY2Nlc3MsIFwmIzM0O3RjcF9jb25uZWN0XCYjMzQ7KSA9PSAwKVxuc2FtcGxlcy9sYW5kbG9jay9zYW5kYm94ZXIuYy0zNDQtXHRcdFx0cnVsZXNldF9hdHRyLVx1MDAzZXF1aWV0X2FjY2Vzc19uZXQgfD1cbi0tXG5zYW1wbGVzL2xhbmRsb2NrL3NhbmRib3hlci5jPTM3OT1zdGF0aWMgY29uc3QgY2hhciBoZWxwW10gPVxuLS1cbnNhbXBsZXMvbGFuZGxvY2svc2FuZGJveGVyLmMtNDEzLVx0XCYjMzQ7ICAtIFxcXCYjMzQ7dGNwX2JpbmRcXFwmIzM0OyB0byBxdWlldCB0Y3AgYmluZCBkZW5pYWxzXFxuXCYjMzQ7XG5zYW1wbGVzL2xhbmRsb2NrL3NhbmRib3hlci5jOjQxNDpcdFwmIzM0OyAgLSBcXFwmIzM0O3RjcF9jb25uZWN0XFxcJiMzNDsgdG8gcXVpZXQgdGNwIGNvbm5lY3QgZGVuaWFsc1xcblwmIzM0O1xuc2FtcGxlcy9sYW5kbG9jay9zYW5kYm94ZXIuYy00MTUtXHRcJiMzNDsgIC0gXFxcJiMzNDt1ZHBfYmluZFxcXCYjMzQ7IHRvIHF1aWV0IHVkcCBiaW5kIGRlbmlhbHNcXG5cJiMzNDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19zdG9yYWdlX3RyYWNpbmcuYz03MT1pbnQgQlBGX1BST0codHJhY2VfaW5ldF9jc2tfbGlzdGVuX3N0YXJ0LCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfc3RvcmFnZV90cmFjaW5nLmMtNzctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19zdG9yYWdlX3RyYWNpbmcuYzo3ODpTRUMoXCYjMzQ7ZmVudHJ5L3RjcF9jb25uZWN0XCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfc3RvcmFnZV90cmFjaW5nLmM6Nzk6aW50IEJQRl9QUk9HKHRyYWNlX3RjcF9jb25uZWN0LCBzdHJ1Y3Qgc29jayAqc2spXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9za19zdG9yYWdlX3RyYWNpbmcuYy04MC17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jPTg5PXN0YXRpYyBpbnQgdGNwX2xpc3Rlbih2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYy0xMDctXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmM6MTA4OnN0YXRpYyB2b2lkIHRjcF9jb25uZWN0KGludCBsaXN0ZW5lciwgdWludDMyX3QgZmxvd2xhYmVsLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jLTEwOS1cdFx0XHRpbnQgKmNsaWVudCwgaW50ICphY2NlcHRlZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmM9NDUwPVRFU1RfRihmbG93bGFiZWwsIHJlbW90ZV9mbGFnKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYy00NjItXHRsaXN0ZW5lciA9IHRjcF9saXN0ZW4oKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYzo0NjM6XHR0Y3BfY29ubmVjdChsaXN0ZW5lciwgNywgXHUwMDI2Y2ZkLCBcdTAwMjZhZmQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jLTQ2NC1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmM9NDkyPVRFU1RfRihmbG93bGFiZWwsIHJlZmxlY3RfZmxhZylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMtNTIwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jOjUyMTpcdHRjcF9jb25uZWN0KGxpc3RlbmVyLCA4LCBcdTAwMjZjZmQsIFx1MDAyNmFmZCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMtNTIyLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC8uZ2l0aWdub3JlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvLmdpdGlnbm9yZToyOm1wdGNwX2Nvbm5lY3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC8uZ2l0aWdub3JlLTMtbXB0Y3BfZGlhZ1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9NYWtlZmlsZT04PVRFU1RfUFJPR1MgOj0gXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9NYWtlZmlsZS05LVx0ZGlhZy5zaCBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlOjEwOlx0bXB0Y3BfY29ubmVjdC5zaCBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlOjExOlx0bXB0Y3BfY29ubmVjdF9jaGVja3N1bS5zaCBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlOjEyOlx0bXB0Y3BfY29ubmVjdF9tbWFwLnNoIFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvTWFrZWZpbGU6MTM6XHRtcHRjcF9jb25uZWN0X3NlbmRmaWxlLnNoIFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvTWFrZWZpbGU6MTQ6XHRtcHRjcF9jb25uZWN0X3NwbGljZS5zaCBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlLTE1LVx0bXB0Y3Bfam9pbi5zaCBcXFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9NYWtlZmlsZT0yMj1URVNUX0dFTl9GSUxFUyA6PSBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlOjIzOlx0bXB0Y3BfY29ubmVjdCBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlLTI0LVx0bXB0Y3BfZGlhZyBcXFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9kaWFnLnNoPTE2PWZsdXNoX3BpZHMoKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2gtMTcte1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2g6MTg6XHQjIG1wdGNwX2Nvbm5lY3QgaW4gam9pbiBtb2RlIHdpbGwgc2xlZXAgYSBiaXQgYmVmb3JlIGNvbXBsZXRpbmcsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaC0xOS1cdCMgZ2l2ZSBpdCBzb21lIHRpbWVcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaD0zNTU9ZWNobyBcJiMzNDthXCYjMzQ7IHwgXFxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaC0zNTctXHRcdGlwIG5ldG5zIGV4ZWMgJG5zIFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaDozNTg6XHRcdFx0Li9tcHRjcF9jb25uZWN0IC1wIDEwMDAwIC1sIC10ICR7dGltZW91dF9wb2xsfSAtdyAyMCBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2gtMzU5LVx0XHRcdFx0MC4wLjAuMCBcdTAwM2UvZGV2L251bGwgXHUwMDI2XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2g9MzY0PWVjaG8gXCYjMzQ7YlwmIzM0OyB8IFxcXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2gtMzY2LVx0XHRpcCBuZXRucyBleGVjICRucyBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2g6MzY3Olx0XHRcdC4vbXB0Y3BfY29ubmVjdCAtcCAxMDAwMCAtciAwIC10ICR7dGltZW91dF9wb2xsfSAtdyAyMCBcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2gtMzY4LVx0XHRcdFx0MTI3LjAuMC4xIFx1MDAzZS9kZXYvbnVsbCBcdTAwMjZcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaD0zODQ9ZWNobyBcJiMzNDthXCYjMzQ7IHwgXFxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaC0zODYtXHRcdGlwIG5ldG5zIGV4ZWMgJG5zIFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaDozODc6XHRcdFx0Li9tcHRjcF9jb25uZWN0IC1wIDEwMDAxIC1sIC1zIFRDUCAtdCAke3RpbWVvdXRfcG9sbH0gLXcgMjAgXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9kaWFnLnNoLTM4OC1cdFx0XHRcdDAuMC4wLjAgXHUwMDNlL2Rldi9udWxsIFx1MDAyNlxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTY2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBzbyBgdGNwX2Nvbm5lY3RgIGlzIGV4cG9ydGVkLCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgZm9jdXMgc2hvdWxkIGJlIG9uIGB0Y3BfY29ubmVjdGAsIGB0Y3BfbWFrZV9zeW5hY2tgLCBhbmQgYHRjcF92NF9zeW5fcmVjdl9zb2NrYC4gTGV0JiMzOTtzIGNsYXJpZnkgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYCBzaW5jZSBpdCYjMzk7cyBzdGF0aWMgYW5kIHNob3VsZG4mIzM5O3QgYmUgZXhwb3J0ZWQsIHdoaWNoIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcuIE9oLCBidXQgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBpcyBleHBvcnRlZCwgaW50ZXJlc3RpbmcuIE5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHN0YXRpYyBuYXR1cmUgb2YgYHRjcF9jb25uZWN0X2luaXRgIGFnYWluLCBnb29kLiBBbmQgdGhlIHN0YXR1cyBvZiBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgLCB0aGV5IGFyZSBzdGF0aWMgaW5saW5lIGFzIGV4cGVjdGVkLiBXaGF0IGFib3V0IGBpcHY0X2RlZmF1bHRfYWR2bXNzYCBhbmQgYGlwNl9kZWZhdWx0X2Fkdm1zc2A/IFRoZXkgYXJlIHN0YXRpYywgZ290IGl0LgoKVGltZSB0byBsb29rIGF0IHRoZSBjb25maWcgb3B0aW9ucy4gVGhlIG1vZGlmaWNhdGlvbnMgYXJlIGluIGBuZXQvaXB2NC9yb3V0ZS5jYCBhbmQgYG5ldC9pcHY2L3JvdXRlLmNgLCB3aGljaCBpcyBjb3JlIElQdjQgYW5kIElQdjYgcm91dGluZy4gSSYjMzk7bGwgbmVlZCBgQ09ORklHX0lORVRgIGZvciBJUHY0IGFuZCBgQ09ORklHX0lQVjZgIGZvciBJUHY2LiBTaW5jZSBpdCYjMzk7cyBjb3JlIG5ldHdvcmtpbmcsIHRoZXJlIHNob3VsZG4mIzM5O3QgYmUgYW55IHVudXN1YWwgY29uZmlnIGRlcGVuZGVuY2llcyBiZXlvbmQgdGhlIHN0YW5kYXJkIG9uZXMgcmVxdWlyZWQgZm9yIElQdjQvSVB2NiBzdXBwb3J0LgoKTm93LCBsZXQmIzM5O3MgcmUtZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLiBJIHNlZSB0aGF0IGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAgYXJlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBjYWxsZWQgZnJvbSBgaXB2NF9kZWZhdWx0X2Fkdm1zc2AgYW5kIGBpcDZfZGVmYXVsdF9hZHZtc3NgLCB3aGljaCBhcmUgYXNzaWduZWQgdG8gYGRzdF9vcHMtJmd0O2RlZmF1bHRfYWR2bXNzYC4gYGRzdF9tZXRyaWNfYWR2bXNzYCBjYWxscyBgZHN0LSZndDtvcHMtJmd0O2RlZmF1bHRfYWR2bXNzKGRzdClgLiBUaGVzZSBhcmUgdGhlbiBjYWxsZWQgZnJvbSBgdGNwX2Nvbm5lY3RfaW5pdGAsIGB0Y3BfYWR2ZXJ0aXNlX21zc2AsIGB0Y3BfbWFrZV9zeW5hY2tgLCBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgLCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gVGhpcyByZWluZm9yY2VzIG15IGluaXRpYWwgYXNzZXNzbWVudCB0aGF0IGB0Y3BfY29ubmVjdGAsIGB0Y3BfbWFrZV9zeW5hY2tgLCBhbmQgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9sbG93LiBKdXN0IGNvbmZpcm1pbmcgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBpcyBleHBvcnRlZC4uLiBhbmQgeWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnRjcF92NF9zeW5fcmVjdl9zb2NrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0NzAKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsbHkgSGlkZGVuIFN5bWJvbCoqCgpIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEkmIzM5O20gbG9va2luZyBhdCBhIGZ1bmN0aW9uIHRoYXQgaXNuJiMzOTt0IGV4cGxpY2l0bHkgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTGAsIHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQmIzM5O3MgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhlIG1vZHVsZSBvciBrZXJuZWwgaXQmIzM5O3MgZGVmaW5lZCBpbi4gSG93ZXZlciwgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAqbm90KiBkZWNsYXJlZCBhcyBgc3RhdGljYCBpcyByYWlzaW5nIGEgZmxhZy4gSWYgaXQgd2VyZW4mIzM5O3QgYHN0YXRpY2AsIGJ1dCBhbHNvICpub3QqIGV4cG9ydGVkLCBob3cgaXMgaXQgaW50ZW5kZWQgdG8gYmUgdXNlZD8KCk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiwgd2hhdGV2ZXIgaXQgaXMsIGlzIGJlaW5nIGNhbGxlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gZXhhbWluaW5nIGB0Y3BfbWFrZV9zeW5hY2tgLiBJdCYjMzk7cyBhIGNvbW1vbiBhcmVhIGZvciB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGFzIGl0cyBuYW1lIHN1Z2dlc3RzIGl0IHdvdWxkIGNvbnN0cnVjdCBhIFNZTi1BQ0sgcGFja2V0LCBhbmQgdGhhdCBtYWtlcyBpdCBhIHByaW1lIHN1c3BlY3QgZm9yIGFuIHVuZXhwZWN0ZWQgY2FsbC4gSSYjMzk7bSBiZXR0aW5nIHRoYXQmIzM5O2xsIHlpZWxkIHNvbWUgaW5zaWdodHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdGNwX21ha2Vfc3luYWNrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3NTEKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06CgoqKkRpZ2dpbmcgaW50byBhIE5vbi1FeHBvcnRlZCBTeW1ib2wqKgoKT2theSwgc28gdGhpcyBzeW1ib2wgaXNuJiMzOTt0IGV4cG9ydGVkIHdpdGggYEVYUE9SVF9TWU1CT0xgLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIFRoYXQgbGlrZWx5IG1lYW5zIGl0JiMzOTtzIGludGVuZGVkIGZvciBpbnRlcm5hbCBrZXJuZWwgdXNlLCBub3QgZGlyZWN0IG1vZHVsZSBhY2Nlc3MuIEJ1dCBpdCYjMzk7cyAqYWxzbyogbm90IGBzdGF0aWNgLCBzbyBpdCYjMzk7cyB0ZWNobmljYWxseSB2aXNpYmxlIHdpdGhpbiB0aGUgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggb2ZmZXJzIHNvbWUgY2x1ZXMgYWJvdXQgaXRzIHNjb3BlLiBUaW1lIHRvIGRpZyBkZWVwZXIsIHN0YXJ0aW5nIHdpdGggYSBjcnVjaWFsIGZ1bmN0aW9uIOKAkyBsZXQmIzM5O3MgY2hlY2sgYHRjcF9jb25uZWN0YC4gVGhhdCYjMzk7cyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgbmV0d29yayBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIHdoZXJlIHRoaXMgbm9uLWV4cG9ydGVkIHN5bWJvbCBtaWdodCBmaXQgaW4uIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCB0aGlzIHN5bWJvbCByZWxhdGVzIHRvIFRDUCBzb2NrZXQgY29ubmVjdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZSBpZiBteSBodW5jaCBob2xkcyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdGNwX2Nvbm5lY3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX291dHB1dC5jPTQyOTg9aW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQwMy19XG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDQwNDpFWFBPUlRfU1lNQk9MKHRjcF9jb25uZWN0KTtcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00NDA1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzA2MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVENQIENvbm5lY3Rpb24gRnVuY3Rpb24gRXhwbG9yYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgdGNwX2Nvbm5lY3RgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQgYW5kIGF2YWlsYWJsZSBmb3IgdXNlLiBUaGF0JiMzOTtzIGFzIGV4cGVjdGVkLiBOb3csIEkgbmVlZCB0byBjb25zaWRlciBJUHY2IGNvbXBhdGliaWxpdHkgYW5kIHdoYXQgdGhlIGVxdWl2YWxlbnQgZnVuY3Rpb24gaXMuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGUgc3lzdGVtIGxldmVyYWdlIGEgc2VwYXJhdGUsIGV4cGxpY2l0bHkgSVB2Ni1zcGVjaWZpYyBmdW5jdGlvbiBsaWtlIGB0Y3BfdjZfY29ubmVjdGAsIG9yIGlzIHRoaXMgZnVuY3Rpb25hbGl0eSBoYW5kbGVkIHdpdGhpbiBgdGNwX2Nvbm5lY3RgPyBJdCYjMzk7cyBsaWtlbHkgSSYjMzk7bGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyIHRvIGRldGVybWluZSBob3cgdGhpcyBpcyBkb25lIGFuZCBpZiB0aGlzIGlzIGEgcGxhdGZvcm0tc3BlY2lmaWMgY29uc2lkZXJhdGlvbi4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuLCBhbmQgdGhlIG51YW5jZXMgb2YgdGhlIGltcGxlbWVudGF0aW9uIHdpbGwgZ3VpZGUgd2hhdCBJIGNhbiBkbyBmcm9tIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdGNwX3Y2X2Nvbm5lY3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzI3NAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ29uc2lkZXJpbmcgYHRjcF92NF9jb25uZWN0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHdoYXQmIzM5O3Mgb24gdGhlIHRhYmxlIG5vdz8gV2UmIzM5O3JlIGFkZHJlc3Npbmcgc29tZSBuZXR3b3JraW5nIGlzc3VlLCBwcm9iYWJseSByZWxhdGVkIHRvIGVzdGFibGlzaGluZyBjb25uZWN0aW9ucywgYW5kIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHRjcF92NF9jb25uZWN0YC4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbiwgcmlnaHQ/IEEgY29yZSBidWlsZGluZyBibG9jayBmb3IgYW55IFRDUC9JUC1iYXNlZCBhcHBsaWNhdGlvbi4gVGhpcyBpbXBsaWVzIHRoZSBjdXJyZW50IGNoYWxsZW5nZSBsaWtlbHkgYm9pbHMgZG93biB0byAqaG93KiBhIGNvbm5lY3Rpb24gaXMgYmVpbmcgYXR0ZW1wdGVkLCBvciBwZXJoYXBzIGlzc3VlcyBzdXJyb3VuZGluZyAqd2hlbiogYW5kICp3aGVyZSouIEFyZSB0aGVyZSBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBzb2NrZXQgY3JlYXRpb24sIHRoZSBpbml0aWFsIGhhbmRzaGFrZSwgb3IgZXZlbiB0aGUgc3Vic2VxdWVudCBkYXRhIGZsb3cgb25jZSBhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQ/CgpLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRoZSBpc3N1ZSwgd2hhdCBzcGVjaWZpY2FsbHkgaXMgdHJpcHBpbmcgdGhlIGZ1bmN0aW9uIHVwPyBDb3VsZCB0aGVyZSBiZSBhIHByb2JsZW0gd2l0aCB0aGUgYXJndW1lbnRzIGJlaW5nIHBhc3NlZD8gVGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgZmFtaWx5IChBRl9JTkVUKSwgdGhlIHByb3RvY29sIHR5cGUgKFNPQ0tfU1RSRUFNKT8gUGVyaGFwcyBhbiBpc3N1ZSB3aXRoIHRoZSBsb2NhbCBwb3J0IGJpbmRpbmcgb24gdGhlIGNsaWVudCBzaWRlLCBvciBldmVuIGZpcmV3YWxsIGNvbmZpZ3VyYXRpb25zPyBJcyBpdCB0aGUgKnN5c3RlbSBjYWxsKiBpdHNlbGYsIG9yIHNvbWV0aGluZyBpdCBkZXBlbmRzIHVwb24sIHRoYXTigJlzIGZhaWxpbmc/IEkgbmVlZCB0byBhbmFseXplIHRoaXMgZnVydGhlci4gYHRjcF92NF9jb25uZWN0YCBpcyBhIGNsYXNzaWMgY2FzZSBzdHVkeSBvZiBwcm90b2NvbCBvcGVyYXRpb24gYW5kIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBpbiBhIFRDUC9JUCBuZXR3b3JrLCBhIGZ1bmN0aW9uIHRoYXQgd2FycmFudHMgY2xvc2UgZXhhbWluYXRpb24gaWYgYSBjb25uZWN0aW9uIGlzIG5vdCBzdWNjZXNzZnVsbHkgZXN0YWJsaXNoZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdGNwX3Y0X2Nvbm5lY3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYxNAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgdGhlIGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AgU3ltYm9sKioKCkFscmlnaHQsIHRoZSBjb3JlIGlzc3VlIGlzIHdoZXRoZXIgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiBvciBub3QuIEl0JiMzOTtzIGNydWNpYWwgZm9yIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgY29kZSBvcGVyYXRlcy4gVGhlIGtleSB0YWtlYXdheSBpczogaWYgaXQmIzM5O3MgKm5vdCogc3RhdGljLCB0aGVuIGl0JiMzOTtsbCBoYXZlIGl0cyBvd24gc3BlY2lmaWMsIHVuaXF1ZSBzeW1ib2wgYWRkcmVzcy4gVGhhdCYjMzk7cyBnb29kOyBpdCBtZWFucyBJIGNhbiB0cmFjZSBpdCBtb3JlIHJlYWRpbHkuCgpTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IGl0cyBkZWNsYXJhdGlvbi4gSSBuZWVkIHRvIHZlcmlmeSBpdHMgbG9jYXRpb24sIGFuZCBtYWtlIHN1cmUgaXQmIzM5O3MgaW4gdGhlIHVzdWFsIHBsYWNlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY3Jvc3MtcmVmZXJlbmNlIGl0cyBkZWZpbml0aW9uIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2lwdjQuY2AuIEkgZXhwZWN0IHRvIGZpbmQgaXQgdGhlcmUsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlLiBUaGF0JiMzOTtzIHRoZSBtb3N0IGNvbW1vbiBsb2NhdGlvbiwgYnV0IEkmIzM5O20gbm90IGdvaW5nIHRvIGFzc3VtZSBhbnl0aGluZy4gQ2hlY2tpbmcgaXQgaXMgdGhlIGJlc3Qgc3RlcCB0byBkbyBhdCB0aGlzIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc29jayBcXCp0Y3BfdjRfc3luX3JlY3Zfc29jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD01NjA9dm9pZCB0Y3BfY2Ffb3BlbnJlcV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7XG5pbmNsdWRlL25ldC90Y3AuaDo1NjE6c3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmluY2x1ZGUvbmV0L3RjcC5oLTU2Mi1cdFx0XHRcdCAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MTY1NT1pbnQgdGNwX3Y0X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNjczLSAqL1xubmV0L2lwdjQvdGNwX2lwdjQuYzoxNjc0OnN0cnVjdCBzb2NrICp0Y3BfdjRfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE2NzUtXHRcdFx0XHQgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxNTYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBkc3RfbWV0cmljX2Fkdm1zc2AgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdGhlIHJpZ2h0IGZ1bmN0aW9uIGhlcmUuIE5vdywgSSBuZWVkIHRvIHNlZSAqd2hlcmUqIHRoaXMgYGRzdF9tZXRyaWNfYWR2bXNzYCBpcyBiZWluZyB1c2VkIGluIHRoZSBzeXN0ZW0sIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bGwgY29udGV4dC4gTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2Nhbi4gQWgsIGdvb2QsIHRoZSBjb2RlIHNlYXJjaCB0dXJucyB1cCBhIGZldyBpbnRlcmVzdGluZyBjYWxscy4gYGN4Z2JpX3NvY2tfc2VsZWN0X21zc2AgaW4gdGhlIENYR0JJIFNDU0kgZHJpdmVyLCBgdGNwX29wZW5yZXFfaW5pdF9yd2luYCBpbiB0aGUgVENQIGluaXRpYWxpemF0aW9uLCBhbmQgYHhmcm1fZGVmYXVsdF9hZHZtc3NgIHdpdGhpbiB0aGUgSVBzZWMgZnJhbWV3b3JrLiBUaGF0IGdpdmVzIG1lIGEgbXVjaCBiZXR0ZXIgcGljdHVyZS4gUmlnaHQsIG5leHQgSSYjMzk7bGwgZm9jdXMgb24gYHRjcF9vcGVucmVxX2luaXRfcndpbmAsIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3Bfb3BlbnJlcV9pbml0X3J3aW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9MTgyMz1zdGF0aWMgaW5saW5lIGJvb2wgdGNwX2Vwb2xsaW5fcmVhZHkoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBpbnQgdGFyZ2V0KVxuLS1cbmluY2x1ZGUvbmV0L3RjcC5oLTE4MzQtXG5pbmNsdWRlL25ldC90Y3AuaDoxODM1OmV4dGVybiB2b2lkIHRjcF9vcGVucmVxX2luaXRfcndpbihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXG5pbmNsdWRlL25ldC90Y3AuaC0xODM2LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzYyMD1pbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzU5LVx0dGNwX3JzayhyZXEpLVx1MDAzZXN5bl90b3MgPSBUQ1BfU0tCX0NCKHNrYiktXHUwMDNlaXBfZHNmaWVsZDtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc3NjA6XHR0Y3Bfb3BlbnJlcV9pbml0X3J3aW4ocmVxLCBzaywgZHN0KTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3NjEtXHRza19yeF9xdWV1ZV9zZXQocmVxX3RvX3NrKHJlcSksIHNrYik7XG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTQxMj12b2lkIHRjcF90d3NrX3B1cmdlKHN0cnVjdCBsaXN0X2hlYWQgKm5ldF9leGl0X2xpc3QpXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQzMC0gKi9cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo0MzE6dm9pZCB0Y3Bfb3BlbnJlcV9pbml0X3J3aW4oc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQzMi1cdFx0XHQgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODcwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbm5lciBtb25vbG9ndWU6CgoqKkZvY3VzaW5nIG9uIFRDUCBDb25uZWN0aW9uIEluaXRpYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHpvb20gaW4uIEl0JiMzOTtzIGNsZWFyIHRoYXQgYHRjcF9vcGVucmVxX2luaXRfcndpbmAgaXMgZGlyZWN0bHkgaW52b2tlZCBieSBgdGNwX2Nvbm5fcmVxdWVzdGAuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yLiBgdGNwX2Nvbm5fcmVxdWVzdGAgaXRzZWxmIHNlZW1zIHRvIGJlIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50LCB0aGUgcmVhbCBoZWFydCBvZiB0aGUgY29ubmVjdGlvbiBpbml0aWF0aW9uIHByb2Nlc3MuIEl0JiMzOTtzIHRoZSByaWdodCBwbGFjZSB0byBwdXQgb3VyIGF0dGVudGlvbiwgdG8gZGlzc2VjdCB0aGUgb3JjaGVzdHJhdGlvbiBvZiBldmVudHMgYW5kIHVuZGVyc3RhbmQgaG93IGV2ZXJ5dGhpbmcgaXMgc2V0IHVwIHRvIHJlY2VpdmUgZGF0YS4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSByZWNlaXZlIHdpbmRvdyBpbml0aWFsaXphdGlvbiBpcyBkb25lIHJpZ2h0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjb25uZWN0aW9uIHNldHVwLCBiZWZvcmUgbXVjaCBlbHNlIGlzIGhhbmRsZWQsIHdoaWNoIG1ha2VzIGxvZ2ljYWwgc2Vuc2UsIGluIHRlcm1zIG9mIHJlc291cmNlIHByZXBhcmF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoYXQgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBhbmQgaG93IHRoZSBgcndpbmAgaXMgaGFuZGxlZCBoZXJlIHdpbGwgdGVsbCB1cyBhIGxvdCBhYm91dCB0aGUgb3ZlcmFsbCBjb25uZWN0aW9uIHN0cmF0ZWd5LiBXZSBuZWVkIHRvIGZvbGxvdyB0aGUgZXhlY3V0aW9uIHBhdGggY2xvc2VseSBmcm9tIHRoaXMgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9jb25uX3JlcXVlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9MjQ2Nz1pbnQgdGNwX3J0eF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuaW5jbHVkZS9uZXQvdGNwLmg6MjQ2ODppbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcbmluY2x1ZGUvbmV0L3RjcC5oLTI0NjktXHRcdCAgICAgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzICphZl9vcHMsXG4tLVxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM9MzI2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMzgwLVx0dHAtXHUwMDNlcmN2X213bmRfc2VxID0gdHAtXHUwMDNlcmN2X3d1cCAmIzQzOyB0cC1cdTAwM2VyY3Zfd25kO1xubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM6MzgxOlx0LyogdGNwX2Nvbm5fcmVxdWVzdCgpIGlzIHNlbmRpbmcgdGhlIFNZTkFDSyxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTM4Mi1cdCAqIGFuZCBxdWV1ZXMgdGhlIGNoaWxkIGludG8gbGlzdGVuZXIgYWNjZXB0IHF1ZXVlLlxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc1OTQ9dTE2IHRjcF9nZXRfc3luY29va2llX21zcyhzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjE5LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzYyMDppbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2MjEtXHRcdCAgICAgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzICphZl9vcHMsXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0xNjU1PWludCB0Y3BfdjRfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE2NjAtXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE2NjE6XHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX29wcyxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTY2Mi1cdFx0XHRcdFx1MDAyNnRjcF9yZXF1ZXN0X3NvY2tfaXB2NF9vcHMsIHNrLCBza2IpO1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTMxNj1zdGF0aWMgaW50IHRjcF92Nl9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTMyOC1cbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTMyOTpcdHJldHVybiB0Y3BfY29ubl9yZXF1ZXN0KFx1MDAyNnRjcDZfcmVxdWVzdF9zb2NrX29wcyxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTMzMC1cdFx0XHRcdFx1MDAyNnRjcF9yZXF1ZXN0X3NvY2tfaXB2Nl9vcHMsIHNrLCBza2IpO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NjY5PXN0YXRpYyBpbnQgc3ViZmxvd192NF9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNjc4LVxubmV0L21wdGNwL3N1YmZsb3cuYzo2Nzk6XHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcdTAwMjZtcHRjcF9zdWJmbG93X3Y0X3JlcXVlc3Rfc29ja19vcHMsXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY4MC1cdFx0XHRcdFx1MDAyNnN1YmZsb3dfcmVxdWVzdF9zb2NrX2lwdjRfb3BzLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NzAwPXN0YXRpYyBpbnQgc3ViZmxvd192Nl9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNzE2LVxubmV0L21wdGNwL3N1YmZsb3cuYzo3MTc6XHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcdTAwMjZtcHRjcF9zdWJmbG93X3Y2X3JlcXVlc3Rfc29ja19vcHMsXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTcxOC1cdFx0XHRcdFx1MDAyNnN1YmZsb3dfcmVxdWVzdF9zb2NrX2lwdjZfb3BzLCBzaywgc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwNDQKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVENQIENvbm5lY3Rpb24gRXN0YWJsaXNobWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgVENQIGNvbm5lY3Rpb24gcHJvY2Vzcy4gYHRjcF9jb25uX3JlcXVlc3RgIGltbWVkaWF0ZWx5IGp1bXBzIG91dC4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIHRoZSBpbmNvbWluZyBTWU4gcGFja2V0cyBhcmUgcHJvY2Vzc2VkLCBhbmQgaXQgaGFuZGxlcyB0aGUgaW5pdGlhbCByZXF1ZXN0IHNvY2tldCBzZXR1cCwgaW5jbHVkaW5nIGNhbGN1bGF0aW5nIHRoZSBNYXhpbXVtIFNlZ21lbnQgU2l6ZS4gVGhhdCBzb3VuZHMgbGlrZSBhIHByZXR0eSBjcml0aWNhbCBmdW5jdGlvbi4KClRoZXJlZm9yZSwgdGhlIGZ1bmN0aW9ucyBJIHJlYWxseSB3YW50IHRvIGZvY3VzIG9uIGFyZTogYHRjcF9jb25uZWN0YCwgd2hpY2ggaW5pdGlhdGVzIHRoZSBjb25uZWN0aW9uLCB0aGVuLCBvZiBjb3Vyc2UsICBgdGNwX2Nvbm5fcmVxdWVzdGAgaXRzZWxmLCB3aGljaCBzZWVtcyBrZXkgdG8gdGhlIHNlcnZlci1zaWRlLCB0aGVuIGB0Y3BfbWFrZV9zeW5hY2tgIGFzIGl0IHNlZW1zIHRvIGJlIGltcG9ydGFudCwgYW5kIGxhc3RseSBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgIC0gdGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiBoYW5kbGluZyB0aGUgU1lOL0FDSywgaXNuJiMzOTt0IGl0PwoKUmlnaHQsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBzdXJlIGB0Y3BfY29ubl9yZXF1ZXN0YCBpcyBleHBvcnRlZC4gTmVlZCB0byBjb25maXJtIHRoYXQgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnRjcF9jb25uX3JlcXVlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDM3MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgaXNuJiMzOTt0IGEgc2ltcGxlIHN0YXRpYyB2YXJpYWJsZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoOyBpdCYjMzk7cyBtb3JlIGR5bmFtaWMgdGhhbiB0aGF0LCB3aGljaCBpcyBnb29kIHRvIGtlZXAgaW4gbWluZC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGlzIHdvcmtzLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBgdGNwX3Y0X2Nvbm5fcmVxdWVzdGAgYW5kIGB0Y3BfdjZfY29ubl9yZXF1ZXN0YCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaW5ncy4gUmlnaHQsIGB0Y3BfdjRfY29ubl9yZXF1ZXN0YCBpc24mIzM5O3Qgc3RhdGljLCBidXQgYHRjcF92Nl9jb25uX3JlcXVlc3RgIGlzLiBTbywgd2UgaGF2ZSBhIGxpc3Qgb2YgcG90ZW50aWFsbHkgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIGV4YW1pbmUgZnVydGhlcjogYHRjcF9jb25uZWN0YCwgYHRjcF9jb25uX3JlcXVlc3RgLCBgdGNwX21ha2Vfc3luYWNrYCwgYW5kIGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AuCgpOb3csIEkgbmVlZCB0byBzZWUgaWYgdGhpcyBjaGFuZ2UgaGFzIGFueSB3aWRlciByaXBwbGUgZWZmZWN0cy4gQXJlIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIG9yIGBpcDZfZHN0X210dV9jb25maWd1cmVkYCB1c2VkICphbnl3aGVyZSogZWxzZT8gTm8sIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBpc29sYXRlZCB0byBtb2RpZnlpbmcgYGlwdjRfZGVmYXVsdF9hZHZtc3NgIGFuZCBgaXA2X2RlZmF1bHRfYWR2bXNzYCwgd2hpY2ggaXMgaGVscGZ1bC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGNvbmZpZyBvcHRpb25zLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYG5ldC9pcHY0L3JvdXRlLmNgIGFuZCBgbmV0L2lwdjYvcm91dGUuY2AuIFNvLCBpZiBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgIGFyZSBlbmFibGVkLCB0aGVzZSBmaWxlcyBhcmUgY29tcGlsZWQuIFdlIGFscmVhZHkga25vdyB0aGF0IGBDT05GSUdfSU5FVGAgaXMgYWx3YXlzIGVuYWJsZWQgaW4gTGludXggbmV0d29ya2luZywgYW5kIGBDT05GSUdfSVBWNmAgc2VlbXMgbGlrZSBhIHByZXR0eSBzYWZlIGJldCB0byBpbmNsdWRlLiBMZXQgbWUgY2hlY2sgYW5kIG1ha2Ugc3VyZSB0aGF0IGBJUFY2YCBpcyBhY3R1YWxseSBuZWVkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWctNS1cbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcbm5ldC9pcHY2L0tjb25maWctNy1cdGJvb2wgXCYjMzQ7VGhlIElQdjYgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE5PWlmIElQVjZcbm5ldC9pcHY2L0tjb25maWctMjAtXG5uZXQvaXB2Ni9LY29uZmlnOjIxOmNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXG5uZXQvaXB2Ni9LY29uZmlnLTIyLVx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTM4LVxubmV0L2lwdjYvS2NvbmZpZzozOTpjb25maWcgSVBWNl9PUFRJTUlTVElDX0RBRFxubmV0L2lwdjYvS2NvbmZpZy00MC1cdGJvb2wgXCYjMzQ7SVB2NjogRW5hYmxlIFJGQyA0NDI5IE9wdGltaXN0aWMgREFEXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xMDI9Y29uZmlnIElORVQ2X0lQQ09NUFxuLS1cbm5ldC9pcHY2L0tjb25maWctMTExLVxubmV0L2lwdjYvS2NvbmZpZzoxMTI6Y29uZmlnIElQVjZfTUlQNlxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBNb2JpbGl0eVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTE5LVxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXG5uZXQvaXB2Ni9LY29uZmlnLTEyMS1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xNDY9Y29uZmlnIElORVQ2X1RVTk5FTFxuLS1cbm5ldC9pcHY2L0tjb25maWctMTQ5LVxubmV0L2lwdjYvS2NvbmZpZzoxNTA6Y29uZmlnIElQVjZfVlRJXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgKHNlY3VyZSkgSVB2NjogdHVubmVsaW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNjEtXG5uZXQvaXB2Ni9LY29uZmlnOjE2Mjpjb25maWcgSVBWNl9TSVRcbm5ldC9pcHY2L0tjb25maWctMTYzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSVB2Ni1pbi1JUHY0IHR1bm5lbCAoU0lUIGRyaXZlcilcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE3Ni1cbm5ldC9pcHY2L0tjb25maWc6MTc3OmNvbmZpZyBJUFY2X1NJVF82UkRcbm5ldC9pcHY2L0tjb25maWctMTc4LVx0Ym9vbCBcJiMzNDtJUHY2OiBJUHY2IFJhcGlkIERlcGxveW1lbnQgKDZSRClcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE5NS1cbm5ldC9pcHY2L0tjb25maWc6MTk2OmNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXG5uZXQvaXB2Ni9LY29uZmlnLTE5Ny1cdGJvb2xcbm5ldC9pcHY2L0tjb25maWctMTk4LVxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjA5LVxubmV0L2lwdjYvS2NvbmZpZzoyMTA6Y29uZmlnIElQVjZfR1JFXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEdSRSB0dW5uZWxcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIyNy1cbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxubmV0L2lwdjYvS2NvbmZpZy0yMjktXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY2L0tjb25maWctMjMxLVxubmV0L2lwdjYvS2NvbmZpZzoyMzI6Y29uZmlnIElQVjZfRk9VX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY2L0tjb25maWctMjM2LVxubmV0L2lwdjYvS2NvbmZpZzoyMzc6Y29uZmlnIElQVjZfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTIzOC1cdGJvb2wgXCYjMzQ7SVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI0Mi1cbm5ldC9pcHY2L0tjb25maWc6MjQzOmNvbmZpZyBJUFY2X1NVQlRSRUVTXG5uZXQvaXB2Ni9LY29uZmlnLTI0NC1cdGJvb2wgXCYjMzQ7SVB2Njogc291cmNlIGFkZHJlc3MgYmFzZWQgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjU2LVxubmV0L2lwdjYvS2NvbmZpZzoyNTc6Y29uZmlnIElQVjZfTVJPVVRFXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI2NC1cbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L0tjb25maWctMjY2LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI3OC1cbm5ldC9pcHY2L0tjb25maWc6Mjc5OmNvbmZpZyBJUFY2X1BJTVNNX1YyXG5uZXQvaXB2Ni9LY29uZmlnLTI4MC1cdGJvb2wgXCYjMzQ7SVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yODUtXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvS2NvbmZpZy0zMDEtXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cdGRlZl9ib29sIHlcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMxNi1cbm5ldC9pcHY2L0tjb25maWc6MzE3OmNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0zMTgtXHRib29sIFwmIzM0O0lQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzI3LVxubmV0L2lwdjYvS2NvbmZpZzozMjg6Y29uZmlnIElQVjZfSU9BTTZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzI5LVx0Ym9vbCBcJiMzNDtJUHY2OiBJT0FNIFByZS1hbGxvY2F0ZWQgVHJhY2UgaW5zZXJ0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1NTcKCQkJCQkJCW91dHB1dDogMTY3CgkJCQkJCQl0aG91Z2h0czogNDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUQ1AgTVNTIFBhdGNoKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93bi4gVGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IHdlIGNhbGN1bGF0ZSBhbmQgYWR2ZXJ0aXNlIHRoZSBUQ1AgTWF4aW11bSBTZWdtZW50IFNpemUgKE1TUykgaW4gYm90aCBJUHY0IGFuZCBJUHY2LiBJdCYjMzk7cyBlc3NlbnRpYWxseSBpbnRyb2R1Y2luZyBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgIHRvIGJ5cGFzcyBJQ01QLWRlcml2ZWQgUGF0aCBNVFUgKFBNVFUpIGFuZCBpbnN0ZWFkIHVzZSB0aGUgY29uZmlndXJlZCByb3V0ZSBvciBkZXZpY2UgTVRVLiBUaGlzIGNoYW5nZSBkaXJlY3RseSBpbXBhY3RzIHRoZSBNU1MgdmFsdWVzIHNlbnQgZHVyaW5nIHRoZSBjb25uZWN0aW9uIHNldHVwIHByb2Nlc3Mg4oCTIHRoZSBTWU4gYW5kIFNZTi1BQ0sgcGFja2V0cy4gR2l2ZW4gaXRzIGNvcmUgbmV0d29ya2luZyBuYXR1cmUgYW5kIHRoZSBwb3RlbnRpYWwgZnVuY3Rpb25hbCBzaGlmdCBpbiBNU1MgZGV0ZXJtaW5hdGlvbiwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIHRoZXNlIGZ1bmN0aW9ucywgZ2l2ZW4gdGhlIHBhdGNoJiMzOTtzIHNjb3BlOgoKKiAgIGB0Y3BfY29ubmVjdGAKKiAgIGB0Y3BfY29ubl9yZXF1ZXN0YAoqICAgYHRjcF9tYWtlX3N5bmFja2AKKiAgIGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AKCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBgSVBWNmAgY29uZmlnIGlzIHRoZSByZWxldmFudCBvbmUgaGVyZS4gSSBhbHNvIGRvdWJsZS1jaGVja2VkIGFuZCB2ZXJpZmllZCB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvaXB2NC9yb3V0ZS5jYCBhbmQgYG5ldC9pcHY2L3JvdXRlLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWdzIG5lZWRlZCBmb3IgdGhpcyBhbmFseXNpcy4KCkkmIzM5O3ZlIGFsc28gdmFsaWRhdGVkIHRoYXQgYHRjcF9jb25uX3JlcXVlc3RgIGlzIGluZGVlZCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIEl0JiMzOTtzIHVzZWQgZm9yIGJvdGggSVB2NCBhbmQgSVB2NiB2aWEgdGhlIGB0Y3BfdjRfY29ubl9yZXF1ZXN0YCBhbmQgYHRjcF92Nl9jb25uX3JlcXVlc3RgIGZ1bmN0aW9ucywgYW5kIGNydWNpYWxseSwgaXQgY2FsbHMgYHRjcF9vcGVucmVxX2luaXRfcndpbmAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYGRzdF9tZXRyaWNfYWR2bXNzYC4gVGhpcyBpcyBhIGRpcmVjdCBlbnRyeSBwb2ludCBmb3IgbWFuaXB1bGF0aW5nIHRoZSBNU1MgY2FsY3VsYXRpb24sIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZS4KCkFzIGZvciB0aGUgcmVtYWluaW5nIGZ1bmN0aW9ucywgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBpcyB1c2VkIGZvciBJUHY0LCBhbmQgYWxzbyBmb3IgSVB2NC1tYXBwZWQgSVB2NiBhZGRyZXNzZXMsIHNvIHRoYXQgc2VlbXMgb2suIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AgaXMgdGhlcmUgZm9yIElQdjYsIGJ1dCBpcyBzdGF0aWMsIHdoaWNoIGlzIHdvcnRoIGNvbnNpZGVyaW5nLiBUaGUgb3RoZXIgZnVuY3Rpb25zIGB0Y3BfbWFrZV9zeW5hY2tgIGFuZCBgdGNwX2Nvbm5lY3RgIGFsc28gaGF2ZSB2ZXJzaW9ucyB0aGF0IGFyZSBjYWxsZWQgZm9yIGJvdGggSVB2NCBhbmQgSVB2NiByZXNwZWN0aXZlbHkuCgpHaXZlbiB0aGlzIGFuYWx5c2lzLCBteSBmdW5jdGlvbiBsaXN0IGlzIHNvbGlkLiBJJiMzOTttIHJlYWR5IHRvIHByb2NlZWQuIE5vdywgSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfY29ubmVjdCYjMzQ7LAogICAgJiMzNDt0Y3BfY29ubl9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O3RjcF9tYWtlX3N5bmFjayYjMzQ7LAogICAgJiMzNDt0Y3BfdjRfc3luX3JlY3Zfc29jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGFkdmVydGlzZWQgVENQIE1TUyBpbiBJUHY0IGFuZCBJUHY2LiBJdCBpbnRyb2R1Y2VzIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAgdG8gaWdub3JlIElDTVAtbGVhcm5lZCBwYXRoIE1UVSBhbmQgaW5zdGVhZCB1c2UgdGhlIGNvbmZpZ3VyZWQgcm91dGUgb3IgZGV2aWNlIE1UVS4gVGhpcyBhZmZlY3RzIHRoZSBUQ1AgTVNTIGFkdmVydGlzZWQgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAgKFNZTi9TWU4tQUNLKS4gVGhlIGNoYW5nZXMgYXJlIGluIGNvcmUgbmV0d29ya2luZyBhbmQgZnVuY3Rpb25hbGx5IGFsdGVyIGhvdyBNU1MgaXMgZGV0ZXJtaW5lZCwgd2hpY2ggaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9jb25uZWN0JiMzNDssCiAgICAmIzM0O3RjcF9jb25uX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7dGNwX21ha2Vfc3luYWNrJiMzNDssCiAgICAmIzM0O3RjcF92NF9zeW5fcmVjdl9zb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBUQ1AgTVNTIGluIElQdjQgYW5kIElQdjYuIEl0IGludHJvZHVjZXMgYGlwX2RzdF9tdHVfY29uZmlndXJlZGAgYW5kIGBpcDZfZHN0X210dV9jb25maWd1cmVkYCB0byBpZ25vcmUgSUNNUC1sZWFybmVkIHBhdGggTVRVIGFuZCBpbnN0ZWFkIHVzZSB0aGUgY29uZmlndXJlZCByb3V0ZSBvciBkZXZpY2UgTVRVLiBUaGlzIGFmZmVjdHMgdGhlIFRDUCBNU1MgYWR2ZXJ0aXNlZCBkdXJpbmcgY29ubmVjdGlvbiBzZXR1cCAoU1lOL1NZTi1BQ0spLiBUaGUgY2hhbmdlcyBhcmUgaW4gY29yZSBuZXR3b3JraW5nIGFuZCBmdW5jdGlvbmFsbHkgYWx0ZXIgaG93IE1TUyBpcyBkZXRlcm1pbmVkLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwNzozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBUQ1AgTVNTIGJ5IGludHJvZHVjaW5nIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoKWAgYW5kIGBpcDZfZHN0X210dV9jb25maWd1cmVkKClgLiBUaGVzZSBmdW5jdGlvbnMgcmVhZCBleGlzdGluZywgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gcm91dGluZyBhbmQgZGV2aWNlIHN0cnVjdHVyZXMgKGBkc3RfZW50cnlgLCBgcnQ2X2luZm9gLCBgZmliNl9pbmZvYCwgYG5ldF9kZXZpY2VgLCBgaW5ldDZfZGV2YCkgdG8gZGV0ZXJtaW5lIHRoZSBjb25maWd1cmVkIE1UVSwgaWdub3JpbmcgSUNNUC1sZWFybmVkIHBhdGggTVRVLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBuZXcgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM4ZDY3NGI5OGM4NTljN2YzYTYyYzFjYzRmN2JlOTgzMGRjODUzMTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAwNzozMzoxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oCmluZGV4IDdmMmZlMWE4NDAxYjEuLmE4ZjU3YjRmNGFhMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXAuaApAQCAtNTA2LDYgJiM0Mzs1MDYsMzEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKIAlyZXR1cm4gcmVzOwogfQogCiYjNDM7LyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLgomIzQzOyAqCiYjNDM7ICogVW5saWtlIGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGRlbGliZXJhdGVseSBpZ25vcmVzIHRoZQomIzQzOyAqIElDTVAtbGVhcm5lZCBwYXRoIE1UVSAocnQtJmd0O3J0X3BtdHUpLiAgVGhlIGFkdmVydGlzZWQgTVNTIGJvdW5kcyB3aGF0IHRoZQomIzQzOyAqIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZSBjYXBhYmlsaXR5ICh0aGUgZGV2aWNlIG9yCiYjNDM7ICogcm91dGUtY29uZmlndXJlZCBNVFUpLCBub3QgYSBwYXRoIE1UVSBsZWFybmVkIG9uIHRoZSByZXZlcnNlIChzZW5kKQomIzQzOyAqIGRpcmVjdGlvbiwgd2hpY2ggbWF5IG5vdCBhcHBseSB0byB0aGUgcGVlci0mZ3Q7dXMgcGF0aCBhbmQgb3V0bGl2ZXMgdGhlIGZuaGUKJiM0MzsgKiBmb3IgdGhlIHdob2xlIGNvbm5lY3Rpb24uICBTZWUgUkZDIDI5MjMgc2VjdGlvbiAyLjMgYW5kIHRoZSBjb21tZW50IGFib3ZlCiYjNDM7ICogdGNwX2FkdmVydGlzZV9tc3MoKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IG10dSwgcmVzOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW10dSA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9NVFUpOwomIzQzOwlpZiAoIW10dSkKJiM0MzsJCW10dSA9IFJFQURfT05DRShkc3RfZGV2X3JjdShkc3QpLSZndDttdHUpOwomIzQzOwltdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVBfTUFYX01UVSk7CiYjNDM7CXJlcyA9IG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC0mZ3Q7bHd0c3RhdGUsIG10dSk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX3NrYl9kc3RfbXR1KHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAppbmRleCAwOWZmZTBmMTNjZTc1Li5hYzFhY2MwYjc0MzY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaApAQCAtMzg1LDYgJiM0MzszODUsNDMgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QKIAlyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LSZndDtsd3RzdGF0ZSwgbXR1KTsKIH0KIAomIzQzOy8qIENvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIGEgcm91dGUsIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUy4KJiM0MzsgKgomIzQzOyAqIFVubGlrZSBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgaWdub3JlcyBhbnkgSUNNUHY2LWxlYXJuZWQgcGF0aAomIzQzOyAqIE1UVSAod2hpY2ggaXMga2VwdCBvbiB0aGUgUlRGX0NBQ0hFIGV4Y2VwdGlvbiByb3V0ZSkgYW5kIHJldHVybnMgdGhlIE1UVSBvZgomIzQzOyAqIHRoZSB1bmRlcmx5aW5nIHJvdXRlIChmaWI2X3BtdHUpIG9yIHRoZSBlZ3Jlc3MgZGV2aWNlLiAgVGhlIGFkdmVydGlzZWQgTVNTCiYjNDM7ICogYm91bmRzIHdoYXQgdGhlIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZQomIzQzOyAqIGNhcGFiaWxpdHksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpIGRpcmVjdGlvbi4gIFNlZQomIzQzOyAqIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZSB0Y3BfYWR2ZXJ0aXNlX21zcygpLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCA9IGRzdF9ydDZfaW5mbyhkc3QpOwomIzQzOwljb25zdCBzdHJ1Y3QgZmliNl9pbmZvICpmcm9tOwomIzQzOwlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2OwomIzQzOwl1bnNpZ25lZCBpbnQgbXR1ID0gMDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkvKiBJUHY2IGtlZXBzIHRoZSBsZWFybmVkIFBNVFUgYW5kIHRoZSBjb25maWd1cmVkIE1UVSBpbiB0aGUgc2FtZQomIzQzOwkgKiBSVEFYX01UVSBzbG90OiB0aGUgbGVhcm5lZCB2YWx1ZSBzaXRzIG9uIHRoaXMgKHBvc3NpYmx5IFJURl9DQUNIRSkKJiM0MzsJICogZHN0LCB0aGUgY29uZmlndXJlZCBvbmUgb24gdGhlIHVuZGVybHlpbmcgcm91dGUuICBSZWFjaCB0aGUgbGF0dGVyCiYjNDM7CSAqIHZpYSAtJmd0O2Zyb20gKGZpYjZfcG10dSksIHBvcHVsYXRlZCBieSBpcDZfcm91dGVfaW5mb19jcmVhdGUoKS4KJiM0MzsJICovCiYjNDM7CWZyb20gPSByY3VfZGVyZWZlcmVuY2UocnQtJmd0O2Zyb20pOwomIzQzOwlpZiAoZnJvbSkKJiM0MzsJCW10dSA9IGZyb20tJmd0O2ZpYjZfcG10dTsKJiM0MzsJaWYgKCFtdHUpIHsKJiM0MzsJCW10dSA9IElQVjZfTUlOX01UVTsKJiM0MzsJCWlkZXYgPSBfX2luNl9kZXZfZ2V0KGRzdF9kZXZfcmN1KGRzdCkpOwomIzQzOwkJaWYgKGlkZXYpCiYjNDM7CQkJbXR1ID0gbWF4X3QodW5zaWduZWQgaW50LCBtdHUsIFJFQURfT05DRShpZGV2LSZndDtjbmYubXR1NikpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwltdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpOwomIzQzOwlyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LSZndDtsd3RzdGF0ZSwgbXR1KTsKJiM0Mzt9CiYjNDM7CiB1MzIgaXA2X210dV9mcm9tX2ZpYjYoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggZmQ2ODhlMWY4NzlmNS4uNDZhYTk4YzkyMTgzMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0xMzM0LDggJiM0MzsxMzM0LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBpcHY0X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKIAogCXJjdV9yZWFkX2xvY2soKTsKIAluZXQgPSBkc3RfZGV2X25ldF9yY3UoZHN0KTsKLQlhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwdjRfbXR1KGRzdCkgLSBoZWFkZXJfc2l6ZSwKLQkJCQkgICBuZXQtJmd0O2lwdjQuaXBfcnRfbWluX2Fkdm1zcyk7CiYjNDM7CWFkdm1zcyA9IG1heF90KHVuc2lnbmVkIGludCwgaXBfZHN0X210dV9jb25maWd1cmVkKGRzdCkgLSBoZWFkZXJfc2l6ZSwKJiM0MzsJCSAgICAgICBuZXQtJmd0O2lwdjQuaXBfcnRfbWluX2Fkdm1zcyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gbWluKGFkdm1zcywgSVBWNF9NQVhfUE1UVSAtIGhlYWRlcl9zaXplKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IDU5NjhjZTVhZDE1MDguLmUyMDU2YmQwZGYzYzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtMzI2MSw3ICYjNDM7MzI2MSw3IEBAIHZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaykKIAogc3RhdGljIHVuc2lnbmVkIGludCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQogewotCXVuc2lnbmVkIGludCBtdHUgPSBkc3Q2X210dShkc3QpOwomIzQzOwl1bnNpZ25lZCBpbnQgbXR1ID0gaXA2X2RzdF9tdHVfY29uZmlndXJlZChkc3QpOwogCXN0cnVjdCBuZXQgKm5ldDsKIAogCW10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICYjNDM7IHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDA3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NjgKCQkJCQkJCW91dHB1dDogMTkwCgkJCQkJCQl0aG91Z2h0czogNjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgc3dpdGNoaW5nIHRoaW5ncyB1cCB3aXRoIGhvdyB3ZSBjYWxjdWxhdGUgdGhlIGFkdmVydGlzZWQgVENQIE1TUywgc3BlY2lmaWNhbGx5IGJ5IHVzaW5nIHRoZXNlIG5ldyBgaXBfZHN0X210dV9jb25maWd1cmVkKClgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZCgpYCBmdW5jdGlvbnMgaW4gYGlwdjRfZGVmYXVsdF9hZHZtc3MoKWAgYW5kIGBpcDZfZGVmYXVsdF9hZHZtc3MoKWAuIFRoZSB3aG9sZSBwb2ludCBpcyB0byBpZ25vcmUgcGF0aCBNVFUgbGVhcm5lZCB2aWEgSUNNUCwgd2hpY2ggbWFrZXMgc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgdHVuaW5nIFRDUCBiZWhhdmlvci4KCkxldCYjMzk7cyBicmVhayBkb3duIHRoZSBkYXRhIGZsb3cuIEZvciBJUHY0LCB0aGUgcGF0Y2ggbm93IGdyYWJzIHRoZSBNVFUgZnJvbSBgZHN0X21ldHJpY19yYXcoZHN0LCBSVEFYX01UVSlgIGFuZCBgZHN0X2Rldl9yY3UoZHN0KS0mZ3Q7bXR1YC4gRm9yIElQdjYsIGl0JiMzOTtzIHB1bGxpbmcgZnJvbSBgcnQtJmd0O2Zyb20tJmd0O2ZpYjZfcG10dWAgYW5kIGBpZGV2LSZndDtjbmYubXR1NmAuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZXNlIHZhbHVlcyBhcmUgYmVpbmcgdXNlZCB0byBjb21wdXRlIGBhZHZtc3NgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBkb2VzIHRoaXMgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXM/IEFmdGVyIGxvb2tpbmcgaW50byBpdCwgSSBjYW4gc2VlIHRoYXQgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludm9sdmUgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMuIEl0JiMzOTtzIGp1c3QgbW9kaWZ5aW5nIGhvdyB3ZSAqcmVhZCogdGhlIE1UVSBpbmZvcm1hdGlvbiBmcm9tIGV4aXN0aW5nLCBhbHJlYWR5IGluaXRpYWxpemVkIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBTcGVjaWZpY2FsbHkgd2UmIzM5O3JlIHJlYWRpbmcgYGRzdF9lbnRyeWAsIGBydDZfaW5mb2AsIGBmaWI2X2luZm9gLCBgaW5ldDZfZGV2YCBmaWVsZHMgdG8gZ2V0IHRoZSB2YWx1ZXMgZnJvbS4gSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IHRoZXJlJiMzOTtzIG5vIHdheSB0aGlzIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYSB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLgoKVGhlIHZhcmlhYmxlcyBiZWluZyByZWFkIGFyZSBzdGFuZGFyZCBmaWVsZHMgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgc3RydWN0czsgYGRzdC0mZ3Q7bWV0cmljc2AsIGBuZXRfZGV2aWNlLSZndDttdHVgLCBgZmliNl9pbmZvYCwgYW5kIGBpbmV0Nl9kZXZgIGFuZCBhcmUgYWxsIHByaW1pdGl2ZSB0eXBlcy4gU3RhbmRhcmQgY2hlY2tzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAgd2lsbCBiZSBlbm91Z2ggdG8gY2F0Y2ggYW55IGJ1Z3MgaW4gdGhlIGxvZ2ljIGNoYW5nZSBpZiB0aGV5IHdlcmUgaW50cm9kdWNlZC4gS01TQU4gaXMgZ3JlYXQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgYnV0IGl0JiMzOTtzIG5vdCBhcHBsaWNhYmxlIGhlcmUuCgpUbyBiZSBleHRyYSBjZXJ0YWluLCBJIGp1c3Qgd2VudCB0aHJvdWdoIHRoZSBmaWVsZHMuIGBkc3RfbWV0cmljX3Jhd2AgYWNjZXNzZXMgYGRzdC0mZ3Q7bWV0cmljc2AuIGBkc3RfZGV2X3JjdShkc3QpLSZndDttdHVgIHJlYWRzIGZyb20gYG5ldF9kZXZpY2UtJmd0O210dWAuIGBydC0mZ3Q7ZnJvbWAgZGVyZWZlcmVuY2VzIGEgYGZpYjZfaW5mb2AgcG9pbnRlci4gYGZyb20tJmd0O2ZpYjZfcG10dWAgaXMgYSBgdTMyYC4gYGlkZXYtJmd0O2NuZi5tdHU2YCBpcyBhbiBgczMyYC4gQWxsIG9mIHRoZXNlIGFyZSBpbml0aWFsaXplZCBmaWVsZHMsIHNvIG5vLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuCgpJbiBzaG9ydCwgbXkgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBjaGFuZ2VzIE1UVSBjYWxjdWxhdGlvbiwgcmVhZGluZyBleGlzdGluZyBhbmQgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gYGRzdF9lbnRyeWAsIGBydDZfaW5mb2AsIGBmaWI2X2luZm9gLCBgbmV0X2RldmljZWAgYW5kIGBpbmV0Nl9kZXZgIGZvciBJUHY0IGFuZCBJUHY2IHRvIGRldGVybWluZSB0aGUgY29uZmlndXJlZCBNVFUuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3Igb3RoZXJ3aXNlIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd2lsbCBoYW5kbGUgYW55IHByb2JsZW1zIHRoYXQgbWlnaHQgYXJpc2UgZnJvbSB0aGUgcGF0Y2guIE5vIEtNU0FOIGlzIG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIFRDUCBNU1MgYnkgaW50cm9kdWNpbmcgYGlwX2RzdF9tdHVfY29uZmlndXJlZCgpYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoKWAuIFRoZXNlIGZ1bmN0aW9ucyByZWFkIGV4aXN0aW5nLCBpbml0aWFsaXplZCBmaWVsZHMgZnJvbSByb3V0aW5nIGFuZCBkZXZpY2Ugc3RydWN0dXJlcyAoYGRzdF9lbnRyeWAsIGBydDZfaW5mb2AsIGBmaWI2X2luZm9gLCBgbmV0X2RldmljZWAsIGBpbmV0Nl9kZXZgKSB0byBkZXRlcm1pbmUgdGhlIGNvbmZpZ3VyZWQgTVRVLCBpZ25vcmluZyBJQ01QLWxlYXJuZWQgcGF0aCBNVFUuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIG5ldyBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBUQ1AgTVNTIGJ5IGludHJvZHVjaW5nIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoKWAgYW5kIGBpcDZfZHN0X210dV9jb25maWd1cmVkKClgLiBUaGVzZSBmdW5jdGlvbnMgcmVhZCBleGlzdGluZywgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gcm91dGluZyBhbmQgZGV2aWNlIHN0cnVjdHVyZXMgKGBkc3RfZW50cnlgLCBgcnQ2X2luZm9gLCBgZmliNl9pbmZvYCwgYG5ldF9kZXZpY2VgLCBgaW5ldDZfZGV2YCkgdG8gZGV0ZXJtaW5lIHRoZSBjb25maWd1cmVkIE1UVSwgaWdub3JpbmcgSUNNUC1sZWFybmVkIHBhdGggTVRVLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBuZXcgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjMzOjE0Ljk1MTkyOTAyM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTE3ODQwNjA0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2Nvbm5lY3RcIixcbiAgICBcInRjcF9jb25uX3JlcXVlc3RcIixcbiAgICBcInRjcF9tYWtlX3N5bmFja1wiLFxuICAgIFwidGNwX3Y0X3N5bl9yZWN2X3NvY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBUQ1AgTVNTIGJ5IGludHJvZHVjaW5nIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoKWAgYW5kIGBpcDZfZHN0X210dV9jb25maWd1cmVkKClgLiBUaGVzZSBmdW5jdGlvbnMgcmVhZCBleGlzdGluZywgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gcm91dGluZyBhbmQgZGV2aWNlIHN0cnVjdHVyZXMgKGBkc3RfZW50cnlgLCBgcnQ2X2luZm9gLCBgZmliNl9pbmZvYCwgYG5ldF9kZXZpY2VgLCBgaW5ldDZfZGV2YCkgdG8gZGV0ZXJtaW5lIHRoZSBjb25maWd1cmVkIE1UVSwgaWdub3JpbmcgSUNNUC1sZWFybmVkIHBhdGggTVRVLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBuZXcgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIFRDUCBNU1MgaW4gSVB2NCBhbmQgSVB2Ni4gSXQgaW50cm9kdWNlcyBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgIHRvIGlnbm9yZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgYW5kIGluc3RlYWQgdXNlIHRoZSBjb25maWd1cmVkIHJvdXRlIG9yIGRldmljZSBNVFUuIFRoaXMgYWZmZWN0cyB0aGUgVENQIE1TUyBhZHZlcnRpc2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwIChTWU4vU1lOLUFDSykuIFRoZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIGZ1bmN0aW9uYWxseSBhbHRlciBob3cgTVNTIGlzIGRldGVybWluZWQsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjMzOjE0Ljk1MTkzNTg5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0OTU5MTI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM4ZDY3NGI5OGM4NTljN2YzYTYyYzFjYzRmN2JlOTgzMGRjODUzMThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMDc6MzM6MTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmhcXG5pbmRleCA3ZjJmZTFhODQwMWIxLi5hOGY1N2I0ZjRhYTIzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2lwLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcC5oXFxuQEAgLTUwNiw2ICs1MDYsMzEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4gXFx0cmV0dXJuIHJlcztcXG4gfVxcbiBcXG4rLyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxcbisgKlxcbisgKiBVbmxpa2UgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgZGVsaWJlcmF0ZWx5IGlnbm9yZXMgdGhlXFxuKyAqIElDTVAtbGVhcm5lZCBwYXRoIE1UVSAocnQtXFx1MDAzZXJ0X3BtdHUpLiAgVGhlIGFkdmVydGlzZWQgTVNTIGJvdW5kcyB3aGF0IHRoZVxcbisgKiBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmUgY2FwYWJpbGl0eSAodGhlIGRldmljZSBvclxcbisgKiByb3V0ZS1jb25maWd1cmVkIE1UVSksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpXFxuKyAqIGRpcmVjdGlvbiwgd2hpY2ggbWF5IG5vdCBhcHBseSB0byB0aGUgcGVlci1cXHUwMDNldXMgcGF0aCBhbmQgb3V0bGl2ZXMgdGhlIGZuaGVcXG4rICogZm9yIHRoZSB3aG9sZSBjb25uZWN0aW9uLiAgU2VlIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZVxcbisgKiB0Y3BfYWR2ZXJ0aXNlX21zcygpLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgbXR1LCByZXM7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdG10dSA9IGRzdF9tZXRyaWNfcmF3KGRzdCwgUlRBWF9NVFUpO1xcbitcXHRpZiAoIW10dSlcXG4rXFx0XFx0bXR1ID0gUkVBRF9PTkNFKGRzdF9kZXZfcmN1KGRzdCktXFx1MDAzZW10dSk7XFxuK1xcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUF9NQVhfTVRVKTtcXG4rXFx0cmVzID0gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuaW5kZXggMDlmZmUwZjEzY2U3NS4uYWMxYWNjMGI3NDM2OCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuQEAgLTM4NSw2ICszODUsNDMgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RcXG4gXFx0cmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cXHUwMDNlbHd0c3RhdGUsIG10dSk7XFxuIH1cXG4gXFxuKy8qIENvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIGEgcm91dGUsIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUy5cXG4rICpcXG4rICogVW5saWtlIGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBpZ25vcmVzIGFueSBJQ01QdjYtbGVhcm5lZCBwYXRoXFxuKyAqIE1UVSAod2hpY2ggaXMga2VwdCBvbiB0aGUgUlRGX0NBQ0hFIGV4Y2VwdGlvbiByb3V0ZSkgYW5kIHJldHVybnMgdGhlIE1UVSBvZlxcbisgKiB0aGUgdW5kZXJseWluZyByb3V0ZSAoZmliNl9wbXR1KSBvciB0aGUgZWdyZXNzIGRldmljZS4gIFRoZSBhZHZlcnRpc2VkIE1TU1xcbisgKiBib3VuZHMgd2hhdCB0aGUgcGVlciBtYXkgc2VuZCB0byB1cyBhbmQgbXVzdCByZWZsZWN0IG91ciByZWNlaXZlXFxuKyAqIGNhcGFiaWxpdHksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpIGRpcmVjdGlvbi4gIFNlZVxcbisgKiBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmUgdGNwX2FkdmVydGlzZV9tc3MoKS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQgPSBkc3RfcnQ2X2luZm8oZHN0KTtcXG4rXFx0Y29uc3Qgc3RydWN0IGZpYjZfaW5mbyAqZnJvbTtcXG4rXFx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcXG4rXFx0dW5zaWduZWQgaW50IG10dSA9IDA7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdC8qIElQdjYga2VlcHMgdGhlIGxlYXJuZWQgUE1UVSBhbmQgdGhlIGNvbmZpZ3VyZWQgTVRVIGluIHRoZSBzYW1lXFxuK1xcdCAqIFJUQVhfTVRVIHNsb3Q6IHRoZSBsZWFybmVkIHZhbHVlIHNpdHMgb24gdGhpcyAocG9zc2libHkgUlRGX0NBQ0hFKVxcbitcXHQgKiBkc3QsIHRoZSBjb25maWd1cmVkIG9uZSBvbiB0aGUgdW5kZXJseWluZyByb3V0ZS4gIFJlYWNoIHRoZSBsYXR0ZXJcXG4rXFx0ICogdmlhIC1cXHUwMDNlZnJvbSAoZmliNl9wbXR1KSwgcG9wdWxhdGVkIGJ5IGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZSgpLlxcbitcXHQgKi9cXG4rXFx0ZnJvbSA9IHJjdV9kZXJlZmVyZW5jZShydC1cXHUwMDNlZnJvbSk7XFxuK1xcdGlmIChmcm9tKVxcbitcXHRcXHRtdHUgPSBmcm9tLVxcdTAwM2VmaWI2X3BtdHU7XFxuK1xcdGlmICghbXR1KSB7XFxuK1xcdFxcdG10dSA9IElQVjZfTUlOX01UVTtcXG4rXFx0XFx0aWRldiA9IF9faW42X2Rldl9nZXQoZHN0X2Rldl9yY3UoZHN0KSk7XFxuK1xcdFxcdGlmIChpZGV2KVxcbitcXHRcXHRcXHRtdHUgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIG10dSwgUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5tdHU2KSk7XFxuK1xcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpO1xcbitcXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVxcdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcXG4rfVxcbitcXG4gdTMyIGlwNl9tdHVfZnJvbV9maWI2KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxcbiBcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxcbiBcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmNcXG5pbmRleCBmZDY4OGUxZjg3OWY1Li40NmFhOThjOTIxODMzIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3JvdXRlLmNcXG4rKysgYi9uZXQvaXB2NC9yb3V0ZS5jXFxuQEAgLTEzMzQsOCArMTMzNCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdG5ldCA9IGRzdF9kZXZfbmV0X3JjdShkc3QpO1xcbi1cXHRhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwdjRfbXR1KGRzdCkgLSBoZWFkZXJfc2l6ZSxcXG4tXFx0XFx0XFx0XFx0ICAgbmV0LVxcdTAwM2VpcHY0LmlwX3J0X21pbl9hZHZtc3MpO1xcbitcXHRhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwX2RzdF9tdHVfY29uZmlndXJlZChkc3QpIC0gaGVhZGVyX3NpemUsXFxuK1xcdFxcdCAgICAgICBuZXQtXFx1MDAzZWlwdjQuaXBfcnRfbWluX2Fkdm1zcyk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0cmV0dXJuIG1pbihhZHZtc3MsIElQVjRfTUFYX1BNVFUgLSBoZWFkZXJfc2l6ZSk7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXFxuaW5kZXggNTk2OGNlNWFkMTUwOC4uZTIwNTZiZDBkZjNjNCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXFxuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xcbkBAIC0zMjYxLDcgKzMyNjEsNyBAQCB2b2lkIGlwNl9za19yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spXFxuIFxcbiBzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IG10dSA9IGRzdDZfbXR1KGRzdCk7XFxuK1xcdHVuc2lnbmVkIGludCBtdHUgPSBpcDZfZHN0X210dV9jb25maWd1cmVkKGRzdCk7XFxuIFxcdHN0cnVjdCBuZXQgKm5ldDtcXG4gXFxuIFxcdG10dSAtPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozMzoxNi4yMDIzNjk0NDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNzY4MDAzNDA0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9jb25uZWN0XCIsXG4gICAgXCJ0Y3BfY29ubl9yZXF1ZXN0XCIsXG4gICAgXCJ0Y3BfbWFrZV9zeW5hY2tcIixcbiAgICBcInRjcF92NF9zeW5fcmVjdl9zb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIFRDUCBNU1MgaW4gSVB2NCBhbmQgSVB2Ni4gSXQgaW50cm9kdWNlcyBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgIHRvIGlnbm9yZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgYW5kIGluc3RlYWQgdXNlIHRoZSBjb25maWd1cmVkIHJvdXRlIG9yIGRldmljZSBNVFUuIFRoaXMgYWZmZWN0cyB0aGUgVENQIE1TUyBhZHZlcnRpc2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwIChTWU4vU1lOLUFDSykuIFRoZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIGZ1bmN0aW9uYWxseSBhbHRlciBob3cgTVNTIGlzIGRldGVybWluZWQsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM4ZDY3NGI5OGM4NTljN2YzYTYyYzFjYzRmN2JlOTgzMGRjODUzMThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwNzozMzoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oXG5pbmRleCA3ZjJmZTFhODQwMWIxLi5hOGY1N2I0ZjRhYTIzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXAuaFxuKysrIGIvaW5jbHVkZS9uZXQvaXAuaFxuQEAgLTUwNiw2ICs1MDYsMzEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9tYXliZV9mb3J3YXJkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbiBcdHJldHVybiByZXM7XG4gfVxuIFxuKy8qIENvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIGEgcm91dGUsIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUy5cbisgKlxuKyAqIFVubGlrZSBpcF9kc3RfbXR1X21heWJlX2ZvcndhcmQoKSwgdGhpcyBkZWxpYmVyYXRlbHkgaWdub3JlcyB0aGVcbisgKiBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgKHJ0LVx1MDAzZXJ0X3BtdHUpLiAgVGhlIGFkdmVydGlzZWQgTVNTIGJvdW5kcyB3aGF0IHRoZVxuKyAqIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZSBjYXBhYmlsaXR5ICh0aGUgZGV2aWNlIG9yXG4rICogcm91dGUtY29uZmlndXJlZCBNVFUpLCBub3QgYSBwYXRoIE1UVSBsZWFybmVkIG9uIHRoZSByZXZlcnNlIChzZW5kKVxuKyAqIGRpcmVjdGlvbiwgd2hpY2ggbWF5IG5vdCBhcHBseSB0byB0aGUgcGVlci1cdTAwM2V1cyBwYXRoIGFuZCBvdXRsaXZlcyB0aGUgZm5oZVxuKyAqIGZvciB0aGUgd2hvbGUgY29ubmVjdGlvbi4gIFNlZSBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmVcbisgKiB0Y3BfYWR2ZXJ0aXNlX21zcygpLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwX2RzdF9tdHVfY29uZmlndXJlZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4re1xuK1x0dW5zaWduZWQgaW50IG10dSwgcmVzO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bXR1ID0gZHN0X21ldHJpY19yYXcoZHN0LCBSVEFYX01UVSk7XG4rXHRpZiAoIW10dSlcbitcdFx0bXR1ID0gUkVBRF9PTkNFKGRzdF9kZXZfcmN1KGRzdCktXHUwMDNlbXR1KTtcbitcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUF9NQVhfTVRVKTtcbitcdHJlcyA9IG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfc2tiX2RzdF9tdHUoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbmluZGV4IDA5ZmZlMGYxM2NlNzUuLmFjMWFjYzBiNzQzNjggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbkBAIC0zODUsNiArMzg1LDQzIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0XG4gXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuIH1cbiBcbisvKiBDb25maWd1cmVkL2FkbWluaXN0cmF0aXZlIE1UVSBvZiBhIHJvdXRlLCBmb3IgYWR2ZXJ0aXNpbmcgdGhlIFRDUCBNU1MuXG4rICpcbisgKiBVbmxpa2UgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGlnbm9yZXMgYW55IElDTVB2Ni1sZWFybmVkIHBhdGhcbisgKiBNVFUgKHdoaWNoIGlzIGtlcHQgb24gdGhlIFJURl9DQUNIRSBleGNlcHRpb24gcm91dGUpIGFuZCByZXR1cm5zIHRoZSBNVFUgb2ZcbisgKiB0aGUgdW5kZXJseWluZyByb3V0ZSAoZmliNl9wbXR1KSBvciB0aGUgZWdyZXNzIGRldmljZS4gIFRoZSBhZHZlcnRpc2VkIE1TU1xuKyAqIGJvdW5kcyB3aGF0IHRoZSBwZWVyIG1heSBzZW5kIHRvIHVzIGFuZCBtdXN0IHJlZmxlY3Qgb3VyIHJlY2VpdmVcbisgKiBjYXBhYmlsaXR5LCBub3QgYSBwYXRoIE1UVSBsZWFybmVkIG9uIHRoZSByZXZlcnNlIChzZW5kKSBkaXJlY3Rpb24uICBTZWVcbisgKiBSRkMgMjkyMyBzZWN0aW9uIDIuMyBhbmQgdGhlIGNvbW1lbnQgYWJvdmUgdGNwX2FkdmVydGlzZV9tc3MoKS5cbisgKi9cbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcDZfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbit7XG4rXHRjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XG4rXHRjb25zdCBzdHJ1Y3QgZmliNl9pbmZvICpmcm9tO1xuK1x0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcbitcdHVuc2lnbmVkIGludCBtdHUgPSAwO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0LyogSVB2NiBrZWVwcyB0aGUgbGVhcm5lZCBQTVRVIGFuZCB0aGUgY29uZmlndXJlZCBNVFUgaW4gdGhlIHNhbWVcbitcdCAqIFJUQVhfTVRVIHNsb3Q6IHRoZSBsZWFybmVkIHZhbHVlIHNpdHMgb24gdGhpcyAocG9zc2libHkgUlRGX0NBQ0hFKVxuK1x0ICogZHN0LCB0aGUgY29uZmlndXJlZCBvbmUgb24gdGhlIHVuZGVybHlpbmcgcm91dGUuICBSZWFjaCB0aGUgbGF0dGVyXG4rXHQgKiB2aWEgLVx1MDAzZWZyb20gKGZpYjZfcG10dSksIHBvcHVsYXRlZCBieSBpcDZfcm91dGVfaW5mb19jcmVhdGUoKS5cbitcdCAqL1xuK1x0ZnJvbSA9IHJjdV9kZXJlZmVyZW5jZShydC1cdTAwM2Vmcm9tKTtcbitcdGlmIChmcm9tKVxuK1x0XHRtdHUgPSBmcm9tLVx1MDAzZWZpYjZfcG10dTtcbitcdGlmICghbXR1KSB7XG4rXHRcdG10dSA9IElQVjZfTUlOX01UVTtcbitcdFx0aWRldiA9IF9faW42X2Rldl9nZXQoZHN0X2Rldl9yY3UoZHN0KSk7XG4rXHRcdGlmIChpZGV2KVxuK1x0XHRcdG10dSA9IG1heF90KHVuc2lnbmVkIGludCwgbXR1LCBSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYubXR1NikpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRtdHUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG10dSwgSVA2X01BWF9NVFUpO1xuK1x0cmV0dXJuIG10dSAtIGx3dHVubmVsX2hlYWRyb29tKGRzdC1cdTAwM2Vsd3RzdGF0ZSwgbXR1KTtcbit9XG4rXG4gdTMyIGlwNl9tdHVfZnJvbV9maWI2KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxuIFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuIFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuY1xuaW5kZXggZmQ2ODhlMWY4NzlmNS4uNDZhYTk4YzkyMTgzMyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3JvdXRlLmNcbisrKyBiL25ldC9pcHY0L3JvdXRlLmNcbkBAIC0xMzM0LDggKzEzMzQsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0bmV0ID0gZHN0X2Rldl9uZXRfcmN1KGRzdCk7XG4tXHRhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwdjRfbXR1KGRzdCkgLSBoZWFkZXJfc2l6ZSxcbi1cdFx0XHRcdCAgIG5ldC1cdTAwM2VpcHY0LmlwX3J0X21pbl9hZHZtc3MpO1xuK1x0YWR2bXNzID0gbWF4X3QodW5zaWduZWQgaW50LCBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoZHN0KSAtIGhlYWRlcl9zaXplLFxuK1x0XHQgICAgICAgbmV0LVx1MDAzZWlwdjQuaXBfcnRfbWluX2Fkdm1zcyk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiBtaW4oYWR2bXNzLCBJUFY0X01BWF9QTVRVIC0gaGVhZGVyX3NpemUpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCA1OTY4Y2U1YWQxNTA4Li5lMjA1NmJkMGRmM2M0IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xuKysrIGIvbmV0L2lwdjYvcm91dGUuY1xuQEAgLTMyNjEsNyArMzI2MSw3IEBAIHZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcbiBcbiBzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4ge1xuLVx0dW5zaWduZWQgaW50IG10dSA9IGRzdDZfbXR1KGRzdCk7XG4rXHR1bnNpZ25lZCBpbnQgbXR1ID0gaXA2X2RzdF9tdHVfY29uZmlndXJlZChkc3QpO1xuIFx0c3RydWN0IG5ldCAqbmV0O1xuIFxuIFx0bXR1IC09IHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyBzaXplb2Yoc3RydWN0IHRjcGhkcik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozMzoxNi4yMDIzNzExMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODkzNTEzMjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGEgTmV0d29ya2luZyBTdGFjayBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgbWFraW5nIGEgY3J1Y2lhbCBjaGFuZ2UgdG8gaG93IHdlIGhhbmRsZSBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSBhZHZlcnRpc2VtZW50cyBpbiB0aGUgVENQIHN0YWNrLiBJdCBzZWVtcyB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLCBzcGVjaWZpY2FsbHkgSVB2NCBhbmQgSVB2NiByb3V0aW5nLCBpcyBiZWluZyB1cGRhdGVkLiBUaGUga2V5IGlzIGluIHRoZXNlIG1vZGlmaWNhdGlvbnMgdG8gYGlwdjRfZGVmYXVsdF9hZHZtc3NgIGFuZCBgaXA2X2RlZmF1bHRfYWR2bXNzYC4gVGhleSdyZSBub3cgdXNpbmcgdGhlc2UgbmV3bHkgZGVmaW5lZCBmdW5jdGlvbnMsIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAsIGluc3RlYWQgb2YgdGhlIG9sZCBkaXJlY3QgTVRVIGxvb2t1cHMgKGBpcHY0X210dWAgYW5kIGBkc3Q2X210dWApLiBUaGF0J3MgYSBkZWZpbml0ZSBpbXByb3ZlbWVudCBpbiB0aGUgbG9uZyBydW4uXG5cblRoaXMgaXMgaW1tZWRpYXRlbHkgZmxhZ2dlZCBhcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gQW55IGNoYW5nZSBsaWtlIHRoaXMsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBJUHY0IGFuZCBJUHY2IHJvdXRpbmcgY29yZSwgY2FuIG9wZW4gdXAgYSBsb3Qgb2YgaW50ZXJlc3RpbmcgYXR0YWNrIHZlY3RvcnMuIE5vdywgdGhlIG1haW4gZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYGlwdjRfZGVmYXVsdF9hZHZtc3NgIGFuZCBgaXA2X2RlZmF1bHRfYWR2bXNzYCAoYm90aCBzdGF0aWMsIGFzIEkgcmVjYWxsKS4gSSBuZWVkIHRvIGRldGVybWluZSBleGFjdGx5IHdoZXJlIHRob3NlIGFyZSBiZWluZyB1dGlsaXplZC4gSSBzdXNwZWN0IHRoZXkncmUgYmVpbmcgYXNzaWduZWQgdG8gYGRzdF9vcHMtXHUwMDNlZGVmYXVsdF9hZHZtc3NgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBsaWtlbHkgYXMgcGFydCBvZiB0aGUgZGVzdGluYXRpb24gb3B0aW9uIGZvciByb3V0aW5nLiBUaGUgbmV4dCBzdGVwIGlzIGEgY29kZSBzZWFyY2g7IEknbGwgbG9vayBmb3IgZGlyZWN0IHJlZmVyZW5jZXMgdG8gYGlwdjRfZGVmYXVsdF9hZHZtc3NgIGFuZCBgaXA2X2RlZmF1bHRfYWR2bXNzYCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaXMgdXNpbmcgdGhlc2UgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSB0aGUgTVNTLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDcxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzM6MjMuMDk1ODg4MTk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjUxMjc3ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2NF9kZWZhdWx0X2Fkdm1zc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9yb3V0ZS5jPTEyOT1zdHJ1Y3QgZHN0X2VudHJ5XFx0KmlwdjRfZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdTMyIGNvb2tpZSk7XFxubmV0L2lwdjQvcm91dGUuYzoxMzA6c3RhdGljIHVuc2lnbmVkIGludFxcdCBpcHY0X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7XFxubmV0L2lwdjQvcm91dGUuYy0xMzEtSU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTU0PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcHY0X2RzdF9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTE1Ni1cXHQuY2hlY2sgPVxcdFxcdGlwdjRfZHN0X2NoZWNrLFxcbm5ldC9pcHY0L3JvdXRlLmM6MTU3OlxcdC5kZWZhdWx0X2Fkdm1zcyA9XFx0aXB2NF9kZWZhdWx0X2Fkdm1zcyxcXG5uZXQvaXB2NC9yb3V0ZS5jLTE1OC1cXHQubXR1ID1cXHRcXHRcXHRpcHY0X210dSxcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MTMyMD1zdGF0aWMgdm9pZCBzZXRfY2xhc3NfdGFnKHN0cnVjdCBydGFibGUgKnJ0LCB1MzIgdGFnKVxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xMzI4LVxcbm5ldC9pcHY0L3JvdXRlLmM6MTMyOTpzdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbm5ldC9pcHY0L3JvdXRlLmMtMTMzMC17XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTI4ODE9c3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwdjRfZHN0X2JsYWNraG9sZV9vcHMgPSB7XFxubmV0L2lwdjQvcm91dGUuYy0yODgyLVxcdC5mYW1pbHlcXHRcXHRcXHQ9IEFGX0lORVQsXFxubmV0L2lwdjQvcm91dGUuYzoyODgzOlxcdC5kZWZhdWx0X2Fkdm1zc1xcdFxcdD0gaXB2NF9kZWZhdWx0X2Fkdm1zcyxcXG5uZXQvaXB2NC9yb3V0ZS5jLTI4ODQtXFx0Lm5laWdoX2xvb2t1cFxcdFxcdD0gaXB2NF9uZWlnaF9sb29rdXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjMzOjI0Ljk2MTAyMTA0N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MzQwNTAwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQgYW5kIGNvbnNpZGVyaW5nIHRoZSBwcm9tcHQncyBwcm92aWRlZCBcInRob3VnaHRcIjpcblxuKipEZWx2aW5nIGludG8gSVB2NiBNU1MgQWRqdXN0bWVudCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgd2UncmUgdGFsa2luZyBhYm91dCBgaXA2X2RlZmF1bHRfYWR2bXNzYC4gUmlnaHQuIFNvLCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIGEgY3J1Y2lhbCBwYXJhbWV0ZXIgcmVsYXRlZCB0byBJUHY2IE1heGltdW0gU2VnbWVudCBTaXplIChNU1MpIGFuZCBQYXRoIE1UVSBEaXNjb3ZlcnkgKFBNVFVEKSwgc3BlY2lmaWNhbGx5IGF0IHRoZSBzeXN0ZW0ncyBkZWZhdWx0IGxldmVsLiBNeSBtaW5kIHJhY2VzLiBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoaXMgdmFyaWFibGUgaW1wYWN0cyB0aGUgaW5pdGlhbCBUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHByb2Nlc3MuIEVzc2VudGlhbGx5LCBpdCBkZWZpbmVzIHRoZSAqYWR2ZXJ0aXNlZCogTVNTIHZhbHVlIHRoYXQgdGhlIGxvY2FsIHN5c3RlbSB3aWxsIHN1Z2dlc3QgdG8gYSByZW1vdGUgaG9zdCBkdXJpbmcgdGhlIFRDUCBoYW5kc2hha2UsIHdoaWNoIHRoZW4gYWxsb3dzIGVhY2ggZW5kIHRvIG5lZ290aWF0ZSBob3cgbGFyZ2Ugb2YgYSBwYWNrZXQgc2l6ZSB0aGV5IGNhbiBib3RoIHVzZS5cblxuSeKAmW0gYWxyZWFkeSBjb25zaWRlcmluZyB0aGUgc2NlbmFyaW9zIHdoZXJlIHRoaXMgc2V0dGluZyBpcyBpbXBvcnRhbnQuIEl0J3Mgb2Z0ZW4gdGhlIGZpcnN0IGh1cmRsZSB3aGVuIGRlYWxpbmcgd2l0aCBJUHY2IGZyYWdtZW50YXRpb24gYW5kIFBhdGggTVRVIGlzc3Vlcy4gSWYgdGhlIGRlZmF1bHQgaXMgc2V0IHRvbyBoaWdoLCB3ZSdsbCBzZWUgYSBsb3Qgb2YgZnJhZ21lbnRhdGlvbiwgd2hpY2ggd2lsbCBpbXBhY3QgcGVyZm9ybWFuY2UuIElmIGl0J3MgdG9vIGxvdywgd2UgbWlnaHQgYmUgdW5kZXJ1dGlsaXppbmcgbmV0d29yayBiYW5kd2lkdGguIEEgdGhvdWdodGZ1bCB2YWx1ZSBlbnN1cmVzIHNtb290aCBjb21tdW5pY2F0aW9uIHdpdGhvdXQgaW50cm9kdWNpbmcgdG9vIG11Y2ggb3ZlcmhlYWQuXG5cbkknbSBwcm9iYWJseSBnb2luZyB0byBiZSB1c2luZyB0aGlzIHBhcmFtZXRlciBvZnRlbiBkdXJpbmcgbmV0d29yayBvcHRpbWl6YXRpb25zLiBTbywgbGV04oCZcyBjb25zaWRlcjogd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvbiBkaWZmZXJlbnQgbmV0d29yayBjb25maWd1cmF0aW9ucywgY29uc2lkZXJpbmcgY29tbW9uIE1UVSBzaXplcyBsaWtlIDE1MDAgYnl0ZXMgZm9yIHN0YW5kYXJkIEV0aGVybmV0IHZlcnN1cyBsYXJnZXIgTVRVcyBpbiBlbnZpcm9ubWVudHMgbGlrZSBqdW1ibyBmcmFtZXMgb3IgVlBOIHR1bm5lbHM/IEl0J3MgYWxsIGFib3V0IGZpbmRpbmcgdGhlIHN3ZWV0IHNwb3QsIHN0cmlraW5nIHRoYXQgY3JpdGljYWwgYmFsYW5jZSBiZXR3ZWVuIGVmZmljaWVuY3kgYW5kIHJlbGlhYmlsaXR5LCB0byBhbGxvdyBzZWFtbGVzcyB0cmFuc2Zlci4gVGhlIHN5c3RlbSBjYW4gb2Z0ZW4gdXNlIElDTVAgbWVzc2FnZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBpc3N1ZXMsIGJ1dCBhIHdlbGwtdHVuZWQgdmFsdWUgaGVscHMgdG8gbWl0aWdhdGUgcG90ZW50aWFsIGlzc3VlcyBiZWZvcmUgdGhleSBhcmlzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjMzOjMyLjM5NTA3MzU5NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc2MjU3NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl9kZWZhdWx0X2Fkdm1zc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9yb3V0ZS5jPTg2PXN0cnVjdCBkc3RfZW50cnlcXHQqaXA2X2RzdF9jaGVjayhzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBjb29raWUpO1xcbm5ldC9pcHY2L3JvdXRlLmM6ODc6c3RhdGljIHVuc2lnbmVkIGludFxcdCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KTtcXG5uZXQvaXB2Ni9yb3V0ZS5jLTg4LUlORElSRUNUX0NBTExBQkxFX1NDT1BFXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTI0OT1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9vcHNfdGVtcGxhdGUgPSB7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTI1My1cXHQuY2hlY2tcXHRcXHRcXHQ9XFx0aXA2X2RzdF9jaGVjayxcXG5uZXQvaXB2Ni9yb3V0ZS5jOjI1NDpcXHQuZGVmYXVsdF9hZHZtc3NcXHRcXHQ9XFx0aXA2X2RlZmF1bHRfYWR2bXNzLFxcbm5ldC9pcHY2L3JvdXRlLmMtMjU1LVxcdC5tdHVcXHRcXHRcXHQ9XFx0aXA2X210dSxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9MjY4PXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X2JsYWNraG9sZV9vcHMgPSB7XFxubmV0L2lwdjYvcm91dGUuYy0yNjktXFx0LmZhbWlseVxcdFxcdFxcdD0gQUZfSU5FVDYsXFxubmV0L2lwdjYvcm91dGUuYzoyNzA6XFx0LmRlZmF1bHRfYWR2bXNzXFx0XFx0PSBpcDZfZGVmYXVsdF9hZHZtc3MsXFxubmV0L2lwdjYvcm91dGUuYy0yNzEtXFx0Lm5laWdoX2xvb2t1cFxcdFxcdD0gaXA2X2RzdF9uZWlnaF9sb29rdXAsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTMyNTY9dm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0zMjYxLVxcbm5ldC9pcHY2L3JvdXRlLmM6MzI2MjpzdGF0aWMgdW5zaWduZWQgaW50IGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxubmV0L2lwdjYvcm91dGUuYy0zMjYzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzM6MzQuMTcxMzQ0MDg4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM1MzY5MDQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIGBkZWZhdWx0X2Fkdm1zc2AqKlxuXG5Pa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXMsIHdoZXJlIGlzIHRoaXMgYGRlZmF1bHRfYWR2bXNzYCBmdW5jdGlvbiBiZWluZyBjYWxsZWQ/IEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBob3cgaXQgZml0cyBpbnRvIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBJIGtub3cgdGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBzZXR0aW5nLCBwcm9iYWJseSByZWxhdGVkIHRvIE1heGltdW0gU2VnbWVudCBTaXplIChNU1MpIGluIHRoZSBjb250ZXh0IG9mIGFkdmFuY2VkIE1TUyBjb25maWd1cmF0aW9uLCBvciBpdCBjb3VsZCBiZSBzb21lIGRlZmF1bHQgb3IgZmFsbGJhY2sgdmFsdWUuXG5cbk15IGluaXRpYWwgbGluZSBvZiBhdHRhY2sgaXMgZ29pbmcgdG8gYmUgYSBjb2RlIHNlYXJjaC4gSSdsbCBuZWVkIHRvIHBpbnBvaW50IGFsbCBpbnN0YW5jZXMgb2YgdGhlIGZ1bmN0aW9uIG5hbWUuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGEgZ2xvYmFsIHNlYXJjaCBvZiB0aGUgY29kZWJhc2UsIHVzaW5nIGEgdG9vbCBsaWtlIGdyZXAgb3IgcmlwZ3JlcC4gSSdsbCBsb29rIGZvciBkaXJlY3QgY2FsbHMgdG8gYGRlZmF1bHRfYWR2bXNzYCBpbiB0aGUgY29kZS4gSSdtIGFsc28gZ29pbmcgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzeW1ib2xpYyBsaW5rcywgYWxpYXNlcyBvciBhbnkgb3RoZXIgc2ltaWxhciBmb3JtcyB0aGF0IGFyZSByZWZlcnJpbmcgdG8gaXQgYXMgd2VsbC5cblxuQmFzZWQgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIEknbGwgc3RhcnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBwb3NzaWJsZSBjYWxsIHBhdGhzLiBLbm93aW5nIHdoZXJlIGl0J3MgYmVpbmcgdXNlZCBpcyBrZXkuIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBjb250ZXh0IG9mIGVhY2ggY2FsbCB0byBzZWUgaG93IHRoZSByZXR1cm5lZCB2YWx1ZSBpcyB1c2VkLiBJcyBpdCBwYXNzZWQgdG8gYSBzcGVjaWZpYyBmdW5jdGlvbiwgYXNzaWduZWQgdG8gYSB2YXJpYWJsZSwgdXNlZCBpbiBhbiBhcml0aG1ldGljIGNhbGN1bGF0aW9uPyBUaGlzIHdpbGwgbmFycm93IGRvd24gaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCdzIGJlaW5nIGludGVncmF0ZWQgd2l0aGluIHRoZSBwcm9ncmFtLlxuXG5JJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgbWlnaHQgZGljdGF0ZSB3aGVuIGBkZWZhdWx0X2Fkdm1zc2AgaXMgdXNlZC4gRG9lcyBpdCBzZXJ2ZSBhcyBhIGRlZmF1bHQgdmFsdWUgaWYgYW5vdGhlciBjb25maWd1cmF0aW9uIHNldHRpbmcgaXNuJ3QgZXhwbGljaXRseSBzZXQ/IE9yIG1heWJlIGl0J3MgdXNlZCBiYXNlZCBvbiBuZXR3b3JrIGNvbmRpdGlvbnMgb3IgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiBJIHdhbnQgdG8ga25vdyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBpdHMgcmVzdWx0IGlzIGFwcGxpZWQuXG5cbkZpbmFsbHksIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGF0IGBkZWZhdWx0X2Fkdm1zc2AgaGFzIHNvbWUgZm9ybSBvZiBjb25maWd1cmFibGUgaW50ZXJmYWNlLiBJJ20gY3VyaW91cyB3aGF0IGtpbmQgb2YgZW52aXJvbm1lbnQgb3Igc2V0dXAgc2V0dGluZ3MgaXQgbWlnaHQgcmVmZXJlbmNlLiBEb2VzIGl0IGdldCBvdmVycmlkZGVuIGJ5IHVzZXIgY29uZmlndXJhdGlvbnM/IElzIGl0IHRpZWQgaW50byBhIHBhcnRpY3VsYXIgbW9kdWxlPyBUaGlzIGlzIHRoZSBraW5kIG9mIHN0dWZmIHRoYXQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFVsdGltYXRlbHksIEknbSBsb29raW5nIGZvciBhIGNvbXBsZXRlIHBpY3R1cmUsIGEgcm9hZG1hcCBvZiB0aGlzIGZ1bmN0aW9uJ3MgcHVycG9zZSB3aXRoaW4gdGhpcyBwcm9qZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzMxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzM6NDAuNTI1MDM3MDk1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzczNTAxMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmYXVsdF9hZHZtc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvZHN0Lmg9MTg1PWRzdF9tZXRyaWNfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG4tLVxcbmluY2x1ZGUvbmV0L2RzdC5oLTE4OS1cXHRpZiAoIWFkdm1zcylcXG5pbmNsdWRlL25ldC9kc3QuaDoxOTA6XFx0XFx0YWR2bXNzID0gZHN0LVxcdTAwM2VvcHMtXFx1MDAzZWRlZmF1bHRfYWR2bXNzKGRzdCk7XFxuaW5jbHVkZS9uZXQvZHN0LmgtMTkxLVxcbi0tXFxuaW5jbHVkZS9uZXQvZHN0X29wcy5oPTE1PXN0cnVjdCBkc3Rfb3BzIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2RzdF9vcHMuaC0yMC1cXHRzdHJ1Y3QgZHN0X2VudHJ5ICpcXHQoKmNoZWNrKShzdHJ1Y3QgZHN0X2VudHJ5ICosIF9fdTMyIGNvb2tpZSk7XFxuaW5jbHVkZS9uZXQvZHN0X29wcy5oOjIxOlxcdHVuc2lnbmVkIGludFxcdFxcdCgqZGVmYXVsdF9hZHZtc3MpKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKik7XFxuaW5jbHVkZS9uZXQvZHN0X29wcy5oLTIyLVxcdHVuc2lnbmVkIGludFxcdFxcdCgqbXR1KShjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICopO1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0xMjk9c3RydWN0IGRzdF9lbnRyeVxcdCppcHY0X2RzdF9jaGVjayhzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBjb29raWUpO1xcbm5ldC9pcHY0L3JvdXRlLmM6MTMwOnN0YXRpYyB1bnNpZ25lZCBpbnRcXHQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpO1xcbm5ldC9pcHY0L3JvdXRlLmMtMTMxLUlORElSRUNUX0NBTExBQkxFX1NDT1BFXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTE1ND1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXB2NF9kc3Rfb3BzID0ge1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xNTYtXFx0LmNoZWNrID1cXHRcXHRpcHY0X2RzdF9jaGVjayxcXG5uZXQvaXB2NC9yb3V0ZS5jOjE1NzpcXHQuZGVmYXVsdF9hZHZtc3MgPVxcdGlwdjRfZGVmYXVsdF9hZHZtc3MsXFxubmV0L2lwdjQvcm91dGUuYy0xNTgtXFx0Lm10dSA9XFx0XFx0XFx0aXB2NF9tdHUsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTEzMjA9c3RhdGljIHZvaWQgc2V0X2NsYXNzX3RhZyhzdHJ1Y3QgcnRhYmxlICpydCwgdTMyIHRhZylcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmMtMTMyOC1cXG5uZXQvaXB2NC9yb3V0ZS5jOjEzMjk6c3RhdGljIHVuc2lnbmVkIGludCBpcHY0X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG5uZXQvaXB2NC9yb3V0ZS5jLTEzMzAte1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0yODgxPXN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcHY0X2RzdF9ibGFja2hvbGVfb3BzID0ge1xcbm5ldC9pcHY0L3JvdXRlLmMtMjg4Mi1cXHQuZmFtaWx5XFx0XFx0XFx0PSBBRl9JTkVULFxcbm5ldC9pcHY0L3JvdXRlLmM6Mjg4MzpcXHQuZGVmYXVsdF9hZHZtc3NcXHRcXHQ9IGlwdjRfZGVmYXVsdF9hZHZtc3MsXFxubmV0L2lwdjQvcm91dGUuYy0yODg0LVxcdC5uZWlnaF9sb29rdXBcXHRcXHQ9IGlwdjRfbmVpZ2hfbG9va3VwLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz04Nj1zdHJ1Y3QgZHN0X2VudHJ5XFx0KmlwNl9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgY29va2llKTtcXG5uZXQvaXB2Ni9yb3V0ZS5jOjg3OnN0YXRpYyB1bnNpZ25lZCBpbnRcXHQgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7XFxubmV0L2lwdjYvcm91dGUuYy04OC1JTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0yNDk9c3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwNl9kc3Rfb3BzX3RlbXBsYXRlID0ge1xcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0yNTMtXFx0LmNoZWNrXFx0XFx0XFx0PVxcdGlwNl9kc3RfY2hlY2ssXFxubmV0L2lwdjYvcm91dGUuYzoyNTQ6XFx0LmRlZmF1bHRfYWR2bXNzXFx0XFx0PVxcdGlwNl9kZWZhdWx0X2Fkdm1zcyxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTI1NS1cXHQubXR1XFx0XFx0XFx0PVxcdGlwNl9tdHUsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTI2OD1zdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9ibGFja2hvbGVfb3BzID0ge1xcbm5ldC9pcHY2L3JvdXRlLmMtMjY5LVxcdC5mYW1pbHlcXHRcXHRcXHQ9IEFGX0lORVQ2LFxcbm5ldC9pcHY2L3JvdXRlLmM6MjcwOlxcdC5kZWZhdWx0X2Fkdm1zc1xcdFxcdD0gaXA2X2RlZmF1bHRfYWR2bXNzLFxcbm5ldC9pcHY2L3JvdXRlLmMtMjcxLVxcdC5uZWlnaF9sb29rdXBcXHRcXHQ9IGlwNl9kc3RfbmVpZ2hfbG9va3VwLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz0zMjU2PXZvaWQgaXA2X3NrX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtMzI2MS1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjMyNjI6c3RhdGljIHVuc2lnbmVkIGludCBpcDZfZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbm5ldC9pcHY2L3JvdXRlLmMtMzI2My17XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTM5OTQ9c3RhdGljIGludCB4ZnJtX2J1bmRsZV9vayhzdHJ1Y3QgeGZybV9kc3QgKmZpcnN0KVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MDYxLVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM6NDA2MjpzdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fZGVmYXVsdF9hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDA2My17XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQxMTE9aW50IHhmcm1fcG9saWN5X3JlZ2lzdGVyX2FmaW5mbyhjb25zdCBzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8sIGludCBmYW1pbHkpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQxMjYtXFx0XFx0XFx0ZHN0X29wcy1cXHUwMDNlY2hlY2sgPSB4ZnJtX2RzdF9jaGVjaztcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQxMjc6XFx0XFx0aWYgKGxpa2VseShkc3Rfb3BzLVxcdTAwM2VkZWZhdWx0X2Fkdm1zcyA9PSBOVUxMKSlcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQxMjg6XFx0XFx0XFx0ZHN0X29wcy1cXHUwMDNlZGVmYXVsdF9hZHZtc3MgPSB4ZnJtX2RlZmF1bHRfYWR2bXNzO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDEyOS1cXHRcXHRpZiAobGlrZWx5KGRzdF9vcHMtXFx1MDAzZW10dSA9PSBOVUxMKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzM6NDIuMTYyMzkxNzc5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI2MTMyMDMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRlY29kaW5nIHRoZSBgZHN0X21ldHJpY19hZHZtc3NgIENhbGwqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGVuIEkgc2VlIGBkc3RfbWV0cmljX2Fkdm1zc2AsIG15IGJyYWluIGp1bXBzIHRvOiBcIk9rYXksIHNvIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tpbmcgYGRzdC1cdTAwM2VvcHMtXHUwMDNlZGVmYXVsdF9hZHZtc3MoZHN0KWAuICBDbGFzc2ljIGludGVyZmFjZSBwYXR0ZXJuLiBCdXQgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uICphbHdheXMqIGFyaXNlcyAtIGNvbnRleHQgaXMga2luZyBpbiB0aGVzZSBzY2VuYXJpb3MsIHJpZ2h0P1wiXG5cbk15IGludGVybmFsIG1vbm9sb2d1ZSB0aGVuIGFza3MsIFwiV2hlcmUgdGhlICpoZWxsKiBpcyBgZHN0X21ldHJpY19hZHZtc3NgIGl0c2VsZiBiZWluZyBjYWxsZWQ/IFdoYXQncyB0aGUgY2FsbCBzdGFjaz8gV2hhdCBwcm9jZXNzIGlzIGludm9raW5nIHRoaXMgZnVuY3Rpb24/XCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdGhlIHN1cnJvdW5kaW5nIGNvbmRpdGlvbnMsIGFuZCB0aGUgKndoeSogYmVoaW5kIHRoaXMgcGFydGljdWxhciBjYWxsLiBXaXRob3V0IHRoYXQgYnJvYWRlciBwZXJzcGVjdGl2ZSwgSSdtIGp1c3QgbG9va2luZyBhdCBhIHNpbmdsZSB0aHJlYWQgaW4gYSB2ZXJ5IGNvbXBsZXggd2VhdmUuIEtub3dpbmcgd2hlcmUgaXQncyB1c2VkIGdpdmVzIHRoZSBhbGwtaW1wb3J0YW50IGNvbnRleHQuIFRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBhcmUgaW1wb3J0YW50IGluIG15IGZpZWxkLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBtYWtlIGluZm9ybWVkIGRlY2lzaW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6NzE4MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjMzOjQ4LjQyMzcxNDUyOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MjY2NTUzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkc3RfbWV0cmljX2Fkdm1zc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYz0xMDk4PXVuc2lnbmVkIGludCBjeGdiaV9zb2NrX3NlbGVjdF9tc3Moc3RydWN0IGN4Z2JpX3NvY2sgKmNzaywgdW5zaWduZWQgaW50IHBtdHUpXFxuLS1cXG5kcml2ZXJzL3Njc2kvY3hnYmkvbGliY3hnYmkuYy0xMTAyLVxcbmRyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5jOjExMDM6XFx0Y3NrLVxcdTAwM2VhZHZtc3MgPSBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpO1xcbmRyaXZlcnMvc2NzaS9jeGdiaS9saWJjeGdiaS5jLTExMDQtXFxuLS1cXG5pbmNsdWRlL25ldC9kc3QuaD0xODQ9c3RhdGljIGlubGluZSB1MzJcXG5pbmNsdWRlL25ldC9kc3QuaDoxODU6ZHN0X21ldHJpY19hZHZtc3MoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbmluY2x1ZGUvbmV0L2RzdC5oLTE4Ni17XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTE2NzQ9c3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTczOC1cXHR0Y3Bfc3luY19tc3MobmV3c2ssIGRzdDRfbXR1KGRzdCkpO1xcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTczOTpcXHRuZXd0cC1cXHUwMDNlYWR2bXNzID0gdGNwX21zc19jbGFtcCh0Y3Bfc2soc2spLCBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpKTtcXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE3NDAtXFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9NDMxPXZvaWQgdGNwX29wZW5yZXFfaW5pdF9yd2luKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy00NDItXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjQ0MzpcXHRtc3MgPSB0Y3BfbXNzX2NsYW1wKHRwLCBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpKTtcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDQ0LVxcdHdpbmRvd19jbGFtcCA9IFJFQURfT05DRSh0cC1cXHUwMDNld2luZG93X2NsYW1wKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0xMzk9c3RhdGljIF9fdTE2IHRjcF9hZHZlcnRpc2VfbXNzKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0xNDUtXFx0aWYgKGRzdCkge1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzoxNDY6XFx0XFx0dW5zaWduZWQgaW50IG1ldHJpYyA9IGRzdF9tZXRyaWNfYWR2bXNzKGRzdCk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTE0Ny1cXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0zOTMxPXN0cnVjdCBza19idWZmICp0Y3BfbWFrZV9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzk3NC1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6Mzk3NTpcXHRtc3MgPSB0Y3BfbXNzX2NsYW1wKHRwLCBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzk3Ni1cXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz00MTAxPXN0YXRpYyB2b2lkIHRjcF9jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxMzAtXFx0XFx0V1JJVEVfT05DRSh0cC1cXHUwMDNld2luZG93X2NsYW1wLCBkc3RfbWV0cmljKGRzdCwgUlRBWF9XSU5ET1cpKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDEzMTpcXHR0cC1cXHUwMDNlYWR2bXNzID0gdGNwX21zc19jbGFtcCh0cCwgZHN0X21ldHJpY19hZHZtc3MoZHN0KSk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxMzItXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTEzODI9c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfdjZfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTE0ODktXFx0dGNwX3N5bmNfbXNzKG5ld3NrLCBkc3Q2X210dShkc3QpKTtcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjE0OTA6XFx0bmV3dHAtXFx1MDAzZWFkdm1zcyA9IHRjcF9tc3NfY2xhbXAodGNwX3NrKHNrKSwgZHN0X21ldHJpY19hZHZtc3MoZHN0KSk7XFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xNDkxLVxcbi0tXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYz00MDYyPXN0YXRpYyB1bnNpZ25lZCBpbnQgeGZybV9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MDYzLXtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQwNjQ6XFx0cmV0dXJuIGRzdF9tZXRyaWNfYWR2bXNzKHhmcm1fZHN0X3BhdGgoZHN0KSk7XFxubmV0L3hmcm0veGZybV9wb2xpY3kuYy00MDY1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzM6NDkuOTk2Mzg1NjMyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3Mjk1NDI3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgTXkgRnV6emluZyBFZmZvcnRzIGZvciBNYXhpbXVtIEltcGFjdCoqXG5cbk9rYXksIGxldCdzIHNlZSwgYGRzdF9tZXRyaWNfYWR2bXNzYCBpcyB0aGUgdGFyZ2V0IGhlcmUuIEkgY2FuIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXM6IGB0Y3BfYWR2ZXJ0aXNlX21zc2AsIGB0Y3BfY29ubmVjdF9pbml0YCwgYHRjcF9tYWtlX3N5bmFja2AsIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gLCBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgLCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhleSBhcmUgYWxsIGludm9sdmVkIGluIFRDUCBjb25uZWN0aW9uIHNldHVwIGFuZCBNU1MgYWR2ZXJ0aXNlbWVudC5cblxuU28sIEkgc2hvdWxkIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiB0aGUgZW50cnkgcG9pbnRzOiBgdGNwX2FkdmVydGlzZV9tc3NgLCBgdGNwX2Nvbm5lY3RfaW5pdGAsIGB0Y3BfbWFrZV9zeW5hY2tgLCBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgLCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gUmlnaHQsIHRoZXNlIGFyZSB0aGUgcGxhY2VzIHdoZXJlIGludGVyZXN0aW5nIGlucHV0IGlzIGxpa2VseSB0byBoaXQgYGRzdF9tZXRyaWNfYWR2bXNzYC5cblxuSG9sZCBvbi4uLiBgdGNwX2FkdmVydGlzZV9tc3NgIGFuZCBgdGNwX2Nvbm5lY3RfaW5pdGAgYXJlIGJvdGggc3RhdGljLCBzbyB0aGF0IGxpbWl0cyBteSBvcHRpb25zLiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhhdC4gQnV0IGB0Y3BfbWFrZV9zeW5hY2tgIGlzIGV4cG9ydGVkLiBPa2F5LCBsZXQncyB2ZXJpZnkgdGhhdCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTY2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjMzOjU2LjcyNTkzMTU0NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMzU0MzQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfbWFrZV9zeW5hY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9NTcxPWVudW0gdGNwX3N5bmFja190eXBlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTU3Ni19O1xcbmluY2x1ZGUvbmV0L3RjcC5oOjU3NzpzdHJ1Y3Qgc2tfYnVmZiAqdGNwX21ha2Vfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbmluY2x1ZGUvbmV0L3RjcC5oLTU3OC1cXHRcXHRcXHRcXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTExNjI9c3RhdGljIGludCB0Y3BfdjRfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTExNzgtXFxubmV0L2lwdjQvdGNwX2lwdjQuYzoxMTc5OlxcdHNrYiA9IHRjcF9tYWtlX3N5bmFjayhzaywgZHN0LCByZXEsIGZvYywgc3luYWNrX3R5cGUsIHN5bl9za2IpO1xcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTE4MC1cXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz0zODg3PWludCB0Y3Bfc2VuZF9zeW5hY2soc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTM5MjEtLyoqXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjM5MjI6ICogdGNwX21ha2Vfc3luYWNrIC0gQWxsb2NhdGUgb25lIHNrYiBhbmQgYnVpbGQgYSBTWU5BQ0sgcGFja2V0Llxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zOTIzLSAqIEBzazogbGlzdGVuZXIgc29ja2V0XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtMzkzMC0gKi9cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6MzkzMTpzdHJ1Y3Qgc2tfYnVmZiAqdGNwX21ha2Vfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy0zOTMyLVxcdFxcdFxcdFxcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9NTUwPXN0YXRpYyBpbnQgdGNwX3Y2X3NlbmRfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy01NjktXFxubmV0L2lwdjYvdGNwX2lwdjYuYzo1NzA6XFx0c2tiID0gdGNwX21ha2Vfc3luYWNrKHNrLCBkc3QsIHJlcSwgZm9jLCBzeW5hY2tfdHlwZSwgc3luX3NrYik7XFxubmV0L2lwdjYvdGNwX2lwdjYuYy01NzEtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2Nvbm5lY3QtZGVueS5jPTIyMT1zdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC1kZW55LmMtMjQ5LVxcdC8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9jb25uZWN0LWRlbnkuYzoyNTA6XFx0ICogWFhYOiBUaGUgdGVzdCBkb2Vzbid0IGluY3JlYXNlIGFueSBjb3VudGVycywgc2VlIHRjcF9tYWtlX3N5bmFjaygpLlxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC1kZW55LmMtMjUxLVxcdCAqIFBvdGVudGlhbGx5LCBpdCBjYW4gYmUgc3BlZWQgdXAgYnkgc2V0dGluZyBza19wYWlyID0gLUVUSU1FRE9VVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozMzo1OC4zNTk0ODA5NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjAzMTg0ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFRDUCBTWU4tQUNLIEhhbmRsaW5nKipcblxuSG1tLCBzbyBgdGNwX21ha2Vfc3luYWNrYCBpc24ndCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IG1lYW5zIHRoZXJlJ3Mgc29tZSBkeW5hbWljIHNlbGVjdGlvbiBwcm9jZXNzIGdvaW5nIG9uIHdoZW4gY3JhZnRpbmcgdGhvc2UgU1lOLUFDSyBwYWNrZXRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBBbmQgaW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gdGhlIG90aGVyIGtleSBwaWVjZXM6IGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AgYW5kIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AuIEl0J3MgY2xlYXIgdGhhdCB0aGUgYWRkcmVzcyBmYW1pbHkgcGxheXMgYSByb2xlIGhlcmUsIGJ1dCBpcyB0aGF0ICphbGwqIHRoYXQgZGljdGF0ZXMgdGhlIGNhbGwgcGF0aHM/XG5cbkkgc3VzcGVjdCB0aG9zZSBgKl9zeW5fcmVjdl9zb2NrYCBmdW5jdGlvbnMgaGFuZGxlIHRoZSBpbml0aWFsIHNvY2tldCBzZXR1cCBhbmQgdGhlIGluaXRpYWwgc3RhdGUgdHJhbnNpdGlvbi4gYHRjcF9tYWtlX3N5bmFja2AgbGlrZWx5IGZvY3VzZXMgb24gY3JhZnRpbmcgdGhlIHNwZWNpZmljIHBhY2tldCBjb250ZW50cywgcG9zc2libHkgZHJhd2luZyB1cG9uIHRoZSBwYXJhbWV0ZXJzIHNldCBieSB0aG9zZSBlYXJsaWVyIGZ1bmN0aW9ucyBvciBoYXZpbmcgaXRzIGJlaGF2aW9yIGluZmx1ZW5jZWQgYnkgdGhlIHNvY2tldOKAmXMgZmxhZ3Mgb3Igb3B0aW9ucy4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGNvbm5lY3Rpb24gcXVldWluZywgYW5kIHdoZXRoZXIgYW55IG9mIHRob3NlIHN0cnVjdHVyZXMgYXJlIGNvbnN1bHRlZCBkdXJpbmcgdGhlIFNZTi1BQ0sgZ2VuZXJhdGlvbi4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsaW5nIGNoYWluIGFuZCBleGFtaW5lIHRoZSBkYXRhIGZsb3cgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gVGhpcyBmZWVscyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZGl2aW5nIGludG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3NDMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNDowNC41NjI2Njg1MzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzY0NDU4NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3Y0X3N5bl9yZWN2X3NvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9NTYwPXZvaWQgdGNwX2NhX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjU2MTpzdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbmV0L3RjcC5oLTU2Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MTY1NT1pbnQgdGNwX3Y0X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE2NzMtICovXFxubmV0L2lwdjQvdGNwX2lwdjQuYzoxNjc0OnN0cnVjdCBzb2NrICp0Y3BfdjRfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNjc1LVxcdFxcdFxcdFxcdCAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0yMzU4PWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgaXB2NF9zcGVjaWZpYyA9IHtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMjM2Mi1cXHQuY29ubl9yZXF1ZXN0XFx0ICAgPSB0Y3BfdjRfY29ubl9yZXF1ZXN0LFxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MjM2MzpcXHQuc3luX3JlY3Zfc29ja1xcdCAgID0gdGNwX3Y0X3N5bl9yZWN2X3NvY2ssXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0yMzY0LVxcdC5uZXRfaGVhZGVyX2xlblxcdCAgID0gc2l6ZW9mKHN0cnVjdCBpcGhkciksXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jPTEzMzc9c3RhdGljIHZvaWQgdGNwX3Y2X3Jlc3RvcmVfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTM0Ni1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjEzNDc6LyogQ2FsbGVkIGZyb20gdGNwX3Y0X3N5bl9yZWN2X3NvY2soKSBmb3IgdjZfbWFwcGVkIGNoaWxkcmVuLiAqL1xcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTM0OC1zdGF0aWMgdm9pZCB0Y3BfdjZfbWFwcGVkX2NoaWxkX2luaXQoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTEzNzItXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoxMzczOlxcdC8qIHRjcF92NF9zeW5fcmVjdl9zb2NrKCkgaGFzIGluaXRpYWxpemVkIG5ld2luZXQtXFx1MDAzZW1jX3tpbmRleCx0dGx9ICovXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzc0LVxcdG5ld25wLVxcdTAwM2VtY2FzdF9vaWYgICA9IG5ld2luZXQtXFx1MDAzZW1jX2luZGV4O1xcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0xMzgyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX3Y2X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xNDA0LVxcdGlmIChza2ItXFx1MDAzZXByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSlcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jOjE0MDU6XFx0XFx0cmV0dXJuIHRjcF92NF9zeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgZHN0LFxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTQwNi1cXHRcXHRcXHRcXHRcXHQgICAgcmVxX3VuaGFzaCwgb3duX3JlcSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzQ6MDYuMTk5MTE5MzAzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2ODExNTA1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIFRDUHY2IFNvY2tldCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgVENQIGNvZGUsIHByb2JhYmx5IGtlcm5lbC1sZXZlbCBzdHVmZiwgYW5kIEkgc2VlIHRoZXNlIGZ1bmN0aW9uczogYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBhbmQgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCB0aG9zZSBzb3VuZCBsaWtlIHRoZXkgaGFuZGxlIFNZTiBwYWNrZXRzLCB0aGUgaW5pdGlhbCBjb25uZWN0aW9uIHJlcXVlc3QsIGZvciBUQ1B2NCBhbmQgVENQdjYgcmVzcGVjdGl2ZWx5LlwiIEknbSBhbHNvIG5vdGljaW5nIHRoYXQgdGhleSBhcmUgbGlrZWx5IGV4cG9ydGVkLCBvciBhdCBsZWFzdCB2aXNpYmxlIG91dHNpZGUgdGhlaXIgb3duIHNvdXJjZSBmaWxlLiBNYWtlcyBzZW5zZSwgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGtleSB0byBhY2NlcHRpbmcgbmV3IGNvbm5lY3Rpb25zLlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmSSB0aG91Z2h0IEkgc2F3IHNvbWV0aGluZyBhYm91dCBgdGNwX3Y2X3N5bl9yZWN2X3NvY2tgIGJlaW5nICpzdGF0aWMqLiBUaGF04oCZcyBvZGQuIElmIGl0J3Mgc3RhdGljLCBpdCB3b3VsZG4ndCBiZSBleHBvcnRlZCwgd2hpY2ggbWVhbnMgaXQgY2FuJ3QgYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBmaWxlIGl0J3MgZGVjbGFyZWQgaW4uIFRoaXMgcmVxdWlyZXMgY2xvc2VyIGluc3BlY3Rpb24uIExldCdzIGRpZyBkZWVwZXIuIFRoZSBsaWtlbHkgcGxhY2UgdG8gZmluZCBpdCBpcyBgbmV0L2lwdjYvdGNwX2lwdjYuY2AuIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgc291cmNlIEknbSBsb29raW5nIGF0IG1hdGNoZXMgbXkgZXhwZWN0YXRpb25zLiBHb3R0YSBjaGVjayB0aGF0IHNwZWNpZmljIHNvdXJjZSBmaWxlIGFuZCBjb25maXJtIHdoZXRoZXIgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYCBpcyBpbmRlZWQgc3RhdGljIG9yIG5vdC4gVGhpcyB3aWxsIHByb3ZpZGUgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlIHJlZ2FyZGluZyBJUHY2IFRDUCBjb25uZWN0aW9uIGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg2MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM0OjEyLjg4MDI3MzUyOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NTY5MjAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfdjZfc3luX3JlY3Zfc29ja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9zeW5jb29raWVzLmM9MTc0PXN0cnVjdCBzb2NrICpjb29raWVfdjZfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvc3luY29va2llcy5jLTIyOS1cXHQgKiBXZSBuZWVkIHRvIGxvb2t1cCB0aGUgZHN0X2VudHJ5IHRvIGdldCB0aGUgY29ycmVjdCB3aW5kb3cgc2l6ZS5cXG5uZXQvaXB2Ni9zeW5jb29raWVzLmM6MjMwOlxcdCAqIFRoaXMgaXMgdGFrZW4gZnJvbSB0Y3BfdjZfc3luX3JlY3Zfc29jay4gIFNvbWVib2R5IHBsZWFzZSBlbmxpZ2h0ZW5cXG5uZXQvaXB2Ni9zeW5jb29raWVzLmMtMjMxLVxcdCAqIG1lIGlmIHRoZXJlIGlzIGEgcHJlZmVycmVkIHdheS5cXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTM0OD1zdGF0aWMgdm9pZCB0Y3BfdjZfbWFwcGVkX2NoaWxkX2luaXQoc3RydWN0IHNvY2sgKm5ld3NrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTEzODEtXFxubmV0L2lwdjYvdGNwX2lwdjYuYzoxMzgyOnN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX3Y2X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTM4My1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0yMDA3PWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgaXB2Nl9zcGVjaWZpYyA9IHtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjAxMS1cXHQuY29ubl9yZXF1ZXN0XFx0ICAgPSB0Y3BfdjZfY29ubl9yZXF1ZXN0LFxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MjAxMjpcXHQuc3luX3JlY3Zfc29ja1xcdCAgID0gdGNwX3Y2X3N5bl9yZWN2X3NvY2ssXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMDEzLVxcdC5uZXRfaGVhZGVyX2xlblxcdCAgID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSxcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MjAzOD1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X21hcHBlZCA9IHtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMjA0Mi1cXHQuY29ubl9yZXF1ZXN0XFx0ICAgPSB0Y3BfdjZfY29ubl9yZXF1ZXN0LFxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MjA0MzpcXHQuc3luX3JlY3Zfc29ja1xcdCAgID0gdGNwX3Y2X3N5bl9yZWN2X3NvY2ssXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0yMDQ0LVxcdC5uZXRfaGVhZGVyX2xlblxcdCAgID0gc2l6ZW9mKHN0cnVjdCBpcGhkciksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM0OjE0LjU2NTk3NjA0MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTYyOTA2MzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUQ1AgQ29ubmVjdGlvbiBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIFRDUCBjb25uZWN0aW9uIHNldHVwIGFuZCBJJ20gc3RhcnRpbmcgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgY29kZS4gYHRjcF92Nl9zeW5fcmVjdl9zb2NrYCBpcyBjbGVhcmx5IHN0YXRpYywgd2hpY2ggbWVhbnMgaXQncyBwcm9iYWJseSBub3QgdGhlIGNvcmUgYXJlYSBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgZnVydGhlciByaWdodCBub3cuIEknbSBnb2luZyB0byBzaGlmdCBteSBmb2N1cyB0byBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgIGFuZCB0aGUgZnVuY3Rpb24gYHRjcF9tYWtlX3N5bmFja2Ag4oCTIHRob3NlIHNlZW0gbGlrZSBtb3JlIHByb21pc2luZyBjYW5kaWRhdGVzIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbml0aWFsIGhhbmRzaGFrZS5cblxuSnVzdCBhIHF1aWNrIGNoZWNrLi4ud2hhdCBhYm91dCBgdGNwX2Nvbm5lY3RfaW5pdGA/IE9oLCBpdCdzIGFsc28gc3RhdGljLiBBbHJpZ2h0LCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LiBObyBuZWVkIHRvIGNoYXNlIGRvd24gaXRzIGludGVybmFscyBqdXN0IHlldC4gTXkgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50IHdoZXJlIGB0Y3BfY29ubmVjdF9pbml0YCBpcyBhY3R1YWxseSAqY2FsbGVkKi4gS25vd2luZyBpdHMgY29udGV4dCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGNvbm5lY3Rpb24gaW5pdGlhdGlvbiBwcm9jZXNzIGFuZCBwb3RlbnRpYWxseSByZXZlYWwgc29tZSBoaWRkZW4gYXNzdW1wdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUgd2hhdCB0aGUgY2FsbCBncmFwaCB0ZWxscyBtZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NDEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNDoyMS4xMjg4ODU0MTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDA2NTE0NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2Nvbm5lY3RfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0PTE2PXN0cnVjdCB0aW1lcl9saXN0ICAgICAgICAgICAgICAgICAgIGljc2tfa2VlcGFsaXZlX3RpbWVyXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoxNzp1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3J0byAgICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY3duZF92YWxpZGF0ZSx0Y3Bfc2NoZWR1bGVfbG8uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTE4LXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcnRvX21pblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD0yMD11MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2RlbGFja19tYXhcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjIxOnUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcG10dV9jb29raWUgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9zeW5jX21zcyx0Y3BfY3VycmVudF9tc3MsdGNwXy4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MjI6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAgICAgICAgICAgaWNza19jYV9vcHMgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2N3bmRfdmFsaWRhdGUsdGNwX3Rzb19zZWdzLHRjLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyMzpzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzICBpY3NrX2FmX29wcyAgICAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfZmluaXNoX2Nvbm5lY3QsdGNwX3NlbmRfc3luX2QuLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTI0LXN0cnVjdCB0Y3BfdWxwX29wcyogICAgICAgICAgICAgICAgIGljc2tfdWxwX29wc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD0yOD11ODoxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2NhX3NldHNvY2tvcHRcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjI5OnU4OjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfY2FfZHN0X2xvY2tlZCAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9jYV9kc3RfaW5pdCx0Y3BfY29ubmVjdF9pbml0LC4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MzA6dTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19yZXRyYW5zbWl0cyAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2Nvbm5lY3RfaW5pdCx0Y3BfY29ubmVjdFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtMzEtdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19wZW5kaW5nICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9jc2tfcmVzZXRfeG1pdF90aW1lcix0Y3BfY29uLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDozMjp1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2JhY2tvZmYgICAgICAgICAgIHdyaXRlX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bfd3JpdGVfcXVldWVfcHVyZ2UsdGNwX2Nvbm5lY3QuLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTMzLXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfc3luX3JldHJpZXNcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q9NDE9c3RydWN0IGljc2tfYWNrX3UzMiAgICAgICAgICAgICAgICAgbHJjdnRpbWUgICAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2ZpbmlzaF9jb25uZWN0LHRjcF9jb25uZWN0LHRjLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0MjpzdHJ1Y3QgaWNza19hY2tfdTE2ICAgICAgICAgICAgICAgICByY3ZfbXNzICAgICAgICAgICAgICAgIHdyaXRlX21vc3RseSAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICBfX3RjcF9zZWxlY3Rfd2luZG93LF9fdGNwX2NsZWFudXAuLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQzOnN0cnVjdCBpY3NrX210dXBfaW50ICAgICAgICAgICAgICAgIHNlYXJjaF9oaWdoICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVwX2luaXQsdGNwX3N5bmNfbXNzLHRjcF9jby4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDQ6c3RydWN0IGljc2tfbXR1cF9pbnQgICAgICAgICAgICAgICAgc2VhcmNoX2xvdyAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dV9wcm9iZSx0Y3BfbXR1X2NoZWNrX3JlcHJvLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0NTpzdHJ1Y3QgaWNza19tdHVwX3UzMjozMSAgICAgICAgICAgICBwcm9iZV9zaXplICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfbXR1cF9pbml0LHRjcF9jb25uZWN0X2luaXQsX18uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQ2OnN0cnVjdCBpY3NrX210dXBfdTMyOjEgICAgICAgICAgICAgIGVuYWJsZWQgICAgICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVwX2luaXQsdGNwX3N5bmNfbXNzLHRjcF9jby4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDc6c3RydWN0IGljc2tfbXR1cF91MzIgICAgICAgICAgICAgICAgcHJvYmVfdGltZXN0YW1wICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dXBfaW5pdCx0Y3BfY29ubmVjdF9pbml0LHRjLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC00OC11MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3Byb2Jlc190c3RhbXBcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYz00MDgxPXN0YXRpYyB2b2lkIHRjcF9jYV9kc3RfaW5pdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MTAwLS8qIERvIGFsbCBjb25uZWN0IHNvY2tldCBzZXR1cHMgdGhhdCBjYW4gYmUgZG9uZSBBRiBpbmRlcGVuZGVudC4gKi9cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDEwMTpzdGF0aWMgdm9pZCB0Y3BfY29ubmVjdF9pbml0KHN0cnVjdCBzb2NrICpzaylcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDEwMi17XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDI5OD1pbnQgdGNwX2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzNTktXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQzNjA6XFx0dGNwX2Nvbm5lY3RfaW5pdChzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzNjEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM0OjIyLjc2OTU0MzE4MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDg0ODQ1MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUQ1AgQ29ubmVjdGlvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgdGNwX2Nvbm5lY3RgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIGl0IGEga2V5IGZ1bmN0aW9uIHRvIGludmVzdGlnYXRlLiBUaGlzIG1lYW5zIG15IGZvY3VzIGZvciBub3cgc2hvdWxkIGJlIG9uIGZ1bmN0aW9ucyBsaWtlIGB0Y3BfY29ubmVjdGAgaXRzZWxmLCBhbG9uZyB3aXRoIHJlbGF0ZWQgcHJvY2Vzc2VzIHN1Y2ggYXMgYHRjcF9tYWtlX3N5bmFja2AgYW5kIGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AuIEl0J3Mgd29ydGggY29uZmlybWluZyB0aGF0IGB0Y3BfY29ubmVjdGAgaXMgaW5kZWVkIGFjY2Vzc2libGUgZXh0ZXJuYWxseSwgYXMgdGhpcyB3b3VsZCBwcm92aWRlIGEgdml0YWwgZW50cnkgcG9pbnQgZm9yIG15IGFuYWx5c2lzLiBMZXQncyBzdGFydCBieSBkZWx2aW5nIGludG8gYHRjcF9jb25uZWN0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MTQsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNDoyOS44NTQzOTI1ODJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDk5MTE0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX2Nvbm5lY3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2NjQgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q9OT1UeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgICAgIGZhc3RwYXRoX3R4X2FjY2VzcyAgZmFzdHBhdGhfcnhfYWNjZXNzICBjb21tZW50XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0xMC09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjExOnN0cnVjdCBpbmV0X3NvY2sgICAgICAgICAgICAgICAgICAgIGljc2tfaW5ldCAgICAgICAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICByZWFkX21vc3RseSAgICAgICAgIHRjcF9pbml0X2J1ZmZlcl9zcGFjZSx0Y3BfaW5pdF90ci4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtMTItc3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAgICAgICAgICAgaWNza19hY2NlcHRfcXVldWVcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q9MTQ9c3RydWN0IGluZXRfYmluZDJfYnVja2V0ICAgICAgICAgICAgaWNza19iaW5kMl9oYXNoICAgICAgICByZWFkX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3NldF9zdGF0ZSxpbmV0X3B1dF9wb3J0XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoxNTpzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICAgICAgICAgICAgICBpY3NrX2RlbGFja190aW1lciAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmV0X2Nza19yZXNldF94bWl0X3RpbWVyLHRjcF9jb24uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTE2LXN0cnVjdCB0aW1lcl9saXN0ICAgICAgICAgICAgICAgICAgIGljc2tfa2VlcGFsaXZlX3RpbWVyXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoxNzp1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3J0byAgICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY3duZF92YWxpZGF0ZSx0Y3Bfc2NoZWR1bGVfbG8uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTE4LXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcnRvX21pblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD0yMD11MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2RlbGFja19tYXhcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjIxOnUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcG10dV9jb29raWUgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9zeW5jX21zcyx0Y3BfY3VycmVudF9tc3MsdGNwXy4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MjI6c3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAgICAgICAgICAgaWNza19jYV9vcHMgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2N3bmRfdmFsaWRhdGUsdGNwX3Rzb19zZWdzLHRjLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyMzpzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzICBpY3NrX2FmX29wcyAgICAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfZmluaXNoX2Nvbm5lY3QsdGNwX3NlbmRfc3luX2QuLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0LTI0LXN0cnVjdCB0Y3BfdWxwX29wcyogICAgICAgICAgICAgICAgIGljc2tfdWxwX29wc1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdD0yNj11ODo1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2NhX3N0YXRlICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY3duZF9hcHBsaWNhdGlvbl9saW1pdGVkLHRjcF8uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjI3OnU4OjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfY2FfaW5pdGlhbGl6ZWQgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9pbml0X3RyYW5zZmVyLHRjcF9pbml0X2Nvbmdlcy4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3QtMjgtdTg6MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19jYV9zZXRzb2Nrb3B0XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDoyOTp1ODoxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX2NhX2RzdF9sb2NrZWQgICAgIHdyaXRlX21vc3RseSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfY2FfZHN0X2luaXQsdGNwX2Nvbm5lY3RfaW5pdCwuLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjMwOnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcmV0cmFuc21pdHMgICAgICAgd3JpdGVfbW9zdGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9jb25uZWN0X2luaXQsdGNwX2Nvbm5lY3RcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjMxOnU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljc2tfcGVuZGluZyAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZXRfY3NrX3Jlc2V0X3htaXRfdGltZXIsdGNwX2Nvbi4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6MzI6dTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNza19iYWNrb2ZmICAgICAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX3dyaXRlX3F1ZXVlX3B1cmdlLHRjcF9jb25uZWN0Li4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC0zMy11OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3N5bl9yZXRyaWVzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0PTQwPXN0cnVjdCBpY3NrX2Fja191OCAgICAgICAgICAgICAgICAgIGF0byAgICAgICAgICAgICAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICB3cml0ZV9tb3N0bHkgICAgICAgIHRjcF9kZWNfcXVpY2thY2tfbW9kZSx0Y3BfZXZlbnRfYS4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDE6c3RydWN0IGljc2tfYWNrX3UzMiAgICAgICAgICAgICAgICAgbHJjdnRpbWUgICAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX2ZpbmlzaF9jb25uZWN0LHRjcF9jb25uZWN0LHRjLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0MjpzdHJ1Y3QgaWNza19hY2tfdTE2ICAgICAgICAgICAgICAgICByY3ZfbXNzICAgICAgICAgICAgICAgIHdyaXRlX21vc3RseSAgICAgICAgcmVhZF9tb3N0bHkgICAgICAgICBfX3RjcF9zZWxlY3Rfd2luZG93LF9fdGNwX2NsZWFudXAuLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQzOnN0cnVjdCBpY3NrX210dXBfaW50ICAgICAgICAgICAgICAgIHNlYXJjaF9oaWdoICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVwX2luaXQsdGNwX3N5bmNfbXNzLHRjcF9jby4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDQ6c3RydWN0IGljc2tfbXR1cF9pbnQgICAgICAgICAgICAgICAgc2VhcmNoX2xvdyAgICAgICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dV9wcm9iZSx0Y3BfbXR1X2NoZWNrX3JlcHJvLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdDo0NTpzdHJ1Y3QgaWNza19tdHVwX3UzMjozMSAgICAgICAgICAgICBwcm9iZV9zaXplICAgICAgICAgICAgIHJlYWRfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BfbXR1cF9pbml0LHRjcF9jb25uZWN0X2luaXQsX18uLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9jb25uZWN0aW9uX3NvY2sucnN0OjQ2OnN0cnVjdCBpY3NrX210dXBfdTMyOjEgICAgICAgICAgICAgIGVuYWJsZWQgICAgICAgICAgICAgICAgcmVhZF93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcF9tdHVwX2luaXQsdGNwX3N5bmNfbXNzLHRjcF9jby4uLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X2Nvbm5lY3Rpb25fc29jay5yc3Q6NDc6c3RydWN0IGljc2tfbXR1cF91MzIgICAgICAgICAgICAgICAgcHJvYmVfdGltZXN0YW1wICAgICAgICByZWFkX3dyaXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX210dXBfaW5pdCx0Y3BfY29ubmVjdF9pbml0LHRjLi4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfY29ubmVjdGlvbl9zb2NrLnJzdC00OC11MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3NrX3Byb2Jlc190c3RhbXBcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X3NvY2sucnN0PTk9VHlwZSAgICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgICBmYXN0cGF0aF90eF9hY2Nlc3MgIGZhc3RwYXRoX3J4X2FjY2VzcyAgY29tbWVudFxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRfY2FjaGVsaW5lcy9pbmV0X3NvY2sucnN0LTEwLT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Li4uXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldF9jYWNoZWxpbmVzL2luZXRfc29jay5yc3Q6MTE6c3RydWN0IHNvY2sgICAgICAgICAgICAgIHNrICAgICAgICAgICAgICAgICAgICByZWFkX21vc3RseSAgICAgICAgIHJlYWRfbW9zdGx5ICAgICAgICAgdGNwX2luaXRfYnVmZmVyX3NwYWNlLHRjcF9pbml0X3RyYW5zZmVyLHRjcF9maW5pc2hfY29ubmUuLi5cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0X2NhY2hlbGluZXMvaW5ldF9zb2NrLnJzdC0xMi1zdHJ1Y3QgaXB2Nl9waW5mbyogICAgICAgcGluZXQ2XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9oc2kuaD05MjYzPXN0cnVjdCBpd2FycF9tcGFfb2ZmbG9hZF9yYW1yb2RfZGF0YSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9oc2kuaC05MjY2LVxcdHU4IG1vZGU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaHNpLmg6OTI2NzpcXHR1OCB0Y3BfY29ubmVjdF9zaWRlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2hzaS5oLTkyNjgtXFx0dTggcnRyX3ByZWY7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5jPTgxOT1xZWRfaXdhcnBfbXBhX29mZmxvYWQoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sIHN0cnVjdCBxZWRfaXdhcnBfZXAgKmVwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYy04NzMtXFx0XFx0XFx0b2Zmc2V0b2Yoc3RydWN0IHFlZF9pd2FycF9lcF9tZW1vcnksIGluX3BkYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5jOjg3NDpcXHRwX21wYV9yYW1yb2QtXFx1MDAzZXRjcF9jb25uZWN0X3NpZGUgPSBlcC1cXHUwMDNlY29ubmVjdF9tb2RlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmMtODc1LVxcdERNQV9SRUdQQUlSX0xFKHBfbXBhX3JhbXJvZC1cXHUwMDNlaW5jb21pbmdfdWxwX2J1ZmZlci5hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYz0yOTU3PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYzoyOTU4OnFlZF9pd2FycF90Y3BfY29ubmVjdF91bnN1Y2Nlc3NmdWwoc3RydWN0IHFlZF9od2ZuICpwX2h3Zm4sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYy0yOTU5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBxZWRfaXdhcnBfZXAgKmVwLCB1OCBmd19yZXR1cm5fY29kZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmM9MzAxOT1xZWRfaXdhcnBfY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcWVkX2h3Zm4gKnBfaHdmbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmMtMzAzMy1cXHRcXHRlbHNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYzozMDM0OlxcdFxcdFxcdHFlZF9pd2FycF90Y3BfY29ubmVjdF91bnN1Y2Nlc3NmdWwocF9od2ZuLCBlcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5jLTMwMzUtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgZndfcmV0dXJuX2NvZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuYy0zMDM5LVxcdFxcdGVsc2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5jOjMwNDA6XFx0XFx0XFx0cWVkX2l3YXJwX3RjcF9jb25uZWN0X3Vuc3VjY2Vzc2Z1bChwX2h3Zm4sIGVwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmMtMzA0MS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBmd19yZXR1cm5fY29kZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9pd2FycC5oPTExMj1zdHJ1Y3QgcWVkX2l3YXJwX2VwIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmgtMTE5LVxcdHN0cnVjdCBxZWRfaXdhcnBfY21faW5mbyBjbV9pbmZvO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xZWQvcWVkX2l3YXJwLmg6MTIwOlxcdGVudW0gdGNwX2Nvbm5lY3RfbW9kZSBjb25uZWN0X21vZGU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfaXdhcnAuaC0xMjEtXFx0ZW51bSBtcGFfcnRyX3R5cGUgcnRyX3R5cGU7XFxuLS1cXG5kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oPTE1MzY9c3RydWN0IG5kaXNfb2ZmbG9hZF9wYXJhbXMge1xcbi0tXFxuZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaC0xNTQ2LVxcdHU4IGxzb192Ml9pcHY2O1xcbmRyaXZlcnMvbmV0L2h5cGVydi9oeXBlcnZfbmV0Lmg6MTU0NzpcXHR1OCB0Y3BfY29ubmVjdGlvbl9pcF92NDtcXG5kcml2ZXJzL25ldC9oeXBlcnYvaHlwZXJ2X25ldC5oOjE1NDg6XFx0dTggdGNwX2Nvbm5lY3Rpb25faXBfdjY7XFxuZHJpdmVycy9uZXQvaHlwZXJ2L2h5cGVydl9uZXQuaC0xNTQ5LVxcdHUzMiBmbGFncztcXG4tLVxcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmg9MTExMD1zdHJ1Y3QgYmVfZXFfZGVsYXlfcGFyYW1zX2luIHtcXG4tLVxcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgtMTExNS1cXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oOjExMTY6c3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luIHtcXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oLTExMTctXFx0c3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjtcXG4tLVxcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgtMTEyOS1cXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oOjExMzA6c3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luX3YxIHtcXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oLTExMzEtXFx0c3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjtcXG4tLVxcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgtMTE0OS1cXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfY21kcy5oOjExNTA6c3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX291dCB7XFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaC0xMTUxLVxcdHN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyO1xcbi0tXFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmM9MTA1MD1zdGF0aWMgaW50IGJlaXNjc2lfb3Blbl9jb25uKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAsXFxuLS1cXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYy0xMDU1LVxcdHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfZXAtXFx1MDAzZXBoYmE7XFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmM6MTA1NjpcXHRzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfb3V0ICpwdGNwY25jdF9vdXQ7XFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMtMTA1Ny1cXHRzdHJ1Y3QgYmVfZG1hX21lbSBub25lbWJfY21kO1xcbi0tXFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMtMTA4MC1cXHRpZiAoaXNfY2hpcF9iZTJfYmUzcihwaGJhKSlcXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYzoxMDgxOlxcdFxcdHJlcV9tZW1zaXplID0gc2l6ZW9mKHN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9pbik7XFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmMtMTA4Mi1cXHRlbHNlXFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmM6MTA4MzpcXHRcXHRyZXFfbWVtc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdGNwX2Nvbm5lY3RfYW5kX29mZmxvYWRfaW5fdjEpO1xcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jLTEwODQtXFxuLS1cXG5kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYy0xMTI1LVxcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jOjExMjY6XFx0cHRjcGNuY3Rfb3V0ID0gKHN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9vdXQgKilub25lbWJfY21kLnZhO1xcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jLTExMjctXFx0YmVpc2NzaV9lcCA9IGVwLVxcdTAwM2VkZF9kYXRhO1xcbi0tXFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYz0xMDk9aW50IG1nbXRfb3Blbl9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSxcXG4tLVxcbmRyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMtMTE5LVxcdHN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7XFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYzoxMjA6XFx0c3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luX3YxICpyZXE7XFxuZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYy0xMjEtXFx0dW5zaWduZWQgc2hvcnQgZGVmX2hkcl9pZDtcXG4tLVxcbmluY2x1ZGUvbGludXgvY2VwaC9tZXNzZW5nZXIuaD01Mjc9dm9pZCBjZXBoX2VuY29kZV9teV9hZGRyKHN0cnVjdCBjZXBoX21lc3NlbmdlciAqbXNncik7XFxuaW5jbHVkZS9saW51eC9jZXBoL21lc3Nlbmdlci5oLTUyOC1cXG5pbmNsdWRlL2xpbnV4L2NlcGgvbWVzc2VuZ2VyLmg6NTI5OmludCBjZXBoX3RjcF9jb25uZWN0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbik7XFxuaW5jbHVkZS9saW51eC9jZXBoL21lc3Nlbmdlci5oLTUzMC1pbnQgY2VwaF9jb25fY2xvc2Vfc29ja2V0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3FlZC9udm1ldGNwX2NvbW1vbi5oPTE5OT1zdHJ1Y3QgbnZtZXRjcF9ob3N0X2NjY2lkX2l0aWRfZW50cnkge1xcbi0tXFxuaW5jbHVkZS9saW51eC9xZWQvbnZtZXRjcF9jb21tb24uaC0yMDItXFxuaW5jbHVkZS9saW51eC9xZWQvbnZtZXRjcF9jb21tb24uaDoyMDM6c3RydWN0IG52bWV0Y3BfY29ubmVjdF9kb25lX3Jlc3VsdHMge1xcbmluY2x1ZGUvbGludXgvcWVkL252bWV0Y3BfY29tbW9uLmgtMjA0LVxcdF9fbGUxNiBpY2lkO1xcbi0tXFxuaW5jbHVkZS9saW51eC9xZWQvdGNwX2NvbW1vbi5oPTE3PXN0cnVjdCBvb29fb3BhcXVlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcWVkL3RjcF9jb21tb24uaC0yNS0vKiB0Y3AgY29ubmVjdCBtb2RlIGVudW0gKi9cXG5pbmNsdWRlL2xpbnV4L3FlZC90Y3BfY29tbW9uLmg6MjY6ZW51bSB0Y3BfY29ubmVjdF9tb2RlIHtcXG5pbmNsdWRlL2xpbnV4L3FlZC90Y3BfY29tbW9uLmgtMjctXFx0VENQX0NPTk5FQ1RfQUNUSVZFLFxcbi0tXFxuaW5jbHVkZS9uZXQvdGNwLmg9NTY5PWludCB0Y3BfdjRfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuKTtcXG5pbmNsdWRlL25ldC90Y3AuaDo1NzA6aW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzayk7XFxuaW5jbHVkZS9uZXQvdGNwLmgtNTcxLWVudW0gdGNwX3N5bmFja190eXBlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oPTIxMDM9c3RydWN0IHRjcF9mYXN0b3Blbl9yZXF1ZXN0IHtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTIxMDctXFx0c2l6ZV90XFx0XFx0XFx0XFx0c2l6ZTtcXG5pbmNsdWRlL25ldC90Y3AuaDoyMTA4OlxcdGludFxcdFxcdFxcdFxcdGNvcGllZDtcXHQvKiBxdWV1ZWQgaW4gdGNwX2Nvbm5lY3QoKSAqL1xcbmluY2x1ZGUvbmV0L3RjcC5oLTIxMDktXFx0c3RydWN0IHVidWZfaW5mb1xcdFxcdCp1YXJnO1xcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmM9NDE3PXN0YXRpYyB2b2lkIHNldF9zb2NrX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtNDM0LSAqL1xcbm5ldC9jZXBoL21lc3Nlbmdlci5jOjQzNTppbnQgY2VwaF90Y3BfY29ubmVjdChzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxubmV0L2NlcGgvbWVzc2VuZ2VyLmMtNDM2LXtcXG4tLVxcbm5ldC9jZXBoL21lc3Nlbmdlcl92MS5jPTE0Njk9aW50IGNlcGhfY29uX3YxX3RyeV93cml0ZShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pXFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy0xNDkzLVxcdFxcdCAgICAgY29uLCBjb24tXFx1MDAzZXN0YXRlKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYzoxNDk0OlxcdFxcdHJldCA9IGNlcGhfdGNwX2Nvbm5lY3QoY29uKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjEuYy0xNDk1LVxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYz0zMzU0PWludCBjZXBoX2Nvbl92Ml90cnlfd3JpdGUoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uKVxcbi0tXFxubmV0L2NlcGgvbWVzc2VuZ2VyX3YyLmMtMzM4OC1cXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMzg5OlxcdFxcdHJldCA9IGNlcGhfdGNwX2Nvbm5lY3QoY29uKTtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYy0zMzkwLVxcdFxcdGlmIChyZXQpIHtcXG5uZXQvY2VwaC9tZXNzZW5nZXJfdjIuYzozMzkxOlxcdFxcdFxcdHByX2VycihcXFwiY2VwaF90Y3BfY29ubmVjdCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbm5ldC9jZXBoL21lc3Nlbmdlcl92Mi5jLTMzOTItXFx0XFx0XFx0Y29uLVxcdTAwM2VlcnJvcl9tc2cgPSBcXFwiY29ubmVjdCBlcnJvclxcXCI7XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xMDUxPWludCB0Y3Bfc2VuZG1zZ19mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50ICpjb3BpZWQsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMDc1LVxcdGlmIChpbmV0X3Rlc3RfYml0KERFRkVSX0NPTk5FQ1QsIHNrKSkge1xcbm5ldC9pcHY0L3RjcC5jOjEwNzY6XFx0XFx0ZXJyID0gdGNwX2Nvbm5lY3Qoc2spO1xcbm5ldC9pcHY0L3RjcC5jLTEwNzctXFx0XFx0LyogU2FtZSBmYWlsdXJlIHByb2NlZHVyZSBhcyBpbiB0Y3BfdjQvNl9jb25uZWN0ICovXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYz0xMTM2PXZvaWQgdGNwX2FvX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfYW8uYy0xMTg5LVxcdH0gZWxzZSB7XFxubmV0L2lwdjQvdGNwX2FvLmM6MTE5MDpcXHRcXHQvKiBDYW4ndCBoYXBwZW46IHRjcF9jb25uZWN0KCkgdmVyaWZpZXMgdGhhdCB0aGVyZSdzXFxubmV0L2lwdjQvdGNwX2FvLmMtMTE5MS1cXHRcXHQgKiBhdCBsZWFzdCBvbmUgdGNwLWFvIGtleSB0aGF0IG1hdGNoZXMgdGhlIHJlbW90ZSBwZWVyLlxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYz0yMjE9aW50IHRjcF92NF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4pXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTM0NC1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjM0NTpcXHRlcnIgPSB0Y3BfY29ubmVjdChzayk7XFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zNDYtXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDA4MT1zdGF0aWMgdm9pZCB0Y3BfY2FfZHN0X2luaXQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDEwMC0vKiBEbyBhbGwgY29ubmVjdCBzb2NrZXQgc2V0dXBzIHRoYXQgY2FuIGJlIGRvbmUgQUYgaW5kZXBlbmRlbnQuICovXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQxMDE6c3RhdGljIHZvaWQgdGNwX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxMDIte1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQxODAtXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQxODE6c3RhdGljIHZvaWQgdGNwX2Nvbm5lY3RfcXVldWVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDE4Mi17XFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM9NDIwMT1zdGF0aWMgaW50IHRjcF9zZW5kX3N5bl9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnN5bilcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MjU4LVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0MjU5OlxcdHRjcF9jb25uZWN0X3F1ZXVlX3NrYihzaywgc3luX2RhdGEpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00MjYwLVxcdGlmIChzeW5fZGF0YS1cXHUwMDNlbGVuKVxcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQyOTctLyogQnVpbGQgYSBTWU4gYW5kIHNlbmQgaXQgb2ZmLiAqL1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0Mjk4OmludCB0Y3BfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQyOTkte1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzNTktXFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQzNjA6XFx0dGNwX2Nvbm5lY3RfaW5pdChzayk7XFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzNjEtXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDM3MS1cXHQvKiBTWU4gZWF0cyBhIHNlcXVlbmNlIGJ5dGUsIHdyaXRlX3NlcSB1cGRhdGVkIGJ5XFxubmV0L2lwdjQvdGNwX291dHB1dC5jOjQzNzI6XFx0ICogdGNwX2Nvbm5lY3RfcXVldWVfc2tiKCkuXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQzNzMtXFx0ICovXFxuLS1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDM3Ni1cXHR0cC1cXHUwMDNlcmV0cmFuc19zdGFtcCA9IHRjcF90aW1lX3N0YW1wX3RzKHRwKTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDM3NzpcXHR0Y3BfY29ubmVjdF9xdWV1ZV9za2Ioc2ssIGJ1ZmYpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00Mzc4LVxcdHRjcF9lY25fc2VuZF9zeW4oc2ssIGJ1ZmYpO1xcbi0tXFxubmV0L2lwdjQvdGNwX291dHB1dC5jLTQ0MDMtfVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYzo0NDA0OkVYUE9SVF9TWU1CT0wodGNwX2Nvbm5lY3QpO1xcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00NDA1LVxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYz0xMzM9c3RhdGljIGludCB0Y3BfdjZfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMzQ1LVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MzQ2OlxcdGVyciA9IHRjcF9jb25uZWN0KHNrKTtcXG5uZXQvaXB2Ni90Y3BfaXB2Ni5jLTM0Ny1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NDA4NT1zdGF0aWMgaW50IG1wdGNwX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDExNy1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MTE4OnN0YXRpYyBpbnQgbXB0Y3BfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MTE5LVxcdFxcdFxcdCBpbnQgYWRkcl9sZW4pXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MTk2PXN0YXRpYyBzdHJ1Y3QgcHJvdG8gbXB0Y3BfcHJvdCA9IHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQxOTktXFx0LmluaXRcXHRcXHQ9IG1wdGNwX2luaXRfc29jayxcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MjAwOlxcdC5jb25uZWN0XFx0PSBtcHRjcF9jb25uZWN0LFxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQyMDEtXFx0LmRpc2Nvbm5lY3RcXHQ9IG1wdGNwX2Rpc2Nvbm5lY3QsXFxuLS1cXG5uZXQvcmRzL01ha2VmaWxlPTEzPW9iai0kKENPTkZJR19SRFNfVENQKSArPSByZHNfdGNwLm9cXG5uZXQvcmRzL01ha2VmaWxlOjE0OnJkc190Y3AteSA6PVxcdFxcdHRjcC5vIHRjcF9jb25uZWN0Lm8gdGNwX2xpc3Rlbi5vIHRjcF9yZWN2Lm8gXFxcXFxcbm5ldC9yZHMvTWFrZWZpbGUtMTUtXFx0XFx0XFx0dGNwX3NlbmQubyB0Y3Bfc3RhdHMub1xcbi0tXFxubmV0L3Jkcy90Y3AuYz00Nz1zdGF0aWMgTElTVF9IRUFEKHJkc190Y3BfdGNfbGlzdCk7XFxubmV0L3Jkcy90Y3AuYy00OC1cXG5uZXQvcmRzL3RjcC5jOjQ5Oi8qIFRyYWNrIHJkc190Y3BfY29ubmVjdGlvbiBzdHJ1Y3RzIHNvIHRoZXkgY2FuIGJlIGNsZWFuZWQgdXAgKi9cXG5uZXQvcmRzL3RjcC5jLTUwLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socmRzX3RjcF9jb25uX2xvY2spO1xcbi0tXFxubmV0L3Jkcy90Y3AuYz02ND1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSByZHNfdGNwX3N5c2N0bF90YWJsZVtdID0ge1xcbi0tXFxubmV0L3Jkcy90Y3AuYy04NC1cXG5uZXQvcmRzL3RjcC5jOjg1OnUzMiByZHNfdGNwX3dyaXRlX3NlcShzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YylcXG5uZXQvcmRzL3RjcC5jLTg2LXtcXG4tLVxcbm5ldC9yZHMvdGNwLmMtOTAtXFxubmV0L3Jkcy90Y3AuYzo5MTp1MzIgcmRzX3RjcF9zbmRfdW5hKHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjKVxcbm5ldC9yZHMvdGNwLmMtOTIte1xcbi0tXFxubmV0L3Jkcy90Y3AuYz05Nj12b2lkIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQvcmRzL3RjcC5jOjk3OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YylcXG5uZXQvcmRzL3RjcC5jLTk4LXtcXG4tLVxcbm5ldC9yZHMvdGNwLmM9MTI2PXZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbm5ldC9yZHMvdGNwLmMtMTI4LXtcXG5uZXQvcmRzL3RjcC5jOjEyOTpcXHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLVxcdTAwM2VjcF90cmFuc3BvcnRfZGF0YTtcXG5uZXQvcmRzL3RjcC5jLTEzMC1cXHRzdHJ1Y3Qgc29ja2V0ICpvc29jayA9IHRjLVxcdTAwM2V0X3NvY2s7XFxuLS1cXG5uZXQvcmRzL3RjcC5jPTE4MT12b2lkIHJkc190Y3Bfc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy90Y3AuYy0xODIte1xcbm5ldC9yZHMvdGNwLmM6MTgzOlxcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXFx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvdGNwLmMtMTg0LVxcbi0tXFxubmV0L3Jkcy90Y3AuYz0yMTk9c3RhdGljIHZvaWQgcmRzX3RjcF90Y19pbmZvKHN0cnVjdCBzb2NrZXQgKnJkc19zb2NrLCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxubmV0L3Jkcy90Y3AuYy0yMjQtXFx0c3RydWN0IHJkc19pbmZvX3RjcF9zb2NrZXQgdHNpbmZvO1xcbm5ldC9yZHMvdGNwLmM6MjI1OlxcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjO1xcbm5ldC9yZHMvdGNwLmMtMjI2LVxcdHVuc2lnbmVkIGludCBjb3BpZWQgPSAwO1xcbi0tXFxubmV0L3Jkcy90Y3AuYz0yODQ9c3RhdGljIHZvaWQgcmRzNl90Y3BfdGNfaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxubmV0L3Jkcy90Y3AuYy0yODktXFx0c3RydWN0IHJkczZfaW5mb190Y3Bfc29ja2V0IHRzaW5mbzY7XFxubmV0L3Jkcy90Y3AuYzoyOTA6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGM7XFxubmV0L3Jkcy90Y3AuYy0yOTEtXFx0dW5zaWduZWQgaW50IGNvcGllZCA9IDA7XFxuLS1cXG5uZXQvcmRzL3RjcC5jPTM4MD1zdGF0aWMgdm9pZCByZHNfdGNwX2Nvbm5fZnJlZSh2b2lkICphcmcpXFxubmV0L3Jkcy90Y3AuYy0zODEte1xcbm5ldC9yZHMvdGNwLmM6MzgyOlxcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gYXJnO1xcbm5ldC9yZHMvdGNwLmMtMzgzLVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLS1cXG5uZXQvcmRzL3RjcC5jPTM5NT1zdGF0aWMgaW50IHJkc190Y3BfY29ubl9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcClcXG5uZXQvcmRzL3RjcC5jLTM5Ni17XFxubmV0L3Jkcy90Y3AuYzozOTc6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGM7XFxubmV0L3Jkcy90Y3AuYy0zOTgtXFx0aW50IGksIGo7XFxuLS1cXG5uZXQvcmRzL3RjcC5jPTQzNz1zdGF0aWMgYm9vbCBsaXN0X2hhc19jb25uKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcXG5uZXQvcmRzL3RjcC5jLTQzOC17XFxubmV0L3Jkcy90Y3AuYzo0Mzk6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMsICpfdGM7XFxubmV0L3Jkcy90Y3AuYy00NDAtXFxuLS1cXG5uZXQvcmRzL3RjcC5jPTQ1OD1zdGF0aWMgdm9pZCByZHNfdGNwX2Rlc3Ryb3lfY29ubnModm9pZClcXG5uZXQvcmRzL3RjcC5jLTQ1OS17XFxubmV0L3Jkcy90Y3AuYzo0NjA6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMsICpfdGM7XFxubmV0L3Jkcy90Y3AuYy00NjEtXFx0TElTVF9IRUFEKHRtcF9saXN0KTtcXG4tLVxcbm5ldC9yZHMvdGNwLmM9NjI5PXN0YXRpYyB2b2lkIHJkc190Y3Bfa2lsbF9zb2NrKHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvcmRzL3RjcC5jLTYzMC17XFxubmV0L3Jkcy90Y3AuYzo2MzE6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMsICpfdGM7XFxubmV0L3Jkcy90Y3AuYy02MzItXFx0TElTVF9IRUFEKHRtcF9saXN0KTtcXG4tLVxcbm5ldC9yZHMvdGNwLmM9Njk0PXN0YXRpYyB2b2lkIHJkc190Y3Bfc3lzY3RsX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvcmRzL3RjcC5jLTY5NS17XFxubmV0L3Jkcy90Y3AuYzo2OTY6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMsICpfdGM7XFxubmV0L3Jkcy90Y3AuYy02OTctXFxuLS1cXG5uZXQvcmRzL3RjcC5jPTc2Nz1zdGF0aWMgaW50IF9faW5pdCByZHNfdGNwX2luaXQodm9pZClcXG4tLVxcbm5ldC9yZHMvdGNwLmMtNzcwLVxcbm5ldC9yZHMvdGNwLmM6NzcxOlxcdHJkc190Y3BfY29ubl9zbGFiID0gS01FTV9DQUNIRShyZHNfdGNwX2Nvbm5lY3Rpb24sIDApO1xcbm5ldC9yZHMvdGNwLmMtNzcyLVxcdGlmICghcmRzX3RjcF9jb25uX3NsYWIpIHtcXG4tLVxcbm5ldC9yZHMvdGNwLmg9MjI9c3RydWN0IHJkc190Y3BfaW5jb21pbmcge1xcbi0tXFxubmV0L3Jkcy90Y3AuaC0yNi1cXG5uZXQvcmRzL3RjcC5oOjI3OnN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24ge1xcbm5ldC9yZHMvdGNwLmgtMjgtXFxuLS1cXG5uZXQvcmRzL3RjcC5oPTYzPXN0cnVjdCByZHNfdGNwX3N0YXRpc3RpY3Mge1xcbi0tXFxubmV0L3Jkcy90Y3AuaC02Ni1cXHR1aW50NjRfdFxcdHNfdGNwX3NuZGJ1Zl9mdWxsO1xcbm5ldC9yZHMvdGNwLmg6Njc6XFx0dWludDY0X3RcXHRzX3RjcF9jb25uZWN0X3JhY2VkO1xcbm5ldC9yZHMvdGNwLmgtNjgtXFx0dWludDY0X3RcXHRzX3RjcF9saXN0ZW5fY2xvc2VkX3N0YWxlO1xcbi0tXFxubmV0L3Jkcy90Y3AuaD03Nj12b2lkIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQvcmRzL3RjcC5oOjc3OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0Yyk7XFxubmV0L3Jkcy90Y3AuaDo3ODp1MzIgcmRzX3RjcF93cml0ZV9zZXEoc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMpO1xcbm5ldC9yZHMvdGNwLmg6Nzk6dTMyIHJkc190Y3Bfc25kX3VuYShzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0Yyk7XFxubmV0L3Jkcy90Y3AuaC04MC1leHRlcm4gc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX3RjcF90cmFuc3BvcnQ7XFxuLS1cXG5uZXQvcmRzL3RjcC5oPTgyPWludCByZHNfdGNwX2xhZGRyX2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLFxcbm5ldC9yZHMvdGNwLmgtODMtXFx0XFx0XFx0X191MzIgc2NvcGVfaWQpO1xcbm5ldC9yZHMvdGNwLmg6ODQ6LyogdGNwX2Nvbm5lY3QuYyAqL1xcbm5ldC9yZHMvdGNwLmgtODUtaW50IHJkc190Y3BfY29ubl9wYXRoX2Nvbm5lY3Qoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKTtcXG4tLVxcbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYz00MD12b2lkIHJkc190Y3Bfc3RhdGVfY2hhbmdlKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYy00My1cXHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3A7XFxubmV0L3Jkcy90Y3BfY29ubmVjdC5jOjQ0OlxcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjO1xcbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYy00NS1cXG4tLVxcbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYz05OD1pbnQgcmRzX3RjcF9jb25uX3BhdGhfY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuLS1cXG5uZXQvcmRzL3RjcF9jb25uZWN0LmMtMTA5LVxcdHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNwLVxcdTAwM2VjcF9jb25uO1xcbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYzoxMTA6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjcC1cXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XFxubmV0L3Jkcy90Y3BfY29ubmVjdC5jLTExMS1cXG4tLVxcbm5ldC9yZHMvdGNwX2Nvbm5lY3QuYz0yMzM9dm9pZCByZHNfdGNwX2Nvbm5fcGF0aF9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy90Y3BfY29ubmVjdC5jLTIzNC17XFxubmV0L3Jkcy90Y3BfY29ubmVjdC5jOjIzNTpcXHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLVxcdTAwM2VjcF90cmFuc3BvcnRfZGF0YTtcXG5uZXQvcmRzL3RjcF9jb25uZWN0LmMtMjM2LVxcdHN0cnVjdCBzb2NrZXQgKnNvY2sgPSB0Yy1cXHUwMDNldF9zb2NrO1xcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM9NjA9cmRzX3RjcF9nZXRfcGVlcl9zcG9ydChzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtNzUtICovXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM6NzY6c3RhdGljIHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKlxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTc3LXJkc190Y3BfYWNjZXB0X29uZV9wYXRoKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jPTEwOD12b2lkIHJkc190Y3BfY29ubl9zbG90c19hdmFpbGFibGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBib29sIGZhbl9vdXQpXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMTA5LXtcXG5uZXQvcmRzL3RjcF9saXN0ZW4uYzoxMTA6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGM7XFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMTExLVxcdHN0cnVjdCByZHNfdGNwX25ldCAqcnRuO1xcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM9MTUyPWludCByZHNfdGNwX2FjY2VwdF9vbmUoc3RydWN0IHJkc190Y3BfbmV0ICpydG4pXFxuLS1cXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0xNTgtXFx0c3RydWN0IGluZXRfc29jayAqaW5ldDtcXG5uZXQvcmRzL3RjcF9saXN0ZW4uYzoxNTk6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqcnNfdGNwID0gTlVMTDtcXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0xNjAtXFx0aW50IGNvbm5fc3RhdGU7XFxuLS1cXG5uZXQvcmRzL3RjcF9yZWN2LmM9MTU1PXN0YXRpYyBpbnQgcmRzX3RjcF9kYXRhX3JlY3YocmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvcmRzL3RjcF9yZWN2LmMtMTU5LVxcdHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCA9IGFyZy1cXHUwMDNlY29ubl9wYXRoO1xcbm5ldC9yZHMvdGNwX3JlY3YuYzoxNjA6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjcC1cXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XFxubmV0L3Jkcy90Y3BfcmVjdi5jLTE2MS1cXHRzdHJ1Y3QgcmRzX3RjcF9pbmNvbWluZyAqdGluYyA9IHRjLVxcdTAwM2V0X3RpbmM7XFxuLS1cXG5uZXQvcmRzL3RjcF9yZWN2LmM9MjYzPXN0YXRpYyBpbnQgcmRzX3RjcF9yZWFkX3NvY2soc3RydWN0IHJkc19jb25uX3BhdGggKmNwLCBnZnBfdCBnZnApXFxubmV0L3Jkcy90Y3BfcmVjdi5jLTI2NC17XFxubmV0L3Jkcy90Y3BfcmVjdi5jOjI2NTpcXHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLVxcdTAwM2VjcF90cmFuc3BvcnRfZGF0YTtcXG5uZXQvcmRzL3RjcF9yZWN2LmMtMjY2LVxcdHN0cnVjdCBzb2NrZXQgKnNvY2sgPSB0Yy1cXHUwMDNldF9zb2NrO1xcbi0tXFxubmV0L3Jkcy90Y3BfcmVjdi5jPTI5NT1pbnQgcmRzX3RjcF9yZWN2X3BhdGgoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbm5ldC9yZHMvdGNwX3JlY3YuYy0yOTYte1xcbm5ldC9yZHMvdGNwX3JlY3YuYzoyOTc6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjcC1cXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XFxubmV0L3Jkcy90Y3BfcmVjdi5jLTI5OC1cXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gdGMtXFx1MDAzZXRfc29jaztcXG4tLVxcbm5ldC9yZHMvdGNwX3JlY3YuYz0zMTE9dm9pZCByZHNfdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3Jkcy90Y3BfcmVjdi5jLTMxNC1cXHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3A7XFxubmV0L3Jkcy90Y3BfcmVjdi5jOjMxNTpcXHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YztcXG5uZXQvcmRzL3RjcF9yZWN2LmMtMzE2LVxcbi0tXFxubmV0L3Jkcy90Y3Bfc2VuZC5jPTQxPXZvaWQgcmRzX3RjcF94bWl0X3BhdGhfcHJlcGFyZShzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy90Y3Bfc2VuZC5jLTQyLXtcXG5uZXQvcmRzL3RjcF9zZW5kLmM6NDM6XFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjcC1cXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XFxubmV0L3Jkcy90Y3Bfc2VuZC5jLTQ0LVxcbi0tXFxubmV0L3Jkcy90Y3Bfc2VuZC5jPTQ4PXZvaWQgcmRzX3RjcF94bWl0X3BhdGhfY29tcGxldGUoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbm5ldC9yZHMvdGNwX3NlbmQuYy00OS17XFxubmV0L3Jkcy90Y3Bfc2VuZC5jOjUwOlxcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXFx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvdGNwX3NlbmQuYy01MS1cXG4tLVxcbm5ldC9yZHMvdGNwX3NlbmQuYz03MD1pbnQgcmRzX3RjcF94bWl0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19tZXNzYWdlICpybSxcXG4tLVxcbm5ldC9yZHMvdGNwX3NlbmQuYy03My1cXHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3AgPSBybS1cXHUwMDNlbV9pbmMuaV9jb25uX3BhdGg7XFxubmV0L3Jkcy90Y3Bfc2VuZC5jOjc0OlxcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXFx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xcbm5ldC9yZHMvdGNwX3NlbmQuYy03NS1cXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHt9O1xcbi0tXFxubmV0L3Jkcy90Y3Bfc2VuZC5jPTE3OT12b2lkIHJkc190Y3Bfd3JpdGVfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3Jkcy90Y3Bfc2VuZC5jLTE4Mi1cXHRzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3A7XFxubmV0L3Jkcy90Y3Bfc2VuZC5jOjE4MzpcXHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YztcXG5uZXQvcmRzL3RjcF9zZW5kLmMtMTg0LVxcbi0tXFxubmV0L3Jkcy90Y3Bfc3RhdHMuYz00Mz1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJkc190Y3Bfc3RhdF9uYW1lc1tdID0ge1xcbi0tXFxubmV0L3Jkcy90Y3Bfc3RhdHMuYy00Ni1cXHRcXFwidGNwX3NuZGJ1Zl9mdWxsXFxcIixcXG5uZXQvcmRzL3RjcF9zdGF0cy5jOjQ3OlxcdFxcXCJ0Y3BfY29ubmVjdF9yYWNlZFxcXCIsXFxubmV0L3Jkcy90Y3Bfc3RhdHMuYy00OC1cXHRcXFwidGNwX2xpc3Rlbl9jbG9zZWRfc3RhbGVcXFwiLFxcbi0tXFxuc2FtcGxlcy9sYW5kbG9jay9zYW5kYm94ZXIuYz0zMTM9c3RhdGljIGludCBhZGRfcXVpZXRfYWNjZXNzKGNvbnN0IGNoYXIgKmNvbnN0IGVudl92YXIsXFxuLS1cXG5zYW1wbGVzL2xhbmRsb2NrL3NhbmRib3hlci5jLTM0Mi1cXHRcXHRcXHRcXHRMQU5ETE9DS19BQ0NFU1NfTkVUX0JJTkRfVENQO1xcbnNhbXBsZXMvbGFuZGxvY2svc2FuZGJveGVyLmM6MzQzOlxcdFxcdGVsc2UgaWYgKHN0cmNtcChzdHJfYWNjZXNzLCBcXFwidGNwX2Nvbm5lY3RcXFwiKSA9PSAwKVxcbnNhbXBsZXMvbGFuZGxvY2svc2FuZGJveGVyLmMtMzQ0LVxcdFxcdFxcdHJ1bGVzZXRfYXR0ci1cXHUwMDNlcXVpZXRfYWNjZXNzX25ldCB8PVxcbi0tXFxuc2FtcGxlcy9sYW5kbG9jay9zYW5kYm94ZXIuYz0zNzk9c3RhdGljIGNvbnN0IGNoYXIgaGVscFtdID1cXG4tLVxcbnNhbXBsZXMvbGFuZGxvY2svc2FuZGJveGVyLmMtNDEzLVxcdFxcXCIgIC0gXFxcXFxcXCJ0Y3BfYmluZFxcXFxcXFwiIHRvIHF1aWV0IHRjcCBiaW5kIGRlbmlhbHNcXFxcblxcXCJcXG5zYW1wbGVzL2xhbmRsb2NrL3NhbmRib3hlci5jOjQxNDpcXHRcXFwiICAtIFxcXFxcXFwidGNwX2Nvbm5lY3RcXFxcXFxcIiB0byBxdWlldCB0Y3AgY29ubmVjdCBkZW5pYWxzXFxcXG5cXFwiXFxuc2FtcGxlcy9sYW5kbG9jay9zYW5kYm94ZXIuYy00MTUtXFx0XFxcIiAgLSBcXFxcXFxcInVkcF9iaW5kXFxcXFxcXCIgdG8gcXVpZXQgdWRwIGJpbmQgZGVuaWFsc1xcXFxuXFxcIlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfc3RvcmFnZV90cmFjaW5nLmM9NzE9aW50IEJQRl9QUk9HKHRyYWNlX2luZXRfY3NrX2xpc3Rlbl9zdGFydCwgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfc3RvcmFnZV90cmFjaW5nLmMtNzctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3Rfc2tfc3RvcmFnZV90cmFjaW5nLmM6Nzg6U0VDKFxcXCJmZW50cnkvdGNwX2Nvbm5lY3RcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX3N0b3JhZ2VfdHJhY2luZy5jOjc5OmludCBCUEZfUFJPRyh0cmFjZV90Y3BfY29ubmVjdCwgc3RydWN0IHNvY2sgKnNrKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3NrX3N0b3JhZ2VfdHJhY2luZy5jLTgwLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYz04OT1zdGF0aWMgaW50IHRjcF9saXN0ZW4odm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYy0xMDctXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jOjEwODpzdGF0aWMgdm9pZCB0Y3BfY29ubmVjdChpbnQgbGlzdGVuZXIsIHVpbnQzMl90IGZsb3dsYWJlbCxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMtMTA5LVxcdFxcdFxcdGludCAqY2xpZW50LCBpbnQgKmFjY2VwdGVkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jPTQ1MD1URVNUX0YoZmxvd2xhYmVsLCByZW1vdGVfZmxhZylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYy00NjItXFx0bGlzdGVuZXIgPSB0Y3BfbGlzdGVuKCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jOjQ2MzpcXHR0Y3BfY29ubmVjdChsaXN0ZW5lciwgNywgXFx1MDAyNmNmZCwgXFx1MDAyNmFmZCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jLTQ2NC1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9pcHY2X2Zsb3dsYWJlbF9tZ3IuYz00OTI9VEVTVF9GKGZsb3dsYWJlbCwgcmVmbGVjdF9mbGFnKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2lwdjZfZmxvd2xhYmVsX21nci5jLTUyMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmM6NTIxOlxcdHRjcF9jb25uZWN0KGxpc3RlbmVyLCA4LCBcXHUwMDI2Y2ZkLCBcXHUwMDI2YWZkKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvaXB2Nl9mbG93bGFiZWxfbWdyLmMtNTIyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwLy5naXRpZ25vcmUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvLmdpdGlnbm9yZToyOm1wdGNwX2Nvbm5lY3RcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvLmdpdGlnbm9yZS0zLW1wdGNwX2RpYWdcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9NYWtlZmlsZT04PVRFU1RfUFJPR1MgOj0gXFxcXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9NYWtlZmlsZS05LVxcdGRpYWcuc2ggXFxcXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9NYWtlZmlsZToxMDpcXHRtcHRjcF9jb25uZWN0LnNoIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvTWFrZWZpbGU6MTE6XFx0bXB0Y3BfY29ubmVjdF9jaGVja3N1bS5zaCBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlOjEyOlxcdG1wdGNwX2Nvbm5lY3RfbW1hcC5zaCBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlOjEzOlxcdG1wdGNwX2Nvbm5lY3Rfc2VuZGZpbGUuc2ggXFxcXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9NYWtlZmlsZToxNDpcXHRtcHRjcF9jb25uZWN0X3NwbGljZS5zaCBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlLTE1LVxcdG1wdGNwX2pvaW4uc2ggXFxcXFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlPTIyPVRFU1RfR0VOX0ZJTEVTIDo9IFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvTWFrZWZpbGU6MjM6XFx0bXB0Y3BfY29ubmVjdCBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL01ha2VmaWxlLTI0LVxcdG1wdGNwX2RpYWcgXFxcXFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2g9MTY9Zmx1c2hfcGlkcygpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2gtMTcte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9kaWFnLnNoOjE4OlxcdCMgbXB0Y3BfY29ubmVjdCBpbiBqb2luIG1vZGUgd2lsbCBzbGVlcCBhIGJpdCBiZWZvcmUgY29tcGxldGluZyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaC0xOS1cXHQjIGdpdmUgaXQgc29tZSB0aW1lXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaD0zNTU9ZWNobyBcXFwiYVxcXCIgfCBcXFxcXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaC0zNTctXFx0XFx0aXAgbmV0bnMgZXhlYyAkbnMgXFxcXFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9kaWFnLnNoOjM1ODpcXHRcXHRcXHQuL21wdGNwX2Nvbm5lY3QgLXAgMTAwMDAgLWwgLXQgJHt0aW1lb3V0X3BvbGx9IC13IDIwIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaC0zNTktXFx0XFx0XFx0XFx0MC4wLjAuMCBcXHUwMDNlL2Rldi9udWxsIFxcdTAwMjZcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9kaWFnLnNoPTM2ND1lY2hvIFxcXCJiXFxcIiB8IFxcXFxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9kaWFnLnNoLTM2Ni1cXHRcXHRpcCBuZXRucyBleGVjICRucyBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2g6MzY3OlxcdFxcdFxcdC4vbXB0Y3BfY29ubmVjdCAtcCAxMDAwMCAtciAwIC10ICR7dGltZW91dF9wb2xsfSAtdyAyMCBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2gtMzY4LVxcdFxcdFxcdFxcdDEyNy4wLjAuMSBcXHUwMDNlL2Rldi9udWxsIFxcdTAwMjZcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9kaWFnLnNoPTM4ND1lY2hvIFxcXCJhXFxcIiB8IFxcXFxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9tcHRjcC9kaWFnLnNoLTM4Ni1cXHRcXHRpcCBuZXRucyBleGVjICRucyBcXFxcXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L21wdGNwL2RpYWcuc2g6Mzg3OlxcdFxcdFxcdC4vbXB0Y3BfY29ubmVjdCAtcCAxMDAwMSAtbCAtcyBUQ1AgLXQgJHt0aW1lb3V0X3BvbGx9IC13IDIwIFxcXFxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbXB0Y3AvZGlhZy5zaC0zODgtXFx0XFx0XFx0XFx0MC4wLjAuMCBcXHUwMDNlL2Rldi9udWxsIFxcdTAwMjZcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzQ6MzEuNDY0MzEwMzY2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDM3MjA5NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIHNvIGB0Y3BfY29ubmVjdGAgaXMgZXhwb3J0ZWQsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIE15IGZvY3VzIHNob3VsZCBiZSBvbiBgdGNwX2Nvbm5lY3RgLCBgdGNwX21ha2Vfc3luYWNrYCwgYW5kIGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AuIExldCdzIGNsYXJpZnkgYHRjcF92Nl9zeW5fcmVjdl9zb2NrYCBzaW5jZSBpdCdzIHN0YXRpYyBhbmQgc2hvdWxkbid0IGJlIGV4cG9ydGVkLCB3aGljaCBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nLiBPaCwgYnV0IGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AgaXMgZXhwb3J0ZWQsIGludGVyZXN0aW5nLiBOb3csIGxldCdzIGNvbmZpcm0gdGhlIHN0YXRpYyBuYXR1cmUgb2YgYHRjcF9jb25uZWN0X2luaXRgIGFnYWluLCBnb29kLiBBbmQgdGhlIHN0YXR1cyBvZiBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgLCB0aGV5IGFyZSBzdGF0aWMgaW5saW5lIGFzIGV4cGVjdGVkLiBXaGF0IGFib3V0IGBpcHY0X2RlZmF1bHRfYWR2bXNzYCBhbmQgYGlwNl9kZWZhdWx0X2Fkdm1zc2A/IFRoZXkgYXJlIHN0YXRpYywgZ290IGl0LlxuXG5UaW1lIHRvIGxvb2sgYXQgdGhlIGNvbmZpZyBvcHRpb25zLiBUaGUgbW9kaWZpY2F0aW9ucyBhcmUgaW4gYG5ldC9pcHY0L3JvdXRlLmNgIGFuZCBgbmV0L2lwdjYvcm91dGUuY2AsIHdoaWNoIGlzIGNvcmUgSVB2NCBhbmQgSVB2NiByb3V0aW5nLiBJJ2xsIG5lZWQgYENPTkZJR19JTkVUYCBmb3IgSVB2NCBhbmQgYENPTkZJR19JUFY2YCBmb3IgSVB2Ni4gU2luY2UgaXQncyBjb3JlIG5ldHdvcmtpbmcsIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgdW51c3VhbCBjb25maWcgZGVwZW5kZW5jaWVzIGJleW9uZCB0aGUgc3RhbmRhcmQgb25lcyByZXF1aXJlZCBmb3IgSVB2NC9JUHY2IHN1cHBvcnQuXG5cbk5vdywgbGV0J3MgcmUtZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLiBJIHNlZSB0aGF0IGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWRgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAgYXJlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zLiBUaGV5J3JlIGNhbGxlZCBmcm9tIGBpcHY0X2RlZmF1bHRfYWR2bXNzYCBhbmQgYGlwNl9kZWZhdWx0X2Fkdm1zc2AsIHdoaWNoIGFyZSBhc3NpZ25lZCB0byBgZHN0X29wcy1cdTAwM2VkZWZhdWx0X2Fkdm1zc2AuIGBkc3RfbWV0cmljX2Fkdm1zc2AgY2FsbHMgYGRzdC1cdTAwM2VvcHMtXHUwMDNlZGVmYXVsdF9hZHZtc3MoZHN0KWAuIFRoZXNlIGFyZSB0aGVuIGNhbGxlZCBmcm9tIGB0Y3BfY29ubmVjdF9pbml0YCwgYHRjcF9hZHZlcnRpc2VfbXNzYCwgYHRjcF9tYWtlX3N5bmFja2AsIGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AsIGFuZCBgdGNwX3Y2X3N5bl9yZWN2X3NvY2tgLiBUaGlzIHJlaW5mb3JjZXMgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHRoYXQgYHRjcF9jb25uZWN0YCwgYHRjcF9tYWtlX3N5bmFja2AsIGFuZCBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2xsb3cuIEp1c3QgY29uZmlybWluZyBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgIGlzIGV4cG9ydGVkLi4uIGFuZCB5ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTY2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM0OjQxLjkwMTUyMjY5M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2MjU2Mjg2NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdGNwX3Y0X3N5bl9yZWN2X3NvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM0OjQ0LjI2NDA5NDg4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMDY4NjY5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWxseSBIaWRkZW4gU3ltYm9sKipcblxuSG1tLCB0aGlzIGlzIGludGVyZXN0aW5nLiBJJ20gbG9va2luZyBhdCBhIGZ1bmN0aW9uIHRoYXQgaXNuJ3QgZXhwbGljaXRseSBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MYCwgd2hpY2ggdXN1YWxseSBtZWFucyBpdCdzIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIHRoZSBtb2R1bGUgb3Iga2VybmVsIGl0J3MgZGVmaW5lZCBpbi4gSG93ZXZlciwgdGhlIGZhY3QgdGhhdCBpdCdzICpub3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGlzIHJhaXNpbmcgYSBmbGFnLiBJZiBpdCB3ZXJlbid0IGBzdGF0aWNgLCBidXQgYWxzbyAqbm90KiBleHBvcnRlZCwgaG93IGlzIGl0IGludGVuZGVkIHRvIGJlIHVzZWQ/XG5cbk15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiwgd2hhdGV2ZXIgaXQgaXMsIGlzIGJlaW5nIGNhbGxlZC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBleGFtaW5pbmcgYHRjcF9tYWtlX3N5bmFja2AuIEl0J3MgYSBjb21tb24gYXJlYSBmb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGFzIGl0cyBuYW1lIHN1Z2dlc3RzIGl0IHdvdWxkIGNvbnN0cnVjdCBhIFNZTi1BQ0sgcGFja2V0LCBhbmQgdGhhdCBtYWtlcyBpdCBhIHByaW1lIHN1c3BlY3QgZm9yIGFuIHVuZXhwZWN0ZWQgY2FsbC4gSSdtIGJldHRpbmcgdGhhdCdsbCB5aWVsZCBzb21lIGluc2lnaHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ3MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM0OjUwLjM3MDk2NTE4MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNTU5ODk3NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdGNwX21ha2Vfc3luYWNrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNDo1Mi42OTY1NzkzNzhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg4OTYzMjc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipEaWdnaW5nIGludG8gYSBOb24tRXhwb3J0ZWQgU3ltYm9sKipcblxuT2theSwgc28gdGhpcyBzeW1ib2wgaXNuJ3QgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTGAsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gVGhhdCBsaWtlbHkgbWVhbnMgaXQncyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwga2VybmVsIHVzZSwgbm90IGRpcmVjdCBtb2R1bGUgYWNjZXNzLiBCdXQgaXQncyAqYWxzbyogbm90IGBzdGF0aWNgLCBzbyBpdCdzIHRlY2huaWNhbGx5IHZpc2libGUgd2l0aGluIHRoZSBjb21waWxhdGlvbiB1bml0LCB3aGljaCBvZmZlcnMgc29tZSBjbHVlcyBhYm91dCBpdHMgc2NvcGUuIFRpbWUgdG8gZGlnIGRlZXBlciwgc3RhcnRpbmcgd2l0aCBhIGNydWNpYWwgZnVuY3Rpb24g4oCTIGxldCdzIGNoZWNrIGB0Y3BfY29ubmVjdGAuIFRoYXQncyBvZnRlbiBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgbmV0d29yayBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYW5kIHdoZXJlIHRoaXMgbm9uLWV4cG9ydGVkIHN5bWJvbCBtaWdodCBmaXQgaW4uIEknbSBndWVzc2luZyB0aGF0IHRoaXMgc3ltYm9sIHJlbGF0ZXMgdG8gVENQIHNvY2tldCBjb25uZWN0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBzZWUgaWYgbXkgaHVuY2ggaG9sZHMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NzUxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzQ6NTkuNTg2MjE0NTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NzgxNDEyMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdGNwX2Nvbm5lY3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX291dHB1dC5jPTQyOTg9aW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9vdXRwdXQuYy00NDAzLX1cXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmM6NDQwNDpFWFBPUlRfU1lNQk9MKHRjcF9jb25uZWN0KTtcXG5uZXQvaXB2NC90Y3Bfb3V0cHV0LmMtNDQwNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzU6MDIuNTY0MzYwOTkxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2OTQyNTM4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqVENQIENvbm5lY3Rpb24gRnVuY3Rpb24gRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGB0Y3BfY29ubmVjdGAgaXMgZGVmaW5pdGVseSBleHBvcnRlZCBhbmQgYXZhaWxhYmxlIGZvciB1c2UuIFRoYXQncyBhcyBleHBlY3RlZC4gTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgSVB2NiBjb21wYXRpYmlsaXR5IGFuZCB3aGF0IHRoZSBlcXVpdmFsZW50IGZ1bmN0aW9uIGlzLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhlIHN5c3RlbSBsZXZlcmFnZSBhIHNlcGFyYXRlLCBleHBsaWNpdGx5IElQdjYtc3BlY2lmaWMgZnVuY3Rpb24gbGlrZSBgdGNwX3Y2X2Nvbm5lY3RgLCBvciBpcyB0aGlzIGZ1bmN0aW9uYWxpdHkgaGFuZGxlZCB3aXRoaW4gYHRjcF9jb25uZWN0YD8gSXQncyBsaWtlbHkgSSdsbCBoYXZlIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgdG8gZGV0ZXJtaW5lIGhvdyB0aGlzIGlzIGRvbmUgYW5kIGlmIHRoaXMgaXMgYSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25zaWRlcmF0aW9uLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4sIGFuZCB0aGUgbnVhbmNlcyBvZiB0aGUgaW1wbGVtZW50YXRpb24gd2lsbCBndWlkZSB3aGF0IEkgY2FuIGRvIGZyb20gaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwNjIsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNTowOS4yNTg2MTc5MTVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MDM4NDkzNTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnRjcF92Nl9jb25uZWN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNToxMS42NjI0Nzg3ODJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY2NTkyMzAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDb25zaWRlcmluZyBgdGNwX3Y0X2Nvbm5lY3RgKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHdoYXQncyBvbiB0aGUgdGFibGUgbm93PyBXZSdyZSBhZGRyZXNzaW5nIHNvbWUgbmV0d29ya2luZyBpc3N1ZSwgcHJvYmFibHkgcmVsYXRlZCB0byBlc3RhYmxpc2hpbmcgY29ubmVjdGlvbnMsIGFuZCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGB0Y3BfdjRfY29ubmVjdGAuIEl0J3MgYSBmdW5kYW1lbnRhbCBmdW5jdGlvbiwgcmlnaHQ/IEEgY29yZSBidWlsZGluZyBibG9jayBmb3IgYW55IFRDUC9JUC1iYXNlZCBhcHBsaWNhdGlvbi4gVGhpcyBpbXBsaWVzIHRoZSBjdXJyZW50IGNoYWxsZW5nZSBsaWtlbHkgYm9pbHMgZG93biB0byAqaG93KiBhIGNvbm5lY3Rpb24gaXMgYmVpbmcgYXR0ZW1wdGVkLCBvciBwZXJoYXBzIGlzc3VlcyBzdXJyb3VuZGluZyAqd2hlbiogYW5kICp3aGVyZSouIEFyZSB0aGVyZSBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBzb2NrZXQgY3JlYXRpb24sIHRoZSBpbml0aWFsIGhhbmRzaGFrZSwgb3IgZXZlbiB0aGUgc3Vic2VxdWVudCBkYXRhIGZsb3cgb25jZSBhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQ/XG5cbktub3dpbmcgdGhlIGNvbnRleHQgb2YgdGhlIGlzc3VlLCB3aGF0IHNwZWNpZmljYWxseSBpcyB0cmlwcGluZyB0aGUgZnVuY3Rpb24gdXA/IENvdWxkIHRoZXJlIGJlIGEgcHJvYmxlbSB3aXRoIHRoZSBhcmd1bWVudHMgYmVpbmcgcGFzc2VkPyBUaGUgZGVzdGluYXRpb24gYWRkcmVzcyBmYW1pbHkgKEFGX0lORVQpLCB0aGUgcHJvdG9jb2wgdHlwZSAoU09DS19TVFJFQU0pPyBQZXJoYXBzIGFuIGlzc3VlIHdpdGggdGhlIGxvY2FsIHBvcnQgYmluZGluZyBvbiB0aGUgY2xpZW50IHNpZGUsIG9yIGV2ZW4gZmlyZXdhbGwgY29uZmlndXJhdGlvbnM/IElzIGl0IHRoZSAqc3lzdGVtIGNhbGwqIGl0c2VsZiwgb3Igc29tZXRoaW5nIGl0IGRlcGVuZHMgdXBvbiwgdGhhdOKAmXMgZmFpbGluZz8gSSBuZWVkIHRvIGFuYWx5emUgdGhpcyBmdXJ0aGVyLiBgdGNwX3Y0X2Nvbm5lY3RgIGlzIGEgY2xhc3NpYyBjYXNlIHN0dWR5IG9mIHByb3RvY29sIG9wZXJhdGlvbiBhbmQgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGluIGEgVENQL0lQIG5ldHdvcmssIGEgZnVuY3Rpb24gdGhhdCB3YXJyYW50cyBjbG9zZSBleGFtaW5hdGlvbiBpZiBhIGNvbm5lY3Rpb24gaXMgbm90IHN1Y2Nlc3NmdWxseSBlc3RhYmxpc2hlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyNzQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNToxOC4zMjg0MDQ0MjdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzk5Mjg3NTcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnRjcF92NF9jb25uZWN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNToyMC42NjgzNDMwNTNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgyOTUxNTA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuKipBbmFseXppbmcgdGhlIGB0Y3BfdjRfc3luX3JlY3Zfc29ja2AgU3ltYm9sKipcblxuQWxyaWdodCwgdGhlIGNvcmUgaXNzdWUgaXMgd2hldGhlciBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIG9yIG5vdC4gSXQncyBjcnVjaWFsIGZvciBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGNvZGUgb3BlcmF0ZXMuIFRoZSBrZXkgdGFrZWF3YXkgaXM6IGlmIGl0J3MgKm5vdCogc3RhdGljLCB0aGVuIGl0J2xsIGhhdmUgaXRzIG93biBzcGVjaWZpYywgdW5pcXVlIHN5bWJvbCBhZGRyZXNzLiBUaGF0J3MgZ29vZDsgaXQgbWVhbnMgSSBjYW4gdHJhY2UgaXQgbW9yZSByZWFkaWx5LlxuXG5TbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IGl0cyBkZWNsYXJhdGlvbi4gSSBuZWVkIHRvIHZlcmlmeSBpdHMgbG9jYXRpb24sIGFuZCBtYWtlIHN1cmUgaXQncyBpbiB0aGUgdXN1YWwgcGxhY2UuIEknbSBnb2luZyB0byBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSBpdHMgZGVmaW5pdGlvbiB3aXRoaW4gYG5ldC9pcHY0L3RjcF9pcHY0LmNgLiBJIGV4cGVjdCB0byBmaW5kIGl0IHRoZXJlLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZS4gVGhhdCdzIHRoZSBtb3N0IGNvbW1vbiBsb2NhdGlvbiwgYnV0IEknbSBub3QgZ29pbmcgdG8gYXNzdW1lIGFueXRoaW5nLiBDaGVja2luZyBpdCBpcyB0aGUgYmVzdCBzdGVwIHRvIGRvIGF0IHRoaXMgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjE0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzU6MjcuNDk3ODYwNzI2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTgxODM1NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBzb2NrIFxcXFwqdGNwX3Y0X3N5bl9yZWN2X3NvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvdGNwLmg9NTYwPXZvaWQgdGNwX2NhX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjU2MTpzdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmluY2x1ZGUvbmV0L3RjcC5oLTU2Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MTY1NT1pbnQgdGNwX3Y0X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE2NzMtICovXFxubmV0L2lwdjQvdGNwX2lwdjQuYzoxNjc0OnN0cnVjdCBzb2NrICp0Y3BfdjRfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNjc1LVxcdFxcdFxcdFxcdCAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNTozMC4wNzk3MDE2MTFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg0NzMyNDU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGRzdF9tZXRyaWNfYWR2bXNzYCBVc2FnZSoqXG5cbk9rYXksIHNvIEknbSBjb25maXJtaW5nIHRoYXQgd2UncmUgdGFsa2luZyBhYm91dCB0aGUgcmlnaHQgZnVuY3Rpb24gaGVyZS4gTm93LCBJIG5lZWQgdG8gc2VlICp3aGVyZSogdGhpcyBgZHN0X21ldHJpY19hZHZtc3NgIGlzIGJlaW5nIHVzZWQgaW4gdGhlIHN5c3RlbSwgdG8gdW5kZXJzdGFuZCBpdHMgZnVsbCBjb250ZXh0LiBMZXQncyBkbyBhIHF1aWNrIHNjYW4uIEFoLCBnb29kLCB0aGUgY29kZSBzZWFyY2ggdHVybnMgdXAgYSBmZXcgaW50ZXJlc3RpbmcgY2FsbHMuIGBjeGdiaV9zb2NrX3NlbGVjdF9tc3NgIGluIHRoZSBDWEdCSSBTQ1NJIGRyaXZlciwgYHRjcF9vcGVucmVxX2luaXRfcndpbmAgaW4gdGhlIFRDUCBpbml0aWFsaXphdGlvbiwgYW5kIGB4ZnJtX2RlZmF1bHRfYWR2bXNzYCB3aXRoaW4gdGhlIElQc2VjIGZyYW1ld29yay4gVGhhdCBnaXZlcyBtZSBhIG11Y2ggYmV0dGVyIHBpY3R1cmUuIFJpZ2h0LCBuZXh0IEknbGwgZm9jdXMgb24gYHRjcF9vcGVucmVxX2luaXRfcndpbmAsIHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBpbnRlZ3JhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODE1NiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNTozNi45MjcwMjg1OTRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjI4OTM2MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX29wZW5yZXFfaW5pdF9yd2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTE4MjM9c3RhdGljIGlubGluZSBib29sIHRjcF9lcG9sbGluX3JlYWR5KGNvbnN0IHN0cnVjdCBzb2NrICpzaywgaW50IHRhcmdldClcXG4tLVxcbmluY2x1ZGUvbmV0L3RjcC5oLTE4MzQtXFxuaW5jbHVkZS9uZXQvdGNwLmg6MTgzNTpleHRlcm4gdm9pZCB0Y3Bfb3BlbnJlcV9pbml0X3J3aW4oc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbmluY2x1ZGUvbmV0L3RjcC5oLTE4MzYtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc29jayAqc2tfbGlzdGVuZXIsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzc1OS1cXHR0Y3BfcnNrKHJlcSktXFx1MDAzZXN5bl90b3MgPSBUQ1BfU0tCX0NCKHNrYiktXFx1MDAzZWlwX2RzZmllbGQ7XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6Nzc2MDpcXHR0Y3Bfb3BlbnJlcV9pbml0X3J3aW4ocmVxLCBzaywgZHN0KTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzYxLVxcdHNrX3J4X3F1ZXVlX3NldChyZXFfdG9fc2socmVxKSwgc2tiKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz00MTI9dm9pZCB0Y3BfdHdza19wdXJnZShzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfZXhpdF9saXN0KVxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTQzMC0gKi9cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NDMxOnZvaWQgdGNwX29wZW5yZXFfaW5pdF9yd2luKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtNDMyLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzb2NrICpza19saXN0ZW5lcixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzU6MzguNTg5OTI5NTg4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MzM3MjA5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkZvY3VzaW5nIG9uIFRDUCBDb25uZWN0aW9uIEluaXRpYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyB6b29tIGluLiBJdCdzIGNsZWFyIHRoYXQgYHRjcF9vcGVucmVxX2luaXRfcndpbmAgaXMgZGlyZWN0bHkgaW52b2tlZCBieSBgdGNwX2Nvbm5fcmVxdWVzdGAuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0b3IuIGB0Y3BfY29ubl9yZXF1ZXN0YCBpdHNlbGYgc2VlbXMgdG8gYmUgdGhlIGNydWNpYWwgZW50cnkgcG9pbnQsIHRoZSByZWFsIGhlYXJ0IG9mIHRoZSBjb25uZWN0aW9uIGluaXRpYXRpb24gcHJvY2Vzcy4gSXQncyB0aGUgcmlnaHQgcGxhY2UgdG8gcHV0IG91ciBhdHRlbnRpb24sIHRvIGRpc3NlY3QgdGhlIG9yY2hlc3RyYXRpb24gb2YgZXZlbnRzIGFuZCB1bmRlcnN0YW5kIGhvdyBldmVyeXRoaW5nIGlzIHNldCB1cCB0byByZWNlaXZlIGRhdGEuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgcmVjZWl2ZSB3aW5kb3cgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSByaWdodCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgY29ubmVjdGlvbiBzZXR1cCwgYmVmb3JlIG11Y2ggZWxzZSBpcyBoYW5kbGVkLCB3aGljaCBtYWtlcyBsb2dpY2FsIHNlbnNlLCBpbiB0ZXJtcyBvZiByZXNvdXJjZSBwcmVwYXJhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGF0IHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgYW5kIGhvdyB0aGUgYHJ3aW5gIGlzIGhhbmRsZWQgaGVyZSB3aWxsIHRlbGwgdXMgYSBsb3QgYWJvdXQgdGhlIG92ZXJhbGwgY29ubmVjdGlvbiBzdHJhdGVneS4gV2UgbmVlZCB0byBmb2xsb3cgdGhlIGV4ZWN1dGlvbiBwYXRoIGNsb3NlbHkgZnJvbSB0aGlzIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg3MCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM1OjQ1LjQyMzY1MzkxMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MzMzMzEzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfY29ubl9yZXF1ZXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTI0Njc9aW50IHRjcF9ydHhfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcXG5pbmNsdWRlL25ldC90Y3AuaDoyNDY4OmludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxcbmluY2x1ZGUvbmV0L3RjcC5oLTI0NjktXFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja19vcHMgKmFmX29wcyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jPTMyNj1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMzgwLVxcdHRwLVxcdTAwM2VyY3ZfbXduZF9zZXEgPSB0cC1cXHUwMDNlcmN2X3d1cCArIHRwLVxcdTAwM2VyY3Zfd25kO1xcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jOjM4MTpcXHQvKiB0Y3BfY29ubl9yZXF1ZXN0KCkgaXMgc2VuZGluZyB0aGUgU1lOQUNLLFxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTM4Mi1cXHQgKiBhbmQgcXVldWVzIHRoZSBjaGlsZCBpbnRvIGxpc3RlbmVyIGFjY2VwdCBxdWV1ZS5cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc1OTQ9dTE2IHRjcF9nZXRfc3luY29va2llX21zcyhzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2MTktXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzYyMDppbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjIxLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzICphZl9vcHMsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTE2NTU9aW50IHRjcF92NF9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNjYwLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTY2MTpcXHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcXHUwMDI2dGNwX3JlcXVlc3Rfc29ja19vcHMsXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNjYyLVxcdFxcdFxcdFxcdFxcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX2lwdjRfb3BzLCBzaywgc2tiKTtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTMxNj1zdGF0aWMgaW50IHRjcF92Nl9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzI4LVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTMyOTpcXHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcXHUwMDI2dGNwNl9yZXF1ZXN0X3NvY2tfb3BzLFxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTMzMC1cXHRcXHRcXHRcXHRcXHUwMDI2dGNwX3JlcXVlc3Rfc29ja19pcHY2X29wcywgc2ssIHNrYik7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTY2OT1zdGF0aWMgaW50IHN1YmZsb3dfdjRfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjc4LVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6Njc5OlxcdHJldHVybiB0Y3BfY29ubl9yZXF1ZXN0KFxcdTAwMjZtcHRjcF9zdWJmbG93X3Y0X3JlcXVlc3Rfc29ja19vcHMsXFxubmV0L21wdGNwL3N1YmZsb3cuYy02ODAtXFx0XFx0XFx0XFx0XFx1MDAyNnN1YmZsb3dfcmVxdWVzdF9zb2NrX2lwdjRfb3BzLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz03MDA9c3RhdGljIGludCBzdWJmbG93X3Y2X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTcxNi1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjcxNzpcXHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcXHUwMDI2bXB0Y3Bfc3ViZmxvd192Nl9yZXF1ZXN0X3NvY2tfb3BzLFxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzE4LVxcdFxcdFxcdFxcdFxcdTAwMjZzdWJmbG93X3JlcXVlc3Rfc29ja19pcHY2X29wcywgc2ssIHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM1OjQ3LjA5Njk5MzkyNVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjQyNjE0MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUQ1AgQ29ubmVjdGlvbiBFc3RhYmxpc2htZW50KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHdoZXJlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgVENQIGNvbm5lY3Rpb24gcHJvY2Vzcy4gYHRjcF9jb25uX3JlcXVlc3RgIGltbWVkaWF0ZWx5IGp1bXBzIG91dC4gSXQncyB0aGUgcG9pbnQgd2hlcmUgdGhlIGluY29taW5nIFNZTiBwYWNrZXRzIGFyZSBwcm9jZXNzZWQsIGFuZCBpdCBoYW5kbGVzIHRoZSBpbml0aWFsIHJlcXVlc3Qgc29ja2V0IHNldHVwLCBpbmNsdWRpbmcgY2FsY3VsYXRpbmcgdGhlIE1heGltdW0gU2VnbWVudCBTaXplLiBUaGF0IHNvdW5kcyBsaWtlIGEgcHJldHR5IGNyaXRpY2FsIGZ1bmN0aW9uLlxuXG5UaGVyZWZvcmUsIHRoZSBmdW5jdGlvbnMgSSByZWFsbHkgd2FudCB0byBmb2N1cyBvbiBhcmU6IGB0Y3BfY29ubmVjdGAsIHdoaWNoIGluaXRpYXRlcyB0aGUgY29ubmVjdGlvbiwgdGhlbiwgb2YgY291cnNlLCAgYHRjcF9jb25uX3JlcXVlc3RgIGl0c2VsZiwgd2hpY2ggc2VlbXMga2V5IHRvIHRoZSBzZXJ2ZXItc2lkZSwgdGhlbiBgdGNwX21ha2Vfc3luYWNrYCBhcyBpdCBzZWVtcyB0byBiZSBpbXBvcnRhbnQsIGFuZCBsYXN0bHkgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCAtIHRoYXQncyBhIGtleSBmdW5jdGlvbiBpbiBoYW5kbGluZyB0aGUgU1lOL0FDSywgaXNuJ3QgaXQ/XG5cblJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSBgdGNwX2Nvbm5fcmVxdWVzdGAgaXMgZXhwb3J0ZWQuIE5lZWQgdG8gY29uZmlybSB0aGF0IGJlZm9yZSBJIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwNDQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNTo1My43Mzk2MTE2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzIyMDU0ODk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLip0Y3BfY29ubl9yZXF1ZXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNTo1Ni4wNjE2NzQ4NjdaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcxODQyODgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiB0aGlzIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBpc24ndCBhIHNpbXBsZSBzdGF0aWMgdmFyaWFibGUgd2UncmUgZGVhbGluZyB3aXRoOyBpdCdzIG1vcmUgZHluYW1pYyB0aGFuIHRoYXQsIHdoaWNoIGlzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLiBMZXQncyBkaWcgaW4gYW5kIHNlZSBob3cgdGhpcyB3b3Jrcy4gSSdsbCB0YWtlIGEgbG9vayBhdCBgdGNwX3Y0X2Nvbm5fcmVxdWVzdGAgYW5kIGB0Y3BfdjZfY29ubl9yZXF1ZXN0YCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoaW5ncy4gUmlnaHQsIGB0Y3BfdjRfY29ubl9yZXF1ZXN0YCBpc24ndCBzdGF0aWMsIGJ1dCBgdGNwX3Y2X2Nvbm5fcmVxdWVzdGAgaXMuIFNvLCB3ZSBoYXZlIGEgbGlzdCBvZiBwb3RlbnRpYWxseSByZWxldmFudCBmdW5jdGlvbnMgdG8gZXhhbWluZSBmdXJ0aGVyOiBgdGNwX2Nvbm5lY3RgLCBgdGNwX2Nvbm5fcmVxdWVzdGAsIGB0Y3BfbWFrZV9zeW5hY2tgLCBhbmQgYHRjcF92NF9zeW5fcmVjdl9zb2NrYC5cblxuTm93LCBJIG5lZWQgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIGhhcyBhbnkgd2lkZXIgcmlwcGxlIGVmZmVjdHMuIEFyZSBgaXBfZHN0X210dV9jb25maWd1cmVkYCBvciBgaXA2X2RzdF9tdHVfY29uZmlndXJlZGAgdXNlZCAqYW55d2hlcmUqIGVsc2U/IE5vLCBpdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgaXNvbGF0ZWQgdG8gbW9kaWZ5aW5nIGBpcHY0X2RlZmF1bHRfYWR2bXNzYCBhbmQgYGlwNl9kZWZhdWx0X2Fkdm1zc2AsIHdoaWNoIGlzIGhlbHBmdWwuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlnIG9wdGlvbnMuIFRoZSBwYXRjaCBtb2RpZmllcyBgbmV0L2lwdjQvcm91dGUuY2AgYW5kIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gU28sIGlmIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfSVBWNmAgYXJlIGVuYWJsZWQsIHRoZXNlIGZpbGVzIGFyZSBjb21waWxlZC4gV2UgYWxyZWFkeSBrbm93IHRoYXQgYENPTkZJR19JTkVUYCBpcyBhbHdheXMgZW5hYmxlZCBpbiBMaW51eCBuZXR3b3JraW5nLCBhbmQgYENPTkZJR19JUFY2YCBzZWVtcyBsaWtlIGEgcHJldHR5IHNhZmUgYmV0IHRvIGluY2x1ZGUuIExldCBtZSBjaGVjayBhbmQgbWFrZSBzdXJlIHRoYXQgYElQVjZgIGlzIGFjdHVhbGx5IG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAzNzMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzY6MDIuNzgwMTA3MjYxWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk0Mzc5NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWctNS1cXG5uZXQvaXB2Ni9LY29uZmlnOjY6bWVudWNvbmZpZyBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlRoZSBJUHY2IHByb3RvY29sXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xOT1pZiBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZy0yMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxOmNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXFxubmV0L2lwdjYvS2NvbmZpZy0yMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxcbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L0tjb25maWctMzItXFx0Ym9vbCBcXFwiSVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zOC1cXG5uZXQvaXB2Ni9LY29uZmlnOjM5OmNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXFxubmV0L2lwdjYvS2NvbmZpZy00MC1cXHRib29sIFxcXCJJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjExMjpjb25maWcgSVBWNl9NSVA2XFxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IE1vYmlsaXR5XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMTktXFxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXFxubmV0L2lwdjYvS2NvbmZpZy0xMjEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xNDY9Y29uZmlnIElORVQ2X1RVTk5FTFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNDktXFxubmV0L2lwdjYvS2NvbmZpZzoxNTA6Y29uZmlnIElQVjZfVlRJXFxubmV0L2lwdjYvS2NvbmZpZy0xNTEtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgKHNlY3VyZSkgSVB2NjogdHVubmVsaW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNjEtXFxubmV0L2lwdjYvS2NvbmZpZzoxNjI6Y29uZmlnIElQVjZfU0lUXFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQdjYtaW4tSVB2NCB0dW5uZWwgKFNJVCBkcml2ZXIpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xNzYtXFxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxcbm5ldC9pcHY2L0tjb25maWctMTc4LVxcdGJvb2wgXFxcIklQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTk1LVxcbm5ldC9pcHY2L0tjb25maWc6MTk2OmNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXFxubmV0L2lwdjYvS2NvbmZpZy0xOTctXFx0Ym9vbFxcbm5ldC9pcHY2L0tjb25maWctMTk4LVxcbm5ldC9pcHY2L0tjb25maWc6MTk5OmNvbmZpZyBJUFY2X1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjAwLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUC1pbi1JUHY2IHR1bm5lbCAoUkZDMjQ3MylcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogR1JFIHR1bm5lbFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjI3LVxcbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxcbm5ldC9pcHY2L0tjb25maWctMjI5LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIzMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjM2LVxcbm5ldC9pcHY2L0tjb25maWc6MjM3OmNvbmZpZyBJUFY2X01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjM4LVxcdGJvb2wgXFxcIklQdjY6IE11bHRpcGxlIFJvdXRpbmcgVGFibGVzXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNDItXFxubmV0L2lwdjYvS2NvbmZpZzoyNDM6Y29uZmlnIElQVjZfU1VCVFJFRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI0NC1cXHRib29sIFxcXCJJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXFxubmV0L2lwdjYvS2NvbmZpZzoyNTc6Y29uZmlnIElQVjZfTVJPVVRFXFxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI2NC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yNjYtXFx0Ym9vbCBcXFwiSVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNzgtXFxubmV0L2lwdjYvS2NvbmZpZzoyNzk6Y29uZmlnIElQVjZfUElNU01fVjJcXG5uZXQvaXB2Ni9LY29uZmlnLTI4MC1cXHRib29sIFxcXCJJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yODctXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMwMDpjb25maWcgSVBWNl9TRUc2X0hNQUNcXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSE1BQyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMTEtXFxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cXHRkZWZfYm9vbCB5XFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxNzpjb25maWcgSVBWNl9SUExfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTMxOC1cXHRib29sIFxcXCJJUHY2OiBSUEwgU291cmNlIFJvdXRpbmcgSGVhZGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMyNy1cXG5uZXQvaXB2Ni9LY29uZmlnOjMyODpjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzI5LVxcdGJvb2wgXFxcIklQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDc6MzY6MDQuNDc0NDk3ODE0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0NTUzOTg0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRDUCBNU1MgUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGJyZWFrZG93bi4gVGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyBob3cgd2UgY2FsY3VsYXRlIGFuZCBhZHZlcnRpc2UgdGhlIFRDUCBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSBpbiBib3RoIElQdjQgYW5kIElQdjYuIEl0J3MgZXNzZW50aWFsbHkgaW50cm9kdWNpbmcgYGlwX2RzdF9tdHVfY29uZmlndXJlZGAgYW5kIGBpcDZfZHN0X210dV9jb25maWd1cmVkYCB0byBieXBhc3MgSUNNUC1kZXJpdmVkIFBhdGggTVRVIChQTVRVKSBhbmQgaW5zdGVhZCB1c2UgdGhlIGNvbmZpZ3VyZWQgcm91dGUgb3IgZGV2aWNlIE1UVS4gVGhpcyBjaGFuZ2UgZGlyZWN0bHkgaW1wYWN0cyB0aGUgTVNTIHZhbHVlcyBzZW50IGR1cmluZyB0aGUgY29ubmVjdGlvbiBzZXR1cCBwcm9jZXNzIOKAkyB0aGUgU1lOIGFuZCBTWU4tQUNLIHBhY2tldHMuIEdpdmVuIGl0cyBjb3JlIG5ldHdvcmtpbmcgbmF0dXJlIGFuZCB0aGUgcG90ZW50aWFsIGZ1bmN0aW9uYWwgc2hpZnQgaW4gTVNTIGRldGVybWluYXRpb24sIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyB3aWxsIGJlIG9uIHRoZXNlIGZ1bmN0aW9ucywgZ2l2ZW4gdGhlIHBhdGNoJ3Mgc2NvcGU6XG5cbiogICBgdGNwX2Nvbm5lY3RgXG4qICAgYHRjcF9jb25uX3JlcXVlc3RgXG4qICAgYHRjcF9tYWtlX3N5bmFja2BcbiogICBgdGNwX3Y0X3N5bl9yZWN2X3NvY2tgXG5cbkkndmUgY29uZmlybWVkIHRoYXQgdGhlIGBJUFY2YCBjb25maWcgaXMgdGhlIHJlbGV2YW50IG9uZSBoZXJlLiBJIGFsc28gZG91YmxlLWNoZWNrZWQgYW5kIHZlcmlmaWVkIHRoYXQgdGhlIHBhdGNoIHRvdWNoZXMgYG5ldC9pcHY0L3JvdXRlLmNgIGFuZCBgbmV0L2lwdjYvcm91dGUuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVyZSBhcmVuJ3QgYW55IG90aGVyIGNydWNpYWwgY29uZmlncyBuZWVkZWQgZm9yIHRoaXMgYW5hbHlzaXMuXG5cbkkndmUgYWxzbyB2YWxpZGF0ZWQgdGhhdCBgdGNwX2Nvbm5fcmVxdWVzdGAgaXMgaW5kZWVkIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSXQncyB1c2VkIGZvciBib3RoIElQdjQgYW5kIElQdjYgdmlhIHRoZSBgdGNwX3Y0X2Nvbm5fcmVxdWVzdGAgYW5kIGB0Y3BfdjZfY29ubl9yZXF1ZXN0YCBmdW5jdGlvbnMsIGFuZCBjcnVjaWFsbHksIGl0IGNhbGxzIGB0Y3Bfb3BlbnJlcV9pbml0X3J3aW5gLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBkc3RfbWV0cmljX2Fkdm1zc2AuIFRoaXMgaXMgYSBkaXJlY3QgZW50cnkgcG9pbnQgZm9yIG1hbmlwdWxhdGluZyB0aGUgTVNTIGNhbGN1bGF0aW9uLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUuXG5cbkFzIGZvciB0aGUgcmVtYWluaW5nIGZ1bmN0aW9ucywgYHRjcF92NF9zeW5fcmVjdl9zb2NrYCBpcyB1c2VkIGZvciBJUHY0LCBhbmQgYWxzbyBmb3IgSVB2NC1tYXBwZWQgSVB2NiBhZGRyZXNzZXMsIHNvIHRoYXQgc2VlbXMgb2suIGB0Y3BfdjZfc3luX3JlY3Zfc29ja2AgaXMgdGhlcmUgZm9yIElQdjYsIGJ1dCBpcyBzdGF0aWMsIHdoaWNoIGlzIHdvcnRoIGNvbnNpZGVyaW5nLiBUaGUgb3RoZXIgZnVuY3Rpb25zIGB0Y3BfbWFrZV9zeW5hY2tgIGFuZCBgdGNwX2Nvbm5lY3RgIGFsc28gaGF2ZSB2ZXJzaW9ucyB0aGF0IGFyZSBjYWxsZWQgZm9yIGJvdGggSVB2NCBhbmQgSVB2NiByZXNwZWN0aXZlbHkuXG5cbkdpdmVuIHRoaXMgYW5hbHlzaXMsIG15IGZ1bmN0aW9uIGxpc3QgaXMgc29saWQuIEknbSByZWFkeSB0byBwcm9jZWVkLiBOb3csIEkgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTU3LCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNjoxMi45Mjk4OTkyNTJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjgwODE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9jb25uZWN0XCIsXG4gICAgXCJ0Y3BfY29ubl9yZXF1ZXN0XCIsXG4gICAgXCJ0Y3BfbWFrZV9zeW5hY2tcIixcbiAgICBcInRjcF92NF9zeW5fcmVjdl9zb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIFRDUCBNU1MgaW4gSVB2NCBhbmQgSVB2Ni4gSXQgaW50cm9kdWNlcyBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgIHRvIGlnbm9yZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgYW5kIGluc3RlYWQgdXNlIHRoZSBjb25maWd1cmVkIHJvdXRlIG9yIGRldmljZSBNVFUuIFRoaXMgYWZmZWN0cyB0aGUgVENQIE1TUyBhZHZlcnRpc2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwIChTWU4vU1lOLUFDSykuIFRoZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIGZ1bmN0aW9uYWxseSBhbHRlciBob3cgTVNTIGlzIGRldGVybWluZWQsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9jb25uZWN0XCIsXG4gICAgXCJ0Y3BfY29ubl9yZXF1ZXN0XCIsXG4gICAgXCJ0Y3BfbWFrZV9zeW5hY2tcIixcbiAgICBcInRjcF92NF9zeW5fcmVjdl9zb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIFRDUCBNU1MgaW4gSVB2NCBhbmQgSVB2Ni4gSXQgaW50cm9kdWNlcyBgaXBfZHN0X210dV9jb25maWd1cmVkYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWRgIHRvIGlnbm9yZSBJQ01QLWxlYXJuZWQgcGF0aCBNVFUgYW5kIGluc3RlYWQgdXNlIHRoZSBjb25maWd1cmVkIHJvdXRlIG9yIGRldmljZSBNVFUuIFRoaXMgYWZmZWN0cyB0aGUgVENQIE1TUyBhZHZlcnRpc2VkIGR1cmluZyBjb25uZWN0aW9uIHNldHVwIChTWU4vU1lOLUFDSykuIFRoZSBjaGFuZ2VzIGFyZSBpbiBjb3JlIG5ldHdvcmtpbmcgYW5kIGZ1bmN0aW9uYWxseSBhbHRlciBob3cgTVNTIGlzIGRldGVybWluZWQsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM2OjEzLjAwMjcxNDA2MVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMjc2MDk1NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwNzozNjoxMy4wMDMyODE5NjFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTExMjcwMzc5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgYWR2ZXJ0aXNlZCBUQ1AgTVNTIGJ5IGludHJvZHVjaW5nIGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoKWAgYW5kIGBpcDZfZHN0X210dV9jb25maWd1cmVkKClgLiBUaGVzZSBmdW5jdGlvbnMgcmVhZCBleGlzdGluZywgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gcm91dGluZyBhbmQgZGV2aWNlIHN0cnVjdHVyZXMgKGBkc3RfZW50cnlgLCBgcnQ2X2luZm9gLCBgZmliNl9pbmZvYCwgYG5ldF9kZXZpY2VgLCBgaW5ldDZfZGV2YCkgdG8gZGV0ZXJtaW5lIHRoZSBjb25maWd1cmVkIE1UVSwgaWdub3JpbmcgSUNNUC1sZWFybmVkIHBhdGggTVRVLiBUaGVyZSBhcmUgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBuZXcgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCwgc3VjaCBhcyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzhkNjc0Yjk4Yzg1OWM3ZjNhNjJjMWNjNGY3YmU5ODMwZGM4NTMxOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDA3OjMzOjEzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmhcbmluZGV4IDdmMmZlMWE4NDAxYjEuLmE4ZjU3YjRmNGFhMjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcC5oXG4rKysgYi9pbmNsdWRlL25ldC9pcC5oXG5AQCAtNTA2LDYgKzUwNiwzMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9kc3RfbXR1X21heWJlX2ZvcndhcmQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuIFx0cmV0dXJuIHJlcztcbiB9XG4gXG4rLyogQ29uZmlndXJlZC9hZG1pbmlzdHJhdGl2ZSBNVFUgb2YgYSByb3V0ZSwgZm9yIGFkdmVydGlzaW5nIHRoZSBUQ1AgTVNTLlxuKyAqXG4rICogVW5saWtlIGlwX2RzdF9tdHVfbWF5YmVfZm9yd2FyZCgpLCB0aGlzIGRlbGliZXJhdGVseSBpZ25vcmVzIHRoZVxuKyAqIElDTVAtbGVhcm5lZCBwYXRoIE1UVSAocnQtXHUwMDNlcnRfcG10dSkuICBUaGUgYWR2ZXJ0aXNlZCBNU1MgYm91bmRzIHdoYXQgdGhlXG4rICogcGVlciBtYXkgc2VuZCB0byB1cyBhbmQgbXVzdCByZWZsZWN0IG91ciByZWNlaXZlIGNhcGFiaWxpdHkgKHRoZSBkZXZpY2Ugb3JcbisgKiByb3V0ZS1jb25maWd1cmVkIE1UVSksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpXG4rICogZGlyZWN0aW9uLCB3aGljaCBtYXkgbm90IGFwcGx5IHRvIHRoZSBwZWVyLVx1MDAzZXVzIHBhdGggYW5kIG91dGxpdmVzIHRoZSBmbmhlXG4rICogZm9yIHRoZSB3aG9sZSBjb25uZWN0aW9uLiAgU2VlIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZVxuKyAqIHRjcF9hZHZlcnRpc2VfbXNzKCkuXG4rICovXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXBfZHN0X210dV9jb25maWd1cmVkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbit7XG4rXHR1bnNpZ25lZCBpbnQgbXR1LCByZXM7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRtdHUgPSBkc3RfbWV0cmljX3Jhdyhkc3QsIFJUQVhfTVRVKTtcbitcdGlmICghbXR1KVxuK1x0XHRtdHUgPSBSRUFEX09OQ0UoZHN0X2Rldl9yY3UoZHN0KS1cdTAwM2VtdHUpO1xuK1x0bXR1ID0gbWluX3QodW5zaWduZWQgaW50LCBtdHUsIElQX01BWF9NVFUpO1xuK1x0cmVzID0gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcF9za2JfZHN0X210dShzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuaW5kZXggMDlmZmUwZjEzY2U3NS4uYWMxYWNjMGI3NDM2OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxuQEAgLTM4NSw2ICszODUsNDMgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaXA2X2RzdF9tdHVfbWF5YmVfZm9yd2FyZChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RcbiBcdHJldHVybiBtdHUgLSBsd3R1bm5lbF9oZWFkcm9vbShkc3QtXHUwMDNlbHd0c3RhdGUsIG10dSk7XG4gfVxuIFxuKy8qIENvbmZpZ3VyZWQvYWRtaW5pc3RyYXRpdmUgTVRVIG9mIGEgcm91dGUsIGZvciBhZHZlcnRpc2luZyB0aGUgVENQIE1TUy5cbisgKlxuKyAqIFVubGlrZSBpcDZfZHN0X210dV9tYXliZV9mb3J3YXJkKCksIHRoaXMgaWdub3JlcyBhbnkgSUNNUHY2LWxlYXJuZWQgcGF0aFxuKyAqIE1UVSAod2hpY2ggaXMga2VwdCBvbiB0aGUgUlRGX0NBQ0hFIGV4Y2VwdGlvbiByb3V0ZSkgYW5kIHJldHVybnMgdGhlIE1UVSBvZlxuKyAqIHRoZSB1bmRlcmx5aW5nIHJvdXRlIChmaWI2X3BtdHUpIG9yIHRoZSBlZ3Jlc3MgZGV2aWNlLiAgVGhlIGFkdmVydGlzZWQgTVNTXG4rICogYm91bmRzIHdoYXQgdGhlIHBlZXIgbWF5IHNlbmQgdG8gdXMgYW5kIG11c3QgcmVmbGVjdCBvdXIgcmVjZWl2ZVxuKyAqIGNhcGFiaWxpdHksIG5vdCBhIHBhdGggTVRVIGxlYXJuZWQgb24gdGhlIHJldmVyc2UgKHNlbmQpIGRpcmVjdGlvbi4gIFNlZVxuKyAqIFJGQyAyOTIzIHNlY3Rpb24gMi4zIGFuZCB0aGUgY29tbWVudCBhYm92ZSB0Y3BfYWR2ZXJ0aXNlX21zcygpLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuK3tcbitcdGNvbnN0IHN0cnVjdCBydDZfaW5mbyAqcnQgPSBkc3RfcnQ2X2luZm8oZHN0KTtcbitcdGNvbnN0IHN0cnVjdCBmaWI2X2luZm8gKmZyb207XG4rXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xuK1x0dW5zaWduZWQgaW50IG10dSA9IDA7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHQvKiBJUHY2IGtlZXBzIHRoZSBsZWFybmVkIFBNVFUgYW5kIHRoZSBjb25maWd1cmVkIE1UVSBpbiB0aGUgc2FtZVxuK1x0ICogUlRBWF9NVFUgc2xvdDogdGhlIGxlYXJuZWQgdmFsdWUgc2l0cyBvbiB0aGlzIChwb3NzaWJseSBSVEZfQ0FDSEUpXG4rXHQgKiBkc3QsIHRoZSBjb25maWd1cmVkIG9uZSBvbiB0aGUgdW5kZXJseWluZyByb3V0ZS4gIFJlYWNoIHRoZSBsYXR0ZXJcbitcdCAqIHZpYSAtXHUwMDNlZnJvbSAoZmliNl9wbXR1KSwgcG9wdWxhdGVkIGJ5IGlwNl9yb3V0ZV9pbmZvX2NyZWF0ZSgpLlxuK1x0ICovXG4rXHRmcm9tID0gcmN1X2RlcmVmZXJlbmNlKHJ0LVx1MDAzZWZyb20pO1xuK1x0aWYgKGZyb20pXG4rXHRcdG10dSA9IGZyb20tXHUwMDNlZmliNl9wbXR1O1xuK1x0aWYgKCFtdHUpIHtcbitcdFx0bXR1ID0gSVBWNl9NSU5fTVRVO1xuK1x0XHRpZGV2ID0gX19pbjZfZGV2X2dldChkc3RfZGV2X3JjdShkc3QpKTtcbitcdFx0aWYgKGlkZXYpXG4rXHRcdFx0bXR1ID0gbWF4X3QodW5zaWduZWQgaW50LCBtdHUsIFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5tdHU2KSk7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdG10dSA9IG1pbl90KHVuc2lnbmVkIGludCwgbXR1LCBJUDZfTUFYX01UVSk7XG4rXHRyZXR1cm4gbXR1IC0gbHd0dW5uZWxfaGVhZHJvb20oZHN0LVx1MDAzZWx3dHN0YXRlLCBtdHUpO1xuK31cbitcbiB1MzIgaXA2X210dV9mcm9tX2ZpYjYoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsXG4gXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsXG4gXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jXG5pbmRleCBmZDY4OGUxZjg3OWY1Li40NmFhOThjOTIxODMzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvcm91dGUuY1xuKysrIGIvbmV0L2lwdjQvcm91dGUuY1xuQEAgLTEzMzQsOCArMTMzNCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXB2NF9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRuZXQgPSBkc3RfZGV2X25ldF9yY3UoZHN0KTtcbi1cdGFkdm1zcyA9IG1heF90KHVuc2lnbmVkIGludCwgaXB2NF9tdHUoZHN0KSAtIGhlYWRlcl9zaXplLFxuLVx0XHRcdFx0ICAgbmV0LVx1MDAzZWlwdjQuaXBfcnRfbWluX2Fkdm1zcyk7XG4rXHRhZHZtc3MgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGlwX2RzdF9tdHVfY29uZmlndXJlZChkc3QpIC0gaGVhZGVyX3NpemUsXG4rXHRcdCAgICAgICBuZXQtXHUwMDNlaXB2NC5pcF9ydF9taW5fYWR2bXNzKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIG1pbihhZHZtc3MsIElQVjRfTUFYX1BNVFUgLSBoZWFkZXJfc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmNcbmluZGV4IDU5NjhjZTVhZDE1MDguLmUyMDU2YmQwZGYzYzQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5AQCAtMzI2MSw3ICszMjYxLDcgQEAgdm9pZCBpcDZfc2tfcmVkaXJlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2X2RlZmF1bHRfYWR2bXNzKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbXR1ID0gZHN0Nl9tdHUoZHN0KTtcbitcdHVuc2lnbmVkIGludCBtdHUgPSBpcDZfZHN0X210dV9jb25maWd1cmVkKGRzdCk7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQ7XG4gXG4gXHRtdHUgLT0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM2OjEzLjAwMzI4MjYxMVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTEyNzAxNDY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBzd2l0Y2hpbmcgdGhpbmdzIHVwIHdpdGggaG93IHdlIGNhbGN1bGF0ZSB0aGUgYWR2ZXJ0aXNlZCBUQ1AgTVNTLCBzcGVjaWZpY2FsbHkgYnkgdXNpbmcgdGhlc2UgbmV3IGBpcF9kc3RfbXR1X2NvbmZpZ3VyZWQoKWAgYW5kIGBpcDZfZHN0X210dV9jb25maWd1cmVkKClgIGZ1bmN0aW9ucyBpbiBgaXB2NF9kZWZhdWx0X2Fkdm1zcygpYCBhbmQgYGlwNl9kZWZhdWx0X2Fkdm1zcygpYC4gVGhlIHdob2xlIHBvaW50IGlzIHRvIGlnbm9yZSBwYXRoIE1UVSBsZWFybmVkIHZpYSBJQ01QLCB3aGljaCBtYWtlcyBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiB0dW5pbmcgVENQIGJlaGF2aW9yLlxuXG5MZXQncyBicmVhayBkb3duIHRoZSBkYXRhIGZsb3cuIEZvciBJUHY0LCB0aGUgcGF0Y2ggbm93IGdyYWJzIHRoZSBNVFUgZnJvbSBgZHN0X21ldHJpY19yYXcoZHN0LCBSVEFYX01UVSlgIGFuZCBgZHN0X2Rldl9yY3UoZHN0KS1cdTAwM2VtdHVgLiBGb3IgSVB2NiwgaXQncyBwdWxsaW5nIGZyb20gYHJ0LVx1MDAzZWZyb20tXHUwMDNlZmliNl9wbXR1YCBhbmQgYGlkZXYtXHUwMDNlY25mLm10dTZgLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZXNlIHZhbHVlcyBhcmUgYmVpbmcgdXNlZCB0byBjb21wdXRlIGBhZHZtc3NgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcz8gQWZ0ZXIgbG9va2luZyBpbnRvIGl0LCBJIGNhbiBzZWUgdGhhdCB0aGUgcGF0Y2ggZG9lc24ndCBpbnZvbHZlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLiBJdCdzIGp1c3QgbW9kaWZ5aW5nIGhvdyB3ZSAqcmVhZCogdGhlIE1UVSBpbmZvcm1hdGlvbiBmcm9tIGV4aXN0aW5nLCBhbHJlYWR5IGluaXRpYWxpemVkIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBuZXR3b3JrIHN0YWNrLiBTcGVjaWZpY2FsbHkgd2UncmUgcmVhZGluZyBgZHN0X2VudHJ5YCwgYHJ0Nl9pbmZvYCwgYGZpYjZfaW5mb2AsIGBpbmV0Nl9kZXZgIGZpZWxkcyB0byBnZXQgdGhlIHZhbHVlcyBmcm9tLiBJJ20gcHJldHR5IGNvbmZpZGVudCB0aGVyZSdzIG5vIHdheSB0aGlzIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYSB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLlxuXG5UaGUgdmFyaWFibGVzIGJlaW5nIHJlYWQgYXJlIHN0YW5kYXJkIGZpZWxkcyB3aXRoaW4gdGhlaXIgcmVzcGVjdGl2ZSBzdHJ1Y3RzOyBgZHN0LVx1MDAzZW1ldHJpY3NgLCBgbmV0X2RldmljZS1cdTAwM2VtdHVgLCBgZmliNl9pbmZvYCwgYW5kIGBpbmV0Nl9kZXZgIGFuZCBhcmUgYWxsIHByaW1pdGl2ZSB0eXBlcy4gU3RhbmRhcmQgY2hlY2tzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAgd2lsbCBiZSBlbm91Z2ggdG8gY2F0Y2ggYW55IGJ1Z3MgaW4gdGhlIGxvZ2ljIGNoYW5nZSBpZiB0aGV5IHdlcmUgaW50cm9kdWNlZC4gS01TQU4gaXMgZ3JlYXQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgYnV0IGl0J3Mgbm90IGFwcGxpY2FibGUgaGVyZS5cblxuVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBqdXN0IHdlbnQgdGhyb3VnaCB0aGUgZmllbGRzLiBgZHN0X21ldHJpY19yYXdgIGFjY2Vzc2VzIGBkc3QtXHUwMDNlbWV0cmljc2AuIGBkc3RfZGV2X3JjdShkc3QpLVx1MDAzZW10dWAgcmVhZHMgZnJvbSBgbmV0X2RldmljZS1cdTAwM2VtdHVgLiBgcnQtXHUwMDNlZnJvbWAgZGVyZWZlcmVuY2VzIGEgYGZpYjZfaW5mb2AgcG9pbnRlci4gYGZyb20tXHUwMDNlZmliNl9wbXR1YCBpcyBhIGB1MzJgLiBgaWRldi1cdTAwM2VjbmYubXR1NmAgaXMgYW4gYHMzMmAuIEFsbCBvZiB0aGVzZSBhcmUgaW5pdGlhbGl6ZWQgZmllbGRzLCBzbyBubywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5JbiBzaG9ydCwgbXkgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBjaGFuZ2VzIE1UVSBjYWxjdWxhdGlvbiwgcmVhZGluZyBleGlzdGluZyBhbmQgaW5pdGlhbGl6ZWQgZmllbGRzIGZyb20gYGRzdF9lbnRyeWAsIGBydDZfaW5mb2AsIGBmaWI2X2luZm9gLCBgbmV0X2RldmljZWAgYW5kIGBpbmV0Nl9kZXZgIGZvciBJUHY0IGFuZCBJUHY2IHRvIGRldGVybWluZSB0aGUgY29uZmlndXJlZCBNVFUuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBvdGhlcndpc2UgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgYnVnIGRldGVjdG9ycyB3aWxsIGhhbmRsZSBhbnkgcHJvYmxlbXMgdGhhdCBtaWdodCBhcmlzZSBmcm9tIHRoZSBwYXRjaC4gTm8gS01TQU4gaXMgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDY4LCJPdXRwdXRUb2tlbnMiOjE5MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDA3OjM2OjI0LjEzMDMwMDkyMloiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBhZHZlcnRpc2VkIFRDUCBNU1MgYnkgaW50cm9kdWNpbmcgYGlwX2RzdF9tdHVfY29uZmlndXJlZCgpYCBhbmQgYGlwNl9kc3RfbXR1X2NvbmZpZ3VyZWQoKWAuIFRoZXNlIGZ1bmN0aW9ucyByZWFkIGV4aXN0aW5nLCBpbml0aWFsaXplZCBmaWVsZHMgZnJvbSByb3V0aW5nIGFuZCBkZXZpY2Ugc3RydWN0dXJlcyAoYGRzdF9lbnRyeWAsIGBydDZfaW5mb2AsIGBmaWI2X2luZm9gLCBgbmV0X2RldmljZWAsIGBpbmV0Nl9kZXZgKSB0byBkZXRlcm1pbmUgdGhlIGNvbmZpZ3VyZWQgTVRVLCBpZ25vcmluZyBJQ01QLWxlYXJuZWQgcGF0aCBNVFUuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIG5vIG5ldyBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzdWNoIGFzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGFkdmVydGlzZWQgVENQIE1TUyBieSBpbnRyb2R1Y2luZyBgaXBfZHN0X210dV9jb25maWd1cmVkKClgIGFuZCBgaXA2X2RzdF9tdHVfY29uZmlndXJlZCgpYC4gVGhlc2UgZnVuY3Rpb25zIHJlYWQgZXhpc3RpbmcsIGluaXRpYWxpemVkIGZpZWxkcyBmcm9tIHJvdXRpbmcgYW5kIGRldmljZSBzdHJ1Y3R1cmVzIChgZHN0X2VudHJ5YCwgYHJ0Nl9pbmZvYCwgYGZpYjZfaW5mb2AsIGBuZXRfZGV2aWNlYCwgYGluZXQ2X2RldmApIHRvIGRldGVybWluZSB0aGUgY29uZmlndXJlZCBNVFUsIGlnbm9yaW5nIElDTVAtbGVhcm5lZCBwYXRoIE1UVS4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHN1Y2ggYXMgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowmn6n2[1] Phase: Succeeded StartedAt: 2026-08-14 07:36:34 +0000 UTC FinishedAt: 2026-08-14 07:36:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 07:36:34 +0000 UTC FinishedAt: 2026-08-14 07:36:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2] Phase: Succeeded StartedAt: 2026-08-14 07:36:34 +0000 UTC FinishedAt: 2026-08-14 11:16:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 07:36:34 +0000 UTC FinishedAt: 2026-08-14 11:16:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 07:36:34 +0000 UTC FinishedAt: 2026-08-14 07:36:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 07:36:34 +0000 UTC FinishedAt: 2026-08-14 07:36:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmn6n2/series-workflowmn6n2-convert-artifact-2451594207/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 07:36:45 +0000 UTC FinishedAt: 2026-08-14 07:53:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 07:36:45 +0000 UTC FinishedAt: 2026-08-14 07:53:50 +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:*ef0572ff-b937-4286-b5bb-c37966b32f63,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-workflowmn6n2/series-workflowmn6n2-convert-artifact-2451594207/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": "90fe9086-ee98-41ef-a5c9-5a1e668844e6", "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-workflowmn6n2/series-workflowmn6n2-build-action-523452645/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 07:36:45 +0000 UTC FinishedAt: 2026-08-14 07:53:40 +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:*ef0572ff-b937-4286-b5bb-c37966b32f63,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-workflowmn6n2/series-workflowmn6n2-convert-artifact-2451594207/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": "90fe9086-ee98-41ef-a5c9-5a1e668844e6", "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-workflowmn6n2/series-workflowmn6n2-build-action-523452645/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 07:53:50 +0000 UTC FinishedAt: 2026-08-14 07:53:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 07:53:50 +0000 UTC FinishedAt: 2026-08-14 07:53:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 07:53:50 +0000 UTC FinishedAt: 2026-08-14 07:54:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 07:53:50 +0000 UTC FinishedAt: 2026-08-14 07:53:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmn6n2/series-workflowmn6n2-convert-artifact-3193210734/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 07:54:00 +0000 UTC FinishedAt: 2026-08-14 07:56:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 07:54:00 +0000 UTC FinishedAt: 2026-08-14 07:55:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*90fe9086-ee98-41ef-a5c9-5a1e668844e6,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-workflowmn6n2/series-workflowmn6n2-build-action-523452645/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-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 07:56:04 +0000 UTC FinishedAt: 2026-08-14 07:56:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 07:56:04 +0000 UTC FinishedAt: 2026-08-14 07:56:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 07:56:04 +0000 UTC FinishedAt: 2026-08-14 08:12:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 07:56:04 +0000 UTC FinishedAt: 2026-08-14 08:12:57 +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:*ef0572ff-b937-4286-b5bb-c37966b32f63,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-workflowmn6n2/series-workflowmn6n2-convert-artifact-3193210734/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": "40dca22b-cab6-4301-bebe-bd7f7bf0dcb3", "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-workflowmn6n2/series-workflowmn6n2-build-action-3028179074/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 07:56:04 +0000 UTC FinishedAt: 2026-08-14 08:12:47 +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:*ef0572ff-b937-4286-b5bb-c37966b32f63,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-workflowmn6n2/series-workflowmn6n2-convert-artifact-3193210734/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": "40dca22b-cab6-4301-bebe-bd7f7bf0dcb3", "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-workflowmn6n2/series-workflowmn6n2-build-action-3028179074/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 08:12:57 +0000 UTC FinishedAt: 2026-08-14 08:12:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 08:12:57 +0000 UTC FinishedAt: 2026-08-14 08:12:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 08:12:57 +0000 UTC FinishedAt: 2026-08-14 08:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 08:12:57 +0000 UTC FinishedAt: 2026-08-14 08:14:51 +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:*40dca22b-cab6-4301-bebe-bd7f7bf0dcb3,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-workflowmn6n2/series-workflowmn6n2-build-action-3028179074/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-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 08:15:01 +0000 UTC FinishedAt: 2026-08-14 11:16:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 08:15:01 +0000 UTC FinishedAt: 2026-08-14 11:16:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"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:*90fe9086-ee98-41ef-a5c9-5a1e668844e6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*40dca22b-cab6-4301-bebe-bd7f7bf0dcb3,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-workflowmn6n2/series-workflowmn6n2-build-action-523452645/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-workflowmn6n2/series-workflowmn6n2-build-action-3028179074/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 08:15:01 +0000 UTC FinishedAt: 2026-08-14 08:15:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 08:15:01 +0000 UTC FinishedAt: 2026-08-14 08:15:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"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-workflowmn6n2/series-workflowmn6n2-convert-artifact-4005743891/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 08:15:01 +0000 UTC FinishedAt: 2026-08-14 08:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 08:15:01 +0000 UTC FinishedAt: 2026-08-14 08:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 08:15:01 +0000 UTC FinishedAt: 2026-08-14 08:15:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 08:15:11 +0000 UTC FinishedAt: 2026-08-14 11:16:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn6n2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_connect","tcp_conn_request","tcp_make_synack","tcp_v4_syn_recv_sock"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6057f06ef7afa9893ed33603f7917fa39d237b5","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"cc308655-7e0a-49bd-bd0d-42c76ef926e8","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 08:15:11 +0000 UTC FinishedAt: 2026-08-14 11:16:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*90fe9086-ee98-41ef-a5c9-5a1e668844e6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*40dca22b-cab6-4301-bebe-bd7f7bf0dcb3,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-workflowmn6n2/series-workflowmn6n2-build-action-523452645/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-workflowmn6n2/series-workflowmn6n2-build-action-3028179074/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-workflowmn6n2/series-workflowmn6n2-convert-artifact-4005743891/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,}