Name: series-workflowdrnxn Phase: Succeeded StartedAt: 2026-08-27 10:45:45 +0000 UTC FinishedAt: 2026-08-27 14:57:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[0] Phase: Succeeded StartedAt: 2026-08-27 10:45:45 +0000 UTC FinishedAt: 2026-08-27 11:18:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 10:45:45 +0000 UTC FinishedAt: 2026-08-27 11:18:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_TABLES_NETDEV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_TABLES_NETDEV" ], "series_id": "08c76b08-a276-417a-9f61-4a22c96d93ec" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_tables_newchain", "nf_tables_delchain", "nf_tables_newflowtable", "nf_tables_delflowtable" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfTkVUREVWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfdGFibGVzX25ld2NoYWluJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19kZWxjaGFpbiYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3Zmxvd3RhYmxlJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19kZWxmbG93dGFibGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbmZ0X2hvb2tfbGlzdF9maW5kYCB0byBvcHRpb25hbGx5IGVuZm9yY2Ugc3RyaWN0IGxlbmd0aCBtYXRjaGluZyAoYGhvb2stXHUwMDNlaWZuYW1lbGVuICE9IHRoaXMtXHUwMDNlaWZuYW1lbGVuYCkgd2hlbiBjb21wYXJpbmcgaW50ZXJmYWNlIG5hbWVzLiBUaGlzIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIGBzdHJuY21wYCB3aXRoIGBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKWAgY291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggYSBwcmVmaXggb2YgYW4gaW50ZXJmYWNlIG5hbWUgKGUuZy4sIG1hdGNoaW5nIFwmIzM0O2V0aDBcJiMzNDsgd2l0aCBcJiMzNDtldGgwMVwmIzM0OykgZHVyaW5nIGhvb2sgZGVsZXRpb24gKGBuZnRfZGVsY2hhaW5faG9va2AgYW5kIGBuZnRfZGVsZmxvd3RhYmxlX2hvb2tgKS4gVGhpcyBpc3N1ZSBpcyBhIGxvZ2ljIGVycm9yIHRoYXQgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgaG9vayBkZWxldGlvbiwgcG90ZW50aWFsbHkgY2F1c2luZyBmdW5jdGlvbmFsIGlzc3VlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh3aGljaCBLQVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaCkuIEl0IGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgdXNpbmcgdW5pbml0aWFsaXplZCB2YWx1ZXMgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIHdoZXJlIGl0IGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIG5ldGRldiBob29rcyB3aXRoIGRpZmZlcmVudCBuYW1lIGxlbmd0aHMgaWYgb25lIGlzIGEgcHJlZml4IG9mIGFub3RoZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgbmZfdGFibGVzIEFQSSwgYWZmZWN0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgbWVzc2FnZXMgZm9yIGNyZWF0aW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgY2hhaW5zIGFuZCBmbG93dGFibGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzBjZDE4ZmMwNmRjZTk3MmU2NjBmNjA0Mjc5NzY2NzA2ZmYwYjE4OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDExOjE2OjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IGMxMTJlY2M0ZmNhMzIuLjc3Yzk2YjFkNDIxNzggMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbkBAIC0yNDQwLDExICYjNDM7MjQ0MCwxNCBAQCBzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfbmV0ZGV2X2hvb2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxuIH1cbiBcbiBzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxuLVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKnRoaXMpXG4mIzQzO1x0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKnRoaXMsXG4mIzQzO1x0XHRcdFx0XHQgICBib29sIHN0cmljdClcbiB7XG4gXHRzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2s7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvb2ssIGhvb2tfbGlzdCwgbGlzdCkge1xuJiM0MztcdFx0aWYgKHN0cmljdCBcdTAwMjZcdTAwMjYgaG9vay1cdTAwM2VpZm5hbWVsZW4gIT0gdGhpcy1cdTAwM2VpZm5hbWVsZW4pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoIXN0cm5jbXAoaG9vay1cdTAwM2VpZm5hbWUsIHRoaXMtXHUwMDNlaWZuYW1lLFxuIFx0XHRcdCAgICAgbWluKGhvb2stXHUwMDNlaWZuYW1lbGVuLCB0aGlzLVx1MDAzZWlmbmFtZWxlbikpKSB7XG4gXHRcdFx0aWYgKGhvb2stXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9IT09LX1JFTU9WRSlcbkBAIC0yNDg2LDcgJiM0MzsyNDg5LDcgQEAgc3RhdGljIGludCBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRlcnIgPSBQVFJfRVJSKGhvb2spO1xuIFx0XHRcdGdvdG8gZXJyX2hvb2s7XG4gXHRcdH1cbi1cdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChob29rX2xpc3QsIGhvb2spKSB7XG4mIzQzO1x0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKGhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XG4gXHRcdFx0TkxfU0VUX0JBRF9BVFRSKGV4dGFjaywgdG1wKTtcbiBcdFx0XHRuZnRfbmV0ZGV2X2hvb2tfZnJlZShob29rKTtcbiBcdFx0XHRlcnIgPSAtRUVYSVNUO1xuQEAgLTI5NDMsNyAmIzQzOzI5NDYsNyBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc191cGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBnZW5tYXNrLCB1OCBwb2xpY3ksXG4gXHRcdFx0XHRcdG9wcy1cdTAwM2Vob29rXHQ9IGJhc2VjaGFpbi1cdTAwM2VvcHMuaG9vaztcbiBcdFx0XHRcdH1cbiBcbi1cdFx0XHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2YmFzZWNoYWluLVx1MDAzZWhvb2tfbGlzdCwgaCkpIHtcbiYjNDM7XHRcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QsIGgsIGZhbHNlKSkge1xuIFx0XHRcdFx0XHRsaXN0X2RlbChcdTAwMjZoLVx1MDAzZWxpc3QpO1xuIFx0XHRcdFx0XHRuZnRfbmV0ZGV2X2hvb2tfZnJlZShoKTtcbiBcdFx0XHRcdFx0Y29udGludWU7XG5AQCAtMjk1Niw3ICYjNDM7Mjk1OSw4IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcbiBcdFx0XHRcdFx0ICAgICFuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcbiBcdFx0XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkge1xuJiM0MztcdFx0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgICBoLCBmYWxzZSkpIHtcbiBcdFx0XHRcdFx0XHRuZnRfY2hhaW5fcmVsZWFzZV9ob29rKFx1MDAyNmhvb2spO1xuIFx0XHRcdFx0XHRcdHJldHVybiAtRUVYSVNUO1xuIFx0XHRcdFx0XHR9XG5AQCAtMzI1Nyw3ICYjNDM7MzI2MSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2RlbGNoYWluX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XG4tXHRcdGhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2YmFzZWNoYWluLVx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XG4mIzQzO1x0XHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QsIHRoaXMsIHRydWUpO1xuIFx0XHRpZiAoIWhvb2spIHtcbiBcdFx0XHRlcnIgPSAtRU5PRU5UO1xuIFx0XHRcdGdvdG8gZXJyX2NoYWluX2RlbF9ob29rO1xuQEAgLTkwNzMsNyAmIzQzOzkwNzcsNyBAQCBzdGF0aWMgaW50IG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGZ0KSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2ZnQtXHUwMDNlaG9va19saXN0LCBob29rKSkge1xuJiM0MztcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZ0LVx1MDAzZWhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XG4gXHRcdFx0XHRlcnIgPSAtRUVYSVNUO1xuIFx0XHRcdFx0Z290byBlcnJfdW5yZWdpc3Rlcl9uZXRfaG9va3M7XG4gXHRcdFx0fVxuQEAgLTkxNTAsNyAmIzQzOzkxNTQsNyBAQCBzdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvb2ssIG5leHQsIFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcbi1cdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZmbG93dGFibGUtXHUwMDNlaG9va19saXN0LCBob29rKSkge1xuJiM0MztcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZmbG93dGFibGUtXHUwMDNlaG9va19saXN0LCBob29rLCBmYWxzZSkpIHtcbiBcdFx0XHRsaXN0X2RlbChcdTAwMjZob29rLVx1MDAzZWxpc3QpO1xuIFx0XHRcdG5mdF9uZXRkZXZfaG9va19mcmVlKGhvb2spO1xuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTkxNjMsNyAmIzQzOzkxNjcsNyBAQCBzdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdCAgICAhbmZ0X3RyYW5zX2Zsb3d0YWJsZV91cGRhdGUodHJhbnMpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfZmxvd3RhYmxlX2hvb2tzKHRyYW5zKSwgaG9vaykpIHtcbiYjNDM7XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfZmxvd3RhYmxlX2hvb2tzKHRyYW5zKSwgaG9vaywgZmFsc2UpKSB7XG4gXHRcdFx0XHRlcnIgPSAtRUVYSVNUO1xuIFx0XHRcdFx0Z290byBlcnJfZmxvd3RhYmxlX3VwZGF0ZV9ob29rO1xuIFx0XHRcdH1cbkBAIC05MzgzLDcgJiM0Mzs5Mzg3LDcgQEAgc3RhdGljIGludCBuZnRfZGVsZmxvd3RhYmxlX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgXHUwMDI2Zmxvd3RhYmxlX2hvb2subGlzdCwgbGlzdCkge1xuLVx0XHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2Vob29rX2xpc3QsIHRoaXMpO1xuJiM0MztcdFx0aG9vayA9IG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZmbG93dGFibGUtXHUwMDNlaG9va19saXN0LCB0aGlzLCB0cnVlKTtcbiBcdFx0aWYgKCFob29rKSB7XG4gXHRcdFx0ZXJyID0gLUVOT0VOVDtcbiBcdFx0XHRnb3RvIGVycl9mbG93dGFibGVfZGVsX2hvb2s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6MTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfTkVUREVWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfdGFibGVzX25ld2NoYWluJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19kZWxjaGFpbiYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3Zmxvd3RhYmxlJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19kZWxmbG93dGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAgd2hlcmUgaXQgY291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggbmV0ZGV2IGhvb2tzIHdpdGggZGlmZmVyZW50IG5hbWUgbGVuZ3RocyBpZiBvbmUgaXMgYSBwcmVmaXggb2YgYW5vdGhlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBuZl90YWJsZXMgQVBJLCBhZmZlY3RpbmcgbmV0ZGV2IGhvb2tzIGZvciBjaGFpbnMgYW5kIGZsb3d0YWJsZXMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayBtZXNzYWdlcyBmb3IgY3JlYXRpbmcsIHVwZGF0aW5nLCBvciBkZWxldGluZyBjaGFpbnMgYW5kIGZsb3d0YWJsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MGNkMThmYzA2ZGNlOTcyZTY2MGY2MDQyNzk3NjY3MDZmZjBiMTg4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjcgMTE6MTY6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCmluZGV4IGMxMTJlY2M0ZmNhMzIuLjc3Yzk2YjFkNDIxNzggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCkBAIC0yNDQwLDExICYjNDM7MjQ0MCwxNCBAQCBzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfbmV0ZGV2X2hvb2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LAogfQogCiBzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LAotCQkJCQkgICBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKnRoaXMpCiYjNDM7CQkJCQkgICBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKnRoaXMsCiYjNDM7CQkJCQkgICBib29sIHN0cmljdCkKIHsKIAlzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2s7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvb2ssIGhvb2tfbGlzdCwgbGlzdCkgewomIzQzOwkJaWYgKHN0cmljdCAmYW1wOyZhbXA7IGhvb2stJmd0O2lmbmFtZWxlbiAhPSB0aGlzLSZndDtpZm5hbWVsZW4pCiYjNDM7CQkJY29udGludWU7CiAJCWlmICghc3RybmNtcChob29rLSZndDtpZm5hbWUsIHRoaXMtJmd0O2lmbmFtZSwKIAkJCSAgICAgbWluKGhvb2stJmd0O2lmbmFtZWxlbiwgdGhpcy0mZ3Q7aWZuYW1lbGVuKSkpIHsKIAkJCWlmIChob29rLSZndDtmbGFncyAmYW1wOyBORlRfSE9PS19SRU1PVkUpCkBAIC0yNDg2LDcgJiM0MzsyNDg5LDcgQEAgc3RhdGljIGludCBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCwKIAkJCWVyciA9IFBUUl9FUlIoaG9vayk7CiAJCQlnb3RvIGVycl9ob29rOwogCQl9Ci0JCWlmIChuZnRfaG9va19saXN0X2ZpbmQoaG9va19saXN0LCBob29rKSkgewomIzQzOwkJaWYgKG5mdF9ob29rX2xpc3RfZmluZChob29rX2xpc3QsIGhvb2ssIGZhbHNlKSkgewogCQkJTkxfU0VUX0JBRF9BVFRSKGV4dGFjaywgdG1wKTsKIAkJCW5mdF9uZXRkZXZfaG9va19mcmVlKGhvb2spOwogCQkJZXJyID0gLUVFWElTVDsKQEAgLTI5NDMsNyAmIzQzOzI5NDYsNyBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc191cGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBnZW5tYXNrLCB1OCBwb2xpY3ksCiAJCQkJCW9wcy0mZ3Q7aG9vawk9IGJhc2VjaGFpbi0mZ3Q7b3BzLmhvb2s7CiAJCQkJfQogCi0JCQkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO2Jhc2VjaGFpbi0mZ3Q7aG9va19saXN0LCBoKSkgewomIzQzOwkJCQlpZiAobmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7YmFzZWNoYWluLSZndDtob29rX2xpc3QsIGgsIGZhbHNlKSkgewogCQkJCQlsaXN0X2RlbCgmYW1wO2gtJmd0O2xpc3QpOwogCQkJCQluZnRfbmV0ZGV2X2hvb2tfZnJlZShoKTsKIAkJCQkJY29udGludWU7CkBAIC0yOTU2LDcgJiM0MzsyOTU5LDggQEAgc3RhdGljIGludCBuZl90YWJsZXNfdXBkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZ2VubWFzaywgdTggcG9saWN5LAogCQkJCQkgICAgIW5mdF90cmFuc19jaGFpbl91cGRhdGUodHJhbnMpKQogCQkJCQkJY29udGludWU7CiAKLQkJCQkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO25mdF90cmFuc19jaGFpbl9ob29rcyh0cmFucyksIGgpKSB7CiYjNDM7CQkJCQlpZiAobmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7bmZ0X3RyYW5zX2NoYWluX2hvb2tzKHRyYW5zKSwKJiM0MzsJCQkJCQkJICAgICAgIGgsIGZhbHNlKSkgewogCQkJCQkJbmZ0X2NoYWluX3JlbGVhc2VfaG9vaygmYW1wO2hvb2spOwogCQkJCQkJcmV0dXJuIC1FRVhJU1Q7CiAJCQkJCX0KQEAgLTMyNTcsNyAmIzQzOzMyNjEsNyBAQCBzdGF0aWMgaW50IG5mdF9kZWxjaGFpbl9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCXJldHVybiBlcnI7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsICZhbXA7Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7Ci0JCWhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoJmFtcDtiYXNlY2hhaW4tJmd0O2hvb2tfbGlzdCwgdGhpcyk7CiYjNDM7CQlob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7YmFzZWNoYWluLSZndDtob29rX2xpc3QsIHRoaXMsIHRydWUpOwogCQlpZiAoIWhvb2spIHsKIAkJCWVyciA9IC1FTk9FTlQ7CiAJCQlnb3RvIGVycl9jaGFpbl9kZWxfaG9vazsKQEAgLTkwNzMsNyAmIzQzOzkwNzcsNyBAQCBzdGF0aWMgaW50IG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCwKIAkJCWlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZnQpKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAobmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7ZnQtJmd0O2hvb2tfbGlzdCwgaG9vaykpIHsKJiM0MzsJCQlpZiAobmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7ZnQtJmd0O2hvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7CiAJCQkJZXJyID0gLUVFWElTVDsKIAkJCQlnb3RvIGVycl91bnJlZ2lzdGVyX25ldF9ob29rczsKIAkJCX0KQEAgLTkxNTAsNyAmIzQzOzkxNTQsNyBAQCBzdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQlyZXR1cm4gZXJyOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvb2ssIG5leHQsICZhbXA7Zmxvd3RhYmxlX2hvb2subGlzdCwgbGlzdCkgewotCQlpZiAobmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7Zmxvd3RhYmxlLSZndDtob29rX2xpc3QsIGhvb2spKSB7CiYjNDM7CQlpZiAobmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7Zmxvd3RhYmxlLSZndDtob29rX2xpc3QsIGhvb2ssIGZhbHNlKSkgewogCQkJbGlzdF9kZWwoJmFtcDtob29rLSZndDtsaXN0KTsKIAkJCW5mdF9uZXRkZXZfaG9va19mcmVlKGhvb2spOwogCQkJY29udGludWU7CkBAIC05MTYzLDcgJiM0Mzs5MTY3LDcgQEAgc3RhdGljIGludCBuZnRfZmxvd3RhYmxlX3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCSAgICAhbmZ0X3RyYW5zX2Zsb3d0YWJsZV91cGRhdGUodHJhbnMpKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAobmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7bmZ0X3RyYW5zX2Zsb3d0YWJsZV9ob29rcyh0cmFucyksIGhvb2spKSB7CiYjNDM7CQkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO25mdF90cmFuc19mbG93dGFibGVfaG9va3ModHJhbnMpLCBob29rLCBmYWxzZSkpIHsKIAkJCQllcnIgPSAtRUVYSVNUOwogCQkJCWdvdG8gZXJyX2Zsb3d0YWJsZV91cGRhdGVfaG9vazsKIAkJCX0KQEAgLTkzODMsNyAmIzQzOzkzODcsNyBAQCBzdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQlyZXR1cm4gZXJyOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0aGlzLCAmYW1wO2Zsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHsKLQkJaG9vayA9IG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO2Zsb3d0YWJsZS0mZ3Q7aG9va19saXN0LCB0aGlzKTsKJiM0MzsJCWhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoJmFtcDtmbG93dGFibGUtJmd0O2hvb2tfbGlzdCwgdGhpcywgdHJ1ZSk7CiAJCWlmICghaG9vaykgewogCQkJZXJyID0gLUVOT0VOVDsKIAkJCWdvdG8gZXJyX2Zsb3d0YWJsZV9kZWxfaG9vazsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5mdF9ob29rX2xpc3RfZmluZGAgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIFNvdW5kcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgaXQmIzM5O3MgZml4aW5nIGEgcG90ZW50aWFsIG1hdGNoaW5nIGJ1ZyByZWxhdGVkIHRvIG5ldGZpbHRlciBuZl90YWJsZXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGEgYHN0cmljdGAgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbi4gSWYgYHN0cmljdGAgaXMgZW5hYmxlZCwgaXQgZW5zdXJlcyBhbiBleGFjdCBtYXRjaCBvZiBgaWZuYW1lbGVuYCBiZWZvcmUgY29tcGFyaW5nIG5hbWVzLiBUaGlzIGlzIGxpa2VseSBhZGRyZXNzaW5nIGEgc3VidGxlIGZsYXcgd2hlcmUgaG9va3Mgd2l0aCBzbGlnaHRseSBkaWZmZXJlbnQgbmFtZSBsZW5ndGhzIGNvdWxkIGJlIGluY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgYSBtYXRjaCBpZiBvbmUgbmFtZSB3YXMgYSBwcmVmaXggb2YgYW5vdGhlciwgYSBjbGFzc2ljIHByZWZpeC9zdWJzdHJpbmcgdnVsbmVyYWJpbGl0eS4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBmdW5jdGlvbnMgdGhhdCBjYWxsIHRoaXMgbW9kaWZpZWQgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgYXJlOiBgbmZ0X2RlbGNoYWluX2hvb2tgLCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYCwgYG5mdF9mbG93dGFibGVfdXBkYXRlYCwgYG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzYCwgYG5mX3RhYmxlc191cGRjaGFpbmAsIGFuZCBgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rc2AuIFRoZXNlIGFyZSBteSB0YXJnZXRzLgoKTm93LCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgbmZfdGFibGVzX2FwaS5jYCBpcyBjb21waWxlZC4gQSBxdWljayBjaGVjayBvZiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBzaG91bGQgY29uZmlybSBpdCBpcyB1bmRlciBgQ09ORklHX05GX1RBQkxFU2AsIHdoaWNoIEkgbmVlZCB0byBrbm93IGZvciBidWlsZCBjb25maWd1cmF0aW9ucy4gQSBxdWljayBncmVwIHdpbGwgYWxzbyB2ZXJpZnkgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfYXBpXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT04ND1vYmotJChDT05GSUdfTkZfRFVQX05FVERFVilcdCYjNDM7PSBuZl9kdXBfbmV0ZGV2Lm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg2LSMgbmZfdGFibGVzXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg3Om5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OC1cdFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk2NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBgQ09ORklHX05GX1RBQkxFU2AgYW5kIFJlbGF0ZWQgSG9va3MqKgoKQWxyaWdodCwgc28gYENPTkZJR19ORl9UQUJMRVNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLCB0aGF0IG11Y2ggaXMgY2xlYXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIGhvdyBpdCBhbGwgdGllcyB0b2dldGhlciwgc3BlY2lmaWNhbGx5IGhvdyB0aGlzIGZlYXR1cmUgaXMgdW5pbnN0YWxsZWQuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB2ZXJpZnkgdGhlIHRlYXJkb3duIHBhdGhzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSBgbmZ0X2RlbGNoYWluX2hvb2tgIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYCBmdW5jdGlvbnMgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIFRoZXNlIGhvb2tzIGFyZSB3aGVyZSB0aGUgcmVtb3ZhbCBvZiBjaGFpbnMgYW5kIGZsb3cgdGFibGVzIGFyZSBoYW5kbGVkLCBhbmQgYXJlIG9idmlvdXNseSBjcml0aWNhbCB0byB0aGUgd2hvbGUgdW5pbnN0YWxsIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnMsIGFueSBkZXBlbmRlbmNpZXMgdGhleSBtaWdodCBoYXZlLCBhbmQgd2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIGNsZWFuZWQgdXAgdG8gbWFrZSBzdXJlIHRoaW5ncyBhcmUgZnVsbHkgZGlzbWFudGxlZC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGFzIHdlbGwsIGFzIHRoYXQgY2FuIGJlIGEgc291cmNlIG9mIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9kZWxjaGFpbl9ob29rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzIzMz1zdGF0aWMgdm9pZCBuZnRfdHJhbnNfZGVsaG9va19hYm9ydChzdHJ1Y3QgbGlzdF9oZWFkICpkZWxfbGlzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMjQyLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzI0MzpzdGF0aWMgaW50IG5mdF9kZWxjaGFpbl9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMjQ0LVx0XHRcdCAgICAgc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzI5OD1zdGF0aWMgaW50IG5mX3RhYmxlc19kZWxjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzNTEtXHRcdFx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldih0YWJsZS1cdTAwM2VmYW1pbHksIGJhc2VjaGFpbi1cdTAwM2VvcHMuaG9va251bSkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMzUyOlx0XHRcdFx0cmV0dXJuIG5mdF9kZWxjaGFpbl9ob29rKFx1MDAyNmN0eCwgYmFzZWNoYWluLCBleHRhY2spO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzM1My1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYG5mdF9kZWxmbG93dGFibGVfaG9va2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBuZnRfZGVsZmxvd3RhYmxlX2hvb2tgIGZ1bmN0aW9uLiBUaGlzIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBtYW5hZ2luZyBhbmQgbW9kaWZ5aW5nIGZsb3cgdGFibGVzIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgdGhvcm91Z2hseSwgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZCwgYW5kIHRoYXQgYW55IG9mIG15IHJlbGF0ZWQgY29kZSBpcyBjb21wYXRpYmxlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgc291cmNlIGNvZGUsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGludGVyYWN0aW9uIG9mIHRoaXMgaG9vay4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciBhbGwgdGhlIGVkZ2UgY2FzZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgaXMgaW1wYWN0ZWQgYnkgdGhlIG5ldyBrZXJuZWwgdmVyc2lvbiBvciBhbnkgcmVjZW50IHNlY3VyaXR5IHVwZGF0ZXMsIGFzIHRoZXNlIGhhdmUgYSBoYWJpdCBvZiBpbnRyb2R1Y2luZyBzdWJ0bGUsIGJ1dCBpbXBhY3RmdWwsIGNoYW5nZXMgaW4gbWVtb3J5IGxheW91dCBhbmQgaGFuZGxpbmcgdGhhdCBjb3VsZCBhZmZlY3QgaG93IGZsb3cgdGFibGUgZW50cmllcyBhcmUgbWFuYWdlZC4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIGxvb2sgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCB0byBwcm90ZWN0IHRoZSBmbG93IHRhYmxlIGRhdGEgc3RydWN0dXJlcy4gQSBxdWljayBnbGFuY2UgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgbWlnaHQgYWxzbyByZXZlYWwgYW55IGxlc3MtdGhhbi1vYnZpb3VzIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgZXJyb3IgaGFuZGxpbmc7IGFyZSB0aGVyZSBzdWZmaWNpZW50IGNoZWNrcyB0byBkZWFsIHdpdGggcG90ZW50aWFsIGZhaWx1cmVzIGFuZCBhcmUgdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGVzL21lc3NhZ2VzIGJlaW5nIHJldHVybmVkPyBMZXQmIzM5O3MgZ2V0IHRvIHdvcmshCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2RlbGZsb3d0YWJsZV9ob29rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM2Mz1zdGF0aWMgdm9pZCBuZnRfZmxvd3RhYmxlX2hvb2tfcmVsZWFzZShzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZV9ob29rICpmbG93dGFibGVfaG9vaylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MzcyLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTM3MzpzdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM3NC1cdFx0XHRcdCBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTk0MjU9c3RhdGljIGludCBuZl90YWJsZXNfZGVsZmxvd3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTQ2OS1cdGlmIChubGFbTkZUQV9GTE9XVEFCTEVfSE9PS10pXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5NDcwOlx0XHRyZXR1cm4gbmZ0X2RlbGZsb3d0YWJsZV9ob29rKFx1MDAyNmN0eCwgZmxvd3RhYmxlLCBleHRhY2spO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTQ3MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTg3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBOZXRmaWx0ZXIvbmZ0YWJsZXMgZnVuY3Rpb25zIGFuZCBpbW1lZGlhdGVseSBzZWUgc29tZSBwcmltZSBmdXp6aW5nIGNhbmRpZGF0ZXMuIFNwZWNpZmljYWxseSwgYG5mX3RhYmxlc191cGRjaGFpbmAsIGBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzYCwgYG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzYCwgYG5mdF9mbG93dGFibGVfdXBkYXRlYCwgYG5mdF9kZWxjaGFpbl9ob29rYCwgYW5kIGBuZnRfZGVsZmxvd3RhYmxlX2hvb2tgIGFsbCBsb29rIGxpa2UgdGhleSBoYW5kbGUgY3J1Y2lhbCBzdGF0ZSBjaGFuZ2VzIG9yIGlucHV0IHBhcnNpbmcgd2l0aGluIHRoZSBmbG93dGFibGUgYW5kIGNoYWluIG1hbmFnZW1lbnQuIFRoZXkmIzM5O3JlIGRlZmluaXRlbHkgb24gdGhlIGxpc3QuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIEkgcmVtZW1iZXIgYG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3NgIGJlaW5nIHN0YXRpYy4gSSBzaG91bGQgdmVyaWZ5IGlmIGBuZl90YWJsZXNfdXBkY2hhaW5gIGlzIGFsc28gc3RhdGljLCBhcyB0aGlzIG1heSBpbXBhY3QgaG93IGFwcHJvYWNoYWJsZSBpdCB3aWxsIGJlIGFzIGEgZnV6emluZyB0YXJnZXQuIExldCYjMzk7cyBkb3VibGUgY2hlY2sgdGhhdCwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfdXBkY2hhaW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNzUzPXN0YXRpYyBpbnQgbmZfdGFibGVzX2FkZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGZhbWlseSwgdTggcG9saWN5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI4OTgtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyODk5OnN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5MDAtXHRcdFx0ICAgICAgdTMyIGZsYWdzLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMxMTY9c3RhdGljIGludCBuZl90YWJsZXNfbmV3Y2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMjA5LVx0XHRmbGFncyB8PSBjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0JBU0U7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMjEwOlx0XHRyZXR1cm4gbmZfdGFibGVzX3VwZGNoYWluKFx1MDAyNmN0eCwgZ2VubWFzaywgcG9saWN5LCBmbGFncywgYXR0cixcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyMTEtXHRcdFx0XHRcdCAgZXh0YWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgyMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKklkZW50aWZ5aW5nIER5bmFtaWMgTmV0ZmlsdGVyIEFQSSBFbnRyeXBvaW50cyoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpbmdzIGFwcGVhciBzdGF0aWMsIHdoaWNoIGlzbiYjMzk7dCBlbnRpcmVseSBzdXJwcmlzaW5nLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIHplcm8gaW4gb24gYW55IE5ldGZpbHRlciBBUEkgZW50cnlwb2ludHMgdGhhdCBleGhpYml0IGR5bmFtaWMgYmVoYXZpb3IuIFdlIG5lZWQgdG8gaWRlbnRpZnkgZnVuY3Rpb25zIHdoaWNoIG1pZ2h0IGFsbG93IGZvciB0aGUgcnVudGltZSBjcmVhdGlvbiwgbW9kaWZpY2F0aW9uLCBvciBkZWxldGlvbiBvZiBvYmplY3RzIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbS4gTXkgaW5pdGlhbCBzY2FuIHBvaW50cyB0b3dhcmRzIGZ1bmN0aW9ucyBsaWtlIGBuZl90YWJsZXNfbmV3Y2hhaW5gLCB3aGljaCBzdWdnZXN0cyB0aGUgYWJpbGl0eSB0byBpbnN0YW50aWF0ZSBuZXcgY2hhaW5zLCBhbmQsIGNvbnZlcnNlbHksIGBuZl90YWJsZXNfZGVsY2hhaW5gLCB3aGljaCwgbG9naWNhbGx5LCB3b3VsZCByZW1vdmUgZXhpc3RpbmcgY2hhaW5zLiBTaW1pbGFybHksIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCBhbmQgYG5mX3RhYmxlc19kZWxmbG93dGFibGVgIGFyZSBvbiB0aGUgbGlzdCwgaW5kaWNhdGluZyBvcGVyYXRpb25zIGFyb3VuZCBmbG93IHRhYmxlcywgd2hpY2ggSSYjMzk7ZCBleHBlY3Qgd291bGQgYmUgZHluYW1pYyBlbGVtZW50cyBpbiBhIE5ldGZpbHRlciBzZXR1cC4gVGhpcyB3aWxsIGxpa2VseSBmb3JtIHRoZSBiYXNpcyBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfbmV3Zmxvd3RhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTEzNz1zdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkyMjgtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MjI5OnN0YXRpYyBpbnQgbmZfdGFibGVzX25ld2Zsb3d0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTIzMC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05OTU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZl90YWJsZXNfY2JbTkZUX01TR19NQVhdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMTI2LVx0W05GVF9NU0dfTkVXRkxPV1RBQkxFXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMTI3Olx0XHQuY2FsbFx0XHQ9IG5mX3RhYmxlc19uZXdmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDEyOC1cdFx0LnR5cGVcdFx0PSBORk5MX0NCX0JBVENILFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mzg2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBORl9UQUJMRVMgLSBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb3JlIGVudHJ5IHBvaW50cyBmb3IgYG5mX3RhYmxlc2Ag4oCTIGdvdCBpdCwgdGhlc2UgYXJlIHRoZSBob29rczogYG5mX3RhYmxlc19uZXdjaGFpbmAsIGBuZl90YWJsZXNfZGVsY2hhaW5gLCBgbmZfdGFibGVzX25ld2Zsb3d0YWJsZWAsIGFuZCBgbmZfdGFibGVzX2RlbGZsb3d0YWJsZWAuICBCcmlsbGlhbnQhICBOZXRsaW5rIGNhbGxiYWNrcyBhcmUgKmlkZWFsKiBmb3IgZnV6emluZy4gIFRoZSBzdHJ1Y3R1cmUgaXMgcGVyZmVjdCBmb3IgZmVlZGluZyBpbiBtYWxmb3JtZWQgZGF0YSBhbmQgc2VlaW5nIHdoYXQgYnJlYWtzLiBJIGNhbiByZWFsbHkgZ2V0IGNyZWF0aXZlIHdpdGggY3JhZnRpbmcgdGhvc2UgbmV0bGluayBtZXNzYWdlcy4KCkZpcnN0IHRob3VnaCwgZ290dGEgY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfTkZfVEFCTEVTYCBpcyBlbmFibGVkIHNvIEkga25vdyB3aGF0IEkmIzM5O20gcGxheWluZyB3aXRoLCBhbmQgdGhhdCBhbnkgcmVxdWlyZWQgc3VwcG9ydGluZyBtb2R1bGVzIGFyZSBhbHNvIGluIHBsYWNlIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseSBmb3IgdGhlIHRlc3RpbmcuIEdvdCB0byBidWlsZCBhIHNvbGlkIGJhc2UgdG8gd29yayBmcm9tLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfVEFCTEVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NDcxPWlmIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXHRkZXBlbmRzIG9uIElQVjZcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ4MDpjb25maWcgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg4NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkmIzM5O2QgdGhpbmsgaXQgdGhyb3VnaDoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKCk9rYXksIHNvIHRoZSBiYXNlIGNvbmZpZyBpcyBkZWZpbml0ZWx5IGBORl9UQUJMRVNgLiBUaGlzIHBhdGNoIGlzIG1lc3Npbmcgd2l0aCBuZXRkZXYgaG9va3MgdGhvdWdoLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayB0aGF0IHRoZXJlICptaWdodCogYmUgYSBzZWNvbmRhcnkgY29uZmlnIG9wdGlvbiBpbnZvbHZlZCBoZXJlLCBsaWtlbHkgYE5GX1RBQkxFU19ORVRERVZgLiBJdCYjMzk7cyBhIGNvbW1vbiBwYXR0ZXJuIHRvIHNwbGl0IG91dCBzcGVjaWZpYyBmdW5jdGlvbmFsaXRpZXMgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yayBkZXZpY2UgaW50ZXJhY3Rpb24uCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIG15IGh1bmNoLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBmdW5jdGlvbnMgYG5mdF9uZXRkZXZfaG9va19hbGxvY2AgYW5kIGBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzYCBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgTkZfVEFCTEVTX05FVERFVmAuIElmIHRoZXkgYXJlLCBpdCBzdHJlbmd0aGVucyB0aGUgYXJndW1lbnQgZm9yIHJlcXVpcmluZyB0aGF0IG9wdGlvbiBhbG9uZ3NpZGUgYE5GX1RBQkxFU2AuIElmIG5vdCwgdGhlbiBJIG5lZWQgdG8gZGlnIGRlZXBlciBhbmQgdW5kZXJzdGFuZCB3aHkgbmV0ZGV2IG1vZGlmaWNhdGlvbnMgd291bGQgbmVjZXNzaXRhdGUgYW55IGNvbmZpZ3VyYXRpb24gY2hhbmdlIGF0IGFsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X25ldGRldl9ob29rX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjM2Mz12b2lkIG5mX3RhYmxlc19jaGFpbl9kZXN0cm95KHN0cnVjdCBuZnRfY2hhaW4gKmNoYWluKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIzOTYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyMzk3OnN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9uZXRkZXZfaG9va19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yMzk4LVx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI0NjM9c3RhdGljIGludCBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDg1LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ4NjpcdFx0aG9vayA9IG5mdF9uZXRkZXZfaG9va19hbGxvYyhuZXQsIHRtcCwgcHJlZml4KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0ODctXHRcdGlmIChJU19FUlIoaG9vaykpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNTI0PXN0YXRpYyBpbnQgbmZ0X2NoYWluX3BhcnNlX25ldGRldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjUzMS1cdGlmICh0YltORlRBX0hPT0tfREVWXSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjUzMjpcdFx0aG9vayA9IG5mdF9uZXRkZXZfaG9va19hbGxvYyhuZXQsIHRiW05GVEFfSE9PS19ERVZdLCBmYWxzZSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTMzLVx0XHRpZiAoSVNfRVJSKGhvb2spKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1OTcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJLCBhbiBleHBlcnQsIGFtIGhhdmluZyBpdDoKCioqQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYG5mdF9uZXRkZXZfaG9va19hbGxvY2AqKgoKUmlnaHQsIGxldCBtZSBqdXN0IHJ1biB0aGF0IHF1ZXN0aW9uIHRocm91Z2ggbXkgaGVhZC4gSXMgYG5mdF9uZXRkZXZfaG9va19hbGxvY2AgY29tcGlsZWQgKmNvbmRpdGlvbmFsbHkqPyBUaGF0JiMzOTtzIHRoZSBjcnV4IG9mIGl0LiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBOZXRmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHdheSB0aG9zZSBOZXRmaWx0ZXIgaG9va3Mgd29yazsgYXJlIHRoZXJlIHNwZWNpZmljIGZlYXR1cmVzLCBvciBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbnMsIG9yIGNlcnRhaW4gbW9kdWxlIGNvbmZpZ3VyYXRpb25zIHRoYXQgd291bGQgdHJpZ2dlciBpdHMgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3M/IEl0JiMzOTtzIG9mdGVuIHJlbGF0ZWQgdG8gdGhlIG92ZXJhbGwgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBmZWF0dXJlcyBpdCBjYW4gc3VwcG9ydC4gVGhpcyBjb3VsZCBiZSByZWxhdGVkIHRvIHRoaW5ncyBsaWtlIGluZ3Jlc3MvZWdyZXNzIGhvb2tzLCBvciBwZXJoYXBzIHRoZSBzdXBwb3J0IGZvciBjZXJ0YWluIGhhcmR3YXJlIG9mZmxvYWRzLiBJIG5lZWQgdG8gcXVpY2tseSB2aXN1YWxpemUgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkZfVEFCTEVTX05FVERFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTE1NTI9c3RhdGljIGJvb2wgbmZ0X3N1cHBvcnRlZF9mYW1pbHkodTggZmFtaWx5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE1NjMtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxNTY0OiNpZmRlZiBDT05GSUdfTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTU2NS1cdFx0fHwgZmFtaWx5ID09IE5GUFJPVE9fTkVUREVWXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NjcKCQkJCQkJCW91dHB1dDogMTY1CgkJCQkJCQl0aG91Z2h0czogNDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBmb3IgTmV0ZGV2IEhvb2tzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBuZnRfbmV0ZGV2X2hvb2tfYWxsb2NgIGZ1bmN0aW9uLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkLCBldmVuIHRob3VnaCBpdCYjMzk7cyB1c2VkIGZvciBuZXRkZXYgaG9va3MuIFRoYXQgZmVlbHMuLi4gaW5lZmZpY2llbnQuIFRoZSBxdWVzdGlvbiBpcywgaXMgYENPTkZJR19ORl9UQUJMRVNfTkVUREVWYCBhY3R1YWxseSBuZWNlc3Nhcnk/IEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3MgYSBnb29kIGlkZWEgdG8gaGF2ZSBpdCBlbmFibGVkLiBBbmQsIG9mIGNvdXJzZSwgYE5GX1RBQkxFU2AgaXRzZWxmIGlzIGFsc28gZXNzZW50aWFsLgoKTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYG5mdF9ob29rX2xpc3RfZmluZGAgaXMgYmVpbmcgY2FsbGVkLiBBbHJpZ2h0LCBpdCYjMzk7cyB1c2VkIHdpdGhpbiBgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rc2AsIGBuZl90YWJsZXNfdXBkY2hhaW5gLCBgbmZ0X2RlbGNoYWluX2hvb2tgLCBgbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV9uZXRfaG9va3NgLCBgbmZ0X2Zsb3d0YWJsZV91cGRhdGVgLCBhbmQgYG5mdF9kZWxmbG93dGFibGVfaG9va2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGFsbCBwYXJ0IG9mIGFkZGluZywgdXBkYXRpbmcsIGFuZCBkZWxldGluZyBjaGFpbnMgYW5kIGZsb3d0YWJsZXMuCgpUaGUgZW50cnkgcG9pbnRzIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuLi4gdGhleSYjMzk7cmUgYWxsIG5ldGxpbmsgY2FsbGJhY2tzOiBgbmZfdGFibGVzX25ld2NoYWluYCwgYG5mX3RhYmxlc19kZWxjaGFpbmAsIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCwgYW5kIGBuZl90YWJsZXNfZGVsZmxvd3RhYmxlYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIE9rYXksIGBORl9UQUJMRVNgIGRlcGVuZHMgb24gYE5FVEZJTFRFUl9ORVRMSU5LYCwgYW5kIGBORl9UQUJMRVNfTkVUREVWYCBkZXBlbmRzIG9uIGBORl9UQUJMRVNgLiBXZSBjYW4gc2VlIHRoZSBkZXBlbmRlbmN5IHRyZWUuCgpTbywgaW4gdGhlIGVuZCwgaXQgbWVhbnMgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBgWyYjMzQ7TkZfVEFCTEVTJiMzNDssICYjMzQ7TkZfVEFCTEVTX05FVERFViYjMzQ7XWAuCgpGaW5hbGx5LCBJJiMzOTttIGdvaW5nIHRvIHJldmlldyBteSByYXRpb25hbGU6IFRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgLCBzcGVjaWZpY2FsbHkgd2hlcmUgaXQgY291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggaG9va3MgaWYgb25lIGlzIGEgcHJlZml4IG9mIGFub3RoZXIuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIHRoZSBuZXRmaWx0ZXIgbmZfdGFibGVzIEFQSSwgYWZmZWN0aW5nIHRoZSBoYW5kbGluZyBvZiBuZXRkZXYgaG9va3MsIGFuZCBob3cgY2hhaW5zIGFuZCBmbG93dGFibGVzIGFyZSBtYW5hZ2VkLiBUaGUga2V5IGludGVyYWN0aW9uIGlzIHRoZSBuZXRsaW5rIG1lc3NhZ2VzIGNyZWF0aW5nLCB1cGRhdGluZyBvciBkZWxldGluZyB0aGVzZSBvYmplY3RzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNsZWFyOiB0aGUgZm9jdXMgc3ltYm9scyBhcmUgYG5mX3RhYmxlc19uZXdjaGFpbmAsIGBuZl90YWJsZXNfZGVsY2hhaW5gLCBgbmZfdGFibGVzX25ld2Zsb3d0YWJsZWAsIGFuZCBgbmZfdGFibGVzX2RlbGZsb3d0YWJsZWAuCgpOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX05FVERFViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX3RhYmxlc19uZXdjaGFpbiYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsY2hhaW4mIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX25ld2Zsb3d0YWJsZSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsZmxvd3RhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIHdoZXJlIGl0IGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIG5ldGRldiBob29rcyB3aXRoIGRpZmZlcmVudCBuYW1lIGxlbmd0aHMgaWYgb25lIGlzIGEgcHJlZml4IG9mIGFub3RoZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgbmZfdGFibGVzIEFQSSwgYWZmZWN0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgbWVzc2FnZXMgZm9yIGNyZWF0aW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgY2hhaW5zIGFuZCBmbG93dGFibGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX05FVERFViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX3RhYmxlc19uZXdjaGFpbiYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsY2hhaW4mIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX25ld2Zsb3d0YWJsZSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsZmxvd3RhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIHdoZXJlIGl0IGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIG5ldGRldiBob29rcyB3aXRoIGRpZmZlcmVudCBuYW1lIGxlbmd0aHMgaWYgb25lIGlzIGEgcHJlZml4IG9mIGFub3RoZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgbmZfdGFibGVzIEFQSSwgYWZmZWN0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgbWVzc2FnZXMgZm9yIGNyZWF0aW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgY2hhaW5zIGFuZCBmbG93dGFibGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMToxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBuZnRfaG9va19saXN0X2ZpbmRgIHRvIG9wdGlvbmFsbHkgZW5mb3JjZSBzdHJpY3QgbGVuZ3RoIG1hdGNoaW5nIChgaG9vay1cdTAwM2VpZm5hbWVsZW4gIT0gdGhpcy1cdTAwM2VpZm5hbWVsZW5gKSB3aGVuIGNvbXBhcmluZyBpbnRlcmZhY2UgbmFtZXMuIFRoaXMgZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgYHN0cm5jbXBgIHdpdGggYG1pbihob29rLVx1MDAzZWlmbmFtZWxlbiwgdGhpcy1cdTAwM2VpZm5hbWVsZW4pYCBjb3VsZCBpbmNvcnJlY3RseSBtYXRjaCBhIHByZWZpeCBvZiBhbiBpbnRlcmZhY2UgbmFtZSAoZS5nLiwgbWF0Y2hpbmcgXCYjMzQ7ZXRoMFwmIzM0OyB3aXRoIFwmIzM0O2V0aDAxXCYjMzQ7KSBkdXJpbmcgaG9vayBkZWxldGlvbiAoYG5mdF9kZWxjaGFpbl9ob29rYCBhbmQgYG5mdF9kZWxmbG93dGFibGVfaG9va2ApLiBUaGlzIGlzc3VlIGlzIGEgbG9naWMgZXJyb3IgdGhhdCBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBob29rIGRlbGV0aW9uLCBwb3RlbnRpYWxseSBjYXVzaW5nIGZ1bmN0aW9uYWwgaXNzdWVzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHdoaWNoIEtBU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoKS4gSXQgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciB1c2luZyB1bmluaXRpYWxpemVkIHZhbHVlcyBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzBjZDE4ZmMwNmRjZTk3MmU2NjBmNjA0Mjc5NzY2NzA2ZmYwYjE4OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDExOjE2OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwppbmRleCBjMTEyZWNjNGZjYTMyLi43N2M5NmIxZDQyMTc4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwpAQCAtMjQ0MCwxMSAmIzQzOzI0NDAsMTQgQEAgc3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X25ldGRldl9ob29rX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwKIH0KIAogc3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X2hvb2tfbGlzdF9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmhvb2tfbGlzdCwKLQkJCQkJICAgY29uc3Qgc3RydWN0IG5mdF9ob29rICp0aGlzKQomIzQzOwkJCQkJICAgY29uc3Qgc3RydWN0IG5mdF9ob29rICp0aGlzLAomIzQzOwkJCQkJICAgYm9vbCBzdHJpY3QpCiB7CiAJc3RydWN0IG5mdF9ob29rICpob29rOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCBob29rX2xpc3QsIGxpc3QpIHsKJiM0MzsJCWlmIChzdHJpY3QgJmFtcDsmYW1wOyBob29rLSZndDtpZm5hbWVsZW4gIT0gdGhpcy0mZ3Q7aWZuYW1lbGVuKQomIzQzOwkJCWNvbnRpbnVlOwogCQlpZiAoIXN0cm5jbXAoaG9vay0mZ3Q7aWZuYW1lLCB0aGlzLSZndDtpZm5hbWUsCiAJCQkgICAgIG1pbihob29rLSZndDtpZm5hbWVsZW4sIHRoaXMtJmd0O2lmbmFtZWxlbikpKSB7CiAJCQlpZiAoaG9vay0mZ3Q7ZmxhZ3MgJmFtcDsgTkZUX0hPT0tfUkVNT1ZFKQpAQCAtMjQ4Niw3ICYjNDM7MjQ4OSw3IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsCiAJCQllcnIgPSBQVFJfRVJSKGhvb2spOwogCQkJZ290byBlcnJfaG9vazsKIAkJfQotCQlpZiAobmZ0X2hvb2tfbGlzdF9maW5kKGhvb2tfbGlzdCwgaG9vaykpIHsKJiM0MzsJCWlmIChuZnRfaG9va19saXN0X2ZpbmQoaG9va19saXN0LCBob29rLCBmYWxzZSkpIHsKIAkJCU5MX1NFVF9CQURfQVRUUihleHRhY2ssIHRtcCk7CiAJCQluZnRfbmV0ZGV2X2hvb2tfZnJlZShob29rKTsKIAkJCWVyciA9IC1FRVhJU1Q7CkBAIC0yOTQzLDcgJiM0MzsyOTQ2LDcgQEAgc3RhdGljIGludCBuZl90YWJsZXNfdXBkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZ2VubWFzaywgdTggcG9saWN5LAogCQkJCQlvcHMtJmd0O2hvb2sJPSBiYXNlY2hhaW4tJmd0O29wcy5ob29rOwogCQkJCX0KIAotCQkJCWlmIChuZnRfaG9va19saXN0X2ZpbmQoJmFtcDtiYXNlY2hhaW4tJmd0O2hvb2tfbGlzdCwgaCkpIHsKJiM0MzsJCQkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO2Jhc2VjaGFpbi0mZ3Q7aG9va19saXN0LCBoLCBmYWxzZSkpIHsKIAkJCQkJbGlzdF9kZWwoJmFtcDtoLSZndDtsaXN0KTsKIAkJCQkJbmZ0X25ldGRldl9ob29rX2ZyZWUoaCk7CiAJCQkJCWNvbnRpbnVlOwpAQCAtMjk1Niw3ICYjNDM7Mjk1OSw4IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSwKIAkJCQkJICAgICFuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSkKIAkJCQkJCWNvbnRpbnVlOwogCi0JCQkJCWlmIChuZnRfaG9va19saXN0X2ZpbmQoJmFtcDtuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkgewomIzQzOwkJCQkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO25mdF90cmFuc19jaGFpbl9ob29rcyh0cmFucyksCiYjNDM7CQkJCQkJCSAgICAgICBoLCBmYWxzZSkpIHsKIAkJCQkJCW5mdF9jaGFpbl9yZWxlYXNlX2hvb2soJmFtcDtob29rKTsKIAkJCQkJCXJldHVybiAtRUVYSVNUOwogCQkJCQl9CkBAIC0zMjU3LDcgJiM0MzszMjYxLDcgQEAgc3RhdGljIGludCBuZnRfZGVsY2hhaW5faG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQlyZXR1cm4gZXJyOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0aGlzLCAmYW1wO2NoYWluX2hvb2subGlzdCwgbGlzdCkgewotCQlob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7YmFzZWNoYWluLSZndDtob29rX2xpc3QsIHRoaXMpOwomIzQzOwkJaG9vayA9IG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO2Jhc2VjaGFpbi0mZ3Q7aG9va19saXN0LCB0aGlzLCB0cnVlKTsKIAkJaWYgKCFob29rKSB7CiAJCQllcnIgPSAtRU5PRU5UOwogCQkJZ290byBlcnJfY2hhaW5fZGVsX2hvb2s7CkBAIC05MDczLDcgJiM0Mzs5MDc3LDcgQEAgc3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsCiAJCQlpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGZ0KSkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO2Z0LSZndDtob29rX2xpc3QsIGhvb2spKSB7CiYjNDM7CQkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO2Z0LSZndDtob29rX2xpc3QsIGhvb2ssIGZhbHNlKSkgewogCQkJCWVyciA9IC1FRVhJU1Q7CiAJCQkJZ290byBlcnJfdW5yZWdpc3Rlcl9uZXRfaG9va3M7CiAJCQl9CkBAIC05MTUwLDcgJiM0Mzs5MTU0LDcgQEAgc3RhdGljIGludCBuZnRfZmxvd3RhYmxlX3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJcmV0dXJuIGVycjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShob29rLCBuZXh0LCAmYW1wO2Zsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHsKLQkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO2Zsb3d0YWJsZS0mZ3Q7aG9va19saXN0LCBob29rKSkgewomIzQzOwkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO2Zsb3d0YWJsZS0mZ3Q7aG9va19saXN0LCBob29rLCBmYWxzZSkpIHsKIAkJCWxpc3RfZGVsKCZhbXA7aG9vay0mZ3Q7bGlzdCk7CiAJCQluZnRfbmV0ZGV2X2hvb2tfZnJlZShob29rKTsKIAkJCWNvbnRpbnVlOwpAQCAtOTE2Myw3ICYjNDM7OTE2Nyw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQkgICAgIW5mdF90cmFuc19mbG93dGFibGVfdXBkYXRlKHRyYW5zKSkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO25mdF90cmFuc19mbG93dGFibGVfaG9va3ModHJhbnMpLCBob29rKSkgewomIzQzOwkJCWlmIChuZnRfaG9va19saXN0X2ZpbmQoJmFtcDtuZnRfdHJhbnNfZmxvd3RhYmxlX2hvb2tzKHRyYW5zKSwgaG9vaywgZmFsc2UpKSB7CiAJCQkJZXJyID0gLUVFWElTVDsKIAkJCQlnb3RvIGVycl9mbG93dGFibGVfdXBkYXRlX2hvb2s7CiAJCQl9CkBAIC05MzgzLDcgJiM0Mzs5Mzg3LDcgQEAgc3RhdGljIGludCBuZnRfZGVsZmxvd3RhYmxlX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCwKIAkJcmV0dXJuIGVycjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgJmFtcDtmbG93dGFibGVfaG9vay5saXN0LCBsaXN0KSB7Ci0JCWhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoJmFtcDtmbG93dGFibGUtJmd0O2hvb2tfbGlzdCwgdGhpcyk7CiYjNDM7CQlob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7Zmxvd3RhYmxlLSZndDtob29rX2xpc3QsIHRoaXMsIHRydWUpOwogCQlpZiAoIWhvb2spIHsKIAkJCWVyciA9IC1FTk9FTlQ7CiAJCQlnb3RvIGVycl9mbG93dGFibGVfZGVsX2hvb2s7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjI4CgkJCQkJCQlvdXRwdXQ6IDIwNgoJCQkJCQkJdGhvdWdodHM6IDgzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG5mX3RhYmxlcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgLiBJdCYjMzk7cyBhIG1vZGlmaWNhdGlvbiB0byBgbmZ0X2hvb2tfbGlzdF9maW5kYCwgYWRkaW5nIGEgYGJvb2wgc3RyaWN0YCBwYXJhbWV0ZXIuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGVuc3VyaW5nIGV4YWN0IGludGVyZmFjZSBuYW1lIG1hdGNoaW5nLiBJZiBgc3RyaWN0YCBpcyB0cnVlLCBpdCBmb3JjZXMgYW4gZXhhY3QgbGVuZ3RoIGNvbXBhcmlzb246IGBob29rLSZndDtpZm5hbWVsZW4gIT0gdGhpcy0mZ3Q7aWZuYW1lbGVuYCBiZWZvcmUgZXZlbiBnZXR0aW5nIHRvIHRoZSBgc3RybmNtcGAuCgpUaGUgcHJvYmxlbSB0aGlzIGlzIGZpeGluZyBpbW1lZGlhdGVseSBqdW1wcyBvdXQg4oCTIHRoYXQgYHN0cm5jbXBgIHdhcyB2dWxuZXJhYmxlIHRvIHByZWZpeCBtYXRjaGVzLiBXaXRoIGBtaW4oaG9vay0mZ3Q7aWZuYW1lbGVuLCB0aGlzLSZndDtpZm5hbWVsZW4pYCwgeW91IGNvdWxkIGVuZCB1cCB3aXRoIGEgbWF0Y2ggd2hlcmUsIHNheSwgJiMzNDtldGgwJiMzNDsgaW5jb3JyZWN0bHkgbWF0Y2hlcyAmIzM0O2V0aDAxLiYjMzQ7IFRoaXMgaXMgYSBjbGFzc2ljIGxvZ2ljIGJ1ZywgYW5kIGluIHRoZSBjb250ZXh0IG9mIGRlbGV0aW5nIGhvb2tzIChzcGVjaWZpY2FsbHkgaW4gYG5mdF9kZWxjaGFpbl9ob29rYCBhbmQgYG5mdF9kZWxmbG93dGFibGVfaG9va2ApLCB0aGF0JiMzOTtzICpiYWQqLiBXZSBjb3VsZCBiZSBkZWxldGluZyB0aGUgd3JvbmcgaG9vaywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIGRvd24gdGhlIGxpbmUgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBpbmNvcnJlY3QgYmVoYXZpb3IgYmVjYXVzZSB0aGUgaW50ZW5kZWQgaG9vayBpcyBzdGlsbCB0aGVyZSBhbmQgdGhlIHdyb25nIG9uZSBoYXMgYmVlbiBkZWxldGVkLgoKTXkgZmlyc3QgdGhvdWdodCwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJ1dCB0aGUgbGVuZ3RocyBgaWZuYW1lbGVuYCBhcmUganVzdCBzdHJpbmcgbGVuZ3RocywgYW5kIGBzdHJuY21wYCBoYXMgdGhlIGBtaW5gIGxpbWl0YXRpb24sIHRoZXJlJiMzOTtzIG5vIHdheSBpdCYjMzk7cyBnb2luZyB0byBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIEl0JiMzOTtzIHB1cmVseSBhIGxvZ2ljIGVycm9yLCBhIHByZWZpeCBtYXRjaGluZyBpc3N1ZS4gS0FTQU4gd291bGQgYmUgdGhlIHRvb2wgdG8gY2F0Y2ggYW55IHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBpZiB3ZSBkZWxldGUgdGhlIHdyb25nIGhvb2sgYW5kIHRyeSB0byBhY2Nlc3MgaXQgbGF0ZXIsIGJ1dCBLTVNBTiBpcyBpcnJlbGV2YW50IGhlcmUuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGNvZGUgc25pcHBldDoKCmBgYGMKc3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X2hvb2tfbGlzdF9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmhvb2tfbGlzdCwKCQkJCQkgICBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKnRoaXMsCgkJCQkJICAgYm9vbCBzdHJpY3QpCnsKCXN0cnVjdCBuZnRfaG9vayAqaG9vazsKCglsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvb2ssIGhvb2tfbGlzdCwgbGlzdCkgewoJCWlmIChzdHJpY3QgJmFtcDsmYW1wOyBob29rLSZndDtpZm5hbWVsZW4gIT0gdGhpcy0mZ3Q7aWZuYW1lbGVuKQoJCQljb250aW51ZTsKCQlpZiAoIXN0cm5jbXAoaG9vay0mZ3Q7aWZuYW1lLCB0aGlzLSZndDtpZm5hbWUsCgkJCSAgICAgbWluKGhvb2stJmd0O2lmbmFtZWxlbiwgdGhpcy0mZ3Q7aWZuYW1lbGVuKSkpIHsKCQkJaWYgKGhvb2stJmd0O2ZsYWdzICZhbXA7IE5GVF9IT09LX1JFTU9WRSkKCQkJCWNvbnRpbnVlOwoJCQlyZXR1cm4gaG9vazsKCQl9Cgl9CgoJcmV0dXJuIE5VTEw7Cn0KYGBgCgpPa2F5LCBjb25maXJtZWQuIElmIGBzdHJpY3RgIGlzIGZhbHNlLCBpdCBzdGlsbCB1c2VzIHRoYXQgYG1pbihob29rLSZndDtpZm5hbWVsZW4sIHRoaXMtJmd0O2lmbmFtZWxlbilgLCB3aGljaCBtZWFucyBwcmVmaXggbWF0Y2hpbmcgd2lsbCBzdGlsbCBvY2N1ciBpZiBgc3RyaWN0YCBpcyBkaXNhYmxlZC4gVGhhdCYjMzk7cyBwcm9iYWJseSBpbnRlbmRlZCBmb3Igd2lsZGNhcmQgdXNlIGNhc2VzLCBvciBtYXliZSBpdCYjMzk7cyBsZWdhY3kgYmVoYXZpb3IuIFdoYXRldmVyIHRoZSByZWFzb24sIHRoaXMgcGF0Y2ggKmRvZXMgbm90KiBpbnRyb2R1Y2Ugb3IgZml4IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEl0JiMzOTtzIGEgY2xlYXIgbG9naWMgYnVnIGZpeCDigJMgYWRkcmVzc2luZyB0aGUgZXhhY3QgdnMuIHByZWZpeCBtYXRjaGluZyBvZiBpbnRlcmZhY2UgbmFtZXMuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJdCYjMzk7cyBLQVNBTiBhbGwgdGhlIHdheSBmb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgZHVlIHRvIHRoZSBpbmNvcnJlY3QgZGVsZXRpb24uCgpUbyBzdW1tYXJpemUgZm9yIHRoZSByZXZpZXc6IFRoZSBwYXRjaCBtb2RpZmllcyBgbmZ0X2hvb2tfbGlzdF9maW5kYCB0byBlbmZvcmNlIHN0cmljdCBsZW5ndGggbWF0Y2hpbmcuIFRoaXMgZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgcHJlZml4IG1hdGNoZXMgZm9yIGludGVyZmFjZSBuYW1lcyBjb3VsZCBvY2N1ciBkdXJpbmcgaG9vayBkZWxldGlvbiAoYG5mdF9kZWxjaGFpbl9ob29rYCBhbmQgYG5mdF9kZWxmbG93dGFibGVfaG9va2ApIGR1ZSB0byB1c2luZyBgbWluYCBsZW5ndGggaW4gYHN0cm5jbXBgLiBUaGlzIGNvdWxkIGxlYWQgdG8gZnVuY3Rpb25hbCBvciB1c2UtYWZ0ZXItZnJlZSBlcnJvcnMuIEl0JiMzOTtzIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG5mdF9ob29rX2xpc3RfZmluZGAgdG8gb3B0aW9uYWxseSBlbmZvcmNlIHN0cmljdCBsZW5ndGggbWF0Y2hpbmcgKGBob29rLVx1MDAzZWlmbmFtZWxlbiAhPSB0aGlzLVx1MDAzZWlmbmFtZWxlbmApIHdoZW4gY29tcGFyaW5nIGludGVyZmFjZSBuYW1lcy4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgc3RybmNtcGAgd2l0aCBgbWluKGhvb2stXHUwMDNlaWZuYW1lbGVuLCB0aGlzLVx1MDAzZWlmbmFtZWxlbilgIGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIGEgcHJlZml4IG9mIGFuIGludGVyZmFjZSBuYW1lIChlLmcuLCBtYXRjaGluZyBcJiMzNDtldGgwXCYjMzQ7IHdpdGggXCYjMzQ7ZXRoMDFcJiMzNDspIGR1cmluZyBob29rIGRlbGV0aW9uIChgbmZ0X2RlbGNoYWluX2hvb2tgIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYCkuIFRoaXMgaXNzdWUgaXMgYSBsb2dpYyBlcnJvciB0aGF0IGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGhvb2sgZGVsZXRpb24sIHBvdGVudGlhbGx5IGNhdXNpbmcgZnVuY3Rpb25hbCBpc3N1ZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAod2hpY2ggS0FTQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2gpLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG5mdF9ob29rX2xpc3RfZmluZGAgdG8gb3B0aW9uYWxseSBlbmZvcmNlIHN0cmljdCBsZW5ndGggbWF0Y2hpbmcgKGBob29rLVx1MDAzZWlmbmFtZWxlbiAhPSB0aGlzLVx1MDAzZWlmbmFtZWxlbmApIHdoZW4gY29tcGFyaW5nIGludGVyZmFjZSBuYW1lcy4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgc3RybmNtcGAgd2l0aCBgbWluKGhvb2stXHUwMDNlaWZuYW1lbGVuLCB0aGlzLVx1MDAzZWlmbmFtZWxlbilgIGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIGEgcHJlZml4IG9mIGFuIGludGVyZmFjZSBuYW1lIChlLmcuLCBtYXRjaGluZyBcJiMzNDtldGgwXCYjMzQ7IHdpdGggXCYjMzQ7ZXRoMDFcJiMzNDspIGR1cmluZyBob29rIGRlbGV0aW9uIChgbmZ0X2RlbGNoYWluX2hvb2tgIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYCkuIFRoaXMgaXNzdWUgaXMgYSBsb2dpYyBlcnJvciB0aGF0IGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGhvb2sgZGVsZXRpb24sIHBvdGVudGlhbGx5IGNhdXNpbmcgZnVuY3Rpb25hbCBpc3N1ZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAod2hpY2ggS0FTQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2gpLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxNjozMi4wNjcxNDg1NDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYwNzY5NzY5MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9UQUJMRVNfTkVUREVWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfdGFibGVzX25ld2NoYWluXCIsXG4gICAgXCJuZl90YWJsZXNfZGVsY2hhaW5cIixcbiAgICBcIm5mX3RhYmxlc19uZXdmbG93dGFibGVcIixcbiAgICBcIm5mX3RhYmxlc19kZWxmbG93dGFibGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBuZnRfaG9va19saXN0X2ZpbmRgIHRvIG9wdGlvbmFsbHkgZW5mb3JjZSBzdHJpY3QgbGVuZ3RoIG1hdGNoaW5nIChgaG9vay1cXHUwMDNlaWZuYW1lbGVuICE9IHRoaXMtXFx1MDAzZWlmbmFtZWxlbmApIHdoZW4gY29tcGFyaW5nIGludGVyZmFjZSBuYW1lcy4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgc3RybmNtcGAgd2l0aCBgbWluKGhvb2stXFx1MDAzZWlmbmFtZWxlbiwgdGhpcy1cXHUwMDNlaWZuYW1lbGVuKWAgY291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggYSBwcmVmaXggb2YgYW4gaW50ZXJmYWNlIG5hbWUgKGUuZy4sIG1hdGNoaW5nIFxcXCJldGgwXFxcIiB3aXRoIFxcXCJldGgwMVxcXCIpIGR1cmluZyBob29rIGRlbGV0aW9uIChgbmZ0X2RlbGNoYWluX2hvb2tgIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYCkuIFRoaXMgaXNzdWUgaXMgYSBsb2dpYyBlcnJvciB0aGF0IGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGhvb2sgZGVsZXRpb24sIHBvdGVudGlhbGx5IGNhdXNpbmcgZnVuY3Rpb25hbCBpc3N1ZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAod2hpY2ggS0FTQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2gpLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIHdoZXJlIGl0IGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIG5ldGRldiBob29rcyB3aXRoIGRpZmZlcmVudCBuYW1lIGxlbmd0aHMgaWYgb25lIGlzIGEgcHJlZml4IG9mIGFub3RoZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgbmZfdGFibGVzIEFQSSwgYWZmZWN0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgbWVzc2FnZXMgZm9yIGNyZWF0aW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgY2hhaW5zIGFuZCBmbG93dGFibGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxNjozMi4wNjcxNTQxNTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MDU4NTY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDcwY2QxOGZjMDZkY2U5NzJlNjYwZjYwNDI3OTc2NjcwNmZmMGIxODhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjcgMTE6MTY6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xcbmluZGV4IGMxMTJlY2M0ZmNhMzIuLjc3Yzk2YjFkNDIxNzggMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xcbkBAIC0yNDQwLDExICsyNDQwLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9uZXRkZXZfaG9va19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9ob29rX2xpc3RfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqdGhpcylcXG4rXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9ob29rICp0aGlzLFxcbitcXHRcXHRcXHRcXHRcXHQgICBib29sIHN0cmljdClcXG4ge1xcbiBcXHRzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2s7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvb2ssIGhvb2tfbGlzdCwgbGlzdCkge1xcbitcXHRcXHRpZiAoc3RyaWN0IFxcdTAwMjZcXHUwMDI2IGhvb2stXFx1MDAzZWlmbmFtZWxlbiAhPSB0aGlzLVxcdTAwM2VpZm5hbWVsZW4pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAoIXN0cm5jbXAoaG9vay1cXHUwMDNlaWZuYW1lLCB0aGlzLVxcdTAwM2VpZm5hbWUsXFxuIFxcdFxcdFxcdCAgICAgbWluKGhvb2stXFx1MDAzZWlmbmFtZWxlbiwgdGhpcy1cXHUwMDNlaWZuYW1lbGVuKSkpIHtcXG4gXFx0XFx0XFx0aWYgKGhvb2stXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0hPT0tfUkVNT1ZFKVxcbkBAIC0yNDg2LDcgKzI0ODksNyBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGhvb2spO1xcbiBcXHRcXHRcXHRnb3RvIGVycl9ob29rO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoaG9va19saXN0LCBob29rKSkge1xcbitcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKGhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XFxuIFxcdFxcdFxcdE5MX1NFVF9CQURfQVRUUihleHRhY2ssIHRtcCk7XFxuIFxcdFxcdFxcdG5mdF9uZXRkZXZfaG9va19mcmVlKGhvb2spO1xcbiBcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbkBAIC0yOTQzLDcgKzI5NDYsNyBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc191cGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBnZW5tYXNrLCB1OCBwb2xpY3ksXFxuIFxcdFxcdFxcdFxcdFxcdG9wcy1cXHUwMDNlaG9va1xcdD0gYmFzZWNoYWluLVxcdTAwM2VvcHMuaG9vaztcXG4gXFx0XFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2YmFzZWNoYWluLVxcdTAwM2Vob29rX2xpc3QsIGgpKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXFx1MDAyNmJhc2VjaGFpbi1cXHUwMDNlaG9va19saXN0LCBoLCBmYWxzZSkpIHtcXG4gXFx0XFx0XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmgtXFx1MDAzZWxpc3QpO1xcbiBcXHRcXHRcXHRcXHRcXHRuZnRfbmV0ZGV2X2hvb2tfZnJlZShoKTtcXG4gXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTI5NTYsNyArMjk1OSw4IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICFuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcXG4gXFx0XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkge1xcbitcXHRcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaCwgZmFsc2UpKSB7XFxuIFxcdFxcdFxcdFxcdFxcdFxcdG5mdF9jaGFpbl9yZWxlYXNlX2hvb2soXFx1MDAyNmhvb2spO1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gXFx0XFx0XFx0XFx0XFx0fVxcbkBAIC0zMjU3LDcgKzMyNjEsNyBAQCBzdGF0aWMgaW50IG5mdF9kZWxjaGFpbl9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFxcdTAwMjZjaGFpbl9ob29rLmxpc3QsIGxpc3QpIHtcXG4tXFx0XFx0aG9vayA9IG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2YmFzZWNoYWluLVxcdTAwM2Vob29rX2xpc3QsIHRoaXMpO1xcbitcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgdGhpcywgdHJ1ZSk7XFxuIFxcdFxcdGlmICghaG9vaykge1xcbiBcXHRcXHRcXHRlcnIgPSAtRU5PRU5UO1xcbiBcXHRcXHRcXHRnb3RvIGVycl9jaGFpbl9kZWxfaG9vaztcXG5AQCAtOTA3Myw3ICs5MDc3LDcgQEAgc3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZnQpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXFx1MDAyNmZ0LVxcdTAwM2Vob29rX2xpc3QsIGhvb2spKSB7XFxuK1xcdFxcdFxcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXFx1MDAyNmZ0LVxcdTAwM2Vob29rX2xpc3QsIGhvb2ssIGZhbHNlKSkge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGVycl91bnJlZ2lzdGVyX25ldF9ob29rcztcXG4gXFx0XFx0XFx0fVxcbkBAIC05MTUwLDcgKzkxNTQsNyBAQCBzdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvb2ssIG5leHQsIFxcdTAwMjZmbG93dGFibGVfaG9vay5saXN0LCBsaXN0KSB7XFxuLVxcdFxcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlaG9va19saXN0LCBob29rKSkge1xcbitcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XFxuIFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZob29rLVxcdTAwM2VsaXN0KTtcXG4gXFx0XFx0XFx0bmZ0X25ldGRldl9ob29rX2ZyZWUoaG9vayk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC05MTYzLDcgKzkxNjcsNyBAQCBzdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRcXHRcXHQgICAgIW5mdF90cmFuc19mbG93dGFibGVfdXBkYXRlKHRyYW5zKSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZuZnRfdHJhbnNfZmxvd3RhYmxlX2hvb2tzKHRyYW5zKSwgaG9vaykpIHtcXG4rXFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2bmZ0X3RyYW5zX2Zsb3d0YWJsZV9ob29rcyh0cmFucyksIGhvb2ssIGZhbHNlKSkge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGVycl9mbG93dGFibGVfdXBkYXRlX2hvb2s7XFxuIFxcdFxcdFxcdH1cXG5AQCAtOTM4Myw3ICs5Mzg3LDcgQEAgc3RhdGljIGludCBuZnRfZGVsZmxvd3RhYmxlX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgXFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcXG4tXFx0XFx0aG9vayA9IG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2Vob29rX2xpc3QsIHRoaXMpO1xcbitcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWhvb2tfbGlzdCwgdGhpcywgdHJ1ZSk7XFxuIFxcdFxcdGlmICghaG9vaykge1xcbiBcXHRcXHRcXHRlcnIgPSAtRU5PRU5UO1xcbiBcXHRcXHRcXHRnb3RvIGVycl9mbG93dGFibGVfZGVsX2hvb2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDExOjE2OjMyLjQxODI5NDM2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyMTY4MjExMDkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX1RBQkxFU19ORVRERVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl90YWJsZXNfbmV3Y2hhaW5cIixcbiAgICBcIm5mX3RhYmxlc19kZWxjaGFpblwiLFxuICAgIFwibmZfdGFibGVzX25ld2Zsb3d0YWJsZVwiLFxuICAgIFwibmZfdGFibGVzX2RlbGZsb3d0YWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIHdoZXJlIGl0IGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIG5ldGRldiBob29rcyB3aXRoIGRpZmZlcmVudCBuYW1lIGxlbmd0aHMgaWYgb25lIGlzIGEgcHJlZml4IG9mIGFub3RoZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgbmZfdGFibGVzIEFQSSwgYWZmZWN0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgbWVzc2FnZXMgZm9yIGNyZWF0aW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgY2hhaW5zIGFuZCBmbG93dGFibGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MGNkMThmYzA2ZGNlOTcyZTY2MGY2MDQyNzk3NjY3MDZmZjBiMTg4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMTE6MTY6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5pbmRleCBjMTEyZWNjNGZjYTMyLi43N2M5NmIxZDQyMTc4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5AQCAtMjQ0MCwxMSArMjQ0MCwxNCBAQCBzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfbmV0ZGV2X2hvb2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxuIH1cbiBcbiBzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxuLVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKnRoaXMpXG4rXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqdGhpcyxcbitcdFx0XHRcdFx0ICAgYm9vbCBzdHJpY3QpXG4ge1xuIFx0c3RydWN0IG5mdF9ob29rICpob29rO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCBob29rX2xpc3QsIGxpc3QpIHtcbitcdFx0aWYgKHN0cmljdCBcdTAwMjZcdTAwMjYgaG9vay1cdTAwM2VpZm5hbWVsZW4gIT0gdGhpcy1cdTAwM2VpZm5hbWVsZW4pXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghc3RybmNtcChob29rLVx1MDAzZWlmbmFtZSwgdGhpcy1cdTAwM2VpZm5hbWUsXG4gXHRcdFx0ICAgICBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKSkpIHtcbiBcdFx0XHRpZiAoaG9vay1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0hPT0tfUkVNT1ZFKVxuQEAgLTI0ODYsNyArMjQ4OSw3IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0ZXJyID0gUFRSX0VSUihob29rKTtcbiBcdFx0XHRnb3RvIGVycl9ob29rO1xuIFx0XHR9XG4tXHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoaG9va19saXN0LCBob29rKSkge1xuK1x0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKGhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XG4gXHRcdFx0TkxfU0VUX0JBRF9BVFRSKGV4dGFjaywgdG1wKTtcbiBcdFx0XHRuZnRfbmV0ZGV2X2hvb2tfZnJlZShob29rKTtcbiBcdFx0XHRlcnIgPSAtRUVYSVNUO1xuQEAgLTI5NDMsNyArMjk0Niw3IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcbiBcdFx0XHRcdFx0b3BzLVx1MDAzZWhvb2tcdD0gYmFzZWNoYWluLVx1MDAzZW9wcy5ob29rO1xuIFx0XHRcdFx0fVxuIFxuLVx0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZiYXNlY2hhaW4tXHUwMDNlaG9va19saXN0LCBoKSkge1xuK1x0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZiYXNlY2hhaW4tXHUwMDNlaG9va19saXN0LCBoLCBmYWxzZSkpIHtcbiBcdFx0XHRcdFx0bGlzdF9kZWwoXHUwMDI2aC1cdTAwM2VsaXN0KTtcbiBcdFx0XHRcdFx0bmZ0X25ldGRldl9ob29rX2ZyZWUoaCk7XG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTI5NTYsNyArMjk1OSw4IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcbiBcdFx0XHRcdFx0ICAgICFuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcbiBcdFx0XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkge1xuK1x0XHRcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19jaGFpbl9ob29rcyh0cmFucyksXG4rXHRcdFx0XHRcdFx0XHQgICAgICAgaCwgZmFsc2UpKSB7XG4gXHRcdFx0XHRcdFx0bmZ0X2NoYWluX3JlbGVhc2VfaG9vayhcdTAwMjZob29rKTtcbiBcdFx0XHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdFx0XHRcdFx0fVxuQEAgLTMyNTcsNyArMzI2MSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2RlbGNoYWluX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XG4tXHRcdGhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2YmFzZWNoYWluLVx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XG4rXHRcdGhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2YmFzZWNoYWluLVx1MDAzZWhvb2tfbGlzdCwgdGhpcywgdHJ1ZSk7XG4gXHRcdGlmICghaG9vaykge1xuIFx0XHRcdGVyciA9IC1FTk9FTlQ7XG4gXHRcdFx0Z290byBlcnJfY2hhaW5fZGVsX2hvb2s7XG5AQCAtOTA3Myw3ICs5MDc3LDcgQEAgc3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBmdCkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZ0LVx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcbitcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZ0LVx1MDAzZWhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XG4gXHRcdFx0XHRlcnIgPSAtRUVYSVNUO1xuIFx0XHRcdFx0Z290byBlcnJfdW5yZWdpc3Rlcl9uZXRfaG9va3M7XG4gXHRcdFx0fVxuQEAgLTkxNTAsNyArOTE1NCw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaG9vaywgbmV4dCwgXHUwMDI2Zmxvd3RhYmxlX2hvb2subGlzdCwgbGlzdCkge1xuLVx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2Vob29rX2xpc3QsIGhvb2spKSB7XG4rXHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XG4gXHRcdFx0bGlzdF9kZWwoXHUwMDI2aG9vay1cdTAwM2VsaXN0KTtcbiBcdFx0XHRuZnRfbmV0ZGV2X2hvb2tfZnJlZShob29rKTtcbiBcdFx0XHRjb250aW51ZTtcbkBAIC05MTYzLDcgKzkxNjcsNyBAQCBzdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdCAgICAhbmZ0X3RyYW5zX2Zsb3d0YWJsZV91cGRhdGUodHJhbnMpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfZmxvd3RhYmxlX2hvb2tzKHRyYW5zKSwgaG9vaykpIHtcbitcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19mbG93dGFibGVfaG9va3ModHJhbnMpLCBob29rLCBmYWxzZSkpIHtcbiBcdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4gXHRcdFx0XHRnb3RvIGVycl9mbG93dGFibGVfdXBkYXRlX2hvb2s7XG4gXHRcdFx0fVxuQEAgLTkzODMsNyArOTM4Nyw3IEBAIHN0YXRpYyBpbnQgbmZ0X2RlbGZsb3d0YWJsZV9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcbi1cdFx0aG9vayA9IG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZmbG93dGFibGUtXHUwMDNlaG9va19saXN0LCB0aGlzKTtcbitcdFx0aG9vayA9IG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZmbG93dGFibGUtXHUwMDNlaG9va19saXN0LCB0aGlzLCB0cnVlKTtcbiBcdFx0aWYgKCFob29rKSB7XG4gXHRcdFx0ZXJyID0gLUVOT0VOVDtcbiBcdFx0XHRnb3RvIGVycl9mbG93dGFibGVfZGVsX2hvb2s7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxNjozMi40MTgyOTU3ODFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjU3NDI4MTg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmZ0X2hvb2tfbGlzdF9maW5kYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gU291bmRzIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZ2l2ZW4gdGhhdCBpdCdzIGZpeGluZyBhIHBvdGVudGlhbCBtYXRjaGluZyBidWcgcmVsYXRlZCB0byBuZXRmaWx0ZXIgbmZfdGFibGVzLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGEgYHN0cmljdGAgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbi4gSWYgYHN0cmljdGAgaXMgZW5hYmxlZCwgaXQgZW5zdXJlcyBhbiBleGFjdCBtYXRjaCBvZiBgaWZuYW1lbGVuYCBiZWZvcmUgY29tcGFyaW5nIG5hbWVzLiBUaGlzIGlzIGxpa2VseSBhZGRyZXNzaW5nIGEgc3VidGxlIGZsYXcgd2hlcmUgaG9va3Mgd2l0aCBzbGlnaHRseSBkaWZmZXJlbnQgbmFtZSBsZW5ndGhzIGNvdWxkIGJlIGluY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgYSBtYXRjaCBpZiBvbmUgbmFtZSB3YXMgYSBwcmVmaXggb2YgYW5vdGhlciwgYSBjbGFzc2ljIHByZWZpeC9zdWJzdHJpbmcgdnVsbmVyYWJpbGl0eS5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhpcyBtb2RpZmllZCBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcmU6IGBuZnRfZGVsY2hhaW5faG9va2AsIGBuZnRfZGVsZmxvd3RhYmxlX2hvb2tgLCBgbmZ0X2Zsb3d0YWJsZV91cGRhdGVgLCBgbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV9uZXRfaG9va3NgLCBgbmZfdGFibGVzX3VwZGNoYWluYCwgYW5kIGBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzYC4gVGhlc2UgYXJlIG15IHRhcmdldHMuXG5cbk5vdywgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwgSSBuZWVkIHRvIHZlcmlmeSBob3cgYG5mX3RhYmxlc19hcGkuY2AgaXMgY29tcGlsZWQuIEEgcXVpY2sgY2hlY2sgb2YgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2Agc2hvdWxkIGNvbmZpcm0gaXQgaXMgdW5kZXIgYENPTkZJR19ORl9UQUJMRVNgLCB3aGljaCBJIG5lZWQgdG8ga25vdyBmb3IgYnVpbGQgY29uZmlndXJhdGlvbnMuIEEgcXVpY2sgZ3JlcCB3aWxsIGFsc28gdmVyaWZ5IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxNjo0OC45OTI1Nzk3OTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1MDE5NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX3RhYmxlc19hcGlcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg0PW9iai0kKENPTkZJR19ORl9EVVBfTkVUREVWKVxcdCs9IG5mX2R1cF9uZXRkZXYub1xcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04Ni0jIG5mX3RhYmxlc1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODc6bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg4LVxcdFxcdCAgbmZfdGFibGVzX3RyYWNlLm8gbmZ0X2ltbWVkaWF0ZS5vIG5mdF9jbXAubyBuZnRfcmFuZ2UubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDExOjE2OjQ5LjE5NzYwNjUyNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDE2NTU5OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYENPTkZJR19ORl9UQUJMRVNgIGFuZCBSZWxhdGVkIEhvb2tzKipcblxuQWxyaWdodCwgc28gYENPTkZJR19ORl9UQUJMRVNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UncmUgZGVhbGluZyB3aXRoIGhlcmUsIHRoYXQgbXVjaCBpcyBjbGVhci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgaG93IGl0IGFsbCB0aWVzIHRvZ2V0aGVyLCBzcGVjaWZpY2FsbHkgaG93IHRoaXMgZmVhdHVyZSBpcyB1bmluc3RhbGxlZC4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdmVyaWZ5IHRoZSB0ZWFyZG93biBwYXRocy4gTGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSBgbmZ0X2RlbGNoYWluX2hvb2tgIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYCBmdW5jdGlvbnMgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIFRoZXNlIGhvb2tzIGFyZSB3aGVyZSB0aGUgcmVtb3ZhbCBvZiBjaGFpbnMgYW5kIGZsb3cgdGFibGVzIGFyZSBoYW5kbGVkLCBhbmQgYXJlIG9idmlvdXNseSBjcml0aWNhbCB0byB0aGUgd2hvbGUgdW5pbnN0YWxsIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRob3NlIGZ1bmN0aW9ucywgYW55IGRlcGVuZGVuY2llcyB0aGV5IG1pZ2h0IGhhdmUsIGFuZCB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgY2xlYW5lZCB1cCB0byBtYWtlIHN1cmUgdGhpbmdzIGFyZSBmdWxseSBkaXNtYW50bGVkLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBhcyB3ZWxsLCBhcyB0aGF0IGNhbiBiZSBhIHNvdXJjZSBvZiBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk2NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDExOjE3OjAyLjIxNDE2ODgyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkzNDUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfZGVsY2hhaW5faG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMjMzPXN0YXRpYyB2b2lkIG5mdF90cmFuc19kZWxob29rX2Fib3J0KHN0cnVjdCBsaXN0X2hlYWQgKmRlbF9saXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI0Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMjQzOnN0YXRpYyBpbnQgbmZ0X2RlbGNoYWluX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMjQ0LVxcdFxcdFxcdCAgICAgc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMjk4PXN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbGNoYWluKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMzUxLVxcdFxcdFxcdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYodGFibGUtXFx1MDAzZWZhbWlseSwgYmFzZWNoYWluLVxcdTAwM2VvcHMuaG9va251bSkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzM1MjpcXHRcXHRcXHRcXHRyZXR1cm4gbmZ0X2RlbGNoYWluX2hvb2soXFx1MDAyNmN0eCwgYmFzZWNoYWluLCBleHRhY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzNTMtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxNzowMi4yNTgxMDUzM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODg4MTcwNDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYG5mdF9kZWxmbG93dGFibGVfaG9va2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYCBmdW5jdGlvbi4gVGhpcyBpcyBhIGNyaXRpY2FsIGNvbXBvbmVudCBmb3IgbWFuYWdpbmcgYW5kIG1vZGlmeWluZyBmbG93IHRhYmxlcyB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IHRob3JvdWdobHksIGFuZCBtYWtlIHN1cmUgaXQncyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZCwgYW5kIHRoYXQgYW55IG9mIG15IHJlbGF0ZWQgY29kZSBpcyBjb21wYXRpYmxlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBzb3VyY2UgY29kZSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb24gb2YgdGhpcyBob29rLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgYWxsIHRoZSBlZGdlIGNhc2VzLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgaXMgaW1wYWN0ZWQgYnkgdGhlIG5ldyBrZXJuZWwgdmVyc2lvbiBvciBhbnkgcmVjZW50IHNlY3VyaXR5IHVwZGF0ZXMsIGFzIHRoZXNlIGhhdmUgYSBoYWJpdCBvZiBpbnRyb2R1Y2luZyBzdWJ0bGUsIGJ1dCBpbXBhY3RmdWwsIGNoYW5nZXMgaW4gbWVtb3J5IGxheW91dCBhbmQgaGFuZGxpbmcgdGhhdCBjb3VsZCBhZmZlY3QgaG93IGZsb3cgdGFibGUgZW50cmllcyBhcmUgbWFuYWdlZC4gSSdsbCBhbHNvIHdhbnQgdG8gbG9vayBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZXMsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIHRvIHByb3RlY3QgdGhlIGZsb3cgdGFibGUgZGF0YSBzdHJ1Y3R1cmVzLiBBIHF1aWNrIGdsYW5jZSBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBtaWdodCBhbHNvIHJldmVhbCBhbnkgbGVzcy10aGFuLW9idmlvdXMgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBlcnJvciBoYW5kbGluZzsgYXJlIHRoZXJlIHN1ZmZpY2llbnQgY2hlY2tzIHRvIGRlYWwgd2l0aCBwb3RlbnRpYWwgZmFpbHVyZXMgYW5kIGFyZSB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgY29kZXMvbWVzc2FnZXMgYmVpbmcgcmV0dXJuZWQ/IExldCdzIGdldCB0byB3b3JrIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTY4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTE6MTc6MzEuMTQ2Mjc4NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODczMjI2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfZGVsZmxvd3RhYmxlX2hvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM2Mz1zdGF0aWMgdm9pZCBuZnRfZmxvd3RhYmxlX2hvb2tfcmVsZWFzZShzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZV9ob29rICpmbG93dGFibGVfaG9vaylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzNzItXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTM3MzpzdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzNzQtXFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05NDI1PXN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbGZsb3d0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTQ2OS1cXHRpZiAobmxhW05GVEFfRkxPV1RBQkxFX0hPT0tdKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjk0NzA6XFx0XFx0cmV0dXJuIG5mdF9kZWxmbG93dGFibGVfaG9vayhcXHUwMDI2Y3R4LCBmbG93dGFibGUsIGV4dGFjayk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTQ3MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTE6MTc6MzEuMTk1MDEzOTY5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY5MjMzMTYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIE5ldGZpbHRlci9uZnRhYmxlcyBmdW5jdGlvbnMgYW5kIGltbWVkaWF0ZWx5IHNlZSBzb21lIHByaW1lIGZ1enppbmcgY2FuZGlkYXRlcy4gU3BlY2lmaWNhbGx5LCBgbmZfdGFibGVzX3VwZGNoYWluYCwgYG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3NgLCBgbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV9uZXRfaG9va3NgLCBgbmZ0X2Zsb3d0YWJsZV91cGRhdGVgLCBgbmZ0X2RlbGNoYWluX2hvb2tgLCBhbmQgYG5mdF9kZWxmbG93dGFibGVfaG9va2AgYWxsIGxvb2sgbGlrZSB0aGV5IGhhbmRsZSBjcnVjaWFsIHN0YXRlIGNoYW5nZXMgb3IgaW5wdXQgcGFyc2luZyB3aXRoaW4gdGhlIGZsb3d0YWJsZSBhbmQgY2hhaW4gbWFuYWdlbWVudC4gVGhleSdyZSBkZWZpbml0ZWx5IG9uIHRoZSBsaXN0LlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIEkgcmVtZW1iZXIgYG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3NgIGJlaW5nIHN0YXRpYy4gSSBzaG91bGQgdmVyaWZ5IGlmIGBuZl90YWJsZXNfdXBkY2hhaW5gIGlzIGFsc28gc3RhdGljLCBhcyB0aGlzIG1heSBpbXBhY3QgaG93IGFwcHJvYWNoYWJsZSBpdCB3aWxsIGJlIGFzIGEgZnV6emluZyB0YXJnZXQuIExldCdzIGRvdWJsZSBjaGVjayB0aGF0LCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxODcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTE6MTc6MzUuODg3MzQ4Mzc2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY3ODMyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl90YWJsZXNfdXBkY2hhaW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mjc1Mz1zdGF0aWMgaW50IG5mX3RhYmxlc19hZGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBmYW1pbHksIHU4IHBvbGljeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI4OTgtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjg5OTpzdGF0aWMgaW50IG5mX3RhYmxlc191cGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBnZW5tYXNrLCB1OCBwb2xpY3ksXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjkwMC1cXHRcXHRcXHQgICAgICB1MzIgZmxhZ3MsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMTE2PXN0YXRpYyBpbnQgbmZfdGFibGVzX25ld2NoYWluKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMjA5LVxcdFxcdGZsYWdzIHw9IGNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9CQVNFO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMyMTA6XFx0XFx0cmV0dXJuIG5mX3RhYmxlc191cGRjaGFpbihcXHUwMDI2Y3R4LCBnZW5tYXNrLCBwb2xpY3ksIGZsYWdzLCBhdHRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyMTEtXFx0XFx0XFx0XFx0XFx0ICBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxNzozNS45MzMwMzIyMzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1Njc0MDk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJZGVudGlmeWluZyBEeW5hbWljIE5ldGZpbHRlciBBUEkgRW50cnlwb2ludHMqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpbmdzIGFwcGVhciBzdGF0aWMsIHdoaWNoIGlzbid0IGVudGlyZWx5IHN1cnByaXNpbmcuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8gemVybyBpbiBvbiBhbnkgTmV0ZmlsdGVyIEFQSSBlbnRyeXBvaW50cyB0aGF0IGV4aGliaXQgZHluYW1pYyBiZWhhdmlvci4gV2UgbmVlZCB0byBpZGVudGlmeSBmdW5jdGlvbnMgd2hpY2ggbWlnaHQgYWxsb3cgZm9yIHRoZSBydW50aW1lIGNyZWF0aW9uLCBtb2RpZmljYXRpb24sIG9yIGRlbGV0aW9uIG9mIG9iamVjdHMgd2l0aGluIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLiBNeSBpbml0aWFsIHNjYW4gcG9pbnRzIHRvd2FyZHMgZnVuY3Rpb25zIGxpa2UgYG5mX3RhYmxlc19uZXdjaGFpbmAsIHdoaWNoIHN1Z2dlc3RzIHRoZSBhYmlsaXR5IHRvIGluc3RhbnRpYXRlIG5ldyBjaGFpbnMsIGFuZCwgY29udmVyc2VseSwgYG5mX3RhYmxlc19kZWxjaGFpbmAsIHdoaWNoLCBsb2dpY2FsbHksIHdvdWxkIHJlbW92ZSBleGlzdGluZyBjaGFpbnMuIFNpbWlsYXJseSwgYG5mX3RhYmxlc19uZXdmbG93dGFibGVgIGFuZCBgbmZfdGFibGVzX2RlbGZsb3d0YWJsZWAgYXJlIG9uIHRoZSBsaXN0LCBpbmRpY2F0aW5nIG9wZXJhdGlvbnMgYXJvdW5kIGZsb3cgdGFibGVzLCB3aGljaCBJJ2QgZXhwZWN0IHdvdWxkIGJlIGR5bmFtaWMgZWxlbWVudHMgaW4gYSBOZXRmaWx0ZXIgc2V0dXAuIFRoaXMgd2lsbCBsaWtlbHkgZm9ybSB0aGUgYmFzaXMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgyMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDExOjE3OjQwLjE4OTc3NTkyMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4Njg1ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX3RhYmxlc19uZXdmbG93dGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTEzNz1zdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTIyOC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MjI5OnN0YXRpYyBpbnQgbmZfdGFibGVzX25ld2Zsb3d0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkyMzAtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTk1OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZfdGFibGVzX2NiW05GVF9NU0dfTUFYXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMTI2LVxcdFtORlRfTVNHX05FV0ZMT1dUQUJMRV0gPSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAxMjc6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mX3RhYmxlc19uZXdmbG93dGFibGUsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAxMjgtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfQkFUQ0gsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDExOjE3OjQwLjM2ODQ2NjQ3M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc0Njk4MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgTkZfVEFCTEVTIC0gSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciBgbmZfdGFibGVzYCDigJMgZ290IGl0LCB0aGVzZSBhcmUgdGhlIGhvb2tzOiBgbmZfdGFibGVzX25ld2NoYWluYCwgYG5mX3RhYmxlc19kZWxjaGFpbmAsIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCwgYW5kIGBuZl90YWJsZXNfZGVsZmxvd3RhYmxlYC4gIEJyaWxsaWFudCEgIE5ldGxpbmsgY2FsbGJhY2tzIGFyZSAqaWRlYWwqIGZvciBmdXp6aW5nLiAgVGhlIHN0cnVjdHVyZSBpcyBwZXJmZWN0IGZvciBmZWVkaW5nIGluIG1hbGZvcm1lZCBkYXRhIGFuZCBzZWVpbmcgd2hhdCBicmVha3MuIEkgY2FuIHJlYWxseSBnZXQgY3JlYXRpdmUgd2l0aCBjcmFmdGluZyB0aG9zZSBuZXRsaW5rIG1lc3NhZ2VzLlxuXG5GaXJzdCB0aG91Z2gsIGdvdHRhIGNoZWNrIHRob3NlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX05GX1RBQkxFU2AgaXMgZW5hYmxlZCBzbyBJIGtub3cgd2hhdCBJJ20gcGxheWluZyB3aXRoLCBhbmQgdGhhdCBhbnkgcmVxdWlyZWQgc3VwcG9ydGluZyBtb2R1bGVzIGFyZSBhbHNvIGluIHBsYWNlIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseSBmb3IgdGhlIHRlc3RpbmcuIEdvdCB0byBidWlsZCBhIHNvbGlkIGJhc2UgdG8gd29yayBmcm9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mzg2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTE6MTc6NDQuMjQzMTY2ODA2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM0MzA5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXFx0ZGVwZW5kcyBvbiBJUFY2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxNzo0NC4yOTE1MTMxMTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUxMDkwNjIxMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJJ2QgdGhpbmsgaXQgdGhyb3VnaDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyB0aGUgYmFzZSBjb25maWcgaXMgZGVmaW5pdGVseSBgTkZfVEFCTEVTYC4gVGhpcyBwYXRjaCBpcyBtZXNzaW5nIHdpdGggbmV0ZGV2IGhvb2tzIHRob3VnaCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgdGhhdCB0aGVyZSAqbWlnaHQqIGJlIGEgc2Vjb25kYXJ5IGNvbmZpZyBvcHRpb24gaW52b2x2ZWQgaGVyZSwgbGlrZWx5IGBORl9UQUJMRVNfTkVUREVWYC4gSXQncyBhIGNvbW1vbiBwYXR0ZXJuIHRvIHNwbGl0IG91dCBzcGVjaWZpYyBmdW5jdGlvbmFsaXRpZXMgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yayBkZXZpY2UgaW50ZXJhY3Rpb24uXG5cbkxldCdzIGRvdWJsZS1jaGVjayBteSBodW5jaC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGUgZnVuY3Rpb25zIGBuZnRfbmV0ZGV2X2hvb2tfYWxsb2NgIGFuZCBgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rc2AgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYE5GX1RBQkxFU19ORVRERVZgLiBJZiB0aGV5IGFyZSwgaXQgc3RyZW5ndGhlbnMgdGhlIGFyZ3VtZW50IGZvciByZXF1aXJpbmcgdGhhdCBvcHRpb24gYWxvbmdzaWRlIGBORl9UQUJMRVNgLiBJZiBub3QsIHRoZW4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgYW5kIHVuZGVyc3RhbmQgd2h5IG5ldGRldiBtb2RpZmljYXRpb25zIHdvdWxkIG5lY2Vzc2l0YXRlIGFueSBjb25maWd1cmF0aW9uIGNoYW5nZSBhdCBhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4ODUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxODowOS40MDA1NzczMzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDk1ODA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfbmV0ZGV2X2hvb2tfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjM2Mz12b2lkIG5mX3RhYmxlc19jaGFpbl9kZXN0cm95KHN0cnVjdCBuZnRfY2hhaW4gKmNoYWluKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjM5Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyMzk3OnN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9uZXRkZXZfaG9va19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjM5OC1cXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQ2Mz1zdGF0aWMgaW50IG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4NS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDg2OlxcdFxcdGhvb2sgPSBuZnRfbmV0ZGV2X2hvb2tfYWxsb2MobmV0LCB0bXAsIHByZWZpeCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4Ny1cXHRcXHRpZiAoSVNfRVJSKGhvb2spKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNTI0PXN0YXRpYyBpbnQgbmZ0X2NoYWluX3BhcnNlX25ldGRldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTMxLVxcdGlmICh0YltORlRBX0hPT0tfREVWXSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI1MzI6XFx0XFx0aG9vayA9IG5mdF9uZXRkZXZfaG9va19hbGxvYyhuZXQsIHRiW05GVEFfSE9PS19ERVZdLCBmYWxzZSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjUzMy1cXHRcXHRpZiAoSVNfRVJSKGhvb2spKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDExOjE4OjA5LjY1NTU0MDM5OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI0NDA0NzQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEksIGFuIGV4cGVydCwgYW0gaGF2aW5nIGl0OlxuXG4qKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBuZnRfbmV0ZGV2X2hvb2tfYWxsb2NgKipcblxuUmlnaHQsIGxldCBtZSBqdXN0IHJ1biB0aGF0IHF1ZXN0aW9uIHRocm91Z2ggbXkgaGVhZC4gSXMgYG5mdF9uZXRkZXZfaG9va19hbGxvY2AgY29tcGlsZWQgKmNvbmRpdGlvbmFsbHkqPyBUaGF0J3MgdGhlIGNydXggb2YgaXQuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUga2VybmVsJ3MgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHdheSB0aG9zZSBOZXRmaWx0ZXIgaG9va3Mgd29yazsgYXJlIHRoZXJlIHNwZWNpZmljIGZlYXR1cmVzLCBvciBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbnMsIG9yIGNlcnRhaW4gbW9kdWxlIGNvbmZpZ3VyYXRpb25zIHRoYXQgd291bGQgdHJpZ2dlciBpdHMgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3M/IEl0J3Mgb2Z0ZW4gcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBhbmQgdGhlIGZlYXR1cmVzIGl0IGNhbiBzdXBwb3J0LiBUaGlzIGNvdWxkIGJlIHJlbGF0ZWQgdG8gdGhpbmdzIGxpa2UgaW5ncmVzcy9lZ3Jlc3MgaG9va3MsIG9yIHBlcmhhcHMgdGhlIHN1cHBvcnQgZm9yIGNlcnRhaW4gaGFyZHdhcmUgb2ZmbG9hZHMuIEkgbmVlZCB0byBxdWlja2x5IHZpc3VhbGl6ZSB0aGUgcmVsZXZhbnQgYEtjb25maWdgIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxODoyMS44OTk1ODk5MTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODg5MjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19ORl9UQUJMRVNfTkVUREVWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTE1NTI9c3RhdGljIGJvb2wgbmZ0X3N1cHBvcnRlZF9mYW1pbHkodTggZmFtaWx5KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTU2My0jZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxNTY0OiNpZmRlZiBDT05GSUdfTkZfVEFCTEVTX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE1NjUtXFx0XFx0fHwgZmFtaWx5ID09IE5GUFJPVE9fTkVUREVWXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDExOjE4OjIxLjk0NTQ4MjE0N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjA4MDIwNTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gZm9yIE5ldGRldiBIb29rcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG5mdF9uZXRkZXZfaG9va19hbGxvY2AgZnVuY3Rpb24sIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCwgZXZlbiB0aG91Z2ggaXQncyB1c2VkIGZvciBuZXRkZXYgaG9va3MuIFRoYXQgZmVlbHMuLi4gaW5lZmZpY2llbnQuIFRoZSBxdWVzdGlvbiBpcywgaXMgYENPTkZJR19ORl9UQUJMRVNfTkVUREVWYCBhY3R1YWxseSBuZWNlc3Nhcnk/IEknbSBwcmV0dHkgc3VyZSBpdCdzIGEgZ29vZCBpZGVhIHRvIGhhdmUgaXQgZW5hYmxlZC4gQW5kLCBvZiBjb3Vyc2UsIGBORl9UQUJMRVNgIGl0c2VsZiBpcyBhbHNvIGVzc2VudGlhbC5cblxuTm93LCBsZXQncyB0cmFjZSB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgbmZ0X2hvb2tfbGlzdF9maW5kYCBpcyBiZWluZyBjYWxsZWQuIEFscmlnaHQsIGl0J3MgdXNlZCB3aXRoaW4gYG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3NgLCBgbmZfdGFibGVzX3VwZGNoYWluYCwgYG5mdF9kZWxjaGFpbl9ob29rYCwgYG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzYCwgYG5mdF9mbG93dGFibGVfdXBkYXRlYCwgYW5kIGBuZnRfZGVsZmxvd3RhYmxlX2hvb2tgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGFsbCBwYXJ0IG9mIGFkZGluZywgdXBkYXRpbmcsIGFuZCBkZWxldGluZyBjaGFpbnMgYW5kIGZsb3d0YWJsZXMuXG5cblRoZSBlbnRyeSBwb2ludHMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4uLiB0aGV5J3JlIGFsbCBuZXRsaW5rIGNhbGxiYWNrczogYG5mX3RhYmxlc19uZXdjaGFpbmAsIGBuZl90YWJsZXNfZGVsY2hhaW5gLCBgbmZfdGFibGVzX25ld2Zsb3d0YWJsZWAsIGFuZCBgbmZfdGFibGVzX2RlbGZsb3d0YWJsZWAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gT2theSwgYE5GX1RBQkxFU2AgZGVwZW5kcyBvbiBgTkVURklMVEVSX05FVExJTktgLCBhbmQgYE5GX1RBQkxFU19ORVRERVZgIGRlcGVuZHMgb24gYE5GX1RBQkxFU2AuIFdlIGNhbiBzZWUgdGhlIGRlcGVuZGVuY3kgdHJlZS5cblxuU28sIGluIHRoZSBlbmQsIGl0IG1lYW5zIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYFtcIk5GX1RBQkxFU1wiLCBcIk5GX1RBQkxFU19ORVRERVZcIl1gLlxuXG5GaW5hbGx5LCBJJ20gZ29pbmcgdG8gcmV2aWV3IG15IHJhdGlvbmFsZTogVGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBidWcgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAsIHNwZWNpZmljYWxseSB3aGVyZSBpdCBjb3VsZCBpbmNvcnJlY3RseSBtYXRjaCBob29rcyBpZiBvbmUgaXMgYSBwcmVmaXggb2YgYW5vdGhlci4gSXQncyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byB0aGUgbmV0ZmlsdGVyIG5mX3RhYmxlcyBBUEksIGFmZmVjdGluZyB0aGUgaGFuZGxpbmcgb2YgbmV0ZGV2IGhvb2tzLCBhbmQgaG93IGNoYWlucyBhbmQgZmxvd3RhYmxlcyBhcmUgbWFuYWdlZC4gVGhlIGtleSBpbnRlcmFjdGlvbiBpcyB0aGUgbmV0bGluayBtZXNzYWdlcyBjcmVhdGluZywgdXBkYXRpbmcgb3IgZGVsZXRpbmcgdGhlc2Ugb2JqZWN0cy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNsZWFyOiB0aGUgZm9jdXMgc3ltYm9scyBhcmUgYG5mX3RhYmxlc19uZXdjaGFpbmAsIGBuZl90YWJsZXNfZGVsY2hhaW5gLCBgbmZfdGFibGVzX25ld2Zsb3d0YWJsZWAsIGFuZCBgbmZfdGFibGVzX2RlbGZsb3d0YWJsZWAuXG5cbk5vdywgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTY3LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxODozNC4wMjU2OTAzNjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDcxMjI2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9UQUJMRVNfTkVUREVWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfdGFibGVzX25ld2NoYWluXCIsXG4gICAgXCJuZl90YWJsZXNfZGVsY2hhaW5cIixcbiAgICBcIm5mX3RhYmxlc19uZXdmbG93dGFibGVcIixcbiAgICBcIm5mX3RhYmxlc19kZWxmbG93dGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCB3aGVyZSBpdCBjb3VsZCBpbmNvcnJlY3RseSBtYXRjaCBuZXRkZXYgaG9va3Mgd2l0aCBkaWZmZXJlbnQgbmFtZSBsZW5ndGhzIGlmIG9uZSBpcyBhIHByZWZpeCBvZiBhbm90aGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIG5mX3RhYmxlcyBBUEksIGFmZmVjdGluZyBuZXRkZXYgaG9va3MgZm9yIGNoYWlucyBhbmQgZmxvd3RhYmxlcy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIG1lc3NhZ2VzIGZvciBjcmVhdGluZywgdXBkYXRpbmcsIG9yIGRlbGV0aW5nIGNoYWlucyBhbmQgZmxvd3RhYmxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX1RBQkxFU19ORVRERVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl90YWJsZXNfbmV3Y2hhaW5cIixcbiAgICBcIm5mX3RhYmxlc19kZWxjaGFpblwiLFxuICAgIFwibmZfdGFibGVzX25ld2Zsb3d0YWJsZVwiLFxuICAgIFwibmZfdGFibGVzX2RlbGZsb3d0YWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIHdoZXJlIGl0IGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIG5ldGRldiBob29rcyB3aXRoIGRpZmZlcmVudCBuYW1lIGxlbmd0aHMgaWYgb25lIGlzIGEgcHJlZml4IG9mIGFub3RoZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgbmZfdGFibGVzIEFQSSwgYWZmZWN0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgbWVzc2FnZXMgZm9yIGNyZWF0aW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgY2hhaW5zIGFuZCBmbG93dGFibGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxODozNC4xMDA0MDkzMTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDQzNzA3NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTE6MTg6MzQuMTAwODc4MjYzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0MDQzMjM1OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmZ0X2hvb2tfbGlzdF9maW5kYCB0byBvcHRpb25hbGx5IGVuZm9yY2Ugc3RyaWN0IGxlbmd0aCBtYXRjaGluZyAoYGhvb2stXFx1MDAzZWlmbmFtZWxlbiAhPSB0aGlzLVxcdTAwM2VpZm5hbWVsZW5gKSB3aGVuIGNvbXBhcmluZyBpbnRlcmZhY2UgbmFtZXMuIFRoaXMgZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgYHN0cm5jbXBgIHdpdGggYG1pbihob29rLVxcdTAwM2VpZm5hbWVsZW4sIHRoaXMtXFx1MDAzZWlmbmFtZWxlbilgIGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIGEgcHJlZml4IG9mIGFuIGludGVyZmFjZSBuYW1lIChlLmcuLCBtYXRjaGluZyBcXFwiZXRoMFxcXCIgd2l0aCBcXFwiZXRoMDFcXFwiKSBkdXJpbmcgaG9vayBkZWxldGlvbiAoYG5mdF9kZWxjaGFpbl9ob29rYCBhbmQgYG5mdF9kZWxmbG93dGFibGVfaG9va2ApLiBUaGlzIGlzc3VlIGlzIGEgbG9naWMgZXJyb3IgdGhhdCBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBob29rIGRlbGV0aW9uLCBwb3RlbnRpYWxseSBjYXVzaW5nIGZ1bmN0aW9uYWwgaXNzdWVzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHdoaWNoIEtBU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoKS4gSXQgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciB1c2luZyB1bmluaXRpYWxpemVkIHZhbHVlcyBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MGNkMThmYzA2ZGNlOTcyZTY2MGY2MDQyNzk3NjY3MDZmZjBiMTg4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMTE6MTY6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5pbmRleCBjMTEyZWNjNGZjYTMyLi43N2M5NmIxZDQyMTc4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5AQCAtMjQ0MCwxMSArMjQ0MCwxNCBAQCBzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfbmV0ZGV2X2hvb2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxuIH1cbiBcbiBzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxuLVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKnRoaXMpXG4rXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqdGhpcyxcbitcdFx0XHRcdFx0ICAgYm9vbCBzdHJpY3QpXG4ge1xuIFx0c3RydWN0IG5mdF9ob29rICpob29rO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCBob29rX2xpc3QsIGxpc3QpIHtcbitcdFx0aWYgKHN0cmljdCBcdTAwMjZcdTAwMjYgaG9vay1cdTAwM2VpZm5hbWVsZW4gIT0gdGhpcy1cdTAwM2VpZm5hbWVsZW4pXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghc3RybmNtcChob29rLVx1MDAzZWlmbmFtZSwgdGhpcy1cdTAwM2VpZm5hbWUsXG4gXHRcdFx0ICAgICBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKSkpIHtcbiBcdFx0XHRpZiAoaG9vay1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0hPT0tfUkVNT1ZFKVxuQEAgLTI0ODYsNyArMjQ4OSw3IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0ZXJyID0gUFRSX0VSUihob29rKTtcbiBcdFx0XHRnb3RvIGVycl9ob29rO1xuIFx0XHR9XG4tXHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoaG9va19saXN0LCBob29rKSkge1xuK1x0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKGhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XG4gXHRcdFx0TkxfU0VUX0JBRF9BVFRSKGV4dGFjaywgdG1wKTtcbiBcdFx0XHRuZnRfbmV0ZGV2X2hvb2tfZnJlZShob29rKTtcbiBcdFx0XHRlcnIgPSAtRUVYSVNUO1xuQEAgLTI5NDMsNyArMjk0Niw3IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcbiBcdFx0XHRcdFx0b3BzLVx1MDAzZWhvb2tcdD0gYmFzZWNoYWluLVx1MDAzZW9wcy5ob29rO1xuIFx0XHRcdFx0fVxuIFxuLVx0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZiYXNlY2hhaW4tXHUwMDNlaG9va19saXN0LCBoKSkge1xuK1x0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZiYXNlY2hhaW4tXHUwMDNlaG9va19saXN0LCBoLCBmYWxzZSkpIHtcbiBcdFx0XHRcdFx0bGlzdF9kZWwoXHUwMDI2aC1cdTAwM2VsaXN0KTtcbiBcdFx0XHRcdFx0bmZ0X25ldGRldl9ob29rX2ZyZWUoaCk7XG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTI5NTYsNyArMjk1OSw4IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcbiBcdFx0XHRcdFx0ICAgICFuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcbiBcdFx0XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkge1xuK1x0XHRcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19jaGFpbl9ob29rcyh0cmFucyksXG4rXHRcdFx0XHRcdFx0XHQgICAgICAgaCwgZmFsc2UpKSB7XG4gXHRcdFx0XHRcdFx0bmZ0X2NoYWluX3JlbGVhc2VfaG9vayhcdTAwMjZob29rKTtcbiBcdFx0XHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdFx0XHRcdFx0fVxuQEAgLTMyNTcsNyArMzI2MSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2RlbGNoYWluX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XG4tXHRcdGhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2YmFzZWNoYWluLVx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XG4rXHRcdGhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2YmFzZWNoYWluLVx1MDAzZWhvb2tfbGlzdCwgdGhpcywgdHJ1ZSk7XG4gXHRcdGlmICghaG9vaykge1xuIFx0XHRcdGVyciA9IC1FTk9FTlQ7XG4gXHRcdFx0Z290byBlcnJfY2hhaW5fZGVsX2hvb2s7XG5AQCAtOTA3Myw3ICs5MDc3LDcgQEAgc3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBmdCkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZ0LVx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcbitcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZ0LVx1MDAzZWhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XG4gXHRcdFx0XHRlcnIgPSAtRUVYSVNUO1xuIFx0XHRcdFx0Z290byBlcnJfdW5yZWdpc3Rlcl9uZXRfaG9va3M7XG4gXHRcdFx0fVxuQEAgLTkxNTAsNyArOTE1NCw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaG9vaywgbmV4dCwgXHUwMDI2Zmxvd3RhYmxlX2hvb2subGlzdCwgbGlzdCkge1xuLVx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2Vob29rX2xpc3QsIGhvb2spKSB7XG4rXHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XG4gXHRcdFx0bGlzdF9kZWwoXHUwMDI2aG9vay1cdTAwM2VsaXN0KTtcbiBcdFx0XHRuZnRfbmV0ZGV2X2hvb2tfZnJlZShob29rKTtcbiBcdFx0XHRjb250aW51ZTtcbkBAIC05MTYzLDcgKzkxNjcsNyBAQCBzdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdCAgICAhbmZ0X3RyYW5zX2Zsb3d0YWJsZV91cGRhdGUodHJhbnMpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfZmxvd3RhYmxlX2hvb2tzKHRyYW5zKSwgaG9vaykpIHtcbitcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19mbG93dGFibGVfaG9va3ModHJhbnMpLCBob29rLCBmYWxzZSkpIHtcbiBcdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4gXHRcdFx0XHRnb3RvIGVycl9mbG93dGFibGVfdXBkYXRlX2hvb2s7XG4gXHRcdFx0fVxuQEAgLTkzODMsNyArOTM4Nyw3IEBAIHN0YXRpYyBpbnQgbmZ0X2RlbGZsb3d0YWJsZV9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcbi1cdFx0aG9vayA9IG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZmbG93dGFibGUtXHUwMDNlaG9va19saXN0LCB0aGlzKTtcbitcdFx0aG9vayA9IG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZmbG93dGFibGUtXHUwMDNlaG9va19saXN0LCB0aGlzLCB0cnVlKTtcbiBcdFx0aWYgKCFob29rKSB7XG4gXHRcdFx0ZXJyID0gLUVOT0VOVDtcbiBcdFx0XHRnb3RvIGVycl9mbG93dGFibGVfZGVsX2hvb2s7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxODozNC4xMDA4NzkxMDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQwNDMyMTMxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBuZl90YWJsZXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIEl0J3MgYSBtb2RpZmljYXRpb24gdG8gYG5mdF9ob29rX2xpc3RfZmluZGAsIGFkZGluZyBhIGBib29sIHN0cmljdGAgcGFyYW1ldGVyLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBlbnN1cmluZyBleGFjdCBpbnRlcmZhY2UgbmFtZSBtYXRjaGluZy4gSWYgYHN0cmljdGAgaXMgdHJ1ZSwgaXQgZm9yY2VzIGFuIGV4YWN0IGxlbmd0aCBjb21wYXJpc29uOiBgaG9vay1cdTAwM2VpZm5hbWVsZW4gIT0gdGhpcy1cdTAwM2VpZm5hbWVsZW5gIGJlZm9yZSBldmVuIGdldHRpbmcgdG8gdGhlIGBzdHJuY21wYC5cblxuVGhlIHByb2JsZW0gdGhpcyBpcyBmaXhpbmcgaW1tZWRpYXRlbHkganVtcHMgb3V0IOKAkyB0aGF0IGBzdHJuY21wYCB3YXMgdnVsbmVyYWJsZSB0byBwcmVmaXggbWF0Y2hlcy4gV2l0aCBgbWluKGhvb2stXHUwMDNlaWZuYW1lbGVuLCB0aGlzLVx1MDAzZWlmbmFtZWxlbilgLCB5b3UgY291bGQgZW5kIHVwIHdpdGggYSBtYXRjaCB3aGVyZSwgc2F5LCBcImV0aDBcIiBpbmNvcnJlY3RseSBtYXRjaGVzIFwiZXRoMDEuXCIgVGhpcyBpcyBhIGNsYXNzaWMgbG9naWMgYnVnLCBhbmQgaW4gdGhlIGNvbnRleHQgb2YgZGVsZXRpbmcgaG9va3MgKHNwZWNpZmljYWxseSBpbiBgbmZ0X2RlbGNoYWluX2hvb2tgIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYCksIHRoYXQncyAqYmFkKi4gV2UgY291bGQgYmUgZGVsZXRpbmcgdGhlIHdyb25nIGhvb2ssIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSB1c2UtYWZ0ZXItZnJlZSBkb3duIHRoZSBsaW5lIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgaW5jb3JyZWN0IGJlaGF2aW9yIGJlY2F1c2UgdGhlIGludGVuZGVkIGhvb2sgaXMgc3RpbGwgdGhlcmUgYW5kIHRoZSB3cm9uZyBvbmUgaGFzIGJlZW4gZGVsZXRlZC5cblxuTXkgZmlyc3QgdGhvdWdodCwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJ1dCB0aGUgbGVuZ3RocyBgaWZuYW1lbGVuYCBhcmUganVzdCBzdHJpbmcgbGVuZ3RocywgYW5kIGBzdHJuY21wYCBoYXMgdGhlIGBtaW5gIGxpbWl0YXRpb24sIHRoZXJlJ3Mgbm8gd2F5IGl0J3MgZ29pbmcgdG8gbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBJdCdzIHB1cmVseSBhIGxvZ2ljIGVycm9yLCBhIHByZWZpeCBtYXRjaGluZyBpc3N1ZS4gS0FTQU4gd291bGQgYmUgdGhlIHRvb2wgdG8gY2F0Y2ggYW55IHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBpZiB3ZSBkZWxldGUgdGhlIHdyb25nIGhvb2sgYW5kIHRyeSB0byBhY2Nlc3MgaXQgbGF0ZXIsIGJ1dCBLTVNBTiBpcyBpcnJlbGV2YW50IGhlcmUuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgY29kZSBzbmlwcGV0OlxuXG5gYGBjXG5zdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxuXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqdGhpcyxcblx0XHRcdFx0XHQgICBib29sIHN0cmljdClcbntcblx0c3RydWN0IG5mdF9ob29rICpob29rO1xuXG5cdGxpc3RfZm9yX2VhY2hfZW50cnkoaG9vaywgaG9va19saXN0LCBsaXN0KSB7XG5cdFx0aWYgKHN0cmljdCBcdTAwMjZcdTAwMjYgaG9vay1cdTAwM2VpZm5hbWVsZW4gIT0gdGhpcy1cdTAwM2VpZm5hbWVsZW4pXG5cdFx0XHRjb250aW51ZTtcblx0XHRpZiAoIXN0cm5jbXAoaG9vay1cdTAwM2VpZm5hbWUsIHRoaXMtXHUwMDNlaWZuYW1lLFxuXHRcdFx0ICAgICBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKSkpIHtcblx0XHRcdGlmIChob29rLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfSE9PS19SRU1PVkUpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0cmV0dXJuIGhvb2s7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIE5VTEw7XG59XG5gYGBcblxuT2theSwgY29uZmlybWVkLiBJZiBgc3RyaWN0YCBpcyBmYWxzZSwgaXQgc3RpbGwgdXNlcyB0aGF0IGBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKWAsIHdoaWNoIG1lYW5zIHByZWZpeCBtYXRjaGluZyB3aWxsIHN0aWxsIG9jY3VyIGlmIGBzdHJpY3RgIGlzIGRpc2FibGVkLiBUaGF0J3MgcHJvYmFibHkgaW50ZW5kZWQgZm9yIHdpbGRjYXJkIHVzZSBjYXNlcywgb3IgbWF5YmUgaXQncyBsZWdhY3kgYmVoYXZpb3IuIFdoYXRldmVyIHRoZSByZWFzb24sIHRoaXMgcGF0Y2ggKmRvZXMgbm90KiBpbnRyb2R1Y2Ugb3IgZml4IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEl0J3MgYSBjbGVhciBsb2dpYyBidWcgZml4IOKAkyBhZGRyZXNzaW5nIHRoZSBleGFjdCB2cy4gcHJlZml4IG1hdGNoaW5nIG9mIGludGVyZmFjZSBuYW1lcy5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQncyBLQVNBTiBhbGwgdGhlIHdheSBmb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgZHVlIHRvIHRoZSBpbmNvcnJlY3QgZGVsZXRpb24uXG5cblRvIHN1bW1hcml6ZSBmb3IgdGhlIHJldmlldzogVGhlIHBhdGNoIG1vZGlmaWVzIGBuZnRfaG9va19saXN0X2ZpbmRgIHRvIGVuZm9yY2Ugc3RyaWN0IGxlbmd0aCBtYXRjaGluZy4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBwcmVmaXggbWF0Y2hlcyBmb3IgaW50ZXJmYWNlIG5hbWVzIGNvdWxkIG9jY3VyIGR1cmluZyBob29rIGRlbGV0aW9uIChgbmZ0X2RlbGNoYWluX2hvb2tgIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYCkgZHVlIHRvIHVzaW5nIGBtaW5gIGxlbmd0aCBpbiBgc3RybmNtcGAuIFRoaXMgY291bGQgbGVhZCB0byBmdW5jdGlvbmFsIG9yIHVzZS1hZnRlci1mcmVlIGVycm9ycy4gSXQncyBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjgsIk91dHB1dFRva2VucyI6MjA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTE6MTg6NDguMTQ0MDk0MzQ1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmZ0X2hvb2tfbGlzdF9maW5kYCB0byBvcHRpb25hbGx5IGVuZm9yY2Ugc3RyaWN0IGxlbmd0aCBtYXRjaGluZyAoYGhvb2stXFx1MDAzZWlmbmFtZWxlbiAhPSB0aGlzLVxcdTAwM2VpZm5hbWVsZW5gKSB3aGVuIGNvbXBhcmluZyBpbnRlcmZhY2UgbmFtZXMuIFRoaXMgZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgYHN0cm5jbXBgIHdpdGggYG1pbihob29rLVxcdTAwM2VpZm5hbWVsZW4sIHRoaXMtXFx1MDAzZWlmbmFtZWxlbilgIGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIGEgcHJlZml4IG9mIGFuIGludGVyZmFjZSBuYW1lIChlLmcuLCBtYXRjaGluZyBcXFwiZXRoMFxcXCIgd2l0aCBcXFwiZXRoMDFcXFwiKSBkdXJpbmcgaG9vayBkZWxldGlvbiAoYG5mdF9kZWxjaGFpbl9ob29rYCBhbmQgYG5mdF9kZWxmbG93dGFibGVfaG9va2ApLiBUaGlzIGlzc3VlIGlzIGEgbG9naWMgZXJyb3IgdGhhdCBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBob29rIGRlbGV0aW9uLCBwb3RlbnRpYWxseSBjYXVzaW5nIGZ1bmN0aW9uYWwgaXNzdWVzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHdoaWNoIEtBU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoKS4gSXQgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciB1c2luZyB1bmluaXRpYWxpemVkIHZhbHVlcyBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmZ0X2hvb2tfbGlzdF9maW5kYCB0byBvcHRpb25hbGx5IGVuZm9yY2Ugc3RyaWN0IGxlbmd0aCBtYXRjaGluZyAoYGhvb2stXFx1MDAzZWlmbmFtZWxlbiAhPSB0aGlzLVxcdTAwM2VpZm5hbWVsZW5gKSB3aGVuIGNvbXBhcmluZyBpbnRlcmZhY2UgbmFtZXMuIFRoaXMgZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgYHN0cm5jbXBgIHdpdGggYG1pbihob29rLVxcdTAwM2VpZm5hbWVsZW4sIHRoaXMtXFx1MDAzZWlmbmFtZWxlbilgIGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIGEgcHJlZml4IG9mIGFuIGludGVyZmFjZSBuYW1lIChlLmcuLCBtYXRjaGluZyBcXFwiZXRoMFxcXCIgd2l0aCBcXFwiZXRoMDFcXFwiKSBkdXJpbmcgaG9vayBkZWxldGlvbiAoYG5mdF9kZWxjaGFpbl9ob29rYCBhbmQgYG5mdF9kZWxmbG93dGFibGVfaG9va2ApLiBUaGlzIGlzc3VlIGlzIGEgbG9naWMgZXJyb3IgdGhhdCBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBob29rIGRlbGV0aW9uLCBwb3RlbnRpYWxseSBjYXVzaW5nIGZ1bmN0aW9uYWwgaXNzdWVzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHdoaWNoIEtBU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoKS4gSXQgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciB1c2luZyB1bmluaXRpYWxpemVkIHZhbHVlcyBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrnxn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 10:45:45 +0000 UTC FinishedAt: 2026-08-27 11:18:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_TABLES_NETDEV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_TABLES_NETDEV" ], "series_id": "08c76b08-a276-417a-9f61-4a22c96d93ec" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_tables_newchain", "nf_tables_delchain", "nf_tables_newflowtable", "nf_tables_delflowtable" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfTkVUREVWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfdGFibGVzX25ld2NoYWluJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19kZWxjaGFpbiYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3Zmxvd3RhYmxlJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19kZWxmbG93dGFibGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbmZ0X2hvb2tfbGlzdF9maW5kYCB0byBvcHRpb25hbGx5IGVuZm9yY2Ugc3RyaWN0IGxlbmd0aCBtYXRjaGluZyAoYGhvb2stXHUwMDNlaWZuYW1lbGVuICE9IHRoaXMtXHUwMDNlaWZuYW1lbGVuYCkgd2hlbiBjb21wYXJpbmcgaW50ZXJmYWNlIG5hbWVzLiBUaGlzIGZpeGVzIGEgbG9naWMgYnVnIHdoZXJlIGBzdHJuY21wYCB3aXRoIGBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKWAgY291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggYSBwcmVmaXggb2YgYW4gaW50ZXJmYWNlIG5hbWUgKGUuZy4sIG1hdGNoaW5nIFwmIzM0O2V0aDBcJiMzNDsgd2l0aCBcJiMzNDtldGgwMVwmIzM0OykgZHVyaW5nIGhvb2sgZGVsZXRpb24gKGBuZnRfZGVsY2hhaW5faG9va2AgYW5kIGBuZnRfZGVsZmxvd3RhYmxlX2hvb2tgKS4gVGhpcyBpc3N1ZSBpcyBhIGxvZ2ljIGVycm9yIHRoYXQgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgaG9vayBkZWxldGlvbiwgcG90ZW50aWFsbHkgY2F1c2luZyBmdW5jdGlvbmFsIGlzc3VlcyBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh3aGljaCBLQVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaCkuIEl0IGRvZXMgbm90IGludm9sdmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgbGVha2luZyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgb3IgdXNpbmcgdW5pbml0aWFsaXplZCB2YWx1ZXMgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIHdoZXJlIGl0IGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIG5ldGRldiBob29rcyB3aXRoIGRpZmZlcmVudCBuYW1lIGxlbmd0aHMgaWYgb25lIGlzIGEgcHJlZml4IG9mIGFub3RoZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgbmZfdGFibGVzIEFQSSwgYWZmZWN0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgbWVzc2FnZXMgZm9yIGNyZWF0aW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgY2hhaW5zIGFuZCBmbG93dGFibGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzBjZDE4ZmMwNmRjZTk3MmU2NjBmNjA0Mjc5NzY2NzA2ZmYwYjE4OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDExOjE2OjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IGMxMTJlY2M0ZmNhMzIuLjc3Yzk2YjFkNDIxNzggMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbkBAIC0yNDQwLDExICYjNDM7MjQ0MCwxNCBAQCBzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfbmV0ZGV2X2hvb2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxuIH1cbiBcbiBzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxuLVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKnRoaXMpXG4mIzQzO1x0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKnRoaXMsXG4mIzQzO1x0XHRcdFx0XHQgICBib29sIHN0cmljdClcbiB7XG4gXHRzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2s7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvb2ssIGhvb2tfbGlzdCwgbGlzdCkge1xuJiM0MztcdFx0aWYgKHN0cmljdCBcdTAwMjZcdTAwMjYgaG9vay1cdTAwM2VpZm5hbWVsZW4gIT0gdGhpcy1cdTAwM2VpZm5hbWVsZW4pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFx0XHRpZiAoIXN0cm5jbXAoaG9vay1cdTAwM2VpZm5hbWUsIHRoaXMtXHUwMDNlaWZuYW1lLFxuIFx0XHRcdCAgICAgbWluKGhvb2stXHUwMDNlaWZuYW1lbGVuLCB0aGlzLVx1MDAzZWlmbmFtZWxlbikpKSB7XG4gXHRcdFx0aWYgKGhvb2stXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9IT09LX1JFTU9WRSlcbkBAIC0yNDg2LDcgJiM0MzsyNDg5LDcgQEAgc3RhdGljIGludCBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRlcnIgPSBQVFJfRVJSKGhvb2spO1xuIFx0XHRcdGdvdG8gZXJyX2hvb2s7XG4gXHRcdH1cbi1cdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChob29rX2xpc3QsIGhvb2spKSB7XG4mIzQzO1x0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKGhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XG4gXHRcdFx0TkxfU0VUX0JBRF9BVFRSKGV4dGFjaywgdG1wKTtcbiBcdFx0XHRuZnRfbmV0ZGV2X2hvb2tfZnJlZShob29rKTtcbiBcdFx0XHRlcnIgPSAtRUVYSVNUO1xuQEAgLTI5NDMsNyAmIzQzOzI5NDYsNyBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc191cGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBnZW5tYXNrLCB1OCBwb2xpY3ksXG4gXHRcdFx0XHRcdG9wcy1cdTAwM2Vob29rXHQ9IGJhc2VjaGFpbi1cdTAwM2VvcHMuaG9vaztcbiBcdFx0XHRcdH1cbiBcbi1cdFx0XHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2YmFzZWNoYWluLVx1MDAzZWhvb2tfbGlzdCwgaCkpIHtcbiYjNDM7XHRcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QsIGgsIGZhbHNlKSkge1xuIFx0XHRcdFx0XHRsaXN0X2RlbChcdTAwMjZoLVx1MDAzZWxpc3QpO1xuIFx0XHRcdFx0XHRuZnRfbmV0ZGV2X2hvb2tfZnJlZShoKTtcbiBcdFx0XHRcdFx0Y29udGludWU7XG5AQCAtMjk1Niw3ICYjNDM7Mjk1OSw4IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcbiBcdFx0XHRcdFx0ICAgICFuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcbiBcdFx0XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkge1xuJiM0MztcdFx0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgICBoLCBmYWxzZSkpIHtcbiBcdFx0XHRcdFx0XHRuZnRfY2hhaW5fcmVsZWFzZV9ob29rKFx1MDAyNmhvb2spO1xuIFx0XHRcdFx0XHRcdHJldHVybiAtRUVYSVNUO1xuIFx0XHRcdFx0XHR9XG5AQCAtMzI1Nyw3ICYjNDM7MzI2MSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2RlbGNoYWluX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XG4tXHRcdGhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2YmFzZWNoYWluLVx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XG4mIzQzO1x0XHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QsIHRoaXMsIHRydWUpO1xuIFx0XHRpZiAoIWhvb2spIHtcbiBcdFx0XHRlcnIgPSAtRU5PRU5UO1xuIFx0XHRcdGdvdG8gZXJyX2NoYWluX2RlbF9ob29rO1xuQEAgLTkwNzMsNyAmIzQzOzkwNzcsNyBAQCBzdGF0aWMgaW50IG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGZ0KSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2ZnQtXHUwMDNlaG9va19saXN0LCBob29rKSkge1xuJiM0MztcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZ0LVx1MDAzZWhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XG4gXHRcdFx0XHRlcnIgPSAtRUVYSVNUO1xuIFx0XHRcdFx0Z290byBlcnJfdW5yZWdpc3Rlcl9uZXRfaG9va3M7XG4gXHRcdFx0fVxuQEAgLTkxNTAsNyAmIzQzOzkxNTQsNyBAQCBzdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvb2ssIG5leHQsIFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcbi1cdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZmbG93dGFibGUtXHUwMDNlaG9va19saXN0LCBob29rKSkge1xuJiM0MztcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZmbG93dGFibGUtXHUwMDNlaG9va19saXN0LCBob29rLCBmYWxzZSkpIHtcbiBcdFx0XHRsaXN0X2RlbChcdTAwMjZob29rLVx1MDAzZWxpc3QpO1xuIFx0XHRcdG5mdF9uZXRkZXZfaG9va19mcmVlKGhvb2spO1xuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTkxNjMsNyAmIzQzOzkxNjcsNyBAQCBzdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdCAgICAhbmZ0X3RyYW5zX2Zsb3d0YWJsZV91cGRhdGUodHJhbnMpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfZmxvd3RhYmxlX2hvb2tzKHRyYW5zKSwgaG9vaykpIHtcbiYjNDM7XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfZmxvd3RhYmxlX2hvb2tzKHRyYW5zKSwgaG9vaywgZmFsc2UpKSB7XG4gXHRcdFx0XHRlcnIgPSAtRUVYSVNUO1xuIFx0XHRcdFx0Z290byBlcnJfZmxvd3RhYmxlX3VwZGF0ZV9ob29rO1xuIFx0XHRcdH1cbkBAIC05MzgzLDcgJiM0Mzs5Mzg3LDcgQEAgc3RhdGljIGludCBuZnRfZGVsZmxvd3RhYmxlX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgXHUwMDI2Zmxvd3RhYmxlX2hvb2subGlzdCwgbGlzdCkge1xuLVx0XHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2Vob29rX2xpc3QsIHRoaXMpO1xuJiM0MztcdFx0aG9vayA9IG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZmbG93dGFibGUtXHUwMDNlaG9va19saXN0LCB0aGlzLCB0cnVlKTtcbiBcdFx0aWYgKCFob29rKSB7XG4gXHRcdFx0ZXJyID0gLUVOT0VOVDtcbiBcdFx0XHRnb3RvIGVycl9mbG93dGFibGVfZGVsX2hvb2s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6MTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfTkVUREVWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfdGFibGVzX25ld2NoYWluJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19kZWxjaGFpbiYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3Zmxvd3RhYmxlJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19kZWxmbG93dGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAgd2hlcmUgaXQgY291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggbmV0ZGV2IGhvb2tzIHdpdGggZGlmZmVyZW50IG5hbWUgbGVuZ3RocyBpZiBvbmUgaXMgYSBwcmVmaXggb2YgYW5vdGhlci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBuZl90YWJsZXMgQVBJLCBhZmZlY3RpbmcgbmV0ZGV2IGhvb2tzIGZvciBjaGFpbnMgYW5kIGZsb3d0YWJsZXMuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgbmV0bGluayBtZXNzYWdlcyBmb3IgY3JlYXRpbmcsIHVwZGF0aW5nLCBvciBkZWxldGluZyBjaGFpbnMgYW5kIGZsb3d0YWJsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MGNkMThmYzA2ZGNlOTcyZTY2MGY2MDQyNzk3NjY3MDZmZjBiMTg4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjcgMTE6MTY6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCmluZGV4IGMxMTJlY2M0ZmNhMzIuLjc3Yzk2YjFkNDIxNzggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCkBAIC0yNDQwLDExICYjNDM7MjQ0MCwxNCBAQCBzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfbmV0ZGV2X2hvb2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LAogfQogCiBzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LAotCQkJCQkgICBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKnRoaXMpCiYjNDM7CQkJCQkgICBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKnRoaXMsCiYjNDM7CQkJCQkgICBib29sIHN0cmljdCkKIHsKIAlzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2s7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvb2ssIGhvb2tfbGlzdCwgbGlzdCkgewomIzQzOwkJaWYgKHN0cmljdCAmYW1wOyZhbXA7IGhvb2stJmd0O2lmbmFtZWxlbiAhPSB0aGlzLSZndDtpZm5hbWVsZW4pCiYjNDM7CQkJY29udGludWU7CiAJCWlmICghc3RybmNtcChob29rLSZndDtpZm5hbWUsIHRoaXMtJmd0O2lmbmFtZSwKIAkJCSAgICAgbWluKGhvb2stJmd0O2lmbmFtZWxlbiwgdGhpcy0mZ3Q7aWZuYW1lbGVuKSkpIHsKIAkJCWlmIChob29rLSZndDtmbGFncyAmYW1wOyBORlRfSE9PS19SRU1PVkUpCkBAIC0yNDg2LDcgJiM0MzsyNDg5LDcgQEAgc3RhdGljIGludCBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCwKIAkJCWVyciA9IFBUUl9FUlIoaG9vayk7CiAJCQlnb3RvIGVycl9ob29rOwogCQl9Ci0JCWlmIChuZnRfaG9va19saXN0X2ZpbmQoaG9va19saXN0LCBob29rKSkgewomIzQzOwkJaWYgKG5mdF9ob29rX2xpc3RfZmluZChob29rX2xpc3QsIGhvb2ssIGZhbHNlKSkgewogCQkJTkxfU0VUX0JBRF9BVFRSKGV4dGFjaywgdG1wKTsKIAkJCW5mdF9uZXRkZXZfaG9va19mcmVlKGhvb2spOwogCQkJZXJyID0gLUVFWElTVDsKQEAgLTI5NDMsNyAmIzQzOzI5NDYsNyBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc191cGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBnZW5tYXNrLCB1OCBwb2xpY3ksCiAJCQkJCW9wcy0mZ3Q7aG9vawk9IGJhc2VjaGFpbi0mZ3Q7b3BzLmhvb2s7CiAJCQkJfQogCi0JCQkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO2Jhc2VjaGFpbi0mZ3Q7aG9va19saXN0LCBoKSkgewomIzQzOwkJCQlpZiAobmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7YmFzZWNoYWluLSZndDtob29rX2xpc3QsIGgsIGZhbHNlKSkgewogCQkJCQlsaXN0X2RlbCgmYW1wO2gtJmd0O2xpc3QpOwogCQkJCQluZnRfbmV0ZGV2X2hvb2tfZnJlZShoKTsKIAkJCQkJY29udGludWU7CkBAIC0yOTU2LDcgJiM0MzsyOTU5LDggQEAgc3RhdGljIGludCBuZl90YWJsZXNfdXBkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZ2VubWFzaywgdTggcG9saWN5LAogCQkJCQkgICAgIW5mdF90cmFuc19jaGFpbl91cGRhdGUodHJhbnMpKQogCQkJCQkJY29udGludWU7CiAKLQkJCQkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO25mdF90cmFuc19jaGFpbl9ob29rcyh0cmFucyksIGgpKSB7CiYjNDM7CQkJCQlpZiAobmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7bmZ0X3RyYW5zX2NoYWluX2hvb2tzKHRyYW5zKSwKJiM0MzsJCQkJCQkJICAgICAgIGgsIGZhbHNlKSkgewogCQkJCQkJbmZ0X2NoYWluX3JlbGVhc2VfaG9vaygmYW1wO2hvb2spOwogCQkJCQkJcmV0dXJuIC1FRVhJU1Q7CiAJCQkJCX0KQEAgLTMyNTcsNyAmIzQzOzMyNjEsNyBAQCBzdGF0aWMgaW50IG5mdF9kZWxjaGFpbl9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCXJldHVybiBlcnI7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsICZhbXA7Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7Ci0JCWhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoJmFtcDtiYXNlY2hhaW4tJmd0O2hvb2tfbGlzdCwgdGhpcyk7CiYjNDM7CQlob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7YmFzZWNoYWluLSZndDtob29rX2xpc3QsIHRoaXMsIHRydWUpOwogCQlpZiAoIWhvb2spIHsKIAkJCWVyciA9IC1FTk9FTlQ7CiAJCQlnb3RvIGVycl9jaGFpbl9kZWxfaG9vazsKQEAgLTkwNzMsNyAmIzQzOzkwNzcsNyBAQCBzdGF0aWMgaW50IG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCwKIAkJCWlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZnQpKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAobmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7ZnQtJmd0O2hvb2tfbGlzdCwgaG9vaykpIHsKJiM0MzsJCQlpZiAobmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7ZnQtJmd0O2hvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7CiAJCQkJZXJyID0gLUVFWElTVDsKIAkJCQlnb3RvIGVycl91bnJlZ2lzdGVyX25ldF9ob29rczsKIAkJCX0KQEAgLTkxNTAsNyAmIzQzOzkxNTQsNyBAQCBzdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQlyZXR1cm4gZXJyOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvb2ssIG5leHQsICZhbXA7Zmxvd3RhYmxlX2hvb2subGlzdCwgbGlzdCkgewotCQlpZiAobmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7Zmxvd3RhYmxlLSZndDtob29rX2xpc3QsIGhvb2spKSB7CiYjNDM7CQlpZiAobmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7Zmxvd3RhYmxlLSZndDtob29rX2xpc3QsIGhvb2ssIGZhbHNlKSkgewogCQkJbGlzdF9kZWwoJmFtcDtob29rLSZndDtsaXN0KTsKIAkJCW5mdF9uZXRkZXZfaG9va19mcmVlKGhvb2spOwogCQkJY29udGludWU7CkBAIC05MTYzLDcgJiM0Mzs5MTY3LDcgQEAgc3RhdGljIGludCBuZnRfZmxvd3RhYmxlX3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCSAgICAhbmZ0X3RyYW5zX2Zsb3d0YWJsZV91cGRhdGUodHJhbnMpKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAobmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7bmZ0X3RyYW5zX2Zsb3d0YWJsZV9ob29rcyh0cmFucyksIGhvb2spKSB7CiYjNDM7CQkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO25mdF90cmFuc19mbG93dGFibGVfaG9va3ModHJhbnMpLCBob29rLCBmYWxzZSkpIHsKIAkJCQllcnIgPSAtRUVYSVNUOwogCQkJCWdvdG8gZXJyX2Zsb3d0YWJsZV91cGRhdGVfaG9vazsKIAkJCX0KQEAgLTkzODMsNyAmIzQzOzkzODcsNyBAQCBzdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQlyZXR1cm4gZXJyOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0aGlzLCAmYW1wO2Zsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHsKLQkJaG9vayA9IG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO2Zsb3d0YWJsZS0mZ3Q7aG9va19saXN0LCB0aGlzKTsKJiM0MzsJCWhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoJmFtcDtmbG93dGFibGUtJmd0O2hvb2tfbGlzdCwgdGhpcywgdHJ1ZSk7CiAJCWlmICghaG9vaykgewogCQkJZXJyID0gLUVOT0VOVDsKIAkJCWdvdG8gZXJyX2Zsb3d0YWJsZV9kZWxfaG9vazsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG5mdF9ob29rX2xpc3RfZmluZGAgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIFNvdW5kcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgaXQmIzM5O3MgZml4aW5nIGEgcG90ZW50aWFsIG1hdGNoaW5nIGJ1ZyByZWxhdGVkIHRvIG5ldGZpbHRlciBuZl90YWJsZXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWRkaW5nIGEgYHN0cmljdGAgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbi4gSWYgYHN0cmljdGAgaXMgZW5hYmxlZCwgaXQgZW5zdXJlcyBhbiBleGFjdCBtYXRjaCBvZiBgaWZuYW1lbGVuYCBiZWZvcmUgY29tcGFyaW5nIG5hbWVzLiBUaGlzIGlzIGxpa2VseSBhZGRyZXNzaW5nIGEgc3VidGxlIGZsYXcgd2hlcmUgaG9va3Mgd2l0aCBzbGlnaHRseSBkaWZmZXJlbnQgbmFtZSBsZW5ndGhzIGNvdWxkIGJlIGluY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgYSBtYXRjaCBpZiBvbmUgbmFtZSB3YXMgYSBwcmVmaXggb2YgYW5vdGhlciwgYSBjbGFzc2ljIHByZWZpeC9zdWJzdHJpbmcgdnVsbmVyYWJpbGl0eS4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgSSBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBmdW5jdGlvbnMgdGhhdCBjYWxsIHRoaXMgbW9kaWZpZWQgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgYXJlOiBgbmZ0X2RlbGNoYWluX2hvb2tgLCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYCwgYG5mdF9mbG93dGFibGVfdXBkYXRlYCwgYG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzYCwgYG5mX3RhYmxlc191cGRjaGFpbmAsIGFuZCBgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rc2AuIFRoZXNlIGFyZSBteSB0YXJnZXRzLgoKTm93LCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgbmZfdGFibGVzX2FwaS5jYCBpcyBjb21waWxlZC4gQSBxdWljayBjaGVjayBvZiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBzaG91bGQgY29uZmlybSBpdCBpcyB1bmRlciBgQ09ORklHX05GX1RBQkxFU2AsIHdoaWNoIEkgbmVlZCB0byBrbm93IGZvciBidWlsZCBjb25maWd1cmF0aW9ucy4gQSBxdWljayBncmVwIHdpbGwgYWxzbyB2ZXJpZnkgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfYXBpXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT04ND1vYmotJChDT05GSUdfTkZfRFVQX05FVERFVilcdCYjNDM7PSBuZl9kdXBfbmV0ZGV2Lm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg2LSMgbmZfdGFibGVzXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg3Om5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OC1cdFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk2NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyBgQ09ORklHX05GX1RBQkxFU2AgYW5kIFJlbGF0ZWQgSG9va3MqKgoKQWxyaWdodCwgc28gYENPTkZJR19ORl9UQUJMRVNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLCB0aGF0IG11Y2ggaXMgY2xlYXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIGhvdyBpdCBhbGwgdGllcyB0b2dldGhlciwgc3BlY2lmaWNhbGx5IGhvdyB0aGlzIGZlYXR1cmUgaXMgdW5pbnN0YWxsZWQuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB2ZXJpZnkgdGhlIHRlYXJkb3duIHBhdGhzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSBgbmZ0X2RlbGNoYWluX2hvb2tgIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYCBmdW5jdGlvbnMgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIFRoZXNlIGhvb2tzIGFyZSB3aGVyZSB0aGUgcmVtb3ZhbCBvZiBjaGFpbnMgYW5kIGZsb3cgdGFibGVzIGFyZSBoYW5kbGVkLCBhbmQgYXJlIG9idmlvdXNseSBjcml0aWNhbCB0byB0aGUgd2hvbGUgdW5pbnN0YWxsIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnMsIGFueSBkZXBlbmRlbmNpZXMgdGhleSBtaWdodCBoYXZlLCBhbmQgd2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIGNsZWFuZWQgdXAgdG8gbWFrZSBzdXJlIHRoaW5ncyBhcmUgZnVsbHkgZGlzbWFudGxlZC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGFzIHdlbGwsIGFzIHRoYXQgY2FuIGJlIGEgc291cmNlIG9mIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9kZWxjaGFpbl9ob29rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzIzMz1zdGF0aWMgdm9pZCBuZnRfdHJhbnNfZGVsaG9va19hYm9ydChzdHJ1Y3QgbGlzdF9oZWFkICpkZWxfbGlzdClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMjQyLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzI0MzpzdGF0aWMgaW50IG5mdF9kZWxjaGFpbl9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMjQ0LVx0XHRcdCAgICAgc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzI5OD1zdGF0aWMgaW50IG5mX3RhYmxlc19kZWxjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzNTEtXHRcdFx0aWYgKG5mdF9iYXNlX2NoYWluX25ldGRldih0YWJsZS1cdTAwM2VmYW1pbHksIGJhc2VjaGFpbi1cdTAwM2VvcHMuaG9va251bSkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMzUyOlx0XHRcdFx0cmV0dXJuIG5mdF9kZWxjaGFpbl9ob29rKFx1MDAyNmN0eCwgYmFzZWNoYWluLCBleHRhY2spO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzM1My1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gYG5mdF9kZWxmbG93dGFibGVfaG9va2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBuZnRfZGVsZmxvd3RhYmxlX2hvb2tgIGZ1bmN0aW9uLiBUaGlzIGlzIGEgY3JpdGljYWwgY29tcG9uZW50IGZvciBtYW5hZ2luZyBhbmQgbW9kaWZ5aW5nIGZsb3cgdGFibGVzIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgdGhvcm91Z2hseSwgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZCwgYW5kIHRoYXQgYW55IG9mIG15IHJlbGF0ZWQgY29kZSBpcyBjb21wYXRpYmxlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHJldmlld2luZyB0aGUgc291cmNlIGNvZGUsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGludGVyYWN0aW9uIG9mIHRoaXMgaG9vay4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciBhbGwgdGhlIGVkZ2UgY2FzZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgaXMgaW1wYWN0ZWQgYnkgdGhlIG5ldyBrZXJuZWwgdmVyc2lvbiBvciBhbnkgcmVjZW50IHNlY3VyaXR5IHVwZGF0ZXMsIGFzIHRoZXNlIGhhdmUgYSBoYWJpdCBvZiBpbnRyb2R1Y2luZyBzdWJ0bGUsIGJ1dCBpbXBhY3RmdWwsIGNoYW5nZXMgaW4gbWVtb3J5IGxheW91dCBhbmQgaGFuZGxpbmcgdGhhdCBjb3VsZCBhZmZlY3QgaG93IGZsb3cgdGFibGUgZW50cmllcyBhcmUgbWFuYWdlZC4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIGxvb2sgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3Igb3RoZXIgY29uY3VycmVuY3kgaXNzdWVzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCB0byBwcm90ZWN0IHRoZSBmbG93IHRhYmxlIGRhdGEgc3RydWN0dXJlcy4gQSBxdWljayBnbGFuY2UgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgbWlnaHQgYWxzbyByZXZlYWwgYW55IGxlc3MtdGhhbi1vYnZpb3VzIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgZXJyb3IgaGFuZGxpbmc7IGFyZSB0aGVyZSBzdWZmaWNpZW50IGNoZWNrcyB0byBkZWFsIHdpdGggcG90ZW50aWFsIGZhaWx1cmVzIGFuZCBhcmUgdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGVzL21lc3NhZ2VzIGJlaW5nIHJldHVybmVkPyBMZXQmIzM5O3MgZ2V0IHRvIHdvcmshCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2RlbGZsb3d0YWJsZV9ob29rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM2Mz1zdGF0aWMgdm9pZCBuZnRfZmxvd3RhYmxlX2hvb2tfcmVsZWFzZShzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZV9ob29rICpmbG93dGFibGVfaG9vaylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MzcyLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTM3MzpzdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTM3NC1cdFx0XHRcdCBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTk0MjU9c3RhdGljIGludCBuZl90YWJsZXNfZGVsZmxvd3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTQ2OS1cdGlmIChubGFbTkZUQV9GTE9XVEFCTEVfSE9PS10pXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5NDcwOlx0XHRyZXR1cm4gbmZ0X2RlbGZsb3d0YWJsZV9ob29rKFx1MDAyNmN0eCwgZmxvd3RhYmxlLCBleHRhY2spO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTQ3MS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTg3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBOZXRmaWx0ZXIvbmZ0YWJsZXMgZnVuY3Rpb25zIGFuZCBpbW1lZGlhdGVseSBzZWUgc29tZSBwcmltZSBmdXp6aW5nIGNhbmRpZGF0ZXMuIFNwZWNpZmljYWxseSwgYG5mX3RhYmxlc191cGRjaGFpbmAsIGBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzYCwgYG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzYCwgYG5mdF9mbG93dGFibGVfdXBkYXRlYCwgYG5mdF9kZWxjaGFpbl9ob29rYCwgYW5kIGBuZnRfZGVsZmxvd3RhYmxlX2hvb2tgIGFsbCBsb29rIGxpa2UgdGhleSBoYW5kbGUgY3J1Y2lhbCBzdGF0ZSBjaGFuZ2VzIG9yIGlucHV0IHBhcnNpbmcgd2l0aGluIHRoZSBmbG93dGFibGUgYW5kIGNoYWluIG1hbmFnZW1lbnQuIFRoZXkmIzM5O3JlIGRlZmluaXRlbHkgb24gdGhlIGxpc3QuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIEkgcmVtZW1iZXIgYG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3NgIGJlaW5nIHN0YXRpYy4gSSBzaG91bGQgdmVyaWZ5IGlmIGBuZl90YWJsZXNfdXBkY2hhaW5gIGlzIGFsc28gc3RhdGljLCBhcyB0aGlzIG1heSBpbXBhY3QgaG93IGFwcHJvYWNoYWJsZSBpdCB3aWxsIGJlIGFzIGEgZnV6emluZyB0YXJnZXQuIExldCYjMzk7cyBkb3VibGUgY2hlY2sgdGhhdCwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfdXBkY2hhaW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNzUzPXN0YXRpYyBpbnQgbmZfdGFibGVzX2FkZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGZhbWlseSwgdTggcG9saWN5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI4OTgtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyODk5OnN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI5MDAtXHRcdFx0ICAgICAgdTMyIGZsYWdzLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMxMTY9c3RhdGljIGludCBuZl90YWJsZXNfbmV3Y2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMjA5LVx0XHRmbGFncyB8PSBjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0JBU0U7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMjEwOlx0XHRyZXR1cm4gbmZfdGFibGVzX3VwZGNoYWluKFx1MDAyNmN0eCwgZ2VubWFzaywgcG9saWN5LCBmbGFncywgYXR0cixcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyMTEtXHRcdFx0XHRcdCAgZXh0YWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgyMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKklkZW50aWZ5aW5nIER5bmFtaWMgTmV0ZmlsdGVyIEFQSSBFbnRyeXBvaW50cyoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpbmdzIGFwcGVhciBzdGF0aWMsIHdoaWNoIGlzbiYjMzk7dCBlbnRpcmVseSBzdXJwcmlzaW5nLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIHRvIHplcm8gaW4gb24gYW55IE5ldGZpbHRlciBBUEkgZW50cnlwb2ludHMgdGhhdCBleGhpYml0IGR5bmFtaWMgYmVoYXZpb3IuIFdlIG5lZWQgdG8gaWRlbnRpZnkgZnVuY3Rpb25zIHdoaWNoIG1pZ2h0IGFsbG93IGZvciB0aGUgcnVudGltZSBjcmVhdGlvbiwgbW9kaWZpY2F0aW9uLCBvciBkZWxldGlvbiBvZiBvYmplY3RzIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbS4gTXkgaW5pdGlhbCBzY2FuIHBvaW50cyB0b3dhcmRzIGZ1bmN0aW9ucyBsaWtlIGBuZl90YWJsZXNfbmV3Y2hhaW5gLCB3aGljaCBzdWdnZXN0cyB0aGUgYWJpbGl0eSB0byBpbnN0YW50aWF0ZSBuZXcgY2hhaW5zLCBhbmQsIGNvbnZlcnNlbHksIGBuZl90YWJsZXNfZGVsY2hhaW5gLCB3aGljaCwgbG9naWNhbGx5LCB3b3VsZCByZW1vdmUgZXhpc3RpbmcgY2hhaW5zLiBTaW1pbGFybHksIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCBhbmQgYG5mX3RhYmxlc19kZWxmbG93dGFibGVgIGFyZSBvbiB0aGUgbGlzdCwgaW5kaWNhdGluZyBvcGVyYXRpb25zIGFyb3VuZCBmbG93IHRhYmxlcywgd2hpY2ggSSYjMzk7ZCBleHBlY3Qgd291bGQgYmUgZHluYW1pYyBlbGVtZW50cyBpbiBhIE5ldGZpbHRlciBzZXR1cC4gVGhpcyB3aWxsIGxpa2VseSBmb3JtIHRoZSBiYXNpcyBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfbmV3Zmxvd3RhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTEzNz1zdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkyMjgtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MjI5OnN0YXRpYyBpbnQgbmZfdGFibGVzX25ld2Zsb3d0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTIzMC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05OTU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZl90YWJsZXNfY2JbTkZUX01TR19NQVhdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMTI2LVx0W05GVF9NU0dfTkVXRkxPV1RBQkxFXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMTI3Olx0XHQuY2FsbFx0XHQ9IG5mX3RhYmxlc19uZXdmbG93dGFibGUsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDEyOC1cdFx0LnR5cGVcdFx0PSBORk5MX0NCX0JBVENILFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mzg2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBORl9UQUJMRVMgLSBJbml0aWFsIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb3JlIGVudHJ5IHBvaW50cyBmb3IgYG5mX3RhYmxlc2Ag4oCTIGdvdCBpdCwgdGhlc2UgYXJlIHRoZSBob29rczogYG5mX3RhYmxlc19uZXdjaGFpbmAsIGBuZl90YWJsZXNfZGVsY2hhaW5gLCBgbmZfdGFibGVzX25ld2Zsb3d0YWJsZWAsIGFuZCBgbmZfdGFibGVzX2RlbGZsb3d0YWJsZWAuICBCcmlsbGlhbnQhICBOZXRsaW5rIGNhbGxiYWNrcyBhcmUgKmlkZWFsKiBmb3IgZnV6emluZy4gIFRoZSBzdHJ1Y3R1cmUgaXMgcGVyZmVjdCBmb3IgZmVlZGluZyBpbiBtYWxmb3JtZWQgZGF0YSBhbmQgc2VlaW5nIHdoYXQgYnJlYWtzLiBJIGNhbiByZWFsbHkgZ2V0IGNyZWF0aXZlIHdpdGggY3JhZnRpbmcgdGhvc2UgbmV0bGluayBtZXNzYWdlcy4KCkZpcnN0IHRob3VnaCwgZ290dGEgY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfTkZfVEFCTEVTYCBpcyBlbmFibGVkIHNvIEkga25vdyB3aGF0IEkmIzM5O20gcGxheWluZyB3aXRoLCBhbmQgdGhhdCBhbnkgcmVxdWlyZWQgc3VwcG9ydGluZyBtb2R1bGVzIGFyZSBhbHNvIGluIHBsYWNlIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseSBmb3IgdGhlIHRlc3RpbmcuIEdvdCB0byBidWlsZCBhIHNvbGlkIGJhc2UgdG8gd29yayBmcm9tLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfVEFCTEVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NDcxPWlmIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXHRkZXBlbmRzIG9uIElQVjZcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ4MDpjb25maWcgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg4NQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkmIzM5O2QgdGhpbmsgaXQgdGhyb3VnaDoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KioKCk9rYXksIHNvIHRoZSBiYXNlIGNvbmZpZyBpcyBkZWZpbml0ZWx5IGBORl9UQUJMRVNgLiBUaGlzIHBhdGNoIGlzIG1lc3Npbmcgd2l0aCBuZXRkZXYgaG9va3MgdGhvdWdoLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayB0aGF0IHRoZXJlICptaWdodCogYmUgYSBzZWNvbmRhcnkgY29uZmlnIG9wdGlvbiBpbnZvbHZlZCBoZXJlLCBsaWtlbHkgYE5GX1RBQkxFU19ORVRERVZgLiBJdCYjMzk7cyBhIGNvbW1vbiBwYXR0ZXJuIHRvIHNwbGl0IG91dCBzcGVjaWZpYyBmdW5jdGlvbmFsaXRpZXMgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yayBkZXZpY2UgaW50ZXJhY3Rpb24uCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIG15IGh1bmNoLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBmdW5jdGlvbnMgYG5mdF9uZXRkZXZfaG9va19hbGxvY2AgYW5kIGBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzYCBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgTkZfVEFCTEVTX05FVERFVmAuIElmIHRoZXkgYXJlLCBpdCBzdHJlbmd0aGVucyB0aGUgYXJndW1lbnQgZm9yIHJlcXVpcmluZyB0aGF0IG9wdGlvbiBhbG9uZ3NpZGUgYE5GX1RBQkxFU2AuIElmIG5vdCwgdGhlbiBJIG5lZWQgdG8gZGlnIGRlZXBlciBhbmQgdW5kZXJzdGFuZCB3aHkgbmV0ZGV2IG1vZGlmaWNhdGlvbnMgd291bGQgbmVjZXNzaXRhdGUgYW55IGNvbmZpZ3VyYXRpb24gY2hhbmdlIGF0IGFsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X25ldGRldl9ob29rX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjM2Mz12b2lkIG5mX3RhYmxlc19jaGFpbl9kZXN0cm95KHN0cnVjdCBuZnRfY2hhaW4gKmNoYWluKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTIzOTYtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyMzk3OnN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9uZXRkZXZfaG9va19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yMzk4LVx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI0NjM9c3RhdGljIGludCBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNDg1LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjQ4NjpcdFx0aG9vayA9IG5mdF9uZXRkZXZfaG9va19hbGxvYyhuZXQsIHRtcCwgcHJlZml4KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI0ODctXHRcdGlmIChJU19FUlIoaG9vaykpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNTI0PXN0YXRpYyBpbnQgbmZ0X2NoYWluX3BhcnNlX25ldGRldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjUzMS1cdGlmICh0YltORlRBX0hPT0tfREVWXSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjUzMjpcdFx0aG9vayA9IG5mdF9uZXRkZXZfaG9va19hbGxvYyhuZXQsIHRiW05GVEFfSE9PS19ERVZdLCBmYWxzZSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTMzLVx0XHRpZiAoSVNfRVJSKGhvb2spKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1OTcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJLCBhbiBleHBlcnQsIGFtIGhhdmluZyBpdDoKCioqQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gb2YgYG5mdF9uZXRkZXZfaG9va19hbGxvY2AqKgoKUmlnaHQsIGxldCBtZSBqdXN0IHJ1biB0aGF0IHF1ZXN0aW9uIHRocm91Z2ggbXkgaGVhZC4gSXMgYG5mdF9uZXRkZXZfaG9va19hbGxvY2AgY29tcGlsZWQgKmNvbmRpdGlvbmFsbHkqPyBUaGF0JiMzOTtzIHRoZSBjcnV4IG9mIGl0LiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgcG90ZW50aWFsIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBOZXRmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHdheSB0aG9zZSBOZXRmaWx0ZXIgaG9va3Mgd29yazsgYXJlIHRoZXJlIHNwZWNpZmljIGZlYXR1cmVzLCBvciBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbnMsIG9yIGNlcnRhaW4gbW9kdWxlIGNvbmZpZ3VyYXRpb25zIHRoYXQgd291bGQgdHJpZ2dlciBpdHMgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3M/IEl0JiMzOTtzIG9mdGVuIHJlbGF0ZWQgdG8gdGhlIG92ZXJhbGwgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBmZWF0dXJlcyBpdCBjYW4gc3VwcG9ydC4gVGhpcyBjb3VsZCBiZSByZWxhdGVkIHRvIHRoaW5ncyBsaWtlIGluZ3Jlc3MvZWdyZXNzIGhvb2tzLCBvciBwZXJoYXBzIHRoZSBzdXBwb3J0IGZvciBjZXJ0YWluIGhhcmR3YXJlIG9mZmxvYWRzLiBJIG5lZWQgdG8gcXVpY2tseSB2aXN1YWxpemUgdGhlIHJlbGV2YW50IGBLY29uZmlnYCBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTkZfVEFCTEVTX05FVERFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTE1NTI9c3RhdGljIGJvb2wgbmZ0X3N1cHBvcnRlZF9mYW1pbHkodTggZmFtaWx5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE1NjMtI2VuZGlmXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxNTY0OiNpZmRlZiBDT05GSUdfTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTU2NS1cdFx0fHwgZmFtaWx5ID09IE5GUFJPVE9fTkVUREVWXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NjcKCQkJCQkJCW91dHB1dDogMTY1CgkJCQkJCQl0aG91Z2h0czogNDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbiBmb3IgTmV0ZGV2IEhvb2tzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBuZnRfbmV0ZGV2X2hvb2tfYWxsb2NgIGZ1bmN0aW9uLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkLCBldmVuIHRob3VnaCBpdCYjMzk7cyB1c2VkIGZvciBuZXRkZXYgaG9va3MuIFRoYXQgZmVlbHMuLi4gaW5lZmZpY2llbnQuIFRoZSBxdWVzdGlvbiBpcywgaXMgYENPTkZJR19ORl9UQUJMRVNfTkVUREVWYCBhY3R1YWxseSBuZWNlc3Nhcnk/IEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3MgYSBnb29kIGlkZWEgdG8gaGF2ZSBpdCBlbmFibGVkLiBBbmQsIG9mIGNvdXJzZSwgYE5GX1RBQkxFU2AgaXRzZWxmIGlzIGFsc28gZXNzZW50aWFsLgoKTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYG5mdF9ob29rX2xpc3RfZmluZGAgaXMgYmVpbmcgY2FsbGVkLiBBbHJpZ2h0LCBpdCYjMzk7cyB1c2VkIHdpdGhpbiBgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rc2AsIGBuZl90YWJsZXNfdXBkY2hhaW5gLCBgbmZ0X2RlbGNoYWluX2hvb2tgLCBgbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV9uZXRfaG9va3NgLCBgbmZ0X2Zsb3d0YWJsZV91cGRhdGVgLCBhbmQgYG5mdF9kZWxmbG93dGFibGVfaG9va2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGFsbCBwYXJ0IG9mIGFkZGluZywgdXBkYXRpbmcsIGFuZCBkZWxldGluZyBjaGFpbnMgYW5kIGZsb3d0YWJsZXMuCgpUaGUgZW50cnkgcG9pbnRzIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuLi4gdGhleSYjMzk7cmUgYWxsIG5ldGxpbmsgY2FsbGJhY2tzOiBgbmZfdGFibGVzX25ld2NoYWluYCwgYG5mX3RhYmxlc19kZWxjaGFpbmAsIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCwgYW5kIGBuZl90YWJsZXNfZGVsZmxvd3RhYmxlYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIE9rYXksIGBORl9UQUJMRVNgIGRlcGVuZHMgb24gYE5FVEZJTFRFUl9ORVRMSU5LYCwgYW5kIGBORl9UQUJMRVNfTkVUREVWYCBkZXBlbmRzIG9uIGBORl9UQUJMRVNgLiBXZSBjYW4gc2VlIHRoZSBkZXBlbmRlbmN5IHRyZWUuCgpTbywgaW4gdGhlIGVuZCwgaXQgbWVhbnMgYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBgWyYjMzQ7TkZfVEFCTEVTJiMzNDssICYjMzQ7TkZfVEFCTEVTX05FVERFViYjMzQ7XWAuCgpGaW5hbGx5LCBJJiMzOTttIGdvaW5nIHRvIHJldmlldyBteSByYXRpb25hbGU6IFRoaXMgcGF0Y2ggaXMgZml4aW5nIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgLCBzcGVjaWZpY2FsbHkgd2hlcmUgaXQgY291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggaG9va3MgaWYgb25lIGlzIGEgcHJlZml4IG9mIGFub3RoZXIuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIHRoZSBuZXRmaWx0ZXIgbmZfdGFibGVzIEFQSSwgYWZmZWN0aW5nIHRoZSBoYW5kbGluZyBvZiBuZXRkZXYgaG9va3MsIGFuZCBob3cgY2hhaW5zIGFuZCBmbG93dGFibGVzIGFyZSBtYW5hZ2VkLiBUaGUga2V5IGludGVyYWN0aW9uIGlzIHRoZSBuZXRsaW5rIG1lc3NhZ2VzIGNyZWF0aW5nLCB1cGRhdGluZyBvciBkZWxldGluZyB0aGVzZSBvYmplY3RzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNsZWFyOiB0aGUgZm9jdXMgc3ltYm9scyBhcmUgYG5mX3RhYmxlc19uZXdjaGFpbmAsIGBuZl90YWJsZXNfZGVsY2hhaW5gLCBgbmZfdGFibGVzX25ld2Zsb3d0YWJsZWAsIGFuZCBgbmZfdGFibGVzX2RlbGZsb3d0YWJsZWAuCgpOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX05FVERFViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX3RhYmxlc19uZXdjaGFpbiYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsY2hhaW4mIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX25ld2Zsb3d0YWJsZSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsZmxvd3RhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIHdoZXJlIGl0IGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIG5ldGRldiBob29rcyB3aXRoIGRpZmZlcmVudCBuYW1lIGxlbmd0aHMgaWYgb25lIGlzIGEgcHJlZml4IG9mIGFub3RoZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgbmZfdGFibGVzIEFQSSwgYWZmZWN0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgbWVzc2FnZXMgZm9yIGNyZWF0aW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgY2hhaW5zIGFuZCBmbG93dGFibGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTX05FVERFViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX3RhYmxlc19uZXdjaGFpbiYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsY2hhaW4mIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX25ld2Zsb3d0YWJsZSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsZmxvd3RhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIHdoZXJlIGl0IGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIG5ldGRldiBob29rcyB3aXRoIGRpZmZlcmVudCBuYW1lIGxlbmd0aHMgaWYgb25lIGlzIGEgcHJlZml4IG9mIGFub3RoZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgbmZfdGFibGVzIEFQSSwgYWZmZWN0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgbWVzc2FnZXMgZm9yIGNyZWF0aW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgY2hhaW5zIGFuZCBmbG93dGFibGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMToxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDExOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBuZnRfaG9va19saXN0X2ZpbmRgIHRvIG9wdGlvbmFsbHkgZW5mb3JjZSBzdHJpY3QgbGVuZ3RoIG1hdGNoaW5nIChgaG9vay1cdTAwM2VpZm5hbWVsZW4gIT0gdGhpcy1cdTAwM2VpZm5hbWVsZW5gKSB3aGVuIGNvbXBhcmluZyBpbnRlcmZhY2UgbmFtZXMuIFRoaXMgZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgYHN0cm5jbXBgIHdpdGggYG1pbihob29rLVx1MDAzZWlmbmFtZWxlbiwgdGhpcy1cdTAwM2VpZm5hbWVsZW4pYCBjb3VsZCBpbmNvcnJlY3RseSBtYXRjaCBhIHByZWZpeCBvZiBhbiBpbnRlcmZhY2UgbmFtZSAoZS5nLiwgbWF0Y2hpbmcgXCYjMzQ7ZXRoMFwmIzM0OyB3aXRoIFwmIzM0O2V0aDAxXCYjMzQ7KSBkdXJpbmcgaG9vayBkZWxldGlvbiAoYG5mdF9kZWxjaGFpbl9ob29rYCBhbmQgYG5mdF9kZWxmbG93dGFibGVfaG9va2ApLiBUaGlzIGlzc3VlIGlzIGEgbG9naWMgZXJyb3IgdGhhdCBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBob29rIGRlbGV0aW9uLCBwb3RlbnRpYWxseSBjYXVzaW5nIGZ1bmN0aW9uYWwgaXNzdWVzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHdoaWNoIEtBU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoKS4gSXQgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciB1c2luZyB1bmluaXRpYWxpemVkIHZhbHVlcyBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzBjZDE4ZmMwNmRjZTk3MmU2NjBmNjA0Mjc5NzY2NzA2ZmYwYjE4OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDExOjE2OjMxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwppbmRleCBjMTEyZWNjNGZjYTMyLi43N2M5NmIxZDQyMTc4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwpAQCAtMjQ0MCwxMSAmIzQzOzI0NDAsMTQgQEAgc3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X25ldGRldl9ob29rX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwKIH0KIAogc3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X2hvb2tfbGlzdF9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmhvb2tfbGlzdCwKLQkJCQkJICAgY29uc3Qgc3RydWN0IG5mdF9ob29rICp0aGlzKQomIzQzOwkJCQkJICAgY29uc3Qgc3RydWN0IG5mdF9ob29rICp0aGlzLAomIzQzOwkJCQkJICAgYm9vbCBzdHJpY3QpCiB7CiAJc3RydWN0IG5mdF9ob29rICpob29rOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCBob29rX2xpc3QsIGxpc3QpIHsKJiM0MzsJCWlmIChzdHJpY3QgJmFtcDsmYW1wOyBob29rLSZndDtpZm5hbWVsZW4gIT0gdGhpcy0mZ3Q7aWZuYW1lbGVuKQomIzQzOwkJCWNvbnRpbnVlOwogCQlpZiAoIXN0cm5jbXAoaG9vay0mZ3Q7aWZuYW1lLCB0aGlzLSZndDtpZm5hbWUsCiAJCQkgICAgIG1pbihob29rLSZndDtpZm5hbWVsZW4sIHRoaXMtJmd0O2lmbmFtZWxlbikpKSB7CiAJCQlpZiAoaG9vay0mZ3Q7ZmxhZ3MgJmFtcDsgTkZUX0hPT0tfUkVNT1ZFKQpAQCAtMjQ4Niw3ICYjNDM7MjQ4OSw3IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsCiAJCQllcnIgPSBQVFJfRVJSKGhvb2spOwogCQkJZ290byBlcnJfaG9vazsKIAkJfQotCQlpZiAobmZ0X2hvb2tfbGlzdF9maW5kKGhvb2tfbGlzdCwgaG9vaykpIHsKJiM0MzsJCWlmIChuZnRfaG9va19saXN0X2ZpbmQoaG9va19saXN0LCBob29rLCBmYWxzZSkpIHsKIAkJCU5MX1NFVF9CQURfQVRUUihleHRhY2ssIHRtcCk7CiAJCQluZnRfbmV0ZGV2X2hvb2tfZnJlZShob29rKTsKIAkJCWVyciA9IC1FRVhJU1Q7CkBAIC0yOTQzLDcgJiM0MzsyOTQ2LDcgQEAgc3RhdGljIGludCBuZl90YWJsZXNfdXBkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZ2VubWFzaywgdTggcG9saWN5LAogCQkJCQlvcHMtJmd0O2hvb2sJPSBiYXNlY2hhaW4tJmd0O29wcy5ob29rOwogCQkJCX0KIAotCQkJCWlmIChuZnRfaG9va19saXN0X2ZpbmQoJmFtcDtiYXNlY2hhaW4tJmd0O2hvb2tfbGlzdCwgaCkpIHsKJiM0MzsJCQkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO2Jhc2VjaGFpbi0mZ3Q7aG9va19saXN0LCBoLCBmYWxzZSkpIHsKIAkJCQkJbGlzdF9kZWwoJmFtcDtoLSZndDtsaXN0KTsKIAkJCQkJbmZ0X25ldGRldl9ob29rX2ZyZWUoaCk7CiAJCQkJCWNvbnRpbnVlOwpAQCAtMjk1Niw3ICYjNDM7Mjk1OSw4IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSwKIAkJCQkJICAgICFuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSkKIAkJCQkJCWNvbnRpbnVlOwogCi0JCQkJCWlmIChuZnRfaG9va19saXN0X2ZpbmQoJmFtcDtuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkgewomIzQzOwkJCQkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO25mdF90cmFuc19jaGFpbl9ob29rcyh0cmFucyksCiYjNDM7CQkJCQkJCSAgICAgICBoLCBmYWxzZSkpIHsKIAkJCQkJCW5mdF9jaGFpbl9yZWxlYXNlX2hvb2soJmFtcDtob29rKTsKIAkJCQkJCXJldHVybiAtRUVYSVNUOwogCQkJCQl9CkBAIC0zMjU3LDcgJiM0MzszMjYxLDcgQEAgc3RhdGljIGludCBuZnRfZGVsY2hhaW5faG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQlyZXR1cm4gZXJyOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0aGlzLCAmYW1wO2NoYWluX2hvb2subGlzdCwgbGlzdCkgewotCQlob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7YmFzZWNoYWluLSZndDtob29rX2xpc3QsIHRoaXMpOwomIzQzOwkJaG9vayA9IG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO2Jhc2VjaGFpbi0mZ3Q7aG9va19saXN0LCB0aGlzLCB0cnVlKTsKIAkJaWYgKCFob29rKSB7CiAJCQllcnIgPSAtRU5PRU5UOwogCQkJZ290byBlcnJfY2hhaW5fZGVsX2hvb2s7CkBAIC05MDczLDcgJiM0Mzs5MDc3LDcgQEAgc3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsCiAJCQlpZiAoIW5mdF9pc19hY3RpdmVfbmV4dChuZXQsIGZ0KSkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO2Z0LSZndDtob29rX2xpc3QsIGhvb2spKSB7CiYjNDM7CQkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO2Z0LSZndDtob29rX2xpc3QsIGhvb2ssIGZhbHNlKSkgewogCQkJCWVyciA9IC1FRVhJU1Q7CiAJCQkJZ290byBlcnJfdW5yZWdpc3Rlcl9uZXRfaG9va3M7CiAJCQl9CkBAIC05MTUwLDcgJiM0Mzs5MTU0LDcgQEAgc3RhdGljIGludCBuZnRfZmxvd3RhYmxlX3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJcmV0dXJuIGVycjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShob29rLCBuZXh0LCAmYW1wO2Zsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHsKLQkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO2Zsb3d0YWJsZS0mZ3Q7aG9va19saXN0LCBob29rKSkgewomIzQzOwkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO2Zsb3d0YWJsZS0mZ3Q7aG9va19saXN0LCBob29rLCBmYWxzZSkpIHsKIAkJCWxpc3RfZGVsKCZhbXA7aG9vay0mZ3Q7bGlzdCk7CiAJCQluZnRfbmV0ZGV2X2hvb2tfZnJlZShob29rKTsKIAkJCWNvbnRpbnVlOwpAQCAtOTE2Myw3ICYjNDM7OTE2Nyw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQkgICAgIW5mdF90cmFuc19mbG93dGFibGVfdXBkYXRlKHRyYW5zKSkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKG5mdF9ob29rX2xpc3RfZmluZCgmYW1wO25mdF90cmFuc19mbG93dGFibGVfaG9va3ModHJhbnMpLCBob29rKSkgewomIzQzOwkJCWlmIChuZnRfaG9va19saXN0X2ZpbmQoJmFtcDtuZnRfdHJhbnNfZmxvd3RhYmxlX2hvb2tzKHRyYW5zKSwgaG9vaywgZmFsc2UpKSB7CiAJCQkJZXJyID0gLUVFWElTVDsKIAkJCQlnb3RvIGVycl9mbG93dGFibGVfdXBkYXRlX2hvb2s7CiAJCQl9CkBAIC05MzgzLDcgJiM0Mzs5Mzg3LDcgQEAgc3RhdGljIGludCBuZnRfZGVsZmxvd3RhYmxlX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCwKIAkJcmV0dXJuIGVycjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgJmFtcDtmbG93dGFibGVfaG9vay5saXN0LCBsaXN0KSB7Ci0JCWhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoJmFtcDtmbG93dGFibGUtJmd0O2hvb2tfbGlzdCwgdGhpcyk7CiYjNDM7CQlob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKCZhbXA7Zmxvd3RhYmxlLSZndDtob29rX2xpc3QsIHRoaXMsIHRydWUpOwogCQlpZiAoIWhvb2spIHsKIAkJCWVyciA9IC1FTk9FTlQ7CiAJCQlnb3RvIGVycl9mbG93dGFibGVfZGVsX2hvb2s7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjI4CgkJCQkJCQlvdXRwdXQ6IDIwNgoJCQkJCQkJdGhvdWdodHM6IDgzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG5mX3RhYmxlcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgLiBJdCYjMzk7cyBhIG1vZGlmaWNhdGlvbiB0byBgbmZ0X2hvb2tfbGlzdF9maW5kYCwgYWRkaW5nIGEgYGJvb2wgc3RyaWN0YCBwYXJhbWV0ZXIuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGVuc3VyaW5nIGV4YWN0IGludGVyZmFjZSBuYW1lIG1hdGNoaW5nLiBJZiBgc3RyaWN0YCBpcyB0cnVlLCBpdCBmb3JjZXMgYW4gZXhhY3QgbGVuZ3RoIGNvbXBhcmlzb246IGBob29rLSZndDtpZm5hbWVsZW4gIT0gdGhpcy0mZ3Q7aWZuYW1lbGVuYCBiZWZvcmUgZXZlbiBnZXR0aW5nIHRvIHRoZSBgc3RybmNtcGAuCgpUaGUgcHJvYmxlbSB0aGlzIGlzIGZpeGluZyBpbW1lZGlhdGVseSBqdW1wcyBvdXQg4oCTIHRoYXQgYHN0cm5jbXBgIHdhcyB2dWxuZXJhYmxlIHRvIHByZWZpeCBtYXRjaGVzLiBXaXRoIGBtaW4oaG9vay0mZ3Q7aWZuYW1lbGVuLCB0aGlzLSZndDtpZm5hbWVsZW4pYCwgeW91IGNvdWxkIGVuZCB1cCB3aXRoIGEgbWF0Y2ggd2hlcmUsIHNheSwgJiMzNDtldGgwJiMzNDsgaW5jb3JyZWN0bHkgbWF0Y2hlcyAmIzM0O2V0aDAxLiYjMzQ7IFRoaXMgaXMgYSBjbGFzc2ljIGxvZ2ljIGJ1ZywgYW5kIGluIHRoZSBjb250ZXh0IG9mIGRlbGV0aW5nIGhvb2tzIChzcGVjaWZpY2FsbHkgaW4gYG5mdF9kZWxjaGFpbl9ob29rYCBhbmQgYG5mdF9kZWxmbG93dGFibGVfaG9va2ApLCB0aGF0JiMzOTtzICpiYWQqLiBXZSBjb3VsZCBiZSBkZWxldGluZyB0aGUgd3JvbmcgaG9vaywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIHVzZS1hZnRlci1mcmVlIGRvd24gdGhlIGxpbmUgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBpbmNvcnJlY3QgYmVoYXZpb3IgYmVjYXVzZSB0aGUgaW50ZW5kZWQgaG9vayBpcyBzdGlsbCB0aGVyZSBhbmQgdGhlIHdyb25nIG9uZSBoYXMgYmVlbiBkZWxldGVkLgoKTXkgZmlyc3QgdGhvdWdodCwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJ1dCB0aGUgbGVuZ3RocyBgaWZuYW1lbGVuYCBhcmUganVzdCBzdHJpbmcgbGVuZ3RocywgYW5kIGBzdHJuY21wYCBoYXMgdGhlIGBtaW5gIGxpbWl0YXRpb24sIHRoZXJlJiMzOTtzIG5vIHdheSBpdCYjMzk7cyBnb2luZyB0byBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIEl0JiMzOTtzIHB1cmVseSBhIGxvZ2ljIGVycm9yLCBhIHByZWZpeCBtYXRjaGluZyBpc3N1ZS4gS0FTQU4gd291bGQgYmUgdGhlIHRvb2wgdG8gY2F0Y2ggYW55IHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBpZiB3ZSBkZWxldGUgdGhlIHdyb25nIGhvb2sgYW5kIHRyeSB0byBhY2Nlc3MgaXQgbGF0ZXIsIGJ1dCBLTVNBTiBpcyBpcnJlbGV2YW50IGhlcmUuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGNvZGUgc25pcHBldDoKCmBgYGMKc3RhdGljIHN0cnVjdCBuZnRfaG9vayAqbmZ0X2hvb2tfbGlzdF9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmhvb2tfbGlzdCwKCQkJCQkgICBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKnRoaXMsCgkJCQkJICAgYm9vbCBzdHJpY3QpCnsKCXN0cnVjdCBuZnRfaG9vayAqaG9vazsKCglsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvb2ssIGhvb2tfbGlzdCwgbGlzdCkgewoJCWlmIChzdHJpY3QgJmFtcDsmYW1wOyBob29rLSZndDtpZm5hbWVsZW4gIT0gdGhpcy0mZ3Q7aWZuYW1lbGVuKQoJCQljb250aW51ZTsKCQlpZiAoIXN0cm5jbXAoaG9vay0mZ3Q7aWZuYW1lLCB0aGlzLSZndDtpZm5hbWUsCgkJCSAgICAgbWluKGhvb2stJmd0O2lmbmFtZWxlbiwgdGhpcy0mZ3Q7aWZuYW1lbGVuKSkpIHsKCQkJaWYgKGhvb2stJmd0O2ZsYWdzICZhbXA7IE5GVF9IT09LX1JFTU9WRSkKCQkJCWNvbnRpbnVlOwoJCQlyZXR1cm4gaG9vazsKCQl9Cgl9CgoJcmV0dXJuIE5VTEw7Cn0KYGBgCgpPa2F5LCBjb25maXJtZWQuIElmIGBzdHJpY3RgIGlzIGZhbHNlLCBpdCBzdGlsbCB1c2VzIHRoYXQgYG1pbihob29rLSZndDtpZm5hbWVsZW4sIHRoaXMtJmd0O2lmbmFtZWxlbilgLCB3aGljaCBtZWFucyBwcmVmaXggbWF0Y2hpbmcgd2lsbCBzdGlsbCBvY2N1ciBpZiBgc3RyaWN0YCBpcyBkaXNhYmxlZC4gVGhhdCYjMzk7cyBwcm9iYWJseSBpbnRlbmRlZCBmb3Igd2lsZGNhcmQgdXNlIGNhc2VzLCBvciBtYXliZSBpdCYjMzk7cyBsZWdhY3kgYmVoYXZpb3IuIFdoYXRldmVyIHRoZSByZWFzb24sIHRoaXMgcGF0Y2ggKmRvZXMgbm90KiBpbnRyb2R1Y2Ugb3IgZml4IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEl0JiMzOTtzIGEgY2xlYXIgbG9naWMgYnVnIGZpeCDigJMgYWRkcmVzc2luZyB0aGUgZXhhY3QgdnMuIHByZWZpeCBtYXRjaGluZyBvZiBpbnRlcmZhY2UgbmFtZXMuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJdCYjMzk7cyBLQVNBTiBhbGwgdGhlIHdheSBmb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgZHVlIHRvIHRoZSBpbmNvcnJlY3QgZGVsZXRpb24uCgpUbyBzdW1tYXJpemUgZm9yIHRoZSByZXZpZXc6IFRoZSBwYXRjaCBtb2RpZmllcyBgbmZ0X2hvb2tfbGlzdF9maW5kYCB0byBlbmZvcmNlIHN0cmljdCBsZW5ndGggbWF0Y2hpbmcuIFRoaXMgZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgcHJlZml4IG1hdGNoZXMgZm9yIGludGVyZmFjZSBuYW1lcyBjb3VsZCBvY2N1ciBkdXJpbmcgaG9vayBkZWxldGlvbiAoYG5mdF9kZWxjaGFpbl9ob29rYCBhbmQgYG5mdF9kZWxmbG93dGFibGVfaG9va2ApIGR1ZSB0byB1c2luZyBgbWluYCBsZW5ndGggaW4gYHN0cm5jbXBgLiBUaGlzIGNvdWxkIGxlYWQgdG8gZnVuY3Rpb25hbCBvciB1c2UtYWZ0ZXItZnJlZSBlcnJvcnMuIEl0JiMzOTtzIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG5mdF9ob29rX2xpc3RfZmluZGAgdG8gb3B0aW9uYWxseSBlbmZvcmNlIHN0cmljdCBsZW5ndGggbWF0Y2hpbmcgKGBob29rLVx1MDAzZWlmbmFtZWxlbiAhPSB0aGlzLVx1MDAzZWlmbmFtZWxlbmApIHdoZW4gY29tcGFyaW5nIGludGVyZmFjZSBuYW1lcy4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgc3RybmNtcGAgd2l0aCBgbWluKGhvb2stXHUwMDNlaWZuYW1lbGVuLCB0aGlzLVx1MDAzZWlmbmFtZWxlbilgIGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIGEgcHJlZml4IG9mIGFuIGludGVyZmFjZSBuYW1lIChlLmcuLCBtYXRjaGluZyBcJiMzNDtldGgwXCYjMzQ7IHdpdGggXCYjMzQ7ZXRoMDFcJiMzNDspIGR1cmluZyBob29rIGRlbGV0aW9uIChgbmZ0X2RlbGNoYWluX2hvb2tgIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYCkuIFRoaXMgaXNzdWUgaXMgYSBsb2dpYyBlcnJvciB0aGF0IGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGhvb2sgZGVsZXRpb24sIHBvdGVudGlhbGx5IGNhdXNpbmcgZnVuY3Rpb25hbCBpc3N1ZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAod2hpY2ggS0FTQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2gpLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYG5mdF9ob29rX2xpc3RfZmluZGAgdG8gb3B0aW9uYWxseSBlbmZvcmNlIHN0cmljdCBsZW5ndGggbWF0Y2hpbmcgKGBob29rLVx1MDAzZWlmbmFtZWxlbiAhPSB0aGlzLVx1MDAzZWlmbmFtZWxlbmApIHdoZW4gY29tcGFyaW5nIGludGVyZmFjZSBuYW1lcy4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgc3RybmNtcGAgd2l0aCBgbWluKGhvb2stXHUwMDNlaWZuYW1lbGVuLCB0aGlzLVx1MDAzZWlmbmFtZWxlbilgIGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIGEgcHJlZml4IG9mIGFuIGludGVyZmFjZSBuYW1lIChlLmcuLCBtYXRjaGluZyBcJiMzNDtldGgwXCYjMzQ7IHdpdGggXCYjMzQ7ZXRoMDFcJiMzNDspIGR1cmluZyBob29rIGRlbGV0aW9uIChgbmZ0X2RlbGNoYWluX2hvb2tgIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYCkuIFRoaXMgaXNzdWUgaXMgYSBsb2dpYyBlcnJvciB0aGF0IGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGhvb2sgZGVsZXRpb24sIHBvdGVudGlhbGx5IGNhdXNpbmcgZnVuY3Rpb25hbCBpc3N1ZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAod2hpY2ggS0FTQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2gpLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxNjozMi4wNjcxNDg1NDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYwNzY5NzY5MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9UQUJMRVNfTkVUREVWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfdGFibGVzX25ld2NoYWluXCIsXG4gICAgXCJuZl90YWJsZXNfZGVsY2hhaW5cIixcbiAgICBcIm5mX3RhYmxlc19uZXdmbG93dGFibGVcIixcbiAgICBcIm5mX3RhYmxlc19kZWxmbG93dGFibGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBuZnRfaG9va19saXN0X2ZpbmRgIHRvIG9wdGlvbmFsbHkgZW5mb3JjZSBzdHJpY3QgbGVuZ3RoIG1hdGNoaW5nIChgaG9vay1cXHUwMDNlaWZuYW1lbGVuICE9IHRoaXMtXFx1MDAzZWlmbmFtZWxlbmApIHdoZW4gY29tcGFyaW5nIGludGVyZmFjZSBuYW1lcy4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBgc3RybmNtcGAgd2l0aCBgbWluKGhvb2stXFx1MDAzZWlmbmFtZWxlbiwgdGhpcy1cXHUwMDNlaWZuYW1lbGVuKWAgY291bGQgaW5jb3JyZWN0bHkgbWF0Y2ggYSBwcmVmaXggb2YgYW4gaW50ZXJmYWNlIG5hbWUgKGUuZy4sIG1hdGNoaW5nIFxcXCJldGgwXFxcIiB3aXRoIFxcXCJldGgwMVxcXCIpIGR1cmluZyBob29rIGRlbGV0aW9uIChgbmZ0X2RlbGNoYWluX2hvb2tgIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYCkuIFRoaXMgaXNzdWUgaXMgYSBsb2dpYyBlcnJvciB0aGF0IGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGhvb2sgZGVsZXRpb24sIHBvdGVudGlhbGx5IGNhdXNpbmcgZnVuY3Rpb25hbCBpc3N1ZXMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAod2hpY2ggS0FTQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2gpLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIG9yIHVzaW5nIHVuaW5pdGlhbGl6ZWQgdmFsdWVzIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIHdoZXJlIGl0IGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIG5ldGRldiBob29rcyB3aXRoIGRpZmZlcmVudCBuYW1lIGxlbmd0aHMgaWYgb25lIGlzIGEgcHJlZml4IG9mIGFub3RoZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgbmZfdGFibGVzIEFQSSwgYWZmZWN0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgbWVzc2FnZXMgZm9yIGNyZWF0aW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgY2hhaW5zIGFuZCBmbG93dGFibGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxNjozMi4wNjcxNTQxNTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MDU4NTY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDcwY2QxOGZjMDZkY2U5NzJlNjYwZjYwNDI3OTc2NjcwNmZmMGIxODhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjcgMTE6MTY6MzEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xcbmluZGV4IGMxMTJlY2M0ZmNhMzIuLjc3Yzk2YjFkNDIxNzggMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xcbkBAIC0yNDQwLDExICsyNDQwLDE0IEBAIHN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9uZXRkZXZfaG9va19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9ob29rX2xpc3RfZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpob29rX2xpc3QsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqdGhpcylcXG4rXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9ob29rICp0aGlzLFxcbitcXHRcXHRcXHRcXHRcXHQgICBib29sIHN0cmljdClcXG4ge1xcbiBcXHRzdHJ1Y3QgbmZ0X2hvb2sgKmhvb2s7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvb2ssIGhvb2tfbGlzdCwgbGlzdCkge1xcbitcXHRcXHRpZiAoc3RyaWN0IFxcdTAwMjZcXHUwMDI2IGhvb2stXFx1MDAzZWlmbmFtZWxlbiAhPSB0aGlzLVxcdTAwM2VpZm5hbWVsZW4pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRpZiAoIXN0cm5jbXAoaG9vay1cXHUwMDNlaWZuYW1lLCB0aGlzLVxcdTAwM2VpZm5hbWUsXFxuIFxcdFxcdFxcdCAgICAgbWluKGhvb2stXFx1MDAzZWlmbmFtZWxlbiwgdGhpcy1cXHUwMDNlaWZuYW1lbGVuKSkpIHtcXG4gXFx0XFx0XFx0aWYgKGhvb2stXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0hPT0tfUkVNT1ZFKVxcbkBAIC0yNDg2LDcgKzI0ODksNyBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKGhvb2spO1xcbiBcXHRcXHRcXHRnb3RvIGVycl9ob29rO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoaG9va19saXN0LCBob29rKSkge1xcbitcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKGhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XFxuIFxcdFxcdFxcdE5MX1NFVF9CQURfQVRUUihleHRhY2ssIHRtcCk7XFxuIFxcdFxcdFxcdG5mdF9uZXRkZXZfaG9va19mcmVlKGhvb2spO1xcbiBcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbkBAIC0yOTQzLDcgKzI5NDYsNyBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc191cGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBnZW5tYXNrLCB1OCBwb2xpY3ksXFxuIFxcdFxcdFxcdFxcdFxcdG9wcy1cXHUwMDNlaG9va1xcdD0gYmFzZWNoYWluLVxcdTAwM2VvcHMuaG9vaztcXG4gXFx0XFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2YmFzZWNoYWluLVxcdTAwM2Vob29rX2xpc3QsIGgpKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXFx1MDAyNmJhc2VjaGFpbi1cXHUwMDNlaG9va19saXN0LCBoLCBmYWxzZSkpIHtcXG4gXFx0XFx0XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmgtXFx1MDAzZWxpc3QpO1xcbiBcXHRcXHRcXHRcXHRcXHRuZnRfbmV0ZGV2X2hvb2tfZnJlZShoKTtcXG4gXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTI5NTYsNyArMjk1OSw4IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICFuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcXG4gXFx0XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkge1xcbitcXHRcXHRcXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaCwgZmFsc2UpKSB7XFxuIFxcdFxcdFxcdFxcdFxcdFxcdG5mdF9jaGFpbl9yZWxlYXNlX2hvb2soXFx1MDAyNmhvb2spO1xcbiBcXHRcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gXFx0XFx0XFx0XFx0XFx0fVxcbkBAIC0zMjU3LDcgKzMyNjEsNyBAQCBzdGF0aWMgaW50IG5mdF9kZWxjaGFpbl9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFxcdTAwMjZjaGFpbl9ob29rLmxpc3QsIGxpc3QpIHtcXG4tXFx0XFx0aG9vayA9IG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2YmFzZWNoYWluLVxcdTAwM2Vob29rX2xpc3QsIHRoaXMpO1xcbitcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgdGhpcywgdHJ1ZSk7XFxuIFxcdFxcdGlmICghaG9vaykge1xcbiBcXHRcXHRcXHRlcnIgPSAtRU5PRU5UO1xcbiBcXHRcXHRcXHRnb3RvIGVycl9jaGFpbl9kZWxfaG9vaztcXG5AQCAtOTA3Myw3ICs5MDc3LDcgQEAgc3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdGlmICghbmZ0X2lzX2FjdGl2ZV9uZXh0KG5ldCwgZnQpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXFx1MDAyNmZ0LVxcdTAwM2Vob29rX2xpc3QsIGhvb2spKSB7XFxuK1xcdFxcdFxcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXFx1MDAyNmZ0LVxcdTAwM2Vob29rX2xpc3QsIGhvb2ssIGZhbHNlKSkge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGVycl91bnJlZ2lzdGVyX25ldF9ob29rcztcXG4gXFx0XFx0XFx0fVxcbkBAIC05MTUwLDcgKzkxNTQsNyBAQCBzdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvb2ssIG5leHQsIFxcdTAwMjZmbG93dGFibGVfaG9vay5saXN0LCBsaXN0KSB7XFxuLVxcdFxcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlaG9va19saXN0LCBob29rKSkge1xcbitcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XFxuIFxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZob29rLVxcdTAwM2VsaXN0KTtcXG4gXFx0XFx0XFx0bmZ0X25ldGRldl9ob29rX2ZyZWUoaG9vayk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC05MTYzLDcgKzkxNjcsNyBAQCBzdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbiBcXHRcXHRcXHQgICAgIW5mdF90cmFuc19mbG93dGFibGVfdXBkYXRlKHRyYW5zKSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZuZnRfdHJhbnNfZmxvd3RhYmxlX2hvb2tzKHRyYW5zKSwgaG9vaykpIHtcXG4rXFx0XFx0XFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2bmZ0X3RyYW5zX2Zsb3d0YWJsZV9ob29rcyh0cmFucyksIGhvb2ssIGZhbHNlKSkge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRUVYSVNUO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGVycl9mbG93dGFibGVfdXBkYXRlX2hvb2s7XFxuIFxcdFxcdFxcdH1cXG5AQCAtOTM4Myw3ICs5Mzg3LDcgQEAgc3RhdGljIGludCBuZnRfZGVsZmxvd3RhYmxlX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgXFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcXG4tXFx0XFx0aG9vayA9IG5mdF9ob29rX2xpc3RfZmluZChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2Vob29rX2xpc3QsIHRoaXMpO1xcbitcXHRcXHRob29rID0gbmZ0X2hvb2tfbGlzdF9maW5kKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWhvb2tfbGlzdCwgdGhpcywgdHJ1ZSk7XFxuIFxcdFxcdGlmICghaG9vaykge1xcbiBcXHRcXHRcXHRlcnIgPSAtRU5PRU5UO1xcbiBcXHRcXHRcXHRnb3RvIGVycl9mbG93dGFibGVfZGVsX2hvb2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDExOjE2OjMyLjQxODI5NDM2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyMTY4MjExMDkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX1RBQkxFU19ORVRERVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl90YWJsZXNfbmV3Y2hhaW5cIixcbiAgICBcIm5mX3RhYmxlc19kZWxjaGFpblwiLFxuICAgIFwibmZfdGFibGVzX25ld2Zsb3d0YWJsZVwiLFxuICAgIFwibmZfdGFibGVzX2RlbGZsb3d0YWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIHdoZXJlIGl0IGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIG5ldGRldiBob29rcyB3aXRoIGRpZmZlcmVudCBuYW1lIGxlbmd0aHMgaWYgb25lIGlzIGEgcHJlZml4IG9mIGFub3RoZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgbmZfdGFibGVzIEFQSSwgYWZmZWN0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgbWVzc2FnZXMgZm9yIGNyZWF0aW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgY2hhaW5zIGFuZCBmbG93dGFibGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MGNkMThmYzA2ZGNlOTcyZTY2MGY2MDQyNzk3NjY3MDZmZjBiMTg4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMTE6MTY6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5pbmRleCBjMTEyZWNjNGZjYTMyLi43N2M5NmIxZDQyMTc4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5AQCAtMjQ0MCwxMSArMjQ0MCwxNCBAQCBzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfbmV0ZGV2X2hvb2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxuIH1cbiBcbiBzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxuLVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKnRoaXMpXG4rXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqdGhpcyxcbitcdFx0XHRcdFx0ICAgYm9vbCBzdHJpY3QpXG4ge1xuIFx0c3RydWN0IG5mdF9ob29rICpob29rO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCBob29rX2xpc3QsIGxpc3QpIHtcbitcdFx0aWYgKHN0cmljdCBcdTAwMjZcdTAwMjYgaG9vay1cdTAwM2VpZm5hbWVsZW4gIT0gdGhpcy1cdTAwM2VpZm5hbWVsZW4pXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghc3RybmNtcChob29rLVx1MDAzZWlmbmFtZSwgdGhpcy1cdTAwM2VpZm5hbWUsXG4gXHRcdFx0ICAgICBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKSkpIHtcbiBcdFx0XHRpZiAoaG9vay1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0hPT0tfUkVNT1ZFKVxuQEAgLTI0ODYsNyArMjQ4OSw3IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0ZXJyID0gUFRSX0VSUihob29rKTtcbiBcdFx0XHRnb3RvIGVycl9ob29rO1xuIFx0XHR9XG4tXHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoaG9va19saXN0LCBob29rKSkge1xuK1x0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKGhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XG4gXHRcdFx0TkxfU0VUX0JBRF9BVFRSKGV4dGFjaywgdG1wKTtcbiBcdFx0XHRuZnRfbmV0ZGV2X2hvb2tfZnJlZShob29rKTtcbiBcdFx0XHRlcnIgPSAtRUVYSVNUO1xuQEAgLTI5NDMsNyArMjk0Niw3IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcbiBcdFx0XHRcdFx0b3BzLVx1MDAzZWhvb2tcdD0gYmFzZWNoYWluLVx1MDAzZW9wcy5ob29rO1xuIFx0XHRcdFx0fVxuIFxuLVx0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZiYXNlY2hhaW4tXHUwMDNlaG9va19saXN0LCBoKSkge1xuK1x0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZiYXNlY2hhaW4tXHUwMDNlaG9va19saXN0LCBoLCBmYWxzZSkpIHtcbiBcdFx0XHRcdFx0bGlzdF9kZWwoXHUwMDI2aC1cdTAwM2VsaXN0KTtcbiBcdFx0XHRcdFx0bmZ0X25ldGRldl9ob29rX2ZyZWUoaCk7XG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTI5NTYsNyArMjk1OSw4IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcbiBcdFx0XHRcdFx0ICAgICFuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcbiBcdFx0XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkge1xuK1x0XHRcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19jaGFpbl9ob29rcyh0cmFucyksXG4rXHRcdFx0XHRcdFx0XHQgICAgICAgaCwgZmFsc2UpKSB7XG4gXHRcdFx0XHRcdFx0bmZ0X2NoYWluX3JlbGVhc2VfaG9vayhcdTAwMjZob29rKTtcbiBcdFx0XHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdFx0XHRcdFx0fVxuQEAgLTMyNTcsNyArMzI2MSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2RlbGNoYWluX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XG4tXHRcdGhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2YmFzZWNoYWluLVx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XG4rXHRcdGhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2YmFzZWNoYWluLVx1MDAzZWhvb2tfbGlzdCwgdGhpcywgdHJ1ZSk7XG4gXHRcdGlmICghaG9vaykge1xuIFx0XHRcdGVyciA9IC1FTk9FTlQ7XG4gXHRcdFx0Z290byBlcnJfY2hhaW5fZGVsX2hvb2s7XG5AQCAtOTA3Myw3ICs5MDc3LDcgQEAgc3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBmdCkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZ0LVx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcbitcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZ0LVx1MDAzZWhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XG4gXHRcdFx0XHRlcnIgPSAtRUVYSVNUO1xuIFx0XHRcdFx0Z290byBlcnJfdW5yZWdpc3Rlcl9uZXRfaG9va3M7XG4gXHRcdFx0fVxuQEAgLTkxNTAsNyArOTE1NCw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaG9vaywgbmV4dCwgXHUwMDI2Zmxvd3RhYmxlX2hvb2subGlzdCwgbGlzdCkge1xuLVx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2Vob29rX2xpc3QsIGhvb2spKSB7XG4rXHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XG4gXHRcdFx0bGlzdF9kZWwoXHUwMDI2aG9vay1cdTAwM2VsaXN0KTtcbiBcdFx0XHRuZnRfbmV0ZGV2X2hvb2tfZnJlZShob29rKTtcbiBcdFx0XHRjb250aW51ZTtcbkBAIC05MTYzLDcgKzkxNjcsNyBAQCBzdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdCAgICAhbmZ0X3RyYW5zX2Zsb3d0YWJsZV91cGRhdGUodHJhbnMpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfZmxvd3RhYmxlX2hvb2tzKHRyYW5zKSwgaG9vaykpIHtcbitcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19mbG93dGFibGVfaG9va3ModHJhbnMpLCBob29rLCBmYWxzZSkpIHtcbiBcdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4gXHRcdFx0XHRnb3RvIGVycl9mbG93dGFibGVfdXBkYXRlX2hvb2s7XG4gXHRcdFx0fVxuQEAgLTkzODMsNyArOTM4Nyw3IEBAIHN0YXRpYyBpbnQgbmZ0X2RlbGZsb3d0YWJsZV9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcbi1cdFx0aG9vayA9IG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZmbG93dGFibGUtXHUwMDNlaG9va19saXN0LCB0aGlzKTtcbitcdFx0aG9vayA9IG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZmbG93dGFibGUtXHUwMDNlaG9va19saXN0LCB0aGlzLCB0cnVlKTtcbiBcdFx0aWYgKCFob29rKSB7XG4gXHRcdFx0ZXJyID0gLUVOT0VOVDtcbiBcdFx0XHRnb3RvIGVycl9mbG93dGFibGVfZGVsX2hvb2s7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxNjozMi40MTgyOTU3ODFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjU3NDI4MTg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbmZ0X2hvb2tfbGlzdF9maW5kYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jYC4gU291bmRzIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZ2l2ZW4gdGhhdCBpdCdzIGZpeGluZyBhIHBvdGVudGlhbCBtYXRjaGluZyBidWcgcmVsYXRlZCB0byBuZXRmaWx0ZXIgbmZfdGFibGVzLiBTcGVjaWZpY2FsbHksIGl0J3MgYWRkaW5nIGEgYHN0cmljdGAgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbi4gSWYgYHN0cmljdGAgaXMgZW5hYmxlZCwgaXQgZW5zdXJlcyBhbiBleGFjdCBtYXRjaCBvZiBgaWZuYW1lbGVuYCBiZWZvcmUgY29tcGFyaW5nIG5hbWVzLiBUaGlzIGlzIGxpa2VseSBhZGRyZXNzaW5nIGEgc3VidGxlIGZsYXcgd2hlcmUgaG9va3Mgd2l0aCBzbGlnaHRseSBkaWZmZXJlbnQgbmFtZSBsZW5ndGhzIGNvdWxkIGJlIGluY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgYSBtYXRjaCBpZiBvbmUgbmFtZSB3YXMgYSBwcmVmaXggb2YgYW5vdGhlciwgYSBjbGFzc2ljIHByZWZpeC9zdWJzdHJpbmcgdnVsbmVyYWJpbGl0eS5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhpcyBtb2RpZmllZCBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhcmU6IGBuZnRfZGVsY2hhaW5faG9va2AsIGBuZnRfZGVsZmxvd3RhYmxlX2hvb2tgLCBgbmZ0X2Zsb3d0YWJsZV91cGRhdGVgLCBgbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV9uZXRfaG9va3NgLCBgbmZfdGFibGVzX3VwZGNoYWluYCwgYW5kIGBuZl90YWJsZXNfcGFyc2VfbmV0ZGV2X2hvb2tzYC4gVGhlc2UgYXJlIG15IHRhcmdldHMuXG5cbk5vdywgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwgSSBuZWVkIHRvIHZlcmlmeSBob3cgYG5mX3RhYmxlc19hcGkuY2AgaXMgY29tcGlsZWQuIEEgcXVpY2sgY2hlY2sgb2YgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2Agc2hvdWxkIGNvbmZpcm0gaXQgaXMgdW5kZXIgYENPTkZJR19ORl9UQUJMRVNgLCB3aGljaCBJIG5lZWQgdG8ga25vdyBmb3IgYnVpbGQgY29uZmlndXJhdGlvbnMuIEEgcXVpY2sgZ3JlcCB3aWxsIGFsc28gdmVyaWZ5IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxNjo0OC45OTI1Nzk3OTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1MDE5NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX3RhYmxlc19hcGlcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg0PW9iai0kKENPTkZJR19ORl9EVVBfTkVUREVWKVxcdCs9IG5mX2R1cF9uZXRkZXYub1xcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04Ni0jIG5mX3RhYmxlc1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODc6bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg4LVxcdFxcdCAgbmZfdGFibGVzX3RyYWNlLm8gbmZ0X2ltbWVkaWF0ZS5vIG5mdF9jbXAubyBuZnRfcmFuZ2UubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDExOjE2OjQ5LjE5NzYwNjUyNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDE2NTU5OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYENPTkZJR19ORl9UQUJMRVNgIGFuZCBSZWxhdGVkIEhvb2tzKipcblxuQWxyaWdodCwgc28gYENPTkZJR19ORl9UQUJMRVNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UncmUgZGVhbGluZyB3aXRoIGhlcmUsIHRoYXQgbXVjaCBpcyBjbGVhci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgaG93IGl0IGFsbCB0aWVzIHRvZ2V0aGVyLCBzcGVjaWZpY2FsbHkgaG93IHRoaXMgZmVhdHVyZSBpcyB1bmluc3RhbGxlZC4gSSdtIGdvaW5nIHRvIHdhbnQgdG8gdmVyaWZ5IHRoZSB0ZWFyZG93biBwYXRocy4gTGV0J3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSBgbmZ0X2RlbGNoYWluX2hvb2tgIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYCBmdW5jdGlvbnMgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIFRoZXNlIGhvb2tzIGFyZSB3aGVyZSB0aGUgcmVtb3ZhbCBvZiBjaGFpbnMgYW5kIGZsb3cgdGFibGVzIGFyZSBoYW5kbGVkLCBhbmQgYXJlIG9idmlvdXNseSBjcml0aWNhbCB0byB0aGUgd2hvbGUgdW5pbnN0YWxsIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRob3NlIGZ1bmN0aW9ucywgYW55IGRlcGVuZGVuY2llcyB0aGV5IG1pZ2h0IGhhdmUsIGFuZCB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgY2xlYW5lZCB1cCB0byBtYWtlIHN1cmUgdGhpbmdzIGFyZSBmdWxseSBkaXNtYW50bGVkLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBhcyB3ZWxsLCBhcyB0aGF0IGNhbiBiZSBhIHNvdXJjZSBvZiBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk2NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDExOjE3OjAyLjIxNDE2ODgyMloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkzNDUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfZGVsY2hhaW5faG9va1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMjMzPXN0YXRpYyB2b2lkIG5mdF90cmFuc19kZWxob29rX2Fib3J0KHN0cnVjdCBsaXN0X2hlYWQgKmRlbF9saXN0KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzI0Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMjQzOnN0YXRpYyBpbnQgbmZ0X2RlbGNoYWluX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMjQ0LVxcdFxcdFxcdCAgICAgc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMjk4PXN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbGNoYWluKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMzUxLVxcdFxcdFxcdGlmIChuZnRfYmFzZV9jaGFpbl9uZXRkZXYodGFibGUtXFx1MDAzZWZhbWlseSwgYmFzZWNoYWluLVxcdTAwM2VvcHMuaG9va251bSkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzM1MjpcXHRcXHRcXHRcXHRyZXR1cm4gbmZ0X2RlbGNoYWluX2hvb2soXFx1MDAyNmN0eCwgYmFzZWNoYWluLCBleHRhY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzNTMtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxNzowMi4yNTgxMDUzM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4ODg4MTcwNDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYG5mdF9kZWxmbG93dGFibGVfaG9va2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYCBmdW5jdGlvbi4gVGhpcyBpcyBhIGNyaXRpY2FsIGNvbXBvbmVudCBmb3IgbWFuYWdpbmcgYW5kIG1vZGlmeWluZyBmbG93IHRhYmxlcyB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmssIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IHRob3JvdWdobHksIGFuZCBtYWtlIHN1cmUgaXQncyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZCwgYW5kIHRoYXQgYW55IG9mIG15IHJlbGF0ZWQgY29kZSBpcyBjb21wYXRpYmxlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcmV2aWV3aW5nIHRoZSBzb3VyY2UgY29kZSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb24gb2YgdGhpcyBob29rLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgYWxsIHRoZSBlZGdlIGNhc2VzLiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgaXMgaW1wYWN0ZWQgYnkgdGhlIG5ldyBrZXJuZWwgdmVyc2lvbiBvciBhbnkgcmVjZW50IHNlY3VyaXR5IHVwZGF0ZXMsIGFzIHRoZXNlIGhhdmUgYSBoYWJpdCBvZiBpbnRyb2R1Y2luZyBzdWJ0bGUsIGJ1dCBpbXBhY3RmdWwsIGNoYW5nZXMgaW4gbWVtb3J5IGxheW91dCBhbmQgaGFuZGxpbmcgdGhhdCBjb3VsZCBhZmZlY3QgaG93IGZsb3cgdGFibGUgZW50cmllcyBhcmUgbWFuYWdlZC4gSSdsbCBhbHNvIHdhbnQgdG8gbG9vayBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBjb25jdXJyZW5jeSBpc3N1ZXMsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIHRvIHByb3RlY3QgdGhlIGZsb3cgdGFibGUgZGF0YSBzdHJ1Y3R1cmVzLiBBIHF1aWNrIGdsYW5jZSBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBtaWdodCBhbHNvIHJldmVhbCBhbnkgbGVzcy10aGFuLW9idmlvdXMgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBJIHNob3VsZCBhbHNvIGNoZWNrIHRoZSBlcnJvciBoYW5kbGluZzsgYXJlIHRoZXJlIHN1ZmZpY2llbnQgY2hlY2tzIHRvIGRlYWwgd2l0aCBwb3RlbnRpYWwgZmFpbHVyZXMgYW5kIGFyZSB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgY29kZXMvbWVzc2FnZXMgYmVpbmcgcmV0dXJuZWQ/IExldCdzIGdldCB0byB3b3JrIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTY4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTE6MTc6MzEuMTQ2Mjc4NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODczMjI2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfZGVsZmxvd3RhYmxlX2hvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTM2Mz1zdGF0aWMgdm9pZCBuZnRfZmxvd3RhYmxlX2hvb2tfcmVsZWFzZShzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZV9ob29rICpmbG93dGFibGVfaG9vaylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzNzItXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTM3MzpzdGF0aWMgaW50IG5mdF9kZWxmbG93dGFibGVfaG9vayhzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkzNzQtXFx0XFx0XFx0XFx0IHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmbG93dGFibGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05NDI1PXN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbGZsb3d0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTQ2OS1cXHRpZiAobmxhW05GVEFfRkxPV1RBQkxFX0hPT0tdKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjk0NzA6XFx0XFx0cmV0dXJuIG5mdF9kZWxmbG93dGFibGVfaG9vayhcXHUwMDI2Y3R4LCBmbG93dGFibGUsIGV4dGFjayk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTQ3MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTE6MTc6MzEuMTk1MDEzOTY5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY5MjMzMTYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIE5ldGZpbHRlci9uZnRhYmxlcyBmdW5jdGlvbnMgYW5kIGltbWVkaWF0ZWx5IHNlZSBzb21lIHByaW1lIGZ1enppbmcgY2FuZGlkYXRlcy4gU3BlY2lmaWNhbGx5LCBgbmZfdGFibGVzX3VwZGNoYWluYCwgYG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3NgLCBgbmZ0X3JlZ2lzdGVyX2Zsb3d0YWJsZV9uZXRfaG9va3NgLCBgbmZ0X2Zsb3d0YWJsZV91cGRhdGVgLCBgbmZ0X2RlbGNoYWluX2hvb2tgLCBhbmQgYG5mdF9kZWxmbG93dGFibGVfaG9va2AgYWxsIGxvb2sgbGlrZSB0aGV5IGhhbmRsZSBjcnVjaWFsIHN0YXRlIGNoYW5nZXMgb3IgaW5wdXQgcGFyc2luZyB3aXRoaW4gdGhlIGZsb3d0YWJsZSBhbmQgY2hhaW4gbWFuYWdlbWVudC4gVGhleSdyZSBkZWZpbml0ZWx5IG9uIHRoZSBsaXN0LlxuXG5Ib2xkIG9uIGEgc2Vjb25kLi4uIEkgcmVtZW1iZXIgYG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3NgIGJlaW5nIHN0YXRpYy4gSSBzaG91bGQgdmVyaWZ5IGlmIGBuZl90YWJsZXNfdXBkY2hhaW5gIGlzIGFsc28gc3RhdGljLCBhcyB0aGlzIG1heSBpbXBhY3QgaG93IGFwcHJvYWNoYWJsZSBpdCB3aWxsIGJlIGFzIGEgZnV6emluZyB0YXJnZXQuIExldCdzIGRvdWJsZSBjaGVjayB0aGF0LCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxODcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTE6MTc6MzUuODg3MzQ4Mzc2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTY3ODMyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl90YWJsZXNfdXBkY2hhaW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mjc1Mz1zdGF0aWMgaW50IG5mX3RhYmxlc19hZGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBmYW1pbHksIHU4IHBvbGljeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI4OTgtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjg5OTpzdGF0aWMgaW50IG5mX3RhYmxlc191cGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBnZW5tYXNrLCB1OCBwb2xpY3ksXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjkwMC1cXHRcXHRcXHQgICAgICB1MzIgZmxhZ3MsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMTE2PXN0YXRpYyBpbnQgbmZfdGFibGVzX25ld2NoYWluKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMjA5LVxcdFxcdGZsYWdzIHw9IGNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9CQVNFO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMyMTA6XFx0XFx0cmV0dXJuIG5mX3RhYmxlc191cGRjaGFpbihcXHUwMDI2Y3R4LCBnZW5tYXNrLCBwb2xpY3ksIGZsYWdzLCBhdHRyLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyMTEtXFx0XFx0XFx0XFx0XFx0ICBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxNzozNS45MzMwMzIyMzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1Njc0MDk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJZGVudGlmeWluZyBEeW5hbWljIE5ldGZpbHRlciBBUEkgRW50cnlwb2ludHMqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpbmdzIGFwcGVhciBzdGF0aWMsIHdoaWNoIGlzbid0IGVudGlyZWx5IHN1cnByaXNpbmcuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB0aGUgY29udGV4dCwgaXMgdG8gemVybyBpbiBvbiBhbnkgTmV0ZmlsdGVyIEFQSSBlbnRyeXBvaW50cyB0aGF0IGV4aGliaXQgZHluYW1pYyBiZWhhdmlvci4gV2UgbmVlZCB0byBpZGVudGlmeSBmdW5jdGlvbnMgd2hpY2ggbWlnaHQgYWxsb3cgZm9yIHRoZSBydW50aW1lIGNyZWF0aW9uLCBtb2RpZmljYXRpb24sIG9yIGRlbGV0aW9uIG9mIG9iamVjdHMgd2l0aGluIHRoZSBOZXRmaWx0ZXIgc3Vic3lzdGVtLiBNeSBpbml0aWFsIHNjYW4gcG9pbnRzIHRvd2FyZHMgZnVuY3Rpb25zIGxpa2UgYG5mX3RhYmxlc19uZXdjaGFpbmAsIHdoaWNoIHN1Z2dlc3RzIHRoZSBhYmlsaXR5IHRvIGluc3RhbnRpYXRlIG5ldyBjaGFpbnMsIGFuZCwgY29udmVyc2VseSwgYG5mX3RhYmxlc19kZWxjaGFpbmAsIHdoaWNoLCBsb2dpY2FsbHksIHdvdWxkIHJlbW92ZSBleGlzdGluZyBjaGFpbnMuIFNpbWlsYXJseSwgYG5mX3RhYmxlc19uZXdmbG93dGFibGVgIGFuZCBgbmZfdGFibGVzX2RlbGZsb3d0YWJsZWAgYXJlIG9uIHRoZSBsaXN0LCBpbmRpY2F0aW5nIG9wZXJhdGlvbnMgYXJvdW5kIGZsb3cgdGFibGVzLCB3aGljaCBJJ2QgZXhwZWN0IHdvdWxkIGJlIGR5bmFtaWMgZWxlbWVudHMgaW4gYSBOZXRmaWx0ZXIgc2V0dXAuIFRoaXMgd2lsbCBsaWtlbHkgZm9ybSB0aGUgYmFzaXMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgyMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDExOjE3OjQwLjE4OTc3NTkyMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4Njg1ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX3RhYmxlc19uZXdmbG93dGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTEzNz1zdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTIyOC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MjI5OnN0YXRpYyBpbnQgbmZfdGFibGVzX25ld2Zsb3d0YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkyMzAtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTk1OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZfdGFibGVzX2NiW05GVF9NU0dfTUFYXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMTI2LVxcdFtORlRfTVNHX05FV0ZMT1dUQUJMRV0gPSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAxMjc6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mX3RhYmxlc19uZXdmbG93dGFibGUsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAxMjgtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfQkFUQ0gsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDExOjE3OjQwLjM2ODQ2NjQ3M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc0Njk4MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgTkZfVEFCTEVTIC0gSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciBgbmZfdGFibGVzYCDigJMgZ290IGl0LCB0aGVzZSBhcmUgdGhlIGhvb2tzOiBgbmZfdGFibGVzX25ld2NoYWluYCwgYG5mX3RhYmxlc19kZWxjaGFpbmAsIGBuZl90YWJsZXNfbmV3Zmxvd3RhYmxlYCwgYW5kIGBuZl90YWJsZXNfZGVsZmxvd3RhYmxlYC4gIEJyaWxsaWFudCEgIE5ldGxpbmsgY2FsbGJhY2tzIGFyZSAqaWRlYWwqIGZvciBmdXp6aW5nLiAgVGhlIHN0cnVjdHVyZSBpcyBwZXJmZWN0IGZvciBmZWVkaW5nIGluIG1hbGZvcm1lZCBkYXRhIGFuZCBzZWVpbmcgd2hhdCBicmVha3MuIEkgY2FuIHJlYWxseSBnZXQgY3JlYXRpdmUgd2l0aCBjcmFmdGluZyB0aG9zZSBuZXRsaW5rIG1lc3NhZ2VzLlxuXG5GaXJzdCB0aG91Z2gsIGdvdHRhIGNoZWNrIHRob3NlIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgQ09ORklHX05GX1RBQkxFU2AgaXMgZW5hYmxlZCBzbyBJIGtub3cgd2hhdCBJJ20gcGxheWluZyB3aXRoLCBhbmQgdGhhdCBhbnkgcmVxdWlyZWQgc3VwcG9ydGluZyBtb2R1bGVzIGFyZSBhbHNvIGluIHBsYWNlIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseSBmb3IgdGhlIHRlc3RpbmcuIEdvdCB0byBidWlsZCBhIHNvbGlkIGJhc2UgdG8gd29yayBmcm9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mzg2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTE6MTc6NDQuMjQzMTY2ODA2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM0MzA5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXFx0ZGVwZW5kcyBvbiBJUFY2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxNzo0NC4yOTE1MTMxMTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUxMDkwNjIxMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJJ2QgdGhpbmsgaXQgdGhyb3VnaDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyB0aGUgYmFzZSBjb25maWcgaXMgZGVmaW5pdGVseSBgTkZfVEFCTEVTYC4gVGhpcyBwYXRjaCBpcyBtZXNzaW5nIHdpdGggbmV0ZGV2IGhvb2tzIHRob3VnaCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgdGhhdCB0aGVyZSAqbWlnaHQqIGJlIGEgc2Vjb25kYXJ5IGNvbmZpZyBvcHRpb24gaW52b2x2ZWQgaGVyZSwgbGlrZWx5IGBORl9UQUJMRVNfTkVUREVWYC4gSXQncyBhIGNvbW1vbiBwYXR0ZXJuIHRvIHNwbGl0IG91dCBzcGVjaWZpYyBmdW5jdGlvbmFsaXRpZXMgd2hlbiBkZWFsaW5nIHdpdGggbmV0d29yayBkZXZpY2UgaW50ZXJhY3Rpb24uXG5cbkxldCdzIGRvdWJsZS1jaGVjayBteSBodW5jaC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGUgZnVuY3Rpb25zIGBuZnRfbmV0ZGV2X2hvb2tfYWxsb2NgIGFuZCBgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rc2AgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYE5GX1RBQkxFU19ORVRERVZgLiBJZiB0aGV5IGFyZSwgaXQgc3RyZW5ndGhlbnMgdGhlIGFyZ3VtZW50IGZvciByZXF1aXJpbmcgdGhhdCBvcHRpb24gYWxvbmdzaWRlIGBORl9UQUJMRVNgLiBJZiBub3QsIHRoZW4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgYW5kIHVuZGVyc3RhbmQgd2h5IG5ldGRldiBtb2RpZmljYXRpb25zIHdvdWxkIG5lY2Vzc2l0YXRlIGFueSBjb25maWd1cmF0aW9uIGNoYW5nZSBhdCBhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4ODUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxODowOS40MDA1NzczMzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDk1ODA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfbmV0ZGV2X2hvb2tfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjM2Mz12b2lkIG5mX3RhYmxlc19jaGFpbl9kZXN0cm95KHN0cnVjdCBuZnRfY2hhaW4gKmNoYWluKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjM5Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyMzk3OnN0YXRpYyBzdHJ1Y3QgbmZ0X2hvb2sgKm5mdF9uZXRkZXZfaG9va19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjM5OC1cXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjQ2Mz1zdGF0aWMgaW50IG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3Moc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4NS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNDg2OlxcdFxcdGhvb2sgPSBuZnRfbmV0ZGV2X2hvb2tfYWxsb2MobmV0LCB0bXAsIHByZWZpeCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjQ4Ny1cXHRcXHRpZiAoSVNfRVJSKGhvb2spKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNTI0PXN0YXRpYyBpbnQgbmZ0X2NoYWluX3BhcnNlX25ldGRldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTMxLVxcdGlmICh0YltORlRBX0hPT0tfREVWXSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI1MzI6XFx0XFx0aG9vayA9IG5mdF9uZXRkZXZfaG9va19hbGxvYyhuZXQsIHRiW05GVEFfSE9PS19ERVZdLCBmYWxzZSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjUzMy1cXHRcXHRpZiAoSVNfRVJSKGhvb2spKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDExOjE4OjA5LjY1NTU0MDM5OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjI0NDA0NzQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEksIGFuIGV4cGVydCwgYW0gaGF2aW5nIGl0OlxuXG4qKkNvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBuZnRfbmV0ZGV2X2hvb2tfYWxsb2NgKipcblxuUmlnaHQsIGxldCBtZSBqdXN0IHJ1biB0aGF0IHF1ZXN0aW9uIHRocm91Z2ggbXkgaGVhZC4gSXMgYG5mdF9uZXRkZXZfaG9va19hbGxvY2AgY29tcGlsZWQgKmNvbmRpdGlvbmFsbHkqPyBUaGF0J3MgdGhlIGNydXggb2YgaXQuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUga2VybmVsJ3MgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHdheSB0aG9zZSBOZXRmaWx0ZXIgaG9va3Mgd29yazsgYXJlIHRoZXJlIHNwZWNpZmljIGZlYXR1cmVzLCBvciBzcGVjaWZpYyBrZXJuZWwgdmVyc2lvbnMsIG9yIGNlcnRhaW4gbW9kdWxlIGNvbmZpZ3VyYXRpb25zIHRoYXQgd291bGQgdHJpZ2dlciBpdHMgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3M/IEl0J3Mgb2Z0ZW4gcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBhbmQgdGhlIGZlYXR1cmVzIGl0IGNhbiBzdXBwb3J0LiBUaGlzIGNvdWxkIGJlIHJlbGF0ZWQgdG8gdGhpbmdzIGxpa2UgaW5ncmVzcy9lZ3Jlc3MgaG9va3MsIG9yIHBlcmhhcHMgdGhlIHN1cHBvcnQgZm9yIGNlcnRhaW4gaGFyZHdhcmUgb2ZmbG9hZHMuIEkgbmVlZCB0byBxdWlja2x5IHZpc3VhbGl6ZSB0aGUgcmVsZXZhbnQgYEtjb25maWdgIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTcsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxODoyMS44OTk1ODk5MTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODg5MjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19ORl9UQUJMRVNfTkVUREVWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTE1NTI9c3RhdGljIGJvb2wgbmZ0X3N1cHBvcnRlZF9mYW1pbHkodTggZmFtaWx5KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTU2My0jZW5kaWZcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxNTY0OiNpZmRlZiBDT05GSUdfTkZfVEFCTEVTX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE1NjUtXFx0XFx0fHwgZmFtaWx5ID09IE5GUFJPVE9fTkVUREVWXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDExOjE4OjIxLjk0NTQ4MjE0N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjA4MDIwNTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24gZm9yIE5ldGRldiBIb29rcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG5mdF9uZXRkZXZfaG9va19hbGxvY2AgZnVuY3Rpb24sIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCwgZXZlbiB0aG91Z2ggaXQncyB1c2VkIGZvciBuZXRkZXYgaG9va3MuIFRoYXQgZmVlbHMuLi4gaW5lZmZpY2llbnQuIFRoZSBxdWVzdGlvbiBpcywgaXMgYENPTkZJR19ORl9UQUJMRVNfTkVUREVWYCBhY3R1YWxseSBuZWNlc3Nhcnk/IEknbSBwcmV0dHkgc3VyZSBpdCdzIGEgZ29vZCBpZGVhIHRvIGhhdmUgaXQgZW5hYmxlZC4gQW5kLCBvZiBjb3Vyc2UsIGBORl9UQUJMRVNgIGl0c2VsZiBpcyBhbHNvIGVzc2VudGlhbC5cblxuTm93LCBsZXQncyB0cmFjZSB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgbmZ0X2hvb2tfbGlzdF9maW5kYCBpcyBiZWluZyBjYWxsZWQuIEFscmlnaHQsIGl0J3MgdXNlZCB3aXRoaW4gYG5mX3RhYmxlc19wYXJzZV9uZXRkZXZfaG9va3NgLCBgbmZfdGFibGVzX3VwZGNoYWluYCwgYG5mdF9kZWxjaGFpbl9ob29rYCwgYG5mdF9yZWdpc3Rlcl9mbG93dGFibGVfbmV0X2hvb2tzYCwgYG5mdF9mbG93dGFibGVfdXBkYXRlYCwgYW5kIGBuZnRfZGVsZmxvd3RhYmxlX2hvb2tgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGFsbCBwYXJ0IG9mIGFkZGluZywgdXBkYXRpbmcsIGFuZCBkZWxldGluZyBjaGFpbnMgYW5kIGZsb3d0YWJsZXMuXG5cblRoZSBlbnRyeSBwb2ludHMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4uLiB0aGV5J3JlIGFsbCBuZXRsaW5rIGNhbGxiYWNrczogYG5mX3RhYmxlc19uZXdjaGFpbmAsIGBuZl90YWJsZXNfZGVsY2hhaW5gLCBgbmZfdGFibGVzX25ld2Zsb3d0YWJsZWAsIGFuZCBgbmZfdGFibGVzX2RlbGZsb3d0YWJsZWAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gT2theSwgYE5GX1RBQkxFU2AgZGVwZW5kcyBvbiBgTkVURklMVEVSX05FVExJTktgLCBhbmQgYE5GX1RBQkxFU19ORVRERVZgIGRlcGVuZHMgb24gYE5GX1RBQkxFU2AuIFdlIGNhbiBzZWUgdGhlIGRlcGVuZGVuY3kgdHJlZS5cblxuU28sIGluIHRoZSBlbmQsIGl0IG1lYW5zIGBFbmFibGVDb25maWdzYCBzaG91bGQgYmUgYFtcIk5GX1RBQkxFU1wiLCBcIk5GX1RBQkxFU19ORVRERVZcIl1gLlxuXG5GaW5hbGx5LCBJJ20gZ29pbmcgdG8gcmV2aWV3IG15IHJhdGlvbmFsZTogVGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBidWcgaW4gYG5mdF9ob29rX2xpc3RfZmluZGAsIHNwZWNpZmljYWxseSB3aGVyZSBpdCBjb3VsZCBpbmNvcnJlY3RseSBtYXRjaCBob29rcyBpZiBvbmUgaXMgYSBwcmVmaXggb2YgYW5vdGhlci4gSXQncyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byB0aGUgbmV0ZmlsdGVyIG5mX3RhYmxlcyBBUEksIGFmZmVjdGluZyB0aGUgaGFuZGxpbmcgb2YgbmV0ZGV2IGhvb2tzLCBhbmQgaG93IGNoYWlucyBhbmQgZmxvd3RhYmxlcyBhcmUgbWFuYWdlZC4gVGhlIGtleSBpbnRlcmFjdGlvbiBpcyB0aGUgbmV0bGluayBtZXNzYWdlcyBjcmVhdGluZywgdXBkYXRpbmcgb3IgZGVsZXRpbmcgdGhlc2Ugb2JqZWN0cy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNsZWFyOiB0aGUgZm9jdXMgc3ltYm9scyBhcmUgYG5mX3RhYmxlc19uZXdjaGFpbmAsIGBuZl90YWJsZXNfZGVsY2hhaW5gLCBgbmZfdGFibGVzX25ld2Zsb3d0YWJsZWAsIGFuZCBgbmZfdGFibGVzX2RlbGZsb3d0YWJsZWAuXG5cbk5vdywgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTY3LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxODozNC4wMjU2OTAzNjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDcxMjI2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCIsXG4gICAgXCJORl9UQUJMRVNfTkVUREVWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfdGFibGVzX25ld2NoYWluXCIsXG4gICAgXCJuZl90YWJsZXNfZGVsY2hhaW5cIixcbiAgICBcIm5mX3RhYmxlc19uZXdmbG93dGFibGVcIixcbiAgICBcIm5mX3RhYmxlc19kZWxmbG93dGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbmZ0X2hvb2tfbGlzdF9maW5kYCB3aGVyZSBpdCBjb3VsZCBpbmNvcnJlY3RseSBtYXRjaCBuZXRkZXYgaG9va3Mgd2l0aCBkaWZmZXJlbnQgbmFtZSBsZW5ndGhzIGlmIG9uZSBpcyBhIHByZWZpeCBvZiBhbm90aGVyLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIG5mX3RhYmxlcyBBUEksIGFmZmVjdGluZyBuZXRkZXYgaG9va3MgZm9yIGNoYWlucyBhbmQgZmxvd3RhYmxlcy4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIG1lc3NhZ2VzIGZvciBjcmVhdGluZywgdXBkYXRpbmcsIG9yIGRlbGV0aW5nIGNoYWlucyBhbmQgZmxvd3RhYmxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GX1RBQkxFU19ORVRERVZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl90YWJsZXNfbmV3Y2hhaW5cIixcbiAgICBcIm5mX3RhYmxlc19kZWxjaGFpblwiLFxuICAgIFwibmZfdGFibGVzX25ld2Zsb3d0YWJsZVwiLFxuICAgIFwibmZfdGFibGVzX2RlbGZsb3d0YWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBuZnRfaG9va19saXN0X2ZpbmRgIHdoZXJlIGl0IGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIG5ldGRldiBob29rcyB3aXRoIGRpZmZlcmVudCBuYW1lIGxlbmd0aHMgaWYgb25lIGlzIGEgcHJlZml4IG9mIGFub3RoZXIuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgbmZfdGFibGVzIEFQSSwgYWZmZWN0aW5nIG5ldGRldiBob29rcyBmb3IgY2hhaW5zIGFuZCBmbG93dGFibGVzLiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgbWVzc2FnZXMgZm9yIGNyZWF0aW5nLCB1cGRhdGluZywgb3IgZGVsZXRpbmcgY2hhaW5zIGFuZCBmbG93dGFibGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxODozNC4xMDA0MDkzMTNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDQzNzA3NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTE6MTg6MzQuMTAwODc4MjYzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0MDQzMjM1OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmZ0X2hvb2tfbGlzdF9maW5kYCB0byBvcHRpb25hbGx5IGVuZm9yY2Ugc3RyaWN0IGxlbmd0aCBtYXRjaGluZyAoYGhvb2stXFx1MDAzZWlmbmFtZWxlbiAhPSB0aGlzLVxcdTAwM2VpZm5hbWVsZW5gKSB3aGVuIGNvbXBhcmluZyBpbnRlcmZhY2UgbmFtZXMuIFRoaXMgZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgYHN0cm5jbXBgIHdpdGggYG1pbihob29rLVxcdTAwM2VpZm5hbWVsZW4sIHRoaXMtXFx1MDAzZWlmbmFtZWxlbilgIGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIGEgcHJlZml4IG9mIGFuIGludGVyZmFjZSBuYW1lIChlLmcuLCBtYXRjaGluZyBcXFwiZXRoMFxcXCIgd2l0aCBcXFwiZXRoMDFcXFwiKSBkdXJpbmcgaG9vayBkZWxldGlvbiAoYG5mdF9kZWxjaGFpbl9ob29rYCBhbmQgYG5mdF9kZWxmbG93dGFibGVfaG9va2ApLiBUaGlzIGlzc3VlIGlzIGEgbG9naWMgZXJyb3IgdGhhdCBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBob29rIGRlbGV0aW9uLCBwb3RlbnRpYWxseSBjYXVzaW5nIGZ1bmN0aW9uYWwgaXNzdWVzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHdoaWNoIEtBU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoKS4gSXQgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciB1c2luZyB1bmluaXRpYWxpemVkIHZhbHVlcyBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MGNkMThmYzA2ZGNlOTcyZTY2MGY2MDQyNzk3NjY3MDZmZjBiMTg4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMTE6MTY6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5pbmRleCBjMTEyZWNjNGZjYTMyLi43N2M5NmIxZDQyMTc4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5AQCAtMjQ0MCwxMSArMjQ0MCwxNCBAQCBzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfbmV0ZGV2X2hvb2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LFxuIH1cbiBcbiBzdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxuLVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X2hvb2sgKnRoaXMpXG4rXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqdGhpcyxcbitcdFx0XHRcdFx0ICAgYm9vbCBzdHJpY3QpXG4ge1xuIFx0c3RydWN0IG5mdF9ob29rICpob29rO1xuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCBob29rX2xpc3QsIGxpc3QpIHtcbitcdFx0aWYgKHN0cmljdCBcdTAwMjZcdTAwMjYgaG9vay1cdTAwM2VpZm5hbWVsZW4gIT0gdGhpcy1cdTAwM2VpZm5hbWVsZW4pXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGlmICghc3RybmNtcChob29rLVx1MDAzZWlmbmFtZSwgdGhpcy1cdTAwM2VpZm5hbWUsXG4gXHRcdFx0ICAgICBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKSkpIHtcbiBcdFx0XHRpZiAoaG9vay1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0hPT0tfUkVNT1ZFKVxuQEAgLTI0ODYsNyArMjQ4OSw3IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3BhcnNlX25ldGRldl9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0ZXJyID0gUFRSX0VSUihob29rKTtcbiBcdFx0XHRnb3RvIGVycl9ob29rO1xuIFx0XHR9XG4tXHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoaG9va19saXN0LCBob29rKSkge1xuK1x0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKGhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XG4gXHRcdFx0TkxfU0VUX0JBRF9BVFRSKGV4dGFjaywgdG1wKTtcbiBcdFx0XHRuZnRfbmV0ZGV2X2hvb2tfZnJlZShob29rKTtcbiBcdFx0XHRlcnIgPSAtRUVYSVNUO1xuQEAgLTI5NDMsNyArMjk0Niw3IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcbiBcdFx0XHRcdFx0b3BzLVx1MDAzZWhvb2tcdD0gYmFzZWNoYWluLVx1MDAzZW9wcy5ob29rO1xuIFx0XHRcdFx0fVxuIFxuLVx0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZiYXNlY2hhaW4tXHUwMDNlaG9va19saXN0LCBoKSkge1xuK1x0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZiYXNlY2hhaW4tXHUwMDNlaG9va19saXN0LCBoLCBmYWxzZSkpIHtcbiBcdFx0XHRcdFx0bGlzdF9kZWwoXHUwMDI2aC1cdTAwM2VsaXN0KTtcbiBcdFx0XHRcdFx0bmZ0X25ldGRldl9ob29rX2ZyZWUoaCk7XG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTI5NTYsNyArMjk1OSw4IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX3VwZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGdlbm1hc2ssIHU4IHBvbGljeSxcbiBcdFx0XHRcdFx0ICAgICFuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcbiBcdFx0XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfY2hhaW5faG9va3ModHJhbnMpLCBoKSkge1xuK1x0XHRcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19jaGFpbl9ob29rcyh0cmFucyksXG4rXHRcdFx0XHRcdFx0XHQgICAgICAgaCwgZmFsc2UpKSB7XG4gXHRcdFx0XHRcdFx0bmZ0X2NoYWluX3JlbGVhc2VfaG9vayhcdTAwMjZob29rKTtcbiBcdFx0XHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdFx0XHRcdFx0fVxuQEAgLTMyNTcsNyArMzI2MSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2RlbGNoYWluX2hvb2soc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkodGhpcywgXHUwMDI2Y2hhaW5faG9vay5saXN0LCBsaXN0KSB7XG4tXHRcdGhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2YmFzZWNoYWluLVx1MDAzZWhvb2tfbGlzdCwgdGhpcyk7XG4rXHRcdGhvb2sgPSBuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2YmFzZWNoYWluLVx1MDAzZWhvb2tfbGlzdCwgdGhpcywgdHJ1ZSk7XG4gXHRcdGlmICghaG9vaykge1xuIFx0XHRcdGVyciA9IC1FTk9FTlQ7XG4gXHRcdFx0Z290byBlcnJfY2hhaW5fZGVsX2hvb2s7XG5AQCAtOTA3Myw3ICs5MDc3LDcgQEAgc3RhdGljIGludCBuZnRfcmVnaXN0ZXJfZmxvd3RhYmxlX25ldF9ob29rcyhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0aWYgKCFuZnRfaXNfYWN0aXZlX25leHQobmV0LCBmdCkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZ0LVx1MDAzZWhvb2tfbGlzdCwgaG9vaykpIHtcbitcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZ0LVx1MDAzZWhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XG4gXHRcdFx0XHRlcnIgPSAtRUVYSVNUO1xuIFx0XHRcdFx0Z290byBlcnJfdW5yZWdpc3Rlcl9uZXRfaG9va3M7XG4gXHRcdFx0fVxuQEAgLTkxNTAsNyArOTE1NCw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaG9vaywgbmV4dCwgXHUwMDI2Zmxvd3RhYmxlX2hvb2subGlzdCwgbGlzdCkge1xuLVx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2Vob29rX2xpc3QsIGhvb2spKSB7XG4rXHRcdGlmIChuZnRfaG9va19saXN0X2ZpbmQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWhvb2tfbGlzdCwgaG9vaywgZmFsc2UpKSB7XG4gXHRcdFx0bGlzdF9kZWwoXHUwMDI2aG9vay1cdTAwM2VsaXN0KTtcbiBcdFx0XHRuZnRfbmV0ZGV2X2hvb2tfZnJlZShob29rKTtcbiBcdFx0XHRjb250aW51ZTtcbkBAIC05MTYzLDcgKzkxNjcsNyBAQCBzdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdCAgICAhbmZ0X3RyYW5zX2Zsb3d0YWJsZV91cGRhdGUodHJhbnMpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0aWYgKG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZuZnRfdHJhbnNfZmxvd3RhYmxlX2hvb2tzKHRyYW5zKSwgaG9vaykpIHtcbitcdFx0XHRpZiAobmZ0X2hvb2tfbGlzdF9maW5kKFx1MDAyNm5mdF90cmFuc19mbG93dGFibGVfaG9va3ModHJhbnMpLCBob29rLCBmYWxzZSkpIHtcbiBcdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4gXHRcdFx0XHRnb3RvIGVycl9mbG93dGFibGVfdXBkYXRlX2hvb2s7XG4gXHRcdFx0fVxuQEAgLTkzODMsNyArOTM4Nyw3IEBAIHN0YXRpYyBpbnQgbmZ0X2RlbGZsb3d0YWJsZV9ob29rKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRoaXMsIFx1MDAyNmZsb3d0YWJsZV9ob29rLmxpc3QsIGxpc3QpIHtcbi1cdFx0aG9vayA9IG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZmbG93dGFibGUtXHUwMDNlaG9va19saXN0LCB0aGlzKTtcbitcdFx0aG9vayA9IG5mdF9ob29rX2xpc3RfZmluZChcdTAwMjZmbG93dGFibGUtXHUwMDNlaG9va19saXN0LCB0aGlzLCB0cnVlKTtcbiBcdFx0aWYgKCFob29rKSB7XG4gXHRcdFx0ZXJyID0gLUVOT0VOVDtcbiBcdFx0XHRnb3RvIGVycl9mbG93dGFibGVfZGVsX2hvb2s7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxMToxODozNC4xMDA4NzkxMDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQwNDMyMTMxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBuZl90YWJsZXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIEl0J3MgYSBtb2RpZmljYXRpb24gdG8gYG5mdF9ob29rX2xpc3RfZmluZGAsIGFkZGluZyBhIGBib29sIHN0cmljdGAgcGFyYW1ldGVyLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBlbnN1cmluZyBleGFjdCBpbnRlcmZhY2UgbmFtZSBtYXRjaGluZy4gSWYgYHN0cmljdGAgaXMgdHJ1ZSwgaXQgZm9yY2VzIGFuIGV4YWN0IGxlbmd0aCBjb21wYXJpc29uOiBgaG9vay1cdTAwM2VpZm5hbWVsZW4gIT0gdGhpcy1cdTAwM2VpZm5hbWVsZW5gIGJlZm9yZSBldmVuIGdldHRpbmcgdG8gdGhlIGBzdHJuY21wYC5cblxuVGhlIHByb2JsZW0gdGhpcyBpcyBmaXhpbmcgaW1tZWRpYXRlbHkganVtcHMgb3V0IOKAkyB0aGF0IGBzdHJuY21wYCB3YXMgdnVsbmVyYWJsZSB0byBwcmVmaXggbWF0Y2hlcy4gV2l0aCBgbWluKGhvb2stXHUwMDNlaWZuYW1lbGVuLCB0aGlzLVx1MDAzZWlmbmFtZWxlbilgLCB5b3UgY291bGQgZW5kIHVwIHdpdGggYSBtYXRjaCB3aGVyZSwgc2F5LCBcImV0aDBcIiBpbmNvcnJlY3RseSBtYXRjaGVzIFwiZXRoMDEuXCIgVGhpcyBpcyBhIGNsYXNzaWMgbG9naWMgYnVnLCBhbmQgaW4gdGhlIGNvbnRleHQgb2YgZGVsZXRpbmcgaG9va3MgKHNwZWNpZmljYWxseSBpbiBgbmZ0X2RlbGNoYWluX2hvb2tgIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYCksIHRoYXQncyAqYmFkKi4gV2UgY291bGQgYmUgZGVsZXRpbmcgdGhlIHdyb25nIGhvb2ssIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSB1c2UtYWZ0ZXItZnJlZSBkb3duIHRoZSBsaW5lIG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgaW5jb3JyZWN0IGJlaGF2aW9yIGJlY2F1c2UgdGhlIGludGVuZGVkIGhvb2sgaXMgc3RpbGwgdGhlcmUgYW5kIHRoZSB3cm9uZyBvbmUgaGFzIGJlZW4gZGVsZXRlZC5cblxuTXkgZmlyc3QgdGhvdWdodCwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJ1dCB0aGUgbGVuZ3RocyBgaWZuYW1lbGVuYCBhcmUganVzdCBzdHJpbmcgbGVuZ3RocywgYW5kIGBzdHJuY21wYCBoYXMgdGhlIGBtaW5gIGxpbWl0YXRpb24sIHRoZXJlJ3Mgbm8gd2F5IGl0J3MgZ29pbmcgdG8gbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBJdCdzIHB1cmVseSBhIGxvZ2ljIGVycm9yLCBhIHByZWZpeCBtYXRjaGluZyBpc3N1ZS4gS0FTQU4gd291bGQgYmUgdGhlIHRvb2wgdG8gY2F0Y2ggYW55IHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcyBpZiB3ZSBkZWxldGUgdGhlIHdyb25nIGhvb2sgYW5kIHRyeSB0byBhY2Nlc3MgaXQgbGF0ZXIsIGJ1dCBLTVNBTiBpcyBpcnJlbGV2YW50IGhlcmUuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgY29kZSBzbmlwcGV0OlxuXG5gYGBjXG5zdGF0aWMgc3RydWN0IG5mdF9ob29rICpuZnRfaG9va19saXN0X2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqaG9va19saXN0LFxuXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfaG9vayAqdGhpcyxcblx0XHRcdFx0XHQgICBib29sIHN0cmljdClcbntcblx0c3RydWN0IG5mdF9ob29rICpob29rO1xuXG5cdGxpc3RfZm9yX2VhY2hfZW50cnkoaG9vaywgaG9va19saXN0LCBsaXN0KSB7XG5cdFx0aWYgKHN0cmljdCBcdTAwMjZcdTAwMjYgaG9vay1cdTAwM2VpZm5hbWVsZW4gIT0gdGhpcy1cdTAwM2VpZm5hbWVsZW4pXG5cdFx0XHRjb250aW51ZTtcblx0XHRpZiAoIXN0cm5jbXAoaG9vay1cdTAwM2VpZm5hbWUsIHRoaXMtXHUwMDNlaWZuYW1lLFxuXHRcdFx0ICAgICBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKSkpIHtcblx0XHRcdGlmIChob29rLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfSE9PS19SRU1PVkUpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0cmV0dXJuIGhvb2s7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIE5VTEw7XG59XG5gYGBcblxuT2theSwgY29uZmlybWVkLiBJZiBgc3RyaWN0YCBpcyBmYWxzZSwgaXQgc3RpbGwgdXNlcyB0aGF0IGBtaW4oaG9vay1cdTAwM2VpZm5hbWVsZW4sIHRoaXMtXHUwMDNlaWZuYW1lbGVuKWAsIHdoaWNoIG1lYW5zIHByZWZpeCBtYXRjaGluZyB3aWxsIHN0aWxsIG9jY3VyIGlmIGBzdHJpY3RgIGlzIGRpc2FibGVkLiBUaGF0J3MgcHJvYmFibHkgaW50ZW5kZWQgZm9yIHdpbGRjYXJkIHVzZSBjYXNlcywgb3IgbWF5YmUgaXQncyBsZWdhY3kgYmVoYXZpb3IuIFdoYXRldmVyIHRoZSByZWFzb24sIHRoaXMgcGF0Y2ggKmRvZXMgbm90KiBpbnRyb2R1Y2Ugb3IgZml4IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEl0J3MgYSBjbGVhciBsb2dpYyBidWcgZml4IOKAkyBhZGRyZXNzaW5nIHRoZSBleGFjdCB2cy4gcHJlZml4IG1hdGNoaW5nIG9mIGludGVyZmFjZSBuYW1lcy5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQncyBLQVNBTiBhbGwgdGhlIHdheSBmb3IgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgZHVlIHRvIHRoZSBpbmNvcnJlY3QgZGVsZXRpb24uXG5cblRvIHN1bW1hcml6ZSBmb3IgdGhlIHJldmlldzogVGhlIHBhdGNoIG1vZGlmaWVzIGBuZnRfaG9va19saXN0X2ZpbmRgIHRvIGVuZm9yY2Ugc3RyaWN0IGxlbmd0aCBtYXRjaGluZy4gVGhpcyBmaXhlcyBhIGxvZ2ljIGJ1ZyB3aGVyZSBwcmVmaXggbWF0Y2hlcyBmb3IgaW50ZXJmYWNlIG5hbWVzIGNvdWxkIG9jY3VyIGR1cmluZyBob29rIGRlbGV0aW9uIChgbmZ0X2RlbGNoYWluX2hvb2tgIGFuZCBgbmZ0X2RlbGZsb3d0YWJsZV9ob29rYCkgZHVlIHRvIHVzaW5nIGBtaW5gIGxlbmd0aCBpbiBgc3RybmNtcGAuIFRoaXMgY291bGQgbGVhZCB0byBmdW5jdGlvbmFsIG9yIHVzZS1hZnRlci1mcmVlIGVycm9ycy4gSXQncyBub3QgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjgsIk91dHB1dFRva2VucyI6MjA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTE6MTg6NDguMTQ0MDk0MzQ1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmZ0X2hvb2tfbGlzdF9maW5kYCB0byBvcHRpb25hbGx5IGVuZm9yY2Ugc3RyaWN0IGxlbmd0aCBtYXRjaGluZyAoYGhvb2stXFx1MDAzZWlmbmFtZWxlbiAhPSB0aGlzLVxcdTAwM2VpZm5hbWVsZW5gKSB3aGVuIGNvbXBhcmluZyBpbnRlcmZhY2UgbmFtZXMuIFRoaXMgZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgYHN0cm5jbXBgIHdpdGggYG1pbihob29rLVxcdTAwM2VpZm5hbWVsZW4sIHRoaXMtXFx1MDAzZWlmbmFtZWxlbilgIGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIGEgcHJlZml4IG9mIGFuIGludGVyZmFjZSBuYW1lIChlLmcuLCBtYXRjaGluZyBcXFwiZXRoMFxcXCIgd2l0aCBcXFwiZXRoMDFcXFwiKSBkdXJpbmcgaG9vayBkZWxldGlvbiAoYG5mdF9kZWxjaGFpbl9ob29rYCBhbmQgYG5mdF9kZWxmbG93dGFibGVfaG9va2ApLiBUaGlzIGlzc3VlIGlzIGEgbG9naWMgZXJyb3IgdGhhdCBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBob29rIGRlbGV0aW9uLCBwb3RlbnRpYWxseSBjYXVzaW5nIGZ1bmN0aW9uYWwgaXNzdWVzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHdoaWNoIEtBU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoKS4gSXQgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciB1c2luZyB1bmluaXRpYWxpemVkIHZhbHVlcyBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmZ0X2hvb2tfbGlzdF9maW5kYCB0byBvcHRpb25hbGx5IGVuZm9yY2Ugc3RyaWN0IGxlbmd0aCBtYXRjaGluZyAoYGhvb2stXFx1MDAzZWlmbmFtZWxlbiAhPSB0aGlzLVxcdTAwM2VpZm5hbWVsZW5gKSB3aGVuIGNvbXBhcmluZyBpbnRlcmZhY2UgbmFtZXMuIFRoaXMgZml4ZXMgYSBsb2dpYyBidWcgd2hlcmUgYHN0cm5jbXBgIHdpdGggYG1pbihob29rLVxcdTAwM2VpZm5hbWVsZW4sIHRoaXMtXFx1MDAzZWlmbmFtZWxlbilgIGNvdWxkIGluY29ycmVjdGx5IG1hdGNoIGEgcHJlZml4IG9mIGFuIGludGVyZmFjZSBuYW1lIChlLmcuLCBtYXRjaGluZyBcXFwiZXRoMFxcXCIgd2l0aCBcXFwiZXRoMDFcXFwiKSBkdXJpbmcgaG9vayBkZWxldGlvbiAoYG5mdF9kZWxjaGFpbl9ob29rYCBhbmQgYG5mdF9kZWxmbG93dGFibGVfaG9va2ApLiBUaGlzIGlzc3VlIGlzIGEgbG9naWMgZXJyb3IgdGhhdCBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBob29rIGRlbGV0aW9uLCBwb3RlbnRpYWxseSBjYXVzaW5nIGZ1bmN0aW9uYWwgaXNzdWVzIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHdoaWNoIEtBU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoKS4gSXQgZG9lcyBub3QgaW52b2x2ZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBvciB1c2luZyB1bmluaXRpYWxpemVkIHZhbHVlcyBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrnxn[1] Phase: Succeeded StartedAt: 2026-08-27 11:18:59 +0000 UTC FinishedAt: 2026-08-27 11:18:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-27 11:18:59 +0000 UTC FinishedAt: 2026-08-27 11:18:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2] Phase: Succeeded StartedAt: 2026-08-27 11:18:59 +0000 UTC FinishedAt: 2026-08-27 14:57:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-27 11:18:59 +0000 UTC FinishedAt: 2026-08-27 14:57:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-27 11:18:59 +0000 UTC FinishedAt: 2026-08-27 11:19:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-27 11:18:59 +0000 UTC FinishedAt: 2026-08-27 11:19:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowdrnxn/series-workflowdrnxn-convert-artifact-2294486495/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-27 11:19:10 +0000 UTC FinishedAt: 2026-08-27 11:35:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-27 11:19:10 +0000 UTC FinishedAt: 2026-08-27 11:35:04 +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:*4232163c-71cc-4a10-9d1c-2cecc718b9de,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-workflowdrnxn/series-workflowdrnxn-convert-artifact-2294486495/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": "df543a6e-6ab3-4585-8d5f-7aa2020f6d6b", "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-workflowdrnxn/series-workflowdrnxn-build-action-366344933/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-27 11:19:10 +0000 UTC FinishedAt: 2026-08-27 11:34:54 +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:*4232163c-71cc-4a10-9d1c-2cecc718b9de,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-workflowdrnxn/series-workflowdrnxn-convert-artifact-2294486495/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": "df543a6e-6ab3-4585-8d5f-7aa2020f6d6b", "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-workflowdrnxn/series-workflowdrnxn-build-action-366344933/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-27 11:35:04 +0000 UTC FinishedAt: 2026-08-27 11:35:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-27 11:35:04 +0000 UTC FinishedAt: 2026-08-27 11:35:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-27 11:35:04 +0000 UTC FinishedAt: 2026-08-27 11:35:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-27 11:35:04 +0000 UTC FinishedAt: 2026-08-27 11:35:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowdrnxn/series-workflowdrnxn-convert-artifact-3826189678/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-27 11:35:14 +0000 UTC FinishedAt: 2026-08-27 11:37:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-27 11:35:14 +0000 UTC FinishedAt: 2026-08-27 11:36:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*df543a6e-6ab3-4585-8d5f-7aa2020f6d6b,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-workflowdrnxn/series-workflowdrnxn-build-action-366344933/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-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-27 11:37:06 +0000 UTC FinishedAt: 2026-08-27 11:37:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-27 11:37:06 +0000 UTC FinishedAt: 2026-08-27 11:37:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-27 11:37:06 +0000 UTC FinishedAt: 2026-08-27 11:53:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-27 11:37:06 +0000 UTC FinishedAt: 2026-08-27 11:53:01 +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:*4232163c-71cc-4a10-9d1c-2cecc718b9de,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-workflowdrnxn/series-workflowdrnxn-convert-artifact-3826189678/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": "05013af8-663b-4194-b823-edb9d22d6e61", "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-workflowdrnxn/series-workflowdrnxn-build-action-3661158018/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-27 11:37:06 +0000 UTC FinishedAt: 2026-08-27 11:52:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4232163c-71cc-4a10-9d1c-2cecc718b9de,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-workflowdrnxn/series-workflowdrnxn-convert-artifact-3826189678/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": "05013af8-663b-4194-b823-edb9d22d6e61", "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-workflowdrnxn/series-workflowdrnxn-build-action-3661158018/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-27 11:53:01 +0000 UTC FinishedAt: 2026-08-27 11:53:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-27 11:53:01 +0000 UTC FinishedAt: 2026-08-27 11:53:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-27 11:53:01 +0000 UTC FinishedAt: 2026-08-27 11:55:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-27 11:53:01 +0000 UTC FinishedAt: 2026-08-27 11:54:56 +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:*05013af8-663b-4194-b823-edb9d22d6e61,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-workflowdrnxn/series-workflowdrnxn-build-action-3661158018/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-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-27 11:55:06 +0000 UTC FinishedAt: 2026-08-27 14:57:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-27 11:55:06 +0000 UTC FinishedAt: 2026-08-27 14:57:54 +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":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"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:*df543a6e-6ab3-4585-8d5f-7aa2020f6d6b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*05013af8-663b-4194-b823-edb9d22d6e61,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-workflowdrnxn/series-workflowdrnxn-build-action-366344933/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-workflowdrnxn/series-workflowdrnxn-build-action-3661158018/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-27 11:55:06 +0000 UTC FinishedAt: 2026-08-27 11:55:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-27 11:55:06 +0000 UTC FinishedAt: 2026-08-27 11:55:10 +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":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"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-workflowdrnxn/series-workflowdrnxn-convert-artifact-1317537555/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-27 11:55:06 +0000 UTC FinishedAt: 2026-08-27 11:55:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-27 11:55:06 +0000 UTC FinishedAt: 2026-08-27 11:55:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-27 11:55:06 +0000 UTC FinishedAt: 2026-08-27 11:55:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-27 11:55:16 +0000 UTC FinishedAt: 2026-08-27 14:57:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdrnxn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newchain","nf_tables_delchain","nf_tables_newflowtable","nf_tables_delflowtable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"08c76b08-a276-417a-9f61-4a22c96d93ec","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-27 11:55:16 +0000 UTC FinishedAt: 2026-08-27 14:57:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*df543a6e-6ab3-4585-8d5f-7aa2020f6d6b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*05013af8-663b-4194-b823-edb9d22d6e61,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-workflowdrnxn/series-workflowdrnxn-build-action-366344933/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-workflowdrnxn/series-workflowdrnxn-build-action-3661158018/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-workflowdrnxn/series-workflowdrnxn-convert-artifact-1317537555/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,}