Name: series-workflow8xk84 Phase: Succeeded StartedAt: 2026-07-27 11:01:42 +0000 UTC FinishedAt: 2026-07-27 16:00:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[0] Phase: Succeeded StartedAt: 2026-07-27 11:01:42 +0000 UTC FinishedAt: 2026-07-27 11:31:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 11:01:42 +0000 UTC FinishedAt: 2026-07-27 11:31:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "a3cab754-652d-46d1-8f22-12a9e416a59d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check", "bpf_refcount_acquire" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O2JwZl9yZWZjb3VudF9hY3F1aXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gcmVqZWN0IHVudHJ1c3RlZCByZWZjb3VudGVkIGtwdHJzIGFuZCBmaXhlcyB0aGUgYXNzaWdubWVudCBvZiBgbWV0YS1cdTAwM2Vhcmdfb3duaW5nX3JlZmAgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgaGFuZGxlcyBrZnVuYyBhcmd1bWVudHMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjcwNTk2MmRhYjY4MDY3NzhmZmI2MDU5MjdkMTExMjVhZDg2NTA4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDExOjI5OjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggN2FhNDczNDJkYzY1OWMuLjYzYjFkOTk3ZmU4MDQ0IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xMjQxNCwxMiAmIzQzOzEyNDE0LDE3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfXG4gXHRcdFx0bWV0YS1cdTAwM2VzdWJwcm9nbm8gPSByZWctXHUwMDNlc3VicHJvZ25vO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOlxuJiM0MztcdFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgXHUwMDI2IFBUUl9VTlRSVVNURUQpIHtcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgaXMgYW4gdW50cnVzdGVkIHJlZmNvdW50ZWQga3B0clxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRpZiAoIXR5cGVfaXNfcHRyX2FsbG9jX29iaihyZWctXHUwMDNldHlwZSkpIHtcbiBcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlxcblwmIzM0OyxcbiBcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpKVxuJiM0MztcdFx0XHRpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNiByZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykpXG4gXHRcdFx0XHRtZXRhLVx1MDAzZWFyZ19vd25pbmdfcmVmID0gdHJ1ZTtcbiBcbiBcdFx0XHRyZWMgPSByZWdfYnRmX3JlY29yZChyZWcpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuY1xuaW5kZXggNjE5MDZmNDgwMjVjYzcuLmZkMzUwOTMyODVjMGRiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcbkBAIC0yMyw2ICYjNDM7MjMsMTUgQEAgc3RydWN0IG1hcF92YWx1ZSB7XG4gXHRzdHJ1Y3Qgbm9kZV9kYXRhIF9fa3B0ciAqbm9kZTtcbiB9O1xuIFxuJiM0MztzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHtcbiYjNDM7XHRsb25nIGtleTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHtcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHtcbiBcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuIFx0X190eXBlKGtleSwgaW50KTtcbkBAIC0zMCw2ICYjNDM7MzksMTMgQEAgc3RydWN0IHtcbiBcdF9fdWludChtYXhfZW50cmllcywgMik7XG4gfSBzdGFzaGVkX25vZGVzIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4gXG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X190eXBlKGtleSwgaW50KTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiYjNDM7fSBzdGFzaGVkX3JlZmNvdW50X29ubHkgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4gc3RydWN0IG5vZGVfYWNxdWlyZSB7XG4gXHRsb25nIGtleTtcbiBcdGxvbmcgZGF0YTtcbkBAIC04MzIsNiAmIzQzOzg0OCw1MSBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0O3RjXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX293bmluZ19pbnB1dF9ub19udWxsX2NoZWNrKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptO1xuJiM0MztcbiYjNDM7XHRuID0gYnBmX29ial9uZXcodHlwZW9mKCpuKSk7XG4mIzQzO1x0aWYgKCFuKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcbiYjNDM7XHRicGZfb2JqX2Ryb3AobSk7XG4mIzQzO1x0YnBmX29ial9kcm9wKG4pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl9udWxsX2NoZWNrZWQodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XG4mIzQzO1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07XG4mIzQzO1x0aW50IGlkeCA9IDA7XG4mIzQzO1xuJiM0MztcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuJiM0MztcdGlmICghbWFwdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuJiM0MztcdGlmICghbikge1xuJiM0MztcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1x0fVxuJiM0MztcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcbiYjNDM7XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmICghbSlcbiYjNDM7XHRcdHJldHVybiAzO1xuJiM0MztcdGJwZl9vYmpfZHJvcChtKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGxvbmcgX19zdGFzaF9tYXBfZW1wdHlfeGNoZyhzdHJ1Y3Qgbm9kZV9kYXRhICpuLCBpbnQgaWR4KVxuIHtcbiBcdHN0cnVjdCBtYXBfdmFsdWUgKm1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9ub2RlcywgXHUwMDI2aWR4KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG5pbmRleCAwMjRlZjJhYWUyMDA4Mi4uODBiOTJkN2VjOWNhYmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbkBAIC0xOSw2ICYjNDM7MTksMTUgQEAgc3RydWN0IG5vZGVfcmVmY291bnRlZCB7XG4gXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuIH07XG4gXG4mIzQzO3N0cnVjdCBub2RlX3JlZmNvdW50X29ubHkge1xuJiM0MztcdGxvbmcga2V5O1xuJiM0MztcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkge1xuJiM0MztcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgX19rcHRyICpub2RlO1xuJiM0Mzt9O1xuJiM0MztcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XG4gZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07XG4gXG5AQCAtMjgsNiAmIzQzOzM3LDEzIEBAIHByaXZhdGUoQSkgc3RydWN0IGJwZl9yYl9yb290IGdyb290IF9fY29udGFpbnMobm9kZV9hY3F1aXJlLCBub2RlKTtcbiBwcml2YXRlKEIpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGxvY2s7XG4gcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX2xpc3RfaGVhZCBoZWFkIF9fY29udGFpbnMobm9kZV9yZWZjb3VudGVkLCBsaXN0KTtcbiBcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5KTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0Mzt9IHN0YXNoZWRfcmVmY291bnRfb25seSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiBzdGF0aWMgYm9vbCBsZXNzKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxuIHtcbiBcdHN0cnVjdCBub2RlX2FjcXVpcmUgKm5vZGVfYTtcbkBAIC04MCw2ICYjNDM7OTYsNjQgQEAgbG9uZyByZWZjb3VudF9hY3F1aXJlX21heWJlX251bGwodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXCYjMzQ7KVxuJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX3VuY2hlY2tlZF9kcm9wKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xuJiM0MztcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKnRtcCwgKm4sICptO1xuJiM0MztcdGludCBpZHggPSAwO1xuJiM0MztcbiYjNDM7XHR0bXAgPSBicGZfb2JqX25ldyh0eXBlb2YoKnRtcCkpO1xuJiM0MztcdGlmICghdG1wKVxuJiM0MztcdFx0cmV0dXJuIDM7XG4mIzQzO1x0YnBmX29ial9kcm9wKHRtcCk7XG4mIzQzO1xuJiM0MztcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuJiM0MztcdGlmICghbWFwdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuJiM0MztcdGlmICghbikge1xuJiM0MztcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1x0fVxuJiM0MztcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcbiYjNDM7XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGJwZl9vYmpfZHJvcChtKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDs/dGNcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtpcyBhbiB1bnRydXN0ZWQgcmVmY291bnRlZCBrcHRyXCYjMzQ7KVxuJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcbiYjNDM7XHRpbnQgaWR4ID0gMDtcbiYjNDM7XG4mIzQzO1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFx1MDAyNmlkeCk7XG4mIzQzO1x0aWYgKCFtYXB2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRuID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4mIzQzO1x0aWYgKCFuKSB7XG4mIzQzO1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XG4mIzQzO1x0aWYgKG0pXG4mIzQzO1x0XHRicGZfb2JqX2Ryb3AobSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDs/dGNcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O1VucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTMgYWxsb2NfaW5zbj17e1swLTldJiM0Mzt9fVwmIzM0OylcbiBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMToyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7YnBmX3JlZmNvdW50X2FjcXVpcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byByZWplY3QgdW50cnVzdGVkIHJlZmNvdW50ZWQga3B0cnMgYW5kIGZpeGVzIHRoZSBhc3NpZ25tZW50IG9mIGBtZXRhLVx1MDAzZWFyZ19vd25pbmdfcmVmYCBmb3IgYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYCBhcmd1bWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBoYW5kbGVzIGtmdW5jIGFyZ3VtZW50cywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNzA1OTYyZGFiNjgwNjc3OGZmYjYwNTkyN2QxMTEyNWFkODY1MDhmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjcgMTE6Mjk6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggN2FhNDczNDJkYzY1OWMuLjYzYjFkOTk3ZmU4MDQ0IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0xMjQxNCwxMiAmIzQzOzEyNDE0LDE3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfCiAJCQltZXRhLSZndDtzdWJwcm9nbm8gPSByZWctJmd0O3N1YnByb2dubzsKIAkJCWJyZWFrOwogCQljYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOgomIzQzOwkJCWlmIChyZWctJmd0O3R5cGUgJmFtcDsgUFRSX1VOVFJVU1RFRCkgewomIzQzOwkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBpcyBhbiB1bnRydXN0ZWQgcmVmY291bnRlZCBrcHRyXG4mIzM0OywKJiM0MzsJCQkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiYjNDM7CQkJCXJldHVybiAtRUFDQ0VTOwomIzQzOwkJCX0KIAkJCWlmICghdHlwZV9pc19wdHJfYWxsb2Nfb2JqKHJlZy0mZ3Q7dHlwZSkpIHsKIAkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlxuJiMzNDssCiAJCQkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9Ci0JCQlpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLSZndDt0eXBlKSkKJiM0MzsJCQlpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7IHJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSkKIAkJCQltZXRhLSZndDthcmdfb3duaW5nX3JlZiA9IHRydWU7CiAKIAkJCXJlYyA9IHJlZ19idGZfcmVjb3JkKHJlZyk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMKaW5kZXggNjE5MDZmNDgwMjVjYzcuLmZkMzUwOTMyODVjMGRiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jCkBAIC0yMyw2ICYjNDM7MjMsMTUgQEAgc3RydWN0IG1hcF92YWx1ZSB7CiAJc3RydWN0IG5vZGVfZGF0YSBfX2twdHIgKm5vZGU7CiB9OwogCiYjNDM7c3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7CiYjNDM7CWxvbmcga2V5OwomIzQzOwlzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHsKJiM0MzsJc3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB7CiAJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiAJX190eXBlKGtleSwgaW50KTsKQEAgLTMwLDYgJiM0MzszOSwxMyBAQCBzdHJ1Y3QgewogCV9fdWludChtYXhfZW50cmllcywgMik7CiB9IHN0YXNoZWRfbm9kZXMgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiAKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzO30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwogc3RydWN0IG5vZGVfYWNxdWlyZSB7CiAJbG9uZyBrZXk7CiAJbG9uZyBkYXRhOwpAQCAtODMyLDYgJiM0Mzs4NDgsNTEgQEAgbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDt0YyYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9vd25pbmdfaW5wdXRfbm9fbnVsbF9jaGVjayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTsKJiM0MzsKJiM0MzsJbiA9IGJwZl9vYmpfbmV3KHR5cGVvZigqbikpOwomIzQzOwlpZiAoIW4pCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJbSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pOwomIzQzOwlicGZfb2JqX2Ryb3AobSk7CiYjNDM7CWJwZl9vYmpfZHJvcChuKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl9udWxsX2NoZWNrZWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7CiYjNDM7CXN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfcmVmY291bnRfb25seSwgJmFtcDtpZHgpOwomIzQzOwlpZiAoIW1hcHZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwlicGZfcmN1X3JlYWRfbG9jaygpOwomIzQzOwluID0gbWFwdmFsLSZndDtub2RlOwomIzQzOwlpZiAoIW4pIHsKJiM0MzsJCWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiAyOwomIzQzOwl9CiYjNDM7CW0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTsKJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAoIW0pCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsJYnBmX29ial9kcm9wKG0pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgbG9uZyBfX3N0YXNoX21hcF9lbXB0eV94Y2hnKHN0cnVjdCBub2RlX2RhdGEgKm4sIGludCBpZHgpCiB7CiAJc3RydWN0IG1hcF92YWx1ZSAqbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfbm9kZXMsICZhbXA7aWR4KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMKaW5kZXggMDI0ZWYyYWFlMjAwODIuLjgwYjkyZDdlYzljYWJhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYwpAQCAtMTksNiAmIzQzOzE5LDE1IEBAIHN0cnVjdCBub2RlX3JlZmNvdW50ZWQgewogCXN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7CiB9OwogCiYjNDM7c3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7CiYjNDM7CWxvbmcga2V5OwomIzQzOwlzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHsKJiM0MzsJc3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7CiYjNDM7fTsKJiM0MzsKIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTsKIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltOwogCkBAIC0yOCw2ICYjNDM7MzcsMTMgQEAgcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3Jvb3QgX19jb250YWlucyhub2RlX2FjcXVpcmUsIG5vZGUpOwogcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrOwogcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX2xpc3RfaGVhZCBoZWFkIF9fY29udGFpbnMobm9kZV9yZWZjb3VudGVkLCBsaXN0KTsKIAomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMSk7CiYjNDM7fSBzdGFzaGVkX3JlZmNvdW50X29ubHkgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiBzdGF0aWMgYm9vbCBsZXNzKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKQogewogCXN0cnVjdCBub2RlX2FjcXVpcmUgKm5vZGVfYTsKQEAgLTgwLDYgJiM0Mzs5Niw2NCBAQCBsb25nIHJlZmNvdW50X2FjcXVpcmVfbWF5YmVfbnVsbCh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDs/dGMmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjEmIzM0OykKJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX3VuY2hlY2tlZF9kcm9wKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsOwomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICp0bXAsICpuLCAqbTsKJiM0MzsJaW50IGlkeCA9IDA7CiYjNDM7CiYjNDM7CXRtcCA9IGJwZl9vYmpfbmV3KHR5cGVvZigqdG1wKSk7CiYjNDM7CWlmICghdG1wKQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CWJwZl9vYmpfZHJvcCh0bXApOwomIzQzOwomIzQzOwltYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCAmYW1wO2lkeCk7CiYjNDM7CWlmICghbWFwdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW4gPSBtYXB2YWwtJmd0O25vZGU7CiYjNDM7CWlmICghbikgewomIzQzOwkJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CX0KJiM0MzsJbSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pOwomIzQzOwlicGZfcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CWJwZl9vYmpfZHJvcChtKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2lzIGFuIHVudHJ1c3RlZCByZWZjb3VudGVkIGtwdHImIzM0OykKJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDsKJiM0MzsJc3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07CiYjNDM7CWludCBpZHggPSAwOwomIzQzOwomIzQzOwltYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCAmYW1wO2lkeCk7CiYjNDM7CWlmICghbWFwdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW4gPSBtYXB2YWwtJmd0O25vZGU7CiYjNDM7CWlmICghbikgewomIzQzOwkJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CX0KJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwltID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7CiYjNDM7CWlmIChtKQomIzQzOwkJYnBmX29ial9kcm9wKG0pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDs/dGMmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1VucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTMgYWxsb2NfaW5zbj17e1swLTldJiM0Mzt9fSYjMzQ7KQogbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEl0JiMzOTtzIGdvdCBhY2NvbXBhbnlpbmcgdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9gLCB3aGljaCBpcyBnb29kIHByYWN0aWNlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gaG93IHRoZSB2ZXJpZmllciBoYW5kbGVzIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzIHdoZW4gdmFsaWRhdGluZyBrZnVuY3MuCgpTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHdlJiMzOTtyZSBhZGRpbmcgYSBjcnVjaWFsIGNoZWNrLiAgVGhlIHBhdGNoIG5vdyBjb25zaWRlcnMgYFBUUl9VTlRSVVNURURgIGZvciBgcmVnLSZndDt0eXBlYC4gSWYgdGhlIHJlZ2lzdGVyIChgcmVnYCkgaG9sZGluZyB0aGUgYXJndW1lbnQgaXMgbWFya2VkIGFzIHVudHJ1c3RlZCwgd2UgYmFpbCBvdXQgd2l0aCBgLUVBQ0NFU2AsIHByZXZlbnRpbmcgcG90ZW50aWFsbHkgcmlza3kgb3BlcmF0aW9ucy4gIFRoYXQmIzM5O3MgYSBzZW5zaWJsZSBhZGRpdGlvbiwgZ3VhcmRpbmcgYWdhaW5zdCB1bnRydXN0ZWQgcG9pbnRlcnMgaW4gdGhpcyBjb250ZXh0LgoKV2UmIzM5O3JlIGFsc28gYWRqdXN0aW5nIHRoZSBjb25kaXRpb24gdGhhdCBzZXRzIGBtZXRhLSZndDthcmdfb3duaW5nX3JlZiA9IHRydWVgLiAgVGhlIG9yaWdpbmFsIGNoZWNrIG1pZ2h0IGhhdmUgYmVlbiB0b28gYnJvYWQuIE5vdywgaXQgc2VlbXMgd2Ugb25seSBzZXQgdGhpcyBmbGFnIGlmIHRoZSB0eXBlIGlzbiYjMzk7dCBhIG5vbi1vd25pbmcgcmVmICphbmQqIHRoZSByZWdpc3RlciBpcyBhY3R1YWxseSByZWZlcmVuY2VkLiBUaGF0JiMzOTtzIGEgbW9yZSBudWFuY2VkIGFwcHJvYWNoIGFuZCBzaG91bGQgaW1wcm92ZSB0aGUgYWNjdXJhY3kgb2YgdGhlIG93bmVyc2hpcCB0cmFja2luZy4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCBtZWFuaW5nIHRoaXMgaXMgYSBjaGFuZ2UgdGhhdCBuZWVkcyAqc2lnbmlmaWNhbnQqIGZ1enppbmcgdG8gY2F0Y2ggYW55IHN1YnRsZSBpc3N1ZXMgb3IgZWRnZSBjYXNlcy4gVGhpcyBvbmUgd2FycmFudHMgc29tZSBleHRyYSBzY3J1dGlueS4KCkxldCYjMzk7cyBsb2NhdGUgd2hlcmUgdGhpcyBjb2RlIGxpdmVzLiBUaGUgZGlmZiBpbmRpY2F0ZXMgaXQmIzM5O3MgaW4gYSBmdW5jdGlvbiBuYW1lZCBgY2hlY2tfa2Z1bmNfYXJnc2AuIElzIHRoYXQgZnVuY3Rpb24gc3RhdGljPyBZZXMsIHRoZSBkaWZmIGNsZWFybHkgc3RhdGVzIGl0JiMzOTtzIHN0YXRpYy4gVGhhdCBtZWFucyB0aGUgY29tcGlsZXIgbWlnaHQgaW5saW5lIGl0LiBTbyB3ZSBuZWVkIHRvIGxvb2sgYXQgaXRzIGNhbGxlcnMgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX2tmdW5jX2FyZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTExOTEyPXN0YXRpYyBib29sIGNoZWNrX2Nzc190YXNrX2l0ZXJfYWxsb3dsaXN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTI3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTI4OnN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfYXJnX21ldGEgKm1ldGEsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MjktXHRcdFx0ICAgIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5MTg9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5OTQtXHQvKiBDaGVjayB0aGUgYXJndW1lbnRzICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5OTU6XHRlcnIgPSBjaGVja19rZnVuY19hcmdzKGVudiwgXHUwMDI2bWV0YSwgaW5zbl9pZHgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk2LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMyODEtXHRcdGVsc2Vcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzI4MjpcdFx0XHQvKiBzY2FsYXIuIGVuc3VyZWQgYnkgY2hlY2tfa2Z1bmNfYXJncygpICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMyODMtXHRcdFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIHJlZ25vLCB0LVx1MDAzZXNpemUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqVHJhY2luZyBLZXJuZWwgRnVuY3Rpb24gQXJndW1lbnQgQ2hlY2tzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgY2hlY2tfa2Z1bmNfY2FsbGAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGNhbGwgc3RydWN0dXJlLiBUaGUgY29kZSB0ZWxscyBtZSB0aGF0IGBjaGVja19rZnVuY19jYWxsYCBjYWxscyBgY2hlY2tfa2Z1bmNfYXJnc2AuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgbGluaywgYnV0IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqb3RoZXIqIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhpcyBhcmd1bWVudCBjaGVja2luZy4KClNvLCBub3cgSSBuZWVkIHRvIGRldGVybWluZSB3aGF0IGZ1bmN0aW9ucyAqY2FsbCogYGNoZWNrX2tmdW5jX2NhbGxgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnJvYWRlciBjb250ZXh0OyB3aGVyZSBpbiB0aGUgc3lzdGVtIGFyZSB0aGVzZSBrZXJuZWwgZnVuY3Rpb24gY2FsbHMgYmVpbmcgdmFsaWRhdGVkPyBXaGF0IGV2ZW50cyBvciBwcm9jZXNzZXMgbGVhZCB0byB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gYmVpbmcgaW52b2tlZD8gVGhlIGdvYWwgaXMgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBjYWxsIHN0YWNrLCBzbyBJIGNhbiBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIGFuZCBpbXBvcnRhbmNlIG9mIHRoaXMgYXJndW1lbnQgY2hlY2suIFRoaXMgaXMgbXkgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX2tmdW5jX2NhbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTcyMzg9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTItXHRcdFx0ICogRm9yIENPTlNUX1BUUl9UT19EWU5QVFIsIHJlZyBpcyBhbHJlYWR5IHNjcmF0Y2hlZCBieSBjaGVja19yZWdfYXJnXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzMxMzpcdFx0XHQgKiBpbiBjaGVja19oZWxwZXJfY2FsbCBhbmQgbWFya19idGZfZnVuY19yZWdfc2l6ZSBpbiBjaGVja19rZnVuY19jYWxsLlxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTQtXHRcdFx0ICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyOTE2PXN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLCBjb25zdCBjaGFyICpyZWdfbmFtZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5MTctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5MTg6c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjkxOS1cdFx0XHQgICAgaW50ICppbnNuX2lkeF9wKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzI0MD1zdGF0aWMgaW50IGRvX2NoZWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgYm9vbCAqZG9fcHJpbnRfc3RhdGUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzA4LVx0XHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MzA5Olx0XHRcdFx0cmV0dXJuIGNoZWNrX2tmdW5jX2NhbGwoZW52LCBpbnNuLCBcdTAwMjZlbnYtXHUwMDNlaW5zbl9pZHgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzEwLVx0XHRcdHJldHVybiBjaGVja19oZWxwZXJfY2FsbChlbnYsIGluc24sIFx1MDAyNmVudi1cdTAwM2VpbnNuX2lkeCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIzMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCB3ZXJlIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKlRyYWNpbmcgdGhlIEJQRiBWZXJpZmljYXRpb24gRmxvdyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiBCUEYgdmVyaWZpY2F0aW9uLCB0aGF0IGBicGZfY2hlY2tgIGZ1bmN0aW9uLCBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBJdCYjMzk7cyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCwgdGhlIGZpcnN0IHBsYWNlIHRoZSB2ZXJpZmllciBsb29rcy4gQW5kLCBpdCB0aGVuIGNhbGxzIGBkb19jaGVja2AsIHdoaWNoLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgc2VlbXMgdG8gYmUgZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmcgb2YgaW5zdHJ1Y3Rpb24tbGV2ZWwgYW5hbHlzaXMuIE5vdywgYGRvX2NoZWNrYCBjYWxscyBgZG9fY2hlY2tfaW5zbmAsIGluZGljYXRpbmcgYSBwb3NzaWJseSBldmVuIGxvd2VyLWxldmVsLCBpbnN0cnVjdGlvbi1zcGVjaWZpYyBjaGVja2luZy4gQW5kLCBtb3N0IGltcG9ydGFudGx5LCBgZG9fY2hlY2tfaW5zbmAgY2FsbHMgYGNoZWNrX2tmdW5jX2NhbGxgLiBOb3cgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGBjaGVja19rZnVuY19jYWxsYCBpcyBzdGF0aWMuIFllcyBpdCBpcywgd2hpY2ggaXMgZ29vZC4gU28sIHRoZSB2ZXJpZmljYXRpb24gaXMgaW5pdGlhdGVkIGF0IGBicGZfY2hlY2tgLCB0cmlja2xlcyBkb3duIHRocm91Z2ggYSBzZXJpZXMgb2YgaW5jcmVhc2luZ2x5IHNwZWNpZmljIGNoZWNrcywgZXZlbnR1YWxseSBoaXR0aW5nIGBjaGVja19rZnVuY19jYWxsYCB3aGVuIG5lZWRlZC4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGluIGNvbXBsZXggY29kZTogYSBoaWdoLWxldmVsIGVudHJ5IHBvaW50IGZvbGxvd2VkIGJ5IGEgc2VyaWVzIG9mIHNwZWNpYWxpemVkIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfY2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTU1PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1NzovKiBicGZfY2hlY2soKSBpcyBhIHN0YXRpYyBjb2RlIGFuYWx5emVyIHRoYXQgd2Fsa3MgZUJQRiBwcm9ncmFtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTgtICogaW5zdHJ1Y3Rpb24gYnkgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgcmVnaXN0ZXIvc3RhY2sgc3RhdGUuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExODk3PXN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX3JidHJlZV9ub2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTA4LSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkwOTogKiBBbnkgc2xlZXBhYmxlIHByb2dzIGFyZSBhbHNvIHNhZmUgc2luY2UgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoKSBlbmZvcmNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MTAtICogdGhlbSBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBzb21lIHNwZWNpZmljIGhvb2sgcG9pbnRzLlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODg5Nj1idGZfYXR0YWNoX2Z1bmNfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgZnVuY19pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5MzAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg5MzE6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5MzItXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkzMzY9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzY2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzY3Olx0cmV0ID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCwgXHUwMDI2dGd0X2luZm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzY4LVx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0MzUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0MzY6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDM3LVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NjMzPWludCBicGZfZml4dXBfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Nzc2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Nzc3OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Nzc4LVx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzkxLVx0LyogJiMzOTtzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiYjMzk7IGNhbiBiZSBnbG9iYWwsIGJ1dCBzaW5jZSBpdCYjMzk7cyBub3Qgc21hbGwsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3OTI6XHQgKiBhbGxvY2F0ZS9mcmVlIGl0IGV2ZXJ5IHRpbWUgYnBmX2NoZWNrKCkgaXMgY2FsbGVkXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3OTMtXHQgKi9cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NjYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4Njc6XHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoZW52LCBhdHRyLCB1YXR0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NjgtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg3OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg3OTpcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg4MC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODkyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODkzOlx0cmV0ID0gYnBmX2NoZWNrX2NmZyhlbnYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODk0LVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjkxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlOgoKKipEZWVwIERpdmUgaW50byBgYnBmX2NoZWNrYCBhbmQgUmVmY291bnRlZCBLUFRScyoqCgpSaWdodCwgc28gYGJwZl9jaGVja2AuLi4gdGhhdCYjMzk7cyB0aGUgY29yZSwgaXNuJiMzOTt0IGl0PyBUaGUgc3RhcnRpbmcgcG9pbnQuIE15IGJyYWluJiMzOTtzIG5vdyBidXp6aW5nIHdpdGggdGhlIHBvc3NpYmlsaXRpZXMuIEkgbmVlZCB0byB6ZXJvIGluIG9uIGFueXRoaW5nIHNwZWNpZmljYWxseSBjb25uZWN0ZWQgdG8gYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYC4gVGhhdCBwYXJ0aWN1bGFyIGtmdW5jIGFyZ3VtZW50IHR5cGUgaXMgYWx3YXlzIGludGVyZXN0aW5nLCBhIHZpdGFsIGFzcGVjdCB0byBjb25zaWRlci4gSXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgdGhlIHJlYWwgbWFnaWMgLSBvciBwb3RlbnRpYWwgcGl0ZmFsbHMgLSBsaWUgd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsIHBvaW50ZXJzIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IHdpdGhpbiBCUEYuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gQXJlIHRoZXJlIG5ldyB1c2VzPyBPcHRpbWl6YXRpb24/IFNlY3VyaXR5IGltcGxpY2F0aW9ucz8KCkFoLCBhbmQgSSBzZWUgdGhlIHBhdGNoIGFsc28gbWVudGlvbnMgdGVzdHMgZm9yIGBicGZfcmVmY291bnRfYWNxdWlyZWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50ISBUZXN0aW5nIGFyb3VuZCByZWZjb3VudGluZyBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IGluIEJQRiwgaXMgKmNydWNpYWwqIGZvciBzdGFiaWxpdHkuIEl0JiMzOTtzIHRoZSBseW5jaHBpbiBmb3IgZW5zdXJpbmcgd2UgZG9uJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgZGF0YSBjb3JydXB0aW9uLiBUaGUgdGVzdHMgc2hvdWxkIGJlIGxvb2tlZCBpbnRvIHdpdGggcmVhbCBjYXJlLiBIb3cgdGhvcm91Z2ggYXJlIHRoZXk/IERvIHRoZXkgY292ZXIgZWRnZSBjYXNlcz8gQXJlIHRoZXJlIG5ldyB0ZXN0IGNhc2VzIGNvdmVyaW5nIHJlZmNvdW50aW5nIGluIHRoZSByZWxldmFudCBjb250ZXh0PyBVbmRlcnN0YW5kaW5nIHRoZSB0ZXN0IHN0cmF0ZWd5IGlzIHBhcmFtb3VudCBmb3Iga25vd2luZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9yZWZjb3VudF9hY3F1aXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9MjQ0OT1fX2JwZl9rZnVuYyB2b2lkIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCh2b2lkICpwX19hbGxvYywgdm9pZCAqbWV0YV9faWduKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTQtLyoqXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDU1OiAqIGJwZl9yZWZjb3VudF9hY3F1aXJlKCkgLSB0dXJuIGEgbG9jYWwga3B0ciBpbnRvIGFuIG93bmluZyByZWZlcmVuY2Vcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTYtICogQHBfX3JlZmNvdW50ZWRfa3B0cjogbm9uLW93bmluZyBsb2NhbCBrcHRyXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2My0gKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NjQ6X19icGZfa2Z1bmMgdm9pZCAqYnBmX3JlZmNvdW50X2FjcXVpcmUodm9pZCAqcF9fcmVmY291bnRlZF9rcHRyLCBzdHJ1Y3QgYnRmX3N0cnVjdF9tZXRhICptZXRhKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2NS17XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4MC1cbmtlcm5lbC9icGYvaGVscGVycy5jOjI0ODE6X19icGZfa2Z1bmMgdm9pZCAqYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbCh2b2lkICpwX19yZWZjb3VudGVkX2twdHIsIHZvaWQgKm1ldGFfX2lnbilcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODIte1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MzpcdHJldHVybiBicGZfcmVmY291bnRfYWNxdWlyZShwX19yZWZjb3VudGVkX2twdHIsIG1ldGFfX2lnbik7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDg0LX1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODEzPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfcGVyY3B1X29ial9kcm9wX2ltcGwsIEtGX1JFTEVBU0UpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODE0OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVmY291bnRfYWNxdWlyZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfUkNVIHwgS0ZfSU1QTElDSVRfQVJHUylcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4MTU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1JDVSlcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4MTYtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9saXN0X3B1c2hfZnJvbnQsIEtGX0lNUExJQ0lUX0FSR1MpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDA0PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwMDgtXHRLRl9icGZfb2JqX2Ryb3AsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwMDk6XHRLRl9icGZfcmVmY291bnRfYWNxdWlyZV9pbXBsLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDEwOlx0S0ZfYnBmX3JlZmNvdW50X2FjcXVpcmUsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwMTEtXHRLRl9icGZfbGlzdF9wdXNoX2Zyb250X2ltcGwsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDgxPUJURl9JRChmdW5jLCBicGZfb2JqX2Ryb3ApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwODI6QlRGX0lEKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwODM6QlRGX0lEKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDg0LUJURl9JRChmdW5jLCBicGZfbGlzdF9wdXNoX2Zyb250X2ltcGwpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTkxPXN0YXRpYyBib29sIGlzX2JwZl9wZXJjcHVfb2JqX2Ryb3Bfa2Z1bmModTMyIGZ1bmNfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTk2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTk3OnN0YXRpYyBib29sIGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKHUzMiBmdW5jX2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTk4LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE5OTpcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVmY291bnRfYWNxdWlyZV0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIwMDpcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVmY291bnRfYWNxdWlyZV9pbXBsXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIwMS19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjI0PXN0YXRpYyBib29sIGlzX2tmdW5jX3JldF9udWxsKHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIyNS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMjY6XHRpZiAoaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMobWV0YS1cdTAwM2VmdW5jX2lkKSBcdTAwMjZcdTAwMjYgbWV0YS1cdTAwM2Vhcmdfb3duaW5nX3JlZilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIyNy1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTYzMj1zdGF0aWMgYm9vbCBpc19icGZfZ3JhcGhfYXBpX2tmdW5jKHUzMiBidGZfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjM1LVx0ICAgICAgIGlzX2JwZl9yYnRyZWVfYXBpX2tmdW5jKGJ0Zl9pZCkgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTYzNjpcdCAgICAgICBpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhidGZfaWQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjM3LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI3NDc9c3RhdGljIGludCBjaGVja19zcGVjaWFsX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI4MzUtXHRcdGluc25fYXV4LVx1MDAzZWtwdHJfc3RydWN0X21ldGEgPSBzdHJ1Y3RfbWV0YTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjgzNjpcdH0gZWxzZSBpZiAoaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMobWV0YS1cdTAwM2VmdW5jX2lkKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyODM3LVx0XHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgQlBGX1JFR18wKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5MTg9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxMzgtXHRcdCAgICAgIWlzX2JwZl9wZXJjcHVfb2JqX25ld19rZnVuYyhtZXRhLmZ1bmNfaWQpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMTM5Olx0XHQgICAgICFpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhtZXRhLmZ1bmNfaWQpKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTQwLVx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDthY3F1aXJlIGtlcm5lbCBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gUFRSX1RPX0JURl9JRFxcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NjMzPWludCBicGZfZml4dXBfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjgxLVx0XHQgICBpc19icGZfcGVyY3B1X29ial9kcm9wX2tmdW5jKGRlc2MtXHUwMDNlZnVuY19pZCkgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY4MjpcdFx0ICAgaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMoZGVzYy1cdTAwM2VmdW5jX2lkKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjgzLVx0XHRzdHJ1Y3QgYnRmX3N0cnVjdF9tZXRhICprcHRyX3N0cnVjdF9tZXRhID0gZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmtwdHJfc3RydWN0X21ldGE7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjkxLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjkyOlx0XHRpZiAoaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMoZGVzYy1cdTAwM2VmdW5jX2lkKSBcdTAwMjZcdTAwMjYgIWtwdHJfc3RydWN0X21ldGEpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY5My1cdFx0XHR2ZXJpZmllcl9idWcoZW52LCBcJiMzNDtrcHRyX3N0cnVjdF9tZXRhIGV4cGVjdGVkIGF0IGluc25faWR4ICVkXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTU5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmVyaWZpY2F0aW9uIExvZ2ljIGZvciBLRnVuYyBBcmd1bWVudHMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyB0ZXN0cyB0aGF0IGFyZSBsZXZlcmFnaW5nIGBicGZfcmVmY291bnRfYWNxdWlyZWAsIHdoaWNoIEkga25vdyBpcyBhIGtmdW5jLiBUaGUgY29yZSBjaGFuZ2UgaGVyZSBpcyBpbiBgY2hlY2tfa2Z1bmNfYXJnc2AgdG8gaGFuZGxlIHRob3NlIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGUgY3J1Y2lhbCBwYXJ0IG9mIHRoaXMgaXMgdGhlIHZlcmlmaWVyIGxvZ2ljLiBJIGtub3cgYGJwZl9jaGVja2AgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gdGhlIHZlcmlmaWVyLCBhbmQgdGhhdCBpdCYjMzk7cyBjYWxsZWQgYnkgYGJwZl9wcm9nX2xvYWRgLCB3aGljaCBpcyB1bHRpbWF0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgYnBmYCBzeXNjYWxsLgoKVGhlcmVmb3JlLCB0aGUgb2J2aW91cyBmdXp6aW5nIHRhcmdldCBoZXJlIGlzIGBicGZfcHJvZ19sb2FkYCBpdHNlbGYuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IHRvIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGguIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCB3aGljaCBzcGVjaWZpYyBmdW5jdGlvbiB3aXRoaW4gdGhlIHZlcmlmaWVyIGlzIHRoZSBtb3N0IHByb21pc2luZz8gYGJwZl9jaGVja2Agb3IgYGNoZWNrX2tmdW5jX2FyZ3NgIGFyZSBsaWtlbHkgY2FuZGlkYXRlcy4gQnV0IGBjaGVja19rZnVuY19hcmdzYCBpcyBzdGF0aWMsIHNvIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB3aGV0aGVyIGl0JiMzOTtzIGlubGluZWQuIFRoaXMgbWVhbnMgdGhhdCBgYnBmX2NoZWNrYCBvciBgY2hlY2tfa2Z1bmNfY2FsbGAgaXMgcG90ZW50aWFsbHkgdGhlIGJlc3QgcGxhY2UuCgpXYWl0LCBgYnBmX2NoZWNrYCBpcyBhIG1vbnN0ZXIgb2YgYSBmdW5jdGlvbiEgTWF5YmUgc29tZXRoaW5nIG1vcmUgZ3JhbnVsYXIgbGlrZSBgY2hlY2tfa2Z1bmNfY2FsbGAgaXMgYmV0dGVyLiBJdCYjMzk7cyBzdGF0aWMgYXMgd2VsbCwgYnV0IGl0IG1pZ2h0IG5vdCBiZSBpbmxpbmVkLiBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGBjaGVja19rZnVuY19jYWxsYCBpcyBhY3R1YWxseSBpbmxpbmVkIG9yIG5vdC4gVGhhdCB3aWxsIGhlbHAgbWUgZGVjaWRlIG9uIHRoZSBvcHRpbWFsIGZ1enppbmcgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19rZnVuY19jYWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz03MjM4PXN0YXRpYyBpbnQgcHJvY2Vzc19keW5wdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MzEyLVx0XHRcdCAqIEZvciBDT05TVF9QVFJfVE9fRFlOUFRSLCByZWcgaXMgYWxyZWFkeSBzY3JhdGNoZWQgYnkgY2hlY2tfcmVnX2FyZ1xua2VybmVsL2JwZi92ZXJpZmllci5jOjczMTM6XHRcdFx0ICogaW4gY2hlY2tfaGVscGVyX2NhbGwgYW5kIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUgaW4gY2hlY2tfa2Z1bmNfY2FsbC5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MzE0LVx0XHRcdCAqL1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjkxNj1zdGF0aWMgaW50IGNoZWNrX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubywgY29uc3QgY2hhciAqcmVnX25hbWUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTE3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTE4OnN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5MTktXHRcdFx0ICAgIGludCAqaW5zbl9pZHhfcClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTcyNDA9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzMwOC1cdFx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzMwOTpcdFx0XHRcdHJldHVybiBjaGVja19rZnVuY19jYWxsKGVudiwgaW5zbiwgXHUwMDI2ZW52LVx1MDAzZWluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzMxMC1cdFx0XHRyZXR1cm4gY2hlY2tfaGVscGVyX2NhbGwoZW52LCBpbnNuLCBcdTAwMjZlbnYtXHUwMDNlaW5zbl9pZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA2MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFRhcmdldHMgZm9yIEluc3BlY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gYSBnb29kIGVudHJ5IHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGBicGZfcmVmY291bnRfYWNxdWlyZWAsIGdpdmVuIHRoYXQgaXQmIzM5O3MgYSBrZnVuYyBhbmQgdGhlcmVmb3JlIGRpcmVjdGx5IGludm9rZWQgZnJvbSBCUEYgcHJvZ3JhbXMuIEhvd2V2ZXIsIHRoZSBtb2RpZmljYXRpb24gaW4gcXVlc3Rpb24gYWZmZWN0cyB0aGUgdmVyaWZpZXIgbG9naWMgaXRzZWxmLCBub3QgdGhlIGRpcmVjdCBjYWxsLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBzaGlmdCBteSBmb2N1cy4gVGhlIHJlYWwgYWN0aW9uIHNlZW1zIHRvIGhhcHBlbiB3aXRoaW4gYGNoZWNrX2tmdW5jX2FyZ3NgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBhcmd1bWVudCB2YWxpZGF0aW9uIGlzIHBlcmZvcm1lZC4KClNvLCBsZXQmIzM5O3MgcmVmaW5lIG15IHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzLiBXaGlsZSBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGlzIHJlbGF0ZWQsIGl0JiMzOTtzIG5vdCB0aGUgY29yZS4gUGVyaGFwcyBgYnBmX2NoZWNrYCBpcyB0aGUgbW9yZSByZWxldmFudCBmdW5jdGlvbiB0byBleGFtaW5lLCBvciBldmVuIGBicGZfcHJvZ19sb2FkYCwgc2luY2UgdGhhdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgQlBGIHByb2dyYW1zIGFyZSBhY3R1YWxseSBsb2FkZWQgYW5kIGNoZWNrZWQuCgpXYWl0IGEgc2Vjb25kLi4uSSYjMzk7bSBnZXR0aW5nIGNsb3Nlci4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYGJwZl9jaGVja2AgKmlzKiB0aGUgbWFpbiB2ZXJpZmllciBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYGJwZl9jaGVja2AuCgpCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIGFsc28gY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB0aGF0IGluZmx1ZW5jZSB0aGUgdmVyaWZpZXImIzM5O3MgYmVoYXZpb3IuIFJpZ2h0LCBCUEYgaXMgZW5hYmxlZCB2aWEgYENPTkZJR19CUEZfU1lTQ0FMTGAuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBzdGFydCB0byB0cmFjZSB0aGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MzIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBmaW5kaW5nIHRob3NlIEJQRiBjb25maWd1cmF0aW9uIG9wdGlvbnM6CgoqKkJQRiBDb25maWd1cmF0aW9uIEh1bnQqKgoKQWxyaWdodCwgd2hlcmUgd291bGQgSSBleHBlY3QgdG8gZmluZCB0aGVzZSBCUEYgY29uZmlndXJhdGlvbnM/IEdpdmVuIHRoYXQgQlBGIGlzIGEgY29yZSBwYXJ0IG9mIHRoZSBrZXJuZWwsIGFuZCBmdW5kYW1lbnRhbGx5LCBpdCBuZWVkcyB0byBiZSBjb25maWd1cmVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VzcywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBmaWxlcy4gTm93LCB3aGVyZSB3b3VsZCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIGJlPyBIbW0sIGEgZ29vZCBzdGFydGluZyBwb2ludCB3b3VsZCBiZSB1bmRlciB0aGUgYGtlcm5lbGAgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgYW50aWNpcGF0ZSB0aGUgY29yZSBCUEYgb3B0aW9ucyB0byByZXNpZGUuIEhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgYXJlIHNvbWUgb3ZlcmFyY2hpbmcgaW5pdGlhbCBvcHRpb25zLCBhbmQgdGhvc2UgbWF5IHdlbGwgYmUgZGVjbGFyZWQgaW4gYGluaXQvS2NvbmZpZ2AgdG8gbWFuYWdlIGtlcm5lbCBidWlsZCBzZXR0aW5ncy4gSSYjMzk7bGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIGNoZWNrIGJvdGggbG9jYXRpb25zIHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyBjcnVjaWFsLiBUaGF0IHNob3VsZCBjb3ZlciB0aGUgbWFpbiBhcmVhcyBmb3IgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODY4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBhIEJQRiBWZXJpZmllciBDaGFuZ2UqKgoKQWxyaWdodCwgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGhpdHRpbmcgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGdvZXMgdG8gdGhlIGltcGFjdC4gVGhlIHZlcmlmaWVyIGlzIHRoZSAqZ2F0ZWtlZXBlciogZm9yIEJQRiBjb2RlIGVudGVyaW5nIHRoZSBrZXJuZWwsIHNvIGFueSBtb2RpZmljYXRpb24gaGVyZSB3YXJyYW50cyBpbW1lZGlhdGUgc2NydXRpbnkuIE15IGZpcnN0IHRob3VnaHQgaXM6ICppcyB0aGlzIHBhdGggY29uZGl0aW9uYWw/KiBBcmUgdGhlcmUgYW55IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCwgaWYgZGlzYWJsZWQsIHdvdWxkIG1ha2UgdGhpcyBjb2RlICpub3QqIGdldCBjb21waWxlZCBvciBpbmNsdWRlZD8gS25vd2luZyB0aGUgY29uZmlnIG9wdGlvbnMgdGhhdCBpbmZsdWVuY2UgdGhpcyBmaWxlIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UgYW5kIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBpbXBhY3RzIGFjcm9zcyBkaWZmZXJlbnQga2VybmVsIGJ1aWxkcyBhbmQgZGlzdHJpYnV0aW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlnIG9wdGlvbnMsIGlmIGFueSwgZ3VhcmQgdGhhdCBmaWxlLiBUaGF0IHdvdWxkIGJlIHRoZSBmaXJzdCBwaWVjZSBvZiBpbmZvcm1hdGlvbiBJIHdvdWxkIGdhdGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmVyaWZpZXJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjgwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSYjMzk7cyBteSB0YWtlLiBJdCYjMzk7cyBjbGVhciB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgcmVxdWlyZW1lbnQsIG9idmlvdXNseS4gVGhlIHBhdGNoIGl0c2VsZiBpcyBmdW5jdGlvbmFsOyBpdCYjMzk7cyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgYWRkcmVzc2VzIGEgc2VjdXJpdHkgY29uY2VybiB3aXRoIHVudHJ1c3RlZCByZWZjb3VudGVkIGtwdHJzIGFuZCBjb3JyZWN0cyBhbiBpc3N1ZSBpbiB0aGUgYG1ldGEtJmd0O2FyZ19vd25pbmdfcmVmYCBhc3NpZ25tZW50LiBUaGlzIGlzIGRlZmluaXRlbHkgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBmb3IgZnV6emluZyB3aWxsIGJlIGBicGZfY2hlY2tgLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSB2ZXJpZmllciYjMzk7cyBjb3JlIGxvZ2ljIHJlc2lkZXMgYW5kIHdoZXJlIHRoZSBrZXkgY2hlY2tzIGFyZSBwZXJmb3JtZWQuIEhvd2V2ZXIsIGBicGZfcmVmY291bnRfYWNxdWlyZWAgaXMgYWxzbyBpbXBvcnRhbnQuIEl0JiMzOTtzIHRoZSBrZnVuYyB0aGF0JiMzOTtzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBoYW5kbGUgdGhlIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnQgdHlwZS4gSXQgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSBpdCBiZWNhdXNlIHRoYXQmIzM5O3MgdGhlIHJ1bnRpbWUgZnVuY3Rpb24gdGhlIHZlcmlmaWVyIGlzIHNjcnV0aW5pemluZyBhcmd1bWVudHMgZm9yLCBldmVuIHRob3VnaCBJJiMzOTt2ZSBoYWQgdG8gY29ycmVjdCBteXNlbGYgYW5kIHJlbWluZCBteXNlbGYgdGhhdCBpdCYjMzk7cyB0aGUgdmVyaWZpZXIgY2hlY2tpbmcgYXQgbG9hZCB0aW1lLiBGdXp6aW5nIHRoZSB2ZXJpZmllciAqaXMqIGRvbmUgdGhyb3VnaCBsb2FkaW5nIEJQRiBwcm9ncmFtcywgd2hpY2ggaXMgd2h5IGBicGZfY2hlY2tgIGlzIHRoZSBiZXN0IHByaW1hcnkgZm9jdXMuIGBicGZfcmVmY291bnRfYWNxdWlyZWAgaXMgcmVsZXZhbnQgYXMgaXQmIzM5O3MgdGhlIGtmdW5jIGNhbGxlZCBpbiB0aGUgdGVzdHMuCgpMZXQgbWUganVzdCBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGNvZGUgc25pcHBldCBhZ2FpbjoKCmBgYGMKIAkJY2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjoKJiM0MzsJCQlpZiAocmVnLSZndDt0eXBlICZhbXA7IFBUUl9VTlRSVVNURUQpIHsKJiM0MzsJCQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgaXMgYW4gdW50cnVzdGVkIHJlZmNvdW50ZWQga3B0clxuJiMzNDssCiYjNDM7CQkJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwomIzQzOwkJCQlyZXR1cm4gLUVBQ0NFUzsKJiM0MzsJCQl9CiAJCQlpZiAoIXR5cGVfaXNfcHRyX2FsbG9jX29iaihyZWctJmd0O3R5cGUpKSB7CiAJCQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgaXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWZcbiYjMzQ7LAogCQkJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJaWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkpCiYjNDM7CQkJaWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOyByZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykpCiAJCQkJbWV0YS0mZ3Q7YXJnX293bmluZ19yZWYgPSB0cnVlOwpgYGAKClJpZ2h0LCBzbyB0aGlzIGlzIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGEgZmxhdyBpbiB0aGUgdmVyaWZpZXIuIFRoZSBwYXRjaCYjMzk7cyBpbXBhY3QgaXMgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCB3aGljaCBoYW5kbGVzIGtmdW5jIGFyZ3VtZW50cywgYW5kIHRoaXMgaXMgdWx0aW1hdGVseSByZWFjaGFibGUgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gQlBGIHByb2dyYW1zIGFyZSBsb2FkZWQuIEl0JiMzOTtzIGNyaXRpY2FsIHRvIGVuc3VyZSB0aGlzIGNvZGUgcGF0aCBpcyByb2J1c3QgYWdhaW5zdCBtYWxpY2lvdXMgQlBGIHByb2dyYW1zLgoKVGhlIGltcG9ydGFudCBwb2ludHMgYXJlOiBgQlBGX1NZU0NBTExgIGVuYWJsZWQsIGFuZCBteSBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgYGJwZl9jaGVja2AsIGFuZCBgYnBmX3JlZmNvdW50X2FjcXVpcmVgLiBOb3csIEkgbmVlZCB0byBjaGVjayBpZiBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGlzIGV4cG9ydGVkIGFuZCBhdmFpbGFibGUgZm9yIHVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3JlZmNvdW50X2FjcXVpcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYz0yNDQ5PV9fYnBmX2tmdW5jIHZvaWQgYnBmX3BlcmNwdV9vYmpfZHJvcF9pbXBsKHZvaWQgKnBfX2FsbG9jLCB2b2lkICptZXRhX19pZ24pXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1NC0vKipcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NTU6ICogYnBmX3JlZmNvdW50X2FjcXVpcmUoKSAtIHR1cm4gYSBsb2NhbCBrcHRyIGludG8gYW4gb3duaW5nIHJlZmVyZW5jZVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1Ni0gKiBAcF9fcmVmY291bnRlZF9rcHRyOiBub24tb3duaW5nIGxvY2FsIGtwdHJcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDYzLSAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ2NDpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZSh2b2lkICpwX19yZWZjb3VudGVkX2twdHIsIHN0cnVjdCBidGZfc3RydWN0X21ldGEgKm1ldGEpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDY1LXtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDgwLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MTpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgdm9pZCAqbWV0YV9faWduKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4Mi17XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDgzOlx0cmV0dXJuIGJwZl9yZWZjb3VudF9hY3F1aXJlKHBfX3JlZmNvdW50ZWRfa3B0ciwgbWV0YV9faWduKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODQtfVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4MTM9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCwgS0ZfUkVMRUFTRSlcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4MTQ6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9SQ1UgfCBLRl9JTVBMSUNJVF9BUkdTKVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDgxNTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfUkNVKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDgxNi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2xpc3RfcHVzaF9mcm9udCwgS0ZfSU1QTElDSVRfQVJHUylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCBhbmQgdGhlIEJQRiBWZXJpZmllcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGlzIGEgYF9fYnBmX2tmdW5jYCwgbWVhbmluZyBpdCYjMzk7cyBhIG5vbi1zdGF0aWMga2VybmVsIGZ1bmN0aW9uIHRoYXQmIzM5O3MgZXhwb3NlZCBmb3IgQlBGIHByb2dyYW1zLiBNeSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgdW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHZlcmlmaWVyLCBwYXJ0aWN1bGFybHkgYGJwZl9jaGVja2AsIHdoaWNoIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB2YWxpZGF0aW5nIEJQRiBwcm9ncmFtcy4gSSYjMzk7bSB0cmVhdGluZyBgYnBmX2NoZWNrYCBhbmQgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCBhcyBteSBGb2N1c1N5bWJvbHMgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbi4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBpbml0aWFsIGNsdWUgcG9pbnRzIHRvIGBCUEZfU1lTQ0FMTGAsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nIGVsc2UuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZW5hYmxpbmcgY29uZmlncyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuCgpUbyBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiBob3cgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCBpcyB1c2VkLCBJIHNob3VsZCBjaGVjayB0aGUgdGVzdCBmaWxlcy4gQmFzZWQgb24gdGhlIGZpbGUgcGF0aCwgdGhlIHRlc3RzIHNob3VsZCBiZSBsb2NhdGVkIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNgLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgYnkgbG9va2luZyBhdCBob3cgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCBpcyB1c2VkLgoKTGFzdGx5LCBJIG5lZWQgdG8gY29uc2lkZXIgZGVwZW5kZW5jaWVzLiBEb2VzIGBicGZfcmVmY291bnRfYWNxdWlyZWAgcmVxdWlyZSBhbnkgb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBiZSBlbmFibGVkPyBJZiBzbywgaWRlbnRpZnlpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIGNvbXBsZXRlIG9wZXJhdGlvbmFsIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9yZWZjb3VudF9hY3F1aXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9MjQ0OT1fX2JwZl9rZnVuYyB2b2lkIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCh2b2lkICpwX19hbGxvYywgdm9pZCAqbWV0YV9faWduKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTQtLyoqXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDU1OiAqIGJwZl9yZWZjb3VudF9hY3F1aXJlKCkgLSB0dXJuIGEgbG9jYWwga3B0ciBpbnRvIGFuIG93bmluZyByZWZlcmVuY2Vcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTYtICogQHBfX3JlZmNvdW50ZWRfa3B0cjogbm9uLW93bmluZyBsb2NhbCBrcHRyXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2My0gKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NjQ6X19icGZfa2Z1bmMgdm9pZCAqYnBmX3JlZmNvdW50X2FjcXVpcmUodm9pZCAqcF9fcmVmY291bnRlZF9rcHRyLCBzdHJ1Y3QgYnRmX3N0cnVjdF9tZXRhICptZXRhKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2NS17XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4MC1cbmtlcm5lbC9icGYvaGVscGVycy5jOjI0ODE6X19icGZfa2Z1bmMgdm9pZCAqYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbCh2b2lkICpwX19yZWZjb3VudGVkX2twdHIsIHZvaWQgKm1ldGFfX2lnbilcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODIte1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MzpcdHJldHVybiBicGZfcmVmY291bnRfYWNxdWlyZShwX19yZWZjb3VudGVkX2twdHIsIG1ldGFfX2lnbik7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDg0LX1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODEzPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfcGVyY3B1X29ial9kcm9wX2ltcGwsIEtGX1JFTEVBU0UpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODE0OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVmY291bnRfYWNxdWlyZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfUkNVIHwgS0ZfSU1QTElDSVRfQVJHUylcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4MTU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1JDVSlcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4MTYtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9saXN0X3B1c2hfZnJvbnQsIEtGX0lNUExJQ0lUX0FSR1MpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDA0PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwMDgtXHRLRl9icGZfb2JqX2Ryb3AsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwMDk6XHRLRl9icGZfcmVmY291bnRfYWNxdWlyZV9pbXBsLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDEwOlx0S0ZfYnBmX3JlZmNvdW50X2FjcXVpcmUsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwMTEtXHRLRl9icGZfbGlzdF9wdXNoX2Zyb250X2ltcGwsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDgxPUJURl9JRChmdW5jLCBicGZfb2JqX2Ryb3ApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwODI6QlRGX0lEKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwODM6QlRGX0lEKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDg0LUJURl9JRChmdW5jLCBicGZfbGlzdF9wdXNoX2Zyb250X2ltcGwpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTkxPXN0YXRpYyBib29sIGlzX2JwZl9wZXJjcHVfb2JqX2Ryb3Bfa2Z1bmModTMyIGZ1bmNfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTk2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTk3OnN0YXRpYyBib29sIGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKHUzMiBmdW5jX2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTk4LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE5OTpcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVmY291bnRfYWNxdWlyZV0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIwMDpcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVmY291bnRfYWNxdWlyZV9pbXBsXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIwMS19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjI0PXN0YXRpYyBib29sIGlzX2tmdW5jX3JldF9udWxsKHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIyNS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMjY6XHRpZiAoaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMobWV0YS1cdTAwM2VmdW5jX2lkKSBcdTAwMjZcdTAwMjYgbWV0YS1cdTAwM2Vhcmdfb3duaW5nX3JlZilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIyNy1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTYzMj1zdGF0aWMgYm9vbCBpc19icGZfZ3JhcGhfYXBpX2tmdW5jKHUzMiBidGZfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjM1LVx0ICAgICAgIGlzX2JwZl9yYnRyZWVfYXBpX2tmdW5jKGJ0Zl9pZCkgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTYzNjpcdCAgICAgICBpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhidGZfaWQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjM3LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI3NDc9c3RhdGljIGludCBjaGVja19zcGVjaWFsX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI4MzUtXHRcdGluc25fYXV4LVx1MDAzZWtwdHJfc3RydWN0X21ldGEgPSBzdHJ1Y3RfbWV0YTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjgzNjpcdH0gZWxzZSBpZiAoaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMobWV0YS1cdTAwM2VmdW5jX2lkKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyODM3LVx0XHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgQlBGX1JFR18wKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5MTg9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxMzgtXHRcdCAgICAgIWlzX2JwZl9wZXJjcHVfb2JqX25ld19rZnVuYyhtZXRhLmZ1bmNfaWQpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMTM5Olx0XHQgICAgICFpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhtZXRhLmZ1bmNfaWQpKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTQwLVx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDthY3F1aXJlIGtlcm5lbCBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gUFRSX1RPX0JURl9JRFxcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NjMzPWludCBicGZfZml4dXBfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjgxLVx0XHQgICBpc19icGZfcGVyY3B1X29ial9kcm9wX2tmdW5jKGRlc2MtXHUwMDNlZnVuY19pZCkgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY4MjpcdFx0ICAgaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMoZGVzYy1cdTAwM2VmdW5jX2lkKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjgzLVx0XHRzdHJ1Y3QgYnRmX3N0cnVjdF9tZXRhICprcHRyX3N0cnVjdF9tZXRhID0gZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmtwdHJfc3RydWN0X21ldGE7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjkxLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjkyOlx0XHRpZiAoaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMoZGVzYy1cdTAwM2VmdW5jX2lkKSBcdTAwMjZcdTAwMjYgIWtwdHJfc3RydWN0X21ldGEpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY5My1cdFx0XHR2ZXJpZmllcl9idWcoZW52LCBcJiMzNDtrcHRyX3N0cnVjdF9tZXRhIGV4cGVjdGVkIGF0IGluc25faWR4ICVkXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjUzNwoJCQkJCQkJb3V0cHV0OiAxNDAKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipCUEYgSGVscGVyIEZ1bmN0aW9uIExvY2F0aW9uICZhbXA7IENvbXBpbGF0aW9uIFZlcmlmaWNhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRyeWluZyB0byBuYWlsIGRvd24gdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9uIGZvciBCUEYgaGVscGVyIGZ1bmN0aW9ucy4gVGhlIGNvZGUgaXMgY2xlYXJseSBpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCAqaG93KiBpcyB0aGF0IGZpbGUgYnVpbHQ/IElzIGl0IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBMZXQmIzM5O3MgY2hlY2suLi4gQWhhISBZZXMsIGxvb2tpbmcgYXQgdGhlIGJ1aWxkIHN5c3RlbSBkaXJlY3RpdmVzLCBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gLi4uYCBpbmRpY2F0ZXMgdGhlIGtleS4gSXQgbG9va3MgbGlrZSBgaGVscGVycy5jYCBpcyBpbmRlZWQgYnVpbHQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGF0IGNvbmZpcm1zIGl0LgoKVGhlcmVmb3JlLCBlbnN1cmluZyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHNldCBpcyB0aGUgc29sZSByZXF1aXJlbWVudCBpbiB0aGlzIGNhc2UuIFdpdGggdGhhdCBlc3RhYmxpc2hlZCwgSSBzaG91bGQgbm93IGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O2JwZl9yZWZjb3VudF9hY3F1aXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gcmVqZWN0IHVudHJ1c3RlZCByZWZjb3VudGVkIGtwdHJzIGFuZCBmaXhlcyB0aGUgYXNzaWdubWVudCBvZiBgbWV0YS1cdTAwM2Vhcmdfb3duaW5nX3JlZmAgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgaGFuZGxlcyBrZnVuYyBhcmd1bWVudHMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICAgJiMzNDticGZfcmVmY291bnRfYWNxdWlyZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHJlamVjdCB1bnRydXN0ZWQgcmVmY291bnRlZCBrcHRycyBhbmQgZml4ZXMgdGhlIGFzc2lnbm1lbnQgb2YgYG1ldGEtXHUwMDNlYXJnX293bmluZ19yZWZgIGZvciBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGFyZ3VtZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGhhbmRsZXMga2Z1bmMgYXJndW1lbnRzLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgd2hlbiBsb2FkaW5nIEJQRiBwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDExOjI5OjU3Ljc5NTY0MjA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4MTE1NDQzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImJwZl9yZWZjb3VudF9hY3F1aXJlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byByZWplY3QgdW50cnVzdGVkIHJlZmNvdW50ZWQga3B0cnMgYW5kIGZpeGVzIHRoZSBhc3NpZ25tZW50IG9mIGBtZXRhLVxcdTAwM2Vhcmdfb3duaW5nX3JlZmAgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgaGFuZGxlcyBrZnVuYyBhcmd1bWVudHMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMToyOTo1Ny43OTU2NDg5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4MjY2NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjcwNTk2MmRhYjY4MDY3NzhmZmI2MDU5MjdkMTExMjVhZDg2NTA4ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMToyOTo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCA3YWE0NzM0MmRjNjU5Yy4uNjNiMWQ5OTdmZTgwNDQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTEyNDE0LDEyICsxMjQxNCwxNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX1xcbiBcXHRcXHRcXHRtZXRhLVxcdTAwM2VzdWJwcm9nbm8gPSByZWctXFx1MDAzZXN1YnByb2dubztcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI6XFxuK1xcdFxcdFxcdGlmIChyZWctXFx1MDAzZXR5cGUgXFx1MDAyNiBQVFJfVU5UUlVTVEVEKSB7XFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgaXMgYW4gdW50cnVzdGVkIHJlZmNvdW50ZWQga3B0clxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKCF0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVxcdTAwM2V0eXBlKSkge1xcbiBcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGlzIG5laXRoZXIgb3duaW5nIG9yIG5vbi1vd25pbmcgcmVmXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVxcdTAwM2V0eXBlKSlcXG4rXFx0XFx0XFx0aWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cXHUwMDNldHlwZSkgXFx1MDAyNlxcdTAwMjYgcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKVxcbiBcXHRcXHRcXHRcXHRtZXRhLVxcdTAwM2Vhcmdfb3duaW5nX3JlZiA9IHRydWU7XFxuIFxcbiBcXHRcXHRcXHRyZWMgPSByZWdfYnRmX3JlY29yZChyZWcpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcXG5pbmRleCA2MTkwNmY0ODAyNWNjNy4uZmQzNTA5MzI4NWMwZGIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXFxuQEAgLTIzLDYgKzIzLDE1IEBAIHN0cnVjdCBtYXBfdmFsdWUge1xcbiBcXHRzdHJ1Y3Qgbm9kZV9kYXRhIF9fa3B0ciAqbm9kZTtcXG4gfTtcXG4gXFxuK3N0cnVjdCBub2RlX3JlZmNvdW50X29ubHkge1xcbitcXHRsb25nIGtleTtcXG4rXFx0c3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDtcXG4rfTtcXG4rXFxuK3N0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSB7XFxuK1xcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgX19rcHRyICpub2RlO1xcbit9O1xcbitcXG4gc3RydWN0IHtcXG4gXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XFxuIFxcdF9fdHlwZShrZXksIGludCk7XFxuQEAgLTMwLDYgKzM5LDEzIEBAIHN0cnVjdCB7XFxuIFxcdF9fdWludChtYXhfZW50cmllcywgMik7XFxuIH0gc3Rhc2hlZF9ub2RlcyBTRUMoXFxcIi5tYXBzXFxcIik7XFxuIFxcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbit9IHN0YXNoZWRfcmVmY291bnRfb25seSBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbiBzdHJ1Y3Qgbm9kZV9hY3F1aXJlIHtcXG4gXFx0bG9uZyBrZXk7XFxuIFxcdGxvbmcgZGF0YTtcXG5AQCAtODMyLDYgKzg0OCw1MSBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwidGNcXFwiKVxcbitfX3N1Y2Nlc3NcXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX293bmluZ19pbnB1dF9ub19udWxsX2NoZWNrKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcXG4rXFxuK1xcdG4gPSBicGZfb2JqX25ldyh0eXBlb2YoKm4pKTtcXG4rXFx0aWYgKCFuKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcXG4rXFx0YnBmX29ial9kcm9wKG0pO1xcbitcXHRicGZfb2JqX2Ryb3Aobik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y1xcXCIpXFxuK19fc3VjY2Vzc1xcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX251bGxfY2hlY2tlZCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XFxuK1xcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptO1xcbitcXHRpbnQgaWR4ID0gMDtcXG4rXFxuK1xcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnN0YXNoZWRfcmVmY291bnRfb25seSwgXFx1MDAyNmlkeCk7XFxuK1xcdGlmICghbWFwdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XFxuK1xcdG4gPSBtYXB2YWwtXFx1MDAzZW5vZGU7XFxuK1xcdGlmICghbikge1xcbitcXHRcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiAyO1xcbitcXHR9XFxuK1xcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcXG4rXFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0aWYgKCFtKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFx0YnBmX29ial9kcm9wKG0pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBsb25nIF9fc3Rhc2hfbWFwX2VtcHR5X3hjaGcoc3RydWN0IG5vZGVfZGF0YSAqbiwgaW50IGlkeClcXG4ge1xcbiBcXHRzdHJ1Y3QgbWFwX3ZhbHVlICptYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZzdGFzaGVkX25vZGVzLCBcXHUwMDI2aWR4KTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xcbmluZGV4IDAyNGVmMmFhZTIwMDgyLi44MGI5MmQ3ZWM5Y2FiYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXFxuQEAgLTE5LDYgKzE5LDE1IEBAIHN0cnVjdCBub2RlX3JlZmNvdW50ZWQge1xcbiBcXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xcbiB9O1xcbiBcXG4rc3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7XFxuK1xcdGxvbmcga2V5O1xcbitcXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xcbit9O1xcbitcXG4rc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHtcXG4rXFx0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7XFxuK307XFxuK1xcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XFxuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xcbiBcXG5AQCAtMjgsNiArMzcsMTMgQEAgcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3Jvb3QgX19jb250YWlucyhub2RlX2FjcXVpcmUsIG5vZGUpO1xcbiBwcml2YXRlKEIpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGxvY2s7XFxuIHByaXZhdGUoQikgc3RydWN0IGJwZl9saXN0X2hlYWQgaGVhZCBfX2NvbnRhaW5zKG5vZGVfcmVmY291bnRlZCwgbGlzdCk7XFxuIFxcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbit9IHN0YXNoZWRfcmVmY291bnRfb25seSBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbiBzdGF0aWMgYm9vbCBsZXNzKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxcbiB7XFxuIFxcdHN0cnVjdCBub2RlX2FjcXVpcmUgKm5vZGVfYTtcXG5AQCAtODAsNiArOTYsNjQgQEAgbG9uZyByZWZjb3VudF9hY3F1aXJlX21heWJlX251bGwodm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rU0VDKFxcXCI/dGNcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVxcXCIpXFxuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9yY3VfbWFwX2twdHJfdW5jaGVja2VkX2Ryb3Aodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xcbitcXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICp0bXAsICpuLCAqbTtcXG4rXFx0aW50IGlkeCA9IDA7XFxuK1xcbitcXHR0bXAgPSBicGZfb2JqX25ldyh0eXBlb2YoKnRtcCkpO1xcbitcXHRpZiAoIXRtcClcXG4rXFx0XFx0cmV0dXJuIDM7XFxuK1xcdGJwZl9vYmpfZHJvcCh0bXApO1xcbitcXG4rXFx0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcXHUwMDI2aWR4KTtcXG4rXFx0aWYgKCFtYXB2YWwpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4rXFx0YnBmX3JjdV9yZWFkX2xvY2soKTtcXG4rXFx0biA9IG1hcHZhbC1cXHUwMDNlbm9kZTtcXG4rXFx0aWYgKCFuKSB7XFxuK1xcdFxcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0cmV0dXJuIDI7XFxuK1xcdH1cXG4rXFx0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xcbitcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRicGZfb2JqX2Ryb3AobSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCI/dGNcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImlzIGFuIHVudHJ1c3RlZCByZWZjb3VudGVkIGtwdHJcXFwiKVxcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XFxuK1xcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptO1xcbitcXHRpbnQgaWR4ID0gMDtcXG4rXFxuK1xcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnN0YXNoZWRfcmVmY291bnRfb25seSwgXFx1MDAyNmlkeCk7XFxuK1xcdGlmICghbWFwdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XFxuK1xcdG4gPSBtYXB2YWwtXFx1MDAzZW5vZGU7XFxuK1xcdGlmICghbikge1xcbitcXHRcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiAyO1xcbitcXHR9XFxuK1xcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcXG4rXFx0aWYgKG0pXFxuK1xcdFxcdGJwZl9vYmpfZHJvcChtKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBTRUMoXFxcIj90Y1xcXCIpXFxuIF9fZmFpbHVyZSBfX21zZyhcXFwiVW5yZWxlYXNlZCByZWZlcmVuY2UgaWQ9MyBhbGxvY19pbnNuPXt7WzAtOV0rfX1cXFwiKVxcbiBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTE6Mjk6NTguNDI2ODc5NDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2MDE4MDI5MjkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiLFxuICAgIFwiYnBmX3JlZmNvdW50X2FjcXVpcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHJlamVjdCB1bnRydXN0ZWQgcmVmY291bnRlZCBrcHRycyBhbmQgZml4ZXMgdGhlIGFzc2lnbm1lbnQgb2YgYG1ldGEtXFx1MDAzZWFyZ19vd25pbmdfcmVmYCBmb3IgYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYCBhcmd1bWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBoYW5kbGVzIGtmdW5jIGFyZ3VtZW50cywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY3MDU5NjJkYWI2ODA2Nzc4ZmZiNjA1OTI3ZDExMTI1YWQ4NjUwOGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMToyOTo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggN2FhNDczNDJkYzY1OWMuLjYzYjFkOTk3ZmU4MDQ0IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xMjQxNCwxMiArMTI0MTQsMTcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9cbiBcdFx0XHRtZXRhLVx1MDAzZXN1YnByb2dubyA9IHJlZy1cdTAwM2VzdWJwcm9nbm87XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI6XG4rXHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBQVFJfVU5UUlVTVEVEKSB7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyBhbiB1bnRydXN0ZWQgcmVmY291bnRlZCBrcHRyXFxuXCIsXG4rXHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4rXHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbitcdFx0XHR9XG4gXHRcdFx0aWYgKCF0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVx1MDAzZXR5cGUpKSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlxcblwiLFxuIFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdGlmICghdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkpXG4rXHRcdFx0aWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjYgcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKVxuIFx0XHRcdFx0bWV0YS1cdTAwM2Vhcmdfb3duaW5nX3JlZiA9IHRydWU7XG4gXG4gXHRcdFx0cmVjID0gcmVnX2J0Zl9yZWNvcmQocmVnKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcbmluZGV4IDYxOTA2ZjQ4MDI1Y2M3Li5mZDM1MDkzMjg1YzBkYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXG5AQCAtMjMsNiArMjMsMTUgQEAgc3RydWN0IG1hcF92YWx1ZSB7XG4gXHRzdHJ1Y3Qgbm9kZV9kYXRhIF9fa3B0ciAqbm9kZTtcbiB9O1xuIFxuK3N0cnVjdCBub2RlX3JlZmNvdW50X29ubHkge1xuK1x0bG9uZyBrZXk7XG4rXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuK307XG4rXG4rc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHtcbitcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgX19rcHRyICpub2RlO1xuK307XG4rXG4gc3RydWN0IHtcbiBcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuIFx0X190eXBlKGtleSwgaW50KTtcbkBAIC0zMCw2ICszOSwxMyBAQCBzdHJ1Y3Qge1xuIFx0X191aW50KG1heF9lbnRyaWVzLCAyKTtcbiB9IHN0YXNoZWRfbm9kZXMgU0VDKFwiLm1hcHNcIik7XG4gXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5KTtcbitcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4rfSBzdGFzaGVkX3JlZmNvdW50X29ubHkgU0VDKFwiLm1hcHNcIik7XG4rXG4gc3RydWN0IG5vZGVfYWNxdWlyZSB7XG4gXHRsb25nIGtleTtcbiBcdGxvbmcgZGF0YTtcbkBAIC04MzIsNiArODQ4LDUxIEBAIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlc19vd25pbmdfaW5wdXQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcInRjXCIpXG4rX19zdWNjZXNzXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX293bmluZ19pbnB1dF9ub19udWxsX2NoZWNrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcbitcbitcdG4gPSBicGZfb2JqX25ldyh0eXBlb2YoKm4pKTtcbitcdGlmICghbilcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XG4rXHRicGZfb2JqX2Ryb3AobSk7XG4rXHRicGZfb2JqX2Ryb3Aobik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGNcIilcbitfX3N1Y2Nlc3Ncbitsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX251bGxfY2hlY2tlZCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcbitcdGludCBpZHggPSAwO1xuK1xuK1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFx1MDAyNmlkeCk7XG4rXHRpZiAoIW1hcHZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuK1x0aWYgKCFuKSB7XG4rXHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cmV0dXJuIDI7XG4rXHR9XG4rXHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XG4rXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRpZiAoIW0pXG4rXHRcdHJldHVybiAzO1xuK1x0YnBmX29ial9kcm9wKG0pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBsb25nIF9fc3Rhc2hfbWFwX2VtcHR5X3hjaGcoc3RydWN0IG5vZGVfZGF0YSAqbiwgaW50IGlkeClcbiB7XG4gXHRzdHJ1Y3QgbWFwX3ZhbHVlICptYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfbm9kZXMsIFx1MDAyNmlkeCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuaW5kZXggMDI0ZWYyYWFlMjAwODIuLjgwYjkyZDdlYzljYWJhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG5AQCAtMTksNiArMTksMTUgQEAgc3RydWN0IG5vZGVfcmVmY291bnRlZCB7XG4gXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuIH07XG4gXG4rc3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7XG4rXHRsb25nIGtleTtcbitcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XG4rfTtcbitcbitzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkge1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7XG4rfTtcbitcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XG4gZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07XG4gXG5AQCAtMjgsNiArMzcsMTMgQEAgcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3Jvb3QgX19jb250YWlucyhub2RlX2FjcXVpcmUsIG5vZGUpO1xuIHByaXZhdGUoQikgc3RydWN0IGJwZl9zcGluX2xvY2sgbG9jaztcbiBwcml2YXRlKEIpIHN0cnVjdCBicGZfbGlzdF9oZWFkIGhlYWQgX19jb250YWlucyhub2RlX3JlZmNvdW50ZWQsIGxpc3QpO1xuIFxuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQyhcIi5tYXBzXCIpO1xuK1xuIHN0YXRpYyBib29sIGxlc3Moc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXG4ge1xuIFx0c3RydWN0IG5vZGVfYWNxdWlyZSAqbm9kZV9hO1xuQEAgLTgwLDYgKzk2LDY0IEBAIGxvbmcgcmVmY291bnRfYWNxdWlyZV9tYXliZV9udWxsKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCI/dGNcIilcbitfX2ZhaWx1cmUgX19tc2coXCJQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjFcIilcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX3VuY2hlY2tlZF9kcm9wKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcbitcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKnRtcCwgKm4sICptO1xuK1x0aW50IGlkeCA9IDA7XG4rXG4rXHR0bXAgPSBicGZfb2JqX25ldyh0eXBlb2YoKnRtcCkpO1xuK1x0aWYgKCF0bXApXG4rXHRcdHJldHVybiAzO1xuK1x0YnBmX29ial9kcm9wKHRtcCk7XG4rXG4rXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfcmVmY291bnRfb25seSwgXHUwMDI2aWR4KTtcbitcdGlmICghbWFwdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4rXHRuID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4rXHRpZiAoIW4pIHtcbitcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4gMjtcbitcdH1cbitcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcbitcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcbitcdGJwZl9vYmpfZHJvcChtKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpcyBhbiB1bnRydXN0ZWQgcmVmY291bnRlZCBrcHRyXCIpXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX2FmdGVyX3JjdV91bmxvY2sodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07XG4rXHRpbnQgaWR4ID0gMDtcbitcbitcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuK1x0aWYgKCFtYXB2YWwpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdG4gPSBtYXB2YWwtXHUwMDNlbm9kZTtcbitcdGlmICghbikge1xuK1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdHJldHVybiAyO1xuK1x0fVxuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuK1x0aWYgKG0pXG4rXHRcdGJwZl9vYmpfZHJvcChtKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCI/dGNcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJVbnJlbGVhc2VkIHJlZmVyZW5jZSBpZD0zIGFsbG9jX2luc249e3tbMC05XSt9fVwiKVxuIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlc19vd25pbmdfaW5wdXQodm9pZCAqY3R4KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTE6Mjk6NTguNDI2ODgyMTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODMzNDQ0MDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSXQncyBnb3QgYWNjb21wYW55aW5nIHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYCwgd2hpY2ggaXMgZ29vZCBwcmFjdGljZS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGFyZ3VtZW50cyB3aGVuIHZhbGlkYXRpbmcga2Z1bmNzLlxuXG5TcGVjaWZpY2FsbHksIGl0IHNlZW1zIHdlJ3JlIGFkZGluZyBhIGNydWNpYWwgY2hlY2suICBUaGUgcGF0Y2ggbm93IGNvbnNpZGVycyBgUFRSX1VOVFJVU1RFRGAgZm9yIGByZWctXHUwMDNldHlwZWAuIElmIHRoZSByZWdpc3RlciAoYHJlZ2ApIGhvbGRpbmcgdGhlIGFyZ3VtZW50IGlzIG1hcmtlZCBhcyB1bnRydXN0ZWQsIHdlIGJhaWwgb3V0IHdpdGggYC1FQUNDRVNgLCBwcmV2ZW50aW5nIHBvdGVudGlhbGx5IHJpc2t5IG9wZXJhdGlvbnMuICBUaGF0J3MgYSBzZW5zaWJsZSBhZGRpdGlvbiwgZ3VhcmRpbmcgYWdhaW5zdCB1bnRydXN0ZWQgcG9pbnRlcnMgaW4gdGhpcyBjb250ZXh0LlxuXG5XZSdyZSBhbHNvIGFkanVzdGluZyB0aGUgY29uZGl0aW9uIHRoYXQgc2V0cyBgbWV0YS1cdTAwM2Vhcmdfb3duaW5nX3JlZiA9IHRydWVgLiAgVGhlIG9yaWdpbmFsIGNoZWNrIG1pZ2h0IGhhdmUgYmVlbiB0b28gYnJvYWQuIE5vdywgaXQgc2VlbXMgd2Ugb25seSBzZXQgdGhpcyBmbGFnIGlmIHRoZSB0eXBlIGlzbid0IGEgbm9uLW93bmluZyByZWYgKmFuZCogdGhlIHJlZ2lzdGVyIGlzIGFjdHVhbGx5IHJlZmVyZW5jZWQuIFRoYXQncyBhIG1vcmUgbnVhbmNlZCBhcHByb2FjaCBhbmQgc2hvdWxkIGltcHJvdmUgdGhlIGFjY3VyYWN5IG9mIHRoZSBvd25lcnNoaXAgdHJhY2tpbmcuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQncyB0b3VjaGluZyB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMsIG1lYW5pbmcgdGhpcyBpcyBhIGNoYW5nZSB0aGF0IG5lZWRzICpzaWduaWZpY2FudCogZnV6emluZyB0byBjYXRjaCBhbnkgc3VidGxlIGlzc3VlcyBvciBlZGdlIGNhc2VzLiBUaGlzIG9uZSB3YXJyYW50cyBzb21lIGV4dHJhIHNjcnV0aW55LlxuXG5MZXQncyBsb2NhdGUgd2hlcmUgdGhpcyBjb2RlIGxpdmVzLiBUaGUgZGlmZiBpbmRpY2F0ZXMgaXQncyBpbiBhIGZ1bmN0aW9uIG5hbWVkIGBjaGVja19rZnVuY19hcmdzYC4gSXMgdGhhdCBmdW5jdGlvbiBzdGF0aWM/IFllcywgdGhlIGRpZmYgY2xlYXJseSBzdGF0ZXMgaXQncyBzdGF0aWMuIFRoYXQgbWVhbnMgdGhlIGNvbXBpbGVyIG1pZ2h0IGlubGluZSBpdC4gU28gd2UgbmVlZCB0byBsb29rIGF0IGl0cyBjYWxsZXJzIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDExOjMwOjA1LjI2MDMyOTc0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTI3MDQzMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfa2Z1bmNfYXJnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTExOTEyPXN0YXRpYyBib29sIGNoZWNrX2Nzc190YXNrX2l0ZXJfYWxsb3dsaXN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MjctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTI4OnN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTI5LVxcdFxcdFxcdCAgICBpbnQgaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5MTg9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk5NC1cXHQvKiBDaGVjayB0aGUgYXJndW1lbnRzICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTk1OlxcdGVyciA9IGNoZWNrX2tmdW5jX2FyZ3MoZW52LCBcXHUwMDI2bWV0YSwgaW5zbl9pZHgpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk5Ni1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzI4MS1cXHRcXHRlbHNlXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMjgyOlxcdFxcdFxcdC8qIHNjYWxhci4gZW5zdXJlZCBieSBjaGVja19rZnVuY19hcmdzKCkgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMyODMtXFx0XFx0XFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIHJlZ25vLCB0LVxcdTAwM2VzaXplKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTE6MzA6MDUuNzczMDQxMjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcwMzI5OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyBLZXJuZWwgRnVuY3Rpb24gQXJndW1lbnQgQ2hlY2tzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGNoZWNrX2tmdW5jX2NhbGxgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBjYWxsIHN0cnVjdHVyZS4gVGhlIGNvZGUgdGVsbHMgbWUgdGhhdCBgY2hlY2tfa2Z1bmNfY2FsbGAgY2FsbHMgYGNoZWNrX2tmdW5jX2FyZ3NgLiBUaGF0J3MgdGhlIG9idmlvdXMgbGluaywgYnV0IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqb3RoZXIqIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhpcyBhcmd1bWVudCBjaGVja2luZy5cblxuU28sIG5vdyBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgZnVuY3Rpb25zICpjYWxsKiBgY2hlY2tfa2Z1bmNfY2FsbGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBicm9hZGVyIGNvbnRleHQ7IHdoZXJlIGluIHRoZSBzeXN0ZW0gYXJlIHRoZXNlIGtlcm5lbCBmdW5jdGlvbiBjYWxscyBiZWluZyB2YWxpZGF0ZWQ/IFdoYXQgZXZlbnRzIG9yIHByb2Nlc3NlcyBsZWFkIHRvIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBiZWluZyBpbnZva2VkPyBUaGUgZ29hbCBpcyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIGNhbGwgc3RhY2ssIHNvIEkgY2FuIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2UgYW5kIGltcG9ydGFuY2Ugb2YgdGhpcyBhcmd1bWVudCBjaGVjay4gVGhpcyBpcyBteSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMTozMDowOS4yNDMzNzM1MzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3OTE0ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX2tmdW5jX2NhbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz03MjM4PXN0YXRpYyBpbnQgcHJvY2Vzc19keW5wdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTItXFx0XFx0XFx0ICogRm9yIENPTlNUX1BUUl9UT19EWU5QVFIsIHJlZyBpcyBhbHJlYWR5IHNjcmF0Y2hlZCBieSBjaGVja19yZWdfYXJnXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjczMTM6XFx0XFx0XFx0ICogaW4gY2hlY2tfaGVscGVyX2NhbGwgYW5kIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUgaW4gY2hlY2tfa2Z1bmNfY2FsbC5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzMxNC1cXHRcXHRcXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjkxNj1zdGF0aWMgaW50IGNoZWNrX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubywgY29uc3QgY2hhciAqcmVnX25hbWUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjkxNy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5MTg6c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5MTktXFx0XFx0XFx0ICAgIGludCAqaW5zbl9pZHhfcClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzI0MD1zdGF0aWMgaW50IGRvX2NoZWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgYm9vbCAqZG9fcHJpbnRfc3RhdGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczMDgtXFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzMwOTpcXHRcXHRcXHRcXHRyZXR1cm4gY2hlY2tfa2Z1bmNfY2FsbChlbnYsIGluc24sIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczMTAtXFx0XFx0XFx0cmV0dXJuIGNoZWNrX2hlbHBlcl9jYWxsKGVudiwgaW5zbiwgXFx1MDAyNmVudi1cXHUwMDNlaW5zbl9pZHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMTozMDowOS4zODEyOTYzNTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM3ODA3ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIEJQRiBWZXJpZmljYXRpb24gRmxvdyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgQlBGIHZlcmlmaWNhdGlvbiwgdGhhdCBgYnBmX2NoZWNrYCBmdW5jdGlvbiwgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSXQncyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCwgdGhlIGZpcnN0IHBsYWNlIHRoZSB2ZXJpZmllciBsb29rcy4gQW5kLCBpdCB0aGVuIGNhbGxzIGBkb19jaGVja2AsIHdoaWNoLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgc2VlbXMgdG8gYmUgZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmcgb2YgaW5zdHJ1Y3Rpb24tbGV2ZWwgYW5hbHlzaXMuIE5vdywgYGRvX2NoZWNrYCBjYWxscyBgZG9fY2hlY2tfaW5zbmAsIGluZGljYXRpbmcgYSBwb3NzaWJseSBldmVuIGxvd2VyLWxldmVsLCBpbnN0cnVjdGlvbi1zcGVjaWZpYyBjaGVja2luZy4gQW5kLCBtb3N0IGltcG9ydGFudGx5LCBgZG9fY2hlY2tfaW5zbmAgY2FsbHMgYGNoZWNrX2tmdW5jX2NhbGxgLiBOb3cgbGV0J3MganVzdCBtYWtlIHN1cmUgYGNoZWNrX2tmdW5jX2NhbGxgIGlzIHN0YXRpYy4gWWVzIGl0IGlzLCB3aGljaCBpcyBnb29kLiBTbywgdGhlIHZlcmlmaWNhdGlvbiBpcyBpbml0aWF0ZWQgYXQgYGJwZl9jaGVja2AsIHRyaWNrbGVzIGRvd24gdGhyb3VnaCBhIHNlcmllcyBvZiBpbmNyZWFzaW5nbHkgc3BlY2lmaWMgY2hlY2tzLCBldmVudHVhbGx5IGhpdHRpbmcgYGNoZWNrX2tmdW5jX2NhbGxgIHdoZW4gbmVlZGVkLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gaW4gY29tcGxleCBjb2RlOiBhIGhpZ2gtbGV2ZWwgZW50cnkgcG9pbnQgZm9sbG93ZWQgYnkgYSBzZXJpZXMgb2Ygc3BlY2lhbGl6ZWQgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjMwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDExOjMwOjEzLjIxOTEwNzMyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgzMDU1NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2NoZWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTU9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTc6LyogYnBmX2NoZWNrKCkgaXMgYSBzdGF0aWMgY29kZSBhbmFseXplciB0aGF0IHdhbGtzIGVCUEYgcHJvZ3JhbVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OC0gKiBpbnN0cnVjdGlvbiBieSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyByZWdpc3Rlci9zdGFjayBzdGF0ZS5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg5Nz1zdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19yYnRyZWVfbm9kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTA4LSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MDk6ICogQW55IHNsZWVwYWJsZSBwcm9ncyBhcmUgYWxzbyBzYWZlIHNpbmNlIGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KCkgZW5mb3JjZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkxMC0gKiB0aGVtIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIHNvbWUgc3BlY2lmaWMgaG9vayBwb2ludHMuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4OTY9YnRmX2F0dGFjaF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csIHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGZ1bmNfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5MzAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4OTMxOmludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODkzMi1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MzM2PXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzY2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTM2NzpcXHRyZXQgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChcXHUwMDI2ZW52LVxcdTAwM2Vsb2csIHByb2csIHRndF9wcm9nLCBidGZfaWQsIFxcdTAwMjZ0Z3RfaW5mbyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzY4LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0MzUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NDM2OmludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0MzctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk2MzM9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc3Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3Nzc6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Nzc4LVxcdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzkxLVxcdC8qICdzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudicgY2FuIGJlIGdsb2JhbCwgYnV0IHNpbmNlIGl0J3Mgbm90IHNtYWxsLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTc5MjpcXHQgKiBhbGxvY2F0ZS9mcmVlIGl0IGV2ZXJ5IHRpbWUgYnBmX2NoZWNrKCkgaXMgY2FsbGVkXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzkzLVxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODY2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg2NzpcXHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoZW52LCBhdHRyLCB1YXR0cik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODY4LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODc4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg3OTpcXHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODgwLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODkyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg5MzpcXHRyZXQgPSBicGZfY2hlY2tfY2ZnKGVudik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODk0LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMTozMDoxMy4zNjc0MTY4ODlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjgwMDcyNTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBicGZfY2hlY2tgIGFuZCBSZWZjb3VudGVkIEtQVFJzKipcblxuUmlnaHQsIHNvIGBicGZfY2hlY2tgLi4uIHRoYXQncyB0aGUgY29yZSwgaXNuJ3QgaXQ/IFRoZSBzdGFydGluZyBwb2ludC4gTXkgYnJhaW4ncyBub3cgYnV6emluZyB3aXRoIHRoZSBwb3NzaWJpbGl0aWVzLiBJIG5lZWQgdG8gemVybyBpbiBvbiBhbnl0aGluZyBzcGVjaWZpY2FsbHkgY29ubmVjdGVkIHRvIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAuIFRoYXQgcGFydGljdWxhciBrZnVuYyBhcmd1bWVudCB0eXBlIGlzIGFsd2F5cyBpbnRlcmVzdGluZywgYSB2aXRhbCBhc3BlY3QgdG8gY29uc2lkZXIuIEl0J3Mgb2Z0ZW4gd2hlcmUgdGhlIHJlYWwgbWFnaWMgLSBvciBwb3RlbnRpYWwgcGl0ZmFsbHMgLSBsaWUgd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsIHBvaW50ZXJzIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IHdpdGhpbiBCUEYuIFdoYXQncyB0aGUgY29udGV4dCBoZXJlPyBBcmUgdGhlcmUgbmV3IHVzZXM/IE9wdGltaXphdGlvbj8gU2VjdXJpdHkgaW1wbGljYXRpb25zP1xuXG5BaCwgYW5kIEkgc2VlIHRoZSBwYXRjaCBhbHNvIG1lbnRpb25zIHRlc3RzIGZvciBgYnBmX3JlZmNvdW50X2FjcXVpcmVgLiBUaGF0J3MgaW1wb3J0YW50ISBUZXN0aW5nIGFyb3VuZCByZWZjb3VudGluZyBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IGluIEJQRiwgaXMgKmNydWNpYWwqIGZvciBzdGFiaWxpdHkuIEl0J3MgdGhlIGx5bmNocGluIGZvciBlbnN1cmluZyB3ZSBkb24ndCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIGRhdGEgY29ycnVwdGlvbi4gVGhlIHRlc3RzIHNob3VsZCBiZSBsb29rZWQgaW50byB3aXRoIHJlYWwgY2FyZS4gSG93IHRob3JvdWdoIGFyZSB0aGV5PyBEbyB0aGV5IGNvdmVyIGVkZ2UgY2FzZXM/IEFyZSB0aGVyZSBuZXcgdGVzdCBjYXNlcyBjb3ZlcmluZyByZWZjb3VudGluZyBpbiB0aGUgcmVsZXZhbnQgY29udGV4dD8gVW5kZXJzdGFuZGluZyB0aGUgdGVzdCBzdHJhdGVneSBpcyBwYXJhbW91bnQgZm9yIGtub3dpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjkxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTE6MzA6MTguMDQ3NDkyNDk3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDI2Mjk5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3JlZmNvdW50X2FjcXVpcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmM9MjQ0OT1fX2JwZl9rZnVuYyB2b2lkIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCh2b2lkICpwX19hbGxvYywgdm9pZCAqbWV0YV9faWduKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1NC0vKipcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDU1OiAqIGJwZl9yZWZjb3VudF9hY3F1aXJlKCkgLSB0dXJuIGEgbG9jYWwga3B0ciBpbnRvIGFuIG93bmluZyByZWZlcmVuY2VcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDU2LSAqIEBwX19yZWZjb3VudGVkX2twdHI6IG5vbi1vd25pbmcgbG9jYWwga3B0clxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2My0gKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDY0Ol9fYnBmX2tmdW5jIHZvaWQgKmJwZl9yZWZjb3VudF9hY3F1aXJlKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgc3RydWN0IGJ0Zl9zdHJ1Y3RfbWV0YSAqbWV0YSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDY1LXtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODAtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MTpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgdm9pZCAqbWV0YV9faWduKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODIte1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0ODM6XFx0cmV0dXJuIGJwZl9yZWZjb3VudF9hY3F1aXJlKHBfX3JlZmNvdW50ZWRfa3B0ciwgbWV0YV9faWduKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDg0LX1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4MTM9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCwgS0ZfUkVMRUFTRSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODE0OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVmY291bnRfYWNxdWlyZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfUkNVIHwgS0ZfSU1QTElDSVRfQVJHUylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODE1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9SQ1UpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDgxNi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2xpc3RfcHVzaF9mcm9udCwgS0ZfSU1QTElDSVRfQVJHUylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTAwND1lbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwMDgtXFx0S0ZfYnBmX29ial9kcm9wLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTAwOTpcXHRLRl9icGZfcmVmY291bnRfYWNxdWlyZV9pbXBsLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTAxMDpcXHRLRl9icGZfcmVmY291bnRfYWNxdWlyZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwMTEtXFx0S0ZfYnBmX2xpc3RfcHVzaF9mcm9udF9pbXBsLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDgxPUJURl9JRChmdW5jLCBicGZfb2JqX2Ryb3ApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDgyOkJURl9JRChmdW5jLCBicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTA4MzpCVEZfSUQoZnVuYywgYnBmX3JlZmNvdW50X2FjcXVpcmUpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDg0LUJURl9JRChmdW5jLCBicGZfbGlzdF9wdXNoX2Zyb250X2ltcGwpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExOTE9c3RhdGljIGJvb2wgaXNfYnBmX3BlcmNwdV9vYmpfZHJvcF9rZnVuYyh1MzIgZnVuY19pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE5Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExOTc6c3RhdGljIGJvb2wgaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmModTMyIGZ1bmNfaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTk4LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExOTk6XFx0cmV0dXJuIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZWZjb3VudF9hY3F1aXJlXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIwMDpcXHQgICAgICAgZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbF07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjAxLX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTIyND1zdGF0aWMgYm9vbCBpc19rZnVuY19yZXRfbnVsbChzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjI1LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMjY6XFx0aWYgKGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKG1ldGEtXFx1MDAzZWZ1bmNfaWQpIFxcdTAwMjZcXHUwMDI2IG1ldGEtXFx1MDAzZWFyZ19vd25pbmdfcmVmKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIyNy1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE2MzI9c3RhdGljIGJvb2wgaXNfYnBmX2dyYXBoX2FwaV9rZnVuYyh1MzIgYnRmX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjM1LVxcdCAgICAgICBpc19icGZfcmJ0cmVlX2FwaV9rZnVuYyhidGZfaWQpIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNjM2OlxcdCAgICAgICBpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhidGZfaWQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTYzNy19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI3NDc9c3RhdGljIGludCBjaGVja19zcGVjaWFsX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjgzNS1cXHRcXHRpbnNuX2F1eC1cXHUwMDNla3B0cl9zdHJ1Y3RfbWV0YSA9IHN0cnVjdF9tZXRhO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjgzNjpcXHR9IGVsc2UgaWYgKGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKG1ldGEtXFx1MDAzZWZ1bmNfaWQpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyODM3LVxcdFxcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyOTE4PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxMzgtXFx0XFx0ICAgICAhaXNfYnBmX3BlcmNwdV9vYmpfbmV3X2tmdW5jKG1ldGEuZnVuY19pZCkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxMzk6XFx0XFx0ICAgICAhaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMobWV0YS5mdW5jX2lkKSkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxNDAtXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJhY3F1aXJlIGtlcm5lbCBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gUFRSX1RPX0JURl9JRFxcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk2MzM9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY4MS1cXHRcXHQgICBpc19icGZfcGVyY3B1X29ial9kcm9wX2tmdW5jKGRlc2MtXFx1MDAzZWZ1bmNfaWQpIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjgyOlxcdFxcdCAgIGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKGRlc2MtXFx1MDAzZWZ1bmNfaWQpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjgzLVxcdFxcdHN0cnVjdCBidGZfc3RydWN0X21ldGEgKmtwdHJfc3RydWN0X21ldGEgPSBlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmtwdHJfc3RydWN0X21ldGE7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2OTEtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjkyOlxcdFxcdGlmIChpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhkZXNjLVxcdTAwM2VmdW5jX2lkKSBcXHUwMDI2XFx1MDAyNiAha3B0cl9zdHJ1Y3RfbWV0YSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY5My1cXHRcXHRcXHR2ZXJpZmllcl9idWcoZW52LCBcXFwia3B0cl9zdHJ1Y3RfbWV0YSBleHBlY3RlZCBhdCBpbnNuX2lkeCAlZFxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDExOjMwOjE4LjQ5MDEyNzg3NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODU2OTAyNzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVmVyaWZpY2F0aW9uIExvZ2ljIGZvciBLRnVuYyBBcmd1bWVudHMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIHRlc3RzIHRoYXQgYXJlIGxldmVyYWdpbmcgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCwgd2hpY2ggSSBrbm93IGlzIGEga2Z1bmMuIFRoZSBjb3JlIGNoYW5nZSBoZXJlIGlzIGluIGBjaGVja19rZnVuY19hcmdzYCB0byBoYW5kbGUgdGhvc2UgYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYCBhcmd1bWVudHMuIFRoZSBjcnVjaWFsIHBhcnQgb2YgdGhpcyBpcyB0aGUgdmVyaWZpZXIgbG9naWMuIEkga25vdyBgYnBmX2NoZWNrYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGUgdmVyaWZpZXIsIGFuZCB0aGF0IGl0J3MgY2FsbGVkIGJ5IGBicGZfcHJvZ19sb2FkYCwgd2hpY2ggaXMgdWx0aW1hdGVseSByZWFjaGFibGUgdGhyb3VnaCB0aGUgYGJwZmAgc3lzY2FsbC5cblxuVGhlcmVmb3JlLCB0aGUgb2J2aW91cyBmdXp6aW5nIHRhcmdldCBoZXJlIGlzIGBicGZfcHJvZ19sb2FkYCBpdHNlbGYuIFRoYXQncyB0aGUgZW50cnkgcG9pbnQgdG8gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIHdoaWNoIHNwZWNpZmljIGZ1bmN0aW9uIHdpdGhpbiB0aGUgdmVyaWZpZXIgaXMgdGhlIG1vc3QgcHJvbWlzaW5nPyBgYnBmX2NoZWNrYCBvciBgY2hlY2tfa2Z1bmNfYXJnc2AgYXJlIGxpa2VseSBjYW5kaWRhdGVzLiBCdXQgYGNoZWNrX2tmdW5jX2FyZ3NgIGlzIHN0YXRpYywgc28gSSdsbCBuZWVkIHRvIGxvb2sgYXQgd2hldGhlciBpdCdzIGlubGluZWQuIFRoaXMgbWVhbnMgdGhhdCBgYnBmX2NoZWNrYCBvciBgY2hlY2tfa2Z1bmNfY2FsbGAgaXMgcG90ZW50aWFsbHkgdGhlIGJlc3QgcGxhY2UuXG5cbldhaXQsIGBicGZfY2hlY2tgIGlzIGEgbW9uc3RlciBvZiBhIGZ1bmN0aW9uISBNYXliZSBzb21ldGhpbmcgbW9yZSBncmFudWxhciBsaWtlIGBjaGVja19rZnVuY19jYWxsYCBpcyBiZXR0ZXIuIEl0J3Mgc3RhdGljIGFzIHdlbGwsIGJ1dCBpdCBtaWdodCBub3QgYmUgaW5saW5lZC4gSSBzaG91bGQgY2hlY2sgd2hldGhlciBgY2hlY2tfa2Z1bmNfY2FsbGAgaXMgYWN0dWFsbHkgaW5saW5lZCBvciBub3QuIFRoYXQgd2lsbCBoZWxwIG1lIGRlY2lkZSBvbiB0aGUgb3B0aW1hbCBmdXp6aW5nIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk1OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMTozMDoyNC4zNDcwMzM2OTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTQ1MzIzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19rZnVuY19jYWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzIzOD1zdGF0aWMgaW50IHByb2Nlc3NfZHlucHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MzEyLVxcdFxcdFxcdCAqIEZvciBDT05TVF9QVFJfVE9fRFlOUFRSLCByZWcgaXMgYWxyZWFkeSBzY3JhdGNoZWQgYnkgY2hlY2tfcmVnX2FyZ1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MzEzOlxcdFxcdFxcdCAqIGluIGNoZWNrX2hlbHBlcl9jYWxsIGFuZCBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplIGluIGNoZWNrX2tmdW5jX2NhbGwuXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTQtXFx0XFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5MTY9c3RhdGljIGludCBjaGVja19yZXR1cm5fY29kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8sIGNvbnN0IGNoYXIgKnJlZ19uYW1lKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5MTctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTE4OnN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTE5LVxcdFxcdFxcdCAgICBpbnQgKmluc25faWR4X3ApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTcyNDA9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzA4LVxcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczMDk6XFx0XFx0XFx0XFx0cmV0dXJuIGNoZWNrX2tmdW5jX2NhbGwoZW52LCBpbnNuLCBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzEwLVxcdFxcdFxcdHJldHVybiBjaGVja19oZWxwZXJfY2FsbChlbnYsIGluc24sIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTE6MzA6MjQuNDgyNDkyNzIxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDEzNTI3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBUYXJnZXRzIGZvciBJbnNwZWN0aW9uKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiBhIGdvb2QgZW50cnkgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCwgZ2l2ZW4gdGhhdCBpdCdzIGEga2Z1bmMgYW5kIHRoZXJlZm9yZSBkaXJlY3RseSBpbnZva2VkIGZyb20gQlBGIHByb2dyYW1zLiBIb3dldmVyLCB0aGUgbW9kaWZpY2F0aW9uIGluIHF1ZXN0aW9uIGFmZmVjdHMgdGhlIHZlcmlmaWVyIGxvZ2ljIGl0c2VsZiwgbm90IHRoZSBkaXJlY3QgY2FsbC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gc2hpZnQgbXkgZm9jdXMuIFRoZSByZWFsIGFjdGlvbiBzZWVtcyB0byBoYXBwZW4gd2l0aGluIGBjaGVja19rZnVuY19hcmdzYCDigJMgdGhhdCdzIHdoZXJlIHRoZSBhcmd1bWVudCB2YWxpZGF0aW9uIGlzIHBlcmZvcm1lZC5cblxuU28sIGxldCdzIHJlZmluZSBteSBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scy4gV2hpbGUgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCBpcyByZWxhdGVkLCBpdCdzIG5vdCB0aGUgY29yZS4gUGVyaGFwcyBgYnBmX2NoZWNrYCBpcyB0aGUgbW9yZSByZWxldmFudCBmdW5jdGlvbiB0byBleGFtaW5lLCBvciBldmVuIGBicGZfcHJvZ19sb2FkYCwgc2luY2UgdGhhdCdzIHRoZSBwb2ludCB3aGVyZSBCUEYgcHJvZ3JhbXMgYXJlIGFjdHVhbGx5IGxvYWRlZCBhbmQgY2hlY2tlZC5cblxuV2FpdCBhIHNlY29uZC4uLkknbSBnZXR0aW5nIGNsb3Nlci4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYGJwZl9jaGVja2AgKmlzKiB0aGUgbWFpbiB2ZXJpZmllciBmdW5jdGlvbi4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGBicGZfY2hlY2tgLlxuXG5CZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIGFsc28gY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB0aGF0IGluZmx1ZW5jZSB0aGUgdmVyaWZpZXIncyBiZWhhdmlvci4gUmlnaHQsIEJQRiBpcyBlbmFibGVkIHZpYSBgQ09ORklHX0JQRl9TWVNDQUxMYC4gSSdsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgc3RhcnQgdG8gdHJhY2UgdGhpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA2MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMTozMDoyOC44ODM4NDc2NzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MTcwMzA2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMTozMDoyOC45ODMwMzIzOTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMjE3NTY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZmluZGluZyB0aG9zZSBCUEYgY29uZmlndXJhdGlvbiBvcHRpb25zOlxuXG4qKkJQRiBDb25maWd1cmF0aW9uIEh1bnQqKlxuXG5BbHJpZ2h0LCB3aGVyZSB3b3VsZCBJIGV4cGVjdCB0byBmaW5kIHRoZXNlIEJQRiBjb25maWd1cmF0aW9ucz8gR2l2ZW4gdGhhdCBCUEYgaXMgYSBjb3JlIHBhcnQgb2YgdGhlIGtlcm5lbCwgYW5kIGZ1bmRhbWVudGFsbHksIGl0IG5lZWRzIHRvIGJlIGNvbmZpZ3VyZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMuIE5vdywgd2hlcmUgd291bGQgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSBiZT8gSG1tLCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgd291bGQgYmUgdW5kZXIgdGhlIGBrZXJuZWxgIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknZCBhbnRpY2lwYXRlIHRoZSBjb3JlIEJQRiBvcHRpb25zIHRvIHJlc2lkZS4gSG93ZXZlciwgaXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSBhcmUgc29tZSBvdmVyYXJjaGluZyBpbml0aWFsIG9wdGlvbnMsIGFuZCB0aG9zZSBtYXkgd2VsbCBiZSBkZWNsYXJlZCBpbiBgaW5pdC9LY29uZmlnYCB0byBtYW5hZ2Uga2VybmVsIGJ1aWxkIHNldHRpbmdzLiBJJ2xsIG1ha2UgYSBtZW50YWwgbm90ZSB0byBjaGVjayBib3RoIGxvY2F0aW9ucyB0byBiZSB0aG9yb3VnaCBhbmQgZW5zdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZyBjcnVjaWFsLiBUaGF0IHNob3VsZCBjb3ZlciB0aGUgbWFpbiBhcmVhcyBmb3IgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MzIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMTozMDozMi4yMTUyMTA3NjNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzQ5NTk3OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDExOjMwOjM0LjU5MDE3NDQyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjkyODg2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgYSBCUEYgVmVyaWZpZXIgQ2hhbmdlKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBoaXR0aW5nIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBnb2VzIHRvIHRoZSBpbXBhY3QuIFRoZSB2ZXJpZmllciBpcyB0aGUgKmdhdGVrZWVwZXIqIGZvciBCUEYgY29kZSBlbnRlcmluZyB0aGUga2VybmVsLCBzbyBhbnkgbW9kaWZpY2F0aW9uIGhlcmUgd2FycmFudHMgaW1tZWRpYXRlIHNjcnV0aW55LiBNeSBmaXJzdCB0aG91Z2h0IGlzOiAqaXMgdGhpcyBwYXRoIGNvbmRpdGlvbmFsPyogQXJlIHRoZXJlIGFueSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQsIGlmIGRpc2FibGVkLCB3b3VsZCBtYWtlIHRoaXMgY29kZSAqbm90KiBnZXQgY29tcGlsZWQgb3IgaW5jbHVkZWQ/IEtub3dpbmcgdGhlIGNvbmZpZyBvcHRpb25zIHRoYXQgaW5mbHVlbmNlIHRoaXMgZmlsZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlIGFuZCBpZGVudGlmeWluZyBwb3RlbnRpYWwgaW1wYWN0cyBhY3Jvc3MgZGlmZmVyZW50IGtlcm5lbCBidWlsZHMgYW5kIGRpc3RyaWJ1dGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZyBvcHRpb25zLCBpZiBhbnksIGd1YXJkIHRoYXQgZmlsZS4gVGhhdCB3b3VsZCBiZSB0aGUgZmlyc3QgcGllY2Ugb2YgaW5mb3JtYXRpb24gSSB3b3VsZCBnYXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODY4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTE6MzA6MzguMTU5NDY1OTYxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIwNTY4OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmVyaWZpZXJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDExOjMwOjM4LjI3MTUyODEzNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Nzg3MTI4NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUncyBteSB0YWtlLiBJdCdzIGNsZWFyIHRoYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSByZXF1aXJlbWVudCwgb2J2aW91c2x5LiBUaGUgcGF0Y2ggaXRzZWxmIGlzIGZ1bmN0aW9uYWw7IGl0J3MgYSBtb2RpZmljYXRpb24gdG8gdGhlIEJQRiB2ZXJpZmllciB0aGF0IGFkZHJlc3NlcyBhIHNlY3VyaXR5IGNvbmNlcm4gd2l0aCB1bnRydXN0ZWQgcmVmY291bnRlZCBrcHRycyBhbmQgY29ycmVjdHMgYW4gaXNzdWUgaW4gdGhlIGBtZXRhLVx1MDAzZWFyZ19vd25pbmdfcmVmYCBhc3NpZ25tZW50LiBUaGlzIGlzIGRlZmluaXRlbHkgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgYGJwZl9jaGVja2AsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgdmVyaWZpZXIncyBjb3JlIGxvZ2ljIHJlc2lkZXMgYW5kIHdoZXJlIHRoZSBrZXkgY2hlY2tzIGFyZSBwZXJmb3JtZWQuIEhvd2V2ZXIsIGBicGZfcmVmY291bnRfYWNxdWlyZWAgaXMgYWxzbyBpbXBvcnRhbnQuIEl0J3MgdGhlIGtmdW5jIHRoYXQncyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gaGFuZGxlIHRoZSBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGFyZ3VtZW50IHR5cGUuIEl0IG1ha2VzIHNlbnNlIHRvIGluY2x1ZGUgaXQgYmVjYXVzZSB0aGF0J3MgdGhlIHJ1bnRpbWUgZnVuY3Rpb24gdGhlIHZlcmlmaWVyIGlzIHNjcnV0aW5pemluZyBhcmd1bWVudHMgZm9yLCBldmVuIHRob3VnaCBJJ3ZlIGhhZCB0byBjb3JyZWN0IG15c2VsZiBhbmQgcmVtaW5kIG15c2VsZiB0aGF0IGl0J3MgdGhlIHZlcmlmaWVyIGNoZWNraW5nIGF0IGxvYWQgdGltZS4gRnV6emluZyB0aGUgdmVyaWZpZXIgKmlzKiBkb25lIHRocm91Z2ggbG9hZGluZyBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIHdoeSBgYnBmX2NoZWNrYCBpcyB0aGUgYmVzdCBwcmltYXJ5IGZvY3VzLiBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGlzIHJlbGV2YW50IGFzIGl0J3MgdGhlIGtmdW5jIGNhbGxlZCBpbiB0aGUgdGVzdHMuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgcmUtZXhhbWluZSB0aGUgY29kZSBzbmlwcGV0IGFnYWluOlxuXG5gYGBjXG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI6XG4rXHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBQVFJfVU5UUlVTVEVEKSB7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyBhbiB1bnRydXN0ZWQgcmVmY291bnRlZCBrcHRyXFxuXCIsXG4rXHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4rXHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbitcdFx0XHR9XG4gXHRcdFx0aWYgKCF0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVx1MDAzZXR5cGUpKSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlxcblwiLFxuIFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdGlmICghdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkpXG4rXHRcdFx0aWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjYgcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKVxuIFx0XHRcdFx0bWV0YS1cdTAwM2Vhcmdfb3duaW5nX3JlZiA9IHRydWU7XG5gYGBcblxuUmlnaHQsIHNvIHRoaXMgaXMgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYSBmbGF3IGluIHRoZSB2ZXJpZmllci4gVGhlIHBhdGNoJ3MgaW1wYWN0IGlzIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYywgd2hpY2ggaGFuZGxlcyBrZnVuYyBhcmd1bWVudHMsIGFuZCB0aGlzIGlzIHVsdGltYXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIEJQRiBwcm9ncmFtcyBhcmUgbG9hZGVkLiBJdCdzIGNyaXRpY2FsIHRvIGVuc3VyZSB0aGlzIGNvZGUgcGF0aCBpcyByb2J1c3QgYWdhaW5zdCBtYWxpY2lvdXMgQlBGIHByb2dyYW1zLlxuXG5UaGUgaW1wb3J0YW50IHBvaW50cyBhcmU6IGBCUEZfU1lTQ0FMTGAgZW5hYmxlZCwgYW5kIG15IGZvY3VzIHN5bWJvbHMgd2lsbCBiZSBgYnBmX2NoZWNrYCwgYW5kIGBicGZfcmVmY291bnRfYWNxdWlyZWAuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGlmIGBicGZfcmVmY291bnRfYWNxdWlyZWAgaXMgZXhwb3J0ZWQgYW5kIGF2YWlsYWJsZSBmb3IgdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI4MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMTozMDo0OC4wNTg2NTk0M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4ODM4MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9yZWZjb3VudF9hY3F1aXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jPTI0NDk9X19icGZfa2Z1bmMgdm9pZCBicGZfcGVyY3B1X29ial9kcm9wX2ltcGwodm9pZCAqcF9fYWxsb2MsIHZvaWQgKm1ldGFfX2lnbilcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTQtLyoqXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ1NTogKiBicGZfcmVmY291bnRfYWNxdWlyZSgpIC0gdHVybiBhIGxvY2FsIGtwdHIgaW50byBhbiBvd25pbmcgcmVmZXJlbmNlXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1Ni0gKiBAcF9fcmVmY291bnRlZF9rcHRyOiBub24tb3duaW5nIGxvY2FsIGtwdHJcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NjMtICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ2NDpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZSh2b2lkICpwX19yZWZjb3VudGVkX2twdHIsIHN0cnVjdCBidGZfc3RydWN0X21ldGEgKm1ldGEpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2NS17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDgwLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0ODE6X19icGZfa2Z1bmMgdm9pZCAqYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbCh2b2lkICpwX19yZWZjb3VudGVkX2twdHIsIHZvaWQgKm1ldGFfX2lnbilcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDgyLXtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDgzOlxcdHJldHVybiBicGZfcmVmY291bnRfYWNxdWlyZShwX19yZWZjb3VudGVkX2twdHIsIG1ldGFfX2lnbik7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4NC19XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODEzPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfcGVyY3B1X29ial9kcm9wX2ltcGwsIEtGX1JFTEVBU0UpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDgxNDpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlZmNvdW50X2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1JDVSB8IEtGX0lNUExJQ0lUX0FSR1MpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDgxNTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfUkNVKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4MTYtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9saXN0X3B1c2hfZnJvbnQsIEtGX0lNUExJQ0lUX0FSR1MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDExOjMwOjQ4LjQ4NzUwMjIyOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzI2NjI1MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGBicGZfcmVmY291bnRfYWNxdWlyZWAgYW5kIHRoZSBCUEYgVmVyaWZpZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBicGZfcmVmY291bnRfYWNxdWlyZWAgaXMgYSBgX19icGZfa2Z1bmNgLCBtZWFuaW5nIGl0J3MgYSBub24tc3RhdGljIGtlcm5lbCBmdW5jdGlvbiB0aGF0J3MgZXhwb3NlZCBmb3IgQlBGIHByb2dyYW1zLiBNeSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgdW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHZlcmlmaWVyLCBwYXJ0aWN1bGFybHkgYGJwZl9jaGVja2AsIHdoaWNoIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB2YWxpZGF0aW5nIEJQRiBwcm9ncmFtcy4gSSdtIHRyZWF0aW5nIGBicGZfY2hlY2tgIGFuZCBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGFzIG15IEZvY3VzU3ltYm9scyBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgaW5pdGlhbCBjbHVlIHBvaW50cyB0byBgQlBGX1NZU0NBTExgLCBhbmQgSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgZWxzZS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgZW5hYmxpbmcgY29uZmlncyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblRvIGdldCBhIGJldHRlciBncmlwIG9uIGhvdyBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGlzIHVzZWQsIEkgc2hvdWxkIGNoZWNrIHRoZSB0ZXN0IGZpbGVzLiBCYXNlZCBvbiB0aGUgZmlsZSBwYXRoLCB0aGUgdGVzdHMgc2hvdWxkIGJlIGxvY2F0ZWQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuY2AuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoaXMgZnVuY3Rpb25hbGl0eSBieSBsb29raW5nIGF0IGhvdyBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGlzIHVzZWQuXG5cbkxhc3RseSwgSSBuZWVkIHRvIGNvbnNpZGVyIGRlcGVuZGVuY2llcy4gRG9lcyBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIHJlcXVpcmUgYW55IG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gYmUgZW5hYmxlZD8gSWYgc28sIGlkZW50aWZ5aW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBjb21wbGV0ZSBvcGVyYXRpb25hbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEyMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMTozMDo1My4yMTQxMzE0MjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjY5Mjc4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcmVmY291bnRfYWNxdWlyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuYz0yNDQ5PV9fYnBmX2tmdW5jIHZvaWQgYnBmX3BlcmNwdV9vYmpfZHJvcF9pbXBsKHZvaWQgKnBfX2FsbG9jLCB2b2lkICptZXRhX19pZ24pXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDU0LS8qKlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NTU6ICogYnBmX3JlZmNvdW50X2FjcXVpcmUoKSAtIHR1cm4gYSBsb2NhbCBrcHRyIGludG8gYW4gb3duaW5nIHJlZmVyZW5jZVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTYtICogQHBfX3JlZmNvdW50ZWRfa3B0cjogbm9uLW93bmluZyBsb2NhbCBrcHRyXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDYzLSAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NjQ6X19icGZfa2Z1bmMgdm9pZCAqYnBmX3JlZmNvdW50X2FjcXVpcmUodm9pZCAqcF9fcmVmY291bnRlZF9rcHRyLCBzdHJ1Y3QgYnRmX3N0cnVjdF9tZXRhICptZXRhKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NjUte1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4MC1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDgxOl9fYnBmX2tmdW5jIHZvaWQgKmJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwodm9pZCAqcF9fcmVmY291bnRlZF9rcHRyLCB2b2lkICptZXRhX19pZ24pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4Mi17XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MzpcXHRyZXR1cm4gYnBmX3JlZmNvdW50X2FjcXVpcmUocF9fcmVmY291bnRlZF9rcHRyLCBtZXRhX19pZ24pO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODQtfVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDgxMz1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3BlcmNwdV9vYmpfZHJvcF9pbXBsLCBLRl9SRUxFQVNFKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4MTQ6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9SQ1UgfCBLRl9JTVBMSUNJVF9BUkdTKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4MTU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1JDVSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODE2LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbGlzdF9wdXNoX2Zyb250LCBLRl9JTVBMSUNJVF9BUkdTKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDA0PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTAwOC1cXHRLRl9icGZfb2JqX2Ryb3AsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDA5OlxcdEtGX2JwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDEwOlxcdEtGX2JwZl9yZWZjb3VudF9hY3F1aXJlLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTAxMS1cXHRLRl9icGZfbGlzdF9wdXNoX2Zyb250X2ltcGwsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEwODE9QlRGX0lEKGZ1bmMsIGJwZl9vYmpfZHJvcClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwODI6QlRGX0lEKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDgzOkJURl9JRChmdW5jLCBicGZfcmVmY291bnRfYWNxdWlyZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwODQtQlRGX0lEKGZ1bmMsIGJwZl9saXN0X3B1c2hfZnJvbnRfaW1wbClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTE5MT1zdGF0aWMgYm9vbCBpc19icGZfcGVyY3B1X29ial9kcm9wX2tmdW5jKHUzMiBmdW5jX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTk2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE5NzpzdGF0aWMgYm9vbCBpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyh1MzIgZnVuY19pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExOTgte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE5OTpcXHRyZXR1cm4gZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JlZmNvdW50X2FjcXVpcmVdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjAwOlxcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVmY291bnRfYWNxdWlyZV9pbXBsXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyMDEtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjI0PXN0YXRpYyBib29sIGlzX2tmdW5jX3JldF9udWxsKHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyMjUte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIyNjpcXHRpZiAoaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMobWV0YS1cXHUwMDNlZnVuY19pZCkgXFx1MDAyNlxcdTAwMjYgbWV0YS1cXHUwMDNlYXJnX293bmluZ19yZWYpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjI3LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTYzMj1zdGF0aWMgYm9vbCBpc19icGZfZ3JhcGhfYXBpX2tmdW5jKHUzMiBidGZfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE2MzUtXFx0ICAgICAgIGlzX2JwZl9yYnRyZWVfYXBpX2tmdW5jKGJ0Zl9pZCkgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE2MzY6XFx0ICAgICAgIGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKGJ0Zl9pZCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjM3LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjc0Nz1zdGF0aWMgaW50IGNoZWNrX3NwZWNpYWxfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX2FyZ19tZXRhICptZXRhLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyODM1LVxcdFxcdGluc25fYXV4LVxcdTAwM2VrcHRyX3N0cnVjdF9tZXRhID0gc3RydWN0X21ldGE7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyODM2OlxcdH0gZWxzZSBpZiAoaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMobWV0YS1cXHUwMDNlZnVuY19pZCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI4MzctXFx0XFx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5MTg9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzEzOC1cXHRcXHQgICAgICFpc19icGZfcGVyY3B1X29ial9uZXdfa2Z1bmMobWV0YS5mdW5jX2lkKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzEzOTpcXHRcXHQgICAgICFpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhtZXRhLmZ1bmNfaWQpKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE0MC1cXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImFjcXVpcmUga2VybmVsIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBQVFJfVE9fQlRGX0lEXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTYzMz1pbnQgYnBmX2ZpeHVwX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjgxLVxcdFxcdCAgIGlzX2JwZl9wZXJjcHVfb2JqX2Ryb3Bfa2Z1bmMoZGVzYy1cXHUwMDNlZnVuY19pZCkgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2ODI6XFx0XFx0ICAgaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMoZGVzYy1cXHUwMDNlZnVuY19pZCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2ODMtXFx0XFx0c3RydWN0IGJ0Zl9zdHJ1Y3RfbWV0YSAqa3B0cl9zdHJ1Y3RfbWV0YSA9IGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ua3B0cl9zdHJ1Y3RfbWV0YTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY5MS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2OTI6XFx0XFx0aWYgKGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKGRlc2MtXFx1MDAzZWZ1bmNfaWQpIFxcdTAwMjZcXHUwMDI2ICFrcHRyX3N0cnVjdF9tZXRhKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjkzLVxcdFxcdFxcdHZlcmlmaWVyX2J1ZyhlbnYsIFxcXCJrcHRyX3N0cnVjdF9tZXRhIGV4cGVjdGVkIGF0IGluc25faWR4ICVkXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTE6MzA6NTMuMzc2ODI4MDM3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTE3MzA1MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkJQRiBIZWxwZXIgRnVuY3Rpb24gTG9jYXRpb24gXHUwMDI2IENvbXBpbGF0aW9uIFZlcmlmaWNhdGlvbioqXG5cbkFscmlnaHQsIEknbSB0cnlpbmcgdG8gbmFpbCBkb3duIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbiBmb3IgQlBGIGhlbHBlciBmdW5jdGlvbnMuIFRoZSBjb2RlIGlzIGNsZWFybHkgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gTm93IHRoZSBxdWVzdGlvbiBpcywgKmhvdyogaXMgdGhhdCBmaWxlIGJ1aWx0PyBJcyBpdCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbj8gTGV0J3MgY2hlY2suLi4gQWhhISBZZXMsIGxvb2tpbmcgYXQgdGhlIGJ1aWxkIHN5c3RlbSBkaXJlY3RpdmVzLCBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyAuLi5gIGluZGljYXRlcyB0aGUga2V5LiBJdCBsb29rcyBsaWtlIGBoZWxwZXJzLmNgIGlzIGluZGVlZCBidWlsdCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFRoYXQgY29uZmlybXMgaXQuXG5cblRoZXJlZm9yZSwgZW5zdXJpbmcgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzZXQgaXMgdGhlIHNvbGUgcmVxdWlyZW1lbnQgaW4gdGhpcyBjYXNlLiBXaXRoIHRoYXQgZXN0YWJsaXNoZWQsIEkgc2hvdWxkIG5vdyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTM3LCJPdXRwdXRUb2tlbnMiOjE0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDExOjMwOjU4LjQ2ODU2MDk0NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODYwNjcyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImJwZl9yZWZjb3VudF9hY3F1aXJlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byByZWplY3QgdW50cnVzdGVkIHJlZmNvdW50ZWQga3B0cnMgYW5kIGZpeGVzIHRoZSBhc3NpZ25tZW50IG9mIGBtZXRhLVxcdTAwM2Vhcmdfb3duaW5nX3JlZmAgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgaGFuZGxlcyBrZnVuYyBhcmd1bWVudHMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJicGZfcmVmY291bnRfYWNxdWlyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gcmVqZWN0IHVudHJ1c3RlZCByZWZjb3VudGVkIGtwdHJzIGFuZCBmaXhlcyB0aGUgYXNzaWdubWVudCBvZiBgbWV0YS1cXHUwMDNlYXJnX293bmluZ19yZWZgIGZvciBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGFyZ3VtZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGhhbmRsZXMga2Z1bmMgYXJndW1lbnRzLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgd2hlbiBsb2FkaW5nIEJQRiBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow8xk84[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 11:01:42 +0000 UTC FinishedAt: 2026-07-27 11:31:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "0ce37745d4bfbc493f718169c3974898ffec8ee7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "a3cab754-652d-46d1-8f22-12a9e416a59d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check", "bpf_refcount_acquire" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O2JwZl9yZWZjb3VudF9hY3F1aXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gcmVqZWN0IHVudHJ1c3RlZCByZWZjb3VudGVkIGtwdHJzIGFuZCBmaXhlcyB0aGUgYXNzaWdubWVudCBvZiBgbWV0YS1cdTAwM2Vhcmdfb3duaW5nX3JlZmAgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgaGFuZGxlcyBrZnVuYyBhcmd1bWVudHMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjI5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjcwNTk2MmRhYjY4MDY3NzhmZmI2MDU5MjdkMTExMjVhZDg2NTA4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDExOjI5OjU1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggN2FhNDczNDJkYzY1OWMuLjYzYjFkOTk3ZmU4MDQ0IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xMjQxNCwxMiAmIzQzOzEyNDE0LDE3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfXG4gXHRcdFx0bWV0YS1cdTAwM2VzdWJwcm9nbm8gPSByZWctXHUwMDNlc3VicHJvZ25vO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOlxuJiM0MztcdFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgXHUwMDI2IFBUUl9VTlRSVVNURUQpIHtcbiYjNDM7XHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgaXMgYW4gdW50cnVzdGVkIHJlZmNvdW50ZWQga3B0clxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRpZiAoIXR5cGVfaXNfcHRyX2FsbG9jX29iaihyZWctXHUwMDNldHlwZSkpIHtcbiBcdFx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDslcyBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlxcblwmIzM0OyxcbiBcdFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbi1cdFx0XHRpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpKVxuJiM0MztcdFx0XHRpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVx1MDAzZXR5cGUpIFx1MDAyNlx1MDAyNiByZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykpXG4gXHRcdFx0XHRtZXRhLVx1MDAzZWFyZ19vd25pbmdfcmVmID0gdHJ1ZTtcbiBcbiBcdFx0XHRyZWMgPSByZWdfYnRmX3JlY29yZChyZWcpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuY1xuaW5kZXggNjE5MDZmNDgwMjVjYzcuLmZkMzUwOTMyODVjMGRiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcbkBAIC0yMyw2ICYjNDM7MjMsMTUgQEAgc3RydWN0IG1hcF92YWx1ZSB7XG4gXHRzdHJ1Y3Qgbm9kZV9kYXRhIF9fa3B0ciAqbm9kZTtcbiB9O1xuIFxuJiM0MztzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IHtcbiYjNDM7XHRsb25nIGtleTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHtcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5IF9fa3B0ciAqbm9kZTtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHtcbiBcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuIFx0X190eXBlKGtleSwgaW50KTtcbkBAIC0zMCw2ICYjNDM7MzksMTMgQEAgc3RydWN0IHtcbiBcdF9fdWludChtYXhfZW50cmllcywgMik7XG4gfSBzdGFzaGVkX25vZGVzIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4gXG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X190eXBlKGtleSwgaW50KTtcbiYjNDM7XHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiYjNDM7fSBzdGFzaGVkX3JlZmNvdW50X29ubHkgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4gc3RydWN0IG5vZGVfYWNxdWlyZSB7XG4gXHRsb25nIGtleTtcbiBcdGxvbmcgZGF0YTtcbkBAIC04MzIsNiAmIzQzOzg0OCw1MSBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0O3RjXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX293bmluZ19pbnB1dF9ub19udWxsX2NoZWNrKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptO1xuJiM0MztcbiYjNDM7XHRuID0gYnBmX29ial9uZXcodHlwZW9mKCpuKSk7XG4mIzQzO1x0aWYgKCFuKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcbiYjNDM7XHRicGZfb2JqX2Ryb3AobSk7XG4mIzQzO1x0YnBmX29ial9kcm9wKG4pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjXCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl9udWxsX2NoZWNrZWQodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XG4mIzQzO1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07XG4mIzQzO1x0aW50IGlkeCA9IDA7XG4mIzQzO1xuJiM0MztcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuJiM0MztcdGlmICghbWFwdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuJiM0MztcdGlmICghbikge1xuJiM0MztcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1x0fVxuJiM0MztcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcbiYjNDM7XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmICghbSlcbiYjNDM7XHRcdHJldHVybiAzO1xuJiM0MztcdGJwZl9vYmpfZHJvcChtKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGxvbmcgX19zdGFzaF9tYXBfZW1wdHlfeGNoZyhzdHJ1Y3Qgbm9kZV9kYXRhICpuLCBpbnQgaWR4KVxuIHtcbiBcdHN0cnVjdCBtYXBfdmFsdWUgKm1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9ub2RlcywgXHUwMDI2aWR4KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG5pbmRleCAwMjRlZjJhYWUyMDA4Mi4uODBiOTJkN2VjOWNhYmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbkBAIC0xOSw2ICYjNDM7MTksMTUgQEAgc3RydWN0IG5vZGVfcmVmY291bnRlZCB7XG4gXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuIH07XG4gXG4mIzQzO3N0cnVjdCBub2RlX3JlZmNvdW50X29ubHkge1xuJiM0MztcdGxvbmcga2V5O1xuJiM0MztcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkge1xuJiM0MztcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgX19rcHRyICpub2RlO1xuJiM0Mzt9O1xuJiM0MztcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XG4gZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07XG4gXG5AQCAtMjgsNiAmIzQzOzM3LDEzIEBAIHByaXZhdGUoQSkgc3RydWN0IGJwZl9yYl9yb290IGdyb290IF9fY29udGFpbnMobm9kZV9hY3F1aXJlLCBub2RlKTtcbiBwcml2YXRlKEIpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGxvY2s7XG4gcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX2xpc3RfaGVhZCBoZWFkIF9fY29udGFpbnMobm9kZV9yZWZjb3VudGVkLCBsaXN0KTtcbiBcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCBpbnQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5KTtcbiYjNDM7XHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuJiM0Mzt9IHN0YXNoZWRfcmVmY291bnRfb25seSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiBzdGF0aWMgYm9vbCBsZXNzKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxuIHtcbiBcdHN0cnVjdCBub2RlX2FjcXVpcmUgKm5vZGVfYTtcbkBAIC04MCw2ICYjNDM7OTYsNjQgQEAgbG9uZyByZWZjb3VudF9hY3F1aXJlX21heWJlX251bGwodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7P3RjXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UG9zc2libHkgTlVMTCBwb2ludGVyIHBhc3NlZCB0byB0cnVzdGVkIFIxXCYjMzQ7KVxuJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX3VuY2hlY2tlZF9kcm9wKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xuJiM0MztcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKnRtcCwgKm4sICptO1xuJiM0MztcdGludCBpZHggPSAwO1xuJiM0MztcbiYjNDM7XHR0bXAgPSBicGZfb2JqX25ldyh0eXBlb2YoKnRtcCkpO1xuJiM0MztcdGlmICghdG1wKVxuJiM0MztcdFx0cmV0dXJuIDM7XG4mIzQzO1x0YnBmX29ial9kcm9wKHRtcCk7XG4mIzQzO1xuJiM0MztcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuJiM0MztcdGlmICghbWFwdmFsKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuJiM0MztcdGlmICghbikge1xuJiM0MztcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1x0fVxuJiM0MztcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcbiYjNDM7XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGJwZl9vYmpfZHJvcChtKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDs/dGNcJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtpcyBhbiB1bnRydXN0ZWQgcmVmY291bnRlZCBrcHRyXCYjMzQ7KVxuJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcbiYjNDM7XHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcbiYjNDM7XHRpbnQgaWR4ID0gMDtcbiYjNDM7XG4mIzQzO1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFx1MDAyNmlkeCk7XG4mIzQzO1x0aWYgKCFtYXB2YWwpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRuID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4mIzQzO1x0aWYgKCFuKSB7XG4mIzQzO1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XHR9XG4mIzQzO1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XG4mIzQzO1x0aWYgKG0pXG4mIzQzO1x0XHRicGZfb2JqX2Ryb3AobSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDs/dGNcJiMzNDspXG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O1VucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTMgYWxsb2NfaW5zbj17e1swLTldJiM0Mzt9fVwmIzM0OylcbiBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMToyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfY2hlY2smIzM0OywKICAgICYjMzQ7YnBmX3JlZmNvdW50X2FjcXVpcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byByZWplY3QgdW50cnVzdGVkIHJlZmNvdW50ZWQga3B0cnMgYW5kIGZpeGVzIHRoZSBhc3NpZ25tZW50IG9mIGBtZXRhLVx1MDAzZWFyZ19vd25pbmdfcmVmYCBmb3IgYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYCBhcmd1bWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBoYW5kbGVzIGtmdW5jIGFyZ3VtZW50cywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNzA1OTYyZGFiNjgwNjc3OGZmYjYwNTkyN2QxMTEyNWFkODY1MDhmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjcgMTE6Mjk6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggN2FhNDczNDJkYzY1OWMuLjYzYjFkOTk3ZmU4MDQ0IDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC0xMjQxNCwxMiAmIzQzOzEyNDE0LDE3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfCiAJCQltZXRhLSZndDtzdWJwcm9nbm8gPSByZWctJmd0O3N1YnByb2dubzsKIAkJCWJyZWFrOwogCQljYXNlIEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSOgomIzQzOwkJCWlmIChyZWctJmd0O3R5cGUgJmFtcDsgUFRSX1VOVFJVU1RFRCkgewomIzQzOwkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBpcyBhbiB1bnRydXN0ZWQgcmVmY291bnRlZCBrcHRyXG4mIzM0OywKJiM0MzsJCQkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiYjNDM7CQkJCXJldHVybiAtRUFDQ0VTOwomIzQzOwkJCX0KIAkJCWlmICghdHlwZV9pc19wdHJfYWxsb2Nfb2JqKHJlZy0mZ3Q7dHlwZSkpIHsKIAkJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlxuJiMzNDssCiAJCQkJCXJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9Ci0JCQlpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLSZndDt0eXBlKSkKJiM0MzsJCQlpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLSZndDt0eXBlKSAmYW1wOyZhbXA7IHJlZ19pc19yZWZlcmVuY2VkKGVudiwgcmVnKSkKIAkJCQltZXRhLSZndDthcmdfb3duaW5nX3JlZiA9IHRydWU7CiAKIAkJCXJlYyA9IHJlZ19idGZfcmVjb3JkKHJlZyk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMKaW5kZXggNjE5MDZmNDgwMjVjYzcuLmZkMzUwOTMyODVjMGRiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jCkBAIC0yMyw2ICYjNDM7MjMsMTUgQEAgc3RydWN0IG1hcF92YWx1ZSB7CiAJc3RydWN0IG5vZGVfZGF0YSBfX2twdHIgKm5vZGU7CiB9OwogCiYjNDM7c3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7CiYjNDM7CWxvbmcga2V5OwomIzQzOwlzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHsKJiM0MzsJc3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB7CiAJX191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7CiAJX190eXBlKGtleSwgaW50KTsKQEAgLTMwLDYgJiM0MzszOSwxMyBAQCBzdHJ1Y3QgewogCV9fdWludChtYXhfZW50cmllcywgMik7CiB9IHN0YXNoZWRfbm9kZXMgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiAKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzO30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwogc3RydWN0IG5vZGVfYWNxdWlyZSB7CiAJbG9uZyBrZXk7CiAJbG9uZyBkYXRhOwpAQCAtODMyLDYgJiM0Mzs4NDgsNTEgQEAgbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDt0YyYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2xvbmcgcmVmY291bnRfYWNxdWlyZV9vd25pbmdfaW5wdXRfbm9fbnVsbF9jaGVjayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTsKJiM0MzsKJiM0MzsJbiA9IGJwZl9vYmpfbmV3KHR5cGVvZigqbikpOwomIzQzOwlpZiAoIW4pCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJbSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pOwomIzQzOwlicGZfb2JqX2Ryb3AobSk7CiYjNDM7CWJwZl9vYmpfZHJvcChuKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7bG9uZyByZWZjb3VudF9hY3F1aXJlX3JjdV9tYXBfa3B0cl9udWxsX2NoZWNrZWQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7CiYjNDM7CXN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptOwomIzQzOwlpbnQgaWR4ID0gMDsKJiM0MzsKJiM0MzsJbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfcmVmY291bnRfb25seSwgJmFtcDtpZHgpOwomIzQzOwlpZiAoIW1hcHZhbCkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwlicGZfcmN1X3JlYWRfbG9jaygpOwomIzQzOwluID0gbWFwdmFsLSZndDtub2RlOwomIzQzOwlpZiAoIW4pIHsKJiM0MzsJCWJwZl9yY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiAyOwomIzQzOwl9CiYjNDM7CW0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTsKJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAoIW0pCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsJYnBmX29ial9kcm9wKG0pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgbG9uZyBfX3N0YXNoX21hcF9lbXB0eV94Y2hnKHN0cnVjdCBub2RlX2RhdGEgKm4sIGludCBpZHgpCiB7CiAJc3RydWN0IG1hcF92YWx1ZSAqbWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3N0YXNoZWRfbm9kZXMsICZhbXA7aWR4KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMKaW5kZXggMDI0ZWYyYWFlMjAwODIuLjgwYjkyZDdlYzljYWJhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuYwpAQCAtMTksNiAmIzQzOzE5LDE1IEBAIHN0cnVjdCBub2RlX3JlZmNvdW50ZWQgewogCXN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7CiB9OwogCiYjNDM7c3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7CiYjNDM7CWxvbmcga2V5OwomIzQzOwlzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHsKJiM0MzsJc3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7CiYjNDM7fTsKJiM0MzsKIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTsKIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltOwogCkBAIC0yOCw2ICYjNDM7MzcsMTMgQEAgcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3Jvb3QgX19jb250YWlucyhub2RlX2FjcXVpcmUsIG5vZGUpOwogcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX3NwaW5fbG9jayBsb2NrOwogcHJpdmF0ZShCKSBzdHJ1Y3QgYnBmX2xpc3RfaGVhZCBoZWFkIF9fY29udGFpbnMobm9kZV9yZWZjb3VudGVkLCBsaXN0KTsKIAomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpOwomIzQzOwlfX3R5cGUoa2V5LCBpbnQpOwomIzQzOwlfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMSk7CiYjNDM7fSBzdGFzaGVkX3JlZmNvdW50X29ubHkgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiBzdGF0aWMgYm9vbCBsZXNzKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKQogewogCXN0cnVjdCBub2RlX2FjcXVpcmUgKm5vZGVfYTsKQEAgLTgwLDYgJiM0Mzs5Niw2NCBAQCBsb25nIHJlZmNvdW50X2FjcXVpcmVfbWF5YmVfbnVsbCh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDs/dGMmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjEmIzM0OykKJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX3VuY2hlY2tlZF9kcm9wKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsOwomIzQzOwlzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICp0bXAsICpuLCAqbTsKJiM0MzsJaW50IGlkeCA9IDA7CiYjNDM7CiYjNDM7CXRtcCA9IGJwZl9vYmpfbmV3KHR5cGVvZigqdG1wKSk7CiYjNDM7CWlmICghdG1wKQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CWJwZl9vYmpfZHJvcCh0bXApOwomIzQzOwomIzQzOwltYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCAmYW1wO2lkeCk7CiYjNDM7CWlmICghbWFwdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW4gPSBtYXB2YWwtJmd0O25vZGU7CiYjNDM7CWlmICghbikgewomIzQzOwkJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CX0KJiM0MzsJbSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pOwomIzQzOwlicGZfcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CWJwZl9vYmpfZHJvcChtKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0Oz90YyYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2lzIGFuIHVudHJ1c3RlZCByZWZjb3VudGVkIGtwdHImIzM0OykKJiM0Mztsb25nIHJlZmNvdW50X2FjcXVpcmVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDsKJiM0MzsJc3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07CiYjNDM7CWludCBpZHggPSAwOwomIzQzOwomIzQzOwltYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKCZhbXA7c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCAmYW1wO2lkeCk7CiYjNDM7CWlmICghbWFwdmFsKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CW4gPSBtYXB2YWwtJmd0O25vZGU7CiYjNDM7CWlmICghbikgewomIzQzOwkJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CX0KJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwltID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7CiYjNDM7CWlmIChtKQomIzQzOwkJYnBmX29ial9kcm9wKG0pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDs/dGMmIzM0OykKIF9fZmFpbHVyZSBfX21zZygmIzM0O1VucmVsZWFzZWQgcmVmZXJlbmNlIGlkPTMgYWxsb2NfaW5zbj17e1swLTldJiM0Mzt9fSYjMzQ7KQogbG9uZyByYnRyZWVfcmVmY291bnRlZF9ub2RlX3JlZl9lc2NhcGVzX293bmluZ19pbnB1dCh2b2lkICpjdHgpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgQlBGIHZlcmlmaWVyLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEl0JiMzOTtzIGdvdCBhY2NvbXBhbnlpbmcgdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9gLCB3aGljaCBpcyBnb29kIHByYWN0aWNlLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW4gaG93IHRoZSB2ZXJpZmllciBoYW5kbGVzIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzIHdoZW4gdmFsaWRhdGluZyBrZnVuY3MuCgpTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHdlJiMzOTtyZSBhZGRpbmcgYSBjcnVjaWFsIGNoZWNrLiAgVGhlIHBhdGNoIG5vdyBjb25zaWRlcnMgYFBUUl9VTlRSVVNURURgIGZvciBgcmVnLSZndDt0eXBlYC4gSWYgdGhlIHJlZ2lzdGVyIChgcmVnYCkgaG9sZGluZyB0aGUgYXJndW1lbnQgaXMgbWFya2VkIGFzIHVudHJ1c3RlZCwgd2UgYmFpbCBvdXQgd2l0aCBgLUVBQ0NFU2AsIHByZXZlbnRpbmcgcG90ZW50aWFsbHkgcmlza3kgb3BlcmF0aW9ucy4gIFRoYXQmIzM5O3MgYSBzZW5zaWJsZSBhZGRpdGlvbiwgZ3VhcmRpbmcgYWdhaW5zdCB1bnRydXN0ZWQgcG9pbnRlcnMgaW4gdGhpcyBjb250ZXh0LgoKV2UmIzM5O3JlIGFsc28gYWRqdXN0aW5nIHRoZSBjb25kaXRpb24gdGhhdCBzZXRzIGBtZXRhLSZndDthcmdfb3duaW5nX3JlZiA9IHRydWVgLiAgVGhlIG9yaWdpbmFsIGNoZWNrIG1pZ2h0IGhhdmUgYmVlbiB0b28gYnJvYWQuIE5vdywgaXQgc2VlbXMgd2Ugb25seSBzZXQgdGhpcyBmbGFnIGlmIHRoZSB0eXBlIGlzbiYjMzk7dCBhIG5vbi1vd25pbmcgcmVmICphbmQqIHRoZSByZWdpc3RlciBpcyBhY3R1YWxseSByZWZlcmVuY2VkLiBUaGF0JiMzOTtzIGEgbW9yZSBudWFuY2VkIGFwcHJvYWNoIGFuZCBzaG91bGQgaW1wcm92ZSB0aGUgYWNjdXJhY3kgb2YgdGhlIG93bmVyc2hpcCB0cmFja2luZy4KClRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQmIzM5O3MgdG91Y2hpbmcgdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCBtZWFuaW5nIHRoaXMgaXMgYSBjaGFuZ2UgdGhhdCBuZWVkcyAqc2lnbmlmaWNhbnQqIGZ1enppbmcgdG8gY2F0Y2ggYW55IHN1YnRsZSBpc3N1ZXMgb3IgZWRnZSBjYXNlcy4gVGhpcyBvbmUgd2FycmFudHMgc29tZSBleHRyYSBzY3J1dGlueS4KCkxldCYjMzk7cyBsb2NhdGUgd2hlcmUgdGhpcyBjb2RlIGxpdmVzLiBUaGUgZGlmZiBpbmRpY2F0ZXMgaXQmIzM5O3MgaW4gYSBmdW5jdGlvbiBuYW1lZCBgY2hlY2tfa2Z1bmNfYXJnc2AuIElzIHRoYXQgZnVuY3Rpb24gc3RhdGljPyBZZXMsIHRoZSBkaWZmIGNsZWFybHkgc3RhdGVzIGl0JiMzOTtzIHN0YXRpYy4gVGhhdCBtZWFucyB0aGUgY29tcGlsZXIgbWlnaHQgaW5saW5lIGl0LiBTbyB3ZSBuZWVkIHRvIGxvb2sgYXQgaXRzIGNhbGxlcnMgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX2tmdW5jX2FyZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTExOTEyPXN0YXRpYyBib29sIGNoZWNrX2Nzc190YXNrX2l0ZXJfYWxsb3dsaXN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTI3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTI4OnN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfYXJnX21ldGEgKm1ldGEsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MjktXHRcdFx0ICAgIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5MTg9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5OTQtXHQvKiBDaGVjayB0aGUgYXJndW1lbnRzICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5OTU6XHRlcnIgPSBjaGVja19rZnVuY19hcmdzKGVudiwgXHUwMDI2bWV0YSwgaW5zbl9pZHgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTk2LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMyODEtXHRcdGVsc2Vcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzI4MjpcdFx0XHQvKiBzY2FsYXIuIGVuc3VyZWQgYnkgY2hlY2tfa2Z1bmNfYXJncygpICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMyODMtXHRcdFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIHJlZ25vLCB0LVx1MDAzZXNpemUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqVHJhY2luZyBLZXJuZWwgRnVuY3Rpb24gQXJndW1lbnQgQ2hlY2tzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgY2hlY2tfa2Z1bmNfY2FsbGAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGNhbGwgc3RydWN0dXJlLiBUaGUgY29kZSB0ZWxscyBtZSB0aGF0IGBjaGVja19rZnVuY19jYWxsYCBjYWxscyBgY2hlY2tfa2Z1bmNfYXJnc2AuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgbGluaywgYnV0IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqb3RoZXIqIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhpcyBhcmd1bWVudCBjaGVja2luZy4KClNvLCBub3cgSSBuZWVkIHRvIGRldGVybWluZSB3aGF0IGZ1bmN0aW9ucyAqY2FsbCogYGNoZWNrX2tmdW5jX2NhbGxgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnJvYWRlciBjb250ZXh0OyB3aGVyZSBpbiB0aGUgc3lzdGVtIGFyZSB0aGVzZSBrZXJuZWwgZnVuY3Rpb24gY2FsbHMgYmVpbmcgdmFsaWRhdGVkPyBXaGF0IGV2ZW50cyBvciBwcm9jZXNzZXMgbGVhZCB0byB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gYmVpbmcgaW52b2tlZD8gVGhlIGdvYWwgaXMgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBjYWxsIHN0YWNrLCBzbyBJIGNhbiBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIGFuZCBpbXBvcnRhbmNlIG9mIHRoaXMgYXJndW1lbnQgY2hlY2suIFRoaXMgaXMgbXkgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX2tmdW5jX2NhbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTcyMzg9c3RhdGljIGludCBwcm9jZXNzX2R5bnB0cl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWcsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTItXHRcdFx0ICogRm9yIENPTlNUX1BUUl9UT19EWU5QVFIsIHJlZyBpcyBhbHJlYWR5IHNjcmF0Y2hlZCBieSBjaGVja19yZWdfYXJnXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzMxMzpcdFx0XHQgKiBpbiBjaGVja19oZWxwZXJfY2FsbCBhbmQgbWFya19idGZfZnVuY19yZWdfc2l6ZSBpbiBjaGVja19rZnVuY19jYWxsLlxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTQtXHRcdFx0ICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyOTE2PXN0YXRpYyBpbnQgY2hlY2tfcmV0dXJuX2NvZGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHJlZ25vLCBjb25zdCBjaGFyICpyZWdfbmFtZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5MTctXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5MTg6c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjkxOS1cdFx0XHQgICAgaW50ICppbnNuX2lkeF9wKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzI0MD1zdGF0aWMgaW50IGRvX2NoZWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgYm9vbCAqZG9fcHJpbnRfc3RhdGUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzA4LVx0XHRcdGlmIChpbnNuLVx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3MzA5Olx0XHRcdFx0cmV0dXJuIGNoZWNrX2tmdW5jX2NhbGwoZW52LCBpbnNuLCBcdTAwMjZlbnYtXHUwMDNlaW5zbl9pZHgpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzEwLVx0XHRcdHJldHVybiBjaGVja19oZWxwZXJfY2FsbChlbnYsIGluc24sIFx1MDAyNmVudi1cdTAwM2VpbnNuX2lkeCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIzMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiBpdCB3ZXJlIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKlRyYWNpbmcgdGhlIEJQRiBWZXJpZmljYXRpb24gRmxvdyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiBCUEYgdmVyaWZpY2F0aW9uLCB0aGF0IGBicGZfY2hlY2tgIGZ1bmN0aW9uLCBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBJdCYjMzk7cyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCwgdGhlIGZpcnN0IHBsYWNlIHRoZSB2ZXJpZmllciBsb29rcy4gQW5kLCBpdCB0aGVuIGNhbGxzIGBkb19jaGVja2AsIHdoaWNoLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgc2VlbXMgdG8gYmUgZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmcgb2YgaW5zdHJ1Y3Rpb24tbGV2ZWwgYW5hbHlzaXMuIE5vdywgYGRvX2NoZWNrYCBjYWxscyBgZG9fY2hlY2tfaW5zbmAsIGluZGljYXRpbmcgYSBwb3NzaWJseSBldmVuIGxvd2VyLWxldmVsLCBpbnN0cnVjdGlvbi1zcGVjaWZpYyBjaGVja2luZy4gQW5kLCBtb3N0IGltcG9ydGFudGx5LCBgZG9fY2hlY2tfaW5zbmAgY2FsbHMgYGNoZWNrX2tmdW5jX2NhbGxgLiBOb3cgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGBjaGVja19rZnVuY19jYWxsYCBpcyBzdGF0aWMuIFllcyBpdCBpcywgd2hpY2ggaXMgZ29vZC4gU28sIHRoZSB2ZXJpZmljYXRpb24gaXMgaW5pdGlhdGVkIGF0IGBicGZfY2hlY2tgLCB0cmlja2xlcyBkb3duIHRocm91Z2ggYSBzZXJpZXMgb2YgaW5jcmVhc2luZ2x5IHNwZWNpZmljIGNoZWNrcywgZXZlbnR1YWxseSBoaXR0aW5nIGBjaGVja19rZnVuY19jYWxsYCB3aGVuIG5lZWRlZC4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGluIGNvbXBsZXggY29kZTogYSBoaWdoLWxldmVsIGVudHJ5IHBvaW50IGZvbGxvd2VkIGJ5IGEgc2VyaWVzIG9mIHNwZWNpYWxpemVkIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfY2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTU1PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01Ni1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1NzovKiBicGZfY2hlY2soKSBpcyBhIHN0YXRpYyBjb2RlIGFuYWx5emVyIHRoYXQgd2Fsa3MgZUJQRiBwcm9ncmFtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTgtICogaW5zdHJ1Y3Rpb24gYnkgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgcmVnaXN0ZXIvc3RhY2sgc3RhdGUuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExODk3PXN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX3JidHJlZV9ub2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTA4LSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTkwOTogKiBBbnkgc2xlZXBhYmxlIHByb2dzIGFyZSBhbHNvIHNhZmUgc2luY2UgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoKSBlbmZvcmNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MTAtICogdGhlbSBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBzb21lIHNwZWNpZmljIGhvb2sgcG9pbnRzLlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODg5Nj1idGZfYXR0YWNoX2Z1bmNfcHJvdG8oc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZywgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgZnVuY19pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5MzAtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg5MzE6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5MzItXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkzMzY9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzY2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzY3Olx0cmV0ID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCwgXHUwMDI2dGd0X2luZm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzY4LVx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0MzUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk0MzY6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NDM3LVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NjMzPWludCBicGZfZml4dXBfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Nzc2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Nzc3OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Nzc4LVx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzkxLVx0LyogJiMzOTtzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiYjMzk7IGNhbiBiZSBnbG9iYWwsIGJ1dCBzaW5jZSBpdCYjMzk7cyBub3Qgc21hbGwsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3OTI6XHQgKiBhbGxvY2F0ZS9mcmVlIGl0IGV2ZXJ5IHRpbWUgYnBmX2NoZWNrKCkgaXMgY2FsbGVkXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3OTMtXHQgKi9cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NjYtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4Njc6XHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoZW52LCBhdHRyLCB1YXR0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NjgtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg3OC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg3OTpcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg4MC1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODkyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5ODkzOlx0cmV0ID0gYnBmX2NoZWNrX2NmZyhlbnYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODk0LVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjkxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlOgoKKipEZWVwIERpdmUgaW50byBgYnBmX2NoZWNrYCBhbmQgUmVmY291bnRlZCBLUFRScyoqCgpSaWdodCwgc28gYGJwZl9jaGVja2AuLi4gdGhhdCYjMzk7cyB0aGUgY29yZSwgaXNuJiMzOTt0IGl0PyBUaGUgc3RhcnRpbmcgcG9pbnQuIE15IGJyYWluJiMzOTtzIG5vdyBidXp6aW5nIHdpdGggdGhlIHBvc3NpYmlsaXRpZXMuIEkgbmVlZCB0byB6ZXJvIGluIG9uIGFueXRoaW5nIHNwZWNpZmljYWxseSBjb25uZWN0ZWQgdG8gYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYC4gVGhhdCBwYXJ0aWN1bGFyIGtmdW5jIGFyZ3VtZW50IHR5cGUgaXMgYWx3YXlzIGludGVyZXN0aW5nLCBhIHZpdGFsIGFzcGVjdCB0byBjb25zaWRlci4gSXQmIzM5O3Mgb2Z0ZW4gd2hlcmUgdGhlIHJlYWwgbWFnaWMgLSBvciBwb3RlbnRpYWwgcGl0ZmFsbHMgLSBsaWUgd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsIHBvaW50ZXJzIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IHdpdGhpbiBCUEYuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgaGVyZT8gQXJlIHRoZXJlIG5ldyB1c2VzPyBPcHRpbWl6YXRpb24/IFNlY3VyaXR5IGltcGxpY2F0aW9ucz8KCkFoLCBhbmQgSSBzZWUgdGhlIHBhdGNoIGFsc28gbWVudGlvbnMgdGVzdHMgZm9yIGBicGZfcmVmY291bnRfYWNxdWlyZWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50ISBUZXN0aW5nIGFyb3VuZCByZWZjb3VudGluZyBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IGluIEJQRiwgaXMgKmNydWNpYWwqIGZvciBzdGFiaWxpdHkuIEl0JiMzOTtzIHRoZSBseW5jaHBpbiBmb3IgZW5zdXJpbmcgd2UgZG9uJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3IgZGF0YSBjb3JydXB0aW9uLiBUaGUgdGVzdHMgc2hvdWxkIGJlIGxvb2tlZCBpbnRvIHdpdGggcmVhbCBjYXJlLiBIb3cgdGhvcm91Z2ggYXJlIHRoZXk/IERvIHRoZXkgY292ZXIgZWRnZSBjYXNlcz8gQXJlIHRoZXJlIG5ldyB0ZXN0IGNhc2VzIGNvdmVyaW5nIHJlZmNvdW50aW5nIGluIHRoZSByZWxldmFudCBjb250ZXh0PyBVbmRlcnN0YW5kaW5nIHRoZSB0ZXN0IHN0cmF0ZWd5IGlzIHBhcmFtb3VudCBmb3Iga25vd2luZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9yZWZjb3VudF9hY3F1aXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9MjQ0OT1fX2JwZl9rZnVuYyB2b2lkIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCh2b2lkICpwX19hbGxvYywgdm9pZCAqbWV0YV9faWduKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTQtLyoqXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDU1OiAqIGJwZl9yZWZjb3VudF9hY3F1aXJlKCkgLSB0dXJuIGEgbG9jYWwga3B0ciBpbnRvIGFuIG93bmluZyByZWZlcmVuY2Vcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTYtICogQHBfX3JlZmNvdW50ZWRfa3B0cjogbm9uLW93bmluZyBsb2NhbCBrcHRyXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2My0gKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NjQ6X19icGZfa2Z1bmMgdm9pZCAqYnBmX3JlZmNvdW50X2FjcXVpcmUodm9pZCAqcF9fcmVmY291bnRlZF9rcHRyLCBzdHJ1Y3QgYnRmX3N0cnVjdF9tZXRhICptZXRhKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2NS17XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4MC1cbmtlcm5lbC9icGYvaGVscGVycy5jOjI0ODE6X19icGZfa2Z1bmMgdm9pZCAqYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbCh2b2lkICpwX19yZWZjb3VudGVkX2twdHIsIHZvaWQgKm1ldGFfX2lnbilcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODIte1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MzpcdHJldHVybiBicGZfcmVmY291bnRfYWNxdWlyZShwX19yZWZjb3VudGVkX2twdHIsIG1ldGFfX2lnbik7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDg0LX1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODEzPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfcGVyY3B1X29ial9kcm9wX2ltcGwsIEtGX1JFTEVBU0UpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODE0OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVmY291bnRfYWNxdWlyZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfUkNVIHwgS0ZfSU1QTElDSVRfQVJHUylcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4MTU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1JDVSlcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4MTYtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9saXN0X3B1c2hfZnJvbnQsIEtGX0lNUExJQ0lUX0FSR1MpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDA0PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwMDgtXHRLRl9icGZfb2JqX2Ryb3AsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwMDk6XHRLRl9icGZfcmVmY291bnRfYWNxdWlyZV9pbXBsLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDEwOlx0S0ZfYnBmX3JlZmNvdW50X2FjcXVpcmUsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwMTEtXHRLRl9icGZfbGlzdF9wdXNoX2Zyb250X2ltcGwsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDgxPUJURl9JRChmdW5jLCBicGZfb2JqX2Ryb3ApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwODI6QlRGX0lEKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwODM6QlRGX0lEKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDg0LUJURl9JRChmdW5jLCBicGZfbGlzdF9wdXNoX2Zyb250X2ltcGwpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTkxPXN0YXRpYyBib29sIGlzX2JwZl9wZXJjcHVfb2JqX2Ryb3Bfa2Z1bmModTMyIGZ1bmNfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTk2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTk3OnN0YXRpYyBib29sIGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKHUzMiBmdW5jX2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTk4LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE5OTpcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVmY291bnRfYWNxdWlyZV0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIwMDpcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVmY291bnRfYWNxdWlyZV9pbXBsXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIwMS19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjI0PXN0YXRpYyBib29sIGlzX2tmdW5jX3JldF9udWxsKHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIyNS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMjY6XHRpZiAoaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMobWV0YS1cdTAwM2VmdW5jX2lkKSBcdTAwMjZcdTAwMjYgbWV0YS1cdTAwM2Vhcmdfb3duaW5nX3JlZilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIyNy1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTYzMj1zdGF0aWMgYm9vbCBpc19icGZfZ3JhcGhfYXBpX2tmdW5jKHUzMiBidGZfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjM1LVx0ICAgICAgIGlzX2JwZl9yYnRyZWVfYXBpX2tmdW5jKGJ0Zl9pZCkgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTYzNjpcdCAgICAgICBpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhidGZfaWQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjM3LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI3NDc9c3RhdGljIGludCBjaGVja19zcGVjaWFsX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI4MzUtXHRcdGluc25fYXV4LVx1MDAzZWtwdHJfc3RydWN0X21ldGEgPSBzdHJ1Y3RfbWV0YTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjgzNjpcdH0gZWxzZSBpZiAoaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMobWV0YS1cdTAwM2VmdW5jX2lkKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyODM3LVx0XHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgQlBGX1JFR18wKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5MTg9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxMzgtXHRcdCAgICAgIWlzX2JwZl9wZXJjcHVfb2JqX25ld19rZnVuYyhtZXRhLmZ1bmNfaWQpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMTM5Olx0XHQgICAgICFpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhtZXRhLmZ1bmNfaWQpKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTQwLVx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDthY3F1aXJlIGtlcm5lbCBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gUFRSX1RPX0JURl9JRFxcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NjMzPWludCBicGZfZml4dXBfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjgxLVx0XHQgICBpc19icGZfcGVyY3B1X29ial9kcm9wX2tmdW5jKGRlc2MtXHUwMDNlZnVuY19pZCkgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY4MjpcdFx0ICAgaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMoZGVzYy1cdTAwM2VmdW5jX2lkKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjgzLVx0XHRzdHJ1Y3QgYnRmX3N0cnVjdF9tZXRhICprcHRyX3N0cnVjdF9tZXRhID0gZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmtwdHJfc3RydWN0X21ldGE7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjkxLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjkyOlx0XHRpZiAoaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMoZGVzYy1cdTAwM2VmdW5jX2lkKSBcdTAwMjZcdTAwMjYgIWtwdHJfc3RydWN0X21ldGEpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY5My1cdFx0XHR2ZXJpZmllcl9idWcoZW52LCBcJiMzNDtrcHRyX3N0cnVjdF9tZXRhIGV4cGVjdGVkIGF0IGluc25faWR4ICVkXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTU5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVmVyaWZpY2F0aW9uIExvZ2ljIGZvciBLRnVuYyBBcmd1bWVudHMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyB0ZXN0cyB0aGF0IGFyZSBsZXZlcmFnaW5nIGBicGZfcmVmY291bnRfYWNxdWlyZWAsIHdoaWNoIEkga25vdyBpcyBhIGtmdW5jLiBUaGUgY29yZSBjaGFuZ2UgaGVyZSBpcyBpbiBgY2hlY2tfa2Z1bmNfYXJnc2AgdG8gaGFuZGxlIHRob3NlIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGUgY3J1Y2lhbCBwYXJ0IG9mIHRoaXMgaXMgdGhlIHZlcmlmaWVyIGxvZ2ljLiBJIGtub3cgYGJwZl9jaGVja2AgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gdGhlIHZlcmlmaWVyLCBhbmQgdGhhdCBpdCYjMzk7cyBjYWxsZWQgYnkgYGJwZl9wcm9nX2xvYWRgLCB3aGljaCBpcyB1bHRpbWF0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBgYnBmYCBzeXNjYWxsLgoKVGhlcmVmb3JlLCB0aGUgb2J2aW91cyBmdXp6aW5nIHRhcmdldCBoZXJlIGlzIGBicGZfcHJvZ19sb2FkYCBpdHNlbGYuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IHRvIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGguIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCB3aGljaCBzcGVjaWZpYyBmdW5jdGlvbiB3aXRoaW4gdGhlIHZlcmlmaWVyIGlzIHRoZSBtb3N0IHByb21pc2luZz8gYGJwZl9jaGVja2Agb3IgYGNoZWNrX2tmdW5jX2FyZ3NgIGFyZSBsaWtlbHkgY2FuZGlkYXRlcy4gQnV0IGBjaGVja19rZnVuY19hcmdzYCBpcyBzdGF0aWMsIHNvIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB3aGV0aGVyIGl0JiMzOTtzIGlubGluZWQuIFRoaXMgbWVhbnMgdGhhdCBgYnBmX2NoZWNrYCBvciBgY2hlY2tfa2Z1bmNfY2FsbGAgaXMgcG90ZW50aWFsbHkgdGhlIGJlc3QgcGxhY2UuCgpXYWl0LCBgYnBmX2NoZWNrYCBpcyBhIG1vbnN0ZXIgb2YgYSBmdW5jdGlvbiEgTWF5YmUgc29tZXRoaW5nIG1vcmUgZ3JhbnVsYXIgbGlrZSBgY2hlY2tfa2Z1bmNfY2FsbGAgaXMgYmV0dGVyLiBJdCYjMzk7cyBzdGF0aWMgYXMgd2VsbCwgYnV0IGl0IG1pZ2h0IG5vdCBiZSBpbmxpbmVkLiBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGBjaGVja19rZnVuY19jYWxsYCBpcyBhY3R1YWxseSBpbmxpbmVkIG9yIG5vdC4gVGhhdCB3aWxsIGhlbHAgbWUgZGVjaWRlIG9uIHRoZSBvcHRpbWFsIGZ1enppbmcgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMTozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19rZnVuY19jYWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYz03MjM4PXN0YXRpYyBpbnQgcHJvY2Vzc19keW5wdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MzEyLVx0XHRcdCAqIEZvciBDT05TVF9QVFJfVE9fRFlOUFRSLCByZWcgaXMgYWxyZWFkeSBzY3JhdGNoZWQgYnkgY2hlY2tfcmVnX2FyZ1xua2VybmVsL2JwZi92ZXJpZmllci5jOjczMTM6XHRcdFx0ICogaW4gY2hlY2tfaGVscGVyX2NhbGwgYW5kIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUgaW4gY2hlY2tfa2Z1bmNfY2FsbC5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MzE0LVx0XHRcdCAqL1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjkxNj1zdGF0aWMgaW50IGNoZWNrX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubywgY29uc3QgY2hhciAqcmVnX25hbWUpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTE3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTE4OnN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5MTktXHRcdFx0ICAgIGludCAqaW5zbl9pZHhfcClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTcyNDA9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzMwOC1cdFx0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzMwOTpcdFx0XHRcdHJldHVybiBjaGVja19rZnVuY19jYWxsKGVudiwgaW5zbiwgXHUwMDI2ZW52LVx1MDAzZWluc25faWR4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzMxMC1cdFx0XHRyZXR1cm4gY2hlY2tfaGVscGVyX2NhbGwoZW52LCBpbnNuLCBcdTAwMjZlbnYtXHUwMDNlaW5zbl9pZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA2MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFRhcmdldHMgZm9yIEluc3BlY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gYSBnb29kIGVudHJ5IHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGBicGZfcmVmY291bnRfYWNxdWlyZWAsIGdpdmVuIHRoYXQgaXQmIzM5O3MgYSBrZnVuYyBhbmQgdGhlcmVmb3JlIGRpcmVjdGx5IGludm9rZWQgZnJvbSBCUEYgcHJvZ3JhbXMuIEhvd2V2ZXIsIHRoZSBtb2RpZmljYXRpb24gaW4gcXVlc3Rpb24gYWZmZWN0cyB0aGUgdmVyaWZpZXIgbG9naWMgaXRzZWxmLCBub3QgdGhlIGRpcmVjdCBjYWxsLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBzaGlmdCBteSBmb2N1cy4gVGhlIHJlYWwgYWN0aW9uIHNlZW1zIHRvIGhhcHBlbiB3aXRoaW4gYGNoZWNrX2tmdW5jX2FyZ3NgIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBhcmd1bWVudCB2YWxpZGF0aW9uIGlzIHBlcmZvcm1lZC4KClNvLCBsZXQmIzM5O3MgcmVmaW5lIG15IHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzLiBXaGlsZSBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGlzIHJlbGF0ZWQsIGl0JiMzOTtzIG5vdCB0aGUgY29yZS4gUGVyaGFwcyBgYnBmX2NoZWNrYCBpcyB0aGUgbW9yZSByZWxldmFudCBmdW5jdGlvbiB0byBleGFtaW5lLCBvciBldmVuIGBicGZfcHJvZ19sb2FkYCwgc2luY2UgdGhhdCYjMzk7cyB0aGUgcG9pbnQgd2hlcmUgQlBGIHByb2dyYW1zIGFyZSBhY3R1YWxseSBsb2FkZWQgYW5kIGNoZWNrZWQuCgpXYWl0IGEgc2Vjb25kLi4uSSYjMzk7bSBnZXR0aW5nIGNsb3Nlci4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYGJwZl9jaGVja2AgKmlzKiB0aGUgbWFpbiB2ZXJpZmllciBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYGJwZl9jaGVja2AuCgpCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIGFsc28gY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB0aGF0IGluZmx1ZW5jZSB0aGUgdmVyaWZpZXImIzM5O3MgYmVoYXZpb3IuIFJpZ2h0LCBCUEYgaXMgZW5hYmxlZCB2aWEgYENPTkZJR19CUEZfU1lTQ0FMTGAuIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBzdGFydCB0byB0cmFjZSB0aGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MzIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBmaW5kaW5nIHRob3NlIEJQRiBjb25maWd1cmF0aW9uIG9wdGlvbnM6CgoqKkJQRiBDb25maWd1cmF0aW9uIEh1bnQqKgoKQWxyaWdodCwgd2hlcmUgd291bGQgSSBleHBlY3QgdG8gZmluZCB0aGVzZSBCUEYgY29uZmlndXJhdGlvbnM/IEdpdmVuIHRoYXQgQlBGIGlzIGEgY29yZSBwYXJ0IG9mIHRoZSBrZXJuZWwsIGFuZCBmdW5kYW1lbnRhbGx5LCBpdCBuZWVkcyB0byBiZSBjb25maWd1cmVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VzcywgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBmaWxlcy4gTm93LCB3aGVyZSB3b3VsZCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIGJlPyBIbW0sIGEgZ29vZCBzdGFydGluZyBwb2ludCB3b3VsZCBiZSB1bmRlciB0aGUgYGtlcm5lbGAgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgd2l0aGluIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgYW50aWNpcGF0ZSB0aGUgY29yZSBCUEYgb3B0aW9ucyB0byByZXNpZGUuIEhvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgYXJlIHNvbWUgb3ZlcmFyY2hpbmcgaW5pdGlhbCBvcHRpb25zLCBhbmQgdGhvc2UgbWF5IHdlbGwgYmUgZGVjbGFyZWQgaW4gYGluaXQvS2NvbmZpZ2AgdG8gbWFuYWdlIGtlcm5lbCBidWlsZCBzZXR0aW5ncy4gSSYjMzk7bGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIGNoZWNrIGJvdGggbG9jYXRpb25zIHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyBjcnVjaWFsLiBUaGF0IHNob3VsZCBjb3ZlciB0aGUgbWFpbiBhcmVhcyBmb3IgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODY4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBhIEJQRiBWZXJpZmllciBDaGFuZ2UqKgoKQWxyaWdodCwgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGhpdHRpbmcgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGdvZXMgdG8gdGhlIGltcGFjdC4gVGhlIHZlcmlmaWVyIGlzIHRoZSAqZ2F0ZWtlZXBlciogZm9yIEJQRiBjb2RlIGVudGVyaW5nIHRoZSBrZXJuZWwsIHNvIGFueSBtb2RpZmljYXRpb24gaGVyZSB3YXJyYW50cyBpbW1lZGlhdGUgc2NydXRpbnkuIE15IGZpcnN0IHRob3VnaHQgaXM6ICppcyB0aGlzIHBhdGggY29uZGl0aW9uYWw/KiBBcmUgdGhlcmUgYW55IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCwgaWYgZGlzYWJsZWQsIHdvdWxkIG1ha2UgdGhpcyBjb2RlICpub3QqIGdldCBjb21waWxlZCBvciBpbmNsdWRlZD8gS25vd2luZyB0aGUgY29uZmlnIG9wdGlvbnMgdGhhdCBpbmZsdWVuY2UgdGhpcyBmaWxlIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UgYW5kIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBpbXBhY3RzIGFjcm9zcyBkaWZmZXJlbnQga2VybmVsIGJ1aWxkcyBhbmQgZGlzdHJpYnV0aW9ucy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY29uZmlnIG9wdGlvbnMsIGlmIGFueSwgZ3VhcmQgdGhhdCBmaWxlLiBUaGF0IHdvdWxkIGJlIHRoZSBmaXJzdCBwaWVjZSBvZiBpbmZvcm1hdGlvbiBJIHdvdWxkIGdhdGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmVyaWZpZXJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0ICQoY2ZsYWdzLW5vZ2NzZS15eSlcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cbmtlcm5lbC9icGYvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjgwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSYjMzk7cyBteSB0YWtlLiBJdCYjMzk7cyBjbGVhciB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgcmVxdWlyZW1lbnQsIG9idmlvdXNseS4gVGhlIHBhdGNoIGl0c2VsZiBpcyBmdW5jdGlvbmFsOyBpdCYjMzk7cyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgQlBGIHZlcmlmaWVyIHRoYXQgYWRkcmVzc2VzIGEgc2VjdXJpdHkgY29uY2VybiB3aXRoIHVudHJ1c3RlZCByZWZjb3VudGVkIGtwdHJzIGFuZCBjb3JyZWN0cyBhbiBpc3N1ZSBpbiB0aGUgYG1ldGEtJmd0O2FyZ19vd25pbmdfcmVmYCBhc3NpZ25tZW50LiBUaGlzIGlzIGRlZmluaXRlbHkgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBmb3IgZnV6emluZyB3aWxsIGJlIGBicGZfY2hlY2tgLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSB2ZXJpZmllciYjMzk7cyBjb3JlIGxvZ2ljIHJlc2lkZXMgYW5kIHdoZXJlIHRoZSBrZXkgY2hlY2tzIGFyZSBwZXJmb3JtZWQuIEhvd2V2ZXIsIGBicGZfcmVmY291bnRfYWNxdWlyZWAgaXMgYWxzbyBpbXBvcnRhbnQuIEl0JiMzOTtzIHRoZSBrZnVuYyB0aGF0JiMzOTtzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBoYW5kbGUgdGhlIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnQgdHlwZS4gSXQgbWFrZXMgc2Vuc2UgdG8gaW5jbHVkZSBpdCBiZWNhdXNlIHRoYXQmIzM5O3MgdGhlIHJ1bnRpbWUgZnVuY3Rpb24gdGhlIHZlcmlmaWVyIGlzIHNjcnV0aW5pemluZyBhcmd1bWVudHMgZm9yLCBldmVuIHRob3VnaCBJJiMzOTt2ZSBoYWQgdG8gY29ycmVjdCBteXNlbGYgYW5kIHJlbWluZCBteXNlbGYgdGhhdCBpdCYjMzk7cyB0aGUgdmVyaWZpZXIgY2hlY2tpbmcgYXQgbG9hZCB0aW1lLiBGdXp6aW5nIHRoZSB2ZXJpZmllciAqaXMqIGRvbmUgdGhyb3VnaCBsb2FkaW5nIEJQRiBwcm9ncmFtcywgd2hpY2ggaXMgd2h5IGBicGZfY2hlY2tgIGlzIHRoZSBiZXN0IHByaW1hcnkgZm9jdXMuIGBicGZfcmVmY291bnRfYWNxdWlyZWAgaXMgcmVsZXZhbnQgYXMgaXQmIzM5O3MgdGhlIGtmdW5jIGNhbGxlZCBpbiB0aGUgdGVzdHMuCgpMZXQgbWUganVzdCBxdWlja2x5IHJlLWV4YW1pbmUgdGhlIGNvZGUgc25pcHBldCBhZ2FpbjoKCmBgYGMKIAkJY2FzZSBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUjoKJiM0MzsJCQlpZiAocmVnLSZndDt0eXBlICZhbXA7IFBUUl9VTlRSVVNURUQpIHsKJiM0MzsJCQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgaXMgYW4gdW50cnVzdGVkIHJlZmNvdW50ZWQga3B0clxuJiMzNDssCiYjNDM7CQkJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwomIzQzOwkJCQlyZXR1cm4gLUVBQ0NFUzsKJiM0MzsJCQl9CiAJCQlpZiAoIXR5cGVfaXNfcHRyX2FsbG9jX29iaihyZWctJmd0O3R5cGUpKSB7CiAJCQkJdmVyYm9zZShlbnYsICYjMzQ7JXMgaXMgbmVpdGhlciBvd25pbmcgb3Igbm9uLW93bmluZyByZWZcbiYjMzQ7LAogCQkJCQlyZWdfYXJnX25hbWUoZW52LCBhcmdubykpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQkJaWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkpCiYjNDM7CQkJaWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy0mZ3Q7dHlwZSkgJmFtcDsmYW1wOyByZWdfaXNfcmVmZXJlbmNlZChlbnYsIHJlZykpCiAJCQkJbWV0YS0mZ3Q7YXJnX293bmluZ19yZWYgPSB0cnVlOwpgYGAKClJpZ2h0LCBzbyB0aGlzIGlzIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIGEgZmxhdyBpbiB0aGUgdmVyaWZpZXIuIFRoZSBwYXRjaCYjMzk7cyBpbXBhY3QgaXMgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljLCB3aGljaCBoYW5kbGVzIGtmdW5jIGFyZ3VtZW50cywgYW5kIHRoaXMgaXMgdWx0aW1hdGVseSByZWFjaGFibGUgdGhyb3VnaCB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gQlBGIHByb2dyYW1zIGFyZSBsb2FkZWQuIEl0JiMzOTtzIGNyaXRpY2FsIHRvIGVuc3VyZSB0aGlzIGNvZGUgcGF0aCBpcyByb2J1c3QgYWdhaW5zdCBtYWxpY2lvdXMgQlBGIHByb2dyYW1zLgoKVGhlIGltcG9ydGFudCBwb2ludHMgYXJlOiBgQlBGX1NZU0NBTExgIGVuYWJsZWQsIGFuZCBteSBmb2N1cyBzeW1ib2xzIHdpbGwgYmUgYGJwZl9jaGVja2AsIGFuZCBgYnBmX3JlZmNvdW50X2FjcXVpcmVgLiBOb3csIEkgbmVlZCB0byBjaGVjayBpZiBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGlzIGV4cG9ydGVkIGFuZCBhdmFpbGFibGUgZm9yIHVzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3JlZmNvdW50X2FjcXVpcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hlbHBlcnMuYz0yNDQ5PV9fYnBmX2tmdW5jIHZvaWQgYnBmX3BlcmNwdV9vYmpfZHJvcF9pbXBsKHZvaWQgKnBfX2FsbG9jLCB2b2lkICptZXRhX19pZ24pXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1NC0vKipcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NTU6ICogYnBmX3JlZmNvdW50X2FjcXVpcmUoKSAtIHR1cm4gYSBsb2NhbCBrcHRyIGludG8gYW4gb3duaW5nIHJlZmVyZW5jZVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1Ni0gKiBAcF9fcmVmY291bnRlZF9rcHRyOiBub24tb3duaW5nIGxvY2FsIGtwdHJcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDYzLSAqL1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ2NDpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZSh2b2lkICpwX19yZWZjb3VudGVkX2twdHIsIHN0cnVjdCBidGZfc3RydWN0X21ldGEgKm1ldGEpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDY1LXtcbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDgwLVxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MTpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgdm9pZCAqbWV0YV9faWduKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4Mi17XG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDgzOlx0cmV0dXJuIGJwZl9yZWZjb3VudF9hY3F1aXJlKHBfX3JlZmNvdW50ZWRfa3B0ciwgbWV0YV9faWduKTtcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODQtfVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4MTM9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCwgS0ZfUkVMRUFTRSlcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4MTQ6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9SQ1UgfCBLRl9JTVBMSUNJVF9BUkdTKVxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDgxNTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfUkNVKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDgxNi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2xpc3RfcHVzaF9mcm9udCwgS0ZfSU1QTElDSVRfQVJHUylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTE6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCBhbmQgdGhlIEJQRiBWZXJpZmllcioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGlzIGEgYF9fYnBmX2tmdW5jYCwgbWVhbmluZyBpdCYjMzk7cyBhIG5vbi1zdGF0aWMga2VybmVsIGZ1bmN0aW9uIHRoYXQmIzM5O3MgZXhwb3NlZCBmb3IgQlBGIHByb2dyYW1zLiBNeSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgdW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHZlcmlmaWVyLCBwYXJ0aWN1bGFybHkgYGJwZl9jaGVja2AsIHdoaWNoIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB2YWxpZGF0aW5nIEJQRiBwcm9ncmFtcy4gSSYjMzk7bSB0cmVhdGluZyBgYnBmX2NoZWNrYCBhbmQgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCBhcyBteSBGb2N1c1N5bWJvbHMgZm9yIHRoaXMgaW52ZXN0aWdhdGlvbi4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBpbml0aWFsIGNsdWUgcG9pbnRzIHRvIGBCUEZfU1lTQ0FMTGAsIGFuZCBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nIGVsc2UuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgZW5hYmxpbmcgY29uZmlncyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuCgpUbyBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiBob3cgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCBpcyB1c2VkLCBJIHNob3VsZCBjaGVjayB0aGUgdGVzdCBmaWxlcy4gQmFzZWQgb24gdGhlIGZpbGUgcGF0aCwgdGhlIHRlc3RzIHNob3VsZCBiZSBsb2NhdGVkIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNgLiBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGJldHRlciBncmFzcCBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgYnkgbG9va2luZyBhdCBob3cgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCBpcyB1c2VkLgoKTGFzdGx5LCBJIG5lZWQgdG8gY29uc2lkZXIgZGVwZW5kZW5jaWVzLiBEb2VzIGBicGZfcmVmY291bnRfYWNxdWlyZWAgcmVxdWlyZSBhbnkgb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBiZSBlbmFibGVkPyBJZiBzbywgaWRlbnRpZnlpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIGNvbXBsZXRlIG9wZXJhdGlvbmFsIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDExOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9yZWZjb3VudF9hY3F1aXJlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oZWxwZXJzLmM9MjQ0OT1fX2JwZl9rZnVuYyB2b2lkIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCh2b2lkICpwX19hbGxvYywgdm9pZCAqbWV0YV9faWduKVxuLS1cbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTQtLyoqXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDU1OiAqIGJwZl9yZWZjb3VudF9hY3F1aXJlKCkgLSB0dXJuIGEgbG9jYWwga3B0ciBpbnRvIGFuIG93bmluZyByZWZlcmVuY2Vcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTYtICogQHBfX3JlZmNvdW50ZWRfa3B0cjogbm9uLW93bmluZyBsb2NhbCBrcHRyXG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2My0gKi9cbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NjQ6X19icGZfa2Z1bmMgdm9pZCAqYnBmX3JlZmNvdW50X2FjcXVpcmUodm9pZCAqcF9fcmVmY291bnRlZF9rcHRyLCBzdHJ1Y3QgYnRmX3N0cnVjdF9tZXRhICptZXRhKVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2NS17XG4tLVxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4MC1cbmtlcm5lbC9icGYvaGVscGVycy5jOjI0ODE6X19icGZfa2Z1bmMgdm9pZCAqYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbCh2b2lkICpwX19yZWZjb3VudGVkX2twdHIsIHZvaWQgKm1ldGFfX2lnbilcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODIte1xua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MzpcdHJldHVybiBicGZfcmVmY291bnRfYWNxdWlyZShwX19yZWZjb3VudGVkX2twdHIsIG1ldGFfX2lnbik7XG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDg0LX1cbi0tXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODEzPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfcGVyY3B1X29ial9kcm9wX2ltcGwsIEtGX1JFTEVBU0UpXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODE0OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVmY291bnRfYWNxdWlyZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfUkNVIHwgS0ZfSU1QTElDSVRfQVJHUylcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4MTU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1JDVSlcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4MTYtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9saXN0X3B1c2hfZnJvbnQsIEtGX0lNUExJQ0lUX0FSR1MpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDA0PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwMDgtXHRLRl9icGZfb2JqX2Ryb3AsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwMDk6XHRLRl9icGZfcmVmY291bnRfYWNxdWlyZV9pbXBsLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDEwOlx0S0ZfYnBmX3JlZmNvdW50X2FjcXVpcmUsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwMTEtXHRLRl9icGZfbGlzdF9wdXNoX2Zyb250X2ltcGwsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDgxPUJURl9JRChmdW5jLCBicGZfb2JqX2Ryb3ApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwODI6QlRGX0lEKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwODM6QlRGX0lEKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDg0LUJURl9JRChmdW5jLCBicGZfbGlzdF9wdXNoX2Zyb250X2ltcGwpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTkxPXN0YXRpYyBib29sIGlzX2JwZl9wZXJjcHVfb2JqX2Ryb3Bfa2Z1bmModTMyIGZ1bmNfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTk2LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTk3OnN0YXRpYyBib29sIGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKHUzMiBmdW5jX2lkKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTk4LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE5OTpcdHJldHVybiBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVmY291bnRfYWNxdWlyZV0gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIwMDpcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVmY291bnRfYWNxdWlyZV9pbXBsXTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIwMS19XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjI0PXN0YXRpYyBib29sIGlzX2tmdW5jX3JldF9udWxsKHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIyNS17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMjY6XHRpZiAoaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMobWV0YS1cdTAwM2VmdW5jX2lkKSBcdTAwMjZcdTAwMjYgbWV0YS1cdTAwM2Vhcmdfb3duaW5nX3JlZilcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIyNy1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTYzMj1zdGF0aWMgYm9vbCBpc19icGZfZ3JhcGhfYXBpX2tmdW5jKHUzMiBidGZfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjM1LVx0ICAgICAgIGlzX2JwZl9yYnRyZWVfYXBpX2tmdW5jKGJ0Zl9pZCkgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTYzNjpcdCAgICAgICBpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhidGZfaWQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjM3LX1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI3NDc9c3RhdGljIGludCBjaGVja19zcGVjaWFsX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI4MzUtXHRcdGluc25fYXV4LVx1MDAzZWtwdHJfc3RydWN0X21ldGEgPSBzdHJ1Y3RfbWV0YTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjgzNjpcdH0gZWxzZSBpZiAoaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMobWV0YS1cdTAwM2VmdW5jX2lkKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEyODM3LVx0XHRtYXJrX3JlZ19rbm93bl96ZXJvKGVudiwgcmVncywgQlBGX1JFR18wKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5MTg9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxMzgtXHRcdCAgICAgIWlzX2JwZl9wZXJjcHVfb2JqX25ld19rZnVuYyhtZXRhLmZ1bmNfaWQpIFx1MDAyNlx1MDAyNlxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMTM5Olx0XHQgICAgICFpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhtZXRhLmZ1bmNfaWQpKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTEzMTQwLVx0XHRcdHZlcmJvc2UoZW52LCBcJiMzNDthY3F1aXJlIGtlcm5lbCBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gUFRSX1RPX0JURl9JRFxcblwmIzM0Oyk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NjMzPWludCBicGZfZml4dXBfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjgxLVx0XHQgICBpc19icGZfcGVyY3B1X29ial9kcm9wX2tmdW5jKGRlc2MtXHUwMDNlZnVuY19pZCkgfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTY4MjpcdFx0ICAgaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMoZGVzYy1cdTAwM2VmdW5jX2lkKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjgzLVx0XHRzdHJ1Y3QgYnRmX3N0cnVjdF9tZXRhICprcHRyX3N0cnVjdF9tZXRhID0gZW52LVx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmtwdHJfc3RydWN0X21ldGE7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjkxLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjkyOlx0XHRpZiAoaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMoZGVzYy1cdTAwM2VmdW5jX2lkKSBcdTAwMjZcdTAwMjYgIWtwdHJfc3RydWN0X21ldGEpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY5My1cdFx0XHR2ZXJpZmllcl9idWcoZW52LCBcJiMzNDtrcHRyX3N0cnVjdF9tZXRhIGV4cGVjdGVkIGF0IGluc25faWR4ICVkXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMTozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjUzNwoJCQkJCQkJb3V0cHV0OiAxNDAKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipCUEYgSGVscGVyIEZ1bmN0aW9uIExvY2F0aW9uICZhbXA7IENvbXBpbGF0aW9uIFZlcmlmaWNhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRyeWluZyB0byBuYWlsIGRvd24gdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9uIGZvciBCUEYgaGVscGVyIGZ1bmN0aW9ucy4gVGhlIGNvZGUgaXMgY2xlYXJseSBpbiBga2VybmVsL2JwZi9oZWxwZXJzLmNgLiBOb3cgdGhlIHF1ZXN0aW9uIGlzLCAqaG93KiBpcyB0aGF0IGZpbGUgYnVpbHQ/IElzIGl0IGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBMZXQmIzM5O3MgY2hlY2suLi4gQWhhISBZZXMsIGxvb2tpbmcgYXQgdGhlIGJ1aWxkIHN5c3RlbSBkaXJlY3RpdmVzLCBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc3lzY2FsbC5vIHZlcmlmaWVyLm8gaW5vZGUubyBoZWxwZXJzLm8gLi4uYCBpbmRpY2F0ZXMgdGhlIGtleS4gSXQgbG9va3MgbGlrZSBgaGVscGVycy5jYCBpcyBpbmRlZWQgYnVpbHQgd2hlbiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbmFibGVkLiBUaGF0IGNvbmZpcm1zIGl0LgoKVGhlcmVmb3JlLCBlbnN1cmluZyB0aGF0IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHNldCBpcyB0aGUgc29sZSByZXF1aXJlbWVudCBpbiB0aGlzIGNhc2UuIFdpdGggdGhhdCBlc3RhYmxpc2hlZCwgSSBzaG91bGQgbm93IGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTE6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDssCiAgICAmIzM0O2JwZl9yZWZjb3VudF9hY3F1aXJlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gcmVqZWN0IHVudHJ1c3RlZCByZWZjb3VudGVkIGtwdHJzIGFuZCBmaXhlcyB0aGUgYXNzaWdubWVudCBvZiBgbWV0YS1cdTAwM2Vhcmdfb3duaW5nX3JlZmAgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgaGFuZGxlcyBrZnVuYyBhcmd1bWVudHMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICAgJiMzNDticGZfcmVmY291bnRfYWNxdWlyZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHJlamVjdCB1bnRydXN0ZWQgcmVmY291bnRlZCBrcHRycyBhbmQgZml4ZXMgdGhlIGFzc2lnbm1lbnQgb2YgYG1ldGEtXHUwMDNlYXJnX293bmluZ19yZWZgIGZvciBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGFyZ3VtZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGhhbmRsZXMga2Z1bmMgYXJndW1lbnRzLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgd2hlbiBsb2FkaW5nIEJQRiBwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDExOjI5OjU3Ljc5NTY0MjA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4MTE1NDQzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImJwZl9yZWZjb3VudF9hY3F1aXJlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byByZWplY3QgdW50cnVzdGVkIHJlZmNvdW50ZWQga3B0cnMgYW5kIGZpeGVzIHRoZSBhc3NpZ25tZW50IG9mIGBtZXRhLVxcdTAwM2Vhcmdfb3duaW5nX3JlZmAgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgaGFuZGxlcyBrZnVuYyBhcmd1bWVudHMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMToyOTo1Ny43OTU2NDg5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI4MjY2NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjcwNTk2MmRhYjY4MDY3NzhmZmI2MDU5MjdkMTExMjVhZDg2NTA4ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMToyOTo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCA3YWE0NzM0MmRjNjU5Yy4uNjNiMWQ5OTdmZTgwNDQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXFxuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuQEAgLTEyNDE0LDEyICsxMjQxNCwxNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX1xcbiBcXHRcXHRcXHRtZXRhLVxcdTAwM2VzdWJwcm9nbm8gPSByZWctXFx1MDAzZXN1YnByb2dubztcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI6XFxuK1xcdFxcdFxcdGlmIChyZWctXFx1MDAzZXR5cGUgXFx1MDAyNiBQVFJfVU5UUlVTVEVEKSB7XFxuK1xcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiJXMgaXMgYW4gdW50cnVzdGVkIHJlZmNvdW50ZWQga3B0clxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKCF0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVxcdTAwM2V0eXBlKSkge1xcbiBcXHRcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIGlzIG5laXRoZXIgb3duaW5nIG9yIG5vbi1vd25pbmcgcmVmXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRpZiAoIXR5cGVfaXNfbm9uX293bmluZ19yZWYocmVnLVxcdTAwM2V0eXBlKSlcXG4rXFx0XFx0XFx0aWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cXHUwMDNldHlwZSkgXFx1MDAyNlxcdTAwMjYgcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKVxcbiBcXHRcXHRcXHRcXHRtZXRhLVxcdTAwM2Vhcmdfb3duaW5nX3JlZiA9IHRydWU7XFxuIFxcbiBcXHRcXHRcXHRyZWMgPSByZWdfYnRmX3JlY29yZChyZWcpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcXG5pbmRleCA2MTkwNmY0ODAyNWNjNy4uZmQzNTA5MzI4NWMwZGIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXFxuQEAgLTIzLDYgKzIzLDE1IEBAIHN0cnVjdCBtYXBfdmFsdWUge1xcbiBcXHRzdHJ1Y3Qgbm9kZV9kYXRhIF9fa3B0ciAqbm9kZTtcXG4gfTtcXG4gXFxuK3N0cnVjdCBub2RlX3JlZmNvdW50X29ubHkge1xcbitcXHRsb25nIGtleTtcXG4rXFx0c3RydWN0IGJwZl9yZWZjb3VudCByZWZjb3VudDtcXG4rfTtcXG4rXFxuK3N0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSB7XFxuK1xcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgX19rcHRyICpub2RlO1xcbit9O1xcbitcXG4gc3RydWN0IHtcXG4gXFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XFxuIFxcdF9fdHlwZShrZXksIGludCk7XFxuQEAgLTMwLDYgKzM5LDEzIEBAIHN0cnVjdCB7XFxuIFxcdF9fdWludChtYXhfZW50cmllcywgMik7XFxuIH0gc3Rhc2hlZF9ub2RlcyBTRUMoXFxcIi5tYXBzXFxcIik7XFxuIFxcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbit9IHN0YXNoZWRfcmVmY291bnRfb25seSBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbiBzdHJ1Y3Qgbm9kZV9hY3F1aXJlIHtcXG4gXFx0bG9uZyBrZXk7XFxuIFxcdGxvbmcgZGF0YTtcXG5AQCAtODMyLDYgKzg0OCw1MSBAQCBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwidGNcXFwiKVxcbitfX3N1Y2Nlc3NcXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX293bmluZ19pbnB1dF9ub19udWxsX2NoZWNrKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcXG4rXFxuK1xcdG4gPSBicGZfb2JqX25ldyh0eXBlb2YoKm4pKTtcXG4rXFx0aWYgKCFuKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcXG4rXFx0YnBmX29ial9kcm9wKG0pO1xcbitcXHRicGZfb2JqX2Ryb3Aobik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y1xcXCIpXFxuK19fc3VjY2Vzc1xcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX251bGxfY2hlY2tlZCh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XFxuK1xcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptO1xcbitcXHRpbnQgaWR4ID0gMDtcXG4rXFxuK1xcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnN0YXNoZWRfcmVmY291bnRfb25seSwgXFx1MDAyNmlkeCk7XFxuK1xcdGlmICghbWFwdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XFxuK1xcdG4gPSBtYXB2YWwtXFx1MDAzZW5vZGU7XFxuK1xcdGlmICghbikge1xcbitcXHRcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiAyO1xcbitcXHR9XFxuK1xcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcXG4rXFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0aWYgKCFtKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFx0YnBmX29ial9kcm9wKG0pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBsb25nIF9fc3Rhc2hfbWFwX2VtcHR5X3hjaGcoc3RydWN0IG5vZGVfZGF0YSAqbiwgaW50IGlkeClcXG4ge1xcbiBcXHRzdHJ1Y3QgbWFwX3ZhbHVlICptYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZzdGFzaGVkX25vZGVzLCBcXHUwMDI2aWR4KTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xcbmluZGV4IDAyNGVmMmFhZTIwMDgyLi44MGI5MmQ3ZWM5Y2FiYSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXFxuQEAgLTE5LDYgKzE5LDE1IEBAIHN0cnVjdCBub2RlX3JlZmNvdW50ZWQge1xcbiBcXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xcbiB9O1xcbiBcXG4rc3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7XFxuK1xcdGxvbmcga2V5O1xcbitcXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xcbit9O1xcbitcXG4rc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHtcXG4rXFx0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7XFxuK307XFxuK1xcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XFxuIGV4dGVybiB2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xcbiBcXG5AQCAtMjgsNiArMzcsMTMgQEAgcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3Jvb3QgX19jb250YWlucyhub2RlX2FjcXVpcmUsIG5vZGUpO1xcbiBwcml2YXRlKEIpIHN0cnVjdCBicGZfc3Bpbl9sb2NrIGxvY2s7XFxuIHByaXZhdGUoQikgc3RydWN0IGJwZl9saXN0X2hlYWQgaGVhZCBfX2NvbnRhaW5zKG5vZGVfcmVmY291bnRlZCwgbGlzdCk7XFxuIFxcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbit9IHN0YXNoZWRfcmVmY291bnRfb25seSBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbiBzdGF0aWMgYm9vbCBsZXNzKHN0cnVjdCBicGZfcmJfbm9kZSAqYSwgY29uc3Qgc3RydWN0IGJwZl9yYl9ub2RlICpiKVxcbiB7XFxuIFxcdHN0cnVjdCBub2RlX2FjcXVpcmUgKm5vZGVfYTtcXG5AQCAtODAsNiArOTYsNjQgQEAgbG9uZyByZWZjb3VudF9hY3F1aXJlX21heWJlX251bGwodm9pZCAqY3R4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rU0VDKFxcXCI/dGNcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcIlBvc3NpYmx5IE5VTEwgcG9pbnRlciBwYXNzZWQgdG8gdHJ1c3RlZCBSMVxcXCIpXFxuK2xvbmcgcmVmY291bnRfYWNxdWlyZV9yY3VfbWFwX2twdHJfdW5jaGVja2VkX2Ryb3Aodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xcbitcXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICp0bXAsICpuLCAqbTtcXG4rXFx0aW50IGlkeCA9IDA7XFxuK1xcbitcXHR0bXAgPSBicGZfb2JqX25ldyh0eXBlb2YoKnRtcCkpO1xcbitcXHRpZiAoIXRtcClcXG4rXFx0XFx0cmV0dXJuIDM7XFxuK1xcdGJwZl9vYmpfZHJvcCh0bXApO1xcbitcXG4rXFx0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcXHUwMDI2aWR4KTtcXG4rXFx0aWYgKCFtYXB2YWwpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4rXFx0YnBmX3JjdV9yZWFkX2xvY2soKTtcXG4rXFx0biA9IG1hcHZhbC1cXHUwMDNlbm9kZTtcXG4rXFx0aWYgKCFuKSB7XFxuK1xcdFxcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0cmV0dXJuIDI7XFxuK1xcdH1cXG4rXFx0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xcbitcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRicGZfb2JqX2Ryb3AobSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCI/dGNcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImlzIGFuIHVudHJ1c3RlZCByZWZjb3VudGVkIGtwdHJcXFwiKVxcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfYWZ0ZXJfcmN1X3VubG9jayh2b2lkICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XFxuK1xcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKm4sICptO1xcbitcXHRpbnQgaWR4ID0gMDtcXG4rXFxuK1xcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNnN0YXNoZWRfcmVmY291bnRfb25seSwgXFx1MDAyNmlkeCk7XFxuK1xcdGlmICghbWFwdmFsKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XFxuK1xcdG4gPSBtYXB2YWwtXFx1MDAzZW5vZGU7XFxuK1xcdGlmICghbikge1xcbitcXHRcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdFxcdHJldHVybiAyO1xcbitcXHR9XFxuK1xcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcXG4rXFx0aWYgKG0pXFxuK1xcdFxcdGJwZl9vYmpfZHJvcChtKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBTRUMoXFxcIj90Y1xcXCIpXFxuIF9fZmFpbHVyZSBfX21zZyhcXFwiVW5yZWxlYXNlZCByZWZlcmVuY2UgaWQ9MyBhbGxvY19pbnNuPXt7WzAtOV0rfX1cXFwiKVxcbiBsb25nIHJidHJlZV9yZWZjb3VudGVkX25vZGVfcmVmX2VzY2FwZXNfb3duaW5nX2lucHV0KHZvaWQgKmN0eClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTE6Mjk6NTguNDI2ODc5NDRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2MDE4MDI5MjkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiLFxuICAgIFwiYnBmX3JlZmNvdW50X2FjcXVpcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIHJlamVjdCB1bnRydXN0ZWQgcmVmY291bnRlZCBrcHRycyBhbmQgZml4ZXMgdGhlIGFzc2lnbm1lbnQgb2YgYG1ldGEtXFx1MDAzZWFyZ19vd25pbmdfcmVmYCBmb3IgYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYCBhcmd1bWVudHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBoYW5kbGVzIGtmdW5jIGFyZ3VtZW50cywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY3MDU5NjJkYWI2ODA2Nzc4ZmZiNjA1OTI3ZDExMTI1YWQ4NjUwOGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMToyOTo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggN2FhNDczNDJkYzY1OWMuLjYzYjFkOTk3ZmU4MDQ0IDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC0xMjQxNCwxMiArMTI0MTQsMTcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9cbiBcdFx0XHRtZXRhLVx1MDAzZXN1YnByb2dubyA9IHJlZy1cdTAwM2VzdWJwcm9nbm87XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI6XG4rXHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBQVFJfVU5UUlVTVEVEKSB7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyBhbiB1bnRydXN0ZWQgcmVmY291bnRlZCBrcHRyXFxuXCIsXG4rXHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4rXHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbitcdFx0XHR9XG4gXHRcdFx0aWYgKCF0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVx1MDAzZXR5cGUpKSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlxcblwiLFxuIFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdGlmICghdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkpXG4rXHRcdFx0aWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjYgcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKVxuIFx0XHRcdFx0bWV0YS1cdTAwM2Vhcmdfb3duaW5nX3JlZiA9IHRydWU7XG4gXG4gXHRcdFx0cmVjID0gcmVnX2J0Zl9yZWNvcmQocmVnKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyLmNcbmluZGV4IDYxOTA2ZjQ4MDI1Y2M3Li5mZDM1MDkzMjg1YzBkYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0ci5jXG5AQCAtMjMsNiArMjMsMTUgQEAgc3RydWN0IG1hcF92YWx1ZSB7XG4gXHRzdHJ1Y3Qgbm9kZV9kYXRhIF9fa3B0ciAqbm9kZTtcbiB9O1xuIFxuK3N0cnVjdCBub2RlX3JlZmNvdW50X29ubHkge1xuK1x0bG9uZyBrZXk7XG4rXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuK307XG4rXG4rc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5IHtcbitcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgX19rcHRyICpub2RlO1xuK307XG4rXG4gc3RydWN0IHtcbiBcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuIFx0X190eXBlKGtleSwgaW50KTtcbkBAIC0zMCw2ICszOSwxMyBAQCBzdHJ1Y3Qge1xuIFx0X191aW50KG1heF9lbnRyaWVzLCAyKTtcbiB9IHN0YXNoZWRfbm9kZXMgU0VDKFwiLm1hcHNcIik7XG4gXG4rc3RydWN0IHtcbitcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuK1x0X190eXBlKGtleSwgaW50KTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5KTtcbitcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4rfSBzdGFzaGVkX3JlZmNvdW50X29ubHkgU0VDKFwiLm1hcHNcIik7XG4rXG4gc3RydWN0IG5vZGVfYWNxdWlyZSB7XG4gXHRsb25nIGtleTtcbiBcdGxvbmcgZGF0YTtcbkBAIC04MzIsNiArODQ4LDUxIEBAIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlc19vd25pbmdfaW5wdXQodm9pZCAqY3R4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK1NFQyhcInRjXCIpXG4rX19zdWNjZXNzXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX293bmluZ19pbnB1dF9ub19udWxsX2NoZWNrKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcbitcbitcdG4gPSBicGZfb2JqX25ldyh0eXBlb2YoKm4pKTtcbitcdGlmICghbilcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XG4rXHRicGZfb2JqX2Ryb3AobSk7XG4rXHRicGZfb2JqX2Ryb3Aobik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rU0VDKFwidGNcIilcbitfX3N1Y2Nlc3Ncbitsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX251bGxfY2hlY2tlZCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IG1hcF92YWx1ZV9yZWZjb3VudF9vbmx5ICptYXB2YWw7XG4rXHRzdHJ1Y3Qgbm9kZV9yZWZjb3VudF9vbmx5ICpuLCAqbTtcbitcdGludCBpZHggPSAwO1xuK1xuK1x0bWFwdmFsID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZzdGFzaGVkX3JlZmNvdW50X29ubHksIFx1MDAyNmlkeCk7XG4rXHRpZiAoIW1hcHZhbClcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRicGZfcmN1X3JlYWRfbG9jaygpO1xuK1x0biA9IG1hcHZhbC1cdTAwM2Vub2RlO1xuK1x0aWYgKCFuKSB7XG4rXHRcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cmV0dXJuIDI7XG4rXHR9XG4rXHRtID0gYnBmX3JlZmNvdW50X2FjcXVpcmUobik7XG4rXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRpZiAoIW0pXG4rXHRcdHJldHVybiAzO1xuK1x0YnBmX29ial9kcm9wKG0pO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBsb25nIF9fc3Rhc2hfbWFwX2VtcHR5X3hjaGcoc3RydWN0IG5vZGVfZGF0YSAqbiwgaW50IGlkeClcbiB7XG4gXHRzdHJ1Y3QgbWFwX3ZhbHVlICptYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfbm9kZXMsIFx1MDAyNmlkeCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvcmVmY291bnRlZF9rcHRyX2ZhaWwuY1xuaW5kZXggMDI0ZWYyYWFlMjAwODIuLjgwYjkyZDdlYzljYWJhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3JlZmNvdW50ZWRfa3B0cl9mYWlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHJfZmFpbC5jXG5AQCAtMTksNiArMTksMTUgQEAgc3RydWN0IG5vZGVfcmVmY291bnRlZCB7XG4gXHRzdHJ1Y3QgYnBmX3JlZmNvdW50IHJlZmNvdW50O1xuIH07XG4gXG4rc3RydWN0IG5vZGVfcmVmY291bnRfb25seSB7XG4rXHRsb25nIGtleTtcbitcdHN0cnVjdCBicGZfcmVmY291bnQgcmVmY291bnQ7XG4rfTtcbitcbitzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkge1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSBfX2twdHIgKm5vZGU7XG4rfTtcbitcbiBleHRlcm4gdm9pZCBicGZfcmN1X3JlYWRfbG9jayh2b2lkKSBfX2tzeW07XG4gZXh0ZXJuIHZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07XG4gXG5AQCAtMjgsNiArMzcsMTMgQEAgcHJpdmF0ZShBKSBzdHJ1Y3QgYnBmX3JiX3Jvb3QgZ3Jvb3QgX19jb250YWlucyhub2RlX2FjcXVpcmUsIG5vZGUpO1xuIHByaXZhdGUoQikgc3RydWN0IGJwZl9zcGluX2xvY2sgbG9jaztcbiBwcml2YXRlKEIpIHN0cnVjdCBicGZfbGlzdF9oZWFkIGhlYWQgX19jb250YWlucyhub2RlX3JlZmNvdW50ZWQsIGxpc3QpO1xuIFxuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK30gc3Rhc2hlZF9yZWZjb3VudF9vbmx5IFNFQyhcIi5tYXBzXCIpO1xuK1xuIHN0YXRpYyBib29sIGxlc3Moc3RydWN0IGJwZl9yYl9ub2RlICphLCBjb25zdCBzdHJ1Y3QgYnBmX3JiX25vZGUgKmIpXG4ge1xuIFx0c3RydWN0IG5vZGVfYWNxdWlyZSAqbm9kZV9hO1xuQEAgLTgwLDYgKzk2LDY0IEBAIGxvbmcgcmVmY291bnRfYWNxdWlyZV9tYXliZV9udWxsKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCI/dGNcIilcbitfX2ZhaWx1cmUgX19tc2coXCJQb3NzaWJseSBOVUxMIHBvaW50ZXIgcGFzc2VkIHRvIHRydXN0ZWQgUjFcIilcbitsb25nIHJlZmNvdW50X2FjcXVpcmVfcmN1X21hcF9rcHRyX3VuY2hlY2tlZF9kcm9wKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgbWFwX3ZhbHVlX3JlZmNvdW50X29ubHkgKm1hcHZhbDtcbitcdHN0cnVjdCBub2RlX3JlZmNvdW50X29ubHkgKnRtcCwgKm4sICptO1xuK1x0aW50IGlkeCA9IDA7XG4rXG4rXHR0bXAgPSBicGZfb2JqX25ldyh0eXBlb2YoKnRtcCkpO1xuK1x0aWYgKCF0bXApXG4rXHRcdHJldHVybiAzO1xuK1x0YnBmX29ial9kcm9wKHRtcCk7XG4rXG4rXHRtYXB2YWwgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNnN0YXNoZWRfcmVmY291bnRfb25seSwgXHUwMDI2aWR4KTtcbitcdGlmICghbWFwdmFsKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XG4rXHRuID0gbWFwdmFsLVx1MDAzZW5vZGU7XG4rXHRpZiAoIW4pIHtcbitcdFx0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1x0XHRyZXR1cm4gMjtcbitcdH1cbitcdG0gPSBicGZfcmVmY291bnRfYWNxdWlyZShuKTtcbitcdGJwZl9yY3VfcmVhZF91bmxvY2soKTtcbitcbitcdGJwZl9vYmpfZHJvcChtKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCI/dGNcIilcbitfX2ZhaWx1cmUgX19tc2coXCJpcyBhbiB1bnRydXN0ZWQgcmVmY291bnRlZCBrcHRyXCIpXG4rbG9uZyByZWZjb3VudF9hY3F1aXJlX2FmdGVyX3JjdV91bmxvY2sodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBtYXBfdmFsdWVfcmVmY291bnRfb25seSAqbWFwdmFsO1xuK1x0c3RydWN0IG5vZGVfcmVmY291bnRfb25seSAqbiwgKm07XG4rXHRpbnQgaWR4ID0gMDtcbitcbitcdG1hcHZhbCA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2c3Rhc2hlZF9yZWZjb3VudF9vbmx5LCBcdTAwMjZpZHgpO1xuK1x0aWYgKCFtYXB2YWwpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdG4gPSBtYXB2YWwtXHUwMDNlbm9kZTtcbitcdGlmICghbikge1xuK1x0XHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdHJldHVybiAyO1xuK1x0fVxuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0bSA9IGJwZl9yZWZjb3VudF9hY3F1aXJlKG4pO1xuK1x0aWYgKG0pXG4rXHRcdGJwZl9vYmpfZHJvcChtKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCI/dGNcIilcbiBfX2ZhaWx1cmUgX19tc2coXCJVbnJlbGVhc2VkIHJlZmVyZW5jZSBpZD0zIGFsbG9jX2luc249e3tbMC05XSt9fVwiKVxuIGxvbmcgcmJ0cmVlX3JlZmNvdW50ZWRfbm9kZV9yZWZfZXNjYXBlc19vd25pbmdfaW5wdXQodm9pZCAqY3R4KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTE6Mjk6NTguNDI2ODgyMTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODMzNDQ0MDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gSXQncyBnb3QgYWNjb21wYW55aW5nIHRlc3RzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYCwgd2hpY2ggaXMgZ29vZCBwcmFjdGljZS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGluIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGFyZ3VtZW50cyB3aGVuIHZhbGlkYXRpbmcga2Z1bmNzLlxuXG5TcGVjaWZpY2FsbHksIGl0IHNlZW1zIHdlJ3JlIGFkZGluZyBhIGNydWNpYWwgY2hlY2suICBUaGUgcGF0Y2ggbm93IGNvbnNpZGVycyBgUFRSX1VOVFJVU1RFRGAgZm9yIGByZWctXHUwMDNldHlwZWAuIElmIHRoZSByZWdpc3RlciAoYHJlZ2ApIGhvbGRpbmcgdGhlIGFyZ3VtZW50IGlzIG1hcmtlZCBhcyB1bnRydXN0ZWQsIHdlIGJhaWwgb3V0IHdpdGggYC1FQUNDRVNgLCBwcmV2ZW50aW5nIHBvdGVudGlhbGx5IHJpc2t5IG9wZXJhdGlvbnMuICBUaGF0J3MgYSBzZW5zaWJsZSBhZGRpdGlvbiwgZ3VhcmRpbmcgYWdhaW5zdCB1bnRydXN0ZWQgcG9pbnRlcnMgaW4gdGhpcyBjb250ZXh0LlxuXG5XZSdyZSBhbHNvIGFkanVzdGluZyB0aGUgY29uZGl0aW9uIHRoYXQgc2V0cyBgbWV0YS1cdTAwM2Vhcmdfb3duaW5nX3JlZiA9IHRydWVgLiAgVGhlIG9yaWdpbmFsIGNoZWNrIG1pZ2h0IGhhdmUgYmVlbiB0b28gYnJvYWQuIE5vdywgaXQgc2VlbXMgd2Ugb25seSBzZXQgdGhpcyBmbGFnIGlmIHRoZSB0eXBlIGlzbid0IGEgbm9uLW93bmluZyByZWYgKmFuZCogdGhlIHJlZ2lzdGVyIGlzIGFjdHVhbGx5IHJlZmVyZW5jZWQuIFRoYXQncyBhIG1vcmUgbnVhbmNlZCBhcHByb2FjaCBhbmQgc2hvdWxkIGltcHJvdmUgdGhlIGFjY3VyYWN5IG9mIHRoZSBvd25lcnNoaXAgdHJhY2tpbmcuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQncyB0b3VjaGluZyB0aGUgY29yZSBCUEYgdmVyaWZpZXIgbG9naWMsIG1lYW5pbmcgdGhpcyBpcyBhIGNoYW5nZSB0aGF0IG5lZWRzICpzaWduaWZpY2FudCogZnV6emluZyB0byBjYXRjaCBhbnkgc3VidGxlIGlzc3VlcyBvciBlZGdlIGNhc2VzLiBUaGlzIG9uZSB3YXJyYW50cyBzb21lIGV4dHJhIHNjcnV0aW55LlxuXG5MZXQncyBsb2NhdGUgd2hlcmUgdGhpcyBjb2RlIGxpdmVzLiBUaGUgZGlmZiBpbmRpY2F0ZXMgaXQncyBpbiBhIGZ1bmN0aW9uIG5hbWVkIGBjaGVja19rZnVuY19hcmdzYC4gSXMgdGhhdCBmdW5jdGlvbiBzdGF0aWM/IFllcywgdGhlIGRpZmYgY2xlYXJseSBzdGF0ZXMgaXQncyBzdGF0aWMuIFRoYXQgbWVhbnMgdGhlIGNvbXBpbGVyIG1pZ2h0IGlubGluZSBpdC4gU28gd2UgbmVlZCB0byBsb29rIGF0IGl0cyBjYWxsZXJzIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDExOjMwOjA1LjI2MDMyOTc0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTI3MDQzMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfa2Z1bmNfYXJnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTExOTEyPXN0YXRpYyBib29sIGNoZWNrX2Nzc190YXNrX2l0ZXJfYWxsb3dsaXN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE5MjctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExOTI4OnN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTI5LVxcdFxcdFxcdCAgICBpbnQgaW5zbl9pZHgpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5MTg9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk5NC1cXHQvKiBDaGVjayB0aGUgYXJndW1lbnRzICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTk1OlxcdGVyciA9IGNoZWNrX2tmdW5jX2FyZ3MoZW52LCBcXHUwMDI2bWV0YSwgaW5zbl9pZHgpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjk5Ni1cXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzI4MS1cXHRcXHRlbHNlXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEzMjgyOlxcdFxcdFxcdC8qIHNjYWxhci4gZW5zdXJlZCBieSBjaGVja19rZnVuY19hcmdzKCkgKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMyODMtXFx0XFx0XFx0bWFya19idGZfZnVuY19yZWdfc2l6ZShlbnYsIHJlZ25vLCB0LVxcdTAwM2VzaXplKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTE6MzA6MDUuNzczMDQxMjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcwMzI5OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyBLZXJuZWwgRnVuY3Rpb24gQXJndW1lbnQgQ2hlY2tzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGNoZWNrX2tmdW5jX2NhbGxgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCBjYWxsIHN0cnVjdHVyZS4gVGhlIGNvZGUgdGVsbHMgbWUgdGhhdCBgY2hlY2tfa2Z1bmNfY2FsbGAgY2FsbHMgYGNoZWNrX2tmdW5jX2FyZ3NgLiBUaGF0J3MgdGhlIG9idmlvdXMgbGluaywgYnV0IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqb3RoZXIqIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhpcyBhcmd1bWVudCBjaGVja2luZy5cblxuU28sIG5vdyBJIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgZnVuY3Rpb25zICpjYWxsKiBgY2hlY2tfa2Z1bmNfY2FsbGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBicm9hZGVyIGNvbnRleHQ7IHdoZXJlIGluIHRoZSBzeXN0ZW0gYXJlIHRoZXNlIGtlcm5lbCBmdW5jdGlvbiBjYWxscyBiZWluZyB2YWxpZGF0ZWQ/IFdoYXQgZXZlbnRzIG9yIHByb2Nlc3NlcyBsZWFkIHRvIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiBiZWluZyBpbnZva2VkPyBUaGUgZ29hbCBpcyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIGNhbGwgc3RhY2ssIHNvIEkgY2FuIHNlZSB0aGUgYmlnZ2VyIHBpY3R1cmUuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2UgYW5kIGltcG9ydGFuY2Ugb2YgdGhpcyBhcmd1bWVudCBjaGVjay4gVGhpcyBpcyBteSBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMTozMDowOS4yNDMzNzM1MzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3OTE0ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX2tmdW5jX2NhbGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz03MjM4PXN0YXRpYyBpbnQgcHJvY2Vzc19keW5wdHJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTItXFx0XFx0XFx0ICogRm9yIENPTlNUX1BUUl9UT19EWU5QVFIsIHJlZyBpcyBhbHJlYWR5IHNjcmF0Y2hlZCBieSBjaGVja19yZWdfYXJnXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjczMTM6XFx0XFx0XFx0ICogaW4gY2hlY2tfaGVscGVyX2NhbGwgYW5kIG1hcmtfYnRmX2Z1bmNfcmVnX3NpemUgaW4gY2hlY2tfa2Z1bmNfY2FsbC5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzMxNC1cXHRcXHRcXHQgKi9cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjkxNj1zdGF0aWMgaW50IGNoZWNrX3JldHVybl9jb2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCByZWdubywgY29uc3QgY2hhciAqcmVnX25hbWUpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjkxNy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI5MTg6c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5MTktXFx0XFx0XFx0ICAgIGludCAqaW5zbl9pZHhfcClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzI0MD1zdGF0aWMgaW50IGRvX2NoZWNrX2luc24oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgYm9vbCAqZG9fcHJpbnRfc3RhdGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczMDgtXFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZXNyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNzMwOTpcXHRcXHRcXHRcXHRyZXR1cm4gY2hlY2tfa2Z1bmNfY2FsbChlbnYsIGluc24sIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTczMTAtXFx0XFx0XFx0cmV0dXJuIGNoZWNrX2hlbHBlcl9jYWxsKGVudiwgaW5zbiwgXFx1MDAyNmVudi1cXHUwMDNlaW5zbl9pZHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMTozMDowOS4zODEyOTYzNTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM3ODA3ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIEJQRiBWZXJpZmljYXRpb24gRmxvdyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgQlBGIHZlcmlmaWNhdGlvbiwgdGhhdCBgYnBmX2NoZWNrYCBmdW5jdGlvbiwgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSXQncyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCwgdGhlIGZpcnN0IHBsYWNlIHRoZSB2ZXJpZmllciBsb29rcy4gQW5kLCBpdCB0aGVuIGNhbGxzIGBkb19jaGVja2AsIHdoaWNoLCBhcyB0aGUgbmFtZSBzdWdnZXN0cywgc2VlbXMgdG8gYmUgZG9pbmcgdGhlIGhlYXZ5IGxpZnRpbmcgb2YgaW5zdHJ1Y3Rpb24tbGV2ZWwgYW5hbHlzaXMuIE5vdywgYGRvX2NoZWNrYCBjYWxscyBgZG9fY2hlY2tfaW5zbmAsIGluZGljYXRpbmcgYSBwb3NzaWJseSBldmVuIGxvd2VyLWxldmVsLCBpbnN0cnVjdGlvbi1zcGVjaWZpYyBjaGVja2luZy4gQW5kLCBtb3N0IGltcG9ydGFudGx5LCBgZG9fY2hlY2tfaW5zbmAgY2FsbHMgYGNoZWNrX2tmdW5jX2NhbGxgLiBOb3cgbGV0J3MganVzdCBtYWtlIHN1cmUgYGNoZWNrX2tmdW5jX2NhbGxgIGlzIHN0YXRpYy4gWWVzIGl0IGlzLCB3aGljaCBpcyBnb29kLiBTbywgdGhlIHZlcmlmaWNhdGlvbiBpcyBpbml0aWF0ZWQgYXQgYGJwZl9jaGVja2AsIHRyaWNrbGVzIGRvd24gdGhyb3VnaCBhIHNlcmllcyBvZiBpbmNyZWFzaW5nbHkgc3BlY2lmaWMgY2hlY2tzLCBldmVudHVhbGx5IGhpdHRpbmcgYGNoZWNrX2tmdW5jX2NhbGxgIHdoZW4gbmVlZGVkLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gaW4gY29tcGxleCBjb2RlOiBhIGhpZ2gtbGV2ZWwgZW50cnkgcG9pbnQgZm9sbG93ZWQgYnkgYSBzZXJpZXMgb2Ygc3BlY2lhbGl6ZWQgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjMwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDExOjMwOjEzLjIxOTEwNzMyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDgzMDU1NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2NoZWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTU9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTc6LyogYnBmX2NoZWNrKCkgaXMgYSBzdGF0aWMgY29kZSBhbmFseXplciB0aGF0IHdhbGtzIGVCUEYgcHJvZ3JhbVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OC0gKiBpbnN0cnVjdGlvbiBieSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyByZWdpc3Rlci9zdGFjayBzdGF0ZS5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTg5Nz1zdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19yYnRyZWVfbm9kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExOTA4LSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE5MDk6ICogQW55IHNsZWVwYWJsZSBwcm9ncyBhcmUgYWxzbyBzYWZlIHNpbmNlIGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KCkgZW5mb3JjZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTkxMC0gKiB0aGVtIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIHNvbWUgc3BlY2lmaWMgaG9vayBwb2ludHMuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4OTY9YnRmX2F0dGFjaF9mdW5jX3Byb3RvKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csIHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGZ1bmNfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg5MzAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4OTMxOmludCBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODkzMi1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MzM2PXN0YXRpYyBpbnQgY2hlY2tfYXR0YWNoX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzY2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTM2NzpcXHRyZXQgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChcXHUwMDI2ZW52LVxcdTAwM2Vsb2csIHByb2csIHRndF9wcm9nLCBidGZfaWQsIFxcdTAwMjZ0Z3RfaW5mbyk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzY4LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0MzUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NDM2OmludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk0MzctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk2MzM9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc3Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3Nzc6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Nzc4LVxcdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzkxLVxcdC8qICdzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudicgY2FuIGJlIGdsb2JhbCwgYnV0IHNpbmNlIGl0J3Mgbm90IHNtYWxsLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTc5MjpcXHQgKiBhbGxvY2F0ZS9mcmVlIGl0IGV2ZXJ5IHRpbWUgYnBmX2NoZWNrKCkgaXMgY2FsbGVkXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzkzLVxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODY2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg2NzpcXHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm9fZWFybHkoZW52LCBhdHRyLCB1YXR0cik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODY4LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODc4LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg3OTpcXHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODgwLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODkyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg5MzpcXHRyZXQgPSBicGZfY2hlY2tfY2ZnKGVudik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODk0LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMTozMDoxMy4zNjc0MTY4ODlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjgwMDcyNTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGBicGZfY2hlY2tgIGFuZCBSZWZjb3VudGVkIEtQVFJzKipcblxuUmlnaHQsIHNvIGBicGZfY2hlY2tgLi4uIHRoYXQncyB0aGUgY29yZSwgaXNuJ3QgaXQ/IFRoZSBzdGFydGluZyBwb2ludC4gTXkgYnJhaW4ncyBub3cgYnV6emluZyB3aXRoIHRoZSBwb3NzaWJpbGl0aWVzLiBJIG5lZWQgdG8gemVybyBpbiBvbiBhbnl0aGluZyBzcGVjaWZpY2FsbHkgY29ubmVjdGVkIHRvIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAuIFRoYXQgcGFydGljdWxhciBrZnVuYyBhcmd1bWVudCB0eXBlIGlzIGFsd2F5cyBpbnRlcmVzdGluZywgYSB2aXRhbCBhc3BlY3QgdG8gY29uc2lkZXIuIEl0J3Mgb2Z0ZW4gd2hlcmUgdGhlIHJlYWwgbWFnaWMgLSBvciBwb3RlbnRpYWwgcGl0ZmFsbHMgLSBsaWUgd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsIHBvaW50ZXJzIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IHdpdGhpbiBCUEYuIFdoYXQncyB0aGUgY29udGV4dCBoZXJlPyBBcmUgdGhlcmUgbmV3IHVzZXM/IE9wdGltaXphdGlvbj8gU2VjdXJpdHkgaW1wbGljYXRpb25zP1xuXG5BaCwgYW5kIEkgc2VlIHRoZSBwYXRjaCBhbHNvIG1lbnRpb25zIHRlc3RzIGZvciBgYnBmX3JlZmNvdW50X2FjcXVpcmVgLiBUaGF0J3MgaW1wb3J0YW50ISBUZXN0aW5nIGFyb3VuZCByZWZjb3VudGluZyBvcGVyYXRpb25zLCBlc3BlY2lhbGx5IGluIEJQRiwgaXMgKmNydWNpYWwqIGZvciBzdGFiaWxpdHkuIEl0J3MgdGhlIGx5bmNocGluIGZvciBlbnN1cmluZyB3ZSBkb24ndCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIGRhdGEgY29ycnVwdGlvbi4gVGhlIHRlc3RzIHNob3VsZCBiZSBsb29rZWQgaW50byB3aXRoIHJlYWwgY2FyZS4gSG93IHRob3JvdWdoIGFyZSB0aGV5PyBEbyB0aGV5IGNvdmVyIGVkZ2UgY2FzZXM/IEFyZSB0aGVyZSBuZXcgdGVzdCBjYXNlcyBjb3ZlcmluZyByZWZjb3VudGluZyBpbiB0aGUgcmVsZXZhbnQgY29udGV4dD8gVW5kZXJzdGFuZGluZyB0aGUgdGVzdCBzdHJhdGVneSBpcyBwYXJhbW91bnQgZm9yIGtub3dpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjkxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTE6MzA6MTguMDQ3NDkyNDk3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDI2Mjk5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3JlZmNvdW50X2FjcXVpcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oZWxwZXJzLmM9MjQ0OT1fX2JwZl9rZnVuYyB2b2lkIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCh2b2lkICpwX19hbGxvYywgdm9pZCAqbWV0YV9faWduKVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1NC0vKipcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDU1OiAqIGJwZl9yZWZjb3VudF9hY3F1aXJlKCkgLSB0dXJuIGEgbG9jYWwga3B0ciBpbnRvIGFuIG93bmluZyByZWZlcmVuY2VcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDU2LSAqIEBwX19yZWZjb3VudGVkX2twdHI6IG5vbi1vd25pbmcgbG9jYWwga3B0clxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2My0gKi9cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDY0Ol9fYnBmX2tmdW5jIHZvaWQgKmJwZl9yZWZjb3VudF9hY3F1aXJlKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgc3RydWN0IGJ0Zl9zdHJ1Y3RfbWV0YSAqbWV0YSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDY1LXtcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODAtXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MTpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsKHZvaWQgKnBfX3JlZmNvdW50ZWRfa3B0ciwgdm9pZCAqbWV0YV9faWduKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODIte1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0ODM6XFx0cmV0dXJuIGJwZl9yZWZjb3VudF9hY3F1aXJlKHBfX3JlZmNvdW50ZWRfa3B0ciwgbWV0YV9faWduKTtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDg0LX1cXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jPTQ4MTM9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9wZXJjcHVfb2JqX2Ryb3BfaW1wbCwgS0ZfUkVMRUFTRSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODE0OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVmY291bnRfYWNxdWlyZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfUkNVIHwgS0ZfSU1QTElDSVRfQVJHUylcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzo0ODE1OkJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9SQ1UpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtNDgxNi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2xpc3RfcHVzaF9mcm9udCwgS0ZfSU1QTElDSVRfQVJHUylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTAwND1lbnVtIHNwZWNpYWxfa2Z1bmNfdHlwZSB7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwMDgtXFx0S0ZfYnBmX29ial9kcm9wLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTAwOTpcXHRLRl9icGZfcmVmY291bnRfYWNxdWlyZV9pbXBsLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTAxMDpcXHRLRl9icGZfcmVmY291bnRfYWNxdWlyZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwMTEtXFx0S0ZfYnBmX2xpc3RfcHVzaF9mcm9udF9pbXBsLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDgxPUJURl9JRChmdW5jLCBicGZfb2JqX2Ryb3ApXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDgyOkJURl9JRChmdW5jLCBicGZfcmVmY291bnRfYWNxdWlyZV9pbXBsKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTA4MzpCVEZfSUQoZnVuYywgYnBmX3JlZmNvdW50X2FjcXVpcmUpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMDg0LUJURl9JRChmdW5jLCBicGZfbGlzdF9wdXNoX2Zyb250X2ltcGwpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExOTE9c3RhdGljIGJvb2wgaXNfYnBmX3BlcmNwdV9vYmpfZHJvcF9rZnVuYyh1MzIgZnVuY19pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE5Ni1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExOTc6c3RhdGljIGJvb2wgaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmModTMyIGZ1bmNfaWQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTk4LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExOTk6XFx0cmV0dXJuIGZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZWZjb3VudF9hY3F1aXJlXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIwMDpcXHQgICAgICAgZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbF07XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjAxLX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTIyND1zdGF0aWMgYm9vbCBpc19rZnVuY19yZXRfbnVsbChzdHJ1Y3QgYnBmX2tmdW5jX2NhbGxfYXJnX21ldGEgKm1ldGEpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjI1LXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyMjY6XFx0aWYgKGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKG1ldGEtXFx1MDAzZWZ1bmNfaWQpIFxcdTAwMjZcXHUwMDI2IG1ldGEtXFx1MDAzZWFyZ19vd25pbmdfcmVmKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTIyNy1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE2MzI9c3RhdGljIGJvb2wgaXNfYnBmX2dyYXBoX2FwaV9rZnVuYyh1MzIgYnRmX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjM1LVxcdCAgICAgICBpc19icGZfcmJ0cmVlX2FwaV9rZnVuYyhidGZfaWQpIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNjM2OlxcdCAgICAgICBpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhidGZfaWQpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTYzNy19XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI3NDc9c3RhdGljIGludCBjaGVja19zcGVjaWFsX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjgzNS1cXHRcXHRpbnNuX2F1eC1cXHUwMDNla3B0cl9zdHJ1Y3RfbWV0YSA9IHN0cnVjdF9tZXRhO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjgzNjpcXHR9IGVsc2UgaWYgKGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKG1ldGEtXFx1MDAzZWZ1bmNfaWQpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyODM3LVxcdFxcdG1hcmtfcmVnX2tub3duX3plcm8oZW52LCByZWdzLCBCUEZfUkVHXzApO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyOTE4PXN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxMzgtXFx0XFx0ICAgICAhaXNfYnBmX3BlcmNwdV9vYmpfbmV3X2tmdW5jKG1ldGEuZnVuY19pZCkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTMxMzk6XFx0XFx0ICAgICAhaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMobWV0YS5mdW5jX2lkKSkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTMxNDAtXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJhY3F1aXJlIGtlcm5lbCBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gUFRSX1RPX0JURl9JRFxcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk2MzM9aW50IGJwZl9maXh1cF9rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY4MS1cXHRcXHQgICBpc19icGZfcGVyY3B1X29ial9kcm9wX2tmdW5jKGRlc2MtXFx1MDAzZWZ1bmNfaWQpIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjgyOlxcdFxcdCAgIGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKGRlc2MtXFx1MDAzZWZ1bmNfaWQpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjgzLVxcdFxcdHN0cnVjdCBidGZfc3RydWN0X21ldGEgKmtwdHJfc3RydWN0X21ldGEgPSBlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbaW5zbl9pZHhdLmtwdHJfc3RydWN0X21ldGE7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2OTEtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NjkyOlxcdFxcdGlmIChpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhkZXNjLVxcdTAwM2VmdW5jX2lkKSBcXHUwMDI2XFx1MDAyNiAha3B0cl9zdHJ1Y3RfbWV0YSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY5My1cXHRcXHRcXHR2ZXJpZmllcl9idWcoZW52LCBcXFwia3B0cl9zdHJ1Y3RfbWV0YSBleHBlY3RlZCBhdCBpbnNuX2lkeCAlZFxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDExOjMwOjE4LjQ5MDEyNzg3NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODU2OTAyNzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVmVyaWZpY2F0aW9uIExvZ2ljIGZvciBLRnVuYyBBcmd1bWVudHMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIHRlc3RzIHRoYXQgYXJlIGxldmVyYWdpbmcgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCwgd2hpY2ggSSBrbm93IGlzIGEga2Z1bmMuIFRoZSBjb3JlIGNoYW5nZSBoZXJlIGlzIGluIGBjaGVja19rZnVuY19hcmdzYCB0byBoYW5kbGUgdGhvc2UgYEtGX0FSR19QVFJfVE9fUkVGQ09VTlRFRF9LUFRSYCBhcmd1bWVudHMuIFRoZSBjcnVjaWFsIHBhcnQgb2YgdGhpcyBpcyB0aGUgdmVyaWZpZXIgbG9naWMuIEkga25vdyBgYnBmX2NoZWNrYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byB0aGUgdmVyaWZpZXIsIGFuZCB0aGF0IGl0J3MgY2FsbGVkIGJ5IGBicGZfcHJvZ19sb2FkYCwgd2hpY2ggaXMgdWx0aW1hdGVseSByZWFjaGFibGUgdGhyb3VnaCB0aGUgYGJwZmAgc3lzY2FsbC5cblxuVGhlcmVmb3JlLCB0aGUgb2J2aW91cyBmdXp6aW5nIHRhcmdldCBoZXJlIGlzIGBicGZfcHJvZ19sb2FkYCBpdHNlbGYuIFRoYXQncyB0aGUgZW50cnkgcG9pbnQgdG8gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIHdoaWNoIHNwZWNpZmljIGZ1bmN0aW9uIHdpdGhpbiB0aGUgdmVyaWZpZXIgaXMgdGhlIG1vc3QgcHJvbWlzaW5nPyBgYnBmX2NoZWNrYCBvciBgY2hlY2tfa2Z1bmNfYXJnc2AgYXJlIGxpa2VseSBjYW5kaWRhdGVzLiBCdXQgYGNoZWNrX2tmdW5jX2FyZ3NgIGlzIHN0YXRpYywgc28gSSdsbCBuZWVkIHRvIGxvb2sgYXQgd2hldGhlciBpdCdzIGlubGluZWQuIFRoaXMgbWVhbnMgdGhhdCBgYnBmX2NoZWNrYCBvciBgY2hlY2tfa2Z1bmNfY2FsbGAgaXMgcG90ZW50aWFsbHkgdGhlIGJlc3QgcGxhY2UuXG5cbldhaXQsIGBicGZfY2hlY2tgIGlzIGEgbW9uc3RlciBvZiBhIGZ1bmN0aW9uISBNYXliZSBzb21ldGhpbmcgbW9yZSBncmFudWxhciBsaWtlIGBjaGVja19rZnVuY19jYWxsYCBpcyBiZXR0ZXIuIEl0J3Mgc3RhdGljIGFzIHdlbGwsIGJ1dCBpdCBtaWdodCBub3QgYmUgaW5saW5lZC4gSSBzaG91bGQgY2hlY2sgd2hldGhlciBgY2hlY2tfa2Z1bmNfY2FsbGAgaXMgYWN0dWFsbHkgaW5saW5lZCBvciBub3QuIFRoYXQgd2lsbCBoZWxwIG1lIGRlY2lkZSBvbiB0aGUgb3B0aW1hbCBmdXp6aW5nIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk1OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMTozMDoyNC4zNDcwMzM2OTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTQ1MzIzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGVja19rZnVuY19jYWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzIzOD1zdGF0aWMgaW50IHByb2Nlc3NfZHlucHRyX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MzEyLVxcdFxcdFxcdCAqIEZvciBDT05TVF9QVFJfVE9fRFlOUFRSLCByZWcgaXMgYWxyZWFkeSBzY3JhdGNoZWQgYnkgY2hlY2tfcmVnX2FyZ1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MzEzOlxcdFxcdFxcdCAqIGluIGNoZWNrX2hlbHBlcl9jYWxsIGFuZCBtYXJrX2J0Zl9mdW5jX3JlZ19zaXplIGluIGNoZWNrX2tmdW5jX2NhbGwuXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTczMTQtXFx0XFx0XFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5MTY9c3RhdGljIGludCBjaGVja19yZXR1cm5fY29kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgcmVnbm8sIGNvbnN0IGNoYXIgKnJlZ19uYW1lKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI5MTctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyOTE4OnN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyOTE5LVxcdFxcdFxcdCAgICBpbnQgKmluc25faWR4X3ApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTcyNDA9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzA4LVxcdFxcdFxcdGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTczMDk6XFx0XFx0XFx0XFx0cmV0dXJuIGNoZWNrX2tmdW5jX2NhbGwoZW52LCBpbnNuLCBcXHUwMDI2ZW52LVxcdTAwM2VpbnNuX2lkeCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3MzEwLVxcdFxcdFxcdHJldHVybiBjaGVja19oZWxwZXJfY2FsbChlbnYsIGluc24sIFxcdTAwMjZlbnYtXFx1MDAzZWluc25faWR4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTE6MzA6MjQuNDgyNDkyNzIxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDEzNTI3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBUYXJnZXRzIGZvciBJbnNwZWN0aW9uKipcblxuT2theSwgbGV0J3MgemVybyBpbiBvbiBhIGdvb2QgZW50cnkgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCwgZ2l2ZW4gdGhhdCBpdCdzIGEga2Z1bmMgYW5kIHRoZXJlZm9yZSBkaXJlY3RseSBpbnZva2VkIGZyb20gQlBGIHByb2dyYW1zLiBIb3dldmVyLCB0aGUgbW9kaWZpY2F0aW9uIGluIHF1ZXN0aW9uIGFmZmVjdHMgdGhlIHZlcmlmaWVyIGxvZ2ljIGl0c2VsZiwgbm90IHRoZSBkaXJlY3QgY2FsbC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gc2hpZnQgbXkgZm9jdXMuIFRoZSByZWFsIGFjdGlvbiBzZWVtcyB0byBoYXBwZW4gd2l0aGluIGBjaGVja19rZnVuY19hcmdzYCDigJMgdGhhdCdzIHdoZXJlIHRoZSBhcmd1bWVudCB2YWxpZGF0aW9uIGlzIHBlcmZvcm1lZC5cblxuU28sIGxldCdzIHJlZmluZSBteSBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scy4gV2hpbGUgYGJwZl9yZWZjb3VudF9hY3F1aXJlYCBpcyByZWxhdGVkLCBpdCdzIG5vdCB0aGUgY29yZS4gUGVyaGFwcyBgYnBmX2NoZWNrYCBpcyB0aGUgbW9yZSByZWxldmFudCBmdW5jdGlvbiB0byBleGFtaW5lLCBvciBldmVuIGBicGZfcHJvZ19sb2FkYCwgc2luY2UgdGhhdCdzIHRoZSBwb2ludCB3aGVyZSBCUEYgcHJvZ3JhbXMgYXJlIGFjdHVhbGx5IGxvYWRlZCBhbmQgY2hlY2tlZC5cblxuV2FpdCBhIHNlY29uZC4uLkknbSBnZXR0aW5nIGNsb3Nlci4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYGJwZl9jaGVja2AgKmlzKiB0aGUgbWFpbiB2ZXJpZmllciBmdW5jdGlvbi4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIGBicGZfY2hlY2tgLlxuXG5CZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUsIEkgc2hvdWxkIGFsc28gY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyB0aGF0IGluZmx1ZW5jZSB0aGUgdmVyaWZpZXIncyBiZWhhdmlvci4gUmlnaHQsIEJQRiBpcyBlbmFibGVkIHZpYSBgQ09ORklHX0JQRl9TWVNDQUxMYC4gSSdsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgc3RhcnQgdG8gdHJhY2UgdGhpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA2MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMTozMDoyOC44ODM4NDc2NzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MTcwMzA2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMTozMDoyOC45ODMwMzIzOTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMjE3NTY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZmluZGluZyB0aG9zZSBCUEYgY29uZmlndXJhdGlvbiBvcHRpb25zOlxuXG4qKkJQRiBDb25maWd1cmF0aW9uIEh1bnQqKlxuXG5BbHJpZ2h0LCB3aGVyZSB3b3VsZCBJIGV4cGVjdCB0byBmaW5kIHRoZXNlIEJQRiBjb25maWd1cmF0aW9ucz8gR2l2ZW4gdGhhdCBCUEYgaXMgYSBjb3JlIHBhcnQgb2YgdGhlIGtlcm5lbCwgYW5kIGZ1bmRhbWVudGFsbHksIGl0IG5lZWRzIHRvIGJlIGNvbmZpZ3VyZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMuIE5vdywgd2hlcmUgd291bGQgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSBiZT8gSG1tLCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgd291bGQgYmUgdW5kZXIgdGhlIGBrZXJuZWxgIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2VybmVsL2JwZi9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknZCBhbnRpY2lwYXRlIHRoZSBjb3JlIEJQRiBvcHRpb25zIHRvIHJlc2lkZS4gSG93ZXZlciwgaXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSBhcmUgc29tZSBvdmVyYXJjaGluZyBpbml0aWFsIG9wdGlvbnMsIGFuZCB0aG9zZSBtYXkgd2VsbCBiZSBkZWNsYXJlZCBpbiBgaW5pdC9LY29uZmlnYCB0byBtYW5hZ2Uga2VybmVsIGJ1aWxkIHNldHRpbmdzLiBJJ2xsIG1ha2UgYSBtZW50YWwgbm90ZSB0byBjaGVjayBib3RoIGxvY2F0aW9ucyB0byBiZSB0aG9yb3VnaCBhbmQgZW5zdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZyBjcnVjaWFsLiBUaGF0IHNob3VsZCBjb3ZlciB0aGUgbWFpbiBhcmVhcyBmb3IgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MzIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMTozMDozMi4yMTUyMTA3NjNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzQ5NTk3OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDExOjMwOjM0LjU5MDE3NDQyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjkyODg2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgYSBCUEYgVmVyaWZpZXIgQ2hhbmdlKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBoaXR0aW5nIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBnb2VzIHRvIHRoZSBpbXBhY3QuIFRoZSB2ZXJpZmllciBpcyB0aGUgKmdhdGVrZWVwZXIqIGZvciBCUEYgY29kZSBlbnRlcmluZyB0aGUga2VybmVsLCBzbyBhbnkgbW9kaWZpY2F0aW9uIGhlcmUgd2FycmFudHMgaW1tZWRpYXRlIHNjcnV0aW55LiBNeSBmaXJzdCB0aG91Z2h0IGlzOiAqaXMgdGhpcyBwYXRoIGNvbmRpdGlvbmFsPyogQXJlIHRoZXJlIGFueSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQsIGlmIGRpc2FibGVkLCB3b3VsZCBtYWtlIHRoaXMgY29kZSAqbm90KiBnZXQgY29tcGlsZWQgb3IgaW5jbHVkZWQ/IEtub3dpbmcgdGhlIGNvbmZpZyBvcHRpb25zIHRoYXQgaW5mbHVlbmNlIHRoaXMgZmlsZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlIGFuZCBpZGVudGlmeWluZyBwb3RlbnRpYWwgaW1wYWN0cyBhY3Jvc3MgZGlmZmVyZW50IGtlcm5lbCBidWlsZHMgYW5kIGRpc3RyaWJ1dGlvbnMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZyBvcHRpb25zLCBpZiBhbnksIGd1YXJkIHRoYXQgZmlsZS4gVGhhdCB3b3VsZCBiZSB0aGUgZmlyc3QgcGllY2Ugb2YgaW5mb3JtYXRpb24gSSB3b3VsZCBnYXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODY4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTE6MzA6MzguMTU5NDY1OTYxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIwNTY4OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmVyaWZpZXJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTc9Q0ZMQUdTX2NvcmUubyArPSAtV25vLW92ZXJyaWRlLWluaXQgJChjZmxhZ3Mtbm9nY3NlLXl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGUtOC1cXG5rZXJuZWwvYnBmL01ha2VmaWxlOjk6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyB0bnVtLm8gY251bS5vIGxvZy5vIHRva2VuLm8gbGl2ZW5lc3MubyBjb25zdF9mb2xkLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDExOjMwOjM4LjI3MTUyODEzNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Nzg3MTI4NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhlcmUncyBteSB0YWtlLiBJdCdzIGNsZWFyIHRoYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSByZXF1aXJlbWVudCwgb2J2aW91c2x5LiBUaGUgcGF0Y2ggaXRzZWxmIGlzIGZ1bmN0aW9uYWw7IGl0J3MgYSBtb2RpZmljYXRpb24gdG8gdGhlIEJQRiB2ZXJpZmllciB0aGF0IGFkZHJlc3NlcyBhIHNlY3VyaXR5IGNvbmNlcm4gd2l0aCB1bnRydXN0ZWQgcmVmY291bnRlZCBrcHRycyBhbmQgY29ycmVjdHMgYW4gaXNzdWUgaW4gdGhlIGBtZXRhLVx1MDAzZWFyZ19vd25pbmdfcmVmYCBhc3NpZ25tZW50LiBUaGlzIGlzIGRlZmluaXRlbHkgcHJpbWUgdGVycml0b3J5IGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmUgYGJwZl9jaGVja2AsIHNpbmNlIHRoYXQncyB3aGVyZSB0aGUgdmVyaWZpZXIncyBjb3JlIGxvZ2ljIHJlc2lkZXMgYW5kIHdoZXJlIHRoZSBrZXkgY2hlY2tzIGFyZSBwZXJmb3JtZWQuIEhvd2V2ZXIsIGBicGZfcmVmY291bnRfYWNxdWlyZWAgaXMgYWxzbyBpbXBvcnRhbnQuIEl0J3MgdGhlIGtmdW5jIHRoYXQncyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gaGFuZGxlIHRoZSBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGFyZ3VtZW50IHR5cGUuIEl0IG1ha2VzIHNlbnNlIHRvIGluY2x1ZGUgaXQgYmVjYXVzZSB0aGF0J3MgdGhlIHJ1bnRpbWUgZnVuY3Rpb24gdGhlIHZlcmlmaWVyIGlzIHNjcnV0aW5pemluZyBhcmd1bWVudHMgZm9yLCBldmVuIHRob3VnaCBJJ3ZlIGhhZCB0byBjb3JyZWN0IG15c2VsZiBhbmQgcmVtaW5kIG15c2VsZiB0aGF0IGl0J3MgdGhlIHZlcmlmaWVyIGNoZWNraW5nIGF0IGxvYWQgdGltZS4gRnV6emluZyB0aGUgdmVyaWZpZXIgKmlzKiBkb25lIHRocm91Z2ggbG9hZGluZyBCUEYgcHJvZ3JhbXMsIHdoaWNoIGlzIHdoeSBgYnBmX2NoZWNrYCBpcyB0aGUgYmVzdCBwcmltYXJ5IGZvY3VzLiBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGlzIHJlbGV2YW50IGFzIGl0J3MgdGhlIGtmdW5jIGNhbGxlZCBpbiB0aGUgdGVzdHMuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgcmUtZXhhbWluZSB0aGUgY29kZSBzbmlwcGV0IGFnYWluOlxuXG5gYGBjXG4gXHRcdGNhc2UgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFI6XG4rXHRcdFx0aWYgKHJlZy1cdTAwM2V0eXBlIFx1MDAyNiBQVFJfVU5UUlVTVEVEKSB7XG4rXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyBhbiB1bnRydXN0ZWQgcmVmY291bnRlZCBrcHRyXFxuXCIsXG4rXHRcdFx0XHRcdHJlZ19hcmdfbmFtZShlbnYsIGFyZ25vKSk7XG4rXHRcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbitcdFx0XHR9XG4gXHRcdFx0aWYgKCF0eXBlX2lzX3B0cl9hbGxvY19vYmoocmVnLVx1MDAzZXR5cGUpKSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBpcyBuZWl0aGVyIG93bmluZyBvciBub24tb3duaW5nIHJlZlxcblwiLFxuIFx0XHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubykpO1xuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdFx0fVxuLVx0XHRcdGlmICghdHlwZV9pc19ub25fb3duaW5nX3JlZihyZWctXHUwMDNldHlwZSkpXG4rXHRcdFx0aWYgKCF0eXBlX2lzX25vbl9vd25pbmdfcmVmKHJlZy1cdTAwM2V0eXBlKSBcdTAwMjZcdTAwMjYgcmVnX2lzX3JlZmVyZW5jZWQoZW52LCByZWcpKVxuIFx0XHRcdFx0bWV0YS1cdTAwM2Vhcmdfb3duaW5nX3JlZiA9IHRydWU7XG5gYGBcblxuUmlnaHQsIHNvIHRoaXMgaXMgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYSBmbGF3IGluIHRoZSB2ZXJpZmllci4gVGhlIHBhdGNoJ3MgaW1wYWN0IGlzIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYywgd2hpY2ggaGFuZGxlcyBrZnVuYyBhcmd1bWVudHMsIGFuZCB0aGlzIGlzIHVsdGltYXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIEJQRiBwcm9ncmFtcyBhcmUgbG9hZGVkLiBJdCdzIGNyaXRpY2FsIHRvIGVuc3VyZSB0aGlzIGNvZGUgcGF0aCBpcyByb2J1c3QgYWdhaW5zdCBtYWxpY2lvdXMgQlBGIHByb2dyYW1zLlxuXG5UaGUgaW1wb3J0YW50IHBvaW50cyBhcmU6IGBCUEZfU1lTQ0FMTGAgZW5hYmxlZCwgYW5kIG15IGZvY3VzIHN5bWJvbHMgd2lsbCBiZSBgYnBmX2NoZWNrYCwgYW5kIGBicGZfcmVmY291bnRfYWNxdWlyZWAuIE5vdywgSSBuZWVkIHRvIGNoZWNrIGlmIGBicGZfcmVmY291bnRfYWNxdWlyZWAgaXMgZXhwb3J0ZWQgYW5kIGF2YWlsYWJsZSBmb3IgdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI4MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMTozMDo0OC4wNTg2NTk0M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4ODM4MTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9yZWZjb3VudF9hY3F1aXJlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGVscGVycy5jPTI0NDk9X19icGZfa2Z1bmMgdm9pZCBicGZfcGVyY3B1X29ial9kcm9wX2ltcGwodm9pZCAqcF9fYWxsb2MsIHZvaWQgKm1ldGFfX2lnbilcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTQtLyoqXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ1NTogKiBicGZfcmVmY291bnRfYWNxdWlyZSgpIC0gdHVybiBhIGxvY2FsIGtwdHIgaW50byBhbiBvd25pbmcgcmVmZXJlbmNlXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ1Ni0gKiBAcF9fcmVmY291bnRlZF9rcHRyOiBub24tb3duaW5nIGxvY2FsIGtwdHJcXG4tLVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NjMtICovXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ2NDpfX2JwZl9rZnVuYyB2b2lkICpicGZfcmVmY291bnRfYWNxdWlyZSh2b2lkICpwX19yZWZjb3VudGVkX2twdHIsIHN0cnVjdCBidGZfc3RydWN0X21ldGEgKm1ldGEpXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ2NS17XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDgwLVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0ODE6X19icGZfa2Z1bmMgdm9pZCAqYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbCh2b2lkICpwX19yZWZjb3VudGVkX2twdHIsIHZvaWQgKm1ldGFfX2lnbilcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDgyLXtcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDgzOlxcdHJldHVybiBicGZfcmVmY291bnRfYWNxdWlyZShwX19yZWZjb3VudGVkX2twdHIsIG1ldGFfX2lnbik7XFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4NC19XFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYz00ODEzPUJURl9JRF9GTEFHUyhmdW5jLCBicGZfcGVyY3B1X29ial9kcm9wX2ltcGwsIEtGX1JFTEVBU0UpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDgxNDpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlZmNvdW50X2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1JDVSB8IEtGX0lNUExJQ0lUX0FSR1MpXFxua2VybmVsL2JwZi9oZWxwZXJzLmM6NDgxNTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlZmNvdW50X2FjcXVpcmVfaW1wbCwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfUkNVKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTQ4MTYtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9saXN0X3B1c2hfZnJvbnQsIEtGX0lNUExJQ0lUX0FSR1MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDExOjMwOjQ4LjQ4NzUwMjIyOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzI2NjI1MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGBicGZfcmVmY291bnRfYWNxdWlyZWAgYW5kIHRoZSBCUEYgVmVyaWZpZXIqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBicGZfcmVmY291bnRfYWNxdWlyZWAgaXMgYSBgX19icGZfa2Z1bmNgLCBtZWFuaW5nIGl0J3MgYSBub24tc3RhdGljIGtlcm5lbCBmdW5jdGlvbiB0aGF0J3MgZXhwb3NlZCBmb3IgQlBGIHByb2dyYW1zLiBNeSBwcmltYXJ5IGZvY3VzIGhlcmUgaXMgdW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHZlcmlmaWVyLCBwYXJ0aWN1bGFybHkgYGJwZl9jaGVja2AsIHdoaWNoIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB2YWxpZGF0aW5nIEJQRiBwcm9ncmFtcy4gSSdtIHRyZWF0aW5nIGBicGZfY2hlY2tgIGFuZCBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGFzIG15IEZvY3VzU3ltYm9scyBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaGUgaW5pdGlhbCBjbHVlIHBvaW50cyB0byBgQlBGX1NZU0NBTExgLCBhbmQgSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgZWxzZS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgZW5hYmxpbmcgY29uZmlncyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblRvIGdldCBhIGJldHRlciBncmlwIG9uIGhvdyBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGlzIHVzZWQsIEkgc2hvdWxkIGNoZWNrIHRoZSB0ZXN0IGZpbGVzLiBCYXNlZCBvbiB0aGUgZmlsZSBwYXRoLCB0aGUgdGVzdHMgc2hvdWxkIGJlIGxvY2F0ZWQgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9yZWZjb3VudGVkX2twdHIuY2AuIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoaXMgZnVuY3Rpb25hbGl0eSBieSBsb29raW5nIGF0IGhvdyBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIGlzIHVzZWQuXG5cbkxhc3RseSwgSSBuZWVkIHRvIGNvbnNpZGVyIGRlcGVuZGVuY2llcy4gRG9lcyBgYnBmX3JlZmNvdW50X2FjcXVpcmVgIHJlcXVpcmUgYW55IG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gYmUgZW5hYmxlZD8gSWYgc28sIGlkZW50aWZ5aW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBjb21wbGV0ZSBvcGVyYXRpb25hbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDEyMiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMTozMDo1My4yMTQxMzE0MjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjY5Mjc4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcmVmY291bnRfYWNxdWlyZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hlbHBlcnMuYz0yNDQ5PV9fYnBmX2tmdW5jIHZvaWQgYnBmX3BlcmNwdV9vYmpfZHJvcF9pbXBsKHZvaWQgKnBfX2FsbG9jLCB2b2lkICptZXRhX19pZ24pXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDU0LS8qKlxcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NTU6ICogYnBmX3JlZmNvdW50X2FjcXVpcmUoKSAtIHR1cm4gYSBsb2NhbCBrcHRyIGludG8gYW4gb3duaW5nIHJlZmVyZW5jZVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NTYtICogQHBfX3JlZmNvdW50ZWRfa3B0cjogbm9uLW93bmluZyBsb2NhbCBrcHRyXFxuLS1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy0yNDYzLSAqL1xcbmtlcm5lbC9icGYvaGVscGVycy5jOjI0NjQ6X19icGZfa2Z1bmMgdm9pZCAqYnBmX3JlZmNvdW50X2FjcXVpcmUodm9pZCAqcF9fcmVmY291bnRlZF9rcHRyLCBzdHJ1Y3QgYnRmX3N0cnVjdF9tZXRhICptZXRhKVxcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0NjUte1xcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4MC1cXG5rZXJuZWwvYnBmL2hlbHBlcnMuYzoyNDgxOl9fYnBmX2tmdW5jIHZvaWQgKmJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwodm9pZCAqcF9fcmVmY291bnRlZF9rcHRyLCB2b2lkICptZXRhX19pZ24pXFxua2VybmVsL2JwZi9oZWxwZXJzLmMtMjQ4Mi17XFxua2VybmVsL2JwZi9oZWxwZXJzLmM6MjQ4MzpcXHRyZXR1cm4gYnBmX3JlZmNvdW50X2FjcXVpcmUocF9fcmVmY291bnRlZF9rcHRyLCBtZXRhX19pZ24pO1xcbmtlcm5lbC9icGYvaGVscGVycy5jLTI0ODQtfVxcbi0tXFxua2VybmVsL2JwZi9oZWxwZXJzLmM9NDgxMz1CVEZfSURfRkxBR1MoZnVuYywgYnBmX3BlcmNwdV9vYmpfZHJvcF9pbXBsLCBLRl9SRUxFQVNFKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4MTQ6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9SQ1UgfCBLRl9JTVBMSUNJVF9BUkdTKVxcbmtlcm5lbC9icGYvaGVscGVycy5jOjQ4MTU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1JDVSlcXG5rZXJuZWwvYnBmL2hlbHBlcnMuYy00ODE2LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfbGlzdF9wdXNoX2Zyb250LCBLRl9JTVBMSUNJVF9BUkdTKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMDA0PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTAwOC1cXHRLRl9icGZfb2JqX2Ryb3AsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDA5OlxcdEtGX2JwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDEwOlxcdEtGX2JwZl9yZWZjb3VudF9hY3F1aXJlLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTAxMS1cXHRLRl9icGZfbGlzdF9wdXNoX2Zyb250X2ltcGwsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTEwODE9QlRGX0lEKGZ1bmMsIGJwZl9vYmpfZHJvcClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEwODI6QlRGX0lEKGZ1bmMsIGJwZl9yZWZjb3VudF9hY3F1aXJlX2ltcGwpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMDgzOkJURl9JRChmdW5jLCBicGZfcmVmY291bnRfYWNxdWlyZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEwODQtQlRGX0lEKGZ1bmMsIGJwZl9saXN0X3B1c2hfZnJvbnRfaW1wbClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTE5MT1zdGF0aWMgYm9vbCBpc19icGZfcGVyY3B1X29ial9kcm9wX2tmdW5jKHUzMiBmdW5jX2lkKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTk2LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE5NzpzdGF0aWMgYm9vbCBpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyh1MzIgZnVuY19pZClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExOTgte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE5OTpcXHRyZXR1cm4gZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3JlZmNvdW50X2FjcXVpcmVdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjAwOlxcdCAgICAgICBmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVmY291bnRfYWNxdWlyZV9pbXBsXTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyMDEtfVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjI0PXN0YXRpYyBib29sIGlzX2tmdW5jX3JldF9udWxsKHN0cnVjdCBicGZfa2Z1bmNfY2FsbF9hcmdfbWV0YSAqbWV0YSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEyMjUte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTIyNjpcXHRpZiAoaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMobWV0YS1cXHUwMDNlZnVuY19pZCkgXFx1MDAyNlxcdTAwMjYgbWV0YS1cXHUwMDNlYXJnX293bmluZ19yZWYpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjI3LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTYzMj1zdGF0aWMgYm9vbCBpc19icGZfZ3JhcGhfYXBpX2tmdW5jKHUzMiBidGZfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE2MzUtXFx0ICAgICAgIGlzX2JwZl9yYnRyZWVfYXBpX2tmdW5jKGJ0Zl9pZCkgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE2MzY6XFx0ICAgICAgIGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKGJ0Zl9pZCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNjM3LX1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjc0Nz1zdGF0aWMgaW50IGNoZWNrX3NwZWNpYWxfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19jYWxsX2FyZ19tZXRhICptZXRhLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyODM1LVxcdFxcdGluc25fYXV4LVxcdTAwM2VrcHRyX3N0cnVjdF9tZXRhID0gc3RydWN0X21ldGE7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjEyODM2OlxcdH0gZWxzZSBpZiAoaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMobWV0YS1cXHUwMDNlZnVuY19pZCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI4MzctXFx0XFx0bWFya19yZWdfa25vd25femVybyhlbnYsIHJlZ3MsIEJQRl9SRUdfMCk7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTI5MTg9c3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzEzOC1cXHRcXHQgICAgICFpc19icGZfcGVyY3B1X29ial9uZXdfa2Z1bmMobWV0YS5mdW5jX2lkKSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMzEzOTpcXHRcXHQgICAgICFpc19icGZfcmVmY291bnRfYWNxdWlyZV9rZnVuYyhtZXRhLmZ1bmNfaWQpKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMzE0MC1cXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcImFjcXVpcmUga2VybmVsIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBQVFJfVE9fQlRGX0lEXFxcXG5cXFwiKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTYzMz1pbnQgYnBmX2ZpeHVwX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjgxLVxcdFxcdCAgIGlzX2JwZl9wZXJjcHVfb2JqX2Ryb3Bfa2Z1bmMoZGVzYy1cXHUwMDNlZnVuY19pZCkgfHxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2ODI6XFx0XFx0ICAgaXNfYnBmX3JlZmNvdW50X2FjcXVpcmVfa2Z1bmMoZGVzYy1cXHUwMDNlZnVuY19pZCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk2ODMtXFx0XFx0c3RydWN0IGJ0Zl9zdHJ1Y3RfbWV0YSAqa3B0cl9zdHJ1Y3RfbWV0YSA9IGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ua3B0cl9zdHJ1Y3RfbWV0YTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTY5MS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk2OTI6XFx0XFx0aWYgKGlzX2JwZl9yZWZjb3VudF9hY3F1aXJlX2tmdW5jKGRlc2MtXFx1MDAzZWZ1bmNfaWQpIFxcdTAwMjZcXHUwMDI2ICFrcHRyX3N0cnVjdF9tZXRhKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NjkzLVxcdFxcdFxcdHZlcmlmaWVyX2J1ZyhlbnYsIFxcXCJrcHRyX3N0cnVjdF9tZXRhIGV4cGVjdGVkIGF0IGluc25faWR4ICVkXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTE6MzA6NTMuMzc2ODI4MDM3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTE3MzA1MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkJQRiBIZWxwZXIgRnVuY3Rpb24gTG9jYXRpb24gXHUwMDI2IENvbXBpbGF0aW9uIFZlcmlmaWNhdGlvbioqXG5cbkFscmlnaHQsIEknbSB0cnlpbmcgdG8gbmFpbCBkb3duIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbiBmb3IgQlBGIGhlbHBlciBmdW5jdGlvbnMuIFRoZSBjb2RlIGlzIGNsZWFybHkgaW4gYGtlcm5lbC9icGYvaGVscGVycy5jYC4gTm93IHRoZSBxdWVzdGlvbiBpcywgKmhvdyogaXMgdGhhdCBmaWxlIGJ1aWx0PyBJcyBpdCBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbj8gTGV0J3MgY2hlY2suLi4gQWhhISBZZXMsIGxvb2tpbmcgYXQgdGhlIGJ1aWxkIHN5c3RlbSBkaXJlY3RpdmVzLCBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBzeXNjYWxsLm8gdmVyaWZpZXIubyBpbm9kZS5vIGhlbHBlcnMubyAuLi5gIGluZGljYXRlcyB0aGUga2V5LiBJdCBsb29rcyBsaWtlIGBoZWxwZXJzLmNgIGlzIGluZGVlZCBidWlsdCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuIFRoYXQgY29uZmlybXMgaXQuXG5cblRoZXJlZm9yZSwgZW5zdXJpbmcgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzZXQgaXMgdGhlIHNvbGUgcmVxdWlyZW1lbnQgaW4gdGhpcyBjYXNlLiBXaXRoIHRoYXQgZXN0YWJsaXNoZWQsIEkgc2hvdWxkIG5vdyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTM3LCJPdXRwdXRUb2tlbnMiOjE0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDExOjMwOjU4LjQ2ODU2MDk0NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODYwNjcyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIixcbiAgICBcImJwZl9yZWZjb3VudF9hY3F1aXJlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byByZWplY3QgdW50cnVzdGVkIHJlZmNvdW50ZWQga3B0cnMgYW5kIGZpeGVzIHRoZSBhc3NpZ25tZW50IG9mIGBtZXRhLVxcdTAwM2Vhcmdfb3duaW5nX3JlZmAgZm9yIGBLRl9BUkdfUFRSX1RPX1JFRkNPVU5URURfS1BUUmAgYXJndW1lbnRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgaGFuZGxlcyBrZnVuYyBhcmd1bWVudHMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCIsXG4gICAgXCJicGZfcmVmY291bnRfYWNxdWlyZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gcmVqZWN0IHVudHJ1c3RlZCByZWZjb3VudGVkIGtwdHJzIGFuZCBmaXhlcyB0aGUgYXNzaWdubWVudCBvZiBgbWV0YS1cXHUwMDNlYXJnX293bmluZ19yZWZgIGZvciBgS0ZfQVJHX1BUUl9UT19SRUZDT1VOVEVEX0tQVFJgIGFyZ3VtZW50cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGhhbmRsZXMga2Z1bmMgYXJndW1lbnRzLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgd2hlbiBsb2FkaW5nIEJQRiBwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow8xk84[1] Phase: Succeeded StartedAt: 2026-07-27 11:31:10 +0000 UTC FinishedAt: 2026-07-27 11:31:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-27 11:31:10 +0000 UTC FinishedAt: 2026-07-27 11:31:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2] Phase: Succeeded StartedAt: 2026-07-27 11:31:10 +0000 UTC FinishedAt: 2026-07-27 16:00:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-27 11:31:10 +0000 UTC FinishedAt: 2026-07-27 16:00:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-27 11:31:10 +0000 UTC FinishedAt: 2026-07-27 11:31:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-27 11:31:10 +0000 UTC FinishedAt: 2026-07-27 11:31:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow8xk84/series-workflow8xk84-convert-artifact-3686985847/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-27 11:31:20 +0000 UTC FinishedAt: 2026-07-27 12:17:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-27 11:31:20 +0000 UTC FinishedAt: 2026-07-27 12:17:28 +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:*7953bc24-8972-4f6e-b829-8b69ab3f97ee,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-workflow8xk84/series-workflow8xk84-convert-artifact-3686985847/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": "f3581e07-a73a-48b1-9f44-d402333d0a0a", "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-workflow8xk84/series-workflow8xk84-build-action-392725197/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-27 11:31:20 +0000 UTC FinishedAt: 2026-07-27 12:17:05 +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:*7953bc24-8972-4f6e-b829-8b69ab3f97ee,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-workflow8xk84/series-workflow8xk84-convert-artifact-3686985847/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": "f3581e07-a73a-48b1-9f44-d402333d0a0a", "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-workflow8xk84/series-workflow8xk84-build-action-392725197/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-27 12:17:28 +0000 UTC FinishedAt: 2026-07-27 12:17:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-27 12:17:28 +0000 UTC FinishedAt: 2026-07-27 12:17:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-27 12:17:28 +0000 UTC FinishedAt: 2026-07-27 12:17:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-27 12:17:28 +0000 UTC FinishedAt: 2026-07-27 12:17:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflow8xk84/series-workflow8xk84-convert-artifact-3355055270/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-27 12:17:51 +0000 UTC FinishedAt: 2026-07-27 12:20:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-27 12:17:51 +0000 UTC FinishedAt: 2026-07-27 12:20:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f3581e07-a73a-48b1-9f44-d402333d0a0a,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-workflow8xk84/series-workflow8xk84-build-action-392725197/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-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-27 12:20:15 +0000 UTC FinishedAt: 2026-07-27 12:20:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-27 12:20:15 +0000 UTC FinishedAt: 2026-07-27 12:20:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-27 12:20:15 +0000 UTC FinishedAt: 2026-07-27 12:53:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-27 12:20:15 +0000 UTC FinishedAt: 2026-07-27 12:53:38 +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:*7953bc24-8972-4f6e-b829-8b69ab3f97ee,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-workflow8xk84/series-workflow8xk84-convert-artifact-3355055270/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": "b5ed2605-85c3-47c0-8202-56319dfad30c", "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-workflow8xk84/series-workflow8xk84-build-action-4173935210/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-27 12:20:15 +0000 UTC FinishedAt: 2026-07-27 12:52:26 +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:*7953bc24-8972-4f6e-b829-8b69ab3f97ee,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-workflow8xk84/series-workflow8xk84-convert-artifact-3355055270/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": "b5ed2605-85c3-47c0-8202-56319dfad30c", "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-workflow8xk84/series-workflow8xk84-build-action-4173935210/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-27 12:53:38 +0000 UTC FinishedAt: 2026-07-27 12:53:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-27 12:53:38 +0000 UTC FinishedAt: 2026-07-27 12:53:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-27 12:53:38 +0000 UTC FinishedAt: 2026-07-27 12:55:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-27 12:53:38 +0000 UTC FinishedAt: 2026-07-27 12:55:27 +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:*b5ed2605-85c3-47c0-8202-56319dfad30c,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-workflow8xk84/series-workflow8xk84-build-action-4173935210/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-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-27 12:55:37 +0000 UTC FinishedAt: 2026-07-27 16:00:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-27 12:55:37 +0000 UTC FinishedAt: 2026-07-27 16:00:26 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"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:*f3581e07-a73a-48b1-9f44-d402333d0a0a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b5ed2605-85c3-47c0-8202-56319dfad30c,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-workflow8xk84/series-workflow8xk84-build-action-392725197/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-workflow8xk84/series-workflow8xk84-build-action-4173935210/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-27 12:55:37 +0000 UTC FinishedAt: 2026-07-27 12:55:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-27 12:55:37 +0000 UTC FinishedAt: 2026-07-27 12:55:46 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"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-workflow8xk84/series-workflow8xk84-convert-artifact-2176428779/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-27 12:55:37 +0000 UTC FinishedAt: 2026-07-27 12:55:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-27 12:55:37 +0000 UTC FinishedAt: 2026-07-27 12:55:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-27 12:55:37 +0000 UTC FinishedAt: 2026-07-27 12:55:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-27 12:55:58 +0000 UTC FinishedAt: 2026-07-27 16:00:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8xk84[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check","bpf_refcount_acquire"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0ce37745d4bfbc493f718169c3974898ffec8ee7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"a3cab754-652d-46d1-8f22-12a9e416a59d","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-27 12:55:58 +0000 UTC FinishedAt: 2026-07-27 16:00:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f3581e07-a73a-48b1-9f44-d402333d0a0a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b5ed2605-85c3-47c0-8202-56319dfad30c,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-workflow8xk84/series-workflow8xk84-build-action-392725197/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-workflow8xk84/series-workflow8xk84-build-action-4173935210/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-workflow8xk84/series-workflow8xk84-convert-artifact-2176428779/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,}