Name: series-workflow24tnr Phase: Succeeded StartedAt: 2026-07-09 13:36:19 +0000 UTC FinishedAt: 2026-07-09 18:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[0] Phase: Succeeded StartedAt: 2026-07-09 13:36:19 +0000 UTC FinishedAt: 2026-07-09 13:58:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[0].run-triage Phase: Succeeded StartedAt: 2026-07-09 13:36:19 +0000 UTC FinishedAt: 2026-07-09 13:58:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d880786f897bde33569a2a5d9def53b3416297ad", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_PAGE_MONITOR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d880786f897bde33569a2a5d9def53b3416297ad", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_PAGE_MONITOR" ], "series_id": "a58b7a75-dcc3-4f18-ad7a-8703b11a15ae" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "snapshot_page", "kpagecount_read", "kpageflags_read", "get_kpage_count", "stable_page_flags" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDEzOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c25hcHNob3RfcGFnZSYjMzQ7LAogICAgJiMzNDtrcGFnZWNvdW50X3JlYWQmIzM0OywKICAgICYjMzQ7a3BhZ2VmbGFnc19yZWFkJiMzNDssCiAgICAmIzM0O2dldF9rcGFnZV9jb3VudCYjMzQ7LAogICAgJiMzNDtzdGFibGVfcGFnZV9mbGFncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgc25hcHNob3RfcGFnZWAgd2hlcmUgaXQgaW5jb3JyZWN0bHkgY29waWVkIGBfX3BhZ2VfMmAgZm9yIGZvbGlvcyB3aXRoIGBucl9wYWdlcyBcdTAwM2UgMWAgaW5zdGVhZCBvZiBgbnJfcGFnZXMgXHUwMDNlIDJgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGAvcHJvYy9rcGFnZWNvdW50YCBhbmQgYC9wcm9jL2twYWdlZmxhZ3NgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDEzOjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzQxMDI2Mjk4YWM0OTBmMTJjYmVkZWVkY2Q1NmI5MDQ2OTI2ZTBhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMTM6NTc6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jXG5pbmRleCBhZjJjMjEwM2YwZDk1Mi4uMzRjYjQzYjNlYWE0YzMgMTAwNjQ0XG4tLS0gYS9tbS91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3V0aWwuY1xuQEAgLTEzNTMsNyAmIzQzOzEzNTMsNyBAQCB2b2lkIHNuYXBzaG90X3BhZ2Uoc3RydWN0IHBhZ2Vfc25hcHNob3QgKnBzLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGlmIChwcy1cdTAwM2VpZHggXHUwMDNjIE1BWF9GT0xJT19OUl9QQUdFUykge1xuIFx0XHRtZW1jcHkoXHUwMDI2cHMtXHUwMDNlZm9saW9fc25hcHNob3QsIGZvbGlvcCwgMiAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpO1xuIFx0XHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKFx1MDAyNnBzLVx1MDAzZWZvbGlvX3NuYXBzaG90KTtcbi1cdFx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxKVxuJiM0MztcdFx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAyKVxuIFx0XHRcdG1lbWNweShcdTAwMjZwcy1cdTAwM2Vmb2xpb19zbmFwc2hvdC5fX3BhZ2VfMiwgXHUwMDI2Zm9saW9wLVx1MDAzZV9fcGFnZV8yLFxuIFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHBhZ2UpKTtcbiBcdFx0c2V0X3BzX2ZsYWdzKHBzLCBmb2xpb3AsIHBhZ2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDEzOjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c25hcHNob3RfcGFnZSYjMzQ7LAogICAgJiMzNDtrcGFnZWNvdW50X3JlYWQmIzM0OywKICAgICYjMzQ7a3BhZ2VmbGFnc19yZWFkJiMzNDssCiAgICAmIzM0O2dldF9rcGFnZV9jb3VudCYjMzQ7LAogICAgJiMzNDtzdGFibGVfcGFnZV9mbGFncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgc25hcHNob3RfcGFnZWAgd2hlcmUgaXQgaW5jb3JyZWN0bHkgY29waWVkIGBfX3BhZ2VfMmAgZm9yIGZvbGlvcyB3aXRoIGBucl9wYWdlcyBcdTAwM2UgMWAgaW5zdGVhZCBvZiBgbnJfcGFnZXMgXHUwMDNlIDJgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGAvcHJvYy9rcGFnZWNvdW50YCBhbmQgYC9wcm9jL2twYWdlZmxhZ3NgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNDEwMjYyOThhYzQ5MGYxMmNiZWRlZWRjZDU2YjkwNDY5MjZlMGFlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgOSAxMzo1NzoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3V0aWwuYyBiL21tL3V0aWwuYwppbmRleCBhZjJjMjEwM2YwZDk1Mi4uMzRjYjQzYjNlYWE0YzMgMTAwNjQ0Ci0tLSBhL21tL3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS91dGlsLmMKQEAgLTEzNTMsNyAmIzQzOzEzNTMsNyBAQCB2b2lkIHNuYXBzaG90X3BhZ2Uoc3RydWN0IHBhZ2Vfc25hcHNob3QgKnBzLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAlpZiAocHMtJmd0O2lkeCAmbHQ7IE1BWF9GT0xJT19OUl9QQUdFUykgewogCQltZW1jcHkoJmFtcDtwcy0mZ3Q7Zm9saW9fc25hcHNob3QsIGZvbGlvcCwgMiAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpOwogCQlucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKCZhbXA7cHMtJmd0O2ZvbGlvX3NuYXBzaG90KTsKLQkJaWYgKG5yX3BhZ2VzICZndDsgMSkKJiM0MzsJCWlmIChucl9wYWdlcyAmZ3Q7IDIpCiAJCQltZW1jcHkoJmFtcDtwcy0mZ3Q7Zm9saW9fc25hcHNob3QuX19wYWdlXzIsICZhbXA7Zm9saW9wLSZndDtfX3BhZ2VfMiwKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IHBhZ2UpKTsKIAkJc2V0X3BzX2ZsYWdzKHBzLCBmb2xpb3AsIHBhZ2UpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vdXRpbC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc25hcHNob3RfcGFnZWAgZnVuY3Rpb24uIFRoZSBjb2RlJiMzOTtzIGJlZW4gY2hhbmdlZCwgYW5kIGl0IHNlZW1zIGxpa2UgYSBzdWJ0bGUsIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwsIG1vZGlmaWNhdGlvbiB0byBob3cgcGFnZSBzbmFwc2hvdHMgYXJlIGhhbmRsZWQuIFRoZSBvcmlnaW5hbCBjb25kaXRpb24gd2FzIGBpZiAobnJfcGFnZXMgJmd0OyAxKWAsIGFuZCBub3cgaXQmIzM5O3MgYGlmIChucl9wYWdlcyAmZ3Q7IDIpYC4gIFRoYXQgYG1lbWNweWAgY2FsbCwgY29weWluZyBgc3RydWN0IHBhZ2VgIGRhdGEsIG9ubHkgZXhlY3V0ZXMgd2hlbiB0aGUgcGFnZSBjb3VudCBpcyAqZ3JlYXRlciogdGhhbiB0d28gbm93LiBIbW0sIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBhcyBpdCBkaXJlY3RseSBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIGBzbmFwc2hvdF9wYWdlYC4gSSBuZWVkIHRvIGRpZyBpbnRvIGBtbS91dGlsLmNgIGFuZCByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZGl0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGRpZmZlcmVudCBhYm91dCBoYW5kbGluZyB0d28gcGFnZXMgdmVyc3VzIHRocmVlIG9yIG1vcmUsIGFuZCB3aGF0IHNjZW5hcmlvcyB0cmlnZ2VyIHRoaXMgZnVuY3Rpb24uIExldCYjMzk7cyBnZXQgdG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBhbmFseXplLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NuYXBzaG90X3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS91dGlsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdXRpbC5jPTEyODU9c3RhdGljIHZvaWQgc2V0X3BzX2ZsYWdzKHN0cnVjdCBwYWdlX3NuYXBzaG90ICpwcywgY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS91dGlsLmMtMTMwMi0vKipcbm1tL3V0aWwuYzoxMzAzOiAqIHNuYXBzaG90X3BhZ2UoKSAtIENyZWF0ZSBhIHNuYXBzaG90IG9mIGEgc3RydWN0IHBhZ2Vcbm1tL3V0aWwuYy0xMzA0LSAqIEBwczogUG9pbnRlciB0byBhIHN0cnVjdCBwYWdlX3NuYXBzaG90IHRvIHN0b3JlIHRoZSBwYWdlIHNuYXBzaG90XG4tLVxubW0vdXRpbC5jLTEzMTItICogcmFyZSBjYXNlcyB3aGVyZSB0aGlzIGlzIG5vdCBwb3NzaWJsZSAoZS5nLiBkdWUgdG8gZm9saW8gc3BsaXR0aW5nKSxcbm1tL3V0aWwuYzoxMzEzOiAqIHNuYXBzaG90X3BhZ2UoKSBmYWxscyBiYWNrIHRvIHRyZWF0aW5nIEBwYWdlIGFzIGEgc2luZ2xlIHBhZ2UgYW5kIHRoZVxubW0vdXRpbC5jOjEzMTQ6ICogc25hcHNob3QgaXMgbWFya2VkIGFzIFwmIzM0O3VuZmFpdGhmdWxcJiMzNDsuIFRoZSBzbmFwc2hvdF9wYWdlX2lzX2ZhaXRoZnVsKClcbm1tL3V0aWwuYy0xMzE1LSAqIGhlbHBlciBjYW4gYmUgdXNlZCB0byBjaGVjayBmb3IgdGhpcyBjb25kaXRpb24uXG5tbS91dGlsLmMtMTMxNi0gKi9cbm1tL3V0aWwuYzoxMzE3OnZvaWQgc25hcHNob3RfcGFnZShzdHJ1Y3QgcGFnZV9zbmFwc2hvdCAqcHMsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxubW0vdXRpbC5jLTEzMTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipUcmFjaW5nIHRoZSBVc2FnZSBvZiBgc25hcHNob3RfcGFnZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhpcyBgc25hcHNob3RfcGFnZWAgZnVuY3Rpb24uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGZvbGxvdyB0aGUgdXNhZ2UuIFdoZXJlIGlzIHRoaXMgdGhpbmcgYWN0dWFsbHkgKmJlaW5nKiBjYWxsZWQ/IEtub3dpbmcgdGhhdCBpcyB0aGUgYmVkcm9jayBvZiB1bmRlcnN0YW5kaW5nIGl0cyByb2xlLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBpbmZlciBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIElzIGl0IGEgY29yZSB1dGlsaXR5LCBhIG5pY2hlIGhlbHBlciwgb3Igc29tZXRoaW5nIGluIGJldHdlZW4/IEl0cyBwbGFjZSBpbiB0aGUgY29kZWJhc2Ugd2lsbCB0ZWxsIHRoZSB0YWxlLiBMZXQmIzM5O3Mgc2VlLi4uIHRpbWUgdG8gc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSBjYWxsIHNpdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NuYXBzaG90X3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYz02NzE9c3RhdGljIGludCBwbXVfc2JpX3NuYXBzaG90X2FsbG9jKHN0cnVjdCByaXNjdl9wbXUgKnBtdSlcbi0tXG5kcml2ZXJzL3BlcmYvcmlzY3ZfcG11X3NiaS5jLTY3My1cdGludCBjcHU7XG5kcml2ZXJzL3BlcmYvcmlzY3ZfcG11X3NiaS5jOjY3NDpcdHN0cnVjdCBwYWdlICpzbmFwc2hvdF9wYWdlO1xuZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYy02NzUtXG4tLVxuZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYy02NzgtXG5kcml2ZXJzL3BlcmYvcmlzY3ZfcG11X3NiaS5jOjY3OTpcdFx0c25hcHNob3RfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0FUT01JQyB8IF9fR0ZQX1pFUk8pO1xuZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYzo2ODA6XHRcdGlmICghc25hcHNob3RfcGFnZSkge1xuZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYy02ODEtXHRcdFx0cG11X3NiaV9zbmFwc2hvdF9mcmVlKHBtdSk7XG4tLVxuZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYy02ODMtXHRcdH1cbmRyaXZlcnMvcGVyZi9yaXNjdl9wbXVfc2JpLmM6Njg0Olx0XHRjcHVfaHdfZXZ0LVx1MDAzZXNuYXBzaG90X2FkZHIgPSBwYWdlX3RvX3ZpcnQoc25hcHNob3RfcGFnZSk7XG5kcml2ZXJzL3BlcmYvcmlzY3ZfcG11X3NiaS5jOjY4NTpcdFx0Y3B1X2h3X2V2dC1cdTAwM2VzbmFwc2hvdF9hZGRyX3BoeXMgPSBwYWdlX3RvX3BoeXMoc25hcHNob3RfcGFnZSk7XG5kcml2ZXJzL3BlcmYvcmlzY3ZfcG11X3NiaS5jLTY4Ni1cdH1cbi0tXG5mcy9wcm9jL3BhZ2UuYz00NT1zdGF0aWMgdTY0IGdldF9rcGFnZV9jb3VudChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5mcy9wcm9jL3BhZ2UuYy00OS1cbmZzL3Byb2MvcGFnZS5jOjUwOlx0c25hcHNob3RfcGFnZShcdTAwMjZwcywgcGFnZSk7XG5mcy9wcm9jL3BhZ2UuYy01MS1cbi0tXG5mcy9wcm9jL3BhZ2UuYz0xNDY9dTY0IHN0YWJsZV9wYWdlX2ZsYWdzKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbmZzL3Byb2MvcGFnZS5jLTE2MS1cbmZzL3Byb2MvcGFnZS5jOjE2MjpcdHNuYXBzaG90X3BhZ2UoXHUwMDI2cHMsIHBhZ2UpO1xuZnMvcHJvYy9wYWdlLmMtMTYzLVx0Zm9saW8gPSBcdTAwMjZwcy5mb2xpb19zbmFwc2hvdDtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9NTI1Nz1zdHJ1Y3QgcGFnZV9zbmFwc2hvdCB7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTUyNjQtXG5pbmNsdWRlL2xpbnV4L21tLmg6NTI2NTpzdGF0aWMgaW5saW5lIGJvb2wgc25hcHNob3RfcGFnZV9pc19mYWl0aGZ1bChjb25zdCBzdHJ1Y3QgcGFnZV9zbmFwc2hvdCAqcHMpXG5pbmNsdWRlL2xpbnV4L21tLmgtNTI2Ni17XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTUyNjktXG5pbmNsdWRlL2xpbnV4L21tLmg6NTI3MDp2b2lkIHNuYXBzaG90X3BhZ2Uoc3RydWN0IHBhZ2Vfc25hcHNob3QgKnBzLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5pbmNsdWRlL2xpbnV4L21tLmgtNTI3MS1cbi0tXG5tbS9kZWJ1Zy5jPTEzMD1zdGF0aWMgdm9pZCBfX2R1bXBfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9kZWJ1Zy5jLTEzMy1cbm1tL2RlYnVnLmM6MTM0Olx0c25hcHNob3RfcGFnZShcdTAwMjZwcywgcGFnZSk7XG5tbS9kZWJ1Zy5jOjEzNTpcdGlmICghc25hcHNob3RfcGFnZV9pc19mYWl0aGZ1bChcdTAwMjZwcykpXG5tbS9kZWJ1Zy5jLTEzNi1cdFx0cHJfd2FybihcJiMzNDtwYWdlIGRvZXMgbm90IG1hdGNoIGZvbGlvXFxuXCYjMzQ7KTtcbi0tXG5tbS91dGlsLmM9MTI4NT1zdGF0aWMgdm9pZCBzZXRfcHNfZmxhZ3Moc3RydWN0IHBhZ2Vfc25hcHNob3QgKnBzLCBjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3V0aWwuYy0xMzAyLS8qKlxubW0vdXRpbC5jOjEzMDM6ICogc25hcHNob3RfcGFnZSgpIC0gQ3JlYXRlIGEgc25hcHNob3Qgb2YgYSBzdHJ1Y3QgcGFnZVxubW0vdXRpbC5jLTEzMDQtICogQHBzOiBQb2ludGVyIHRvIGEgc3RydWN0IHBhZ2Vfc25hcHNob3QgdG8gc3RvcmUgdGhlIHBhZ2Ugc25hcHNob3Rcbi0tXG5tbS91dGlsLmMtMTMxMi0gKiByYXJlIGNhc2VzIHdoZXJlIHRoaXMgaXMgbm90IHBvc3NpYmxlIChlLmcuIGR1ZSB0byBmb2xpbyBzcGxpdHRpbmcpLFxubW0vdXRpbC5jOjEzMTM6ICogc25hcHNob3RfcGFnZSgpIGZhbGxzIGJhY2sgdG8gdHJlYXRpbmcgQHBhZ2UgYXMgYSBzaW5nbGUgcGFnZSBhbmQgdGhlXG5tbS91dGlsLmM6MTMxNDogKiBzbmFwc2hvdCBpcyBtYXJrZWQgYXMgXCYjMzQ7dW5mYWl0aGZ1bFwmIzM0Oy4gVGhlIHNuYXBzaG90X3BhZ2VfaXNfZmFpdGhmdWwoKVxubW0vdXRpbC5jLTEzMTUtICogaGVscGVyIGNhbiBiZSB1c2VkIHRvIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbi5cbm1tL3V0aWwuYy0xMzE2LSAqL1xubW0vdXRpbC5jOjEzMTc6dm9pZCBzbmFwc2hvdF9wYWdlKHN0cnVjdCBwYWdlX3NuYXBzaG90ICpwcywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG5tbS91dGlsLmMtMTMxOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcyOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgc25hcHNob3RfcGFnZWAgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzbmFwc2hvdF9wYWdlYCwgYW5kIGl0IHNlZW1zIHRvIGJlIHF1aXRlIGEgY3JpdGljYWwgZnVuY3Rpb24sIHBvcHBpbmcgdXAgaW4gYSBmZXcga2V5IGFyZWFzLiBJIHNlZSBpdCYjMzk7cyB1c2VkIHdpdGhpbiBgZnMvcHJvYy9wYWdlLmNgLCBzcGVjaWZpY2FsbHkgZm9yIGBnZXRfa3BhZ2VfY291bnRgIGFuZCBgc3RhYmxlX3BhZ2VfZmxhZ3NgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhcyBpdCBpbmRpY2F0ZXMgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIHJvbGUgaW4gdHJhY2tpbmcgYW5kIHJlcG9ydGluZyBwYWdlIHVzYWdlIHdpdGhpbiB0aGUgcHJvYyBmaWxlc3lzdGVtLCB3aGljaCBpcyBvZnRlbiBjcnVjaWFsIGZvciBzeXN0ZW0gbW9uaXRvcmluZyBhbmQgZGVidWdnaW5nLiBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBoeXBvdGhlc2VzIGFib3V0IGl0cyByb2xlIGluIHRob3NlIHNwZWNpZmljIGNvbnRleHRzIC0gcGVyaGFwcyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBwcm92aWRpbmcgYWNjdXJhdGUgcGFnZSBjb3VudCBpbmZvcm1hdGlvbiwgb3IgZW5zdXJpbmcgdGhlIHN0YWJpbGl0eSBvZiBjZXJ0YWluIHBhZ2UgZmxhZ3MgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbi4KClRoZW4gdGhlcmUmIzM5O3MgaXRzIHVzZSBpbiBgbW0vZGVidWcuY2AgYXMgcGFydCBvZiBgX19kdW1wX3BhZ2VgLiBUaGF0JiMzOTtzIGFub3RoZXIgdml0YWwgY2x1ZS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGBzbmFwc2hvdF9wYWdlYCBpcyBlc3NlbnRpYWwgdG8gdGhlIGxvdyBsZXZlbCBtZW1vcnkgZGVidWdnaW5nLCBhbmQgbGlrZWx5IGludm9sdmVkIGluIGNhcHR1cmluZyBhIHBvaW50LWluLXRpbWUgJiMzNDtzbmFwc2hvdCYjMzQ7IG9mIGEgcGFnZSYjMzk7cyBzdGF0ZSwgdXNlZCB0byBhbmFseXplIGEgcGFnZS4KCkkmIzM5O2xsIHN0YXJ0IGJ5IGZvY3VzaW5nIG15IGF0dGVudGlvbiBvbiB0aG9zZSBgZnMvcHJvYy9wYWdlLmNgIHVzYWdlcywgYW5kIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYGdldF9rcGFnZV9jb3VudGAgYW5kIGBzdGFibGVfcGFnZV9mbGFnc2AgaW1wbGVtZW50YXRpb25zIHRvIGdldCBhIGNsZWFyZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGBzbmFwc2hvdF9wYWdlYCBpcyBkb2luZyBhdCBpdHMgY29yZS4gSSB3YW50IHRvIGJ1aWxkIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGhvdyBpdCYjMzk7cyB1c2VkIGluIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfa3BhZ2VfY291bnR8c3RhYmxlX3BhZ2VfZmxhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL3BhZ2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL3BhZ2UuYz0zMD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X21heF9kdW1wX3Bmbih2b2lkKVxuLS1cbmZzL3Byb2MvcGFnZS5jLTQ0LVxuZnMvcHJvYy9wYWdlLmM6NDU6c3RhdGljIHU2NCBnZXRfa3BhZ2VfY291bnQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG5mcy9wcm9jL3BhZ2UuYy00Ni17XG4tLVxuZnMvcHJvYy9wYWdlLmM9NjE9c3RhdGljIHNzaXplX3Qga3BhZ2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5mcy9wcm9jL3BhZ2UuYy04OS1cdFx0XHRjYXNlIEtQQUdFX0ZMQUdTOlxuZnMvcHJvYy9wYWdlLmM6OTA6XHRcdFx0XHRpbmZvID0gc3RhYmxlX3BhZ2VfZmxhZ3MocGFnZSk7XG5mcy9wcm9jL3BhZ2UuYy05MS1cdFx0XHRcdGJyZWFrO1xuZnMvcHJvYy9wYWdlLmMtOTItXHRcdFx0Y2FzZSBLUEFHRV9DT1VOVDpcbmZzL3Byb2MvcGFnZS5jOjkzOlx0XHRcdFx0aW5mbyA9IGdldF9rcGFnZV9jb3VudChwYWdlKTtcbmZzL3Byb2MvcGFnZS5jLTk0LVx0XHRcdFx0YnJlYWs7XG4tLVxuZnMvcHJvYy9wYWdlLmM9MTQxPXN0YXRpYyBpbmxpbmUgdTY0IGtwZl9jb3B5X2JpdCh1NjQga2ZsYWdzLCBpbnQgdWJpdCwgaW50IGtiaXQpXG4tLVxuZnMvcHJvYy9wYWdlLmMtMTQ1LVxuZnMvcHJvYy9wYWdlLmM6MTQ2OnU2NCBzdGFibGVfcGFnZV9mbGFncyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbmZzL3Byb2MvcGFnZS5jLTE0Ny17XG4tLVxuZnMvcHJvYy9wYWdlLmMtMjU3LX1cbmZzL3Byb2MvcGFnZS5jOjI1ODpFWFBPUlRfU1lNQk9MX0dQTChzdGFibGVfcGFnZV9mbGFncyk7XG5mcy9wcm9jL3BhZ2UuYy0yNTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU1NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqS2VybmVsIFBhZ2UgSW5mb3JtYXRpb24gSGFuZGxpbmcgLSBGdW5jdGlvbmFsIENoYW5nZSBBbGVydCEqKgoKQWxyaWdodCwgc28gdGhlIGZvY3VzIGhlcmUgaXMgZGVmaW5pdGVseSBvbiBgL3Byb2Mva3BhZ2Vjb3VudGAgYW5kIGAvcHJvYy9rcGFnZWZsYWdzYCDigJMgdGhvc2UgY3J1Y2lhbCBpbnRlcmZhY2VzIGZvciBwcm9iaW5nIHBhZ2UgbWV0YWRhdGEgd2l0aGluIHRoZSBrZXJuZWwuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY2hhbmdlIHJlc2lkZXMgaW4gYG1tL3V0aWwuY2AsIHNwZWNpZmljYWxseSB0aGUgYHNuYXBzaG90X3BhZ2VgIGZ1bmN0aW9uLiBHaXZlbiB0aGF0IHRoaXMgaXMgYSAqZnVuY3Rpb25hbCogbW9kaWZpY2F0aW9uLCBteSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgY29uY2VybiBiYWxhbmNlZCB3aXRoIGN1cmlvc2l0eS4gQW55IGNoYW5nZSB0byB0aGVzZSBhcmVhcyByZXF1aXJlcyBpbnRlbnNlIHNjcnV0aW55OyB0aGUgd2F5IHRoZXNlIGludGVyZmFjZXMgYmVoYXZlIGNhbiBzaWduaWZpY2FudGx5IGltcGFjdCBkZWJ1Z2dpbmcsIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBhbmQgZXZlbiBzZWN1cml0eSBwb3N0dXJlLCBkZXBlbmRpbmcgb24gaG93IHRoZXkmIzM5O3JlIHVzZWQuCgpTaW5jZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgb2YgaG93IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcGFnZSBpbmZvcm1hdGlvbiwgZnV6emluZyBiZWNvbWVzIGEgdG9wIHByaW9yaXR5LiBXZSBuZWVkIHRvIHN1YmplY3QgdGhpcyBjb2RlIHRvIHJpZ29yb3VzIHRlc3RpbmcgdG8gdW5jb3ZlciBhbnkgZWRnZSBjYXNlcywgdW5leHBlY3RlZCBiZWhhdmlvciwgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGF0IHRoZXNlIGludGVyZmFjZXMgYXJlIGFjY2Vzc2libGUgdG8gdXNlcnNwYWNlLiBBIHJvYnVzdCBmdXp6aW5nIGNhbXBhaWduIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIGJlZm9yZSB0aGlzIHNlZXMgYW55IHByb2R1Y3Rpb24uCgpBbmQsIG9mIGNvdXJzZSwgYSBxdWljayBjaGVjayBvZiB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBpcyBuZWNlc3NhcnkuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAgaXMgKmluZGVlZCogd2hhdCBlbmFibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQgdGllcyBpbnRvIHRoZXNlIGludGVyZmFjZXMuIFZlcmlmaWNhdGlvbiBpcyBrZXkuIE5vIGFzc3VtcHRpb25zLCBubyBzaG9ydGN1dHMuIFRoYXQgY29uZmlndXJhdGlvbiBpcyBvdXIgb24tb2ZmIHN3aXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3BhZ2Vjb3VudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvS2NvbmZpZz0xMDI9Y29uZmlnIFBST0NfUEFHRV9NT05JVE9SXG4tLVxuZnMvcHJvYy9LY29uZmlnLTEwOC1cdCAgL3Byb2MvcGlkL3NtYXBzLCAvcHJvYy9waWQvY2xlYXJfcmVmcywgL3Byb2MvcGlkL3BhZ2VtYXAsXG5mcy9wcm9jL0tjb25maWc6MTA5Olx0ICAvcHJvYy9rcGFnZWNvdW50LCBhbmQgL3Byb2Mva3BhZ2VmbGFncy4gRGlzYWJsaW5nIHRoZXNlXG5mcy9wcm9jL0tjb25maWctMTEwLVx0ICBpbnRlcmZhY2VzIHdpbGwgcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBrZXJuZWwgYnkgYXBwcm94aW1hdGVseSA0a2IuXG4tLVxuZnMvcHJvYy9pbnRlcm5hbC5oPTE1OD11bnNpZ25lZCBuYW1lX3RvX2ludChjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cik7XG4tLVxuZnMvcHJvYy9pbnRlcm5hbC5oLTE3Ny0gKiBVc2UgdGhpcyBmdW5jdGlvbiBvbmx5IGZvciB0aGUgY2FsY3VsYXRpb24gb2YgZXhpc3Rpbmcgc3RhdGlzdGljc1xuZnMvcHJvYy9pbnRlcm5hbC5oOjE3ODogKiAoVVNTLCBQU1MsIG1hcGNvdW50X21heCkgYW5kIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgKC9wcm9jL2twYWdlY291bnQpLlxuZnMvcHJvYy9pbnRlcm5hbC5oLTE3OS0gKlxuLS1cbmZzL3Byb2MvcGFnZS5jPTYxPXN0YXRpYyBzc2l6ZV90IGtwYWdlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4tLVxuZnMvcHJvYy9wYWdlLmMtMTIyLVxuZnMvcHJvYy9wYWdlLmM6MTIzOi8qIC9wcm9jL2twYWdlY291bnQgLSBhbiBhcnJheSBleHBvc2luZyBwYWdlIG1hcGNvdW50c1xuZnMvcHJvYy9wYWdlLmMtMTI0LSAqXG4tLVxuZnMvcHJvYy9wYWdlLmMtMTI3LSAqL1xuZnMvcHJvYy9wYWdlLmM6MTI4OnN0YXRpYyBzc2l6ZV90IGtwYWdlY291bnRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbmZzL3Byb2MvcGFnZS5jLTEyOS1cdFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvcHJvYy9wYWdlLmMtMTMzLVxuZnMvcHJvYy9wYWdlLmM6MTM0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMga3BhZ2Vjb3VudF9wcm9jX29wcyA9IHtcbmZzL3Byb2MvcGFnZS5jLTEzNS1cdC5wcm9jX2ZsYWdzXHQ9IFBST0NfRU5UUllfUEVSTUFORU5ULFxuZnMvcHJvYy9wYWdlLmMtMTM2LVx0LnByb2NfbHNlZWtcdD0gbWVtX2xzZWVrLFxuZnMvcHJvYy9wYWdlLmM6MTM3Olx0LnByb2NfcmVhZFx0PSBrcGFnZWNvdW50X3JlYWQsXG5mcy9wcm9jL3BhZ2UuYy0xMzgtfTtcbi0tXG5mcy9wcm9jL3BhZ2UuYz0yOTA9c3RhdGljIGludCBfX2luaXQgcHJvY19wYWdlX2luaXQodm9pZClcbmZzL3Byb2MvcGFnZS5jLTI5MS17XG5mcy9wcm9jL3BhZ2UuYzoyOTI6XHRwcm9jX2NyZWF0ZShcJiMzNDtrcGFnZWNvdW50XCYjMzQ7LCBTX0lSVVNSLCBOVUxMLCBcdTAwMjZrcGFnZWNvdW50X3Byb2Nfb3BzKTtcbmZzL3Byb2MvcGFnZS5jLTI5My1cdHByb2NfY3JlYXRlKFwmIzM0O2twYWdlZmxhZ3NcJiMzNDssIFNfSVJVU1IsIE5VTEwsIFx1MDAyNmtwYWdlZmxhZ3NfcHJvY19vcHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjEyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50ICZhbXA7IEtleSBGdW5jdGlvbiBTZWxlY3Rpb24qKgoKT2theSwgc28gSSYjMzk7dmUgemVyb2VkIGluIG9uIHRoZSBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBjb25maWcg4oCTIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGZ1bmN0aW9ucyBsaWtlIGBzbmFwc2hvdF9wYWdlYCwgYGdldF9rcGFnZV9jb3VudGAsIGBzdGFibGVfcGFnZV9mbGFnc2AsIGBrcGFnZWNvdW50X3JlYWRgLCBhbmQgYGtwYWdlZmxhZ3NfcmVhZGAuIFdhaXQsIGhvbGQgb24uLi4gYGtwYWdlY291bnRfcmVhZGAgYW5kIGBrcGFnZWZsYWdzX3JlYWRgIGxvb2sgbGlrZSBtb3JlIHByb21pc2luZyBlbnRyeSBwb2ludHMgdG8gc3RhcnQgd2l0aCwgZ2l2ZW4gdGhlaXIgbmFtZXMuIExldCYjMzk7cyBzZWUgaG93IHRob3NlIGFyZSBpbXBsZW1lbnRlZCBhbmQgd2hhdCB0aGV5IGRvLgpQZXJoYXBzIEkmIzM5O2xsIGhhdmUgYSBsb29rIGF0IGBzbmFwc2hvdF9wYWdlYCBpbiBgbW0vdXRpbC5jYCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3V0aWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMDA6XHR9XG4xMzAxOlx0XG4xMzAyOlx0LyoqXG4xMzAzOlx0ICogc25hcHNob3RfcGFnZSgpIC0gQ3JlYXRlIGEgc25hcHNob3Qgb2YgYSBzdHJ1Y3QgcGFnZVxuMTMwNDpcdCAqIEBwczogUG9pbnRlciB0byBhIHN0cnVjdCBwYWdlX3NuYXBzaG90IHRvIHN0b3JlIHRoZSBwYWdlIHNuYXBzaG90XG4xMzA1Olx0ICogQHBhZ2U6IFRoZSBwYWdlIHRvIHNuYXBzaG90XG4xMzA2Olx0ICpcbjEzMDc6XHQgKiBDcmVhdGUgYSBzbmFwc2hvdCBvZiB0aGUgcGFnZSBhbmQgc3RvcmUgYm90aCBpdHMgc3RydWN0IHBhZ2UgYW5kIHN0cnVjdFxuMTMwODpcdCAqIGZvbGlvIHJlcHJlc2VudGF0aW9ucyBpbiBAcHMuXG4xMzA5Olx0ICpcbjEzMTA6XHQgKiBBIHNuYXBzaG90IGlzIG1hcmtlZCBhcyBcJiMzNDtmYWl0aGZ1bFwmIzM0OyBpZiB0aGUgY29tcG91bmQgc3RhdGUgb2YgQHBhZ2Ugd2FzXG4xMzExOlx0ICogc3RhYmxlIGFuZCBhbGxvd2VkIHNhZmUgcmVjb25zdHJ1Y3Rpb24gb2YgdGhlIGZvbGlvIHJlcHJlc2VudGF0aW9uLiBJblxuMTMxMjpcdCAqIHJhcmUgY2FzZXMgd2hlcmUgdGhpcyBpcyBub3QgcG9zc2libGUgKGUuZy4gZHVlIHRvIGZvbGlvIHNwbGl0dGluZyksXG4xMzEzOlx0ICogc25hcHNob3RfcGFnZSgpIGZhbGxzIGJhY2sgdG8gdHJlYXRpbmcgQHBhZ2UgYXMgYSBzaW5nbGUgcGFnZSBhbmQgdGhlXG4xMzE0Olx0ICogc25hcHNob3QgaXMgbWFya2VkIGFzIFwmIzM0O3VuZmFpdGhmdWxcJiMzNDsuIFRoZSBzbmFwc2hvdF9wYWdlX2lzX2ZhaXRoZnVsKClcbjEzMTU6XHQgKiBoZWxwZXIgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLlxuMTMxNjpcdCAqL1xuMTMxNzpcdHZvaWQgc25hcHNob3RfcGFnZShzdHJ1Y3QgcGFnZV9zbmFwc2hvdCAqcHMsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuMTMxODpcdHtcbjEzMTk6XHRcdHVuc2lnbmVkIGxvbmcgaW5mbywgbnJfcGFnZXMgPSAxO1xuMTMyMDpcdFx0c3RydWN0IGZvbGlvICpmb2xpb3A7XG4xMzIxOlx0XHRpbnQgbG9vcHMgPSA1O1xuMTMyMjpcdFxuMTMyMzpcdFx0cHMtXHUwMDNlcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4xMzI0Olx0XHRwcy1cdTAwM2VmbGFncyA9IFBBR0VfU05BUFNIT1RfRkFJVEhGVUw7XG4xMzI1Olx0XG4xMzI2Olx0YWdhaW46XG4xMzI3Olx0XHRtZW1zZXQoXHUwMDI2cHMtXHUwMDNlZm9saW9fc25hcHNob3QsIDAsIHNpemVvZihzdHJ1Y3QgZm9saW8pKTtcbjEzMjg6XHRcdG1lbWNweShcdTAwMjZwcy1cdTAwM2VwYWdlX3NuYXBzaG90LCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcbjEzMjk6XHRcdGluZm8gPSBwcy1cdTAwM2VwYWdlX3NuYXBzaG90LmNvbXBvdW5kX2luZm87XG4xMzMwOlx0XHRpZiAoIShpbmZvIFx1MDAyNiAxKSkge1xuMTMzMTpcdFx0XHRwcy1cdTAwM2VpZHggPSAwO1xuMTMzMjpcdFx0XHRmb2xpb3AgPSAoc3RydWN0IGZvbGlvICopXHUwMDI2cHMtXHUwMDNlcGFnZV9zbmFwc2hvdDtcbjEzMzM6XHRcdFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvcCkpIHtcbjEzMzQ6XHRcdFx0XHRzZXRfcHNfZmxhZ3MocHMsIHBhZ2VfZm9saW8ocGFnZSksIHBhZ2UpO1xuMTMzNTpcdFx0XHRcdG1lbWNweShcdTAwMjZwcy1cdTAwM2Vmb2xpb19zbmFwc2hvdCwgZm9saW9wLFxuMTMzNjpcdFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHBhZ2UpKTtcbjEzMzc6XHRcdFx0XHRyZXR1cm47XG4xMzM4Olx0XHRcdH1cbjEzMzk6XHRcdFx0Zm9saW9wID0gKHN0cnVjdCBmb2xpbyAqKXBhZ2U7XG4xMzQwOlx0XHR9IGVsc2Uge1xuMTM0MTpcdFx0XHQvKiBTZWUgY29tcG91bmRfaGVhZCgpICovXG4xMzQyOlx0XHRcdGlmIChjb21wb3VuZF9pbmZvX2hhc19tYXNrKCkpIHtcbjEzNDM6XHRcdFx0XHR1bnNpZ25lZCBsb25nIHAgPSAodW5zaWduZWQgbG9uZylwYWdlO1xuMTM0NDpcdFxuMTM0NTpcdFx0XHRcdGZvbGlvcCA9IChzdHJ1Y3QgZm9saW8gKikocCBcdTAwMjYgaW5mbyk7XG4xMzQ2Olx0XHRcdH0gZWxzZSB7XG4xMzQ3Olx0XHRcdFx0Zm9saW9wID0gKHN0cnVjdCBmb2xpbyAqKShpbmZvIC0gMSk7XG4xMzQ4Olx0XHRcdH1cbjEzNDk6XHRcbjEzNTA6XHRcdFx0cHMtXHUwMDNlaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW9wLCBwYWdlKTtcbjEzNTE6XHRcdH1cbjEzNTI6XHRcbjEzNTM6XHRcdGlmIChwcy1cdTAwM2VpZHggXHUwMDNjIE1BWF9GT0xJT19OUl9QQUdFUykge1xuMTM1NDpcdFx0XHRtZW1jcHkoXHUwMDI2cHMtXHUwMDNlZm9saW9fc25hcHNob3QsIGZvbGlvcCwgMiAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpO1xuMTM1NTpcdFx0XHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKFx1MDAyNnBzLVx1MDAzZWZvbGlvX3NuYXBzaG90KTtcbjEzNTY6XHRcdFx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAyKVxuMTM1NzpcdFx0XHRcdG1lbWNweShcdTAwMjZwcy1cdTAwM2Vmb2xpb19zbmFwc2hvdC5fX3BhZ2VfMiwgXHUwMDI2Zm9saW9wLVx1MDAzZV9fcGFnZV8yLFxuMTM1ODpcdFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHBhZ2UpKTtcbjEzNTk6XHRcdFx0c2V0X3BzX2ZsYWdzKHBzLCBmb2xpb3AsIHBhZ2UpO1xuMTM2MDpcdFx0fVxuMTM2MTpcdFxuMTM2MjpcdFx0aWYgKHBzLVx1MDAzZWlkeCBcdTAwM2UgbnJfcGFnZXMpIHtcbjEzNjM6XHRcdFx0aWYgKGxvb3BzLS0gXHUwMDNlIDApXG4xMzY0Olx0XHRcdFx0Z290byBhZ2FpbjtcbjEzNjU6XHRcdFx0Y2xlYXJfY29tcG91bmRfaGVhZChcdTAwMjZwcy1cdTAwM2VwYWdlX3NuYXBzaG90KTtcbjEzNjY6XHRcdFx0Zm9saW9wID0gKHN0cnVjdCBmb2xpbyAqKVx1MDAyNnBzLVx1MDAzZXBhZ2Vfc25hcHNob3Q7XG4xMzY3Olx0XHRcdG1lbWNweShcdTAwMjZwcy1cdTAwM2Vmb2xpb19zbmFwc2hvdCwgZm9saW9wLCBzaXplb2Yoc3RydWN0IHBhZ2UpKTtcbjEzNjg6XHRcdFx0cHMtXHUwMDNlZmxhZ3MgPSAwO1xuMTM2OTpcdFx0XHRwcy1cdTAwM2VpZHggPSAwO1xuMTM3MDpcdFx0fVxuMTM3MTpcdH1cbjEzNzI6XHRcbjEzNzM6XHRzdGF0aWMgaW50IGNhbGxfdm1hX21hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbjEzNzQ6XHR7XG4xMzc1Olx0XHRjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKnZtX29wcyA9IHZtYS1cdTAwM2V2bV9vcHM7XG4xMzc2Olx0XHR2b2lkICp2bV9wcml2YXRlX2RhdGEgPSB2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xuMTM3NzpcdFx0aW50IGVycjtcbjEzNzg6XHRcbjEzNzk6XHRcdGlmICghdm1fb3BzIHx8ICF2bV9vcHMtXHUwMDNlbWFwcGVkKVxuMTM4MDpcdFx0XHRyZXR1cm4gMDtcbjEzODE6XHRcbjEzODI6XHRcdGVyciA9IHZtX29wcy1cdTAwM2VtYXBwZWQodm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLCB2bWEtXHUwMDNldm1fcGdvZmYsXG4xMzgzOlx0XHRcdFx0ICAgICB2bWEtXHUwMDNldm1fZmlsZSwgXHUwMDI2dm1fcHJpdmF0ZV9kYXRhKTtcbjEzODQ6XHRcdGlmIChlcnIpXG4xMzg1Olx0XHRcdHJldHVybiBlcnI7XG4xMzg2Olx0XG4xMzg3Olx0XHRpZiAodm1fcHJpdmF0ZV9kYXRhICE9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEpXG4xMzg4Olx0XHRcdHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSB2bV9wcml2YXRlX2RhdGE7XG4xMzg5Olx0XHRyZXR1cm4gMDtcbjEzOTA6XHR9XG4xMzkxOlx0XG4xMzkyOlx0c3RhdGljIGludCBtbWFwX2FjdGlvbl9maW5pc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4xMzkzOlx0XHRcdFx0ICAgICAgc3RydWN0IG1tYXBfYWN0aW9uICphY3Rpb24sIGludCBlcnIsXG4xMzk0Olx0XHRcdFx0ICAgICAgYm9vbCBpc19jb21wYXQpXG4xMzk1Olx0e1xuMTM5NjpcdFx0c2l6ZV90IGxlbjtcbjEzOTc6XHRcbjEzOTg6XHRcdGlmICghZXJyKVxuMTM5OTpcdFx0XHRlcnIgPSBjYWxsX3ZtYV9tYXBwZWQodm1hKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ0OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGVidWdnaW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgU25hZnUqKgoKQWxyaWdodCwgc28gSSYjMzk7dmUgc3BvdHRlZCBhIGNydWNpYWwgYnVnIGZpeCDigJMgYSBiaXQgb2YgYSBoZWFkLXNjcmF0Y2hlciBhY3R1YWxseS4gSXQgbG9va3MgbGlrZSB0aGUgYHNuYXBzaG90X3BhZ2VgIGZ1bmN0aW9uIHdhcyBpbmNvcnJlY3RseSBjb3B5aW5nIGBfX3BhZ2VfMmAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBTcGVjaWZpY2FsbHksIHdoZW4gdGhlIG51bWJlciBvZiBwYWdlcyAoYG5yX3BhZ2VzYCkgd2FzIGdyZWF0ZXIgdGhhbiAxLCBidXQgaXQgc2hvdWxkIGhhdmUgYmVlbiBncmVhdGVyIHRoYW4gMiB0byB0cmlnZ2VyIHRoZSBjb3JyZWN0ZWQgYmVoYXZpb3IuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNsZWFyIGNoYW5nZSBhbmQsIGhvbmVzdGx5LCBxdWl0ZSBzaWduaWZpY2FudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBiZXR0ZXIuCgpUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBob3cgYGtwYWdlY291bnRfcmVhZGAgYW5kIGBrcGFnZWZsYWdzX3JlYWRgIGFyZSBpbXBsZW1lbnRlZC4gR2l2ZW4gdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBzbmFwc2hvdHMsIEkmIzM5O2xsIHN0YXJ0IHdpdGggYGZzL3Byb2MvcGFnZS5jYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBjaGVjayB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IHRoZSBrZXJuZWwgZXhwb3NlcyBwYWdlLXJlbGF0ZWQgaW5mb3JtYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhvc2UgaW1wbGVtZW50YXRpb25zIGlzIGNydWNpYWwgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgaW1wYWN0IG9mIHRoaXMgYnVnIGZpeCwgYW5kIGNvbmZpcm1pbmcgdGhhdCB0aGUgcHJvcG9zZWQgc29sdXRpb24gaXMgc291bmQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBhbmQgYXZvaWQgbWVtb3J5IGxlYWtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Byb2MvcGFnZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtYmxvY2suaFx1MDAzZVxuICAgMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiAgIDQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgva3NtLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW16b25lLmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9jX2ZzLmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVtYXAuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21tdV9ub3RpZmllci5oXHUwMDNlXG4gIDE2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9pZGxlLmhcdTAwM2VcbiAgMTc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwtcGFnZS1mbGFncy5oXHUwMDNlXG4gIDE4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gIDE5Olx0I2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuICAyMDpcdFxuICAyMTpcdCNkZWZpbmUgS1BNU0laRSBzaXplb2YodTY0KVxuICAyMjpcdCNkZWZpbmUgS1BNTUFTSyAoS1BNU0laRSAtIDEpXG4gIDIzOlx0XG4gIDI0Olx0ZW51bSBrcGFnZV9vcGVyYXRpb24ge1xuICAyNTpcdFx0S1BBR0VfRkxBR1MsXG4gIDI2Olx0XHRLUEFHRV9DT1VOVCxcbiAgMjc6XHRcdEtQQUdFX0NHUk9VUCxcbiAgMjg6XHR9O1xuICAyOTpcdFxuICAzMDpcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbWF4X2R1bXBfcGZuKHZvaWQpXG4gIDMxOlx0e1xuICAzMjpcdCNpZmRlZiBDT05GSUdfU1BBUlNFTUVNXG4gIDMzOlx0XHQvKlxuICAzNDpcdFx0ICogVGhlIG1lbW1hcCBvZiBlYXJseSBzZWN0aW9ucyBpcyBjb21wbGV0ZWx5IHBvcHVsYXRlZCBhbmQgbWFya2VkXG4gIDM1Olx0XHQgKiBvbmxpbmUgZXZlbiBpZiBtYXhfcGZuIGRvZXMgbm90IGZhbGwgb24gYSBzZWN0aW9uIGJvdW5kYXJ5IC1cbiAgMzY6XHRcdCAqIHBmbl90b19vbmxpbmVfcGFnZSgpIHdpbGwgc3VjY2VlZCBvbiBhbGwgcGFnZXMuIEFsbG93IGluc3BlY3RpbmdcbiAgMzc6XHRcdCAqIHRoZXNlIG1lbW1hcHMuXG4gIDM4Olx0XHQgKi9cbiAgMzk6XHRcdHJldHVybiByb3VuZF91cChtYXhfcGZuLCBQQUdFU19QRVJfU0VDVElPTik7XG4gIDQwOlx0I2Vsc2VcbiAgNDE6XHRcdHJldHVybiBtYXhfcGZuO1xuICA0MjpcdCNlbmRpZlxuICA0MzpcdH1cbiAgNDQ6XHRcbiAgNDU6XHRzdGF0aWMgdTY0IGdldF9rcGFnZV9jb3VudChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiAgNDY6XHR7XG4gIDQ3Olx0XHRzdHJ1Y3QgcGFnZV9zbmFwc2hvdCBwcztcbiAgNDg6XHRcdHU2NCByZXQ7XG4gIDQ5Olx0XG4gIDUwOlx0XHRzbmFwc2hvdF9wYWdlKFx1MDAyNnBzLCBwYWdlKTtcbiAgNTE6XHRcbiAgNTI6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19QQUdFX01BUENPVU5UKSlcbiAgNTM6XHRcdFx0cmV0ID0gZm9saW9fcHJlY2lzZV9wYWdlX21hcGNvdW50KFx1MDAyNnBzLmZvbGlvX3NuYXBzaG90LFxuICA1NDpcdFx0XHRcdFx0XHRcdCAgXHUwMDI2cHMucGFnZV9zbmFwc2hvdCk7XG4gIDU1Olx0XHRlbHNlXG4gIDU2Olx0XHRcdHJldCA9IGZvbGlvX2F2ZXJhZ2VfcGFnZV9tYXBjb3VudChcdTAwMjZwcy5mb2xpb19zbmFwc2hvdCk7XG4gIDU3Olx0XG4gIDU4Olx0XHRyZXR1cm4gcmV0O1xuICA1OTpcdH1cbiAgNjA6XHRcbiAgNjE6XHRzdGF0aWMgc3NpemVfdCBrcGFnZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuICA2MjpcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyxcbiAgNjM6XHRcdFx0ZW51bSBrcGFnZV9vcGVyYXRpb24gb3ApXG4gIDY0Olx0e1xuICA2NTpcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBtYXhfZHVtcF9wZm4gPSBnZXRfbWF4X2R1bXBfcGZuKCk7XG4gIDY2Olx0XHR1NjQgX191c2VyICpvdXQgPSAodTY0IF9fdXNlciAqKWJ1ZjtcbiAgNjc6XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuICA2ODpcdFx0dW5zaWduZWQgbG9uZyBzcmMgPSAqcHBvcztcbiAgNjk6XHRcdHVuc2lnbmVkIGxvbmcgcGZuO1xuICA3MDpcdFx0c3NpemVfdCByZXQgPSAwO1xuICA3MTpcdFx0dTY0IGluZm87XG4gIDcyOlx0XG4gIDczOlx0XHRwZm4gPSBzcmMgLyBLUE1TSVpFO1xuICA3NDpcdFx0aWYgKHNyYyBcdTAwMjYgS1BNTUFTSyB8fCBjb3VudCBcdTAwMjYgS1BNTUFTSylcbiAgNzU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDc2Olx0XHRpZiAoc3JjIFx1MDAzZT0gbWF4X2R1bXBfcGZuICogS1BNU0laRSlcbiAgNzc6XHRcdFx0cmV0dXJuIDA7XG4gIDc4Olx0XHRjb3VudCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGNvdW50LCAobWF4X2R1bXBfcGZuICogS1BNU0laRSkgLSBzcmMpO1xuICA3OTpcdFxuICA4MDpcdFx0d2hpbGUgKGNvdW50IFx1MDAzZSAwKSB7XG4gIDgxOlx0XHRcdC8qXG4gIDgyOlx0XHRcdCAqIFRPRE86IFpPTkVfREVWSUNFIHN1cHBvcnQgcmVxdWlyZXMgdG8gaWRlbnRpZnlcbiAgODM6XHRcdFx0ICogbWVtbWFwcyB0aGF0IHdlcmUgYWN0dWFsbHkgaW5pdGlhbGl6ZWQuXG4gIDg0Olx0XHRcdCAqL1xuICA4NTpcdFx0XHRwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4gIDg2Olx0XG4gIDg3Olx0XHRcdGlmIChwYWdlKSB7XG4gIDg4Olx0XHRcdFx0c3dpdGNoIChvcCkge1xuICA4OTpcdFx0XHRcdGNhc2UgS1BBR0VfRkxBR1M6XG4gIDkwOlx0XHRcdFx0XHRpbmZvID0gc3RhYmxlX3BhZ2VfZmxhZ3MocGFnZSk7XG4gIDkxOlx0XHRcdFx0XHRicmVhaztcbiAgOTI6XHRcdFx0XHRjYXNlIEtQQUdFX0NPVU5UOlxuICA5MzpcdFx0XHRcdFx0aW5mbyA9IGdldF9rcGFnZV9jb3VudChwYWdlKTtcbiAgOTQ6XHRcdFx0XHRcdGJyZWFrO1xuICA5NTpcdFx0XHRcdGNhc2UgS1BBR0VfQ0dST1VQOlxuICA5NjpcdFx0XHRcdFx0aW5mbyA9IHBhZ2VfY2dyb3VwX2lubyhwYWdlKTtcbiAgOTc6XHRcdFx0XHRcdGJyZWFrO1xuICA5ODpcdFx0XHRcdGRlZmF1bHQ6XG4gIDk5Olx0XHRcdFx0XHRpbmZvID0gMDtcbiAxMDA6XHRcdFx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYnJlYWtkb3duIG9mIHRoaXMuCgoqKkFuYWx5emluZyB0aGUgS3BhZ2UgUmVhZCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgc28gYGtwYWdlX3JlYWRgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGhlcmUsIHRoYXQmIzM5O3MgdGhlIG9uZSBJIG5lZWQgdG8gZm9jdXMgb24gaW5pdGlhbGx5LiBJIHNlZSB0aGF0IGBrcGFnZWNvdW50X3JlYWRgIGFuZCBga3BhZ2VmbGFnc19yZWFkYCBhcmUgYmFzaWNhbGx5IHdyYXBwZXJzIGFyb3VuZCBga3BhZ2VfcmVhZGAuIEludGVyZXN0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgaG93IHRoZXkgY2FsbCBga3BhZ2VfcmVhZGAgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBzcGVjaWZpY2FsbHkgZXh0cmFjdCB0aGUgcGFnZSBjb3VudCBhbmQgZmxhZ3MuIFRoZSBmYWN0IHRoYXQgYHNuYXBzaG90X3BhZ2VgIHNob3dzIHVwIGluIGBtbS9kZWJ1Zy5jYCBmb3IgYF9fZHVtcF9wYWdlYCBpcyBhIHVzZWZ1bCBicmVhZGNydW1iIGZvciBsYXRlciBhbmFseXNpcy4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRpZyBpbnRvIGBrcGFnZWNvdW50X3JlYWRgIGFuZCBga3BhZ2VmbGFnc19yZWFkYCwgc3BlY2lmaWNhbGx5IGluIGBmcy9wcm9jL3BhZ2UuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRldGFpbHMgb2YgdGhlc2Ugd3JhcHBlcnMgYW5kIGhvcGVmdWxseSBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBrcGFnZSByZWFkaW5nIG1lY2hhbmlzbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL3BhZ2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMTpcdFx0XHRcdH1cbiAxMDI6XHRcdFx0fSBlbHNlXG4gMTAzOlx0XHRcdFx0aW5mbyA9IDA7XG4gMTA0Olx0XG4gMTA1Olx0XHRcdGlmIChwdXRfdXNlcihpbmZvLCBvdXQpKSB7XG4gMTA2Olx0XHRcdFx0cmV0ID0gLUVGQVVMVDtcbiAxMDc6XHRcdFx0XHRicmVhaztcbiAxMDg6XHRcdFx0fVxuIDEwOTpcdFxuIDExMDpcdFx0XHRwZm4mIzQzOyYjNDM7O1xuIDExMTpcdFx0XHRvdXQmIzQzOyYjNDM7O1xuIDExMjpcdFx0XHRjb3VudCAtPSBLUE1TSVpFO1xuIDExMzpcdFxuIDExNDpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiAxMTU6XHRcdH1cbiAxMTY6XHRcbiAxMTc6XHRcdCpwcG9zICYjNDM7PSAoY2hhciBfX3VzZXIgKilvdXQgLSBidWY7XG4gMTE4Olx0XHRpZiAoIXJldClcbiAxMTk6XHRcdFx0cmV0ID0gKGNoYXIgX191c2VyICopb3V0IC0gYnVmO1xuIDEyMDpcdFx0cmV0dXJuIHJldDtcbiAxMjE6XHR9XG4gMTIyOlx0XG4gMTIzOlx0LyogL3Byb2Mva3BhZ2Vjb3VudCAtIGFuIGFycmF5IGV4cG9zaW5nIHBhZ2UgbWFwY291bnRzXG4gMTI0Olx0ICpcbiAxMjU6XHQgKiBFYWNoIGVudHJ5IGlzIGEgdTY0IHJlcHJlc2VudGluZyB0aGUgY29ycmVzcG9uZGluZ1xuIDEyNjpcdCAqIHBoeXNpY2FsIHBhZ2UgbWFwY291bnQuXG4gMTI3Olx0ICovXG4gMTI4Olx0c3RhdGljIHNzaXplX3Qga3BhZ2Vjb3VudF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIDEyOTpcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiAxMzA6XHR7XG4gMTMxOlx0XHRyZXR1cm4ga3BhZ2VfcmVhZChmaWxlLCBidWYsIGNvdW50LCBwcG9zLCBLUEFHRV9DT1VOVCk7XG4gMTMyOlx0fVxuIDEzMzpcdFxuIDEzNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMga3BhZ2Vjb3VudF9wcm9jX29wcyA9IHtcbiAxMzU6XHRcdC5wcm9jX2ZsYWdzXHQ9IFBST0NfRU5UUllfUEVSTUFORU5ULFxuIDEzNjpcdFx0LnByb2NfbHNlZWtcdD0gbWVtX2xzZWVrLFxuIDEzNzpcdFx0LnByb2NfcmVhZFx0PSBrcGFnZWNvdW50X3JlYWQsXG4gMTM4Olx0fTtcbiAxMzk6XHRcbiAxNDA6XHRcbiAxNDE6XHRzdGF0aWMgaW5saW5lIHU2NCBrcGZfY29weV9iaXQodTY0IGtmbGFncywgaW50IHViaXQsIGludCBrYml0KVxuIDE0MjpcdHtcbiAxNDM6XHRcdHJldHVybiAoKGtmbGFncyBcdTAwM2VcdTAwM2Uga2JpdCkgXHUwMDI2IDEpIFx1MDAzY1x1MDAzYyB1Yml0O1xuIDE0NDpcdH1cbiAxNDU6XHRcbiAxNDY6XHR1NjQgc3RhYmxlX3BhZ2VfZmxhZ3MoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gMTQ3Olx0e1xuIDE0ODpcdFx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbztcbiAxNDk6XHRcdHN0cnVjdCBwYWdlX3NuYXBzaG90IHBzO1xuIDE1MDpcdFx0dW5zaWduZWQgbG9uZyBrO1xuIDE1MTpcdFx0dW5zaWduZWQgbG9uZyBtYXBwaW5nO1xuIDE1MjpcdFx0Ym9vbCBpc19hbm9uO1xuIDE1MzpcdFx0dTY0IHUgPSAwO1xuIDE1NDpcdFxuIDE1NTpcdFx0LypcbiAxNTY6XHRcdCAqIHBzZXVkbyBmbGFnOiBLUEZfTk9QQUdFXG4gMTU3Olx0XHQgKiBpdCBkaWZmZXJlbnRpYXRlcyBhIG1lbW9yeSBob2xlIGZyb20gYSBwYWdlIHdpdGggbm8gZmxhZ3NcbiAxNTg6XHRcdCAqL1xuIDE1OTpcdFx0aWYgKCFwYWdlKVxuIDE2MDpcdFx0XHRyZXR1cm4gMSBcdTAwM2NcdTAwM2MgS1BGX05PUEFHRTtcbiAxNjE6XHRcbiAxNjI6XHRcdHNuYXBzaG90X3BhZ2UoXHUwMDI2cHMsIHBhZ2UpO1xuIDE2MzpcdFx0Zm9saW8gPSBcdTAwMjZwcy5mb2xpb19zbmFwc2hvdDtcbiAxNjQ6XHRcbiAxNjU6XHRcdGsgPSBmb2xpby1cdTAwM2VmbGFncy5mO1xuIDE2NjpcdFx0bWFwcGluZyA9ICh1bnNpZ25lZCBsb25nKWZvbGlvLVx1MDAzZW1hcHBpbmc7XG4gMTY3Olx0XHRpc19hbm9uID0gbWFwcGluZyBcdTAwMjYgRk9MSU9fTUFQUElOR19BTk9OO1xuIDE2ODpcdFxuIDE2OTpcdFx0LypcbiAxNzA6XHRcdCAqIHBzZXVkbyBmbGFncyBmb3IgdGhlIHdlbGwga25vd24gKGFub255bW91cykgbWVtb3J5IG1hcHBlZCBwYWdlc1xuIDE3MTpcdFx0ICovXG4gMTcyOlx0XHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcbiAxNzM6XHRcdFx0dSB8PSAxIFx1MDAzY1x1MDAzYyBLUEZfTU1BUDtcbiAxNzQ6XHRcdGlmIChpc19hbm9uKSB7XG4gMTc1Olx0XHRcdHUgfD0gMSBcdTAwM2NcdTAwM2MgS1BGX0FOT047XG4gMTc2Olx0XHRcdGlmICgobWFwcGluZyBcdTAwMjYgRk9MSU9fTUFQUElOR19GTEFHUykgPT0gRk9MSU9fTUFQUElOR19LU00pXG4gMTc3Olx0XHRcdFx0dSB8PSAxIFx1MDAzY1x1MDAzYyBLUEZfS1NNO1xuIDE3ODpcdFx0fVxuIDE3OTpcdFxuIDE4MDpcdFx0LypcbiAxODE6XHRcdCAqIGNvbXBvdW5kIHBhZ2VzOiBleHBvcnQgYm90aCBoZWFkL3RhaWwgaW5mb1xuIDE4MjpcdFx0ICogdGhleSB0b2dldGhlciBkZWZpbmUgYSBjb21wb3VuZCBwYWdlJiMzOTtzIHN0YXJ0L2VuZCBwb3MgYW5kIG9yZGVyXG4gMTgzOlx0XHQgKi9cbiAxODQ6XHRcdGlmIChwcy5pZHggPT0gMClcbiAxODU6XHRcdFx0dSB8PSBrcGZfY29weV9iaXQoaywgS1BGX0NPTVBPVU5EX0hFQUQsIFBHX2hlYWQpO1xuIDE4NjpcdFx0ZWxzZVxuIDE4NzpcdFx0XHR1IHw9IDEgXHUwMDNjXHUwMDNjIEtQRl9DT01QT1VORF9UQUlMO1xuIDE4ODpcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4gMTg5Olx0XHRcdHUgfD0gMSBcdTAwM2NcdTAwM2MgS1BGX0hVR0U7XG4gMTkwOlx0XHRlbHNlIGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiAxOTE6XHRcdCAgICAgICAgIGZvbGlvX3Rlc3RfbGFyZ2Vfcm1hcHBhYmxlKGZvbGlvKSkge1xuIDE5MjpcdFx0XHQvKiBOb3RlOiB3ZSBpbmRpY2F0ZSBhbnkgVEhQcyBoZXJlLCBub3QganVzdCBQTUQtc2l6ZWQgb25lcyAqL1xuIDE5MzpcdFx0XHR1IHw9IDEgXHUwMDNjXHUwMDNjIEtQRl9USFA7XG4gMTk0Olx0XHR9IGVsc2UgaWYgKGlzX2h1Z2VfemVyb19wZm4ocHMucGZuKSkge1xuIDE5NTpcdFx0XHR1IHw9IDEgXHUwMDNjXHUwMDNjIEtQRl9aRVJPX1BBR0U7XG4gMTk2Olx0XHRcdHUgfD0gMSBcdTAwM2NcdTAwM2MgS1BGX1RIUDtcbiAxOTc6XHRcdH0gZWxzZSBpZiAoaXNfemVyb19wZm4ocHMucGZuKSkge1xuIDE5ODpcdFx0XHR1IHw9IDEgXHUwMDNjXHUwMDNjIEtQRl9aRVJPX1BBR0U7XG4gMTk5Olx0XHR9XG4gMjAwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTE4CgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDUzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgcHJvbWlzaW5nLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBlZmZvcnQuIE15IGluaXRpYWwgYW5hbHlzaXMgc2hvd3MgdGhhdCB3ZSBzaG91bGQgZm9jdXMgb3VyIGF0dGVudGlvbiBvbiBhIGZldyBrZXkgc3ltYm9sczogYHNuYXBzaG90X3BhZ2VgLCBga3BhZ2Vjb3VudF9yZWFkYCwgYGtwYWdlZmxhZ3NfcmVhZGAsIGBnZXRfa3BhZ2VfY291bnRgLCBhbmQgYHN0YWJsZV9wYWdlX2ZsYWdzYC4gCgpXYWl0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGBzbmFwc2hvdF9wYWdlYCBpcyBhbHNvIHVzZWQgaW4gYF9fZHVtcF9wYWdlYCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBhIHBhZ2UgZXJyb3IsIGxpa2Ugd2hlbiBhIGBkdW1wX3BhZ2VgIG9jY3Vycy4gVGhpcyBpcyBpbnRlcmVzdGluZywgYnV0IGBrcGFnZWNvdW50X3JlYWRgIGFuZCBga3BhZ2VmbGFnc19yZWFkYCBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggbWFrZXMgdGhlbSBwcmltZSB0YXJnZXRzLiBgc25hcHNob3RfcGFnZWAgaXRzZWxmIGlzIHN0aWxsIGltcG9ydGFudCwgaG93ZXZlci4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gaWYgYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UgbmVlZC4gWWVwLCB0aGF0IGxvb2tzIHJpZ2h0LiBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBlbmFibGVzIHRoZSBgL3Byb2Mva3BhZ2Vjb3VudGAgYW5kIGAvcHJvYy9rcGFnZWZsYWdzYCBpbnRlcmZhY2VzLiBBaCwgYnV0IHdhaXQgYWdhaW4sIGBzbmFwc2hvdF9wYWdlYCBsaXZlcyBpbiBgbW0vdXRpbC5jYCwgd2hpY2ggaXMgYWx3YXlzIGNvbXBpbGVkLiBIb3dldmVyLCByZWFjaGluZyBpdCBlYXNpbHkgbGlrZWx5IGRlcGVuZHMgb24gYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAuCgpJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgYG1tL3V0aWwuY2AgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9ucyBsdXJraW5nIGluIHRoZXJlLiBOb3BlLCBzZWVtcyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgZ2xhbmNlIGF0IGBkcml2ZXJzL3BlcmYvcmlzY3ZfcG11X3NiaS5jYCB3aGVyZSBgc25hcHNob3RfcGFnZWAgaXMgdXNlZC4gT2gsIGhhbmcgb24hIEl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSB2YXJpYWJsZSBuYW1lZCBgc25hcHNob3RfcGFnZWAgaW4gdGhlcmUsIGJ1dCBpdCYjMzk7cyBub3QgdGhlIGZ1bmN0aW9uIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLgoKT2theSwgc28gdG8gcmVjYXAsIHRoZSBmdW5jdGlvbiBgc25hcHNob3RfcGFnZWAgYXBwZWFycyBvbmx5IGluIGBmcy9wcm9jL3BhZ2UuY2AsIGBtbS9kZWJ1Zy5jYCBhbmQgYG1tL3V0aWwuY2AgYXMgdGhlIHNvdXJjZSBvZiB0aGUgdGFyZ2V0LgoKQWxyaWdodCwgdGltZSB0byBzeW50aGVzaXplIHRoaXMgaW5mb3JtYXRpb24uIFRoaXMgaXMgd2hhdCBJJiMzOTt2ZSBnb3Q6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZQoqICAgKipGb2N1c1N5bWJvbHM6KiogYHNuYXBzaG90X3BhZ2VgLCBga3BhZ2Vjb3VudF9yZWFkYCwgYGtwYWdlZmxhZ3NfcmVhZGAsIGBnZXRfa3BhZ2VfY291bnRgLCBgc3RhYmxlX3BhZ2VfZmxhZ3NgCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFBST0NfUEFHRV9NT05JVE9SYAoKKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGZpeGVzIGEgZmxhdyBpbiBgc25hcHNob3RfcGFnZWAgd2hlcmUgaXQgbWlzaGFuZGxlZCBmb2xpbyBjb3BpZXMsIHNwZWNpZmljYWxseSB0aG9zZSB3aXRoIGBucl9wYWdlcyAmZ3Q7IDFgLiAgVGhpcyBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGAvcHJvYy9rcGFnZWNvdW50YCBhbmQgYC9wcm9jL2twYWdlZmxhZ3NgIGludGVyZmFjZXMsIG1ha2luZyBpdCBhIHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19QQUdFX01PTklUT1ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbmFwc2hvdF9wYWdlJiMzNDssCiAgICAmIzM0O2twYWdlY291bnRfcmVhZCYjMzQ7LAogICAgJiMzNDtrcGFnZWZsYWdzX3JlYWQmIzM0OywKICAgICYjMzQ7Z2V0X2twYWdlX2NvdW50JiMzNDssCiAgICAmIzM0O3N0YWJsZV9wYWdlX2ZsYWdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBzbmFwc2hvdF9wYWdlYCB3aGVyZSBpdCBpbmNvcnJlY3RseSBjb3BpZWQgYF9fcGFnZV8yYCBmb3IgZm9saW9zIHdpdGggYG5yX3BhZ2VzIFx1MDAzZSAxYCBpbnN0ZWFkIG9mIGBucl9wYWdlcyBcdTAwM2UgMmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYC9wcm9jL2twYWdlY291bnRgIGFuZCBgL3Byb2Mva3BhZ2VmbGFnc2AuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c25hcHNob3RfcGFnZSYjMzQ7LAogICAgJiMzNDtrcGFnZWNvdW50X3JlYWQmIzM0OywKICAgICYjMzQ7a3BhZ2VmbGFnc19yZWFkJiMzNDssCiAgICAmIzM0O2dldF9rcGFnZV9jb3VudCYjMzQ7LAogICAgJiMzNDtzdGFibGVfcGFnZV9mbGFncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgc25hcHNob3RfcGFnZWAgd2hlcmUgaXQgaW5jb3JyZWN0bHkgY29waWVkIGBfX3BhZ2VfMmAgZm9yIGZvbGlvcyB3aXRoIGBucl9wYWdlcyBcdTAwM2UgMWAgaW5zdGVhZCBvZiBgbnJfcGFnZXMgXHUwMDNlIDJgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGAvcHJvYy9rcGFnZWNvdW50YCBhbmQgYC9wcm9jL2twYWdlZmxhZ3NgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDlUMTM6NTc6MzEuNDc1MTQzMzgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU4NDM2MDYyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbmFwc2hvdF9wYWdlXCIsXG4gICAgXCJrcGFnZWNvdW50X3JlYWRcIixcbiAgICBcImtwYWdlZmxhZ3NfcmVhZFwiLFxuICAgIFwiZ2V0X2twYWdlX2NvdW50XCIsXG4gICAgXCJzdGFibGVfcGFnZV9mbGFnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBzbmFwc2hvdF9wYWdlYCB3aGVyZSBpdCBpbmNvcnJlY3RseSBjb3BpZWQgYF9fcGFnZV8yYCBmb3IgZm9saW9zIHdpdGggYG5yX3BhZ2VzIFxcdTAwM2UgMWAgaW5zdGVhZCBvZiBgbnJfcGFnZXMgXFx1MDAzZSAyYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgL3Byb2Mva3BhZ2Vjb3VudGAgYW5kIGAvcHJvYy9rcGFnZWZsYWdzYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTM6NTc6MzEuNDc1MTUwNzIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg1MjY0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNDEwMjYyOThhYzQ5MGYxMmNiZWRlZWRjZDU2YjkwNDY5MjZlMGFlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDkgMTM6NTc6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jXFxuaW5kZXggYWYyYzIxMDNmMGQ5NTIuLjM0Y2I0M2IzZWFhNGMzIDEwMDY0NFxcbi0tLSBhL21tL3V0aWwuY1xcbisrKyBiL21tL3V0aWwuY1xcbkBAIC0xMzUzLDcgKzEzNTMsNyBAQCB2b2lkIHNuYXBzaG90X3BhZ2Uoc3RydWN0IHBhZ2Vfc25hcHNob3QgKnBzLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFx0aWYgKHBzLVxcdTAwM2VpZHggXFx1MDAzYyBNQVhfRk9MSU9fTlJfUEFHRVMpIHtcXG4gXFx0XFx0bWVtY3B5KFxcdTAwMjZwcy1cXHUwMDNlZm9saW9fc25hcHNob3QsIGZvbGlvcCwgMiAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpO1xcbiBcXHRcXHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKFxcdTAwMjZwcy1cXHUwMDNlZm9saW9fc25hcHNob3QpO1xcbi1cXHRcXHRpZiAobnJfcGFnZXMgXFx1MDAzZSAxKVxcbitcXHRcXHRpZiAobnJfcGFnZXMgXFx1MDAzZSAyKVxcbiBcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnBzLVxcdTAwM2Vmb2xpb19zbmFwc2hvdC5fX3BhZ2VfMiwgXFx1MDAyNmZvbGlvcC1cXHUwMDNlX19wYWdlXzIsXFxuIFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHBhZ2UpKTtcXG4gXFx0XFx0c2V0X3BzX2ZsYWdzKHBzLCBmb2xpb3AsIHBhZ2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1NzozMS45NTQ3NjQ3MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUzNjM5NzQ1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbmFwc2hvdF9wYWdlXCIsXG4gICAgXCJrcGFnZWNvdW50X3JlYWRcIixcbiAgICBcImtwYWdlZmxhZ3NfcmVhZFwiLFxuICAgIFwiZ2V0X2twYWdlX2NvdW50XCIsXG4gICAgXCJzdGFibGVfcGFnZV9mbGFnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBzbmFwc2hvdF9wYWdlYCB3aGVyZSBpdCBpbmNvcnJlY3RseSBjb3BpZWQgYF9fcGFnZV8yYCBmb3IgZm9saW9zIHdpdGggYG5yX3BhZ2VzIFxcdTAwM2UgMWAgaW5zdGVhZCBvZiBgbnJfcGFnZXMgXFx1MDAzZSAyYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgL3Byb2Mva3BhZ2Vjb3VudGAgYW5kIGAvcHJvYy9rcGFnZWZsYWdzYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNDEwMjYyOThhYzQ5MGYxMmNiZWRlZWRjZDU2YjkwNDY5MjZlMGFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAxMzo1NzoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3V0aWwuYyBiL21tL3V0aWwuY1xuaW5kZXggYWYyYzIxMDNmMGQ5NTIuLjM0Y2I0M2IzZWFhNGMzIDEwMDY0NFxuLS0tIGEvbW0vdXRpbC5jXG4rKysgYi9tbS91dGlsLmNcbkBAIC0xMzUzLDcgKzEzNTMsNyBAQCB2b2lkIHNuYXBzaG90X3BhZ2Uoc3RydWN0IHBhZ2Vfc25hcHNob3QgKnBzLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGlmIChwcy1cdTAwM2VpZHggXHUwMDNjIE1BWF9GT0xJT19OUl9QQUdFUykge1xuIFx0XHRtZW1jcHkoXHUwMDI2cHMtXHUwMDNlZm9saW9fc25hcHNob3QsIGZvbGlvcCwgMiAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpO1xuIFx0XHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKFx1MDAyNnBzLVx1MDAzZWZvbGlvX3NuYXBzaG90KTtcbi1cdFx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxKVxuK1x0XHRpZiAobnJfcGFnZXMgXHUwMDNlIDIpXG4gXHRcdFx0bWVtY3B5KFx1MDAyNnBzLVx1MDAzZWZvbGlvX3NuYXBzaG90Ll9fcGFnZV8yLCBcdTAwMjZmb2xpb3AtXHUwMDNlX19wYWdlXzIsXG4gXHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgcGFnZSkpO1xuIFx0XHRzZXRfcHNfZmxhZ3MocHMsIGZvbGlvcCwgcGFnZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1NzozMS45NTQ3Njc5NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzMwMjQwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vdXRpbC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc25hcHNob3RfcGFnZWAgZnVuY3Rpb24uIFRoZSBjb2RlJ3MgYmVlbiBjaGFuZ2VkLCBhbmQgaXQgc2VlbXMgbGlrZSBhIHN1YnRsZSwgYnV0IHBvdGVudGlhbGx5IGltcGFjdGZ1bCwgbW9kaWZpY2F0aW9uIHRvIGhvdyBwYWdlIHNuYXBzaG90cyBhcmUgaGFuZGxlZC4gVGhlIG9yaWdpbmFsIGNvbmRpdGlvbiB3YXMgYGlmIChucl9wYWdlcyBcdTAwM2UgMSlgLCBhbmQgbm93IGl0J3MgYGlmIChucl9wYWdlcyBcdTAwM2UgMilgLiAgVGhhdCBgbWVtY3B5YCBjYWxsLCBjb3B5aW5nIGBzdHJ1Y3QgcGFnZWAgZGF0YSwgb25seSBleGVjdXRlcyB3aGVuIHRoZSBwYWdlIGNvdW50IGlzICpncmVhdGVyKiB0aGFuIHR3byBub3cuIEhtbSwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGFzIGl0IGRpcmVjdGx5IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgYHNuYXBzaG90X3BhZ2VgLiBJIG5lZWQgdG8gZGlnIGludG8gYG1tL3V0aWwuY2AgYW5kIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25kaXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBkaWZmZXJlbnQgYWJvdXQgaGFuZGxpbmcgdHdvIHBhZ2VzIHZlcnN1cyB0aHJlZSBvciBtb3JlLCBhbmQgd2hhdCBzY2VuYXJpb3MgdHJpZ2dlciB0aGlzIGZ1bmN0aW9uLiBMZXQncyBnZXQgdG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBhbmFseXplLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTM6NTc6MzUuNzg3Nzk1NDE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTQ3OTQwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbmFwc2hvdF9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3V0aWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS91dGlsLmM9MTI4NT1zdGF0aWMgdm9pZCBzZXRfcHNfZmxhZ3Moc3RydWN0IHBhZ2Vfc25hcHNob3QgKnBzLCBjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vdXRpbC5jLTEzMDItLyoqXFxubW0vdXRpbC5jOjEzMDM6ICogc25hcHNob3RfcGFnZSgpIC0gQ3JlYXRlIGEgc25hcHNob3Qgb2YgYSBzdHJ1Y3QgcGFnZVxcbm1tL3V0aWwuYy0xMzA0LSAqIEBwczogUG9pbnRlciB0byBhIHN0cnVjdCBwYWdlX3NuYXBzaG90IHRvIHN0b3JlIHRoZSBwYWdlIHNuYXBzaG90XFxuLS1cXG5tbS91dGlsLmMtMTMxMi0gKiByYXJlIGNhc2VzIHdoZXJlIHRoaXMgaXMgbm90IHBvc3NpYmxlIChlLmcuIGR1ZSB0byBmb2xpbyBzcGxpdHRpbmcpLFxcbm1tL3V0aWwuYzoxMzEzOiAqIHNuYXBzaG90X3BhZ2UoKSBmYWxscyBiYWNrIHRvIHRyZWF0aW5nIEBwYWdlIGFzIGEgc2luZ2xlIHBhZ2UgYW5kIHRoZVxcbm1tL3V0aWwuYzoxMzE0OiAqIHNuYXBzaG90IGlzIG1hcmtlZCBhcyBcXFwidW5mYWl0aGZ1bFxcXCIuIFRoZSBzbmFwc2hvdF9wYWdlX2lzX2ZhaXRoZnVsKClcXG5tbS91dGlsLmMtMTMxNS0gKiBoZWxwZXIgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLlxcbm1tL3V0aWwuYy0xMzE2LSAqL1xcbm1tL3V0aWwuYzoxMzE3OnZvaWQgc25hcHNob3RfcGFnZShzdHJ1Y3QgcGFnZV9zbmFwc2hvdCAqcHMsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL3V0aWwuYy0xMzE4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTM6NTc6MzUuODg5MjgyNTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQwMzMzMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipUcmFjaW5nIHRoZSBVc2FnZSBvZiBgc25hcHNob3RfcGFnZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGlzIGBzbmFwc2hvdF9wYWdlYCBmdW5jdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZm9sbG93IHRoZSB1c2FnZS4gV2hlcmUgaXMgdGhpcyB0aGluZyBhY3R1YWxseSAqYmVpbmcqIGNhbGxlZD8gS25vd2luZyB0aGF0IGlzIHRoZSBiZWRyb2NrIG9mIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIGluZmVyIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXMgaXQgYSBjb3JlIHV0aWxpdHksIGEgbmljaGUgaGVscGVyLCBvciBzb21ldGhpbmcgaW4gYmV0d2Vlbj8gSXRzIHBsYWNlIGluIHRoZSBjb2RlYmFzZSB3aWxsIHRlbGwgdGhlIHRhbGUuIExldCdzIHNlZS4uLiB0aW1lIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgY2FsbCBzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDEzOjU3OjM4LjcyOTYxODgxOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjAyMDY0ODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNuYXBzaG90X3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGVyZi9yaXNjdl9wbXVfc2JpLmM9NjcxPXN0YXRpYyBpbnQgcG11X3NiaV9zbmFwc2hvdF9hbGxvYyhzdHJ1Y3QgcmlzY3ZfcG11ICpwbXUpXFxuLS1cXG5kcml2ZXJzL3BlcmYvcmlzY3ZfcG11X3NiaS5jLTY3My1cXHRpbnQgY3B1O1xcbmRyaXZlcnMvcGVyZi9yaXNjdl9wbXVfc2JpLmM6Njc0OlxcdHN0cnVjdCBwYWdlICpzbmFwc2hvdF9wYWdlO1xcbmRyaXZlcnMvcGVyZi9yaXNjdl9wbXVfc2JpLmMtNjc1LVxcbi0tXFxuZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYy02NzgtXFxuZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYzo2Nzk6XFx0XFx0c25hcHNob3RfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0FUT01JQyB8IF9fR0ZQX1pFUk8pO1xcbmRyaXZlcnMvcGVyZi9yaXNjdl9wbXVfc2JpLmM6NjgwOlxcdFxcdGlmICghc25hcHNob3RfcGFnZSkge1xcbmRyaXZlcnMvcGVyZi9yaXNjdl9wbXVfc2JpLmMtNjgxLVxcdFxcdFxcdHBtdV9zYmlfc25hcHNob3RfZnJlZShwbXUpO1xcbi0tXFxuZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYy02ODMtXFx0XFx0fVxcbmRyaXZlcnMvcGVyZi9yaXNjdl9wbXVfc2JpLmM6Njg0OlxcdFxcdGNwdV9od19ldnQtXFx1MDAzZXNuYXBzaG90X2FkZHIgPSBwYWdlX3RvX3ZpcnQoc25hcHNob3RfcGFnZSk7XFxuZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYzo2ODU6XFx0XFx0Y3B1X2h3X2V2dC1cXHUwMDNlc25hcHNob3RfYWRkcl9waHlzID0gcGFnZV90b19waHlzKHNuYXBzaG90X3BhZ2UpO1xcbmRyaXZlcnMvcGVyZi9yaXNjdl9wbXVfc2JpLmMtNjg2LVxcdH1cXG4tLVxcbmZzL3Byb2MvcGFnZS5jPTQ1PXN0YXRpYyB1NjQgZ2V0X2twYWdlX2NvdW50KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuZnMvcHJvYy9wYWdlLmMtNDktXFxuZnMvcHJvYy9wYWdlLmM6NTA6XFx0c25hcHNob3RfcGFnZShcXHUwMDI2cHMsIHBhZ2UpO1xcbmZzL3Byb2MvcGFnZS5jLTUxLVxcbi0tXFxuZnMvcHJvYy9wYWdlLmM9MTQ2PXU2NCBzdGFibGVfcGFnZV9mbGFncyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmZzL3Byb2MvcGFnZS5jLTE2MS1cXG5mcy9wcm9jL3BhZ2UuYzoxNjI6XFx0c25hcHNob3RfcGFnZShcXHUwMDI2cHMsIHBhZ2UpO1xcbmZzL3Byb2MvcGFnZS5jLTE2My1cXHRmb2xpbyA9IFxcdTAwMjZwcy5mb2xpb19zbmFwc2hvdDtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD01MjU3PXN0cnVjdCBwYWdlX3NuYXBzaG90IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC01MjY0LVxcbmluY2x1ZGUvbGludXgvbW0uaDo1MjY1OnN0YXRpYyBpbmxpbmUgYm9vbCBzbmFwc2hvdF9wYWdlX2lzX2ZhaXRoZnVsKGNvbnN0IHN0cnVjdCBwYWdlX3NuYXBzaG90ICpwcylcXG5pbmNsdWRlL2xpbnV4L21tLmgtNTI2Ni17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtNTI2OS1cXG5pbmNsdWRlL2xpbnV4L21tLmg6NTI3MDp2b2lkIHNuYXBzaG90X3BhZ2Uoc3RydWN0IHBhZ2Vfc25hcHNob3QgKnBzLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTUyNzEtXFxuLS1cXG5tbS9kZWJ1Zy5jPTEzMD1zdGF0aWMgdm9pZCBfX2R1bXBfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL2RlYnVnLmMtMTMzLVxcbm1tL2RlYnVnLmM6MTM0OlxcdHNuYXBzaG90X3BhZ2UoXFx1MDAyNnBzLCBwYWdlKTtcXG5tbS9kZWJ1Zy5jOjEzNTpcXHRpZiAoIXNuYXBzaG90X3BhZ2VfaXNfZmFpdGhmdWwoXFx1MDAyNnBzKSlcXG5tbS9kZWJ1Zy5jLTEzNi1cXHRcXHRwcl93YXJuKFxcXCJwYWdlIGRvZXMgbm90IG1hdGNoIGZvbGlvXFxcXG5cXFwiKTtcXG4tLVxcbm1tL3V0aWwuYz0xMjg1PXN0YXRpYyB2b2lkIHNldF9wc19mbGFncyhzdHJ1Y3QgcGFnZV9zbmFwc2hvdCAqcHMsIGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS91dGlsLmMtMTMwMi0vKipcXG5tbS91dGlsLmM6MTMwMzogKiBzbmFwc2hvdF9wYWdlKCkgLSBDcmVhdGUgYSBzbmFwc2hvdCBvZiBhIHN0cnVjdCBwYWdlXFxubW0vdXRpbC5jLTEzMDQtICogQHBzOiBQb2ludGVyIHRvIGEgc3RydWN0IHBhZ2Vfc25hcHNob3QgdG8gc3RvcmUgdGhlIHBhZ2Ugc25hcHNob3RcXG4tLVxcbm1tL3V0aWwuYy0xMzEyLSAqIHJhcmUgY2FzZXMgd2hlcmUgdGhpcyBpcyBub3QgcG9zc2libGUgKGUuZy4gZHVlIHRvIGZvbGlvIHNwbGl0dGluZyksXFxubW0vdXRpbC5jOjEzMTM6ICogc25hcHNob3RfcGFnZSgpIGZhbGxzIGJhY2sgdG8gdHJlYXRpbmcgQHBhZ2UgYXMgYSBzaW5nbGUgcGFnZSBhbmQgdGhlXFxubW0vdXRpbC5jOjEzMTQ6ICogc25hcHNob3QgaXMgbWFya2VkIGFzIFxcXCJ1bmZhaXRoZnVsXFxcIi4gVGhlIHNuYXBzaG90X3BhZ2VfaXNfZmFpdGhmdWwoKVxcbm1tL3V0aWwuYy0xMzE1LSAqIGhlbHBlciBjYW4gYmUgdXNlZCB0byBjaGVjayBmb3IgdGhpcyBjb25kaXRpb24uXFxubW0vdXRpbC5jLTEzMTYtICovXFxubW0vdXRpbC5jOjEzMTc6dm9pZCBzbmFwc2hvdF9wYWdlKHN0cnVjdCBwYWdlX3NuYXBzaG90ICpwcywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vdXRpbC5jLTEzMTgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1Nzo0MS4zMzE2OTIzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU3MTg2NzE0NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGBzbmFwc2hvdF9wYWdlYCBVc2FnZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBzbmFwc2hvdF9wYWdlYCwgYW5kIGl0IHNlZW1zIHRvIGJlIHF1aXRlIGEgY3JpdGljYWwgZnVuY3Rpb24sIHBvcHBpbmcgdXAgaW4gYSBmZXcga2V5IGFyZWFzLiBJIHNlZSBpdCdzIHVzZWQgd2l0aGluIGBmcy9wcm9jL3BhZ2UuY2AsIHNwZWNpZmljYWxseSBmb3IgYGdldF9rcGFnZV9jb3VudGAgYW5kIGBzdGFibGVfcGFnZV9mbGFnc2AuIFRoYXQncyBpbnRlcmVzdGluZywgYXMgaXQgaW5kaWNhdGVzIHRoaXMgZnVuY3Rpb24gcGxheXMgYSByb2xlIGluIHRyYWNraW5nIGFuZCByZXBvcnRpbmcgcGFnZSB1c2FnZSB3aXRoaW4gdGhlIHByb2MgZmlsZXN5c3RlbSwgd2hpY2ggaXMgb2Z0ZW4gY3J1Y2lhbCBmb3Igc3lzdGVtIG1vbml0b3JpbmcgYW5kIGRlYnVnZ2luZy4gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBoeXBvdGhlc2VzIGFib3V0IGl0cyByb2xlIGluIHRob3NlIHNwZWNpZmljIGNvbnRleHRzIC0gcGVyaGFwcyBpdCdzIGludm9sdmVkIGluIHByb3ZpZGluZyBhY2N1cmF0ZSBwYWdlIGNvdW50IGluZm9ybWF0aW9uLCBvciBlbnN1cmluZyB0aGUgc3RhYmlsaXR5IG9mIGNlcnRhaW4gcGFnZSBmbGFncyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uLlxuXG5UaGVuIHRoZXJlJ3MgaXRzIHVzZSBpbiBgbW0vZGVidWcuY2AgYXMgcGFydCBvZiBgX19kdW1wX3BhZ2VgLiBUaGF0J3MgYW5vdGhlciB2aXRhbCBjbHVlLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYHNuYXBzaG90X3BhZ2VgIGlzIGVzc2VudGlhbCB0byB0aGUgbG93IGxldmVsIG1lbW9yeSBkZWJ1Z2dpbmcsIGFuZCBsaWtlbHkgaW52b2x2ZWQgaW4gY2FwdHVyaW5nIGEgcG9pbnQtaW4tdGltZSBcInNuYXBzaG90XCIgb2YgYSBwYWdlJ3Mgc3RhdGUsIHVzZWQgdG8gYW5hbHl6ZSBhIHBhZ2UuXG5cbkknbGwgc3RhcnQgYnkgZm9jdXNpbmcgbXkgYXR0ZW50aW9uIG9uIHRob3NlIGBmcy9wcm9jL3BhZ2UuY2AgdXNhZ2VzLCBhbmQgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBgZ2V0X2twYWdlX2NvdW50YCBhbmQgYHN0YWJsZV9wYWdlX2ZsYWdzYCBpbXBsZW1lbnRhdGlvbnMgdG8gZ2V0IGEgY2xlYXJlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgYHNuYXBzaG90X3BhZ2VgIGlzIGRvaW5nIGF0IGl0cyBjb3JlLiBJIHdhbnQgdG8gYnVpbGQgYSBzb2xpZCBtZW50YWwgbW9kZWwgb2YgaG93IGl0J3MgdXNlZCBpbiB0aGVzZSBjcml0aWNhbCBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MjgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1Nzo1Ny4wNTAzNjYzMDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MDQ1MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9rcGFnZV9jb3VudHxzdGFibGVfcGFnZV9mbGFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL3BhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3BhZ2UuYz0zMD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X21heF9kdW1wX3Bmbih2b2lkKVxcbi0tXFxuZnMvcHJvYy9wYWdlLmMtNDQtXFxuZnMvcHJvYy9wYWdlLmM6NDU6c3RhdGljIHU2NCBnZXRfa3BhZ2VfY291bnQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuZnMvcHJvYy9wYWdlLmMtNDYte1xcbi0tXFxuZnMvcHJvYy9wYWdlLmM9NjE9c3RhdGljIHNzaXplX3Qga3BhZ2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmZzL3Byb2MvcGFnZS5jLTg5LVxcdFxcdFxcdGNhc2UgS1BBR0VfRkxBR1M6XFxuZnMvcHJvYy9wYWdlLmM6OTA6XFx0XFx0XFx0XFx0aW5mbyA9IHN0YWJsZV9wYWdlX2ZsYWdzKHBhZ2UpO1xcbmZzL3Byb2MvcGFnZS5jLTkxLVxcdFxcdFxcdFxcdGJyZWFrO1xcbmZzL3Byb2MvcGFnZS5jLTkyLVxcdFxcdFxcdGNhc2UgS1BBR0VfQ09VTlQ6XFxuZnMvcHJvYy9wYWdlLmM6OTM6XFx0XFx0XFx0XFx0aW5mbyA9IGdldF9rcGFnZV9jb3VudChwYWdlKTtcXG5mcy9wcm9jL3BhZ2UuYy05NC1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbmZzL3Byb2MvcGFnZS5jPTE0MT1zdGF0aWMgaW5saW5lIHU2NCBrcGZfY29weV9iaXQodTY0IGtmbGFncywgaW50IHViaXQsIGludCBrYml0KVxcbi0tXFxuZnMvcHJvYy9wYWdlLmMtMTQ1LVxcbmZzL3Byb2MvcGFnZS5jOjE0Njp1NjQgc3RhYmxlX3BhZ2VfZmxhZ3MoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuZnMvcHJvYy9wYWdlLmMtMTQ3LXtcXG4tLVxcbmZzL3Byb2MvcGFnZS5jLTI1Ny19XFxuZnMvcHJvYy9wYWdlLmM6MjU4OkVYUE9SVF9TWU1CT0xfR1BMKHN0YWJsZV9wYWdlX2ZsYWdzKTtcXG5mcy9wcm9jL3BhZ2UuYy0yNTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDEzOjU3OjU3LjE2NzQxNzM5M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNjYzMTI0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqS2VybmVsIFBhZ2UgSW5mb3JtYXRpb24gSGFuZGxpbmcgLSBGdW5jdGlvbmFsIENoYW5nZSBBbGVydCEqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaGVyZSBpcyBkZWZpbml0ZWx5IG9uIGAvcHJvYy9rcGFnZWNvdW50YCBhbmQgYC9wcm9jL2twYWdlZmxhZ3NgIOKAkyB0aG9zZSBjcnVjaWFsIGludGVyZmFjZXMgZm9yIHByb2JpbmcgcGFnZSBtZXRhZGF0YSB3aXRoaW4gdGhlIGtlcm5lbC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgcmVzaWRlcyBpbiBgbW0vdXRpbC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc25hcHNob3RfcGFnZWAgZnVuY3Rpb24uIEdpdmVuIHRoYXQgdGhpcyBpcyBhICpmdW5jdGlvbmFsKiBtb2RpZmljYXRpb24sIG15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyBjb25jZXJuIGJhbGFuY2VkIHdpdGggY3VyaW9zaXR5LiBBbnkgY2hhbmdlIHRvIHRoZXNlIGFyZWFzIHJlcXVpcmVzIGludGVuc2Ugc2NydXRpbnk7IHRoZSB3YXkgdGhlc2UgaW50ZXJmYWNlcyBiZWhhdmUgY2FuIHNpZ25pZmljYW50bHkgaW1wYWN0IGRlYnVnZ2luZywgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIGFuZCBldmVuIHNlY3VyaXR5IHBvc3R1cmUsIGRlcGVuZGluZyBvbiBob3cgdGhleSdyZSB1c2VkLlxuXG5TaW5jZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgb2YgaG93IHdlJ3JlIGRlYWxpbmcgd2l0aCBwYWdlIGluZm9ybWF0aW9uLCBmdXp6aW5nIGJlY29tZXMgYSB0b3AgcHJpb3JpdHkuIFdlIG5lZWQgdG8gc3ViamVjdCB0aGlzIGNvZGUgdG8gcmlnb3JvdXMgdGVzdGluZyB0byB1bmNvdmVyIGFueSBlZGdlIGNhc2VzLCB1bmV4cGVjdGVkIGJlaGF2aW9yLCBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoYXQgdGhlc2UgaW50ZXJmYWNlcyBhcmUgYWNjZXNzaWJsZSB0byB1c2Vyc3BhY2UuIEEgcm9idXN0IGZ1enppbmcgY2FtcGFpZ24gaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwgYmVmb3JlIHRoaXMgc2VlcyBhbnkgcHJvZHVjdGlvbi5cblxuQW5kLCBvZiBjb3Vyc2UsIGEgcXVpY2sgY2hlY2sgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgaXMgbmVjZXNzYXJ5LiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGlzICppbmRlZWQqIHdoYXQgZW5hYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0aGF0IHRpZXMgaW50byB0aGVzZSBpbnRlcmZhY2VzLiBWZXJpZmljYXRpb24gaXMga2V5LiBObyBhc3N1bXB0aW9ucywgbm8gc2hvcnRjdXRzLiBUaGF0IGNvbmZpZ3VyYXRpb24gaXMgb3VyIG9uLW9mZiBzd2l0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1ODowNS40MzM3MzI5MjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTUzMzIwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrcGFnZWNvdW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvS2NvbmZpZz0xMDI9Y29uZmlnIFBST0NfUEFHRV9NT05JVE9SXFxuLS1cXG5mcy9wcm9jL0tjb25maWctMTA4LVxcdCAgL3Byb2MvcGlkL3NtYXBzLCAvcHJvYy9waWQvY2xlYXJfcmVmcywgL3Byb2MvcGlkL3BhZ2VtYXAsXFxuZnMvcHJvYy9LY29uZmlnOjEwOTpcXHQgIC9wcm9jL2twYWdlY291bnQsIGFuZCAvcHJvYy9rcGFnZWZsYWdzLiBEaXNhYmxpbmcgdGhlc2VcXG5mcy9wcm9jL0tjb25maWctMTEwLVxcdCAgaW50ZXJmYWNlcyB3aWxsIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUga2VybmVsIGJ5IGFwcHJveGltYXRlbHkgNGtiLlxcbi0tXFxuZnMvcHJvYy9pbnRlcm5hbC5oPTE1OD11bnNpZ25lZCBuYW1lX3RvX2ludChjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cik7XFxuLS1cXG5mcy9wcm9jL2ludGVybmFsLmgtMTc3LSAqIFVzZSB0aGlzIGZ1bmN0aW9uIG9ubHkgZm9yIHRoZSBjYWxjdWxhdGlvbiBvZiBleGlzdGluZyBzdGF0aXN0aWNzXFxuZnMvcHJvYy9pbnRlcm5hbC5oOjE3ODogKiAoVVNTLCBQU1MsIG1hcGNvdW50X21heCkgYW5kIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgKC9wcm9jL2twYWdlY291bnQpLlxcbmZzL3Byb2MvaW50ZXJuYWwuaC0xNzktICpcXG4tLVxcbmZzL3Byb2MvcGFnZS5jPTYxPXN0YXRpYyBzc2l6ZV90IGtwYWdlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5mcy9wcm9jL3BhZ2UuYy0xMjItXFxuZnMvcHJvYy9wYWdlLmM6MTIzOi8qIC9wcm9jL2twYWdlY291bnQgLSBhbiBhcnJheSBleHBvc2luZyBwYWdlIG1hcGNvdW50c1xcbmZzL3Byb2MvcGFnZS5jLTEyNC0gKlxcbi0tXFxuZnMvcHJvYy9wYWdlLmMtMTI3LSAqL1xcbmZzL3Byb2MvcGFnZS5jOjEyODpzdGF0aWMgc3NpemVfdCBrcGFnZWNvdW50X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuZnMvcHJvYy9wYWdlLmMtMTI5LVxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbi0tXFxuZnMvcHJvYy9wYWdlLmMtMTMzLVxcbmZzL3Byb2MvcGFnZS5jOjEzNDpzdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIGtwYWdlY291bnRfcHJvY19vcHMgPSB7XFxuZnMvcHJvYy9wYWdlLmMtMTM1LVxcdC5wcm9jX2ZsYWdzXFx0PSBQUk9DX0VOVFJZX1BFUk1BTkVOVCxcXG5mcy9wcm9jL3BhZ2UuYy0xMzYtXFx0LnByb2NfbHNlZWtcXHQ9IG1lbV9sc2VlayxcXG5mcy9wcm9jL3BhZ2UuYzoxMzc6XFx0LnByb2NfcmVhZFxcdD0ga3BhZ2Vjb3VudF9yZWFkLFxcbmZzL3Byb2MvcGFnZS5jLTEzOC19O1xcbi0tXFxuZnMvcHJvYy9wYWdlLmM9MjkwPXN0YXRpYyBpbnQgX19pbml0IHByb2NfcGFnZV9pbml0KHZvaWQpXFxuZnMvcHJvYy9wYWdlLmMtMjkxLXtcXG5mcy9wcm9jL3BhZ2UuYzoyOTI6XFx0cHJvY19jcmVhdGUoXFxcImtwYWdlY291bnRcXFwiLCBTX0lSVVNSLCBOVUxMLCBcXHUwMDI2a3BhZ2Vjb3VudF9wcm9jX29wcyk7XFxuZnMvcHJvYy9wYWdlLmMtMjkzLVxcdHByb2NfY3JlYXRlKFxcXCJrcGFnZWZsYWdzXFxcIiwgU19JUlVTUiwgTlVMTCwgXFx1MDAyNmtwYWdlZmxhZ3NfcHJvY19vcHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1ODowNS41NDUyNzYwOTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1MDkyMTExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgXHUwMDI2IEtleSBGdW5jdGlvbiBTZWxlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIHplcm9lZCBpbiBvbiB0aGUgYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAgY29uZmlnIOKAkyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGZ1bmN0aW9ucyBsaWtlIGBzbmFwc2hvdF9wYWdlYCwgYGdldF9rcGFnZV9jb3VudGAsIGBzdGFibGVfcGFnZV9mbGFnc2AsIGBrcGFnZWNvdW50X3JlYWRgLCBhbmQgYGtwYWdlZmxhZ3NfcmVhZGAuIFdhaXQsIGhvbGQgb24uLi4gYGtwYWdlY291bnRfcmVhZGAgYW5kIGBrcGFnZWZsYWdzX3JlYWRgIGxvb2sgbGlrZSBtb3JlIHByb21pc2luZyBlbnRyeSBwb2ludHMgdG8gc3RhcnQgd2l0aCwgZ2l2ZW4gdGhlaXIgbmFtZXMuIExldCdzIHNlZSBob3cgdGhvc2UgYXJlIGltcGxlbWVudGVkIGFuZCB3aGF0IHRoZXkgZG8uXG5QZXJoYXBzIEknbGwgaGF2ZSBhIGxvb2sgYXQgYHNuYXBzaG90X3BhZ2VgIGluIGBtbS91dGlsLmNgIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1ODowOS4wOTYxOTk1ODJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3V0aWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMwMDpcXHR9XFxuMTMwMTpcXHRcXG4xMzAyOlxcdC8qKlxcbjEzMDM6XFx0ICogc25hcHNob3RfcGFnZSgpIC0gQ3JlYXRlIGEgc25hcHNob3Qgb2YgYSBzdHJ1Y3QgcGFnZVxcbjEzMDQ6XFx0ICogQHBzOiBQb2ludGVyIHRvIGEgc3RydWN0IHBhZ2Vfc25hcHNob3QgdG8gc3RvcmUgdGhlIHBhZ2Ugc25hcHNob3RcXG4xMzA1OlxcdCAqIEBwYWdlOiBUaGUgcGFnZSB0byBzbmFwc2hvdFxcbjEzMDY6XFx0ICpcXG4xMzA3OlxcdCAqIENyZWF0ZSBhIHNuYXBzaG90IG9mIHRoZSBwYWdlIGFuZCBzdG9yZSBib3RoIGl0cyBzdHJ1Y3QgcGFnZSBhbmQgc3RydWN0XFxuMTMwODpcXHQgKiBmb2xpbyByZXByZXNlbnRhdGlvbnMgaW4gQHBzLlxcbjEzMDk6XFx0ICpcXG4xMzEwOlxcdCAqIEEgc25hcHNob3QgaXMgbWFya2VkIGFzIFxcXCJmYWl0aGZ1bFxcXCIgaWYgdGhlIGNvbXBvdW5kIHN0YXRlIG9mIEBwYWdlIHdhc1xcbjEzMTE6XFx0ICogc3RhYmxlIGFuZCBhbGxvd2VkIHNhZmUgcmVjb25zdHJ1Y3Rpb24gb2YgdGhlIGZvbGlvIHJlcHJlc2VudGF0aW9uLiBJblxcbjEzMTI6XFx0ICogcmFyZSBjYXNlcyB3aGVyZSB0aGlzIGlzIG5vdCBwb3NzaWJsZSAoZS5nLiBkdWUgdG8gZm9saW8gc3BsaXR0aW5nKSxcXG4xMzEzOlxcdCAqIHNuYXBzaG90X3BhZ2UoKSBmYWxscyBiYWNrIHRvIHRyZWF0aW5nIEBwYWdlIGFzIGEgc2luZ2xlIHBhZ2UgYW5kIHRoZVxcbjEzMTQ6XFx0ICogc25hcHNob3QgaXMgbWFya2VkIGFzIFxcXCJ1bmZhaXRoZnVsXFxcIi4gVGhlIHNuYXBzaG90X3BhZ2VfaXNfZmFpdGhmdWwoKVxcbjEzMTU6XFx0ICogaGVscGVyIGNhbiBiZSB1c2VkIHRvIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbi5cXG4xMzE2OlxcdCAqL1xcbjEzMTc6XFx0dm9pZCBzbmFwc2hvdF9wYWdlKHN0cnVjdCBwYWdlX3NuYXBzaG90ICpwcywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuMTMxODpcXHR7XFxuMTMxOTpcXHRcXHR1bnNpZ25lZCBsb25nIGluZm8sIG5yX3BhZ2VzID0gMTtcXG4xMzIwOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW9wO1xcbjEzMjE6XFx0XFx0aW50IGxvb3BzID0gNTtcXG4xMzIyOlxcdFxcbjEzMjM6XFx0XFx0cHMtXFx1MDAzZXBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbjEzMjQ6XFx0XFx0cHMtXFx1MDAzZWZsYWdzID0gUEFHRV9TTkFQU0hPVF9GQUlUSEZVTDtcXG4xMzI1OlxcdFxcbjEzMjY6XFx0YWdhaW46XFxuMTMyNzpcXHRcXHRtZW1zZXQoXFx1MDAyNnBzLVxcdTAwM2Vmb2xpb19zbmFwc2hvdCwgMCwgc2l6ZW9mKHN0cnVjdCBmb2xpbykpO1xcbjEzMjg6XFx0XFx0bWVtY3B5KFxcdTAwMjZwcy1cXHUwMDNlcGFnZV9zbmFwc2hvdCwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XFxuMTMyOTpcXHRcXHRpbmZvID0gcHMtXFx1MDAzZXBhZ2Vfc25hcHNob3QuY29tcG91bmRfaW5mbztcXG4xMzMwOlxcdFxcdGlmICghKGluZm8gXFx1MDAyNiAxKSkge1xcbjEzMzE6XFx0XFx0XFx0cHMtXFx1MDAzZWlkeCA9IDA7XFxuMTMzMjpcXHRcXHRcXHRmb2xpb3AgPSAoc3RydWN0IGZvbGlvICopXFx1MDAyNnBzLVxcdTAwM2VwYWdlX3NuYXBzaG90O1xcbjEzMzM6XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvcCkpIHtcXG4xMzM0OlxcdFxcdFxcdFxcdHNldF9wc19mbGFncyhwcywgcGFnZV9mb2xpbyhwYWdlKSwgcGFnZSk7XFxuMTMzNTpcXHRcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnBzLVxcdTAwM2Vmb2xpb19zbmFwc2hvdCwgZm9saW9wLFxcbjEzMzY6XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgcGFnZSkpO1xcbjEzMzc6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjEzMzg6XFx0XFx0XFx0fVxcbjEzMzk6XFx0XFx0XFx0Zm9saW9wID0gKHN0cnVjdCBmb2xpbyAqKXBhZ2U7XFxuMTM0MDpcXHRcXHR9IGVsc2Uge1xcbjEzNDE6XFx0XFx0XFx0LyogU2VlIGNvbXBvdW5kX2hlYWQoKSAqL1xcbjEzNDI6XFx0XFx0XFx0aWYgKGNvbXBvdW5kX2luZm9faGFzX21hc2soKSkge1xcbjEzNDM6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwID0gKHVuc2lnbmVkIGxvbmcpcGFnZTtcXG4xMzQ0OlxcdFxcbjEzNDU6XFx0XFx0XFx0XFx0Zm9saW9wID0gKHN0cnVjdCBmb2xpbyAqKShwIFxcdTAwMjYgaW5mbyk7XFxuMTM0NjpcXHRcXHRcXHR9IGVsc2Uge1xcbjEzNDc6XFx0XFx0XFx0XFx0Zm9saW9wID0gKHN0cnVjdCBmb2xpbyAqKShpbmZvIC0gMSk7XFxuMTM0ODpcXHRcXHRcXHR9XFxuMTM0OTpcXHRcXG4xMzUwOlxcdFxcdFxcdHBzLVxcdTAwM2VpZHggPSBmb2xpb19wYWdlX2lkeChmb2xpb3AsIHBhZ2UpO1xcbjEzNTE6XFx0XFx0fVxcbjEzNTI6XFx0XFxuMTM1MzpcXHRcXHRpZiAocHMtXFx1MDAzZWlkeCBcXHUwMDNjIE1BWF9GT0xJT19OUl9QQUdFUykge1xcbjEzNTQ6XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZwcy1cXHUwMDNlZm9saW9fc25hcHNob3QsIGZvbGlvcCwgMiAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpO1xcbjEzNTU6XFx0XFx0XFx0bnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhcXHUwMDI2cHMtXFx1MDAzZWZvbGlvX3NuYXBzaG90KTtcXG4xMzU2OlxcdFxcdFxcdGlmIChucl9wYWdlcyBcXHUwMDNlIDIpXFxuMTM1NzpcXHRcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnBzLVxcdTAwM2Vmb2xpb19zbmFwc2hvdC5fX3BhZ2VfMiwgXFx1MDAyNmZvbGlvcC1cXHUwMDNlX19wYWdlXzIsXFxuMTM1ODpcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBwYWdlKSk7XFxuMTM1OTpcXHRcXHRcXHRzZXRfcHNfZmxhZ3MocHMsIGZvbGlvcCwgcGFnZSk7XFxuMTM2MDpcXHRcXHR9XFxuMTM2MTpcXHRcXG4xMzYyOlxcdFxcdGlmIChwcy1cXHUwMDNlaWR4IFxcdTAwM2UgbnJfcGFnZXMpIHtcXG4xMzYzOlxcdFxcdFxcdGlmIChsb29wcy0tIFxcdTAwM2UgMClcXG4xMzY0OlxcdFxcdFxcdFxcdGdvdG8gYWdhaW47XFxuMTM2NTpcXHRcXHRcXHRjbGVhcl9jb21wb3VuZF9oZWFkKFxcdTAwMjZwcy1cXHUwMDNlcGFnZV9zbmFwc2hvdCk7XFxuMTM2NjpcXHRcXHRcXHRmb2xpb3AgPSAoc3RydWN0IGZvbGlvICopXFx1MDAyNnBzLVxcdTAwM2VwYWdlX3NuYXBzaG90O1xcbjEzNjc6XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZwcy1cXHUwMDNlZm9saW9fc25hcHNob3QsIGZvbGlvcCwgc2l6ZW9mKHN0cnVjdCBwYWdlKSk7XFxuMTM2ODpcXHRcXHRcXHRwcy1cXHUwMDNlZmxhZ3MgPSAwO1xcbjEzNjk6XFx0XFx0XFx0cHMtXFx1MDAzZWlkeCA9IDA7XFxuMTM3MDpcXHRcXHR9XFxuMTM3MTpcXHR9XFxuMTM3MjpcXHRcXG4xMzczOlxcdHN0YXRpYyBpbnQgY2FsbF92bWFfbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbjEzNzQ6XFx0e1xcbjEzNzU6XFx0XFx0Y29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICp2bV9vcHMgPSB2bWEtXFx1MDAzZXZtX29wcztcXG4xMzc2OlxcdFxcdHZvaWQgKnZtX3ByaXZhdGVfZGF0YSA9IHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xcbjEzNzc6XFx0XFx0aW50IGVycjtcXG4xMzc4OlxcdFxcbjEzNzk6XFx0XFx0aWYgKCF2bV9vcHMgfHwgIXZtX29wcy1cXHUwMDNlbWFwcGVkKVxcbjEzODA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTM4MTpcXHRcXG4xMzgyOlxcdFxcdGVyciA9IHZtX29wcy1cXHUwMDNlbWFwcGVkKHZtYS1cXHUwMDNldm1fc3RhcnQsIHZtYS1cXHUwMDNldm1fZW5kLCB2bWEtXFx1MDAzZXZtX3Bnb2ZmLFxcbjEzODM6XFx0XFx0XFx0XFx0ICAgICB2bWEtXFx1MDAzZXZtX2ZpbGUsIFxcdTAwMjZ2bV9wcml2YXRlX2RhdGEpO1xcbjEzODQ6XFx0XFx0aWYgKGVycilcXG4xMzg1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTM4NjpcXHRcXG4xMzg3OlxcdFxcdGlmICh2bV9wcml2YXRlX2RhdGEgIT0gdm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEpXFxuMTM4ODpcXHRcXHRcXHR2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHZtX3ByaXZhdGVfZGF0YTtcXG4xMzg5OlxcdFxcdHJldHVybiAwO1xcbjEzOTA6XFx0fVxcbjEzOTE6XFx0XFxuMTM5MjpcXHRzdGF0aWMgaW50IG1tYXBfYWN0aW9uX2ZpbmlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4xMzkzOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtbWFwX2FjdGlvbiAqYWN0aW9uLCBpbnQgZXJyLFxcbjEzOTQ6XFx0XFx0XFx0XFx0ICAgICAgYm9vbCBpc19jb21wYXQpXFxuMTM5NTpcXHR7XFxuMTM5NjpcXHRcXHRzaXplX3QgbGVuO1xcbjEzOTc6XFx0XFxuMTM5ODpcXHRcXHRpZiAoIWVycilcXG4xMzk5OlxcdFxcdFxcdGVyciA9IGNhbGxfdm1hX21hcHBlZCh2bWEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1ODowOS4wOTYzMzg2MjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI4MDAxNzM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBTbmFmdSoqXG5cbkFscmlnaHQsIHNvIEkndmUgc3BvdHRlZCBhIGNydWNpYWwgYnVnIGZpeCDigJMgYSBiaXQgb2YgYSBoZWFkLXNjcmF0Y2hlciBhY3R1YWxseS4gSXQgbG9va3MgbGlrZSB0aGUgYHNuYXBzaG90X3BhZ2VgIGZ1bmN0aW9uIHdhcyBpbmNvcnJlY3RseSBjb3B5aW5nIGBfX3BhZ2VfMmAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBTcGVjaWZpY2FsbHksIHdoZW4gdGhlIG51bWJlciBvZiBwYWdlcyAoYG5yX3BhZ2VzYCkgd2FzIGdyZWF0ZXIgdGhhbiAxLCBidXQgaXQgc2hvdWxkIGhhdmUgYmVlbiBncmVhdGVyIHRoYW4gMiB0byB0cmlnZ2VyIHRoZSBjb3JyZWN0ZWQgYmVoYXZpb3IuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNsZWFyIGNoYW5nZSBhbmQsIGhvbmVzdGx5LCBxdWl0ZSBzaWduaWZpY2FudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBiZXR0ZXIuXG5cblRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGBrcGFnZWNvdW50X3JlYWRgIGFuZCBga3BhZ2VmbGFnc19yZWFkYCBhcmUgaW1wbGVtZW50ZWQuIEdpdmVuIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBzbmFwc2hvdHMsIEknbGwgc3RhcnQgd2l0aCBgZnMvcHJvYy9wYWdlLmNgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gY2hlY2sgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGhvdyB0aGUga2VybmVsIGV4cG9zZXMgcGFnZS1yZWxhdGVkIGluZm9ybWF0aW9uLiBVbmRlcnN0YW5kaW5nIHRob3NlIGltcGxlbWVudGF0aW9ucyBpcyBjcnVjaWFsIHRvIGdyYXNwaW5nIHRoZSBvdmVyYWxsIGltcGFjdCBvZiB0aGlzIGJ1ZyBmaXgsIGFuZCBjb25maXJtaW5nIHRoYXQgdGhlIHByb3Bvc2VkIHNvbHV0aW9uIGlzIHNvdW5kLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIGF2b2lkIG1lbW9yeSBsZWFrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ0OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTM6NTg6MTQuMzc2MzYwMzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvcGFnZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtYmxvY2suaFxcdTAwM2VcXG4gICAzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlci5oXFx1MDAzZVxcbiAgIDQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tzbS5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW16b25lLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaHVnZV9tbS5oXFx1MDAzZVxcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb2NfZnMuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXFfZmlsZS5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1yZW1hcC5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbXVfbm90aWZpZXIuaFxcdTAwM2VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlX2lkbGUuaFxcdTAwM2VcXG4gIDE3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwtcGFnZS1mbGFncy5oXFx1MDAzZVxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4gIDE5OlxcdCNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbiAgMjA6XFx0XFxuICAyMTpcXHQjZGVmaW5lIEtQTVNJWkUgc2l6ZW9mKHU2NClcXG4gIDIyOlxcdCNkZWZpbmUgS1BNTUFTSyAoS1BNU0laRSAtIDEpXFxuICAyMzpcXHRcXG4gIDI0OlxcdGVudW0ga3BhZ2Vfb3BlcmF0aW9uIHtcXG4gIDI1OlxcdFxcdEtQQUdFX0ZMQUdTLFxcbiAgMjY6XFx0XFx0S1BBR0VfQ09VTlQsXFxuICAyNzpcXHRcXHRLUEFHRV9DR1JPVVAsXFxuICAyODpcXHR9O1xcbiAgMjk6XFx0XFxuICAzMDpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X21heF9kdW1wX3Bmbih2b2lkKVxcbiAgMzE6XFx0e1xcbiAgMzI6XFx0I2lmZGVmIENPTkZJR19TUEFSU0VNRU1cXG4gIDMzOlxcdFxcdC8qXFxuICAzNDpcXHRcXHQgKiBUaGUgbWVtbWFwIG9mIGVhcmx5IHNlY3Rpb25zIGlzIGNvbXBsZXRlbHkgcG9wdWxhdGVkIGFuZCBtYXJrZWRcXG4gIDM1OlxcdFxcdCAqIG9ubGluZSBldmVuIGlmIG1heF9wZm4gZG9lcyBub3QgZmFsbCBvbiBhIHNlY3Rpb24gYm91bmRhcnkgLVxcbiAgMzY6XFx0XFx0ICogcGZuX3RvX29ubGluZV9wYWdlKCkgd2lsbCBzdWNjZWVkIG9uIGFsbCBwYWdlcy4gQWxsb3cgaW5zcGVjdGluZ1xcbiAgMzc6XFx0XFx0ICogdGhlc2UgbWVtbWFwcy5cXG4gIDM4OlxcdFxcdCAqL1xcbiAgMzk6XFx0XFx0cmV0dXJuIHJvdW5kX3VwKG1heF9wZm4sIFBBR0VTX1BFUl9TRUNUSU9OKTtcXG4gIDQwOlxcdCNlbHNlXFxuICA0MTpcXHRcXHRyZXR1cm4gbWF4X3BmbjtcXG4gIDQyOlxcdCNlbmRpZlxcbiAgNDM6XFx0fVxcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdGF0aWMgdTY0IGdldF9rcGFnZV9jb3VudChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gIDQ2OlxcdHtcXG4gIDQ3OlxcdFxcdHN0cnVjdCBwYWdlX3NuYXBzaG90IHBzO1xcbiAgNDg6XFx0XFx0dTY0IHJldDtcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0c25hcHNob3RfcGFnZShcXHUwMDI2cHMsIHBhZ2UpO1xcbiAgNTE6XFx0XFxuICA1MjpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEFHRV9NQVBDT1VOVCkpXFxuICA1MzpcXHRcXHRcXHRyZXQgPSBmb2xpb19wcmVjaXNlX3BhZ2VfbWFwY291bnQoXFx1MDAyNnBzLmZvbGlvX3NuYXBzaG90LFxcbiAgNTQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2cHMucGFnZV9zbmFwc2hvdCk7XFxuICA1NTpcXHRcXHRlbHNlXFxuICA1NjpcXHRcXHRcXHRyZXQgPSBmb2xpb19hdmVyYWdlX3BhZ2VfbWFwY291bnQoXFx1MDAyNnBzLmZvbGlvX3NuYXBzaG90KTtcXG4gIDU3OlxcdFxcbiAgNTg6XFx0XFx0cmV0dXJuIHJldDtcXG4gIDU5OlxcdH1cXG4gIDYwOlxcdFxcbiAgNjE6XFx0c3RhdGljIHNzaXplX3Qga3BhZ2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG4gIDYyOlxcdFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLFxcbiAgNjM6XFx0XFx0XFx0ZW51bSBrcGFnZV9vcGVyYXRpb24gb3ApXFxuICA2NDpcXHR7XFxuICA2NTpcXHRcXHRjb25zdCB1bnNpZ25lZCBsb25nIG1heF9kdW1wX3BmbiA9IGdldF9tYXhfZHVtcF9wZm4oKTtcXG4gIDY2OlxcdFxcdHU2NCBfX3VzZXIgKm91dCA9ICh1NjQgX191c2VyICopYnVmO1xcbiAgNjc6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuICA2ODpcXHRcXHR1bnNpZ25lZCBsb25nIHNyYyA9ICpwcG9zO1xcbiAgNjk6XFx0XFx0dW5zaWduZWQgbG9uZyBwZm47XFxuICA3MDpcXHRcXHRzc2l6ZV90IHJldCA9IDA7XFxuICA3MTpcXHRcXHR1NjQgaW5mbztcXG4gIDcyOlxcdFxcbiAgNzM6XFx0XFx0cGZuID0gc3JjIC8gS1BNU0laRTtcXG4gIDc0OlxcdFxcdGlmIChzcmMgXFx1MDAyNiBLUE1NQVNLIHx8IGNvdW50IFxcdTAwMjYgS1BNTUFTSylcXG4gIDc1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNzY6XFx0XFx0aWYgKHNyYyBcXHUwMDNlPSBtYXhfZHVtcF9wZm4gKiBLUE1TSVpFKVxcbiAgNzc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICA3ODpcXHRcXHRjb3VudCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGNvdW50LCAobWF4X2R1bXBfcGZuICogS1BNU0laRSkgLSBzcmMpO1xcbiAgNzk6XFx0XFxuICA4MDpcXHRcXHR3aGlsZSAoY291bnQgXFx1MDAzZSAwKSB7XFxuICA4MTpcXHRcXHRcXHQvKlxcbiAgODI6XFx0XFx0XFx0ICogVE9ETzogWk9ORV9ERVZJQ0Ugc3VwcG9ydCByZXF1aXJlcyB0byBpZGVudGlmeVxcbiAgODM6XFx0XFx0XFx0ICogbWVtbWFwcyB0aGF0IHdlcmUgYWN0dWFsbHkgaW5pdGlhbGl6ZWQuXFxuICA4NDpcXHRcXHRcXHQgKi9cXG4gIDg1OlxcdFxcdFxcdHBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcXG4gIDg2OlxcdFxcbiAgODc6XFx0XFx0XFx0aWYgKHBhZ2UpIHtcXG4gIDg4OlxcdFxcdFxcdFxcdHN3aXRjaCAob3ApIHtcXG4gIDg5OlxcdFxcdFxcdFxcdGNhc2UgS1BBR0VfRkxBR1M6XFxuICA5MDpcXHRcXHRcXHRcXHRcXHRpbmZvID0gc3RhYmxlX3BhZ2VfZmxhZ3MocGFnZSk7XFxuICA5MTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gIDkyOlxcdFxcdFxcdFxcdGNhc2UgS1BBR0VfQ09VTlQ6XFxuICA5MzpcXHRcXHRcXHRcXHRcXHRpbmZvID0gZ2V0X2twYWdlX2NvdW50KHBhZ2UpO1xcbiAgOTQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuICA5NTpcXHRcXHRcXHRcXHRjYXNlIEtQQUdFX0NHUk9VUDpcXG4gIDk2OlxcdFxcdFxcdFxcdFxcdGluZm8gPSBwYWdlX2Nncm91cF9pbm8ocGFnZSk7XFxuICA5NzpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gIDk4OlxcdFxcdFxcdFxcdGRlZmF1bHQ6XFxuICA5OTpcXHRcXHRcXHRcXHRcXHRpbmZvID0gMDtcXG4gMTAwOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1ODoxNC4zNzY1NjU2M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTE3NDc5MTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHRoaXMuXG5cbioqQW5hbHl6aW5nIHRoZSBLcGFnZSBSZWFkIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIHNvIGBrcGFnZV9yZWFkYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBoZXJlLCB0aGF0J3MgdGhlIG9uZSBJIG5lZWQgdG8gZm9jdXMgb24gaW5pdGlhbGx5LiBJIHNlZSB0aGF0IGBrcGFnZWNvdW50X3JlYWRgIGFuZCBga3BhZ2VmbGFnc19yZWFkYCBhcmUgYmFzaWNhbGx5IHdyYXBwZXJzIGFyb3VuZCBga3BhZ2VfcmVhZGAuIEludGVyZXN0aW5nLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSBob3cgdGhleSBjYWxsIGBrcGFnZV9yZWFkYCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IHNwZWNpZmljYWxseSBleHRyYWN0IHRoZSBwYWdlIGNvdW50IGFuZCBmbGFncy4gVGhlIGZhY3QgdGhhdCBgc25hcHNob3RfcGFnZWAgc2hvd3MgdXAgaW4gYG1tL2RlYnVnLmNgIGZvciBgX19kdW1wX3BhZ2VgIGlzIGEgdXNlZnVsIGJyZWFkY3J1bWIgZm9yIGxhdGVyIGFuYWx5c2lzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBkaWcgaW50byBga3BhZ2Vjb3VudF9yZWFkYCBhbmQgYGtwYWdlZmxhZ3NfcmVhZGAsIHNwZWNpZmljYWxseSBpbiBgZnMvcHJvYy9wYWdlLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZXRhaWxzIG9mIHRoZXNlIHdyYXBwZXJzIGFuZCBob3BlZnVsbHkgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwga3BhZ2UgcmVhZGluZyBtZWNoYW5pc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNjcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDEzOjU4OjE3Ljg5NDA0NzIzMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL3BhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdFxcdFxcdFxcdH1cXG4gMTAyOlxcdFxcdFxcdH0gZWxzZVxcbiAxMDM6XFx0XFx0XFx0XFx0aW5mbyA9IDA7XFxuIDEwNDpcXHRcXG4gMTA1OlxcdFxcdFxcdGlmIChwdXRfdXNlcihpbmZvLCBvdXQpKSB7XFxuIDEwNjpcXHRcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbiAxMDc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEwODpcXHRcXHRcXHR9XFxuIDEwOTpcXHRcXG4gMTEwOlxcdFxcdFxcdHBmbisrO1xcbiAxMTE6XFx0XFx0XFx0b3V0Kys7XFxuIDExMjpcXHRcXHRcXHRjb3VudCAtPSBLUE1TSVpFO1xcbiAxMTM6XFx0XFxuIDExNDpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gMTE1OlxcdFxcdH1cXG4gMTE2OlxcdFxcbiAxMTc6XFx0XFx0KnBwb3MgKz0gKGNoYXIgX191c2VyICopb3V0IC0gYnVmO1xcbiAxMTg6XFx0XFx0aWYgKCFyZXQpXFxuIDExOTpcXHRcXHRcXHRyZXQgPSAoY2hhciBfX3VzZXIgKilvdXQgLSBidWY7XFxuIDEyMDpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMjE6XFx0fVxcbiAxMjI6XFx0XFxuIDEyMzpcXHQvKiAvcHJvYy9rcGFnZWNvdW50IC0gYW4gYXJyYXkgZXhwb3NpbmcgcGFnZSBtYXBjb3VudHNcXG4gMTI0OlxcdCAqXFxuIDEyNTpcXHQgKiBFYWNoIGVudHJ5IGlzIGEgdTY0IHJlcHJlc2VudGluZyB0aGUgY29ycmVzcG9uZGluZ1xcbiAxMjY6XFx0ICogcGh5c2ljYWwgcGFnZSBtYXBjb3VudC5cXG4gMTI3OlxcdCAqL1xcbiAxMjg6XFx0c3RhdGljIHNzaXplX3Qga3BhZ2Vjb3VudF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbiAxMjk6XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuIDEzMDpcXHR7XFxuIDEzMTpcXHRcXHRyZXR1cm4ga3BhZ2VfcmVhZChmaWxlLCBidWYsIGNvdW50LCBwcG9zLCBLUEFHRV9DT1VOVCk7XFxuIDEzMjpcXHR9XFxuIDEzMzpcXHRcXG4gMTM0OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMga3BhZ2Vjb3VudF9wcm9jX29wcyA9IHtcXG4gMTM1OlxcdFxcdC5wcm9jX2ZsYWdzXFx0PSBQUk9DX0VOVFJZX1BFUk1BTkVOVCxcXG4gMTM2OlxcdFxcdC5wcm9jX2xzZWVrXFx0PSBtZW1fbHNlZWssXFxuIDEzNzpcXHRcXHQucHJvY19yZWFkXFx0PSBrcGFnZWNvdW50X3JlYWQsXFxuIDEzODpcXHR9O1xcbiAxMzk6XFx0XFxuIDE0MDpcXHRcXG4gMTQxOlxcdHN0YXRpYyBpbmxpbmUgdTY0IGtwZl9jb3B5X2JpdCh1NjQga2ZsYWdzLCBpbnQgdWJpdCwgaW50IGtiaXQpXFxuIDE0MjpcXHR7XFxuIDE0MzpcXHRcXHRyZXR1cm4gKChrZmxhZ3MgXFx1MDAzZVxcdTAwM2Uga2JpdCkgXFx1MDAyNiAxKSBcXHUwMDNjXFx1MDAzYyB1Yml0O1xcbiAxNDQ6XFx0fVxcbiAxNDU6XFx0XFxuIDE0NjpcXHR1NjQgc3RhYmxlX3BhZ2VfZmxhZ3MoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIDE0NzpcXHR7XFxuIDE0ODpcXHRcXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiAxNDk6XFx0XFx0c3RydWN0IHBhZ2Vfc25hcHNob3QgcHM7XFxuIDE1MDpcXHRcXHR1bnNpZ25lZCBsb25nIGs7XFxuIDE1MTpcXHRcXHR1bnNpZ25lZCBsb25nIG1hcHBpbmc7XFxuIDE1MjpcXHRcXHRib29sIGlzX2Fub247XFxuIDE1MzpcXHRcXHR1NjQgdSA9IDA7XFxuIDE1NDpcXHRcXG4gMTU1OlxcdFxcdC8qXFxuIDE1NjpcXHRcXHQgKiBwc2V1ZG8gZmxhZzogS1BGX05PUEFHRVxcbiAxNTc6XFx0XFx0ICogaXQgZGlmZmVyZW50aWF0ZXMgYSBtZW1vcnkgaG9sZSBmcm9tIGEgcGFnZSB3aXRoIG5vIGZsYWdzXFxuIDE1ODpcXHRcXHQgKi9cXG4gMTU5OlxcdFxcdGlmICghcGFnZSlcXG4gMTYwOlxcdFxcdFxcdHJldHVybiAxIFxcdTAwM2NcXHUwMDNjIEtQRl9OT1BBR0U7XFxuIDE2MTpcXHRcXG4gMTYyOlxcdFxcdHNuYXBzaG90X3BhZ2UoXFx1MDAyNnBzLCBwYWdlKTtcXG4gMTYzOlxcdFxcdGZvbGlvID0gXFx1MDAyNnBzLmZvbGlvX3NuYXBzaG90O1xcbiAxNjQ6XFx0XFxuIDE2NTpcXHRcXHRrID0gZm9saW8tXFx1MDAzZWZsYWdzLmY7XFxuIDE2NjpcXHRcXHRtYXBwaW5nID0gKHVuc2lnbmVkIGxvbmcpZm9saW8tXFx1MDAzZW1hcHBpbmc7XFxuIDE2NzpcXHRcXHRpc19hbm9uID0gbWFwcGluZyBcXHUwMDI2IEZPTElPX01BUFBJTkdfQU5PTjtcXG4gMTY4OlxcdFxcbiAxNjk6XFx0XFx0LypcXG4gMTcwOlxcdFxcdCAqIHBzZXVkbyBmbGFncyBmb3IgdGhlIHdlbGwga25vd24gKGFub255bW91cykgbWVtb3J5IG1hcHBlZCBwYWdlc1xcbiAxNzE6XFx0XFx0ICovXFxuIDE3MjpcXHRcXHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcXG4gMTczOlxcdFxcdFxcdHUgfD0gMSBcXHUwMDNjXFx1MDAzYyBLUEZfTU1BUDtcXG4gMTc0OlxcdFxcdGlmIChpc19hbm9uKSB7XFxuIDE3NTpcXHRcXHRcXHR1IHw9IDEgXFx1MDAzY1xcdTAwM2MgS1BGX0FOT047XFxuIDE3NjpcXHRcXHRcXHRpZiAoKG1hcHBpbmcgXFx1MDAyNiBGT0xJT19NQVBQSU5HX0ZMQUdTKSA9PSBGT0xJT19NQVBQSU5HX0tTTSlcXG4gMTc3OlxcdFxcdFxcdFxcdHUgfD0gMSBcXHUwMDNjXFx1MDAzYyBLUEZfS1NNO1xcbiAxNzg6XFx0XFx0fVxcbiAxNzk6XFx0XFxuIDE4MDpcXHRcXHQvKlxcbiAxODE6XFx0XFx0ICogY29tcG91bmQgcGFnZXM6IGV4cG9ydCBib3RoIGhlYWQvdGFpbCBpbmZvXFxuIDE4MjpcXHRcXHQgKiB0aGV5IHRvZ2V0aGVyIGRlZmluZSBhIGNvbXBvdW5kIHBhZ2UncyBzdGFydC9lbmQgcG9zIGFuZCBvcmRlclxcbiAxODM6XFx0XFx0ICovXFxuIDE4NDpcXHRcXHRpZiAocHMuaWR4ID09IDApXFxuIDE4NTpcXHRcXHRcXHR1IHw9IGtwZl9jb3B5X2JpdChrLCBLUEZfQ09NUE9VTkRfSEVBRCwgUEdfaGVhZCk7XFxuIDE4NjpcXHRcXHRlbHNlXFxuIDE4NzpcXHRcXHRcXHR1IHw9IDEgXFx1MDAzY1xcdTAwM2MgS1BGX0NPTVBPVU5EX1RBSUw7XFxuIDE4ODpcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4gMTg5OlxcdFxcdFxcdHUgfD0gMSBcXHUwMDNjXFx1MDAzYyBLUEZfSFVHRTtcXG4gMTkwOlxcdFxcdGVsc2UgaWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIDE5MTpcXHRcXHQgICAgICAgICBmb2xpb190ZXN0X2xhcmdlX3JtYXBwYWJsZShmb2xpbykpIHtcXG4gMTkyOlxcdFxcdFxcdC8qIE5vdGU6IHdlIGluZGljYXRlIGFueSBUSFBzIGhlcmUsIG5vdCBqdXN0IFBNRC1zaXplZCBvbmVzICovXFxuIDE5MzpcXHRcXHRcXHR1IHw9IDEgXFx1MDAzY1xcdTAwM2MgS1BGX1RIUDtcXG4gMTk0OlxcdFxcdH0gZWxzZSBpZiAoaXNfaHVnZV96ZXJvX3Bmbihwcy5wZm4pKSB7XFxuIDE5NTpcXHRcXHRcXHR1IHw9IDEgXFx1MDAzY1xcdTAwM2MgS1BGX1pFUk9fUEFHRTtcXG4gMTk2OlxcdFxcdFxcdHUgfD0gMSBcXHUwMDNjXFx1MDAzYyBLUEZfVEhQO1xcbiAxOTc6XFx0XFx0fSBlbHNlIGlmIChpc196ZXJvX3Bmbihwcy5wZm4pKSB7XFxuIDE5ODpcXHRcXHRcXHR1IHw9IDEgXFx1MDAzY1xcdTAwM2MgS1BGX1pFUk9fUEFHRTtcXG4gMTk5OlxcdFxcdH1cXG4gMjAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1ODoxNy44OTQxMzc0OTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI4MTczNzU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBsb29rcyBwcm9taXNpbmcsIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBhIGZ1enppbmcgZWZmb3J0LiBNeSBpbml0aWFsIGFuYWx5c2lzIHNob3dzIHRoYXQgd2Ugc2hvdWxkIGZvY3VzIG91ciBhdHRlbnRpb24gb24gYSBmZXcga2V5IHN5bWJvbHM6IGBzbmFwc2hvdF9wYWdlYCwgYGtwYWdlY291bnRfcmVhZGAsIGBrcGFnZWZsYWdzX3JlYWRgLCBgZ2V0X2twYWdlX2NvdW50YCwgYW5kIGBzdGFibGVfcGFnZV9mbGFnc2AuIFxuXG5XYWl0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGBzbmFwc2hvdF9wYWdlYCBpcyBhbHNvIHVzZWQgaW4gYF9fZHVtcF9wYWdlYCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBhIHBhZ2UgZXJyb3IsIGxpa2Ugd2hlbiBhIGBkdW1wX3BhZ2VgIG9jY3Vycy4gVGhpcyBpcyBpbnRlcmVzdGluZywgYnV0IGBrcGFnZWNvdW50X3JlYWRgIGFuZCBga3BhZ2VmbGFnc19yZWFkYCBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggbWFrZXMgdGhlbSBwcmltZSB0YXJnZXRzLiBgc25hcHNob3RfcGFnZWAgaXRzZWxmIGlzIHN0aWxsIGltcG9ydGFudCwgaG93ZXZlci5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIGlmIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlIG5lZWQuIFllcCwgdGhhdCBsb29rcyByaWdodC4gYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAgZW5hYmxlcyB0aGUgYC9wcm9jL2twYWdlY291bnRgIGFuZCBgL3Byb2Mva3BhZ2VmbGFnc2AgaW50ZXJmYWNlcy4gQWgsIGJ1dCB3YWl0IGFnYWluLCBgc25hcHNob3RfcGFnZWAgbGl2ZXMgaW4gYG1tL3V0aWwuY2AsIHdoaWNoIGlzIGFsd2F5cyBjb21waWxlZC4gSG93ZXZlciwgcmVhY2hpbmcgaXQgZWFzaWx5IGxpa2VseSBkZXBlbmRzIG9uIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgLlxuXG5JIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgYG1tL3V0aWwuY2AgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb25zIGx1cmtpbmcgaW4gdGhlcmUuIE5vcGUsIHNlZW1zIHVuY29uZGl0aW9uYWxseSBjb21waWxlZC5cblxuTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGdsYW5jZSBhdCBgZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuY2Agd2hlcmUgYHNuYXBzaG90X3BhZ2VgIGlzIHVzZWQuIE9oLCBoYW5nIG9uISBJdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSB2YXJpYWJsZSBuYW1lZCBgc25hcHNob3RfcGFnZWAgaW4gdGhlcmUsIGJ1dCBpdCdzIG5vdCB0aGUgZnVuY3Rpb24gd2UncmUgaW50ZXJlc3RlZCBpbi5cblxuT2theSwgc28gdG8gcmVjYXAsIHRoZSBmdW5jdGlvbiBgc25hcHNob3RfcGFnZWAgYXBwZWFycyBvbmx5IGluIGBmcy9wcm9jL3BhZ2UuY2AsIGBtbS9kZWJ1Zy5jYCBhbmQgYG1tL3V0aWwuY2AgYXMgdGhlIHNvdXJjZSBvZiB0aGUgdGFyZ2V0LlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHN5bnRoZXNpemUgdGhpcyBpbmZvcm1hdGlvbi4gVGhpcyBpcyB3aGF0IEkndmUgZ290OlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZVxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBzbmFwc2hvdF9wYWdlYCwgYGtwYWdlY291bnRfcmVhZGAsIGBrcGFnZWZsYWdzX3JlYWRgLCBgZ2V0X2twYWdlX2NvdW50YCwgYHN0YWJsZV9wYWdlX2ZsYWdzYFxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgUFJPQ19QQUdFX01PTklUT1JgXG5cbioqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBmaXhlcyBhIGZsYXcgaW4gYHNuYXBzaG90X3BhZ2VgIHdoZXJlIGl0IG1pc2hhbmRsZWQgZm9saW8gY29waWVzLCBzcGVjaWZpY2FsbHkgdGhvc2Ugd2l0aCBgbnJfcGFnZXMgXHUwMDNlIDFgLiAgVGhpcyBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGAvcHJvYy9rcGFnZWNvdW50YCBhbmQgYC9wcm9jL2twYWdlZmxhZ3NgIGludGVyZmFjZXMsIG1ha2luZyBpdCBhIHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkxOCwiT3V0cHV0VG9rZW5zIjoxNTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1ODoyNy4xNzU5MTc2NDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI4MTUzNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfUEFHRV9NT05JVE9SXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic25hcHNob3RfcGFnZVwiLFxuICAgIFwia3BhZ2Vjb3VudF9yZWFkXCIsXG4gICAgXCJrcGFnZWZsYWdzX3JlYWRcIixcbiAgICBcImdldF9rcGFnZV9jb3VudFwiLFxuICAgIFwic3RhYmxlX3BhZ2VfZmxhZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgc25hcHNob3RfcGFnZWAgd2hlcmUgaXQgaW5jb3JyZWN0bHkgY29waWVkIGBfX3BhZ2VfMmAgZm9yIGZvbGlvcyB3aXRoIGBucl9wYWdlcyBcXHUwMDNlIDFgIGluc3RlYWQgb2YgYG5yX3BhZ2VzIFxcdTAwM2UgMmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYC9wcm9jL2twYWdlY291bnRgIGFuZCBgL3Byb2Mva3BhZ2VmbGFnc2AuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbmFwc2hvdF9wYWdlXCIsXG4gICAgXCJrcGFnZWNvdW50X3JlYWRcIixcbiAgICBcImtwYWdlZmxhZ3NfcmVhZFwiLFxuICAgIFwiZ2V0X2twYWdlX2NvdW50XCIsXG4gICAgXCJzdGFibGVfcGFnZV9mbGFnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBzbmFwc2hvdF9wYWdlYCB3aGVyZSBpdCBpbmNvcnJlY3RseSBjb3BpZWQgYF9fcGFnZV8yYCBmb3IgZm9saW9zIHdpdGggYG5yX3BhZ2VzIFxcdTAwM2UgMWAgaW5zdGVhZCBvZiBgbnJfcGFnZXMgXFx1MDAzZSAyYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgL3Byb2Mva3BhZ2Vjb3VudGAgYW5kIGAvcHJvYy9rcGFnZWZsYWdzYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow24tnr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-09 13:36:19 +0000 UTC FinishedAt: 2026-07-09 13:58:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d880786f897bde33569a2a5d9def53b3416297ad", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_PAGE_MONITOR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "d880786f897bde33569a2a5d9def53b3416297ad", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_PAGE_MONITOR" ], "series_id": "a58b7a75-dcc3-4f18-ad7a-8703b11a15ae" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "snapshot_page", "kpagecount_read", "kpageflags_read", "get_kpage_count", "stable_page_flags" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDEzOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c25hcHNob3RfcGFnZSYjMzQ7LAogICAgJiMzNDtrcGFnZWNvdW50X3JlYWQmIzM0OywKICAgICYjMzQ7a3BhZ2VmbGFnc19yZWFkJiMzNDssCiAgICAmIzM0O2dldF9rcGFnZV9jb3VudCYjMzQ7LAogICAgJiMzNDtzdGFibGVfcGFnZV9mbGFncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgc25hcHNob3RfcGFnZWAgd2hlcmUgaXQgaW5jb3JyZWN0bHkgY29waWVkIGBfX3BhZ2VfMmAgZm9yIGZvbGlvcyB3aXRoIGBucl9wYWdlcyBcdTAwM2UgMWAgaW5zdGVhZCBvZiBgbnJfcGFnZXMgXHUwMDNlIDJgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGAvcHJvYy9rcGFnZWNvdW50YCBhbmQgYC9wcm9jL2twYWdlZmxhZ3NgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDEzOjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzQxMDI2Mjk4YWM0OTBmMTJjYmVkZWVkY2Q1NmI5MDQ2OTI2ZTBhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMTM6NTc6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jXG5pbmRleCBhZjJjMjEwM2YwZDk1Mi4uMzRjYjQzYjNlYWE0YzMgMTAwNjQ0XG4tLS0gYS9tbS91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3V0aWwuY1xuQEAgLTEzNTMsNyAmIzQzOzEzNTMsNyBAQCB2b2lkIHNuYXBzaG90X3BhZ2Uoc3RydWN0IHBhZ2Vfc25hcHNob3QgKnBzLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGlmIChwcy1cdTAwM2VpZHggXHUwMDNjIE1BWF9GT0xJT19OUl9QQUdFUykge1xuIFx0XHRtZW1jcHkoXHUwMDI2cHMtXHUwMDNlZm9saW9fc25hcHNob3QsIGZvbGlvcCwgMiAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpO1xuIFx0XHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKFx1MDAyNnBzLVx1MDAzZWZvbGlvX3NuYXBzaG90KTtcbi1cdFx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxKVxuJiM0MztcdFx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAyKVxuIFx0XHRcdG1lbWNweShcdTAwMjZwcy1cdTAwM2Vmb2xpb19zbmFwc2hvdC5fX3BhZ2VfMiwgXHUwMDI2Zm9saW9wLVx1MDAzZV9fcGFnZV8yLFxuIFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHBhZ2UpKTtcbiBcdFx0c2V0X3BzX2ZsYWdzKHBzLCBmb2xpb3AsIHBhZ2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDEzOjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c25hcHNob3RfcGFnZSYjMzQ7LAogICAgJiMzNDtrcGFnZWNvdW50X3JlYWQmIzM0OywKICAgICYjMzQ7a3BhZ2VmbGFnc19yZWFkJiMzNDssCiAgICAmIzM0O2dldF9rcGFnZV9jb3VudCYjMzQ7LAogICAgJiMzNDtzdGFibGVfcGFnZV9mbGFncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgc25hcHNob3RfcGFnZWAgd2hlcmUgaXQgaW5jb3JyZWN0bHkgY29waWVkIGBfX3BhZ2VfMmAgZm9yIGZvbGlvcyB3aXRoIGBucl9wYWdlcyBcdTAwM2UgMWAgaW5zdGVhZCBvZiBgbnJfcGFnZXMgXHUwMDNlIDJgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGAvcHJvYy9rcGFnZWNvdW50YCBhbmQgYC9wcm9jL2twYWdlZmxhZ3NgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzNDEwMjYyOThhYzQ5MGYxMmNiZWRlZWRjZDU2YjkwNDY5MjZlMGFlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgOSAxMzo1NzoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3V0aWwuYyBiL21tL3V0aWwuYwppbmRleCBhZjJjMjEwM2YwZDk1Mi4uMzRjYjQzYjNlYWE0YzMgMTAwNjQ0Ci0tLSBhL21tL3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS91dGlsLmMKQEAgLTEzNTMsNyAmIzQzOzEzNTMsNyBAQCB2b2lkIHNuYXBzaG90X3BhZ2Uoc3RydWN0IHBhZ2Vfc25hcHNob3QgKnBzLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIAlpZiAocHMtJmd0O2lkeCAmbHQ7IE1BWF9GT0xJT19OUl9QQUdFUykgewogCQltZW1jcHkoJmFtcDtwcy0mZ3Q7Zm9saW9fc25hcHNob3QsIGZvbGlvcCwgMiAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpOwogCQlucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKCZhbXA7cHMtJmd0O2ZvbGlvX3NuYXBzaG90KTsKLQkJaWYgKG5yX3BhZ2VzICZndDsgMSkKJiM0MzsJCWlmIChucl9wYWdlcyAmZ3Q7IDIpCiAJCQltZW1jcHkoJmFtcDtwcy0mZ3Q7Zm9saW9fc25hcHNob3QuX19wYWdlXzIsICZhbXA7Zm9saW9wLSZndDtfX3BhZ2VfMiwKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IHBhZ2UpKTsKIAkJc2V0X3BzX2ZsYWdzKHBzLCBmb2xpb3AsIHBhZ2UpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vdXRpbC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc25hcHNob3RfcGFnZWAgZnVuY3Rpb24uIFRoZSBjb2RlJiMzOTtzIGJlZW4gY2hhbmdlZCwgYW5kIGl0IHNlZW1zIGxpa2UgYSBzdWJ0bGUsIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwsIG1vZGlmaWNhdGlvbiB0byBob3cgcGFnZSBzbmFwc2hvdHMgYXJlIGhhbmRsZWQuIFRoZSBvcmlnaW5hbCBjb25kaXRpb24gd2FzIGBpZiAobnJfcGFnZXMgJmd0OyAxKWAsIGFuZCBub3cgaXQmIzM5O3MgYGlmIChucl9wYWdlcyAmZ3Q7IDIpYC4gIFRoYXQgYG1lbWNweWAgY2FsbCwgY29weWluZyBgc3RydWN0IHBhZ2VgIGRhdGEsIG9ubHkgZXhlY3V0ZXMgd2hlbiB0aGUgcGFnZSBjb3VudCBpcyAqZ3JlYXRlciogdGhhbiB0d28gbm93LiBIbW0sIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBhcyBpdCBkaXJlY3RseSBhbHRlcnMgdGhlIGJlaGF2aW9yIG9mIGBzbmFwc2hvdF9wYWdlYC4gSSBuZWVkIHRvIGRpZyBpbnRvIGBtbS91dGlsLmNgIGFuZCByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZGl0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGRpZmZlcmVudCBhYm91dCBoYW5kbGluZyB0d28gcGFnZXMgdmVyc3VzIHRocmVlIG9yIG1vcmUsIGFuZCB3aGF0IHNjZW5hcmlvcyB0cmlnZ2VyIHRoaXMgZnVuY3Rpb24uIExldCYjMzk7cyBnZXQgdG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBhbmFseXplLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NuYXBzaG90X3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS91dGlsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdXRpbC5jPTEyODU9c3RhdGljIHZvaWQgc2V0X3BzX2ZsYWdzKHN0cnVjdCBwYWdlX3NuYXBzaG90ICpwcywgY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS91dGlsLmMtMTMwMi0vKipcbm1tL3V0aWwuYzoxMzAzOiAqIHNuYXBzaG90X3BhZ2UoKSAtIENyZWF0ZSBhIHNuYXBzaG90IG9mIGEgc3RydWN0IHBhZ2Vcbm1tL3V0aWwuYy0xMzA0LSAqIEBwczogUG9pbnRlciB0byBhIHN0cnVjdCBwYWdlX3NuYXBzaG90IHRvIHN0b3JlIHRoZSBwYWdlIHNuYXBzaG90XG4tLVxubW0vdXRpbC5jLTEzMTItICogcmFyZSBjYXNlcyB3aGVyZSB0aGlzIGlzIG5vdCBwb3NzaWJsZSAoZS5nLiBkdWUgdG8gZm9saW8gc3BsaXR0aW5nKSxcbm1tL3V0aWwuYzoxMzEzOiAqIHNuYXBzaG90X3BhZ2UoKSBmYWxscyBiYWNrIHRvIHRyZWF0aW5nIEBwYWdlIGFzIGEgc2luZ2xlIHBhZ2UgYW5kIHRoZVxubW0vdXRpbC5jOjEzMTQ6ICogc25hcHNob3QgaXMgbWFya2VkIGFzIFwmIzM0O3VuZmFpdGhmdWxcJiMzNDsuIFRoZSBzbmFwc2hvdF9wYWdlX2lzX2ZhaXRoZnVsKClcbm1tL3V0aWwuYy0xMzE1LSAqIGhlbHBlciBjYW4gYmUgdXNlZCB0byBjaGVjayBmb3IgdGhpcyBjb25kaXRpb24uXG5tbS91dGlsLmMtMTMxNi0gKi9cbm1tL3V0aWwuYzoxMzE3OnZvaWQgc25hcHNob3RfcGFnZShzdHJ1Y3QgcGFnZV9zbmFwc2hvdCAqcHMsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxubW0vdXRpbC5jLTEzMTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDEzOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODgKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipUcmFjaW5nIHRoZSBVc2FnZSBvZiBgc25hcHNob3RfcGFnZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhpcyBgc25hcHNob3RfcGFnZWAgZnVuY3Rpb24uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGZvbGxvdyB0aGUgdXNhZ2UuIFdoZXJlIGlzIHRoaXMgdGhpbmcgYWN0dWFsbHkgKmJlaW5nKiBjYWxsZWQ/IEtub3dpbmcgdGhhdCBpcyB0aGUgYmVkcm9jayBvZiB1bmRlcnN0YW5kaW5nIGl0cyByb2xlLiBGcm9tIHRoZXJlLCBJIGNhbiBzdGFydCB0byBpbmZlciBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIElzIGl0IGEgY29yZSB1dGlsaXR5LCBhIG5pY2hlIGhlbHBlciwgb3Igc29tZXRoaW5nIGluIGJldHdlZW4/IEl0cyBwbGFjZSBpbiB0aGUgY29kZWJhc2Ugd2lsbCB0ZWxsIHRoZSB0YWxlLiBMZXQmIzM5O3Mgc2VlLi4uIHRpbWUgdG8gc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSBjYWxsIHNpdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDEzOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NuYXBzaG90X3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYz02NzE9c3RhdGljIGludCBwbXVfc2JpX3NuYXBzaG90X2FsbG9jKHN0cnVjdCByaXNjdl9wbXUgKnBtdSlcbi0tXG5kcml2ZXJzL3BlcmYvcmlzY3ZfcG11X3NiaS5jLTY3My1cdGludCBjcHU7XG5kcml2ZXJzL3BlcmYvcmlzY3ZfcG11X3NiaS5jOjY3NDpcdHN0cnVjdCBwYWdlICpzbmFwc2hvdF9wYWdlO1xuZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYy02NzUtXG4tLVxuZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYy02NzgtXG5kcml2ZXJzL3BlcmYvcmlzY3ZfcG11X3NiaS5jOjY3OTpcdFx0c25hcHNob3RfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0FUT01JQyB8IF9fR0ZQX1pFUk8pO1xuZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYzo2ODA6XHRcdGlmICghc25hcHNob3RfcGFnZSkge1xuZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYy02ODEtXHRcdFx0cG11X3NiaV9zbmFwc2hvdF9mcmVlKHBtdSk7XG4tLVxuZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYy02ODMtXHRcdH1cbmRyaXZlcnMvcGVyZi9yaXNjdl9wbXVfc2JpLmM6Njg0Olx0XHRjcHVfaHdfZXZ0LVx1MDAzZXNuYXBzaG90X2FkZHIgPSBwYWdlX3RvX3ZpcnQoc25hcHNob3RfcGFnZSk7XG5kcml2ZXJzL3BlcmYvcmlzY3ZfcG11X3NiaS5jOjY4NTpcdFx0Y3B1X2h3X2V2dC1cdTAwM2VzbmFwc2hvdF9hZGRyX3BoeXMgPSBwYWdlX3RvX3BoeXMoc25hcHNob3RfcGFnZSk7XG5kcml2ZXJzL3BlcmYvcmlzY3ZfcG11X3NiaS5jLTY4Ni1cdH1cbi0tXG5mcy9wcm9jL3BhZ2UuYz00NT1zdGF0aWMgdTY0IGdldF9rcGFnZV9jb3VudChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5mcy9wcm9jL3BhZ2UuYy00OS1cbmZzL3Byb2MvcGFnZS5jOjUwOlx0c25hcHNob3RfcGFnZShcdTAwMjZwcywgcGFnZSk7XG5mcy9wcm9jL3BhZ2UuYy01MS1cbi0tXG5mcy9wcm9jL3BhZ2UuYz0xNDY9dTY0IHN0YWJsZV9wYWdlX2ZsYWdzKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbmZzL3Byb2MvcGFnZS5jLTE2MS1cbmZzL3Byb2MvcGFnZS5jOjE2MjpcdHNuYXBzaG90X3BhZ2UoXHUwMDI2cHMsIHBhZ2UpO1xuZnMvcHJvYy9wYWdlLmMtMTYzLVx0Zm9saW8gPSBcdTAwMjZwcy5mb2xpb19zbmFwc2hvdDtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9NTI1Nz1zdHJ1Y3QgcGFnZV9zbmFwc2hvdCB7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTUyNjQtXG5pbmNsdWRlL2xpbnV4L21tLmg6NTI2NTpzdGF0aWMgaW5saW5lIGJvb2wgc25hcHNob3RfcGFnZV9pc19mYWl0aGZ1bChjb25zdCBzdHJ1Y3QgcGFnZV9zbmFwc2hvdCAqcHMpXG5pbmNsdWRlL2xpbnV4L21tLmgtNTI2Ni17XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTUyNjktXG5pbmNsdWRlL2xpbnV4L21tLmg6NTI3MDp2b2lkIHNuYXBzaG90X3BhZ2Uoc3RydWN0IHBhZ2Vfc25hcHNob3QgKnBzLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5pbmNsdWRlL2xpbnV4L21tLmgtNTI3MS1cbi0tXG5tbS9kZWJ1Zy5jPTEzMD1zdGF0aWMgdm9pZCBfX2R1bXBfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9kZWJ1Zy5jLTEzMy1cbm1tL2RlYnVnLmM6MTM0Olx0c25hcHNob3RfcGFnZShcdTAwMjZwcywgcGFnZSk7XG5tbS9kZWJ1Zy5jOjEzNTpcdGlmICghc25hcHNob3RfcGFnZV9pc19mYWl0aGZ1bChcdTAwMjZwcykpXG5tbS9kZWJ1Zy5jLTEzNi1cdFx0cHJfd2FybihcJiMzNDtwYWdlIGRvZXMgbm90IG1hdGNoIGZvbGlvXFxuXCYjMzQ7KTtcbi0tXG5tbS91dGlsLmM9MTI4NT1zdGF0aWMgdm9pZCBzZXRfcHNfZmxhZ3Moc3RydWN0IHBhZ2Vfc25hcHNob3QgKnBzLCBjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3V0aWwuYy0xMzAyLS8qKlxubW0vdXRpbC5jOjEzMDM6ICogc25hcHNob3RfcGFnZSgpIC0gQ3JlYXRlIGEgc25hcHNob3Qgb2YgYSBzdHJ1Y3QgcGFnZVxubW0vdXRpbC5jLTEzMDQtICogQHBzOiBQb2ludGVyIHRvIGEgc3RydWN0IHBhZ2Vfc25hcHNob3QgdG8gc3RvcmUgdGhlIHBhZ2Ugc25hcHNob3Rcbi0tXG5tbS91dGlsLmMtMTMxMi0gKiByYXJlIGNhc2VzIHdoZXJlIHRoaXMgaXMgbm90IHBvc3NpYmxlIChlLmcuIGR1ZSB0byBmb2xpbyBzcGxpdHRpbmcpLFxubW0vdXRpbC5jOjEzMTM6ICogc25hcHNob3RfcGFnZSgpIGZhbGxzIGJhY2sgdG8gdHJlYXRpbmcgQHBhZ2UgYXMgYSBzaW5nbGUgcGFnZSBhbmQgdGhlXG5tbS91dGlsLmM6MTMxNDogKiBzbmFwc2hvdCBpcyBtYXJrZWQgYXMgXCYjMzQ7dW5mYWl0aGZ1bFwmIzM0Oy4gVGhlIHNuYXBzaG90X3BhZ2VfaXNfZmFpdGhmdWwoKVxubW0vdXRpbC5jLTEzMTUtICogaGVscGVyIGNhbiBiZSB1c2VkIHRvIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbi5cbm1tL3V0aWwuYy0xMzE2LSAqL1xubW0vdXRpbC5jOjEzMTc6dm9pZCBzbmFwc2hvdF9wYWdlKHN0cnVjdCBwYWdlX3NuYXBzaG90ICpwcywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG5tbS91dGlsLmMtMTMxOC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcyOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgc25hcHNob3RfcGFnZWAgVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzbmFwc2hvdF9wYWdlYCwgYW5kIGl0IHNlZW1zIHRvIGJlIHF1aXRlIGEgY3JpdGljYWwgZnVuY3Rpb24sIHBvcHBpbmcgdXAgaW4gYSBmZXcga2V5IGFyZWFzLiBJIHNlZSBpdCYjMzk7cyB1c2VkIHdpdGhpbiBgZnMvcHJvYy9wYWdlLmNgLCBzcGVjaWZpY2FsbHkgZm9yIGBnZXRfa3BhZ2VfY291bnRgIGFuZCBgc3RhYmxlX3BhZ2VfZmxhZ3NgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhcyBpdCBpbmRpY2F0ZXMgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIHJvbGUgaW4gdHJhY2tpbmcgYW5kIHJlcG9ydGluZyBwYWdlIHVzYWdlIHdpdGhpbiB0aGUgcHJvYyBmaWxlc3lzdGVtLCB3aGljaCBpcyBvZnRlbiBjcnVjaWFsIGZvciBzeXN0ZW0gbW9uaXRvcmluZyBhbmQgZGVidWdnaW5nLiBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBoeXBvdGhlc2VzIGFib3V0IGl0cyByb2xlIGluIHRob3NlIHNwZWNpZmljIGNvbnRleHRzIC0gcGVyaGFwcyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBwcm92aWRpbmcgYWNjdXJhdGUgcGFnZSBjb3VudCBpbmZvcm1hdGlvbiwgb3IgZW5zdXJpbmcgdGhlIHN0YWJpbGl0eSBvZiBjZXJ0YWluIHBhZ2UgZmxhZ3MgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbi4KClRoZW4gdGhlcmUmIzM5O3MgaXRzIHVzZSBpbiBgbW0vZGVidWcuY2AgYXMgcGFydCBvZiBgX19kdW1wX3BhZ2VgLiBUaGF0JiMzOTtzIGFub3RoZXIgdml0YWwgY2x1ZS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGBzbmFwc2hvdF9wYWdlYCBpcyBlc3NlbnRpYWwgdG8gdGhlIGxvdyBsZXZlbCBtZW1vcnkgZGVidWdnaW5nLCBhbmQgbGlrZWx5IGludm9sdmVkIGluIGNhcHR1cmluZyBhIHBvaW50LWluLXRpbWUgJiMzNDtzbmFwc2hvdCYjMzQ7IG9mIGEgcGFnZSYjMzk7cyBzdGF0ZSwgdXNlZCB0byBhbmFseXplIGEgcGFnZS4KCkkmIzM5O2xsIHN0YXJ0IGJ5IGZvY3VzaW5nIG15IGF0dGVudGlvbiBvbiB0aG9zZSBgZnMvcHJvYy9wYWdlLmNgIHVzYWdlcywgYW5kIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYGdldF9rcGFnZV9jb3VudGAgYW5kIGBzdGFibGVfcGFnZV9mbGFnc2AgaW1wbGVtZW50YXRpb25zIHRvIGdldCBhIGNsZWFyZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGBzbmFwc2hvdF9wYWdlYCBpcyBkb2luZyBhdCBpdHMgY29yZS4gSSB3YW50IHRvIGJ1aWxkIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGhvdyBpdCYjMzk7cyB1c2VkIGluIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfa3BhZ2VfY291bnR8c3RhYmxlX3BhZ2VfZmxhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL3BhZ2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL3BhZ2UuYz0zMD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X21heF9kdW1wX3Bmbih2b2lkKVxuLS1cbmZzL3Byb2MvcGFnZS5jLTQ0LVxuZnMvcHJvYy9wYWdlLmM6NDU6c3RhdGljIHU2NCBnZXRfa3BhZ2VfY291bnQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG5mcy9wcm9jL3BhZ2UuYy00Ni17XG4tLVxuZnMvcHJvYy9wYWdlLmM9NjE9c3RhdGljIHNzaXplX3Qga3BhZ2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5mcy9wcm9jL3BhZ2UuYy04OS1cdFx0XHRjYXNlIEtQQUdFX0ZMQUdTOlxuZnMvcHJvYy9wYWdlLmM6OTA6XHRcdFx0XHRpbmZvID0gc3RhYmxlX3BhZ2VfZmxhZ3MocGFnZSk7XG5mcy9wcm9jL3BhZ2UuYy05MS1cdFx0XHRcdGJyZWFrO1xuZnMvcHJvYy9wYWdlLmMtOTItXHRcdFx0Y2FzZSBLUEFHRV9DT1VOVDpcbmZzL3Byb2MvcGFnZS5jOjkzOlx0XHRcdFx0aW5mbyA9IGdldF9rcGFnZV9jb3VudChwYWdlKTtcbmZzL3Byb2MvcGFnZS5jLTk0LVx0XHRcdFx0YnJlYWs7XG4tLVxuZnMvcHJvYy9wYWdlLmM9MTQxPXN0YXRpYyBpbmxpbmUgdTY0IGtwZl9jb3B5X2JpdCh1NjQga2ZsYWdzLCBpbnQgdWJpdCwgaW50IGtiaXQpXG4tLVxuZnMvcHJvYy9wYWdlLmMtMTQ1LVxuZnMvcHJvYy9wYWdlLmM6MTQ2OnU2NCBzdGFibGVfcGFnZV9mbGFncyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbmZzL3Byb2MvcGFnZS5jLTE0Ny17XG4tLVxuZnMvcHJvYy9wYWdlLmMtMjU3LX1cbmZzL3Byb2MvcGFnZS5jOjI1ODpFWFBPUlRfU1lNQk9MX0dQTChzdGFibGVfcGFnZV9mbGFncyk7XG5mcy9wcm9jL3BhZ2UuYy0yNTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU1NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqS2VybmVsIFBhZ2UgSW5mb3JtYXRpb24gSGFuZGxpbmcgLSBGdW5jdGlvbmFsIENoYW5nZSBBbGVydCEqKgoKQWxyaWdodCwgc28gdGhlIGZvY3VzIGhlcmUgaXMgZGVmaW5pdGVseSBvbiBgL3Byb2Mva3BhZ2Vjb3VudGAgYW5kIGAvcHJvYy9rcGFnZWZsYWdzYCDigJMgdGhvc2UgY3J1Y2lhbCBpbnRlcmZhY2VzIGZvciBwcm9iaW5nIHBhZ2UgbWV0YWRhdGEgd2l0aGluIHRoZSBrZXJuZWwuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgY2hhbmdlIHJlc2lkZXMgaW4gYG1tL3V0aWwuY2AsIHNwZWNpZmljYWxseSB0aGUgYHNuYXBzaG90X3BhZ2VgIGZ1bmN0aW9uLiBHaXZlbiB0aGF0IHRoaXMgaXMgYSAqZnVuY3Rpb25hbCogbW9kaWZpY2F0aW9uLCBteSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgY29uY2VybiBiYWxhbmNlZCB3aXRoIGN1cmlvc2l0eS4gQW55IGNoYW5nZSB0byB0aGVzZSBhcmVhcyByZXF1aXJlcyBpbnRlbnNlIHNjcnV0aW55OyB0aGUgd2F5IHRoZXNlIGludGVyZmFjZXMgYmVoYXZlIGNhbiBzaWduaWZpY2FudGx5IGltcGFjdCBkZWJ1Z2dpbmcsIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBhbmQgZXZlbiBzZWN1cml0eSBwb3N0dXJlLCBkZXBlbmRpbmcgb24gaG93IHRoZXkmIzM5O3JlIHVzZWQuCgpTaW5jZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgb2YgaG93IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcGFnZSBpbmZvcm1hdGlvbiwgZnV6emluZyBiZWNvbWVzIGEgdG9wIHByaW9yaXR5LiBXZSBuZWVkIHRvIHN1YmplY3QgdGhpcyBjb2RlIHRvIHJpZ29yb3VzIHRlc3RpbmcgdG8gdW5jb3ZlciBhbnkgZWRnZSBjYXNlcywgdW5leHBlY3RlZCBiZWhhdmlvciwgb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGF0IHRoZXNlIGludGVyZmFjZXMgYXJlIGFjY2Vzc2libGUgdG8gdXNlcnNwYWNlLiBBIHJvYnVzdCBmdXp6aW5nIGNhbXBhaWduIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIGJlZm9yZSB0aGlzIHNlZXMgYW55IHByb2R1Y3Rpb24uCgpBbmQsIG9mIGNvdXJzZSwgYSBxdWljayBjaGVjayBvZiB0aGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBpcyBuZWNlc3NhcnkuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAgaXMgKmluZGVlZCogd2hhdCBlbmFibGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRoYXQgdGllcyBpbnRvIHRoZXNlIGludGVyZmFjZXMuIFZlcmlmaWNhdGlvbiBpcyBrZXkuIE5vIGFzc3VtcHRpb25zLCBubyBzaG9ydGN1dHMuIFRoYXQgY29uZmlndXJhdGlvbiBpcyBvdXIgb24tb2ZmIHN3aXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3BhZ2Vjb3VudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvS2NvbmZpZz0xMDI9Y29uZmlnIFBST0NfUEFHRV9NT05JVE9SXG4tLVxuZnMvcHJvYy9LY29uZmlnLTEwOC1cdCAgL3Byb2MvcGlkL3NtYXBzLCAvcHJvYy9waWQvY2xlYXJfcmVmcywgL3Byb2MvcGlkL3BhZ2VtYXAsXG5mcy9wcm9jL0tjb25maWc6MTA5Olx0ICAvcHJvYy9rcGFnZWNvdW50LCBhbmQgL3Byb2Mva3BhZ2VmbGFncy4gRGlzYWJsaW5nIHRoZXNlXG5mcy9wcm9jL0tjb25maWctMTEwLVx0ICBpbnRlcmZhY2VzIHdpbGwgcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBrZXJuZWwgYnkgYXBwcm94aW1hdGVseSA0a2IuXG4tLVxuZnMvcHJvYy9pbnRlcm5hbC5oPTE1OD11bnNpZ25lZCBuYW1lX3RvX2ludChjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cik7XG4tLVxuZnMvcHJvYy9pbnRlcm5hbC5oLTE3Ny0gKiBVc2UgdGhpcyBmdW5jdGlvbiBvbmx5IGZvciB0aGUgY2FsY3VsYXRpb24gb2YgZXhpc3Rpbmcgc3RhdGlzdGljc1xuZnMvcHJvYy9pbnRlcm5hbC5oOjE3ODogKiAoVVNTLCBQU1MsIG1hcGNvdW50X21heCkgYW5kIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgKC9wcm9jL2twYWdlY291bnQpLlxuZnMvcHJvYy9pbnRlcm5hbC5oLTE3OS0gKlxuLS1cbmZzL3Byb2MvcGFnZS5jPTYxPXN0YXRpYyBzc2l6ZV90IGtwYWdlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4tLVxuZnMvcHJvYy9wYWdlLmMtMTIyLVxuZnMvcHJvYy9wYWdlLmM6MTIzOi8qIC9wcm9jL2twYWdlY291bnQgLSBhbiBhcnJheSBleHBvc2luZyBwYWdlIG1hcGNvdW50c1xuZnMvcHJvYy9wYWdlLmMtMTI0LSAqXG4tLVxuZnMvcHJvYy9wYWdlLmMtMTI3LSAqL1xuZnMvcHJvYy9wYWdlLmM6MTI4OnN0YXRpYyBzc2l6ZV90IGtwYWdlY291bnRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbmZzL3Byb2MvcGFnZS5jLTEyOS1cdFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvcHJvYy9wYWdlLmMtMTMzLVxuZnMvcHJvYy9wYWdlLmM6MTM0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMga3BhZ2Vjb3VudF9wcm9jX29wcyA9IHtcbmZzL3Byb2MvcGFnZS5jLTEzNS1cdC5wcm9jX2ZsYWdzXHQ9IFBST0NfRU5UUllfUEVSTUFORU5ULFxuZnMvcHJvYy9wYWdlLmMtMTM2LVx0LnByb2NfbHNlZWtcdD0gbWVtX2xzZWVrLFxuZnMvcHJvYy9wYWdlLmM6MTM3Olx0LnByb2NfcmVhZFx0PSBrcGFnZWNvdW50X3JlYWQsXG5mcy9wcm9jL3BhZ2UuYy0xMzgtfTtcbi0tXG5mcy9wcm9jL3BhZ2UuYz0yOTA9c3RhdGljIGludCBfX2luaXQgcHJvY19wYWdlX2luaXQodm9pZClcbmZzL3Byb2MvcGFnZS5jLTI5MS17XG5mcy9wcm9jL3BhZ2UuYzoyOTI6XHRwcm9jX2NyZWF0ZShcJiMzNDtrcGFnZWNvdW50XCYjMzQ7LCBTX0lSVVNSLCBOVUxMLCBcdTAwMjZrcGFnZWNvdW50X3Byb2Nfb3BzKTtcbmZzL3Byb2MvcGFnZS5jLTI5My1cdHByb2NfY3JlYXRlKFwmIzM0O2twYWdlZmxhZ3NcJiMzNDssIFNfSVJVU1IsIE5VTEwsIFx1MDAyNmtwYWdlZmxhZ3NfcHJvY19vcHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjEyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50ICZhbXA7IEtleSBGdW5jdGlvbiBTZWxlY3Rpb24qKgoKT2theSwgc28gSSYjMzk7dmUgemVyb2VkIGluIG9uIHRoZSBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBjb25maWcg4oCTIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGZ1bmN0aW9ucyBsaWtlIGBzbmFwc2hvdF9wYWdlYCwgYGdldF9rcGFnZV9jb3VudGAsIGBzdGFibGVfcGFnZV9mbGFnc2AsIGBrcGFnZWNvdW50X3JlYWRgLCBhbmQgYGtwYWdlZmxhZ3NfcmVhZGAuIFdhaXQsIGhvbGQgb24uLi4gYGtwYWdlY291bnRfcmVhZGAgYW5kIGBrcGFnZWZsYWdzX3JlYWRgIGxvb2sgbGlrZSBtb3JlIHByb21pc2luZyBlbnRyeSBwb2ludHMgdG8gc3RhcnQgd2l0aCwgZ2l2ZW4gdGhlaXIgbmFtZXMuIExldCYjMzk7cyBzZWUgaG93IHRob3NlIGFyZSBpbXBsZW1lbnRlZCBhbmQgd2hhdCB0aGV5IGRvLgpQZXJoYXBzIEkmIzM5O2xsIGhhdmUgYSBsb29rIGF0IGBzbmFwc2hvdF9wYWdlYCBpbiBgbW0vdXRpbC5jYCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3V0aWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMDA6XHR9XG4xMzAxOlx0XG4xMzAyOlx0LyoqXG4xMzAzOlx0ICogc25hcHNob3RfcGFnZSgpIC0gQ3JlYXRlIGEgc25hcHNob3Qgb2YgYSBzdHJ1Y3QgcGFnZVxuMTMwNDpcdCAqIEBwczogUG9pbnRlciB0byBhIHN0cnVjdCBwYWdlX3NuYXBzaG90IHRvIHN0b3JlIHRoZSBwYWdlIHNuYXBzaG90XG4xMzA1Olx0ICogQHBhZ2U6IFRoZSBwYWdlIHRvIHNuYXBzaG90XG4xMzA2Olx0ICpcbjEzMDc6XHQgKiBDcmVhdGUgYSBzbmFwc2hvdCBvZiB0aGUgcGFnZSBhbmQgc3RvcmUgYm90aCBpdHMgc3RydWN0IHBhZ2UgYW5kIHN0cnVjdFxuMTMwODpcdCAqIGZvbGlvIHJlcHJlc2VudGF0aW9ucyBpbiBAcHMuXG4xMzA5Olx0ICpcbjEzMTA6XHQgKiBBIHNuYXBzaG90IGlzIG1hcmtlZCBhcyBcJiMzNDtmYWl0aGZ1bFwmIzM0OyBpZiB0aGUgY29tcG91bmQgc3RhdGUgb2YgQHBhZ2Ugd2FzXG4xMzExOlx0ICogc3RhYmxlIGFuZCBhbGxvd2VkIHNhZmUgcmVjb25zdHJ1Y3Rpb24gb2YgdGhlIGZvbGlvIHJlcHJlc2VudGF0aW9uLiBJblxuMTMxMjpcdCAqIHJhcmUgY2FzZXMgd2hlcmUgdGhpcyBpcyBub3QgcG9zc2libGUgKGUuZy4gZHVlIHRvIGZvbGlvIHNwbGl0dGluZyksXG4xMzEzOlx0ICogc25hcHNob3RfcGFnZSgpIGZhbGxzIGJhY2sgdG8gdHJlYXRpbmcgQHBhZ2UgYXMgYSBzaW5nbGUgcGFnZSBhbmQgdGhlXG4xMzE0Olx0ICogc25hcHNob3QgaXMgbWFya2VkIGFzIFwmIzM0O3VuZmFpdGhmdWxcJiMzNDsuIFRoZSBzbmFwc2hvdF9wYWdlX2lzX2ZhaXRoZnVsKClcbjEzMTU6XHQgKiBoZWxwZXIgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLlxuMTMxNjpcdCAqL1xuMTMxNzpcdHZvaWQgc25hcHNob3RfcGFnZShzdHJ1Y3QgcGFnZV9zbmFwc2hvdCAqcHMsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxuMTMxODpcdHtcbjEzMTk6XHRcdHVuc2lnbmVkIGxvbmcgaW5mbywgbnJfcGFnZXMgPSAxO1xuMTMyMDpcdFx0c3RydWN0IGZvbGlvICpmb2xpb3A7XG4xMzIxOlx0XHRpbnQgbG9vcHMgPSA1O1xuMTMyMjpcdFxuMTMyMzpcdFx0cHMtXHUwMDNlcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG4xMzI0Olx0XHRwcy1cdTAwM2VmbGFncyA9IFBBR0VfU05BUFNIT1RfRkFJVEhGVUw7XG4xMzI1Olx0XG4xMzI2Olx0YWdhaW46XG4xMzI3Olx0XHRtZW1zZXQoXHUwMDI2cHMtXHUwMDNlZm9saW9fc25hcHNob3QsIDAsIHNpemVvZihzdHJ1Y3QgZm9saW8pKTtcbjEzMjg6XHRcdG1lbWNweShcdTAwMjZwcy1cdTAwM2VwYWdlX3NuYXBzaG90LCBwYWdlLCBzaXplb2YoKnBhZ2UpKTtcbjEzMjk6XHRcdGluZm8gPSBwcy1cdTAwM2VwYWdlX3NuYXBzaG90LmNvbXBvdW5kX2luZm87XG4xMzMwOlx0XHRpZiAoIShpbmZvIFx1MDAyNiAxKSkge1xuMTMzMTpcdFx0XHRwcy1cdTAwM2VpZHggPSAwO1xuMTMzMjpcdFx0XHRmb2xpb3AgPSAoc3RydWN0IGZvbGlvICopXHUwMDI2cHMtXHUwMDNlcGFnZV9zbmFwc2hvdDtcbjEzMzM6XHRcdFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvcCkpIHtcbjEzMzQ6XHRcdFx0XHRzZXRfcHNfZmxhZ3MocHMsIHBhZ2VfZm9saW8ocGFnZSksIHBhZ2UpO1xuMTMzNTpcdFx0XHRcdG1lbWNweShcdTAwMjZwcy1cdTAwM2Vmb2xpb19zbmFwc2hvdCwgZm9saW9wLFxuMTMzNjpcdFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHBhZ2UpKTtcbjEzMzc6XHRcdFx0XHRyZXR1cm47XG4xMzM4Olx0XHRcdH1cbjEzMzk6XHRcdFx0Zm9saW9wID0gKHN0cnVjdCBmb2xpbyAqKXBhZ2U7XG4xMzQwOlx0XHR9IGVsc2Uge1xuMTM0MTpcdFx0XHQvKiBTZWUgY29tcG91bmRfaGVhZCgpICovXG4xMzQyOlx0XHRcdGlmIChjb21wb3VuZF9pbmZvX2hhc19tYXNrKCkpIHtcbjEzNDM6XHRcdFx0XHR1bnNpZ25lZCBsb25nIHAgPSAodW5zaWduZWQgbG9uZylwYWdlO1xuMTM0NDpcdFxuMTM0NTpcdFx0XHRcdGZvbGlvcCA9IChzdHJ1Y3QgZm9saW8gKikocCBcdTAwMjYgaW5mbyk7XG4xMzQ2Olx0XHRcdH0gZWxzZSB7XG4xMzQ3Olx0XHRcdFx0Zm9saW9wID0gKHN0cnVjdCBmb2xpbyAqKShpbmZvIC0gMSk7XG4xMzQ4Olx0XHRcdH1cbjEzNDk6XHRcbjEzNTA6XHRcdFx0cHMtXHUwMDNlaWR4ID0gZm9saW9fcGFnZV9pZHgoZm9saW9wLCBwYWdlKTtcbjEzNTE6XHRcdH1cbjEzNTI6XHRcbjEzNTM6XHRcdGlmIChwcy1cdTAwM2VpZHggXHUwMDNjIE1BWF9GT0xJT19OUl9QQUdFUykge1xuMTM1NDpcdFx0XHRtZW1jcHkoXHUwMDI2cHMtXHUwMDNlZm9saW9fc25hcHNob3QsIGZvbGlvcCwgMiAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpO1xuMTM1NTpcdFx0XHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKFx1MDAyNnBzLVx1MDAzZWZvbGlvX3NuYXBzaG90KTtcbjEzNTY6XHRcdFx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAyKVxuMTM1NzpcdFx0XHRcdG1lbWNweShcdTAwMjZwcy1cdTAwM2Vmb2xpb19zbmFwc2hvdC5fX3BhZ2VfMiwgXHUwMDI2Zm9saW9wLVx1MDAzZV9fcGFnZV8yLFxuMTM1ODpcdFx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHBhZ2UpKTtcbjEzNTk6XHRcdFx0c2V0X3BzX2ZsYWdzKHBzLCBmb2xpb3AsIHBhZ2UpO1xuMTM2MDpcdFx0fVxuMTM2MTpcdFxuMTM2MjpcdFx0aWYgKHBzLVx1MDAzZWlkeCBcdTAwM2UgbnJfcGFnZXMpIHtcbjEzNjM6XHRcdFx0aWYgKGxvb3BzLS0gXHUwMDNlIDApXG4xMzY0Olx0XHRcdFx0Z290byBhZ2FpbjtcbjEzNjU6XHRcdFx0Y2xlYXJfY29tcG91bmRfaGVhZChcdTAwMjZwcy1cdTAwM2VwYWdlX3NuYXBzaG90KTtcbjEzNjY6XHRcdFx0Zm9saW9wID0gKHN0cnVjdCBmb2xpbyAqKVx1MDAyNnBzLVx1MDAzZXBhZ2Vfc25hcHNob3Q7XG4xMzY3Olx0XHRcdG1lbWNweShcdTAwMjZwcy1cdTAwM2Vmb2xpb19zbmFwc2hvdCwgZm9saW9wLCBzaXplb2Yoc3RydWN0IHBhZ2UpKTtcbjEzNjg6XHRcdFx0cHMtXHUwMDNlZmxhZ3MgPSAwO1xuMTM2OTpcdFx0XHRwcy1cdTAwM2VpZHggPSAwO1xuMTM3MDpcdFx0fVxuMTM3MTpcdH1cbjEzNzI6XHRcbjEzNzM6XHRzdGF0aWMgaW50IGNhbGxfdm1hX21hcHBlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbjEzNzQ6XHR7XG4xMzc1Olx0XHRjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKnZtX29wcyA9IHZtYS1cdTAwM2V2bV9vcHM7XG4xMzc2Olx0XHR2b2lkICp2bV9wcml2YXRlX2RhdGEgPSB2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xuMTM3NzpcdFx0aW50IGVycjtcbjEzNzg6XHRcbjEzNzk6XHRcdGlmICghdm1fb3BzIHx8ICF2bV9vcHMtXHUwMDNlbWFwcGVkKVxuMTM4MDpcdFx0XHRyZXR1cm4gMDtcbjEzODE6XHRcbjEzODI6XHRcdGVyciA9IHZtX29wcy1cdTAwM2VtYXBwZWQodm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLCB2bWEtXHUwMDNldm1fcGdvZmYsXG4xMzgzOlx0XHRcdFx0ICAgICB2bWEtXHUwMDNldm1fZmlsZSwgXHUwMDI2dm1fcHJpdmF0ZV9kYXRhKTtcbjEzODQ6XHRcdGlmIChlcnIpXG4xMzg1Olx0XHRcdHJldHVybiBlcnI7XG4xMzg2Olx0XG4xMzg3Olx0XHRpZiAodm1fcHJpdmF0ZV9kYXRhICE9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEpXG4xMzg4Olx0XHRcdHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGEgPSB2bV9wcml2YXRlX2RhdGE7XG4xMzg5Olx0XHRyZXR1cm4gMDtcbjEzOTA6XHR9XG4xMzkxOlx0XG4xMzkyOlx0c3RhdGljIGludCBtbWFwX2FjdGlvbl9maW5pc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4xMzkzOlx0XHRcdFx0ICAgICAgc3RydWN0IG1tYXBfYWN0aW9uICphY3Rpb24sIGludCBlcnIsXG4xMzk0Olx0XHRcdFx0ICAgICAgYm9vbCBpc19jb21wYXQpXG4xMzk1Olx0e1xuMTM5NjpcdFx0c2l6ZV90IGxlbjtcbjEzOTc6XHRcbjEzOTg6XHRcdGlmICghZXJyKVxuMTM5OTpcdFx0XHRlcnIgPSBjYWxsX3ZtYV9tYXBwZWQodm1hKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ0OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGVidWdnaW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgU25hZnUqKgoKQWxyaWdodCwgc28gSSYjMzk7dmUgc3BvdHRlZCBhIGNydWNpYWwgYnVnIGZpeCDigJMgYSBiaXQgb2YgYSBoZWFkLXNjcmF0Y2hlciBhY3R1YWxseS4gSXQgbG9va3MgbGlrZSB0aGUgYHNuYXBzaG90X3BhZ2VgIGZ1bmN0aW9uIHdhcyBpbmNvcnJlY3RseSBjb3B5aW5nIGBfX3BhZ2VfMmAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBTcGVjaWZpY2FsbHksIHdoZW4gdGhlIG51bWJlciBvZiBwYWdlcyAoYG5yX3BhZ2VzYCkgd2FzIGdyZWF0ZXIgdGhhbiAxLCBidXQgaXQgc2hvdWxkIGhhdmUgYmVlbiBncmVhdGVyIHRoYW4gMiB0byB0cmlnZ2VyIHRoZSBjb3JyZWN0ZWQgYmVoYXZpb3IuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNsZWFyIGNoYW5nZSBhbmQsIGhvbmVzdGx5LCBxdWl0ZSBzaWduaWZpY2FudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBiZXR0ZXIuCgpUbyBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBob3cgYGtwYWdlY291bnRfcmVhZGAgYW5kIGBrcGFnZWZsYWdzX3JlYWRgIGFyZSBpbXBsZW1lbnRlZC4gR2l2ZW4gdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBzbmFwc2hvdHMsIEkmIzM5O2xsIHN0YXJ0IHdpdGggYGZzL3Byb2MvcGFnZS5jYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBjaGVjayB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IHRoZSBrZXJuZWwgZXhwb3NlcyBwYWdlLXJlbGF0ZWQgaW5mb3JtYXRpb24uIFVuZGVyc3RhbmRpbmcgdGhvc2UgaW1wbGVtZW50YXRpb25zIGlzIGNydWNpYWwgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgaW1wYWN0IG9mIHRoaXMgYnVnIGZpeCwgYW5kIGNvbmZpcm1pbmcgdGhhdCB0aGUgcHJvcG9zZWQgc29sdXRpb24gaXMgc291bmQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBhbmQgYXZvaWQgbWVtb3J5IGxlYWtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Byb2MvcGFnZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtYmxvY2suaFx1MDAzZVxuICAgMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiAgIDQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgva3NtLmhcdTAwM2VcbiAgIDc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW16b25lLmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiAgMTA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9jX2ZzLmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVtYXAuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21tdV9ub3RpZmllci5oXHUwMDNlXG4gIDE2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZV9pZGxlLmhcdTAwM2VcbiAgMTc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwtcGFnZS1mbGFncy5oXHUwMDNlXG4gIDE4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gIDE5Olx0I2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuICAyMDpcdFxuICAyMTpcdCNkZWZpbmUgS1BNU0laRSBzaXplb2YodTY0KVxuICAyMjpcdCNkZWZpbmUgS1BNTUFTSyAoS1BNU0laRSAtIDEpXG4gIDIzOlx0XG4gIDI0Olx0ZW51bSBrcGFnZV9vcGVyYXRpb24ge1xuICAyNTpcdFx0S1BBR0VfRkxBR1MsXG4gIDI2Olx0XHRLUEFHRV9DT1VOVCxcbiAgMjc6XHRcdEtQQUdFX0NHUk9VUCxcbiAgMjg6XHR9O1xuICAyOTpcdFxuICAzMDpcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbWF4X2R1bXBfcGZuKHZvaWQpXG4gIDMxOlx0e1xuICAzMjpcdCNpZmRlZiBDT05GSUdfU1BBUlNFTUVNXG4gIDMzOlx0XHQvKlxuICAzNDpcdFx0ICogVGhlIG1lbW1hcCBvZiBlYXJseSBzZWN0aW9ucyBpcyBjb21wbGV0ZWx5IHBvcHVsYXRlZCBhbmQgbWFya2VkXG4gIDM1Olx0XHQgKiBvbmxpbmUgZXZlbiBpZiBtYXhfcGZuIGRvZXMgbm90IGZhbGwgb24gYSBzZWN0aW9uIGJvdW5kYXJ5IC1cbiAgMzY6XHRcdCAqIHBmbl90b19vbmxpbmVfcGFnZSgpIHdpbGwgc3VjY2VlZCBvbiBhbGwgcGFnZXMuIEFsbG93IGluc3BlY3RpbmdcbiAgMzc6XHRcdCAqIHRoZXNlIG1lbW1hcHMuXG4gIDM4Olx0XHQgKi9cbiAgMzk6XHRcdHJldHVybiByb3VuZF91cChtYXhfcGZuLCBQQUdFU19QRVJfU0VDVElPTik7XG4gIDQwOlx0I2Vsc2VcbiAgNDE6XHRcdHJldHVybiBtYXhfcGZuO1xuICA0MjpcdCNlbmRpZlxuICA0MzpcdH1cbiAgNDQ6XHRcbiAgNDU6XHRzdGF0aWMgdTY0IGdldF9rcGFnZV9jb3VudChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiAgNDY6XHR7XG4gIDQ3Olx0XHRzdHJ1Y3QgcGFnZV9zbmFwc2hvdCBwcztcbiAgNDg6XHRcdHU2NCByZXQ7XG4gIDQ5Olx0XG4gIDUwOlx0XHRzbmFwc2hvdF9wYWdlKFx1MDAyNnBzLCBwYWdlKTtcbiAgNTE6XHRcbiAgNTI6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19QQUdFX01BUENPVU5UKSlcbiAgNTM6XHRcdFx0cmV0ID0gZm9saW9fcHJlY2lzZV9wYWdlX21hcGNvdW50KFx1MDAyNnBzLmZvbGlvX3NuYXBzaG90LFxuICA1NDpcdFx0XHRcdFx0XHRcdCAgXHUwMDI2cHMucGFnZV9zbmFwc2hvdCk7XG4gIDU1Olx0XHRlbHNlXG4gIDU2Olx0XHRcdHJldCA9IGZvbGlvX2F2ZXJhZ2VfcGFnZV9tYXBjb3VudChcdTAwMjZwcy5mb2xpb19zbmFwc2hvdCk7XG4gIDU3Olx0XG4gIDU4Olx0XHRyZXR1cm4gcmV0O1xuICA1OTpcdH1cbiAgNjA6XHRcbiAgNjE6XHRzdGF0aWMgc3NpemVfdCBrcGFnZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuICA2MjpcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcyxcbiAgNjM6XHRcdFx0ZW51bSBrcGFnZV9vcGVyYXRpb24gb3ApXG4gIDY0Olx0e1xuICA2NTpcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBtYXhfZHVtcF9wZm4gPSBnZXRfbWF4X2R1bXBfcGZuKCk7XG4gIDY2Olx0XHR1NjQgX191c2VyICpvdXQgPSAodTY0IF9fdXNlciAqKWJ1ZjtcbiAgNjc6XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuICA2ODpcdFx0dW5zaWduZWQgbG9uZyBzcmMgPSAqcHBvcztcbiAgNjk6XHRcdHVuc2lnbmVkIGxvbmcgcGZuO1xuICA3MDpcdFx0c3NpemVfdCByZXQgPSAwO1xuICA3MTpcdFx0dTY0IGluZm87XG4gIDcyOlx0XG4gIDczOlx0XHRwZm4gPSBzcmMgLyBLUE1TSVpFO1xuICA3NDpcdFx0aWYgKHNyYyBcdTAwMjYgS1BNTUFTSyB8fCBjb3VudCBcdTAwMjYgS1BNTUFTSylcbiAgNzU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDc2Olx0XHRpZiAoc3JjIFx1MDAzZT0gbWF4X2R1bXBfcGZuICogS1BNU0laRSlcbiAgNzc6XHRcdFx0cmV0dXJuIDA7XG4gIDc4Olx0XHRjb3VudCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGNvdW50LCAobWF4X2R1bXBfcGZuICogS1BNU0laRSkgLSBzcmMpO1xuICA3OTpcdFxuICA4MDpcdFx0d2hpbGUgKGNvdW50IFx1MDAzZSAwKSB7XG4gIDgxOlx0XHRcdC8qXG4gIDgyOlx0XHRcdCAqIFRPRE86IFpPTkVfREVWSUNFIHN1cHBvcnQgcmVxdWlyZXMgdG8gaWRlbnRpZnlcbiAgODM6XHRcdFx0ICogbWVtbWFwcyB0aGF0IHdlcmUgYWN0dWFsbHkgaW5pdGlhbGl6ZWQuXG4gIDg0Olx0XHRcdCAqL1xuICA4NTpcdFx0XHRwYWdlID0gcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4gIDg2Olx0XG4gIDg3Olx0XHRcdGlmIChwYWdlKSB7XG4gIDg4Olx0XHRcdFx0c3dpdGNoIChvcCkge1xuICA4OTpcdFx0XHRcdGNhc2UgS1BBR0VfRkxBR1M6XG4gIDkwOlx0XHRcdFx0XHRpbmZvID0gc3RhYmxlX3BhZ2VfZmxhZ3MocGFnZSk7XG4gIDkxOlx0XHRcdFx0XHRicmVhaztcbiAgOTI6XHRcdFx0XHRjYXNlIEtQQUdFX0NPVU5UOlxuICA5MzpcdFx0XHRcdFx0aW5mbyA9IGdldF9rcGFnZV9jb3VudChwYWdlKTtcbiAgOTQ6XHRcdFx0XHRcdGJyZWFrO1xuICA5NTpcdFx0XHRcdGNhc2UgS1BBR0VfQ0dST1VQOlxuICA5NjpcdFx0XHRcdFx0aW5mbyA9IHBhZ2VfY2dyb3VwX2lubyhwYWdlKTtcbiAgOTc6XHRcdFx0XHRcdGJyZWFrO1xuICA5ODpcdFx0XHRcdGRlZmF1bHQ6XG4gIDk5Olx0XHRcdFx0XHRpbmZvID0gMDtcbiAxMDA6XHRcdFx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYnJlYWtkb3duIG9mIHRoaXMuCgoqKkFuYWx5emluZyB0aGUgS3BhZ2UgUmVhZCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgc28gYGtwYWdlX3JlYWRgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGhlcmUsIHRoYXQmIzM5O3MgdGhlIG9uZSBJIG5lZWQgdG8gZm9jdXMgb24gaW5pdGlhbGx5LiBJIHNlZSB0aGF0IGBrcGFnZWNvdW50X3JlYWRgIGFuZCBga3BhZ2VmbGFnc19yZWFkYCBhcmUgYmFzaWNhbGx5IHdyYXBwZXJzIGFyb3VuZCBga3BhZ2VfcmVhZGAuIEludGVyZXN0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgaG93IHRoZXkgY2FsbCBga3BhZ2VfcmVhZGAgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBzcGVjaWZpY2FsbHkgZXh0cmFjdCB0aGUgcGFnZSBjb3VudCBhbmQgZmxhZ3MuIFRoZSBmYWN0IHRoYXQgYHNuYXBzaG90X3BhZ2VgIHNob3dzIHVwIGluIGBtbS9kZWJ1Zy5jYCBmb3IgYF9fZHVtcF9wYWdlYCBpcyBhIHVzZWZ1bCBicmVhZGNydW1iIGZvciBsYXRlciBhbmFseXNpcy4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRpZyBpbnRvIGBrcGFnZWNvdW50X3JlYWRgIGFuZCBga3BhZ2VmbGFnc19yZWFkYCwgc3BlY2lmaWNhbGx5IGluIGBmcy9wcm9jL3BhZ2UuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRldGFpbHMgb2YgdGhlc2Ugd3JhcHBlcnMgYW5kIGhvcGVmdWxseSBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBrcGFnZSByZWFkaW5nIG1lY2hhbmlzbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL3BhZ2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMTpcdFx0XHRcdH1cbiAxMDI6XHRcdFx0fSBlbHNlXG4gMTAzOlx0XHRcdFx0aW5mbyA9IDA7XG4gMTA0Olx0XG4gMTA1Olx0XHRcdGlmIChwdXRfdXNlcihpbmZvLCBvdXQpKSB7XG4gMTA2Olx0XHRcdFx0cmV0ID0gLUVGQVVMVDtcbiAxMDc6XHRcdFx0XHRicmVhaztcbiAxMDg6XHRcdFx0fVxuIDEwOTpcdFxuIDExMDpcdFx0XHRwZm4mIzQzOyYjNDM7O1xuIDExMTpcdFx0XHRvdXQmIzQzOyYjNDM7O1xuIDExMjpcdFx0XHRjb3VudCAtPSBLUE1TSVpFO1xuIDExMzpcdFxuIDExNDpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiAxMTU6XHRcdH1cbiAxMTY6XHRcbiAxMTc6XHRcdCpwcG9zICYjNDM7PSAoY2hhciBfX3VzZXIgKilvdXQgLSBidWY7XG4gMTE4Olx0XHRpZiAoIXJldClcbiAxMTk6XHRcdFx0cmV0ID0gKGNoYXIgX191c2VyICopb3V0IC0gYnVmO1xuIDEyMDpcdFx0cmV0dXJuIHJldDtcbiAxMjE6XHR9XG4gMTIyOlx0XG4gMTIzOlx0LyogL3Byb2Mva3BhZ2Vjb3VudCAtIGFuIGFycmF5IGV4cG9zaW5nIHBhZ2UgbWFwY291bnRzXG4gMTI0Olx0ICpcbiAxMjU6XHQgKiBFYWNoIGVudHJ5IGlzIGEgdTY0IHJlcHJlc2VudGluZyB0aGUgY29ycmVzcG9uZGluZ1xuIDEyNjpcdCAqIHBoeXNpY2FsIHBhZ2UgbWFwY291bnQuXG4gMTI3Olx0ICovXG4gMTI4Olx0c3RhdGljIHNzaXplX3Qga3BhZ2Vjb3VudF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIDEyOTpcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiAxMzA6XHR7XG4gMTMxOlx0XHRyZXR1cm4ga3BhZ2VfcmVhZChmaWxlLCBidWYsIGNvdW50LCBwcG9zLCBLUEFHRV9DT1VOVCk7XG4gMTMyOlx0fVxuIDEzMzpcdFxuIDEzNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMga3BhZ2Vjb3VudF9wcm9jX29wcyA9IHtcbiAxMzU6XHRcdC5wcm9jX2ZsYWdzXHQ9IFBST0NfRU5UUllfUEVSTUFORU5ULFxuIDEzNjpcdFx0LnByb2NfbHNlZWtcdD0gbWVtX2xzZWVrLFxuIDEzNzpcdFx0LnByb2NfcmVhZFx0PSBrcGFnZWNvdW50X3JlYWQsXG4gMTM4Olx0fTtcbiAxMzk6XHRcbiAxNDA6XHRcbiAxNDE6XHRzdGF0aWMgaW5saW5lIHU2NCBrcGZfY29weV9iaXQodTY0IGtmbGFncywgaW50IHViaXQsIGludCBrYml0KVxuIDE0MjpcdHtcbiAxNDM6XHRcdHJldHVybiAoKGtmbGFncyBcdTAwM2VcdTAwM2Uga2JpdCkgXHUwMDI2IDEpIFx1MDAzY1x1MDAzYyB1Yml0O1xuIDE0NDpcdH1cbiAxNDU6XHRcbiAxNDY6XHR1NjQgc3RhYmxlX3BhZ2VfZmxhZ3MoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gMTQ3Olx0e1xuIDE0ODpcdFx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbztcbiAxNDk6XHRcdHN0cnVjdCBwYWdlX3NuYXBzaG90IHBzO1xuIDE1MDpcdFx0dW5zaWduZWQgbG9uZyBrO1xuIDE1MTpcdFx0dW5zaWduZWQgbG9uZyBtYXBwaW5nO1xuIDE1MjpcdFx0Ym9vbCBpc19hbm9uO1xuIDE1MzpcdFx0dTY0IHUgPSAwO1xuIDE1NDpcdFxuIDE1NTpcdFx0LypcbiAxNTY6XHRcdCAqIHBzZXVkbyBmbGFnOiBLUEZfTk9QQUdFXG4gMTU3Olx0XHQgKiBpdCBkaWZmZXJlbnRpYXRlcyBhIG1lbW9yeSBob2xlIGZyb20gYSBwYWdlIHdpdGggbm8gZmxhZ3NcbiAxNTg6XHRcdCAqL1xuIDE1OTpcdFx0aWYgKCFwYWdlKVxuIDE2MDpcdFx0XHRyZXR1cm4gMSBcdTAwM2NcdTAwM2MgS1BGX05PUEFHRTtcbiAxNjE6XHRcbiAxNjI6XHRcdHNuYXBzaG90X3BhZ2UoXHUwMDI2cHMsIHBhZ2UpO1xuIDE2MzpcdFx0Zm9saW8gPSBcdTAwMjZwcy5mb2xpb19zbmFwc2hvdDtcbiAxNjQ6XHRcbiAxNjU6XHRcdGsgPSBmb2xpby1cdTAwM2VmbGFncy5mO1xuIDE2NjpcdFx0bWFwcGluZyA9ICh1bnNpZ25lZCBsb25nKWZvbGlvLVx1MDAzZW1hcHBpbmc7XG4gMTY3Olx0XHRpc19hbm9uID0gbWFwcGluZyBcdTAwMjYgRk9MSU9fTUFQUElOR19BTk9OO1xuIDE2ODpcdFxuIDE2OTpcdFx0LypcbiAxNzA6XHRcdCAqIHBzZXVkbyBmbGFncyBmb3IgdGhlIHdlbGwga25vd24gKGFub255bW91cykgbWVtb3J5IG1hcHBlZCBwYWdlc1xuIDE3MTpcdFx0ICovXG4gMTcyOlx0XHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcbiAxNzM6XHRcdFx0dSB8PSAxIFx1MDAzY1x1MDAzYyBLUEZfTU1BUDtcbiAxNzQ6XHRcdGlmIChpc19hbm9uKSB7XG4gMTc1Olx0XHRcdHUgfD0gMSBcdTAwM2NcdTAwM2MgS1BGX0FOT047XG4gMTc2Olx0XHRcdGlmICgobWFwcGluZyBcdTAwMjYgRk9MSU9fTUFQUElOR19GTEFHUykgPT0gRk9MSU9fTUFQUElOR19LU00pXG4gMTc3Olx0XHRcdFx0dSB8PSAxIFx1MDAzY1x1MDAzYyBLUEZfS1NNO1xuIDE3ODpcdFx0fVxuIDE3OTpcdFxuIDE4MDpcdFx0LypcbiAxODE6XHRcdCAqIGNvbXBvdW5kIHBhZ2VzOiBleHBvcnQgYm90aCBoZWFkL3RhaWwgaW5mb1xuIDE4MjpcdFx0ICogdGhleSB0b2dldGhlciBkZWZpbmUgYSBjb21wb3VuZCBwYWdlJiMzOTtzIHN0YXJ0L2VuZCBwb3MgYW5kIG9yZGVyXG4gMTgzOlx0XHQgKi9cbiAxODQ6XHRcdGlmIChwcy5pZHggPT0gMClcbiAxODU6XHRcdFx0dSB8PSBrcGZfY29weV9iaXQoaywgS1BGX0NPTVBPVU5EX0hFQUQsIFBHX2hlYWQpO1xuIDE4NjpcdFx0ZWxzZVxuIDE4NzpcdFx0XHR1IHw9IDEgXHUwMDNjXHUwMDNjIEtQRl9DT01QT1VORF9UQUlMO1xuIDE4ODpcdFx0aWYgKGZvbGlvX3Rlc3RfaHVnZXRsYihmb2xpbykpXG4gMTg5Olx0XHRcdHUgfD0gMSBcdTAwM2NcdTAwM2MgS1BGX0hVR0U7XG4gMTkwOlx0XHRlbHNlIGlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbiAxOTE6XHRcdCAgICAgICAgIGZvbGlvX3Rlc3RfbGFyZ2Vfcm1hcHBhYmxlKGZvbGlvKSkge1xuIDE5MjpcdFx0XHQvKiBOb3RlOiB3ZSBpbmRpY2F0ZSBhbnkgVEhQcyBoZXJlLCBub3QganVzdCBQTUQtc2l6ZWQgb25lcyAqL1xuIDE5MzpcdFx0XHR1IHw9IDEgXHUwMDNjXHUwMDNjIEtQRl9USFA7XG4gMTk0Olx0XHR9IGVsc2UgaWYgKGlzX2h1Z2VfemVyb19wZm4ocHMucGZuKSkge1xuIDE5NTpcdFx0XHR1IHw9IDEgXHUwMDNjXHUwMDNjIEtQRl9aRVJPX1BBR0U7XG4gMTk2Olx0XHRcdHUgfD0gMSBcdTAwM2NcdTAwM2MgS1BGX1RIUDtcbiAxOTc6XHRcdH0gZWxzZSBpZiAoaXNfemVyb19wZm4ocHMucGZuKSkge1xuIDE5ODpcdFx0XHR1IHw9IDEgXHUwMDNjXHUwMDNjIEtQRl9aRVJPX1BBR0U7XG4gMTk5Olx0XHR9XG4gMjAwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTE4CgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDUzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgcHJvbWlzaW5nLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGEgZnV6emluZyBlZmZvcnQuIE15IGluaXRpYWwgYW5hbHlzaXMgc2hvd3MgdGhhdCB3ZSBzaG91bGQgZm9jdXMgb3VyIGF0dGVudGlvbiBvbiBhIGZldyBrZXkgc3ltYm9sczogYHNuYXBzaG90X3BhZ2VgLCBga3BhZ2Vjb3VudF9yZWFkYCwgYGtwYWdlZmxhZ3NfcmVhZGAsIGBnZXRfa3BhZ2VfY291bnRgLCBhbmQgYHN0YWJsZV9wYWdlX2ZsYWdzYC4gCgpXYWl0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGBzbmFwc2hvdF9wYWdlYCBpcyBhbHNvIHVzZWQgaW4gYF9fZHVtcF9wYWdlYCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBhIHBhZ2UgZXJyb3IsIGxpa2Ugd2hlbiBhIGBkdW1wX3BhZ2VgIG9jY3Vycy4gVGhpcyBpcyBpbnRlcmVzdGluZywgYnV0IGBrcGFnZWNvdW50X3JlYWRgIGFuZCBga3BhZ2VmbGFnc19yZWFkYCBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggbWFrZXMgdGhlbSBwcmltZSB0YXJnZXRzLiBgc25hcHNob3RfcGFnZWAgaXRzZWxmIGlzIHN0aWxsIGltcG9ydGFudCwgaG93ZXZlci4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gaWYgYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAgaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gd2UgbmVlZC4gWWVwLCB0aGF0IGxvb2tzIHJpZ2h0LiBgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SYCBlbmFibGVzIHRoZSBgL3Byb2Mva3BhZ2Vjb3VudGAgYW5kIGAvcHJvYy9rcGFnZWZsYWdzYCBpbnRlcmZhY2VzLiBBaCwgYnV0IHdhaXQgYWdhaW4sIGBzbmFwc2hvdF9wYWdlYCBsaXZlcyBpbiBgbW0vdXRpbC5jYCwgd2hpY2ggaXMgYWx3YXlzIGNvbXBpbGVkLiBIb3dldmVyLCByZWFjaGluZyBpdCBlYXNpbHkgbGlrZWx5IGRlcGVuZHMgb24gYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAuCgpJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgYG1tL3V0aWwuY2AgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9ucyBsdXJraW5nIGluIHRoZXJlLiBOb3BlLCBzZWVtcyB1bmNvbmRpdGlvbmFsbHkgY29tcGlsZWQuCgpOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgZ2xhbmNlIGF0IGBkcml2ZXJzL3BlcmYvcmlzY3ZfcG11X3NiaS5jYCB3aGVyZSBgc25hcHNob3RfcGFnZWAgaXMgdXNlZC4gT2gsIGhhbmcgb24hIEl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSB2YXJpYWJsZSBuYW1lZCBgc25hcHNob3RfcGFnZWAgaW4gdGhlcmUsIGJ1dCBpdCYjMzk7cyBub3QgdGhlIGZ1bmN0aW9uIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLgoKT2theSwgc28gdG8gcmVjYXAsIHRoZSBmdW5jdGlvbiBgc25hcHNob3RfcGFnZWAgYXBwZWFycyBvbmx5IGluIGBmcy9wcm9jL3BhZ2UuY2AsIGBtbS9kZWJ1Zy5jYCBhbmQgYG1tL3V0aWwuY2AgYXMgdGhlIHNvdXJjZSBvZiB0aGUgdGFyZ2V0LgoKQWxyaWdodCwgdGltZSB0byBzeW50aGVzaXplIHRoaXMgaW5mb3JtYXRpb24uIFRoaXMgaXMgd2hhdCBJJiMzOTt2ZSBnb3Q6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZQoqICAgKipGb2N1c1N5bWJvbHM6KiogYHNuYXBzaG90X3BhZ2VgLCBga3BhZ2Vjb3VudF9yZWFkYCwgYGtwYWdlZmxhZ3NfcmVhZGAsIGBnZXRfa3BhZ2VfY291bnRgLCBgc3RhYmxlX3BhZ2VfZmxhZ3NgCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFBST0NfUEFHRV9NT05JVE9SYAoKKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGZpeGVzIGEgZmxhdyBpbiBgc25hcHNob3RfcGFnZWAgd2hlcmUgaXQgbWlzaGFuZGxlZCBmb2xpbyBjb3BpZXMsIHNwZWNpZmljYWxseSB0aG9zZSB3aXRoIGBucl9wYWdlcyAmZ3Q7IDFgLiAgVGhpcyBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGAvcHJvYy9rcGFnZWNvdW50YCBhbmQgYC9wcm9jL2twYWdlZmxhZ3NgIGludGVyZmFjZXMsIG1ha2luZyBpdCBhIHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19QQUdFX01PTklUT1ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbmFwc2hvdF9wYWdlJiMzNDssCiAgICAmIzM0O2twYWdlY291bnRfcmVhZCYjMzQ7LAogICAgJiMzNDtrcGFnZWZsYWdzX3JlYWQmIzM0OywKICAgICYjMzQ7Z2V0X2twYWdlX2NvdW50JiMzNDssCiAgICAmIzM0O3N0YWJsZV9wYWdlX2ZsYWdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBzbmFwc2hvdF9wYWdlYCB3aGVyZSBpdCBpbmNvcnJlY3RseSBjb3BpZWQgYF9fcGFnZV8yYCBmb3IgZm9saW9zIHdpdGggYG5yX3BhZ2VzIFx1MDAzZSAxYCBpbnN0ZWFkIG9mIGBucl9wYWdlcyBcdTAwM2UgMmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYC9wcm9jL2twYWdlY291bnRgIGFuZCBgL3Byb2Mva3BhZ2VmbGFnc2AuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c25hcHNob3RfcGFnZSYjMzQ7LAogICAgJiMzNDtrcGFnZWNvdW50X3JlYWQmIzM0OywKICAgICYjMzQ7a3BhZ2VmbGFnc19yZWFkJiMzNDssCiAgICAmIzM0O2dldF9rcGFnZV9jb3VudCYjMzQ7LAogICAgJiMzNDtzdGFibGVfcGFnZV9mbGFncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgc25hcHNob3RfcGFnZWAgd2hlcmUgaXQgaW5jb3JyZWN0bHkgY29waWVkIGBfX3BhZ2VfMmAgZm9yIGZvbGlvcyB3aXRoIGBucl9wYWdlcyBcdTAwM2UgMWAgaW5zdGVhZCBvZiBgbnJfcGFnZXMgXHUwMDNlIDJgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBmdW5jdGlvbiBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGAvcHJvYy9rcGFnZWNvdW50YCBhbmQgYC9wcm9jL2twYWdlZmxhZ3NgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDlUMTM6NTc6MzEuNDc1MTQzMzgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU4NDM2MDYyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbmFwc2hvdF9wYWdlXCIsXG4gICAgXCJrcGFnZWNvdW50X3JlYWRcIixcbiAgICBcImtwYWdlZmxhZ3NfcmVhZFwiLFxuICAgIFwiZ2V0X2twYWdlX2NvdW50XCIsXG4gICAgXCJzdGFibGVfcGFnZV9mbGFnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBzbmFwc2hvdF9wYWdlYCB3aGVyZSBpdCBpbmNvcnJlY3RseSBjb3BpZWQgYF9fcGFnZV8yYCBmb3IgZm9saW9zIHdpdGggYG5yX3BhZ2VzIFxcdTAwM2UgMWAgaW5zdGVhZCBvZiBgbnJfcGFnZXMgXFx1MDAzZSAyYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgL3Byb2Mva3BhZ2Vjb3VudGAgYW5kIGAvcHJvYy9rcGFnZWZsYWdzYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTM6NTc6MzEuNDc1MTUwNzIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg1MjY0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzNDEwMjYyOThhYzQ5MGYxMmNiZWRlZWRjZDU2YjkwNDY5MjZlMGFlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDkgMTM6NTc6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jXFxuaW5kZXggYWYyYzIxMDNmMGQ5NTIuLjM0Y2I0M2IzZWFhNGMzIDEwMDY0NFxcbi0tLSBhL21tL3V0aWwuY1xcbisrKyBiL21tL3V0aWwuY1xcbkBAIC0xMzUzLDcgKzEzNTMsNyBAQCB2b2lkIHNuYXBzaG90X3BhZ2Uoc3RydWN0IHBhZ2Vfc25hcHNob3QgKnBzLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gXFx0aWYgKHBzLVxcdTAwM2VpZHggXFx1MDAzYyBNQVhfRk9MSU9fTlJfUEFHRVMpIHtcXG4gXFx0XFx0bWVtY3B5KFxcdTAwMjZwcy1cXHUwMDNlZm9saW9fc25hcHNob3QsIGZvbGlvcCwgMiAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpO1xcbiBcXHRcXHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKFxcdTAwMjZwcy1cXHUwMDNlZm9saW9fc25hcHNob3QpO1xcbi1cXHRcXHRpZiAobnJfcGFnZXMgXFx1MDAzZSAxKVxcbitcXHRcXHRpZiAobnJfcGFnZXMgXFx1MDAzZSAyKVxcbiBcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnBzLVxcdTAwM2Vmb2xpb19zbmFwc2hvdC5fX3BhZ2VfMiwgXFx1MDAyNmZvbGlvcC1cXHUwMDNlX19wYWdlXzIsXFxuIFxcdFxcdFxcdCAgICAgICBzaXplb2Yoc3RydWN0IHBhZ2UpKTtcXG4gXFx0XFx0c2V0X3BzX2ZsYWdzKHBzLCBmb2xpb3AsIHBhZ2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1NzozMS45NTQ3NjQ3MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUzNjM5NzQ1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbmFwc2hvdF9wYWdlXCIsXG4gICAgXCJrcGFnZWNvdW50X3JlYWRcIixcbiAgICBcImtwYWdlZmxhZ3NfcmVhZFwiLFxuICAgIFwiZ2V0X2twYWdlX2NvdW50XCIsXG4gICAgXCJzdGFibGVfcGFnZV9mbGFnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBzbmFwc2hvdF9wYWdlYCB3aGVyZSBpdCBpbmNvcnJlY3RseSBjb3BpZWQgYF9fcGFnZV8yYCBmb3IgZm9saW9zIHdpdGggYG5yX3BhZ2VzIFxcdTAwM2UgMWAgaW5zdGVhZCBvZiBgbnJfcGFnZXMgXFx1MDAzZSAyYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgL3Byb2Mva3BhZ2Vjb3VudGAgYW5kIGAvcHJvYy9rcGFnZWZsYWdzYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNDEwMjYyOThhYzQ5MGYxMmNiZWRlZWRjZDU2YjkwNDY5MjZlMGFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAxMzo1NzoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3V0aWwuYyBiL21tL3V0aWwuY1xuaW5kZXggYWYyYzIxMDNmMGQ5NTIuLjM0Y2I0M2IzZWFhNGMzIDEwMDY0NFxuLS0tIGEvbW0vdXRpbC5jXG4rKysgYi9tbS91dGlsLmNcbkBAIC0xMzUzLDcgKzEzNTMsNyBAQCB2b2lkIHNuYXBzaG90X3BhZ2Uoc3RydWN0IHBhZ2Vfc25hcHNob3QgKnBzLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdGlmIChwcy1cdTAwM2VpZHggXHUwMDNjIE1BWF9GT0xJT19OUl9QQUdFUykge1xuIFx0XHRtZW1jcHkoXHUwMDI2cHMtXHUwMDNlZm9saW9fc25hcHNob3QsIGZvbGlvcCwgMiAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpO1xuIFx0XHRucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKFx1MDAyNnBzLVx1MDAzZWZvbGlvX3NuYXBzaG90KTtcbi1cdFx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxKVxuK1x0XHRpZiAobnJfcGFnZXMgXHUwMDNlIDIpXG4gXHRcdFx0bWVtY3B5KFx1MDAyNnBzLVx1MDAzZWZvbGlvX3NuYXBzaG90Ll9fcGFnZV8yLCBcdTAwMjZmb2xpb3AtXHUwMDNlX19wYWdlXzIsXG4gXHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgcGFnZSkpO1xuIFx0XHRzZXRfcHNfZmxhZ3MocHMsIGZvbGlvcCwgcGFnZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1NzozMS45NTQ3Njc5NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MzMwMjQwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vdXRpbC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc25hcHNob3RfcGFnZWAgZnVuY3Rpb24uIFRoZSBjb2RlJ3MgYmVlbiBjaGFuZ2VkLCBhbmQgaXQgc2VlbXMgbGlrZSBhIHN1YnRsZSwgYnV0IHBvdGVudGlhbGx5IGltcGFjdGZ1bCwgbW9kaWZpY2F0aW9uIHRvIGhvdyBwYWdlIHNuYXBzaG90cyBhcmUgaGFuZGxlZC4gVGhlIG9yaWdpbmFsIGNvbmRpdGlvbiB3YXMgYGlmIChucl9wYWdlcyBcdTAwM2UgMSlgLCBhbmQgbm93IGl0J3MgYGlmIChucl9wYWdlcyBcdTAwM2UgMilgLiAgVGhhdCBgbWVtY3B5YCBjYWxsLCBjb3B5aW5nIGBzdHJ1Y3QgcGFnZWAgZGF0YSwgb25seSBleGVjdXRlcyB3aGVuIHRoZSBwYWdlIGNvdW50IGlzICpncmVhdGVyKiB0aGFuIHR3byBub3cuIEhtbSwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGFzIGl0IGRpcmVjdGx5IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgYHNuYXBzaG90X3BhZ2VgLiBJIG5lZWQgdG8gZGlnIGludG8gYG1tL3V0aWwuY2AgYW5kIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25kaXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBkaWZmZXJlbnQgYWJvdXQgaGFuZGxpbmcgdHdvIHBhZ2VzIHZlcnN1cyB0aHJlZSBvciBtb3JlLCBhbmQgd2hhdCBzY2VuYXJpb3MgdHJpZ2dlciB0aGlzIGZ1bmN0aW9uLiBMZXQncyBnZXQgdG8gdGhlIHNvdXJjZSBjb2RlIGFuZCBhbmFseXplLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTM6NTc6MzUuNzg3Nzk1NDE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTQ3OTQwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbmFwc2hvdF9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3V0aWwuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS91dGlsLmM9MTI4NT1zdGF0aWMgdm9pZCBzZXRfcHNfZmxhZ3Moc3RydWN0IHBhZ2Vfc25hcHNob3QgKnBzLCBjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vdXRpbC5jLTEzMDItLyoqXFxubW0vdXRpbC5jOjEzMDM6ICogc25hcHNob3RfcGFnZSgpIC0gQ3JlYXRlIGEgc25hcHNob3Qgb2YgYSBzdHJ1Y3QgcGFnZVxcbm1tL3V0aWwuYy0xMzA0LSAqIEBwczogUG9pbnRlciB0byBhIHN0cnVjdCBwYWdlX3NuYXBzaG90IHRvIHN0b3JlIHRoZSBwYWdlIHNuYXBzaG90XFxuLS1cXG5tbS91dGlsLmMtMTMxMi0gKiByYXJlIGNhc2VzIHdoZXJlIHRoaXMgaXMgbm90IHBvc3NpYmxlIChlLmcuIGR1ZSB0byBmb2xpbyBzcGxpdHRpbmcpLFxcbm1tL3V0aWwuYzoxMzEzOiAqIHNuYXBzaG90X3BhZ2UoKSBmYWxscyBiYWNrIHRvIHRyZWF0aW5nIEBwYWdlIGFzIGEgc2luZ2xlIHBhZ2UgYW5kIHRoZVxcbm1tL3V0aWwuYzoxMzE0OiAqIHNuYXBzaG90IGlzIG1hcmtlZCBhcyBcXFwidW5mYWl0aGZ1bFxcXCIuIFRoZSBzbmFwc2hvdF9wYWdlX2lzX2ZhaXRoZnVsKClcXG5tbS91dGlsLmMtMTMxNS0gKiBoZWxwZXIgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZm9yIHRoaXMgY29uZGl0aW9uLlxcbm1tL3V0aWwuYy0xMzE2LSAqL1xcbm1tL3V0aWwuYzoxMzE3OnZvaWQgc25hcHNob3RfcGFnZShzdHJ1Y3QgcGFnZV9zbmFwc2hvdCAqcHMsIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL3V0aWwuYy0xMzE4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTM6NTc6MzUuODg5MjgyNTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQwMzMzMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipUcmFjaW5nIHRoZSBVc2FnZSBvZiBgc25hcHNob3RfcGFnZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGlzIGBzbmFwc2hvdF9wYWdlYCBmdW5jdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZm9sbG93IHRoZSB1c2FnZS4gV2hlcmUgaXMgdGhpcyB0aGluZyBhY3R1YWxseSAqYmVpbmcqIGNhbGxlZD8gS25vd2luZyB0aGF0IGlzIHRoZSBiZWRyb2NrIG9mIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUuIEZyb20gdGhlcmUsIEkgY2FuIHN0YXJ0IHRvIGluZmVyIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXMgaXQgYSBjb3JlIHV0aWxpdHksIGEgbmljaGUgaGVscGVyLCBvciBzb21ldGhpbmcgaW4gYmV0d2Vlbj8gSXRzIHBsYWNlIGluIHRoZSBjb2RlYmFzZSB3aWxsIHRlbGwgdGhlIHRhbGUuIExldCdzIHNlZS4uLiB0aW1lIHRvIHN0YXJ0IGRpZ2dpbmcgdGhyb3VnaCB0aGUgY2FsbCBzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4OCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDEzOjU3OjM4LjcyOTYxODgxOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjAyMDY0ODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNuYXBzaG90X3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGVyZi9yaXNjdl9wbXVfc2JpLmM9NjcxPXN0YXRpYyBpbnQgcG11X3NiaV9zbmFwc2hvdF9hbGxvYyhzdHJ1Y3QgcmlzY3ZfcG11ICpwbXUpXFxuLS1cXG5kcml2ZXJzL3BlcmYvcmlzY3ZfcG11X3NiaS5jLTY3My1cXHRpbnQgY3B1O1xcbmRyaXZlcnMvcGVyZi9yaXNjdl9wbXVfc2JpLmM6Njc0OlxcdHN0cnVjdCBwYWdlICpzbmFwc2hvdF9wYWdlO1xcbmRyaXZlcnMvcGVyZi9yaXNjdl9wbXVfc2JpLmMtNjc1LVxcbi0tXFxuZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYy02NzgtXFxuZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYzo2Nzk6XFx0XFx0c25hcHNob3RfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0FUT01JQyB8IF9fR0ZQX1pFUk8pO1xcbmRyaXZlcnMvcGVyZi9yaXNjdl9wbXVfc2JpLmM6NjgwOlxcdFxcdGlmICghc25hcHNob3RfcGFnZSkge1xcbmRyaXZlcnMvcGVyZi9yaXNjdl9wbXVfc2JpLmMtNjgxLVxcdFxcdFxcdHBtdV9zYmlfc25hcHNob3RfZnJlZShwbXUpO1xcbi0tXFxuZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYy02ODMtXFx0XFx0fVxcbmRyaXZlcnMvcGVyZi9yaXNjdl9wbXVfc2JpLmM6Njg0OlxcdFxcdGNwdV9od19ldnQtXFx1MDAzZXNuYXBzaG90X2FkZHIgPSBwYWdlX3RvX3ZpcnQoc25hcHNob3RfcGFnZSk7XFxuZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuYzo2ODU6XFx0XFx0Y3B1X2h3X2V2dC1cXHUwMDNlc25hcHNob3RfYWRkcl9waHlzID0gcGFnZV90b19waHlzKHNuYXBzaG90X3BhZ2UpO1xcbmRyaXZlcnMvcGVyZi9yaXNjdl9wbXVfc2JpLmMtNjg2LVxcdH1cXG4tLVxcbmZzL3Byb2MvcGFnZS5jPTQ1PXN0YXRpYyB1NjQgZ2V0X2twYWdlX2NvdW50KGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuZnMvcHJvYy9wYWdlLmMtNDktXFxuZnMvcHJvYy9wYWdlLmM6NTA6XFx0c25hcHNob3RfcGFnZShcXHUwMDI2cHMsIHBhZ2UpO1xcbmZzL3Byb2MvcGFnZS5jLTUxLVxcbi0tXFxuZnMvcHJvYy9wYWdlLmM9MTQ2PXU2NCBzdGFibGVfcGFnZV9mbGFncyhjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmZzL3Byb2MvcGFnZS5jLTE2MS1cXG5mcy9wcm9jL3BhZ2UuYzoxNjI6XFx0c25hcHNob3RfcGFnZShcXHUwMDI2cHMsIHBhZ2UpO1xcbmZzL3Byb2MvcGFnZS5jLTE2My1cXHRmb2xpbyA9IFxcdTAwMjZwcy5mb2xpb19zbmFwc2hvdDtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD01MjU3PXN0cnVjdCBwYWdlX3NuYXBzaG90IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC01MjY0LVxcbmluY2x1ZGUvbGludXgvbW0uaDo1MjY1OnN0YXRpYyBpbmxpbmUgYm9vbCBzbmFwc2hvdF9wYWdlX2lzX2ZhaXRoZnVsKGNvbnN0IHN0cnVjdCBwYWdlX3NuYXBzaG90ICpwcylcXG5pbmNsdWRlL2xpbnV4L21tLmgtNTI2Ni17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtNTI2OS1cXG5pbmNsdWRlL2xpbnV4L21tLmg6NTI3MDp2b2lkIHNuYXBzaG90X3BhZ2Uoc3RydWN0IHBhZ2Vfc25hcHNob3QgKnBzLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTUyNzEtXFxuLS1cXG5tbS9kZWJ1Zy5jPTEzMD1zdGF0aWMgdm9pZCBfX2R1bXBfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbm1tL2RlYnVnLmMtMTMzLVxcbm1tL2RlYnVnLmM6MTM0OlxcdHNuYXBzaG90X3BhZ2UoXFx1MDAyNnBzLCBwYWdlKTtcXG5tbS9kZWJ1Zy5jOjEzNTpcXHRpZiAoIXNuYXBzaG90X3BhZ2VfaXNfZmFpdGhmdWwoXFx1MDAyNnBzKSlcXG5tbS9kZWJ1Zy5jLTEzNi1cXHRcXHRwcl93YXJuKFxcXCJwYWdlIGRvZXMgbm90IG1hdGNoIGZvbGlvXFxcXG5cXFwiKTtcXG4tLVxcbm1tL3V0aWwuYz0xMjg1PXN0YXRpYyB2b2lkIHNldF9wc19mbGFncyhzdHJ1Y3QgcGFnZV9zbmFwc2hvdCAqcHMsIGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS91dGlsLmMtMTMwMi0vKipcXG5tbS91dGlsLmM6MTMwMzogKiBzbmFwc2hvdF9wYWdlKCkgLSBDcmVhdGUgYSBzbmFwc2hvdCBvZiBhIHN0cnVjdCBwYWdlXFxubW0vdXRpbC5jLTEzMDQtICogQHBzOiBQb2ludGVyIHRvIGEgc3RydWN0IHBhZ2Vfc25hcHNob3QgdG8gc3RvcmUgdGhlIHBhZ2Ugc25hcHNob3RcXG4tLVxcbm1tL3V0aWwuYy0xMzEyLSAqIHJhcmUgY2FzZXMgd2hlcmUgdGhpcyBpcyBub3QgcG9zc2libGUgKGUuZy4gZHVlIHRvIGZvbGlvIHNwbGl0dGluZyksXFxubW0vdXRpbC5jOjEzMTM6ICogc25hcHNob3RfcGFnZSgpIGZhbGxzIGJhY2sgdG8gdHJlYXRpbmcgQHBhZ2UgYXMgYSBzaW5nbGUgcGFnZSBhbmQgdGhlXFxubW0vdXRpbC5jOjEzMTQ6ICogc25hcHNob3QgaXMgbWFya2VkIGFzIFxcXCJ1bmZhaXRoZnVsXFxcIi4gVGhlIHNuYXBzaG90X3BhZ2VfaXNfZmFpdGhmdWwoKVxcbm1tL3V0aWwuYy0xMzE1LSAqIGhlbHBlciBjYW4gYmUgdXNlZCB0byBjaGVjayBmb3IgdGhpcyBjb25kaXRpb24uXFxubW0vdXRpbC5jLTEzMTYtICovXFxubW0vdXRpbC5jOjEzMTc6dm9pZCBzbmFwc2hvdF9wYWdlKHN0cnVjdCBwYWdlX3NuYXBzaG90ICpwcywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vdXRpbC5jLTEzMTgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1Nzo0MS4zMzE2OTIzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU3MTg2NzE0NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGBzbmFwc2hvdF9wYWdlYCBVc2FnZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBzbmFwc2hvdF9wYWdlYCwgYW5kIGl0IHNlZW1zIHRvIGJlIHF1aXRlIGEgY3JpdGljYWwgZnVuY3Rpb24sIHBvcHBpbmcgdXAgaW4gYSBmZXcga2V5IGFyZWFzLiBJIHNlZSBpdCdzIHVzZWQgd2l0aGluIGBmcy9wcm9jL3BhZ2UuY2AsIHNwZWNpZmljYWxseSBmb3IgYGdldF9rcGFnZV9jb3VudGAgYW5kIGBzdGFibGVfcGFnZV9mbGFnc2AuIFRoYXQncyBpbnRlcmVzdGluZywgYXMgaXQgaW5kaWNhdGVzIHRoaXMgZnVuY3Rpb24gcGxheXMgYSByb2xlIGluIHRyYWNraW5nIGFuZCByZXBvcnRpbmcgcGFnZSB1c2FnZSB3aXRoaW4gdGhlIHByb2MgZmlsZXN5c3RlbSwgd2hpY2ggaXMgb2Z0ZW4gY3J1Y2lhbCBmb3Igc3lzdGVtIG1vbml0b3JpbmcgYW5kIGRlYnVnZ2luZy4gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBoeXBvdGhlc2VzIGFib3V0IGl0cyByb2xlIGluIHRob3NlIHNwZWNpZmljIGNvbnRleHRzIC0gcGVyaGFwcyBpdCdzIGludm9sdmVkIGluIHByb3ZpZGluZyBhY2N1cmF0ZSBwYWdlIGNvdW50IGluZm9ybWF0aW9uLCBvciBlbnN1cmluZyB0aGUgc3RhYmlsaXR5IG9mIGNlcnRhaW4gcGFnZSBmbGFncyByZWxhdGVkIHRvIG1lbW9yeSBhbGxvY2F0aW9uLlxuXG5UaGVuIHRoZXJlJ3MgaXRzIHVzZSBpbiBgbW0vZGVidWcuY2AgYXMgcGFydCBvZiBgX19kdW1wX3BhZ2VgLiBUaGF0J3MgYW5vdGhlciB2aXRhbCBjbHVlLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYHNuYXBzaG90X3BhZ2VgIGlzIGVzc2VudGlhbCB0byB0aGUgbG93IGxldmVsIG1lbW9yeSBkZWJ1Z2dpbmcsIGFuZCBsaWtlbHkgaW52b2x2ZWQgaW4gY2FwdHVyaW5nIGEgcG9pbnQtaW4tdGltZSBcInNuYXBzaG90XCIgb2YgYSBwYWdlJ3Mgc3RhdGUsIHVzZWQgdG8gYW5hbHl6ZSBhIHBhZ2UuXG5cbkknbGwgc3RhcnQgYnkgZm9jdXNpbmcgbXkgYXR0ZW50aW9uIG9uIHRob3NlIGBmcy9wcm9jL3BhZ2UuY2AgdXNhZ2VzLCBhbmQgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBgZ2V0X2twYWdlX2NvdW50YCBhbmQgYHN0YWJsZV9wYWdlX2ZsYWdzYCBpbXBsZW1lbnRhdGlvbnMgdG8gZ2V0IGEgY2xlYXJlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgYHNuYXBzaG90X3BhZ2VgIGlzIGRvaW5nIGF0IGl0cyBjb3JlLiBJIHdhbnQgdG8gYnVpbGQgYSBzb2xpZCBtZW50YWwgbW9kZWwgb2YgaG93IGl0J3MgdXNlZCBpbiB0aGVzZSBjcml0aWNhbCBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MjgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1Nzo1Ny4wNTAzNjYzMDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MDQ1MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9rcGFnZV9jb3VudHxzdGFibGVfcGFnZV9mbGFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL3BhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3BhZ2UuYz0zMD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X21heF9kdW1wX3Bmbih2b2lkKVxcbi0tXFxuZnMvcHJvYy9wYWdlLmMtNDQtXFxuZnMvcHJvYy9wYWdlLmM6NDU6c3RhdGljIHU2NCBnZXRfa3BhZ2VfY291bnQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuZnMvcHJvYy9wYWdlLmMtNDYte1xcbi0tXFxuZnMvcHJvYy9wYWdlLmM9NjE9c3RhdGljIHNzaXplX3Qga3BhZ2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmZzL3Byb2MvcGFnZS5jLTg5LVxcdFxcdFxcdGNhc2UgS1BBR0VfRkxBR1M6XFxuZnMvcHJvYy9wYWdlLmM6OTA6XFx0XFx0XFx0XFx0aW5mbyA9IHN0YWJsZV9wYWdlX2ZsYWdzKHBhZ2UpO1xcbmZzL3Byb2MvcGFnZS5jLTkxLVxcdFxcdFxcdFxcdGJyZWFrO1xcbmZzL3Byb2MvcGFnZS5jLTkyLVxcdFxcdFxcdGNhc2UgS1BBR0VfQ09VTlQ6XFxuZnMvcHJvYy9wYWdlLmM6OTM6XFx0XFx0XFx0XFx0aW5mbyA9IGdldF9rcGFnZV9jb3VudChwYWdlKTtcXG5mcy9wcm9jL3BhZ2UuYy05NC1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbmZzL3Byb2MvcGFnZS5jPTE0MT1zdGF0aWMgaW5saW5lIHU2NCBrcGZfY29weV9iaXQodTY0IGtmbGFncywgaW50IHViaXQsIGludCBrYml0KVxcbi0tXFxuZnMvcHJvYy9wYWdlLmMtMTQ1LVxcbmZzL3Byb2MvcGFnZS5jOjE0Njp1NjQgc3RhYmxlX3BhZ2VfZmxhZ3MoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuZnMvcHJvYy9wYWdlLmMtMTQ3LXtcXG4tLVxcbmZzL3Byb2MvcGFnZS5jLTI1Ny19XFxuZnMvcHJvYy9wYWdlLmM6MjU4OkVYUE9SVF9TWU1CT0xfR1BMKHN0YWJsZV9wYWdlX2ZsYWdzKTtcXG5mcy9wcm9jL3BhZ2UuYy0yNTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDEzOjU3OjU3LjE2NzQxNzM5M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNjYzMTI0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqS2VybmVsIFBhZ2UgSW5mb3JtYXRpb24gSGFuZGxpbmcgLSBGdW5jdGlvbmFsIENoYW5nZSBBbGVydCEqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaGVyZSBpcyBkZWZpbml0ZWx5IG9uIGAvcHJvYy9rcGFnZWNvdW50YCBhbmQgYC9wcm9jL2twYWdlZmxhZ3NgIOKAkyB0aG9zZSBjcnVjaWFsIGludGVyZmFjZXMgZm9yIHByb2JpbmcgcGFnZSBtZXRhZGF0YSB3aXRoaW4gdGhlIGtlcm5lbC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBjaGFuZ2UgcmVzaWRlcyBpbiBgbW0vdXRpbC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgc25hcHNob3RfcGFnZWAgZnVuY3Rpb24uIEdpdmVuIHRoYXQgdGhpcyBpcyBhICpmdW5jdGlvbmFsKiBtb2RpZmljYXRpb24sIG15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyBjb25jZXJuIGJhbGFuY2VkIHdpdGggY3VyaW9zaXR5LiBBbnkgY2hhbmdlIHRvIHRoZXNlIGFyZWFzIHJlcXVpcmVzIGludGVuc2Ugc2NydXRpbnk7IHRoZSB3YXkgdGhlc2UgaW50ZXJmYWNlcyBiZWhhdmUgY2FuIHNpZ25pZmljYW50bHkgaW1wYWN0IGRlYnVnZ2luZywgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIGFuZCBldmVuIHNlY3VyaXR5IHBvc3R1cmUsIGRlcGVuZGluZyBvbiBob3cgdGhleSdyZSB1c2VkLlxuXG5TaW5jZSB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgb2YgaG93IHdlJ3JlIGRlYWxpbmcgd2l0aCBwYWdlIGluZm9ybWF0aW9uLCBmdXp6aW5nIGJlY29tZXMgYSB0b3AgcHJpb3JpdHkuIFdlIG5lZWQgdG8gc3ViamVjdCB0aGlzIGNvZGUgdG8gcmlnb3JvdXMgdGVzdGluZyB0byB1bmNvdmVyIGFueSBlZGdlIGNhc2VzLCB1bmV4cGVjdGVkIGJlaGF2aW9yLCBvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoYXQgdGhlc2UgaW50ZXJmYWNlcyBhcmUgYWNjZXNzaWJsZSB0byB1c2Vyc3BhY2UuIEEgcm9idXN0IGZ1enppbmcgY2FtcGFpZ24gaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwgYmVmb3JlIHRoaXMgc2VlcyBhbnkgcHJvZHVjdGlvbi5cblxuQW5kLCBvZiBjb3Vyc2UsIGEgcXVpY2sgY2hlY2sgb2YgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgaXMgbmVjZXNzYXJ5LiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGlzICppbmRlZWQqIHdoYXQgZW5hYmxlcyB0aGUgZnVuY3Rpb25hbGl0eSB0aGF0IHRpZXMgaW50byB0aGVzZSBpbnRlcmZhY2VzLiBWZXJpZmljYXRpb24gaXMga2V5LiBObyBhc3N1bXB0aW9ucywgbm8gc2hvcnRjdXRzLiBUaGF0IGNvbmZpZ3VyYXRpb24gaXMgb3VyIG9uLW9mZiBzd2l0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1ODowNS40MzM3MzI5MjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTUzMzIwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrcGFnZWNvdW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvS2NvbmZpZz0xMDI9Y29uZmlnIFBST0NfUEFHRV9NT05JVE9SXFxuLS1cXG5mcy9wcm9jL0tjb25maWctMTA4LVxcdCAgL3Byb2MvcGlkL3NtYXBzLCAvcHJvYy9waWQvY2xlYXJfcmVmcywgL3Byb2MvcGlkL3BhZ2VtYXAsXFxuZnMvcHJvYy9LY29uZmlnOjEwOTpcXHQgIC9wcm9jL2twYWdlY291bnQsIGFuZCAvcHJvYy9rcGFnZWZsYWdzLiBEaXNhYmxpbmcgdGhlc2VcXG5mcy9wcm9jL0tjb25maWctMTEwLVxcdCAgaW50ZXJmYWNlcyB3aWxsIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUga2VybmVsIGJ5IGFwcHJveGltYXRlbHkgNGtiLlxcbi0tXFxuZnMvcHJvYy9pbnRlcm5hbC5oPTE1OD11bnNpZ25lZCBuYW1lX3RvX2ludChjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cik7XFxuLS1cXG5mcy9wcm9jL2ludGVybmFsLmgtMTc3LSAqIFVzZSB0aGlzIGZ1bmN0aW9uIG9ubHkgZm9yIHRoZSBjYWxjdWxhdGlvbiBvZiBleGlzdGluZyBzdGF0aXN0aWNzXFxuZnMvcHJvYy9pbnRlcm5hbC5oOjE3ODogKiAoVVNTLCBQU1MsIG1hcGNvdW50X21heCkgYW5kIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgKC9wcm9jL2twYWdlY291bnQpLlxcbmZzL3Byb2MvaW50ZXJuYWwuaC0xNzktICpcXG4tLVxcbmZzL3Byb2MvcGFnZS5jPTYxPXN0YXRpYyBzc2l6ZV90IGtwYWdlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5mcy9wcm9jL3BhZ2UuYy0xMjItXFxuZnMvcHJvYy9wYWdlLmM6MTIzOi8qIC9wcm9jL2twYWdlY291bnQgLSBhbiBhcnJheSBleHBvc2luZyBwYWdlIG1hcGNvdW50c1xcbmZzL3Byb2MvcGFnZS5jLTEyNC0gKlxcbi0tXFxuZnMvcHJvYy9wYWdlLmMtMTI3LSAqL1xcbmZzL3Byb2MvcGFnZS5jOjEyODpzdGF0aWMgc3NpemVfdCBrcGFnZWNvdW50X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuZnMvcHJvYy9wYWdlLmMtMTI5LVxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbi0tXFxuZnMvcHJvYy9wYWdlLmMtMTMzLVxcbmZzL3Byb2MvcGFnZS5jOjEzNDpzdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIGtwYWdlY291bnRfcHJvY19vcHMgPSB7XFxuZnMvcHJvYy9wYWdlLmMtMTM1LVxcdC5wcm9jX2ZsYWdzXFx0PSBQUk9DX0VOVFJZX1BFUk1BTkVOVCxcXG5mcy9wcm9jL3BhZ2UuYy0xMzYtXFx0LnByb2NfbHNlZWtcXHQ9IG1lbV9sc2VlayxcXG5mcy9wcm9jL3BhZ2UuYzoxMzc6XFx0LnByb2NfcmVhZFxcdD0ga3BhZ2Vjb3VudF9yZWFkLFxcbmZzL3Byb2MvcGFnZS5jLTEzOC19O1xcbi0tXFxuZnMvcHJvYy9wYWdlLmM9MjkwPXN0YXRpYyBpbnQgX19pbml0IHByb2NfcGFnZV9pbml0KHZvaWQpXFxuZnMvcHJvYy9wYWdlLmMtMjkxLXtcXG5mcy9wcm9jL3BhZ2UuYzoyOTI6XFx0cHJvY19jcmVhdGUoXFxcImtwYWdlY291bnRcXFwiLCBTX0lSVVNSLCBOVUxMLCBcXHUwMDI2a3BhZ2Vjb3VudF9wcm9jX29wcyk7XFxuZnMvcHJvYy9wYWdlLmMtMjkzLVxcdHByb2NfY3JlYXRlKFxcXCJrcGFnZWZsYWdzXFxcIiwgU19JUlVTUiwgTlVMTCwgXFx1MDAyNmtwYWdlZmxhZ3NfcHJvY19vcHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1ODowNS41NDUyNzYwOTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1MDkyMTExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbml0aWFsIEFzc2Vzc21lbnQgXHUwMDI2IEtleSBGdW5jdGlvbiBTZWxlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIHplcm9lZCBpbiBvbiB0aGUgYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAgY29uZmlnIOKAkyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIGZ1bmN0aW9ucyBsaWtlIGBzbmFwc2hvdF9wYWdlYCwgYGdldF9rcGFnZV9jb3VudGAsIGBzdGFibGVfcGFnZV9mbGFnc2AsIGBrcGFnZWNvdW50X3JlYWRgLCBhbmQgYGtwYWdlZmxhZ3NfcmVhZGAuIFdhaXQsIGhvbGQgb24uLi4gYGtwYWdlY291bnRfcmVhZGAgYW5kIGBrcGFnZWZsYWdzX3JlYWRgIGxvb2sgbGlrZSBtb3JlIHByb21pc2luZyBlbnRyeSBwb2ludHMgdG8gc3RhcnQgd2l0aCwgZ2l2ZW4gdGhlaXIgbmFtZXMuIExldCdzIHNlZSBob3cgdGhvc2UgYXJlIGltcGxlbWVudGVkIGFuZCB3aGF0IHRoZXkgZG8uXG5QZXJoYXBzIEknbGwgaGF2ZSBhIGxvb2sgYXQgYHNuYXBzaG90X3BhZ2VgIGluIGBtbS91dGlsLmNgIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1ODowOS4wOTYxOTk1ODJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3V0aWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMwMDpcXHR9XFxuMTMwMTpcXHRcXG4xMzAyOlxcdC8qKlxcbjEzMDM6XFx0ICogc25hcHNob3RfcGFnZSgpIC0gQ3JlYXRlIGEgc25hcHNob3Qgb2YgYSBzdHJ1Y3QgcGFnZVxcbjEzMDQ6XFx0ICogQHBzOiBQb2ludGVyIHRvIGEgc3RydWN0IHBhZ2Vfc25hcHNob3QgdG8gc3RvcmUgdGhlIHBhZ2Ugc25hcHNob3RcXG4xMzA1OlxcdCAqIEBwYWdlOiBUaGUgcGFnZSB0byBzbmFwc2hvdFxcbjEzMDY6XFx0ICpcXG4xMzA3OlxcdCAqIENyZWF0ZSBhIHNuYXBzaG90IG9mIHRoZSBwYWdlIGFuZCBzdG9yZSBib3RoIGl0cyBzdHJ1Y3QgcGFnZSBhbmQgc3RydWN0XFxuMTMwODpcXHQgKiBmb2xpbyByZXByZXNlbnRhdGlvbnMgaW4gQHBzLlxcbjEzMDk6XFx0ICpcXG4xMzEwOlxcdCAqIEEgc25hcHNob3QgaXMgbWFya2VkIGFzIFxcXCJmYWl0aGZ1bFxcXCIgaWYgdGhlIGNvbXBvdW5kIHN0YXRlIG9mIEBwYWdlIHdhc1xcbjEzMTE6XFx0ICogc3RhYmxlIGFuZCBhbGxvd2VkIHNhZmUgcmVjb25zdHJ1Y3Rpb24gb2YgdGhlIGZvbGlvIHJlcHJlc2VudGF0aW9uLiBJblxcbjEzMTI6XFx0ICogcmFyZSBjYXNlcyB3aGVyZSB0aGlzIGlzIG5vdCBwb3NzaWJsZSAoZS5nLiBkdWUgdG8gZm9saW8gc3BsaXR0aW5nKSxcXG4xMzEzOlxcdCAqIHNuYXBzaG90X3BhZ2UoKSBmYWxscyBiYWNrIHRvIHRyZWF0aW5nIEBwYWdlIGFzIGEgc2luZ2xlIHBhZ2UgYW5kIHRoZVxcbjEzMTQ6XFx0ICogc25hcHNob3QgaXMgbWFya2VkIGFzIFxcXCJ1bmZhaXRoZnVsXFxcIi4gVGhlIHNuYXBzaG90X3BhZ2VfaXNfZmFpdGhmdWwoKVxcbjEzMTU6XFx0ICogaGVscGVyIGNhbiBiZSB1c2VkIHRvIGNoZWNrIGZvciB0aGlzIGNvbmRpdGlvbi5cXG4xMzE2OlxcdCAqL1xcbjEzMTc6XFx0dm9pZCBzbmFwc2hvdF9wYWdlKHN0cnVjdCBwYWdlX3NuYXBzaG90ICpwcywgY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuMTMxODpcXHR7XFxuMTMxOTpcXHRcXHR1bnNpZ25lZCBsb25nIGluZm8sIG5yX3BhZ2VzID0gMTtcXG4xMzIwOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW9wO1xcbjEzMjE6XFx0XFx0aW50IGxvb3BzID0gNTtcXG4xMzIyOlxcdFxcbjEzMjM6XFx0XFx0cHMtXFx1MDAzZXBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpO1xcbjEzMjQ6XFx0XFx0cHMtXFx1MDAzZWZsYWdzID0gUEFHRV9TTkFQU0hPVF9GQUlUSEZVTDtcXG4xMzI1OlxcdFxcbjEzMjY6XFx0YWdhaW46XFxuMTMyNzpcXHRcXHRtZW1zZXQoXFx1MDAyNnBzLVxcdTAwM2Vmb2xpb19zbmFwc2hvdCwgMCwgc2l6ZW9mKHN0cnVjdCBmb2xpbykpO1xcbjEzMjg6XFx0XFx0bWVtY3B5KFxcdTAwMjZwcy1cXHUwMDNlcGFnZV9zbmFwc2hvdCwgcGFnZSwgc2l6ZW9mKCpwYWdlKSk7XFxuMTMyOTpcXHRcXHRpbmZvID0gcHMtXFx1MDAzZXBhZ2Vfc25hcHNob3QuY29tcG91bmRfaW5mbztcXG4xMzMwOlxcdFxcdGlmICghKGluZm8gXFx1MDAyNiAxKSkge1xcbjEzMzE6XFx0XFx0XFx0cHMtXFx1MDAzZWlkeCA9IDA7XFxuMTMzMjpcXHRcXHRcXHRmb2xpb3AgPSAoc3RydWN0IGZvbGlvICopXFx1MDAyNnBzLVxcdTAwM2VwYWdlX3NuYXBzaG90O1xcbjEzMzM6XFx0XFx0XFx0aWYgKCFmb2xpb190ZXN0X2xhcmdlKGZvbGlvcCkpIHtcXG4xMzM0OlxcdFxcdFxcdFxcdHNldF9wc19mbGFncyhwcywgcGFnZV9mb2xpbyhwYWdlKSwgcGFnZSk7XFxuMTMzNTpcXHRcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnBzLVxcdTAwM2Vmb2xpb19zbmFwc2hvdCwgZm9saW9wLFxcbjEzMzY6XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgcGFnZSkpO1xcbjEzMzc6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjEzMzg6XFx0XFx0XFx0fVxcbjEzMzk6XFx0XFx0XFx0Zm9saW9wID0gKHN0cnVjdCBmb2xpbyAqKXBhZ2U7XFxuMTM0MDpcXHRcXHR9IGVsc2Uge1xcbjEzNDE6XFx0XFx0XFx0LyogU2VlIGNvbXBvdW5kX2hlYWQoKSAqL1xcbjEzNDI6XFx0XFx0XFx0aWYgKGNvbXBvdW5kX2luZm9faGFzX21hc2soKSkge1xcbjEzNDM6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwID0gKHVuc2lnbmVkIGxvbmcpcGFnZTtcXG4xMzQ0OlxcdFxcbjEzNDU6XFx0XFx0XFx0XFx0Zm9saW9wID0gKHN0cnVjdCBmb2xpbyAqKShwIFxcdTAwMjYgaW5mbyk7XFxuMTM0NjpcXHRcXHRcXHR9IGVsc2Uge1xcbjEzNDc6XFx0XFx0XFx0XFx0Zm9saW9wID0gKHN0cnVjdCBmb2xpbyAqKShpbmZvIC0gMSk7XFxuMTM0ODpcXHRcXHRcXHR9XFxuMTM0OTpcXHRcXG4xMzUwOlxcdFxcdFxcdHBzLVxcdTAwM2VpZHggPSBmb2xpb19wYWdlX2lkeChmb2xpb3AsIHBhZ2UpO1xcbjEzNTE6XFx0XFx0fVxcbjEzNTI6XFx0XFxuMTM1MzpcXHRcXHRpZiAocHMtXFx1MDAzZWlkeCBcXHUwMDNjIE1BWF9GT0xJT19OUl9QQUdFUykge1xcbjEzNTQ6XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZwcy1cXHUwMDNlZm9saW9fc25hcHNob3QsIGZvbGlvcCwgMiAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpO1xcbjEzNTU6XFx0XFx0XFx0bnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhcXHUwMDI2cHMtXFx1MDAzZWZvbGlvX3NuYXBzaG90KTtcXG4xMzU2OlxcdFxcdFxcdGlmIChucl9wYWdlcyBcXHUwMDNlIDIpXFxuMTM1NzpcXHRcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnBzLVxcdTAwM2Vmb2xpb19zbmFwc2hvdC5fX3BhZ2VfMiwgXFx1MDAyNmZvbGlvcC1cXHUwMDNlX19wYWdlXzIsXFxuMTM1ODpcXHRcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBwYWdlKSk7XFxuMTM1OTpcXHRcXHRcXHRzZXRfcHNfZmxhZ3MocHMsIGZvbGlvcCwgcGFnZSk7XFxuMTM2MDpcXHRcXHR9XFxuMTM2MTpcXHRcXG4xMzYyOlxcdFxcdGlmIChwcy1cXHUwMDNlaWR4IFxcdTAwM2UgbnJfcGFnZXMpIHtcXG4xMzYzOlxcdFxcdFxcdGlmIChsb29wcy0tIFxcdTAwM2UgMClcXG4xMzY0OlxcdFxcdFxcdFxcdGdvdG8gYWdhaW47XFxuMTM2NTpcXHRcXHRcXHRjbGVhcl9jb21wb3VuZF9oZWFkKFxcdTAwMjZwcy1cXHUwMDNlcGFnZV9zbmFwc2hvdCk7XFxuMTM2NjpcXHRcXHRcXHRmb2xpb3AgPSAoc3RydWN0IGZvbGlvICopXFx1MDAyNnBzLVxcdTAwM2VwYWdlX3NuYXBzaG90O1xcbjEzNjc6XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZwcy1cXHUwMDNlZm9saW9fc25hcHNob3QsIGZvbGlvcCwgc2l6ZW9mKHN0cnVjdCBwYWdlKSk7XFxuMTM2ODpcXHRcXHRcXHRwcy1cXHUwMDNlZmxhZ3MgPSAwO1xcbjEzNjk6XFx0XFx0XFx0cHMtXFx1MDAzZWlkeCA9IDA7XFxuMTM3MDpcXHRcXHR9XFxuMTM3MTpcXHR9XFxuMTM3MjpcXHRcXG4xMzczOlxcdHN0YXRpYyBpbnQgY2FsbF92bWFfbWFwcGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbjEzNzQ6XFx0e1xcbjEzNzU6XFx0XFx0Y29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICp2bV9vcHMgPSB2bWEtXFx1MDAzZXZtX29wcztcXG4xMzc2OlxcdFxcdHZvaWQgKnZtX3ByaXZhdGVfZGF0YSA9IHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xcbjEzNzc6XFx0XFx0aW50IGVycjtcXG4xMzc4OlxcdFxcbjEzNzk6XFx0XFx0aWYgKCF2bV9vcHMgfHwgIXZtX29wcy1cXHUwMDNlbWFwcGVkKVxcbjEzODA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTM4MTpcXHRcXG4xMzgyOlxcdFxcdGVyciA9IHZtX29wcy1cXHUwMDNlbWFwcGVkKHZtYS1cXHUwMDNldm1fc3RhcnQsIHZtYS1cXHUwMDNldm1fZW5kLCB2bWEtXFx1MDAzZXZtX3Bnb2ZmLFxcbjEzODM6XFx0XFx0XFx0XFx0ICAgICB2bWEtXFx1MDAzZXZtX2ZpbGUsIFxcdTAwMjZ2bV9wcml2YXRlX2RhdGEpO1xcbjEzODQ6XFx0XFx0aWYgKGVycilcXG4xMzg1OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTM4NjpcXHRcXG4xMzg3OlxcdFxcdGlmICh2bV9wcml2YXRlX2RhdGEgIT0gdm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEpXFxuMTM4ODpcXHRcXHRcXHR2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHZtX3ByaXZhdGVfZGF0YTtcXG4xMzg5OlxcdFxcdHJldHVybiAwO1xcbjEzOTA6XFx0fVxcbjEzOTE6XFx0XFxuMTM5MjpcXHRzdGF0aWMgaW50IG1tYXBfYWN0aW9uX2ZpbmlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4xMzkzOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtbWFwX2FjdGlvbiAqYWN0aW9uLCBpbnQgZXJyLFxcbjEzOTQ6XFx0XFx0XFx0XFx0ICAgICAgYm9vbCBpc19jb21wYXQpXFxuMTM5NTpcXHR7XFxuMTM5NjpcXHRcXHRzaXplX3QgbGVuO1xcbjEzOTc6XFx0XFxuMTM5ODpcXHRcXHRpZiAoIWVycilcXG4xMzk5OlxcdFxcdFxcdGVyciA9IGNhbGxfdm1hX21hcHBlZCh2bWEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1ODowOS4wOTYzMzg2MjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI4MDAxNzM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBTbmFmdSoqXG5cbkFscmlnaHQsIHNvIEkndmUgc3BvdHRlZCBhIGNydWNpYWwgYnVnIGZpeCDigJMgYSBiaXQgb2YgYSBoZWFkLXNjcmF0Y2hlciBhY3R1YWxseS4gSXQgbG9va3MgbGlrZSB0aGUgYHNuYXBzaG90X3BhZ2VgIGZ1bmN0aW9uIHdhcyBpbmNvcnJlY3RseSBjb3B5aW5nIGBfX3BhZ2VfMmAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBTcGVjaWZpY2FsbHksIHdoZW4gdGhlIG51bWJlciBvZiBwYWdlcyAoYG5yX3BhZ2VzYCkgd2FzIGdyZWF0ZXIgdGhhbiAxLCBidXQgaXQgc2hvdWxkIGhhdmUgYmVlbiBncmVhdGVyIHRoYW4gMiB0byB0cmlnZ2VyIHRoZSBjb3JyZWN0ZWQgYmVoYXZpb3IuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNsZWFyIGNoYW5nZSBhbmQsIGhvbmVzdGx5LCBxdWl0ZSBzaWduaWZpY2FudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBiZXR0ZXIuXG5cblRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgaG93IGBrcGFnZWNvdW50X3JlYWRgIGFuZCBga3BhZ2VmbGFnc19yZWFkYCBhcmUgaW1wbGVtZW50ZWQuIEdpdmVuIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBzbmFwc2hvdHMsIEknbGwgc3RhcnQgd2l0aCBgZnMvcHJvYy9wYWdlLmNgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gY2hlY2sgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIGhvdyB0aGUga2VybmVsIGV4cG9zZXMgcGFnZS1yZWxhdGVkIGluZm9ybWF0aW9uLiBVbmRlcnN0YW5kaW5nIHRob3NlIGltcGxlbWVudGF0aW9ucyBpcyBjcnVjaWFsIHRvIGdyYXNwaW5nIHRoZSBvdmVyYWxsIGltcGFjdCBvZiB0aGlzIGJ1ZyBmaXgsIGFuZCBjb25maXJtaW5nIHRoYXQgdGhlIHByb3Bvc2VkIHNvbHV0aW9uIGlzIHNvdW5kLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgYW5kIGF2b2lkIG1lbW9yeSBsZWFrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ0OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTM6NTg6MTQuMzc2MzYwMzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvcGFnZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtYmxvY2suaFxcdTAwM2VcXG4gICAzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlci5oXFx1MDAzZVxcbiAgIDQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tzbS5oXFx1MDAzZVxcbiAgIDc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICAgODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW16b25lLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaHVnZV9tbS5oXFx1MDAzZVxcbiAgMTA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb2NfZnMuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXFfZmlsZS5oXFx1MDAzZVxcbiAgMTI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1yZW1hcC5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbXVfbm90aWZpZXIuaFxcdTAwM2VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlX2lkbGUuaFxcdTAwM2VcXG4gIDE3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwtcGFnZS1mbGFncy5oXFx1MDAzZVxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4gIDE5OlxcdCNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbiAgMjA6XFx0XFxuICAyMTpcXHQjZGVmaW5lIEtQTVNJWkUgc2l6ZW9mKHU2NClcXG4gIDIyOlxcdCNkZWZpbmUgS1BNTUFTSyAoS1BNU0laRSAtIDEpXFxuICAyMzpcXHRcXG4gIDI0OlxcdGVudW0ga3BhZ2Vfb3BlcmF0aW9uIHtcXG4gIDI1OlxcdFxcdEtQQUdFX0ZMQUdTLFxcbiAgMjY6XFx0XFx0S1BBR0VfQ09VTlQsXFxuICAyNzpcXHRcXHRLUEFHRV9DR1JPVVAsXFxuICAyODpcXHR9O1xcbiAgMjk6XFx0XFxuICAzMDpcXHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X21heF9kdW1wX3Bmbih2b2lkKVxcbiAgMzE6XFx0e1xcbiAgMzI6XFx0I2lmZGVmIENPTkZJR19TUEFSU0VNRU1cXG4gIDMzOlxcdFxcdC8qXFxuICAzNDpcXHRcXHQgKiBUaGUgbWVtbWFwIG9mIGVhcmx5IHNlY3Rpb25zIGlzIGNvbXBsZXRlbHkgcG9wdWxhdGVkIGFuZCBtYXJrZWRcXG4gIDM1OlxcdFxcdCAqIG9ubGluZSBldmVuIGlmIG1heF9wZm4gZG9lcyBub3QgZmFsbCBvbiBhIHNlY3Rpb24gYm91bmRhcnkgLVxcbiAgMzY6XFx0XFx0ICogcGZuX3RvX29ubGluZV9wYWdlKCkgd2lsbCBzdWNjZWVkIG9uIGFsbCBwYWdlcy4gQWxsb3cgaW5zcGVjdGluZ1xcbiAgMzc6XFx0XFx0ICogdGhlc2UgbWVtbWFwcy5cXG4gIDM4OlxcdFxcdCAqL1xcbiAgMzk6XFx0XFx0cmV0dXJuIHJvdW5kX3VwKG1heF9wZm4sIFBBR0VTX1BFUl9TRUNUSU9OKTtcXG4gIDQwOlxcdCNlbHNlXFxuICA0MTpcXHRcXHRyZXR1cm4gbWF4X3BmbjtcXG4gIDQyOlxcdCNlbmRpZlxcbiAgNDM6XFx0fVxcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdGF0aWMgdTY0IGdldF9rcGFnZV9jb3VudChjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gIDQ2OlxcdHtcXG4gIDQ3OlxcdFxcdHN0cnVjdCBwYWdlX3NuYXBzaG90IHBzO1xcbiAgNDg6XFx0XFx0dTY0IHJldDtcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0c25hcHNob3RfcGFnZShcXHUwMDI2cHMsIHBhZ2UpO1xcbiAgNTE6XFx0XFxuICA1MjpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEFHRV9NQVBDT1VOVCkpXFxuICA1MzpcXHRcXHRcXHRyZXQgPSBmb2xpb19wcmVjaXNlX3BhZ2VfbWFwY291bnQoXFx1MDAyNnBzLmZvbGlvX3NuYXBzaG90LFxcbiAgNTQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2cHMucGFnZV9zbmFwc2hvdCk7XFxuICA1NTpcXHRcXHRlbHNlXFxuICA1NjpcXHRcXHRcXHRyZXQgPSBmb2xpb19hdmVyYWdlX3BhZ2VfbWFwY291bnQoXFx1MDAyNnBzLmZvbGlvX3NuYXBzaG90KTtcXG4gIDU3OlxcdFxcbiAgNTg6XFx0XFx0cmV0dXJuIHJldDtcXG4gIDU5OlxcdH1cXG4gIDYwOlxcdFxcbiAgNjE6XFx0c3RhdGljIHNzaXplX3Qga3BhZ2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG4gIDYyOlxcdFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLFxcbiAgNjM6XFx0XFx0XFx0ZW51bSBrcGFnZV9vcGVyYXRpb24gb3ApXFxuICA2NDpcXHR7XFxuICA2NTpcXHRcXHRjb25zdCB1bnNpZ25lZCBsb25nIG1heF9kdW1wX3BmbiA9IGdldF9tYXhfZHVtcF9wZm4oKTtcXG4gIDY2OlxcdFxcdHU2NCBfX3VzZXIgKm91dCA9ICh1NjQgX191c2VyICopYnVmO1xcbiAgNjc6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuICA2ODpcXHRcXHR1bnNpZ25lZCBsb25nIHNyYyA9ICpwcG9zO1xcbiAgNjk6XFx0XFx0dW5zaWduZWQgbG9uZyBwZm47XFxuICA3MDpcXHRcXHRzc2l6ZV90IHJldCA9IDA7XFxuICA3MTpcXHRcXHR1NjQgaW5mbztcXG4gIDcyOlxcdFxcbiAgNzM6XFx0XFx0cGZuID0gc3JjIC8gS1BNU0laRTtcXG4gIDc0OlxcdFxcdGlmIChzcmMgXFx1MDAyNiBLUE1NQVNLIHx8IGNvdW50IFxcdTAwMjYgS1BNTUFTSylcXG4gIDc1OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgNzY6XFx0XFx0aWYgKHNyYyBcXHUwMDNlPSBtYXhfZHVtcF9wZm4gKiBLUE1TSVpFKVxcbiAgNzc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICA3ODpcXHRcXHRjb3VudCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGNvdW50LCAobWF4X2R1bXBfcGZuICogS1BNU0laRSkgLSBzcmMpO1xcbiAgNzk6XFx0XFxuICA4MDpcXHRcXHR3aGlsZSAoY291bnQgXFx1MDAzZSAwKSB7XFxuICA4MTpcXHRcXHRcXHQvKlxcbiAgODI6XFx0XFx0XFx0ICogVE9ETzogWk9ORV9ERVZJQ0Ugc3VwcG9ydCByZXF1aXJlcyB0byBpZGVudGlmeVxcbiAgODM6XFx0XFx0XFx0ICogbWVtbWFwcyB0aGF0IHdlcmUgYWN0dWFsbHkgaW5pdGlhbGl6ZWQuXFxuICA4NDpcXHRcXHRcXHQgKi9cXG4gIDg1OlxcdFxcdFxcdHBhZ2UgPSBwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcXG4gIDg2OlxcdFxcbiAgODc6XFx0XFx0XFx0aWYgKHBhZ2UpIHtcXG4gIDg4OlxcdFxcdFxcdFxcdHN3aXRjaCAob3ApIHtcXG4gIDg5OlxcdFxcdFxcdFxcdGNhc2UgS1BBR0VfRkxBR1M6XFxuICA5MDpcXHRcXHRcXHRcXHRcXHRpbmZvID0gc3RhYmxlX3BhZ2VfZmxhZ3MocGFnZSk7XFxuICA5MTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gIDkyOlxcdFxcdFxcdFxcdGNhc2UgS1BBR0VfQ09VTlQ6XFxuICA5MzpcXHRcXHRcXHRcXHRcXHRpbmZvID0gZ2V0X2twYWdlX2NvdW50KHBhZ2UpO1xcbiAgOTQ6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuICA5NTpcXHRcXHRcXHRcXHRjYXNlIEtQQUdFX0NHUk9VUDpcXG4gIDk2OlxcdFxcdFxcdFxcdFxcdGluZm8gPSBwYWdlX2Nncm91cF9pbm8ocGFnZSk7XFxuICA5NzpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gIDk4OlxcdFxcdFxcdFxcdGRlZmF1bHQ6XFxuICA5OTpcXHRcXHRcXHRcXHRcXHRpbmZvID0gMDtcXG4gMTAwOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1ODoxNC4zNzY1NjU2M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTE3NDc5MTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHRoaXMuXG5cbioqQW5hbHl6aW5nIHRoZSBLcGFnZSBSZWFkIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIHNvIGBrcGFnZV9yZWFkYCBpcyB0aGUgY29yZSBmdW5jdGlvbiBoZXJlLCB0aGF0J3MgdGhlIG9uZSBJIG5lZWQgdG8gZm9jdXMgb24gaW5pdGlhbGx5LiBJIHNlZSB0aGF0IGBrcGFnZWNvdW50X3JlYWRgIGFuZCBga3BhZ2VmbGFnc19yZWFkYCBhcmUgYmFzaWNhbGx5IHdyYXBwZXJzIGFyb3VuZCBga3BhZ2VfcmVhZGAuIEludGVyZXN0aW5nLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSBob3cgdGhleSBjYWxsIGBrcGFnZV9yZWFkYCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IHNwZWNpZmljYWxseSBleHRyYWN0IHRoZSBwYWdlIGNvdW50IGFuZCBmbGFncy4gVGhlIGZhY3QgdGhhdCBgc25hcHNob3RfcGFnZWAgc2hvd3MgdXAgaW4gYG1tL2RlYnVnLmNgIGZvciBgX19kdW1wX3BhZ2VgIGlzIGEgdXNlZnVsIGJyZWFkY3J1bWIgZm9yIGxhdGVyIGFuYWx5c2lzLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBkaWcgaW50byBga3BhZ2Vjb3VudF9yZWFkYCBhbmQgYGtwYWdlZmxhZ3NfcmVhZGAsIHNwZWNpZmljYWxseSBpbiBgZnMvcHJvYy9wYWdlLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZXRhaWxzIG9mIHRoZXNlIHdyYXBwZXJzIGFuZCBob3BlZnVsbHkgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwga3BhZ2UgcmVhZGluZyBtZWNoYW5pc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNjcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDEzOjU4OjE3Ljg5NDA0NzIzMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL3BhZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdFxcdFxcdFxcdH1cXG4gMTAyOlxcdFxcdFxcdH0gZWxzZVxcbiAxMDM6XFx0XFx0XFx0XFx0aW5mbyA9IDA7XFxuIDEwNDpcXHRcXG4gMTA1OlxcdFxcdFxcdGlmIChwdXRfdXNlcihpbmZvLCBvdXQpKSB7XFxuIDEwNjpcXHRcXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbiAxMDc6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEwODpcXHRcXHRcXHR9XFxuIDEwOTpcXHRcXG4gMTEwOlxcdFxcdFxcdHBmbisrO1xcbiAxMTE6XFx0XFx0XFx0b3V0Kys7XFxuIDExMjpcXHRcXHRcXHRjb3VudCAtPSBLUE1TSVpFO1xcbiAxMTM6XFx0XFxuIDExNDpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gMTE1OlxcdFxcdH1cXG4gMTE2OlxcdFxcbiAxMTc6XFx0XFx0KnBwb3MgKz0gKGNoYXIgX191c2VyICopb3V0IC0gYnVmO1xcbiAxMTg6XFx0XFx0aWYgKCFyZXQpXFxuIDExOTpcXHRcXHRcXHRyZXQgPSAoY2hhciBfX3VzZXIgKilvdXQgLSBidWY7XFxuIDEyMDpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMjE6XFx0fVxcbiAxMjI6XFx0XFxuIDEyMzpcXHQvKiAvcHJvYy9rcGFnZWNvdW50IC0gYW4gYXJyYXkgZXhwb3NpbmcgcGFnZSBtYXBjb3VudHNcXG4gMTI0OlxcdCAqXFxuIDEyNTpcXHQgKiBFYWNoIGVudHJ5IGlzIGEgdTY0IHJlcHJlc2VudGluZyB0aGUgY29ycmVzcG9uZGluZ1xcbiAxMjY6XFx0ICogcGh5c2ljYWwgcGFnZSBtYXBjb3VudC5cXG4gMTI3OlxcdCAqL1xcbiAxMjg6XFx0c3RhdGljIHNzaXplX3Qga3BhZ2Vjb3VudF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbiAxMjk6XFx0XFx0XFx0c2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXFxuIDEzMDpcXHR7XFxuIDEzMTpcXHRcXHRyZXR1cm4ga3BhZ2VfcmVhZChmaWxlLCBidWYsIGNvdW50LCBwcG9zLCBLUEFHRV9DT1VOVCk7XFxuIDEzMjpcXHR9XFxuIDEzMzpcXHRcXG4gMTM0OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMga3BhZ2Vjb3VudF9wcm9jX29wcyA9IHtcXG4gMTM1OlxcdFxcdC5wcm9jX2ZsYWdzXFx0PSBQUk9DX0VOVFJZX1BFUk1BTkVOVCxcXG4gMTM2OlxcdFxcdC5wcm9jX2xzZWVrXFx0PSBtZW1fbHNlZWssXFxuIDEzNzpcXHRcXHQucHJvY19yZWFkXFx0PSBrcGFnZWNvdW50X3JlYWQsXFxuIDEzODpcXHR9O1xcbiAxMzk6XFx0XFxuIDE0MDpcXHRcXG4gMTQxOlxcdHN0YXRpYyBpbmxpbmUgdTY0IGtwZl9jb3B5X2JpdCh1NjQga2ZsYWdzLCBpbnQgdWJpdCwgaW50IGtiaXQpXFxuIDE0MjpcXHR7XFxuIDE0MzpcXHRcXHRyZXR1cm4gKChrZmxhZ3MgXFx1MDAzZVxcdTAwM2Uga2JpdCkgXFx1MDAyNiAxKSBcXHUwMDNjXFx1MDAzYyB1Yml0O1xcbiAxNDQ6XFx0fVxcbiAxNDU6XFx0XFxuIDE0NjpcXHR1NjQgc3RhYmxlX3BhZ2VfZmxhZ3MoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIDE0NzpcXHR7XFxuIDE0ODpcXHRcXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiAxNDk6XFx0XFx0c3RydWN0IHBhZ2Vfc25hcHNob3QgcHM7XFxuIDE1MDpcXHRcXHR1bnNpZ25lZCBsb25nIGs7XFxuIDE1MTpcXHRcXHR1bnNpZ25lZCBsb25nIG1hcHBpbmc7XFxuIDE1MjpcXHRcXHRib29sIGlzX2Fub247XFxuIDE1MzpcXHRcXHR1NjQgdSA9IDA7XFxuIDE1NDpcXHRcXG4gMTU1OlxcdFxcdC8qXFxuIDE1NjpcXHRcXHQgKiBwc2V1ZG8gZmxhZzogS1BGX05PUEFHRVxcbiAxNTc6XFx0XFx0ICogaXQgZGlmZmVyZW50aWF0ZXMgYSBtZW1vcnkgaG9sZSBmcm9tIGEgcGFnZSB3aXRoIG5vIGZsYWdzXFxuIDE1ODpcXHRcXHQgKi9cXG4gMTU5OlxcdFxcdGlmICghcGFnZSlcXG4gMTYwOlxcdFxcdFxcdHJldHVybiAxIFxcdTAwM2NcXHUwMDNjIEtQRl9OT1BBR0U7XFxuIDE2MTpcXHRcXG4gMTYyOlxcdFxcdHNuYXBzaG90X3BhZ2UoXFx1MDAyNnBzLCBwYWdlKTtcXG4gMTYzOlxcdFxcdGZvbGlvID0gXFx1MDAyNnBzLmZvbGlvX3NuYXBzaG90O1xcbiAxNjQ6XFx0XFxuIDE2NTpcXHRcXHRrID0gZm9saW8tXFx1MDAzZWZsYWdzLmY7XFxuIDE2NjpcXHRcXHRtYXBwaW5nID0gKHVuc2lnbmVkIGxvbmcpZm9saW8tXFx1MDAzZW1hcHBpbmc7XFxuIDE2NzpcXHRcXHRpc19hbm9uID0gbWFwcGluZyBcXHUwMDI2IEZPTElPX01BUFBJTkdfQU5PTjtcXG4gMTY4OlxcdFxcbiAxNjk6XFx0XFx0LypcXG4gMTcwOlxcdFxcdCAqIHBzZXVkbyBmbGFncyBmb3IgdGhlIHdlbGwga25vd24gKGFub255bW91cykgbWVtb3J5IG1hcHBlZCBwYWdlc1xcbiAxNzE6XFx0XFx0ICovXFxuIDE3MjpcXHRcXHRpZiAoZm9saW9fbWFwcGVkKGZvbGlvKSlcXG4gMTczOlxcdFxcdFxcdHUgfD0gMSBcXHUwMDNjXFx1MDAzYyBLUEZfTU1BUDtcXG4gMTc0OlxcdFxcdGlmIChpc19hbm9uKSB7XFxuIDE3NTpcXHRcXHRcXHR1IHw9IDEgXFx1MDAzY1xcdTAwM2MgS1BGX0FOT047XFxuIDE3NjpcXHRcXHRcXHRpZiAoKG1hcHBpbmcgXFx1MDAyNiBGT0xJT19NQVBQSU5HX0ZMQUdTKSA9PSBGT0xJT19NQVBQSU5HX0tTTSlcXG4gMTc3OlxcdFxcdFxcdFxcdHUgfD0gMSBcXHUwMDNjXFx1MDAzYyBLUEZfS1NNO1xcbiAxNzg6XFx0XFx0fVxcbiAxNzk6XFx0XFxuIDE4MDpcXHRcXHQvKlxcbiAxODE6XFx0XFx0ICogY29tcG91bmQgcGFnZXM6IGV4cG9ydCBib3RoIGhlYWQvdGFpbCBpbmZvXFxuIDE4MjpcXHRcXHQgKiB0aGV5IHRvZ2V0aGVyIGRlZmluZSBhIGNvbXBvdW5kIHBhZ2UncyBzdGFydC9lbmQgcG9zIGFuZCBvcmRlclxcbiAxODM6XFx0XFx0ICovXFxuIDE4NDpcXHRcXHRpZiAocHMuaWR4ID09IDApXFxuIDE4NTpcXHRcXHRcXHR1IHw9IGtwZl9jb3B5X2JpdChrLCBLUEZfQ09NUE9VTkRfSEVBRCwgUEdfaGVhZCk7XFxuIDE4NjpcXHRcXHRlbHNlXFxuIDE4NzpcXHRcXHRcXHR1IHw9IDEgXFx1MDAzY1xcdTAwM2MgS1BGX0NPTVBPVU5EX1RBSUw7XFxuIDE4ODpcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSlcXG4gMTg5OlxcdFxcdFxcdHUgfD0gMSBcXHUwMDNjXFx1MDAzYyBLUEZfSFVHRTtcXG4gMTkwOlxcdFxcdGVsc2UgaWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuIDE5MTpcXHRcXHQgICAgICAgICBmb2xpb190ZXN0X2xhcmdlX3JtYXBwYWJsZShmb2xpbykpIHtcXG4gMTkyOlxcdFxcdFxcdC8qIE5vdGU6IHdlIGluZGljYXRlIGFueSBUSFBzIGhlcmUsIG5vdCBqdXN0IFBNRC1zaXplZCBvbmVzICovXFxuIDE5MzpcXHRcXHRcXHR1IHw9IDEgXFx1MDAzY1xcdTAwM2MgS1BGX1RIUDtcXG4gMTk0OlxcdFxcdH0gZWxzZSBpZiAoaXNfaHVnZV96ZXJvX3Bmbihwcy5wZm4pKSB7XFxuIDE5NTpcXHRcXHRcXHR1IHw9IDEgXFx1MDAzY1xcdTAwM2MgS1BGX1pFUk9fUEFHRTtcXG4gMTk2OlxcdFxcdFxcdHUgfD0gMSBcXHUwMDNjXFx1MDAzYyBLUEZfVEhQO1xcbiAxOTc6XFx0XFx0fSBlbHNlIGlmIChpc196ZXJvX3Bmbihwcy5wZm4pKSB7XFxuIDE5ODpcXHRcXHRcXHR1IHw9IDEgXFx1MDAzY1xcdTAwM2MgS1BGX1pFUk9fUEFHRTtcXG4gMTk5OlxcdFxcdH1cXG4gMjAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1ODoxNy44OTQxMzc0OTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI4MTczNzU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBsb29rcyBwcm9taXNpbmcsIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBhIGZ1enppbmcgZWZmb3J0LiBNeSBpbml0aWFsIGFuYWx5c2lzIHNob3dzIHRoYXQgd2Ugc2hvdWxkIGZvY3VzIG91ciBhdHRlbnRpb24gb24gYSBmZXcga2V5IHN5bWJvbHM6IGBzbmFwc2hvdF9wYWdlYCwgYGtwYWdlY291bnRfcmVhZGAsIGBrcGFnZWZsYWdzX3JlYWRgLCBgZ2V0X2twYWdlX2NvdW50YCwgYW5kIGBzdGFibGVfcGFnZV9mbGFnc2AuIFxuXG5XYWl0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGBzbmFwc2hvdF9wYWdlYCBpcyBhbHNvIHVzZWQgaW4gYF9fZHVtcF9wYWdlYCwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBhIHBhZ2UgZXJyb3IsIGxpa2Ugd2hlbiBhIGBkdW1wX3BhZ2VgIG9jY3Vycy4gVGhpcyBpcyBpbnRlcmVzdGluZywgYnV0IGBrcGFnZWNvdW50X3JlYWRgIGFuZCBga3BhZ2VmbGFnc19yZWFkYCBhcmUgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggbWFrZXMgdGhlbSBwcmltZSB0YXJnZXRzLiBgc25hcHNob3RfcGFnZWAgaXRzZWxmIGlzIHN0aWxsIGltcG9ydGFudCwgaG93ZXZlci5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtIGlmIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdlIG5lZWQuIFllcCwgdGhhdCBsb29rcyByaWdodC4gYENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUmAgZW5hYmxlcyB0aGUgYC9wcm9jL2twYWdlY291bnRgIGFuZCBgL3Byb2Mva3BhZ2VmbGFnc2AgaW50ZXJmYWNlcy4gQWgsIGJ1dCB3YWl0IGFnYWluLCBgc25hcHNob3RfcGFnZWAgbGl2ZXMgaW4gYG1tL3V0aWwuY2AsIHdoaWNoIGlzIGFsd2F5cyBjb21waWxlZC4gSG93ZXZlciwgcmVhY2hpbmcgaXQgZWFzaWx5IGxpa2VseSBkZXBlbmRzIG9uIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgLlxuXG5JIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgYG1tL3V0aWwuY2AgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb25zIGx1cmtpbmcgaW4gdGhlcmUuIE5vcGUsIHNlZW1zIHVuY29uZGl0aW9uYWxseSBjb21waWxlZC5cblxuTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGdsYW5jZSBhdCBgZHJpdmVycy9wZXJmL3Jpc2N2X3BtdV9zYmkuY2Agd2hlcmUgYHNuYXBzaG90X3BhZ2VgIGlzIHVzZWQuIE9oLCBoYW5nIG9uISBJdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSB2YXJpYWJsZSBuYW1lZCBgc25hcHNob3RfcGFnZWAgaW4gdGhlcmUsIGJ1dCBpdCdzIG5vdCB0aGUgZnVuY3Rpb24gd2UncmUgaW50ZXJlc3RlZCBpbi5cblxuT2theSwgc28gdG8gcmVjYXAsIHRoZSBmdW5jdGlvbiBgc25hcHNob3RfcGFnZWAgYXBwZWFycyBvbmx5IGluIGBmcy9wcm9jL3BhZ2UuY2AsIGBtbS9kZWJ1Zy5jYCBhbmQgYG1tL3V0aWwuY2AgYXMgdGhlIHNvdXJjZSBvZiB0aGUgdGFyZ2V0LlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHN5bnRoZXNpemUgdGhpcyBpbmZvcm1hdGlvbi4gVGhpcyBpcyB3aGF0IEkndmUgZ290OlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZVxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBzbmFwc2hvdF9wYWdlYCwgYGtwYWdlY291bnRfcmVhZGAsIGBrcGFnZWZsYWdzX3JlYWRgLCBgZ2V0X2twYWdlX2NvdW50YCwgYHN0YWJsZV9wYWdlX2ZsYWdzYFxuKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgUFJPQ19QQUdFX01PTklUT1JgXG5cbioqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBmaXhlcyBhIGZsYXcgaW4gYHNuYXBzaG90X3BhZ2VgIHdoZXJlIGl0IG1pc2hhbmRsZWQgZm9saW8gY29waWVzLCBzcGVjaWZpY2FsbHkgdGhvc2Ugd2l0aCBgbnJfcGFnZXMgXHUwMDNlIDFgLiAgVGhpcyBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGAvcHJvYy9rcGFnZWNvdW50YCBhbmQgYC9wcm9jL2twYWdlZmxhZ3NgIGludGVyZmFjZXMsIG1ha2luZyBpdCBhIHZhbHVhYmxlIGZ1enppbmcgdGFyZ2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDkxOCwiT3V0cHV0VG9rZW5zIjoxNTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMzo1ODoyNy4xNzU5MTc2NDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI4MTUzNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfUEFHRV9NT05JVE9SXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic25hcHNob3RfcGFnZVwiLFxuICAgIFwia3BhZ2Vjb3VudF9yZWFkXCIsXG4gICAgXCJrcGFnZWZsYWdzX3JlYWRcIixcbiAgICBcImdldF9rcGFnZV9jb3VudFwiLFxuICAgIFwic3RhYmxlX3BhZ2VfZmxhZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgc25hcHNob3RfcGFnZWAgd2hlcmUgaXQgaW5jb3JyZWN0bHkgY29waWVkIGBfX3BhZ2VfMmAgZm9yIGZvbGlvcyB3aXRoIGBucl9wYWdlcyBcXHUwMDNlIDFgIGluc3RlYWQgb2YgYG5yX3BhZ2VzIFxcdTAwM2UgMmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgYC9wcm9jL2twYWdlY291bnRgIGFuZCBgL3Byb2Mva3BhZ2VmbGFnc2AuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzbmFwc2hvdF9wYWdlXCIsXG4gICAgXCJrcGFnZWNvdW50X3JlYWRcIixcbiAgICBcImtwYWdlZmxhZ3NfcmVhZFwiLFxuICAgIFwiZ2V0X2twYWdlX2NvdW50XCIsXG4gICAgXCJzdGFibGVfcGFnZV9mbGFnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBzbmFwc2hvdF9wYWdlYCB3aGVyZSBpdCBpbmNvcnJlY3RseSBjb3BpZWQgYF9fcGFnZV8yYCBmb3IgZm9saW9zIHdpdGggYG5yX3BhZ2VzIFxcdTAwM2UgMWAgaW5zdGVhZCBvZiBgbnJfcGFnZXMgXFx1MDAzZSAyYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBgL3Byb2Mva3BhZ2Vjb3VudGAgYW5kIGAvcHJvYy9rcGFnZWZsYWdzYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow24tnr[1] Phase: Succeeded StartedAt: 2026-07-09 13:58:42 +0000 UTC FinishedAt: 2026-07-09 13:58:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-09 13:58:42 +0000 UTC FinishedAt: 2026-07-09 13:58:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2] Phase: Succeeded StartedAt: 2026-07-09 13:58:42 +0000 UTC FinishedAt: 2026-07-09 18:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-09 13:58:42 +0000 UTC FinishedAt: 2026-07-09 18:22:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-09 13:58:42 +0000 UTC FinishedAt: 2026-07-09 13:58:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-09 13:58:42 +0000 UTC FinishedAt: 2026-07-09 13:58:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow24tnr/series-workflow24tnr-convert-artifact-4070778353/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-09 13:58:52 +0000 UTC FinishedAt: 2026-07-09 14:40:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-09 13:58:52 +0000 UTC FinishedAt: 2026-07-09 14:40:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f9c29813-7d7f-407b-9ecd-8425864025ba,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-workflow24tnr/series-workflow24tnr-convert-artifact-4070778353/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": "c544bb3c-4129-4ec2-aaea-393edd6e55cf", "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-workflow24tnr/series-workflow24tnr-build-action-521003039/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-09 13:58:52 +0000 UTC FinishedAt: 2026-07-09 14:40:29 +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:*f9c29813-7d7f-407b-9ecd-8425864025ba,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-workflow24tnr/series-workflow24tnr-convert-artifact-4070778353/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": "c544bb3c-4129-4ec2-aaea-393edd6e55cf", "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-workflow24tnr/series-workflow24tnr-build-action-521003039/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-09 14:40:39 +0000 UTC FinishedAt: 2026-07-09 14:40:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-09 14:40:39 +0000 UTC FinishedAt: 2026-07-09 14:40:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-09 14:40:39 +0000 UTC FinishedAt: 2026-07-09 14:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-09 14:40:39 +0000 UTC FinishedAt: 2026-07-09 14:40:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow24tnr/series-workflow24tnr-convert-artifact-2649837124/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-09 14:40:49 +0000 UTC FinishedAt: 2026-07-09 14:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-09 14:40:49 +0000 UTC FinishedAt: 2026-07-09 14:43:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c544bb3c-4129-4ec2-aaea-393edd6e55cf,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-workflow24tnr/series-workflow24tnr-build-action-521003039/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-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-09 14:43:24 +0000 UTC FinishedAt: 2026-07-09 14:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-09 14:43:24 +0000 UTC FinishedAt: 2026-07-09 14:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-09 14:43:24 +0000 UTC FinishedAt: 2026-07-09 15:18:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-09 14:43:24 +0000 UTC FinishedAt: 2026-07-09 15:18:29 +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:*f9c29813-7d7f-407b-9ecd-8425864025ba,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-workflow24tnr/series-workflow24tnr-convert-artifact-2649837124/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": "37d776ec-e463-4dfe-8423-a6a0ba699419", "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-workflow24tnr/series-workflow24tnr-build-action-224884304/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-09 14:43:24 +0000 UTC FinishedAt: 2026-07-09 15:18:20 +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:*f9c29813-7d7f-407b-9ecd-8425864025ba,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-workflow24tnr/series-workflow24tnr-convert-artifact-2649837124/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": "37d776ec-e463-4dfe-8423-a6a0ba699419", "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-workflow24tnr/series-workflow24tnr-build-action-224884304/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-09 15:18:29 +0000 UTC FinishedAt: 2026-07-09 15:18:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-09 15:18:29 +0000 UTC FinishedAt: 2026-07-09 15:18:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-09 15:18:29 +0000 UTC FinishedAt: 2026-07-09 15:20:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-09 15:18:29 +0000 UTC FinishedAt: 2026-07-09 15:20:15 +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:*37d776ec-e463-4dfe-8423-a6a0ba699419,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-workflow24tnr/series-workflow24tnr-build-action-224884304/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-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-09 15:20:25 +0000 UTC FinishedAt: 2026-07-09 18:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-09 15:20:25 +0000 UTC FinishedAt: 2026-07-09 18:22:11 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},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:*c544bb3c-4129-4ec2-aaea-393edd6e55cf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*37d776ec-e463-4dfe-8423-a6a0ba699419,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-workflow24tnr/series-workflow24tnr-build-action-521003039/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-workflow24tnr/series-workflow24tnr-build-action-224884304/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-09 15:20:25 +0000 UTC FinishedAt: 2026-07-09 15:20:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-09 15:20:25 +0000 UTC FinishedAt: 2026-07-09 15:20:37 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},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-workflow24tnr/series-workflow24tnr-convert-artifact-1198757197/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-09 15:20:25 +0000 UTC FinishedAt: 2026-07-09 15:20:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-09 15:20:25 +0000 UTC FinishedAt: 2026-07-09 15:20:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-09 15:20:25 +0000 UTC FinishedAt: 2026-07-09 15:20:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-09 15:20:47 +0000 UTC FinishedAt: 2026-07-09 18:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24tnr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["snapshot_page","kpagecount_read","kpageflags_read","get_kpage_count","stable_page_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d880786f897bde33569a2a5d9def53b3416297ad","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_PAGE_MONITOR"],"series_id":"a58b7a75-dcc3-4f18-ad7a-8703b11a15ae","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-09 15:20:47 +0000 UTC FinishedAt: 2026-07-09 18:22:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c544bb3c-4129-4ec2-aaea-393edd6e55cf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*37d776ec-e463-4dfe-8423-a6a0ba699419,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-workflow24tnr/series-workflow24tnr-build-action-521003039/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-workflow24tnr/series-workflow24tnr-build-action-224884304/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-workflow24tnr/series-workflow24tnr-convert-artifact-1198757197/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,}