Name: series-workflow2sh4b Phase: Succeeded StartedAt: 2026-07-07 12:09:00 +0000 UTC FinishedAt: 2026-07-07 17:00:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[0] Phase: Succeeded StartedAt: 2026-07-07 12:09:00 +0000 UTC FinishedAt: 2026-07-07 12:28:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 12:09:00 +0000 UTC FinishedAt: 2026-07-07 12:28:34 +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": "db6ed2a3d31068ca5577466591b2521dee0508ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "DAMON_LRU_SORT" ], "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": "db6ed2a3d31068ca5577466591b2521dee0508ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "DAMON_LRU_SORT" ], "series_id": "ec3fff8b-e6b6-45a1-88e7-7686cc863ac9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_set_attrs", "damon_probe_hits_mvsum", "damon_hot_score" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc2V0X2F0dHJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3Byb2JlX2hpdHNfbXZzdW0mIzM0OywKICAgICYjMzQ7ZGFtb25faG90X3Njb3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgREFNT04gbG9naWMgZm9yIGNhbGN1bGF0aW5nIGFuZCB1cGRhdGluZyBtZW1vcnkgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cywgaW5jbHVkaW5nIGEgbmV3IGNvbmRpdGlvbiBpbiBkYW1vbl9wcm9iZV9oaXRzX212c3VtIGFuZCBuZXcgcHJvYmUgaGl0IHVwZGF0aW5nIGxvZ2ljIGluIGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzLiBJdCBhbHNvIHJlbmFtZXMgc2V2ZXJhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzYW1wbGUgY291bnRpbmcgYW5kIGFnZ3JlZ2F0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIERBTU9OIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjNjMzY5NGFlZDUzMjM3YjU4NjcyMmNjZGUxZjFkYjU2Y2Y2YTQyMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMTI6Mjc6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCAxOWI3ZTgzOWJkZTBiNC4uNjNmNTk2OTU3YzFmMWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTEwNTYsMTUgJiM0MzsxMDU2LDE3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vbl90YXJnZXRfaGFzX3BpZChjb25zdCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRyZXR1cm4gY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfVkFERFIgfHwgY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfRlZBRERSO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoY29uc3Qgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbiYjNDM7LyogUmV0dXJucyBudW1iZXIgb2Ygc2FtcGxlcyBwZXIgYWdncmVnYXRpb24gaW50ZXJ2YWwgKi9cbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWw7XG4tXHR1bnNpZ25lZCBsb25nIG1heF9ucl9hY2Nlc3NlcztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3NhbXBsZXM7XG4gXG4gXHRzYW1wbGVfaW50ZXJ2YWwgPSBhdHRycy1cdTAwM2VzYW1wbGVfaW50ZXJ2YWwgPyA6IDE7XG4tXHRtYXhfbnJfYWNjZXNzZXMgPSBtaW4oYXR0cnMtXHUwMDNlYWdncl9pbnRlcnZhbCAvIHNhbXBsZV9pbnRlcnZhbCxcbiYjNDM7XHRucl9zYW1wbGVzID0gbWluKGF0dHJzLVx1MDAzZWFnZ3JfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWwsXG4gXHRcdFx0KHVuc2lnbmVkIGxvbmcpVUlOVF9NQVgpO1xuLVx0cmV0dXJuIG1heF9ucl9hY2Nlc3NlcyA/IDogMTtcbiYjNDM7XHRyZXR1cm4gbnJfc2FtcGxlcyA/IDogMTtcbiB9XG4gXG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCAzOTBlMDBiMzY4NWVmYy4uMDkzZGE1YzBiMzY5MzQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTI5MCw2ICYjNDM7MjkwLDkgQEAgdW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gXHRcdFx0Y3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzO1xuIFx0bGVmdF93aW5kb3dfYnAgPSBtdWx0X2ZyYWMobGVmdF93aW5kb3csIDEwMDAwLCB3aW5kb3dfbGVuKTtcbiBcbiYjNDM7XHRpZiAobGVmdF93aW5kb3dfYnAgPT0gMTAwMDApXG4mIzQzO1x0XHRyZXR1cm4gci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XTtcbiYjNDM7XG4gXHRyZXR1cm4gZGFtb25fbXZzdW0oci1cdTAwM2Vwcm9iZV9oaXRzW3Byb2JlX2lkeF0sXG4gXHRcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XSwgbGVmdF93aW5kb3dfYnApO1xuIH1cbkBAIC04NzYsNDMgJiM0Mzs4NzksNTggQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9hZ2VfZm9yX25ld19hdHRycyh1bnNpZ25lZCBpbnQgYWdlLFxuIFx0cmV0dXJuIGFnZSAqIG9sZF9hdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsIC8gbmV3X2F0dHJzLVx1MDAzZWFnZ3JfaW50ZXJ2YWw7XG4gfVxuIFxuLS8qIGNvbnZlcnQgYWNjZXNzIHJhdGlvIGluIGJwIChwZXIgMTAsMDAwKSB0byBucl9hY2Nlc3NlcyAqL1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXMoXG4tXHRcdHVuc2lnbmVkIGludCBhY2Nlc3Nlc19icCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbiYjNDM7LyogY29udmVydCBzYW1wbGUgcmF0aW8gaW4gYnAgKHBlciAxMCwwMDApIHRvIGNvdW50ICovXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fc2FtcGxlX2JwX3RvX2NvdW50KFxuJiM0MztcdFx0dW5zaWduZWQgaW50IGJwLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuIHtcbi1cdHJldHVybiBhY2Nlc3Nlc19icCAqIGRhbW9uX21heF9ucl9hY2Nlc3NlcyhhdHRycykgLyAxMDAwMDtcbiYjNDM7XHRyZXR1cm4gYnAgKiBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKGF0dHJzKSAvIDEwMDAwO1xuIH1cbiBcbi0vKlxuLSAqIENvbnZlcnQgbnJfYWNjZXNzZXMgdG8gYWNjZXNzIHJhdGlvIGluIGJwIChwZXIgMTAsMDAwKS5cbi0gKlxuLSAqIENhbGxlcnMgc2hvdWxkIGVuc3VyZSBhdHRycy5hZ2dyX2ludGVydmFsIGlzIG5vdCB6ZXJvLCBsaWtlXG4tICogZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0cygpIGRvZXMgLiAgT3RoZXJ3aXNlLCBkaXZpZGUtYnktemVybyB3b3VsZFxuLSAqIGhhcHBlbi5cbi0gKi9cbi1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKFxuLVx0XHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4mIzQzOy8qIGNvbnZlcnQgc2FtcGxlIGNvdW50IHRvIHJhdGlvIGluIGJwIChwZXIgMTAsMDAwKSAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3NhbXBsZV9jb3VudF90b19icChcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBjb3VudCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbiB7XG4tXHRyZXR1cm4gbXVsdF9mcmFjKG5yX2FjY2Vzc2VzLCAxMDAwMCwgZGFtb25fbWF4X25yX2FjY2Vzc2VzKGF0dHJzKSk7XG4mIzQzO1x0cmV0dXJuIG11bHRfZnJhYyhjb3VudCwgMTAwMDAsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoYXR0cnMpKTtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucl9hY2Nlc3NlcyxcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzLFxuIFx0XHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMpXG4ge1xuLVx0cmV0dXJuIGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzKFxuLVx0XHRcdGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKFxuLVx0XHRcdFx0bnJfYWNjZXNzZXMsIG9sZF9hdHRycyksXG4mIzQzO1x0cmV0dXJuIGRhbW9uX3NhbXBsZV9icF90b19jb3VudChcbiYjNDM7XHRcdFx0ZGFtb25fc2FtcGxlX2NvdW50X3RvX2JwKG5yX2FjY2Vzc2VzLCBvbGRfYXR0cnMpLFxuIFx0XHRcdG5ld19hdHRycyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuJiM0MztcdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuJiM0MztcdFx0Ym9vbCBhZ2dyZWdhdGluZywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xuJiM0MztcdGludCBpID0gMDtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XG4mIzQzO1x0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcbiYjNDM7XHRcdFx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSwgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xuJiM0MztcdFx0aWYgKCFhZ2dyZWdhdGluZylcbiYjNDM7XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKFxuJiM0MztcdFx0XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldLCBvbGRfYXR0cnMsXG4mIzQzO1x0XHRcdFx0XHRuZXdfYXR0cnMpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xuJiM0MztcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsXG4tXHRcdGJvb2wgYWdncmVnYXRpbmcpXG4mIzQzO1x0XHRib29sIGFnZ3JlZ2F0aW5nLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4ge1xuLVx0ci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycyhcbiYjNDM7XHRkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhyLCBvbGRfYXR0cnMsIG5ld19hdHRycywgYWdncmVnYXRpbmcsIGN0eCk7XG4mIzQzO1xuJiM0MztcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcbiBcdFx0XHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbiBcdGlmICghYWdncmVnYXRpbmcpXG4tXHRcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKFxuJiM0MztcdFx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcbiBcdFx0XHRcdHItXHUwMDNlbnJfYWNjZXNzZXMsIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbiBcdGVsc2VcbiBcdFx0LypcbkBAIC05NDgsOCAmIzQzOzk2Niw4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFxuIFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eClcbiBcdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpXG4tXHRcdFx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KFxuLVx0XHRcdFx0XHRyLCBvbGRfYXR0cnMsIG5ld19hdHRycywgYWdncmVnYXRpbmcpO1xuJiM0MztcdFx0XHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgb2xkX2F0dHJzLCBuZXdfYXR0cnMsXG4mIzQzO1x0XHRcdFx0XHRhZ2dyZWdhdGluZywgY3R4KTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuaW5kZXggZThjMzg5YWQzMjI2ZjcuLjdlMDc3MDg0Y2IwM2FhIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vbHJ1X3NvcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuQEAgLTMwMyw3ICYjNDM7MzAzLDcgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0ZXJyID0gLUVOT01FTTtcbi1cdGhvdF90aHJlcyA9IGRhbW9uX21heF9ucl9hY2Nlc3NlcyhcdTAwMjZhdHRycykgKlxuJiM0MztcdGhvdF90aHJlcyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpICpcbiBcdFx0aG90X3RocmVzX2FjY2Vzc19mcmVxIC8gMTAwMDtcbiBcdGhvdF9zY2hlbWUgPSBkYW1vbl9scnVfc29ydF9uZXdfaG90X3NjaGVtZShob3RfdGhyZXMpO1xuIFx0aWYgKCFob3Rfc2NoZW1lKVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuaW5kZXggNmJkZDFjZmQzODYzYTMuLjg5YzY5NGY2ZTRmYTg5IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbkBAIC0xMTIsNyAmIzQzOzExMiw3IEBAIGludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdGludCBob3RuZXNzO1xuIFxuIFx0ZnJlcV9zdWJzY29yZSA9IHItXHUwMDNlbnJfYWNjZXNzZXMgKiBEQU1PTl9NQVhfU1VCU0NPUkUgL1xuLVx0XHRkYW1vbl9tYXhfbnJfYWNjZXNzZXMoXHUwMDI2Yy1cdTAwM2VhdHRycyk7XG4mIzQzO1x0XHRkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmMtXHUwMDNlYXR0cnMpO1xuIFxuIFx0YWdlX2luX3NlYyA9ICh1bnNpZ25lZCBsb25nKXItXHUwMDNlYWdlICogYy1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsIC8gMTAwMDAwMDtcbiBcdGlmIChhZ2VfaW5fc2VjKVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuaW5kZXggMDEyNGY4M2IzOWI4MzkuLjhlMDE0MzdlYjVlYTgxIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbkBAIC01NzUsNyAmIzQzOzU3NSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdH0sIDMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zYW1wbGVfY291bnRfdG9fYnAoc3RydWN0IGt1bml0ICp0ZXN0KVxuIHtcbiBcdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycyA9IHtcbiBcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEwLFxuQEAgLTU4NSw3ICYjNDM7NTg1LDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHQvKlxuIFx0ICogSW4gc29tZSBjYXNlcyBzdWNoIGFzIDMyYml0IGFyY2hpdGVjdHVyZXMgd2hlcmUgVUlOVF9NQVggaXNcbiBcdCAqIFVMT05HX01BWCwgYXR0cnMuYWdncl9pbnRlcnZhbCBiZWNvbWVzIHplcm8uICBDYWxsaW5nXG4tXHQgKiBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icCgpIGluIHRoZSBjYXNlIHdpbGwgY2F1c2VcbiYjNDM7XHQgKiBkYW1vbl9zYW1wbGVfY291bnRfdG9fYnAoKSBpbiB0aGUgY2FzZSB3aWxsIGNhdXNlXG4gXHQgKiBkaXZpZGUtYnktemVyby4gIFN1Y2ggY2FzZSBpcyBwcm9oaWJpdGVkIGluIG5vcm1hbCBleGVjdXRpb24gc2luY2VcbiBcdCAqIHRoZSBjYXV0aW9uIGlzIGRvY3VtZW50ZWQgb24gdGhlIGNvbW1lbnQgZm9yIHRoZSBmdW5jdGlvbiwgYW5kXG4gXHQgKiBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKCkgZG9lcyB0aGUgY2hlY2suICBTa2lwIHRoZSB0ZXN0IGluXG5AQCAtNTk0LDcgJiM0Mzs1OTQsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdGlmICghYXR0cnMuYWdncl9pbnRlcnZhbClcbiBcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDthZ2dyX2ludGVydmFsIGlzIHplcm8uXCYjMzQ7KTtcbiBcbi1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icCgxMjMsIFx1MDAyNmF0dHJzKSwgMCk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NhbXBsZV9jb3VudF90b19icCgxMjMsIFx1MDAyNmF0dHJzKSwgMCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBrdW5pdCAqdGVzdClcbkBAIC02MDMsMzIgJiM0Mzs2MDMsMzkgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHQuc2FtcGxlX2ludGVydmFsID0gMTAsIC5hZ2dyX2ludGVydmFsID0gMTAwMCx9O1xuIFx0c3RydWN0IGRhbW9uX2F0dHJzIG5ld19hdHRycztcbiBcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIgPSBkYW1vbl9uZXdfcmVnaW9uKDMsIDcpO1xuJiM0MztcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbiBcbiBcdGlmICghcilcbiBcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtyZWdpb24gYWxsb2MgZmFpbFwmIzM0Oyk7XG4mIzQzO1x0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xuJiM0MztcdGlmICghY3R4KSB7XG4mIzQzO1x0XHRkYW1vbl9mcmVlX3JlZ2lvbihyKTtcbiYjNDM7XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7Y3R4IGFsbG9jIGZhaWxcJiMzNDspO1xuJiM0MztcdH1cbiBcbiBcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSAxNTtcbiBcdHItXHUwMDNlYWdlID0gMjA7XG4gXG4gXHRuZXdfYXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbiBcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEwMCwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwMCx9O1xuLVx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFx1MDAyNm9sZF9hdHRycywgXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSk7XG4mIzQzO1x0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFx1MDAyNm9sZF9hdHRycywgXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSwgY3R4KTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZW5yX2FjY2Vzc2VzLCAxNSk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VhZ2UsIDIpO1xuIFxuIFx0bmV3X2F0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XG4gXHRcdC5zYW1wbGVfaW50ZXJ2YWwgPSAxLCAuYWdncl9pbnRlcnZhbCA9IDEwMDB9O1xuLVx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFx1MDAyNm9sZF9hdHRycywgXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSk7XG4mIzQzO1x0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFx1MDAyNm9sZF9hdHRycywgXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSwgY3R4KTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZW5yX2FjY2Vzc2VzLCAxNTApO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYWdlLCAyKTtcbiBcbiBcdG5ld19hdHRycyA9IChzdHJ1Y3QgZGFtb25fYXR0cnMpe1xuIFx0XHQuc2FtcGxlX2ludGVydmFsID0gMSwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDB9O1xuLVx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFx1MDAyNm9sZF9hdHRycywgXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSk7XG4mIzQzO1x0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFx1MDAyNm9sZF9hdHRycywgXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSwgY3R4KTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZW5yX2FjY2Vzc2VzLCAxNTApO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYWdlLCAyMCk7XG4gXG4gXHRkYW1vbl9mcmVlX3JlZ2lvbihyKTtcbiYjNDM7XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5AQCAtMTU3Miw3ICYjNDM7MTU3OSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9vcHNfcmVnaXN0cmF0aW9uKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zZXRfcmVnaW9ucyksXG4tXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnApLFxuJiM0MztcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zYW1wbGVfY291bnRfdG9fYnApLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdCksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9tdnN1bSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fTFJVX1NPUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zZXRfYXR0cnMmIzM0OywKICAgICYjMzQ7ZGFtb25fcHJvYmVfaGl0c19tdnN1bSYjMzQ7LAogICAgJiMzNDtkYW1vbl9ob3Rfc2NvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBEQU1PTiBsb2dpYyBmb3IgY2FsY3VsYXRpbmcgYW5kIHVwZGF0aW5nIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzLCBpbmNsdWRpbmcgYSBuZXcgY29uZGl0aW9uIGluIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0gYW5kIG5ldyBwcm9iZSBoaXQgdXBkYXRpbmcgbG9naWMgaW4gZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMuIEl0IGFsc28gcmVuYW1lcyBzZXZlcmFsIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHNhbXBsZSBjb3VudGluZyBhbmQgYWdncmVnYXRpb24uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgREFNT04gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDIzYzM2OTRhZWQ1MzIzN2I1ODY3MjJjY2RlMWYxZGI1NmNmNmE0MjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCA3IDEyOjI3OjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDE5YjdlODM5YmRlMGI0Li42M2Y1OTY5NTdjMWYxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaApAQCAtMTA1NiwxNSAmIzQzOzEwNTYsMTcgQEAgc3RhdGljIGlubGluZSBib29sIGRhbW9uX3RhcmdldF9oYXNfcGlkKGNvbnN0IHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIAlyZXR1cm4gY3R4LSZndDtvcHMuaWQgPT0gREFNT05fT1BTX1ZBRERSIHx8IGN0eC0mZ3Q7b3BzLmlkID09IERBTU9OX09QU19GVkFERFI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRhbW9uX21heF9ucl9hY2Nlc3Nlcyhjb25zdCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKQomIzQzOy8qIFJldHVybnMgbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGFnZ3JlZ2F0aW9uIGludGVydmFsICovCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncigKJiM0MzsJCWNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpCiB7CiAJdW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWw7Ci0JdW5zaWduZWQgbG9uZyBtYXhfbnJfYWNjZXNzZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfc2FtcGxlczsKIAogCXNhbXBsZV9pbnRlcnZhbCA9IGF0dHJzLSZndDtzYW1wbGVfaW50ZXJ2YWwgPyA6IDE7Ci0JbWF4X25yX2FjY2Vzc2VzID0gbWluKGF0dHJzLSZndDthZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsLAomIzQzOwlucl9zYW1wbGVzID0gbWluKGF0dHJzLSZndDthZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsLAogCQkJKHVuc2lnbmVkIGxvbmcpVUlOVF9NQVgpOwotCXJldHVybiBtYXhfbnJfYWNjZXNzZXMgPyA6IDE7CiYjNDM7CXJldHVybiBucl9zYW1wbGVzID8gOiAxOwogfQogCiAKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCAzOTBlMDBiMzY4NWVmYy4uMDkzZGE1YzBiMzY5MzQgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTI5MCw2ICYjNDM7MjkwLDkgQEAgdW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJCQljdHgtJmd0O3Bhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzOwogCWxlZnRfd2luZG93X2JwID0gbXVsdF9mcmFjKGxlZnRfd2luZG93LCAxMDAwMCwgd2luZG93X2xlbik7CiAKJiM0MzsJaWYgKGxlZnRfd2luZG93X2JwID09IDEwMDAwKQomIzQzOwkJcmV0dXJuIHItJmd0O2xhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdOwomIzQzOwogCXJldHVybiBkYW1vbl9tdnN1bShyLSZndDtwcm9iZV9oaXRzW3Byb2JlX2lkeF0sCiAJCQlyLSZndDtsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XSwgbGVmdF93aW5kb3dfYnApOwogfQpAQCAtODc2LDQzICYjNDM7ODc5LDU4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fYWdlX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IGFnZSwKIAlyZXR1cm4gYWdlICogb2xkX2F0dHJzLSZndDthZ2dyX2ludGVydmFsIC8gbmV3X2F0dHJzLSZndDthZ2dyX2ludGVydmFsOwogfQogCi0vKiBjb252ZXJ0IGFjY2VzcyByYXRpbyBpbiBicCAocGVyIDEwLDAwMCkgdG8gbnJfYWNjZXNzZXMgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXMoCi0JCXVuc2lnbmVkIGludCBhY2Nlc3Nlc19icCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycykKJiM0MzsvKiBjb252ZXJ0IHNhbXBsZSByYXRpbyBpbiBicCAocGVyIDEwLDAwMCkgdG8gY291bnQgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3NhbXBsZV9icF90b19jb3VudCgKJiM0MzsJCXVuc2lnbmVkIGludCBicCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycykKIHsKLQlyZXR1cm4gYWNjZXNzZXNfYnAgKiBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpIC8gMTAwMDA7CiYjNDM7CXJldHVybiBicCAqIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoYXR0cnMpIC8gMTAwMDA7CiB9CiAKLS8qCi0gKiBDb252ZXJ0IG5yX2FjY2Vzc2VzIHRvIGFjY2VzcyByYXRpbyBpbiBicCAocGVyIDEwLDAwMCkuCi0gKgotICogQ2FsbGVycyBzaG91bGQgZW5zdXJlIGF0dHJzLmFnZ3JfaW50ZXJ2YWwgaXMgbm90IHplcm8sIGxpa2UKLSAqIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoKSBkb2VzIC4gIE90aGVyd2lzZSwgZGl2aWRlLWJ5LXplcm8gd291bGQKLSAqIGhhcHBlbi4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icCgKLQkJdW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKQomIzQzOy8qIGNvbnZlcnQgc2FtcGxlIGNvdW50IHRvIHJhdGlvIGluIGJwIChwZXIgMTAsMDAwKSAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fc2FtcGxlX2NvdW50X3RvX2JwKAomIzQzOwkJdW5zaWduZWQgaW50IGNvdW50LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKQogewotCXJldHVybiBtdWx0X2ZyYWMobnJfYWNjZXNzZXMsIDEwMDAwLCBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpKTsKJiM0MzsJcmV0dXJuIG11bHRfZnJhYyhjb3VudCwgMTAwMDAsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoYXR0cnMpKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucl9hY2Nlc3NlcywKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyh1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMsCiAJCXN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycykKIHsKLQlyZXR1cm4gZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXMoCi0JCQlkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icCgKLQkJCQlucl9hY2Nlc3Nlcywgb2xkX2F0dHJzKSwKJiM0MzsJcmV0dXJuIGRhbW9uX3NhbXBsZV9icF90b19jb3VudCgKJiM0MzsJCQlkYW1vbl9zYW1wbGVfY291bnRfdG9fYnAobnJfYWNjZXNzZXMsIG9sZF9hdHRycyksCiAJCQluZXdfYXR0cnMpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKJiM0MzsJCXN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycywKJiM0MzsJCWJvb2wgYWdncmVnYXRpbmcsIHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcm9iZSAqcDsKJiM0MzsJaW50IGkgPSAwOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpIHsKJiM0MzsJCXItJmd0O2xhc3RfcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycygKJiM0MzsJCQkJci0mZ3Q7bGFzdF9wcm9iZV9oaXRzW2ldLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7CiYjNDM7CQlpZiAoIWFnZ3JlZ2F0aW5nKQomIzQzOwkJCXItJmd0O3Byb2JlX2hpdHNbaV0gPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoCiYjNDM7CQkJCQlyLSZndDtwcm9iZV9oaXRzW2ldLCBvbGRfYXR0cnMsCiYjNDM7CQkJCQluZXdfYXR0cnMpOwomIzQzOwkJZWxzZQomIzQzOwkJCXItJmd0O3Byb2JlX2hpdHNbaV0gPSAwOwomIzQzOwkJaSYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIAkJc3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLAotCQlib29sIGFnZ3JlZ2F0aW5nKQomIzQzOwkJYm9vbCBhZ2dyZWdhdGluZywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogewotCXItJmd0O2xhc3RfbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKAomIzQzOwlkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhyLCBvbGRfYXR0cnMsIG5ld19hdHRycywgYWdncmVnYXRpbmcsIGN0eCk7CiYjNDM7CiYjNDM7CXItJmd0O2xhc3RfbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoCiAJCQlyLSZndDtsYXN0X25yX2FjY2Vzc2VzLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7CiAJaWYgKCFhZ2dyZWdhdGluZykKLQkJci0mZ3Q7bnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKAomIzQzOwkJci0mZ3Q7bnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoCiAJCQkJci0mZ3Q7bnJfYWNjZXNzZXMsIG9sZF9hdHRycywgbmV3X2F0dHJzKTsKIAllbHNlCiAJCS8qCkBAIC05NDgsOCAmIzQzOzk2Niw4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAogCiAJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkKIAkJZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpCi0JCQlkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoCi0JCQkJCXIsIG9sZF9hdHRycywgbmV3X2F0dHJzLCBhZ2dyZWdhdGluZyk7CiYjNDM7CQkJZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIG9sZF9hdHRycywgbmV3X2F0dHJzLAomIzQzOwkJCQkJYWdncmVnYXRpbmcsIGN0eCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuYwppbmRleCBlOGMzODlhZDMyMjZmNy4uN2UwNzcwODRjYjAzYWEgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vbHJ1X3NvcnQuYwpAQCAtMzAzLDcgJiM0MzszMDMsNyBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZCkKIAkJZ290byBvdXQ7CiAKIAllcnIgPSAtRU5PTUVNOwotCWhvdF90aHJlcyA9IGRhbW9uX21heF9ucl9hY2Nlc3NlcygmYW1wO2F0dHJzKSAqCiYjNDM7CWhvdF90aHJlcyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoJmFtcDthdHRycykgKgogCQlob3RfdGhyZXNfYWNjZXNzX2ZyZXEgLyAxMDAwOwogCWhvdF9zY2hlbWUgPSBkYW1vbl9scnVfc29ydF9uZXdfaG90X3NjaGVtZShob3RfdGhyZXMpOwogCWlmICghaG90X3NjaGVtZSkKZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uYwppbmRleCA2YmRkMWNmZDM4NjNhMy4uODljNjk0ZjZlNGZhODkgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmMKQEAgLTExMiw3ICYjNDM7MTEyLDcgQEAgaW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCWludCBob3RuZXNzOwogCiAJZnJlcV9zdWJzY29yZSA9IHItJmd0O25yX2FjY2Vzc2VzICogREFNT05fTUFYX1NVQlNDT1JFIC8KLQkJZGFtb25fbWF4X25yX2FjY2Vzc2VzKCZhbXA7Yy0mZ3Q7YXR0cnMpOwomIzQzOwkJZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncigmYW1wO2MtJmd0O2F0dHJzKTsKIAogCWFnZV9pbl9zZWMgPSAodW5zaWduZWQgbG9uZylyLSZndDthZ2UgKiBjLSZndDthdHRycy5hZ2dyX2ludGVydmFsIC8gMTAwMDAwMDsKIAlpZiAoYWdlX2luX3NlYykKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaAppbmRleCAwMTI0ZjgzYjM5YjgzOS4uOGUwMTQzN2ViNWVhODEgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKQEAgLTU3NSw3ICYjNDM7NTc1LDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJCQl9LCAzKTsKIH0KIAotc3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zYW1wbGVfY291bnRfdG9fYnAoc3RydWN0IGt1bml0ICp0ZXN0KQogewogCXN0cnVjdCBkYW1vbl9hdHRycyBhdHRycyA9IHsKIAkJLnNhbXBsZV9pbnRlcnZhbCA9IDEwLApAQCAtNTg1LDcgJiM0Mzs1ODUsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAkvKgogCSAqIEluIHNvbWUgY2FzZXMgc3VjaCBhcyAzMmJpdCBhcmNoaXRlY3R1cmVzIHdoZXJlIFVJTlRfTUFYIGlzCiAJICogVUxPTkdfTUFYLCBhdHRycy5hZ2dyX2ludGVydmFsIGJlY29tZXMgemVyby4gIENhbGxpbmcKLQkgKiBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icCgpIGluIHRoZSBjYXNlIHdpbGwgY2F1c2UKJiM0MzsJICogZGFtb25fc2FtcGxlX2NvdW50X3RvX2JwKCkgaW4gdGhlIGNhc2Ugd2lsbCBjYXVzZQogCSAqIGRpdmlkZS1ieS16ZXJvLiAgU3VjaCBjYXNlIGlzIHByb2hpYml0ZWQgaW4gbm9ybWFsIGV4ZWN1dGlvbiBzaW5jZQogCSAqIHRoZSBjYXV0aW9uIGlzIGRvY3VtZW50ZWQgb24gdGhlIGNvbW1lbnQgZm9yIHRoZSBmdW5jdGlvbiwgYW5kCiAJICogZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0cygpIGRvZXMgdGhlIGNoZWNrLiAgU2tpcCB0aGUgdGVzdCBpbgpAQCAtNTk0LDcgJiM0Mzs1OTQsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAlpZiAoIWF0dHJzLmFnZ3JfaW50ZXJ2YWwpCiAJCWt1bml0X3NraXAodGVzdCwgJiMzNDthZ2dyX2ludGVydmFsIGlzIHplcm8uJiMzNDspOwogCi0JS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKDEyMywgJmFtcDthdHRycyksIDApOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2FtcGxlX2NvdW50X3RvX2JwKDEyMywgJmFtcDthdHRycyksIDApOwogfQogCiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3Qga3VuaXQgKnRlc3QpCkBAIC02MDMsMzIgJiM0Mzs2MDMsMzkgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KQogCQkuc2FtcGxlX2ludGVydmFsID0gMTAsIC5hZ2dyX2ludGVydmFsID0gMTAwMCx9OwogCXN0cnVjdCBkYW1vbl9hdHRycyBuZXdfYXR0cnM7CiAJc3RydWN0IGRhbW9uX3JlZ2lvbiAqciA9IGRhbW9uX25ld19yZWdpb24oMywgNyk7CiYjNDM7CXN0cnVjdCBkYW1vbl9jdHggKmN0eDsKIAogCWlmICghcikKIAkJa3VuaXRfc2tpcCh0ZXN0LCAmIzM0O3JlZ2lvbiBhbGxvYyBmYWlsJiMzNDspOwomIzQzOwljdHggPSBkYW1vbl9uZXdfY3R4KCk7CiYjNDM7CWlmICghY3R4KSB7CiYjNDM7CQlkYW1vbl9mcmVlX3JlZ2lvbihyKTsKJiM0MzsJCWt1bml0X3NraXAodGVzdCwgJiMzNDtjdHggYWxsb2MgZmFpbCYjMzQ7KTsKJiM0MzsJfQogCiAJci0mZ3Q7bnJfYWNjZXNzZXMgPSAxNTsKIAlyLSZndDthZ2UgPSAyMDsKIAogCW5ld19hdHRycyA9IChzdHJ1Y3QgZGFtb25fYXR0cnMpewogCQkuc2FtcGxlX2ludGVydmFsID0gMTAwLCAuYWdncl9pbnRlcnZhbCA9IDEwMDAwLH07Ci0JZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsICZhbXA7b2xkX2F0dHJzLCAmYW1wO25ld19hdHRycywgZmFsc2UpOwomIzQzOwlkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgJmFtcDtvbGRfYXR0cnMsICZhbXA7bmV3X2F0dHJzLCBmYWxzZSwgY3R4KTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7bnJfYWNjZXNzZXMsIDE1KTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7YWdlLCAyKTsKIAogCW5ld19hdHRycyA9IChzdHJ1Y3QgZGFtb25fYXR0cnMpewogCQkuc2FtcGxlX2ludGVydmFsID0gMSwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwfTsKLQlkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgJmFtcDtvbGRfYXR0cnMsICZhbXA7bmV3X2F0dHJzLCBmYWxzZSk7CiYjNDM7CWRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCAmYW1wO29sZF9hdHRycywgJmFtcDtuZXdfYXR0cnMsIGZhbHNlLCBjdHgpOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLSZndDtucl9hY2Nlc3NlcywgMTUwKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7YWdlLCAyKTsKIAogCW5ld19hdHRycyA9IChzdHJ1Y3QgZGFtb25fYXR0cnMpewogCQkuc2FtcGxlX2ludGVydmFsID0gMSwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDB9OwotCWRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCAmYW1wO29sZF9hdHRycywgJmFtcDtuZXdfYXR0cnMsIGZhbHNlKTsKJiM0MzsJZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsICZhbXA7b2xkX2F0dHJzLCAmYW1wO25ld19hdHRycywgZmFsc2UsIGN0eCk7CiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O25yX2FjY2Vzc2VzLCAxNTApOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLSZndDthZ2UsIDIwKTsKIAogCWRhbW9uX2ZyZWVfcmVnaW9uKHIpOwomIzQzOwlkYW1vbl9kZXN0cm95X2N0eChjdHgpOwogfQogCiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCkBAIC0xNTcyLDcgJiM0MzsxNTc5LDcgQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHsKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbiksCiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9yZWdpb25zKSwKLQlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnApLAomIzQzOwlLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2FtcGxlX2NvdW50X3RvX2JwKSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbXZzdW0pLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDAyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gQ29yZSBDb2RlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIERBTU9OIGNvcmUgY29kZSBwYXRjaC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGEgcmVmYWN0b3JpbmcgZXhlcmNpc2UsIHdoaWNoIGlzIHVzdWFsbHkgYSBnb29kIHRoaW5nIGZvciBtYWludGFpbmFiaWxpdHkuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIHJlbmFtaW5nIGEgYnVuY2ggb2YgdmFyaWFibGVzOiBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYCBpcyBub3cgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgLCBgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNgIGlzIG5vdyBgZGFtb25fc2FtcGxlX2JwX3RvX2NvdW50YCwgYW5kIHNvIG9uLiBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBqdXN0IGNsYXJpZnlpbmcgdGhlIGludGVudCBhbmQgdW5pdHMsIGxpa2VseSB0byBpbXByb3ZlIHJlYWRhYmlsaXR5LgoKQmV5b25kIHRoZSByZW5hbWluZywgdGhlIG1lYXQgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgYWRkaXRpb24gb2YgYGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzYC4gVGhpcyBmdW5jdGlvbiwgZnJvbSB3aGF0IEkgY2FuIHRlbGwsIHVwZGF0ZXMgdGhlIGByLSZndDtsYXN0X3Byb2JlX2hpdHNgIGFuZCBgci0mZ3Q7cHJvYmVfaGl0c2AgZmllbGRzIGJhc2VkIG9uIHRoZSBvbGQgYW5kIG5ldyBhdHRyaWJ1dGVzLiBUaGF0JiMzOTtzIGEga2V5IGFkZGl0aW9uLCBpbXBseWluZyBhIGNoYW5nZSBpbiBob3cgaGl0IGNvdW50cyBhcmUgbWFuYWdlZCBhbmQgdXBkYXRlZCB3aXRoaW4gdGhlIG1vbml0b3JpbmcgcHJvY2Vzcy4gQW5kLCBpbXBvcnRhbnRseSwgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdGAgbm93IGNhbGxzIHRoaXMgbmV3IGZ1bmN0aW9uIHdoaWNoIHRlbGxzIG1lIGl0JiMzOTtzIGJlZW4gaW50ZWdyYXRlZCBpbnRvIHRoZSBjb3JlIHdvcmtmbG93LgoKTG9va2luZyBhdCBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAsIHRoZXJlJiMzOTtzIGEgbmV3IGNvbmRpdGlvbiBpbiB0aGVyZSB0b28uIFNwZWNpZmljYWxseSwgaWYgYGxlZnRfd2luZG93X2JwID09IDEwMDAwYCwgaXQgbm93IHJldHVybnMgYHItJmd0O2xhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdYC4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIHJlbmFtaW5nLCBhbmQgd29ydGggbm90aW5nLiBTZWVtcyBsaWtlIGEgc3BlY2lmaWMgb3B0aW1pemF0aW9uIG9yIHNob3J0Y3V0IGZvciBhIHBhcnRpY3VsYXIgd2luZG93IHNpemUuIEkmIzM5O2QgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdCBjb25kaXRpb24sIGJ1dCBpdCYjMzk7cyBjbGVhcmx5IGEgZGVsaWJlcmF0ZSBhZGRpdGlvbi4KCk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgREFNT04gdG8gZnVuY3Rpb24gd2l0aCB0aGlzIHBhdGNoLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGVpdGhlciBgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0YCBvciBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgdG8gc2VlIHdoYXQgQ09ORklHIG9wdGlvbnMgYXJlIGludm9sdmVkLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBlbmFibGVkIGNvcnJlY3RseSB0byB0ZXN0IHRoZSBmdWxsIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3Byb2JlX2hpdHNfbXZzdW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTEwMDU9dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAwNi1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDA3OnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwMDgtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG4tLVxubW0vZGFtb24vY29yZS5jPTI1Mj11bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjc1LVxubW0vZGFtb24vY29yZS5jOjI3Njp1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYy0yNzctXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9OTA9c3RhdGljIGludCBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyAqcHJvYmVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMTMtXHRcdHN5c19wcm9iZSA9IGRhbW9zX3N5c2ZzX3Byb2JlX2FsbG9jKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjExNDpcdFx0XHRcdGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSwgcmVnaW9uLCBjdHgpKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMTUtXHRcdGlmICghc3lzX3Byb2JlKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY1OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBtbS9kYW1vbi9jb3JlLmMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyBgbW0vZGFtb24vY29yZS5jYC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZGVidWdnaW5nIHRhc2suIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcGFydCBvZiBEQU1PTiwgd2hpY2ggaXMgbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7ZCBkbyBpcyB1c2UgdGhlIHN0YW5kYXJkIHRvb2xzIGZvciB0aGlzLiBgZ2l0IGdyZXBgIHNob3VsZCBiZSBteSBmcmllbmQgaGVyZS4gSSYjMzk7ZCBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggdGhlIGBLY29uZmlnYCBmaWxlcy4gSSYjMzk7ZCBuZWVkIHRvIGxvb2sgZm9yIGFueSByZWZlcmVuY2VzLCBjb25kaXRpb25hbHMsIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGluY2x1ZGUgaXQsIG9yIGRpcmVjdGx5IG1lbnRpb24gdGhlIGZpbGUgaXRzZWxmIG9yIGl0cyBhc3NvY2lhdGVkIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2QgbGlrZWx5IGFsc28gY2hlY2sgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaW50cyB0aGVyZSBhYm91dCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KClNpbmNlIEkgYW0gZmFtaWxpYXIgd2l0aCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gcHJvY2VzcywgSSB3aWxsIHRyeSB0byBzZWUgd2hhdCBmZWF0dXJlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoYXQgZmlsZSBhbmQgc2VhcmNoIHVzaW5nIHRob3NlIGZlYXR1cmVzLgpJIGFtIGNvbWZvcnRhYmxlIGdvaW5nIHRocm91Z2ggdGhlIEtjb25maWcgZmlsZXMsIEkgbmVlZCB0byBrbm93IHRoZSBmZWF0dXJlcyBhc3NvY2lhdGVkIHdpdGggYG1tL2RhbW9uL2NvcmUuY2Agc28gSSBjYW4gc2VlIHdoYXQgSSBjYW4gc2VhcmNoIGZvci4KT25jZSBJIGhhdmUgYSByZWFzb25hYmxlIGxlYWQgZnJvbSB0aGUgaW5pdGlhbCBzZWFyY2gsIEkgY2FuIHJlZmluZSBpdCBmdXJ0aGVyIHRvIG5hcnJvdyB0aGUgb3B0aW9ucyBkb3duLiBJIG1pZ2h0IGFsc28gbG9vayBhdCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIHdpdGhpbiB0aGUgc291cmNlIGNvZGUgaXRzZWxmLCBhcyB0aG9zZSBtaWdodCBvZmZlciBjbHVlcy4gVWx0aW1hdGVseSwgaXTigJlzIGEgcHJvY2VzcyBvZiBlbGltaW5hdGlvbiBhbmQgcGF0dGVybiBtYXRjaGluZyB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbSB1bnRpbCBJIGZpbmQgdGhlIHJlc3BvbnNpYmxlIGNvbmZpZyBzeW1ib2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29yZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZS0yLVxubW0vZGFtb24vTWFrZWZpbGU6MzpvYmoteVx0XHRcdFx0Oj0gY29yZS5vXG5tbS9kYW1vbi9NYWtlZmlsZS00LW9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMDMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqTWFrZWZpbGUgSW52ZXN0aWdhdGlvbjogYG1tL2RhbW9uL2AgSW5jbHVzaW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIEkmIzM5O20gc3RhcmluZyBhdCBgbW0vZGFtb24vTWFrZWZpbGVgLCBhbmQgdGhlIGtleSBsaW5lIGhlcmUgaXMgYG9iai15IDo9IGNvcmUub2AuIE9rYXksIHN0YW5kYXJkIGVub3VnaDogdGhpcyB0ZWxscyB0aGUgYnVpbGQgc3lzdGVtIHRvIGluY2x1ZGUgYGNvcmUub2Agd2hlbiBidWlsZGluZyB0aGUgYG1tL2RhbW9uYCBjb21wb25lbnQuIEJ1dCBub3cgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IHBvcHM6ICp3aGF0KiBpbmNsdWRlcyBgbW0vZGFtb25gIGluIHRoZSBmaXJzdCBwbGFjZT8gV2hlcmUgaXMgdGhpcyBkaXJlY3RvcnkgZ2V0dGluZyBwdWxsZWQgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgYnVpbGQ/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGRlcGVuZGVuY3kgYmFjayB1cCB0aGUgY2hhaW4uIFVuZGVyc3RhbmRpbmcgdGhlIGhpZ2hlci1sZXZlbCBNYWtlZmlsZSBzdHJ1Y3R1cmUgaXMgdml0YWwuIElzIGl0IGluY2x1ZGVkIGRpcmVjdGx5IGluIGEgcGFyZW50IGRpcmVjdG9yeSYjMzk7cyBgb2JqLXlgIG9yIGBvYmotbWAgZGVmaW5pdGlvbj8gT3IgaXMgdGhlcmUgc29tZSBpbmRpcmVjdCBpbmNsdXNpb24gdmlhIGEgbW9kdWxlIGRlcGVuZGVuY3kgb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbj8gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCBkaWdnaW5nIHRocm91Z2ggdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0gY2FuIGJlIGZydXN0cmF0aW5nLiBHb3R0YSBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmN5IHRyZWUgdG8gc2VlIGhvdyBgbW0vZGFtb25gIGdldHMgYmFrZWQgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMzQ9b2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSAmIzQzOz0gZGVidWdfcGFnZV9yZWYub1xubW0vTWFrZWZpbGU6MTM1Om9iai0kKENPTkZJR19EQU1PTikgJiM0Mzs9IGRhbW9uL1xubW0vTWFrZWZpbGUtMTM2LW9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgJiM0Mzs9IHVzZXJjb3B5Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDc2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gREFNT04gQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSBzZWUgdGhpcyByZXF1aXJlbWVudCBmb3IgYENPTkZJR19EQU1PTmAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCB0aGUgY29yZSBvZiBEeW5hbWljIEFjY2VzcyBNb25pdG9yaW5nIChEQU1PTikuIEJ1dCBJIGtub3cgREFNT04gaGFzIGEgbG90IG9mIGZsZXhpYmlsaXR5LCBzbyBJIG5lZWQgdG8gdGhpbmsgYmV5b25kIGp1c3QgdGhlIGJhc2Ugc2V0dGluZy4gTGV0JiMzOTtzIHNlZS4uLiB3aGF0IGFib3V0IHRob3NlIGZpbmVyLWdyYWluZWQgY29udHJvbHM/IEkgd29uZGVyIGlmIEkgbmVlZCB0byBlbmFibGUgc3BlY2lmaWMgYXNwZWN0cyBsaWtlIGBDT05GSUdfREFNT05fVkFERFJgLCB3aGljaCBpbXBsaWVzIFZpcnR1YWwgQWRkcmVzcyBtb25pdG9yaW5nLCBvciBwZXJoYXBzIGBDT05GSUdfREFNT05fUEFERFJgLCBmb3IgUGh5c2ljYWwgQWRkcmVzcyBtb25pdG9yaW5nIOKAkyB2ZXJ5IGRpZmZlcmVudCB1c2UgY2FzZXMgdGhlcmUgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0mIzM5O3MgbmVlZHMgYW5kIGhvdyBJIGludGVuZCB0byB1c2UgaXQuIEFuZCB0aGVuIGBDT05GSUdfREFNT05fU1lTRlNgIGlzIGNydWNpYWwgaWYgSSB3YW50IHRvIGFjdHVhbGx5ICppbnRlcmFjdCogd2l0aCBEQU1PTiB0aHJvdWdoIHRoZSBmaWxlc3lzdGVtIGludGVyZmFjZS4KCk9rYXksIGJlc3QgYmV0IGlzIHRvIGNoZWNrIHRoZSBkZWZpbml0aXZlIHNvdXJjZTogdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFsb25nIHdpdGggdGhlaXIgZGVwZW5kZW5jaWVzLCBkZXNjcmlwdGlvbnMsIGFuZCBsaWtlbHksIGRlZmF1bHQgdmFsdWVzLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhbmQgZ2V0IHRoZSByaWdodCBjaG9pY2VzIHNlbGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTU1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2gmIzM5O3MgU2NvcGUqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL2xydV9zb3J0LmNgLCBhbmQgYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIGFuZCBhIHRlc3QgaGVhZGVyLCBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSW1tZWRpYXRlbHksIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9MUlVfU09SVGAsIGFuZCBgQ09ORklHX0RBTU9OX1ZBRERSYCBhcmUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlLiBUaGF0IGNvdmVycyB0aGUgbWFqb3JpdHkgb2YgdGhlIGNoYW5nZXMsIGl0IHNlZW1zLgoKQnV0IGhvbGQgb24uLi4gYG1tL2RhbW9uL29wcy1jb21tb24uY2Ag4oCTIHRoYXQgb25lIHNvbWV0aW1lcyB0cmlwcyBwZW9wbGUgdXAuIFRoYXQgZmlsZSBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gKmVpdGhlciogYENPTkZJR19EQU1PTl9WQUREUmAgKm9yKiBgQ09ORklHX0RBTU9OX1BBRERSYCBpcyBlbmFibGVkLiBCZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBgTWFrZWZpbGVgIGluIGBtbS9kYW1vbi9gIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBjb3JyZWN0bHkuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIHNlZWluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gTm8gYXNzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29wcy1jb21tb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZT0zPW9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbm1tL2RhbW9uL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyB2YWRkci5vXG5tbS9kYW1vbi9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xubW0vZGFtb24vTWFrZWZpbGUtNi1vYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA4OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgREFNT04gQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9MUlVfU09SVGAgY29uZmlndXJhdGlvbnMgYXJlIGFsbCByZWxldmFudCBhbmQgc291bmQgbGlrZSBhIHNvbGlkIGZvdW5kYXRpb24uIE5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgZm9yIHRoaXMgcGFydGljdWxhciBhcmVhIG9mIGludmVzdGlnYXRpb24uIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2U6IGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRgLCBgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHNgLCBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAsIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYCwgYW5kIGBkYW1vbl9ob3Rfc2NvcmVgLgoKTmV4dCwgSSBuZWVkZWQgdG8gY2hlY2sgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGFuZCBpZiB0aGV5JiMzOTtyZSBhY2Nlc3NpYmxlLiBJdCBsb29rcyBsaWtlIGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRgIGFuZCBgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHNgIGFyZSBzdGF0aWNhbGx5IGRlZmluZWQgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLCB3aGljaCBtZWFucyB0aGVpciBzY29wZSBpcyBsaW1pdGVkIHdpdGhpbiB0aGF0IGZpbGUuIEhvd2V2ZXIsIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBpcyBleHBvcnRlZCwgbWFraW5nIGl0IGdsb2JhbGx5IGFjY2Vzc2libGUgZnJvbSBgbW0vZGFtb24vY29yZS5jYC4gVGhlbiBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AgaXMgc3RhdGljIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhbmQgYGRhbW9uX2hvdF9zY29yZWAgaXMgZ2xvYmFsIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLgoKRmluYWxseSwgaXQgc2VlbXMgd2lzZSB0byBhbHNvIGxvb2sgYXQgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHNgIGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggdGhlIHN0YXRpYyBmdW5jdGlvbiBgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9OTI0PXN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy05NTMtICovXG5tbS9kYW1vbi9jb3JlLmM6OTU0OnN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vY29yZS5jLTk1NS1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsIGJvb2wgYWdncmVnYXRpbmcpXG4tLVxubW0vZGFtb24vY29yZS5jPTEwMTI9aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwNDEtXG5tbS9kYW1vbi9jb3JlLmM6MTA0MjpcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoY3R4LCBhdHRycywgYWdncmVnYXRpbmcpO1xubW0vZGFtb24vY29yZS5jLTEwNDMtXHRjdHgtXHUwMDNlYXR0cnMgPSAqYXR0cnM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBEYW1vbiBVcGRhdGUgUGF0aCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGl0IGxvb2tzIGxpa2UgYGRhbW9uX3NldF9hdHRyc2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoZSBgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0c2AgZnVuY3Rpb24uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCB0aGF0IHNldHMgdGhlIHN0YWdlIGZvciB3aGVyZSB0aGUgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBpcyBsaWtlbHkgdG8gYmUga2lja2VkIG9mZi4gTm93LCBzaW5jZSB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB1cGRhdGVzLCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYC4gVGhpcyBzZWVtcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIG1vbml0b3JpbmcgcmVzdWx0cyBhcmUgYWN0dWFsbHkgY29sbGVjdGVkIGFuZCBhZ2dyZWdhdGVkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IGludGVncmF0ZXMgd2l0aCB0aGUgdXBkYXRlIHByb2Nlc3MgYW5kIHNlZSB3aGVyZSB0aGVyZSBtaWdodCBiZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fcHJvYmVfaGl0c19tdnN1bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjUyPXVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzUtXG5tbS9kYW1vbi9jb3JlLmM6Mjc2OnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTI3Ny1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MD1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpwcm9iZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExMy1cdFx0c3lzX3Byb2JlID0gZGFtb3Nfc3lzZnNfcHJvYmVfYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE0Olx0XHRcdFx0ZGFtb25fcHJvYmVfaGl0c19tdnN1bShpLCByZWdpb24sIGN0eCkpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExNS1cdFx0aWYgKCFzeXNfcHJvYmUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NDUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipOYXZpZ2F0aW5nIHRoZSBEQU1PTiBDb2RlYmFzZTogQSBUcmFjZSBvZiBEYXRhIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBEQU1PTiBjb2RlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtb25pdG9yaW5nIGRhdGEgZ2V0cyBwcm9jZXNzZWQgYW5kIHByb3BhZ2F0ZWQuIEkmIzM5O3ZlIHRyYWNrZWQgZG93biB0aGF0IGBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnNgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgdG8gY2FsbCBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyB3aGVyZSB0aGUgcmF3IHByb2JlIGhpdHMgYXJlIGJlaW5nIGFnZ3JlZ2F0ZWQsIHBvc3NpYmx5IGludG8gc29tZSBtb3Zpbmcgc3VtIG9yIHNpbWlsYXIgc3RhdGlzdGljYWwgc3VtbWFyeS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLgoKVGhlbiwgSSBzZWUgdGhhdCB3aGVuIGBkYW1vbl9zZXRfYXR0cnNgIGlzIGNhbGxlZCwgaXQgdHJpZ2dlcnMgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHNgLiBUaGlzIGlzIGdvb2QsIGl0IGlzIGxpa2VseSB3aGVyZSB0aGUgZmluYWwgYXR0cmlidXRlcyB0aGF0IHRyaWdnZXIgbWVtb3J5IHJlY2xhaW0gYXJlIGNhbGN1bGF0ZWQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGZpbmFsIHN0ZXBzIG9yIGlmIGl0IGhhcyBzb21lIGludGVybWVkaWF0ZSBmdW5jdGlvbmFsaXR5LgoKSSB0aGluayB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYC4gVGhpcyBzZWVtcyB0byBiZSB3aGVyZSB0aGUgTFJVIHNvcnRpbmcgYXNwZWN0IGNvbWVzIGludG8gcGxheSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGUgbWVtb3J5IHJlY2xhaW0gb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBjb3JyZWN0bHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIHByb2Nlc3MgaXMgYW5kIHdoaWNoIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHRha2VuIGludG8gYWNjb3VudCBieSB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBGcm9tIHRoZSBmdW5jdGlvbiBuYW1lLCBJJiMzOTtkIGV4cGVjdCBpdCB0byBpbmNvcnBvcmF0ZSBzb21lIG9mIHRoZSByZXN1bHRzIG9mIHRoZSBtb25pdG9yaW5nIGludG8gc29ydGluZyBhbmQgc2VsZWN0aW9uIG9mIHRoZSBwYWdlcywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBhY3R1YWwgZmxvdy4gSSBuZWVkIHRvIG1hcCB0aGUgb3V0cHV0IG9mIHRoZSBtb25pdG9yaW5nIHRvIHRoZSBwYWdlIHNlbGVjdGlvbiBmb3IgcmVjbGFpbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2xydV9zb3J0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vbHJ1X3NvcnQuYz0yNDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNzAtXG5tbS9kYW1vbi9scnVfc29ydC5jOjI3MTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjcyLXtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTM0Mj1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDMte1xubW0vZGFtb24vbHJ1X3NvcnQuYzozNDQ6XHRyZXR1cm4gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDUtfVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDA4PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE2LVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0MTc6XHRlcnIgPSBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKCk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTQxOC1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjA5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcywgc3BlYWtpbmcgYXMgYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6CgoqKkRpdmluZyBEZWVwIGludG8gREFNT04mIzM5O3MgTFJVIFNvcnRpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgYm90aCBgZGFtb25fbHJ1X3NvcnRfdHVybmAgYW5kIGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuYCBhcmUgdWx0aW1hdGVseSBjYWxsaW5nIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBzdWdnZXN0cyBhIGNvbW1vbiBwYXJhbWV0ZXIgYXBwbGljYXRpb24gcGF0aCBmb3IgdGhlc2Ugc2VlbWluZ2x5IGRpc3RpbmN0IExSVSBzb3J0aW5nIG9wZXJhdGlvbnMgd2l0aGluIERBTU9OLiBUaGlzIGltcGxpZXMgYSBjZW50cmFsaXplZCBtZWNoYW5pc20gZm9yIGNvbmZpZ3VyaW5nIGFuZCBhcHBseWluZyB0aGUgcnVsZXMgZm9yIGhvdyB0aGUgTFJVIGxpc3RzIGFyZSBtYW5hZ2VkIGFuZCBhZGp1c3RlZCBkdXJpbmcgdGhlaXIgdHVybnMgYW5kIGNvbW1pdG1lbnQgb2YgaW5wdXQgb3BlcmF0aW9ucy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IHdoYXQgYXJlIHRoZSBwYXJhbWV0ZXJzPyBBbmQsIG1vcmUgaW1wb3J0YW50bHksIGhvdyBhcmUgdGhleSAqYWZmZWN0aW5nKiB0aGUgc29ydGluZyBwcm9jZXNzLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIGhvdyBgZGFtb25faG90X3Njb3JlYCBmYWN0b3JzIGludG8gdGhpcyB3aG9sZSB0aGluZy4gSXMgYGRhbW9uX2hvdF9zY29yZWAgb25lIG9mIHRoZSBrZXkgcGFyYW1ldGVycyBiZWluZyBhcHBsaWVkPyBJcyBpdCBhIGtleSBkZXRlcm1pbmFudCBpbiBob3cgREFNT04gZGVjaWRlcyB0byBzb3J0IGFuZCBtYW5hZ2UgdGhlIExSVSBsaXN0cz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uc3RpdHV0ZXMgYSBob3Qgc2NvcmUsIHRoZSB3ZWlnaHRpbmcgb2YgdmFyaW91cyBob3Qgc2NvcmUgcGFyYW1ldGVycywgYW5kIGhvdyB0aGVzZSBkaXJlY3RseSBpbXBhY3QgdGhlIHNvcnRpbmcgbG9naWMgd2l0aGluIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYC4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIHJlYWwgaW5zaWdodHMgaW50byB0aGUgcGVyZm9ybWFuY2UgdHVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9ob3Rfc2NvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vb3BzLWNvbW1vbi5jPTczPXZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMDMtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTA0OmludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMDUtXHRcdFx0c3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0xNDk9aW50IGRhbW9uX2NvbGRfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTUxLXtcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxNTI6XHRpbnQgaG90bmVzcyA9IGRhbW9uX2hvdF9zY29yZShjLCByLCBzKTtcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNTMtXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5oPTE1PWludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTYtXHRcdFx0c3RydWN0IGRhbW9zICpzKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxNzppbnQgZGFtb25faG90X3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTgtXHRcdFx0c3RydWN0IGRhbW9zICpzKTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTQxNz1zdGF0aWMgaW50IGRhbW9uX3BhX3NjaGVtZV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDIzLVx0Y2FzZSBEQU1PU19MUlVfUFJJTzpcbm1tL2RhbW9uL3BhZGRyLmM6NDI0Olx0XHRyZXR1cm4gZGFtb25faG90X3Njb3JlKGNvbnRleHQsIHIsIHNjaGVtZSk7XG5tbS9kYW1vbi9wYWRkci5jLTQyNS1cdGNhc2UgREFNT1NfTFJVX0RFUFJJTzpcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTQyNy1cdGNhc2UgREFNT1NfTUlHUkFURV9IT1Q6XG5tbS9kYW1vbi9wYWRkci5jOjQyODpcdFx0cmV0dXJuIGRhbW9uX2hvdF9zY29yZShjb250ZXh0LCByLCBzY2hlbWUpO1xubW0vZGFtb24vcGFkZHIuYy00MjktXHRjYXNlIERBTU9TX01JR1JBVEVfQ09MRDpcbi0tXG5tbS9kYW1vbi92YWRkci5jPTkzOD1zdGF0aWMgaW50IGRhbW9uX3ZhX3NjaGVtZV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtOTQ1LVx0Y2FzZSBEQU1PU19NSUdSQVRFX0hPVDpcbm1tL2RhbW9uL3ZhZGRyLmM6OTQ2Olx0XHRyZXR1cm4gZGFtb25faG90X3Njb3JlKGNvbnRleHQsIHIsIHNjaGVtZSk7XG5tbS9kYW1vbi92YWRkci5jLTk0Ny1cdGNhc2UgREFNT1NfTUlHUkFURV9DT0xEOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI4NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBEQU1PTiBTeW1ib2wgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIHNlZSwgaXQgbG9va3MgbGlrZSBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3Byb2JlX2hpdHNfbXZzdW1gLCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGFuZCBgZGFtb25faG90X3Njb3JlYCBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIHN5bWJvbHMgdG8gZGVsdmUgaW50byBoZXJlLiBTcGVjaWZpY2FsbHksIEkgdGhpbmsgYGRhbW9uX3NldF9hdHRyc2AgaXMgYSBzdHJvbmcgY29udGVuZGVyIHRvIHN0YXJ0IHdpdGguIFRoZW4sIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBzZWVtcyByZWxldmFudCBhcyB3ZWxsLiAKCkhtbSwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgb2YgYSB3cmlua2xlLiBNYXliZSBgZGFtb25fbHJ1X3NvcnRfdHVybmAgb3IgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm5gIHdvdWxkIGJlIG1vcmUgZnJ1aXRmdWwgaW4gdGhhdCBjYXNlPyBPbiBzZWNvbmQgdGhvdWdodCwgc2luY2Ugc3l6a2FsbGVyIGNhbiBwb3RlbnRpYWxseSBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgaWYgcmVhY2hhYmxlLCBwZXJoYXBzIGBkYW1vbl9zZXRfYXR0cnNgIGlzIHRoZSBiZXN0IGJldCBzaW5jZSBpdCBpcyBleHBvcnRlZCBhbmQgbGlrZWx5IGdsb2JhbC4gSXQmIzM5O3MgYmVzdCB0byB2ZXJpZnkgdGhpcyB0aG91Z2guIFRpbWUgdG8gY29uZmlybSBpZiBgZGFtb25fc2V0X2F0dHJzYCBpcyBhY3R1YWxseSBnbG9iYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3NldF9hdHRycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9OTc3PXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTk5Mi0vKipcbm1tL2RhbW9uL2NvcmUuYzo5OTM6ICogZGFtb25fc2V0X2F0dHJzKCkgLSBTZXQgYXR0cmlidXRlcyBmb3IgdGhlIG1vbml0b3JpbmcuXG5tbS9kYW1vbi9jb3JlLmMtOTk0LSAqIEBjdHg6XHRcdG1vbml0b3JpbmcgY29udGV4dFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDExLSAqL1xubW0vZGFtb24vY29yZS5jOjEwMTI6aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG5tbS9kYW1vbi9jb3JlLmMtMTAxMy17XG4tLVxubW0vZGFtb24vY29yZS5jPTE2ODU9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE3MTUtXHQgKiBzY2hlbWVzIGFuZCB0YXJnZXRzIHNob3VsZCBiZSB1cGRhdGVkIGZpcnN0LCBzaW5jZVxubW0vZGFtb24vY29yZS5jOjE3MTY6XHQgKiAxLiBkYW1vbl9zZXRfYXR0cnMoKSB1cGRhdGVzIG1vbml0b3JpbmcgcmVzdWx0cyBvZiB0YXJnZXRzIGFuZFxubW0vZGFtb24vY29yZS5jLTE3MTctXHQgKiBuZXh0X2FwcGx5X3NpcyBvZiBzY2hlbWVzLCBhbmRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTcyMS1cdGlmICghZGFtb25fYXR0cnNfZXF1YWxzKFx1MDAyNmRzdC1cdTAwM2VhdHRycywgXHUwMDI2c3JjLVx1MDAzZWF0dHJzKSkge1xubW0vZGFtb24vY29yZS5jOjE3MjI6XHRcdGVyciA9IGRhbW9uX3NldF9hdHRycyhkc3QsIFx1MDAyNnNyYy1cdTAwM2VhdHRycyk7XG5tbS9kYW1vbi9jb3JlLmMtMTcyMy1cdFx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMTgzPXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZCBrZGFtb25kX3R1bmVfaW50ZXJ2YWxzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIyMDEtXHR0cmFjZV9kYW1vbl9tb25pdG9yX2ludGVydmFsc190dW5lKG5ld19hdHRycy5zYW1wbGVfaW50ZXJ2YWwpO1xubW0vZGFtb24vY29yZS5jOjIyMDI6XHRkYW1vbl9zZXRfYXR0cnMoYywgXHUwMDI2bmV3X2F0dHJzKTtcbm1tL2RhbW9uL2NvcmUuYy0yMjAzLX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzY0ND1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzY3My1cdFx0ICogYmUgY2hhbmdlZCBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgUmVhZCB0aGUgdmFsdWVzIGhlcmUsIGFuZFxubW0vZGFtb24vY29yZS5jOjM2NzQ6XHRcdCAqIHVzZSB0aG9zZSBmb3IgdGhpcyBpdGVyYXRpb24uICBUaGF0IGlzLCBkYW1vbl9zZXRfYXR0cnMoKVxubW0vZGFtb24vY29yZS5jLTM2NzUtXHRcdCAqIHVwZGF0ZWQgbmV3IHZhbHVlcyBhcmUgcmVzcGVjdGVkIGZyb20gbmV4dCBpdGVyYXRpb24uXG4tLVxubW0vZGFtb24vY29yZS5jLTM3MzQtXHRcdFx0XHQgKiBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgSW4gdGhlIGNhc2UsXG5tbS9kYW1vbi9jb3JlLmM6MzczNTpcdFx0XHRcdCAqIGRhbW9uX3NldF9hdHRycygpIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGZyb21cbm1tL2RhbW9uL2NvcmUuYy0zNzM2LVx0XHRcdFx0ICoga2RhbW9uZF90dW5lX2ludGVydmFsKCkgbWF5IHdyb25nbHkgdGhpbmtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTI3MT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTMwMC1cdH1cbm1tL2RhbW9uL2xydV9zb3J0LmM6MzAxOlx0ZXJyID0gZGFtb25fc2V0X2F0dHJzKHBhcmFtX2N0eCwgXHUwMDI2YXR0cnMpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zMDItXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjI0LVx0fVxubW0vZGFtb24vcmVjbGFpbS5jOjIyNTpcdGVyciA9IGRhbW9uX3NldF9hdHRycyhwYXJhbV9jdHgsIFx1MDAyNmF0dHJzKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMjYtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3N0YXQuYz0xNTE9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N0YXRfYnVpbGRfY3R4KHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTE3NS1cdH07XG5tbS9kYW1vbi9zdGF0LmM6MTc2Olx0aWYgKGRhbW9uX3NldF9hdHRycyhjdHgsIFx1MDAyNmF0dHJzKSlcbm1tL2RhbW9uL3N0YXQuYy0xNzctXHRcdGdvdG8gZnJlZV9vdXQ7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xODg5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE5MDgtXHR9O1xubW0vZGFtb24vc3lzZnMuYzoxOTA5Olx0cmV0dXJuIGRhbW9uX3NldF9hdHRycyhjdHgsIFx1MDAyNmF0dHJzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMTkxMC19XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTY0MT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY1MS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2NTI6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNnZhbGlkX2F0dHJzKSwgMCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjUzLVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02NTUtXHRpbnZhbGlkX2F0dHJzLm1pbl9ucl9yZWdpb25zID0gMTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2NTY6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02NTctXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY1OS1cdGludmFsaWRfYXR0cnMubWF4X25yX3JlZ2lvbnMgPSA5O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjY2MDpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZXRfYXR0cnMoYywgXHUwMDI2aW52YWxpZF9hdHRycyksIC1FSU5WQUwpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY2MS1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjYzLVx0aW52YWxpZF9hdHRycy5hZ2dyX2ludGVydmFsID0gNDk5OTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2NjQ6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02NjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzEyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIERBTU9OIFN5bWJvbCBTY29wZSBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIHNlZWluZyBhIGhhbmRmdWwgb2Yga2V5IHN5bWJvbHMgYmVpbmcgdG91Y2hlZCBoZXJlIGluIHRoaXMgREFNT04gY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgZ2xvYmFsIG5hdHVyZSBvZiBgZGFtb25fc2V0X2F0dHJzYCBhbmQgYGRhbW9uX3Byb2JlX2hpdHNfbXZzdW1gIGp1bXBzIG91dCBpbW1lZGlhdGVseS4gVGhlIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX2xydV9zb3J0X3R1cm5gIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IG5vdCB0aGUgcHJpbWFyeSBmb2N1cyBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGFjY291bnQgZm9yIHRoZWlyIHN0YXRpYyBuYXR1cmUgZHVyaW5nIGludmVzdGlnYXRpb24uCgpUaGVuLCB0aGVyZSYjMzk7cyBgZGFtb25faG90X3Njb3JlYCwgYWxzbyBnbG9iYWwsIGFuZCBsb2NhdGVkIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLgoKU28sIGNvbnNpZGVyaW5nIHRoZXNlIGluaXRpYWwgZmluZGluZ3MsIHRoZSBwcmltYXJ5IGZvY3VzIGFyZWFzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24gYXJlOgoKKiAgIGBkYW1vbl9zZXRfYXR0cnNgCiogICBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAKKiAgIGBkYW1vbl9ob3Rfc2NvcmVgCgpJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGZvciBhbnkgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zIGFzIHBhcnQgb2YgdGhpcyBwcm9jZXNzLiBUaGUgcHJlc2VuY2Ugb2Ygc3RhdGljIGlubGluZSBvciBzdGF0aWMgZnVuY3Rpb25zIGlzIGV4cGVjdGVkIGJlaGF2aW9yLCBidXQgdGhlIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkLCB3aWxsIG5lZWQgZnVydGhlciBhbmFseXNpcy4KCkxvb2tpbmcgdGhyb3VnaCB0aGUgb3RoZXIgc3ltYm9scywgaXQmIzM5O3MgY2xlYXIgd2UgaGF2ZSBtYW55IHN0YXRpYyBmdW5jdGlvbnM6CgoqICAgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgIChzdGF0aWMgaW5saW5lIGluIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgKQoqICAgYGRhbW9uX3NhbXBsZV9icF90b19jb3VudGAgKHN0YXRpYyBpbiBgbW0vZGFtb24vY29yZS5jYCkKKiAgIGBkYW1vbl9zYW1wbGVfY291bnRfdG9fYnBgIChzdGF0aWMgaW4gYG1tL2RhbW9uL2NvcmUuY2ApCiogICBgZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzYCAoc3RhdGljIGluIGBtbS9kYW1vbi9jb3JlLmNgKQoqICAgYGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzYCAoc3RhdGljIGluIGBtbS9kYW1vbi9jb3JlLmNgKQoqICAgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdGAgKHN0YXRpYyBpbiBgbW0vZGFtb24vY29yZS5jYCkKKiAgIGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzYCAoc3RhdGljIGluIGBtbS9kYW1vbi9jb3JlLmNgKQoKTm93LCBoZXJlJiMzOTtzIGEgY3J1Y2lhbCBwb2ludC4gSXQmIzM5O3MgYmVjb21pbmcgZXZpZGVudCB0aGF0IGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzYCBpcyBjYWxsZWQgYnkgYGRhbW9uX3NldF9hdHRyc2AuIFRoaXMgY2VtZW50cyBgZGFtb25fc2V0X2F0dHJzYCBhcyBhIHZlcnkgc29saWQgZm9jdXMgc3ltYm9sLgoKQWxzbywgYGRhbW9uX3Byb2JlX2hpdHNfbXZzdW1gIGlzIGNhbGxlZCBieSBgZGFtb3Nfc3lzZnNfcHJvYmVzX2FkZF9kaXJzYC4gQW5kIGBkYW1vbl9ob3Rfc2NvcmVgIGlzIGNhbGxlZCBieSBgZGFtb25fcGFfc2NoZW1lX3Njb3JlYCBhbmQgYGRhbW9uX3ZhX3NjaGVtZV9zY29yZWAuIFRoaXMgcmVsYXRpb25zaGlwIGZ1cnRoZXIgZGVmaW5lcyB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLgoKVG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgSSBuZWVkIHRvIHJldmlzaXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJIHNlZToKCiogICBgREFNT05gCiogICBgREFNT05fVkFERFJgCiogICBgREFNT05fUEFERFJgCiogICBgREFNT05fU1lTRlNgCiogICBgREFNT05fTFJVX1NPUlRgCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgcHJlc2VuY2UgYW5kIG1lYW5pbmcgb2YgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zLiBJIG5vdGUgdGhhdCBgREFNT05fUkVDTEFJTWAgaGFzbiYjMzk7dCBiZWVuIG1vZGlmaWVkLCBidXQgdGhlIHBhdGNoIG1vZGlmaWVzIGBtbS9kYW1vbi9scnVfc29ydC5jYC4gTGV0JiMzOTtzIGNoZWNrIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhZ2Fpbi4KCk92ZXJhbGwsIGl0IHNlZW1zIHRoYXQgdGhlcmUmIzM5O3MgYSBzdHJvbmcgZm9jdXMgb24gY29yZSBEQU1PTiBmdW5jdGlvbmFsaXR5LCBpbmNsdWRpbmcgYXR0cmlidXRlIHNldHRpbmcsIHByb2JpbmcsIGhvdC1zY29yZSBjYWxjdWxhdGlvbiwgYW5kIExSVSBzb3J0aW5nLCBhcyBpdCByZWxhdGVzIHRvIHRoZSBwcm9iZSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT05fTFJVX1NPUlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9ODg9Y29uZmlnIERBTU9OX1JFQ0xBSU1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc1MQoJCQkJCQkJb3V0cHV0OiAxNjgKCQkJCQkJCXRob3VnaHRzOiA1NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIGBEQU1PTl9MUlVfU09SVGAgY29uZmlnIGlzIGluZGVlZCByZWxldmFudCBoZXJlLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY29uZmlndXJhdGlvbiBzaWRlIG9mIHRoaW5ncy4gSSYjMzk7bSBzZWVpbmcgdGhlIGNvcmUgYERBTU9OYCBvcHRpb25zOiBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBhbmQgYERBTU9OX0xSVV9TT1JUYCBhcmUgYWxsIGNydWNpYWwgZm9yIGVuYWJsaW5nIGFuZCBjb250cm9sbGluZyBEQU1PTiYjMzk7cyBiZWhhdmlvci4KCk5vdywgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIGltcG9ydGFudCBzeW1ib2xzIHRoaXMgcGF0Y2ggYWZmZWN0cy4gSSBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb24gYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCwgYW5kIGBkYW1vbl9ob3Rfc2NvcmVgLiBJIGFscmVhZHkga25vdyB0aGF0IGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBnZXRzIGNhbGxlZCBmcm9tIGBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnNgLiBBbmQgeWVzLCB0aGF0JiMzOTtzIHJlYWNoYWJsZSB2aWEgc3lzZnMuIEkgY2FuIGFsc28gcmVhY2ggYGRhbW9uX3NldF9hdHRyc2AgdmlhIHN5c2ZzIGFuZCBwb3RlbnRpYWxseSBvdGhlciBtb2R1bGVzLiBBbHNvLCBgZGFtb25faG90X3Njb3JlYCBnZXRzIGNhbGxlZCB2aWEgdGhlIGBkYW1vbl9wYV9zY2hlbWVfc2NvcmVgIGFuZCBgZGFtb25fdmFfc2NoZW1lX3Njb3JlYCBmdW5jdGlvbnMuCgpJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzYCBpcyByZWFjaGFibGUgZnJvbSBhbnl3aGVyZSBlbHNlLiBHb29kLCBpdCBpcyBjYWxsZWQgZnJvbSBgZGFtb25fc2V0X2F0dHJzYCwgdGhhdCBtYWtlcyBzZW5zZS4KCk5vdywgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50PyBBaGEsIGBEQU1PTl9LVU5JVF9URVNUYCBpcyBtb2RpZmllZCBpbiB0aGUgcGF0Y2gmIzM5O3MgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIEhvd2V2ZXIsIEkgZG9uJiMzOTt0IHJlYWxseSBuZWVkIHRvIGVuYWJsZSBrdW5pdCB0ZXN0cyB0byBmdXp6IHRoZSBjb3JlIGxvZ2ljIGhlcmUsIGFsdGhvdWdoIGl0IHdvdWxkbiYjMzk7dCBodXJ0LiBXZSB1c3VhbGx5IGRvbiYjMzk7dCBsaXN0IGt1bml0IGNvbmZpZ3MgdW5sZXNzIHRoZSBwYXRjaCBpcyBvbmx5IGFib3V0IGt1bml0LgoKTm93LCBmb3IgdGhlIHJlYXNvbmluZzogdGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyBEQU1PTiBoYW5kbGVzIHNhbXBsZSBjb3VudGluZyBhbmQgYWdncmVnYXRpb24uIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzYCBhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGRhbW9uX3Byb2JlX2hpdHNfbXZzdW1gIHRvIGFjY29tbW9kYXRlIHNwZWNpZmljIHdpbmRvdyBjb25kaXRpb25zIGFyZSBjZW50cmFsIHRvIHRoaXMgcGF0Y2guIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW1wYWN0aW5nIHRoZSB2ZXJ5IGNvcmUgb2YgREFNT04mIzM5O3MgbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nLCBpbmNsdWRpbmcgaG93IHJlc3VsdHMgYXJlIGNhbGN1bGF0ZWQgYW5kIHVwZGF0ZWQuIFRoaXMgaXMgdmVyeSByZWxldmFudCB0byBmdXp6aW5nLgoKVGhlcmVmb3JlOgoKV29ydGhGdXp6aW5nOiBUcnVlCkZvY3VzU3ltYm9sczogYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCwgYGRhbW9uX2hvdF9zY29yZWAKRW5hYmxlQ29uZmlnczogYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX0xSVV9TT1JUYApSZWFzb25pbmc6IFRoZSBwYXRjaCBkaXJlY3RseSBhbHRlcnMgY29yZSBEQU1PTiBsb2dpYyByZWxhdGVkIHRvIHRoZSBjYWxjdWxhdGlvbiBhbmQgdXBkYXRpbmcgb2YgbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMsIGludHJvZHVjaW5nIGEgbmV3IGNvbmRpdGlvbiBpbiBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgYW5kIG5ldyBwcm9iZSBoaXQgdXBkYXRpbmcgbG9naWMgaW4gYGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc2V0X2F0dHJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3Byb2JlX2hpdHNfbXZzdW0mIzM0OywKICAgICYjMzQ7ZGFtb25faG90X3Njb3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgREFNT04gbG9naWMgZm9yIGNhbGN1bGF0aW5nIGFuZCB1cGRhdGluZyBtZW1vcnkgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cywgaW5jbHVkaW5nIGEgbmV3IGNvbmRpdGlvbiBpbiBkYW1vbl9wcm9iZV9oaXRzX212c3VtIGFuZCBuZXcgcHJvYmUgaGl0IHVwZGF0aW5nIGxvZ2ljIGluIGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzLiBJdCBhbHNvIHJlbmFtZXMgc2V2ZXJhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzYW1wbGUgY291bnRpbmcgYW5kIGFnZ3JlZ2F0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIERBTU9OIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3NldF9hdHRycyYjMzQ7LAogICAgJiMzNDtkYW1vbl9wcm9iZV9oaXRzX212c3VtJiMzNDssCiAgICAmIzM0O2RhbW9uX2hvdF9zY29yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIERBTU9OIGxvZ2ljIGZvciBjYWxjdWxhdGluZyBhbmQgdXBkYXRpbmcgbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMsIGluY2x1ZGluZyBhIG5ldyBjb25kaXRpb24gaW4gZGFtb25fcHJvYmVfaGl0c19tdnN1bSBhbmQgbmV3IHByb2JlIGhpdCB1cGRhdGluZyBsb2dpYyBpbiBkYW1vbl91cGRhdGVfcHJvYmVfaGl0cy4gSXQgYWxzbyByZW5hbWVzIHNldmVyYWwgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc2FtcGxlIGNvdW50aW5nIGFuZCBhZ2dyZWdhdGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBEQU1PTiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEyOjI3OjE1LjI2MjIwNjA1MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MDQ3MjE5NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3NldF9hdHRyc1wiLFxuICAgIFwiZGFtb25fcHJvYmVfaGl0c19tdnN1bVwiLFxuICAgIFwiZGFtb25faG90X3Njb3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBEQU1PTiBsb2dpYyBmb3IgY2FsY3VsYXRpbmcgYW5kIHVwZGF0aW5nIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzLCBpbmNsdWRpbmcgYSBuZXcgY29uZGl0aW9uIGluIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0gYW5kIG5ldyBwcm9iZSBoaXQgdXBkYXRpbmcgbG9naWMgaW4gZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMuIEl0IGFsc28gcmVuYW1lcyBzZXZlcmFsIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHNhbXBsZSBjb3VudGluZyBhbmQgYWdncmVnYXRpb24uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgREFNT04gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEyOjI3OjE1LjI2MjIxMDk3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMxMTIyOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjNjMzY5NGFlZDUzMjM3YjU4NjcyMmNjZGUxZjFkYjU2Y2Y2YTQyMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCA3IDEyOjI3OjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbmluZGV4IDE5YjdlODM5YmRlMGI0Li42M2Y1OTY5NTdjMWYxZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5AQCAtMTA1NiwxNSArMTA1NiwxNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiBcXHRyZXR1cm4gY3R4LVxcdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1ZBRERSIHx8IGN0eC1cXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19GVkFERFI7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRhbW9uX21heF9ucl9hY2Nlc3Nlcyhjb25zdCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbisvKiBSZXR1cm5zIG51bWJlciBvZiBzYW1wbGVzIHBlciBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAqL1xcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcbitcXHRcXHRjb25zdCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsO1xcbi1cXHR1bnNpZ25lZCBsb25nIG1heF9ucl9hY2Nlc3NlcztcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9zYW1wbGVzO1xcbiBcXG4gXFx0c2FtcGxlX2ludGVydmFsID0gYXR0cnMtXFx1MDAzZXNhbXBsZV9pbnRlcnZhbCA/IDogMTtcXG4tXFx0bWF4X25yX2FjY2Vzc2VzID0gbWluKGF0dHJzLVxcdTAwM2VhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsLFxcbitcXHRucl9zYW1wbGVzID0gbWluKGF0dHJzLVxcdTAwM2VhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsLFxcbiBcXHRcXHRcXHQodW5zaWduZWQgbG9uZylVSU5UX01BWCk7XFxuLVxcdHJldHVybiBtYXhfbnJfYWNjZXNzZXMgPyA6IDE7XFxuK1xcdHJldHVybiBucl9zYW1wbGVzID8gOiAxO1xcbiB9XFxuIFxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggMzkwZTAwYjM2ODVlZmMuLjA5M2RhNWMwYjM2OTM0IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC0yOTAsNiArMjkwLDkgQEAgdW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIFxcdFxcdFxcdGN0eC1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHM7XFxuIFxcdGxlZnRfd2luZG93X2JwID0gbXVsdF9mcmFjKGxlZnRfd2luZG93LCAxMDAwMCwgd2luZG93X2xlbik7XFxuIFxcbitcXHRpZiAobGVmdF93aW5kb3dfYnAgPT0gMTAwMDApXFxuK1xcdFxcdHJldHVybiByLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XTtcXG4rXFxuIFxcdHJldHVybiBkYW1vbl9tdnN1bShyLVxcdTAwM2Vwcm9iZV9oaXRzW3Byb2JlX2lkeF0sXFxuIFxcdFxcdFxcdHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdLCBsZWZ0X3dpbmRvd19icCk7XFxuIH1cXG5AQCAtODc2LDQzICs4NzksNTggQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9hZ2VfZm9yX25ld19hdHRycyh1bnNpZ25lZCBpbnQgYWdlLFxcbiBcXHRyZXR1cm4gYWdlICogb2xkX2F0dHJzLVxcdTAwM2VhZ2dyX2ludGVydmFsIC8gbmV3X2F0dHJzLVxcdTAwM2VhZ2dyX2ludGVydmFsO1xcbiB9XFxuIFxcbi0vKiBjb252ZXJ0IGFjY2VzcyByYXRpbyBpbiBicCAocGVyIDEwLDAwMCkgdG8gbnJfYWNjZXNzZXMgKi9cXG4tc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3NlcyhcXG4tXFx0XFx0dW5zaWduZWQgaW50IGFjY2Vzc2VzX2JwLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbisvKiBjb252ZXJ0IHNhbXBsZSByYXRpbyBpbiBicCAocGVyIDEwLDAwMCkgdG8gY291bnQgKi9cXG4rc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9zYW1wbGVfYnBfdG9fY291bnQoXFxuK1xcdFxcdHVuc2lnbmVkIGludCBicCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4ge1xcbi1cXHRyZXR1cm4gYWNjZXNzZXNfYnAgKiBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpIC8gMTAwMDA7XFxuK1xcdHJldHVybiBicCAqIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoYXR0cnMpIC8gMTAwMDA7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIENvbnZlcnQgbnJfYWNjZXNzZXMgdG8gYWNjZXNzIHJhdGlvIGluIGJwIChwZXIgMTAsMDAwKS5cXG4tICpcXG4tICogQ2FsbGVycyBzaG91bGQgZW5zdXJlIGF0dHJzLmFnZ3JfaW50ZXJ2YWwgaXMgbm90IHplcm8sIGxpa2VcXG4tICogZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0cygpIGRvZXMgLiAgT3RoZXJ3aXNlLCBkaXZpZGUtYnktemVybyB3b3VsZFxcbi0gKiBoYXBwZW4uXFxuLSAqL1xcbi1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKFxcbi1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuKy8qIGNvbnZlcnQgc2FtcGxlIGNvdW50IHRvIHJhdGlvIGluIGJwIChwZXIgMTAsMDAwKSAqL1xcbitzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3NhbXBsZV9jb3VudF90b19icChcXG4rXFx0XFx0dW5zaWduZWQgaW50IGNvdW50LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbiB7XFxuLVxcdHJldHVybiBtdWx0X2ZyYWMobnJfYWNjZXNzZXMsIDEwMDAwLCBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpKTtcXG4rXFx0cmV0dXJuIG11bHRfZnJhYyhjb3VudCwgMTAwMDAsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoYXR0cnMpKTtcXG4gfVxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucl9hY2Nlc3NlcyxcXG4rc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzLFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMpXFxuIHtcXG4tXFx0cmV0dXJuIGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzKFxcbi1cXHRcXHRcXHRkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icChcXG4tXFx0XFx0XFx0XFx0bnJfYWNjZXNzZXMsIG9sZF9hdHRycyksXFxuK1xcdHJldHVybiBkYW1vbl9zYW1wbGVfYnBfdG9fY291bnQoXFxuK1xcdFxcdFxcdGRhbW9uX3NhbXBsZV9jb3VudF90b19icChucl9hY2Nlc3Nlcywgb2xkX2F0dHJzKSxcXG4gXFx0XFx0XFx0bmV3X2F0dHJzKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4rXFx0XFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxcbitcXHRcXHRib29sIGFnZ3JlZ2F0aW5nLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xcbitcXHRpbnQgaSA9IDA7XFxuK1xcbitcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpIHtcXG4rXFx0XFx0ci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKFxcbitcXHRcXHRcXHRcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0sIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcXG4rXFx0XFx0aWYgKCFhZ2dyZWdhdGluZylcXG4rXFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcXG4rXFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSwgb2xkX2F0dHJzLFxcbitcXHRcXHRcXHRcXHRcXHRuZXdfYXR0cnMpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xcbitcXHRcXHRpKys7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIFxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycyxcXG4tXFx0XFx0Ym9vbCBhZ2dyZWdhdGluZylcXG4rXFx0XFx0Ym9vbCBhZ2dyZWdhdGluZywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiB7XFxuLVxcdHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKFxcbitcXHRkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhyLCBvbGRfYXR0cnMsIG5ld19hdHRycywgYWdncmVnYXRpbmcsIGN0eCk7XFxuK1xcbitcXHRyLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKFxcbiBcXHRcXHRcXHRyLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7XFxuIFxcdGlmICghYWdncmVnYXRpbmcpXFxuLVxcdFxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycyhcXG4rXFx0XFx0ci1cXHUwMDNlbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoXFxuIFxcdFxcdFxcdFxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0LypcXG5AQCAtOTQ4LDggKzk2Niw4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbiBcXG4gXFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eClcXG4gXFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpXFxuLVxcdFxcdFxcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChcXG4tXFx0XFx0XFx0XFx0XFx0ciwgb2xkX2F0dHJzLCBuZXdfYXR0cnMsIGFnZ3JlZ2F0aW5nKTtcXG4rXFx0XFx0XFx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIG9sZF9hdHRycywgbmV3X2F0dHJzLFxcbitcXHRcXHRcXHRcXHRcXHRhZ2dyZWdhdGluZywgY3R4KTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vbHJ1X3NvcnQuYyBiL21tL2RhbW9uL2xydV9zb3J0LmNcXG5pbmRleCBlOGMzODlhZDMyMjZmNy4uN2UwNzcwODRjYjAzYWEgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vbHJ1X3NvcnQuY1xcbisrKyBiL21tL2RhbW9uL2xydV9zb3J0LmNcXG5AQCAtMzAzLDcgKzMwMyw3IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdGVyciA9IC1FTk9NRU07XFxuLVxcdGhvdF90aHJlcyA9IGRhbW9uX21heF9ucl9hY2Nlc3NlcyhcXHUwMDI2YXR0cnMpICpcXG4rXFx0aG90X3RocmVzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXHUwMDI2YXR0cnMpICpcXG4gXFx0XFx0aG90X3RocmVzX2FjY2Vzc19mcmVxIC8gMTAwMDtcXG4gXFx0aG90X3NjaGVtZSA9IGRhbW9uX2xydV9zb3J0X25ld19ob3Rfc2NoZW1lKGhvdF90aHJlcyk7XFxuIFxcdGlmICghaG90X3NjaGVtZSlcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXFxuaW5kZXggNmJkZDFjZmQzODYzYTMuLjg5YzY5NGY2ZTRmYTg5IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xcbkBAIC0xMTIsNyArMTEyLDcgQEAgaW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiBcXHRpbnQgaG90bmVzcztcXG4gXFxuIFxcdGZyZXFfc3Vic2NvcmUgPSByLVxcdTAwM2Vucl9hY2Nlc3NlcyAqIERBTU9OX01BWF9TVUJTQ09SRSAvXFxuLVxcdFxcdGRhbW9uX21heF9ucl9hY2Nlc3NlcyhcXHUwMDI2Yy1cXHUwMDNlYXR0cnMpO1xcbitcXHRcXHRkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcdTAwMjZjLVxcdTAwM2VhdHRycyk7XFxuIFxcbiBcXHRhZ2VfaW5fc2VjID0gKHVuc2lnbmVkIGxvbmcpci1cXHUwMDNlYWdlICogYy1cXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCAvIDEwMDAwMDA7XFxuIFxcdGlmIChhZ2VfaW5fc2VjKVxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5pbmRleCAwMTI0ZjgzYjM5YjgzOS4uOGUwMTQzN2ViNWVhODEgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuQEAgLTU3NSw3ICs1NzUsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0XFx0XFx0fSwgMyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnAoc3RydWN0IGt1bml0ICp0ZXN0KVxcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NhbXBsZV9jb3VudF90b19icChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIHtcXG4gXFx0c3RydWN0IGRhbW9uX2F0dHJzIGF0dHJzID0ge1xcbiBcXHRcXHQuc2FtcGxlX2ludGVydmFsID0gMTAsXFxuQEAgLTU4NSw3ICs1ODUsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0LypcXG4gXFx0ICogSW4gc29tZSBjYXNlcyBzdWNoIGFzIDMyYml0IGFyY2hpdGVjdHVyZXMgd2hlcmUgVUlOVF9NQVggaXNcXG4gXFx0ICogVUxPTkdfTUFYLCBhdHRycy5hZ2dyX2ludGVydmFsIGJlY29tZXMgemVyby4gIENhbGxpbmdcXG4tXFx0ICogZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnAoKSBpbiB0aGUgY2FzZSB3aWxsIGNhdXNlXFxuK1xcdCAqIGRhbW9uX3NhbXBsZV9jb3VudF90b19icCgpIGluIHRoZSBjYXNlIHdpbGwgY2F1c2VcXG4gXFx0ICogZGl2aWRlLWJ5LXplcm8uICBTdWNoIGNhc2UgaXMgcHJvaGliaXRlZCBpbiBub3JtYWwgZXhlY3V0aW9uIHNpbmNlXFxuIFxcdCAqIHRoZSBjYXV0aW9uIGlzIGRvY3VtZW50ZWQgb24gdGhlIGNvbW1lbnQgZm9yIHRoZSBmdW5jdGlvbiwgYW5kXFxuIFxcdCAqIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoKSBkb2VzIHRoZSBjaGVjay4gIFNraXAgdGhlIHRlc3QgaW5cXG5AQCAtNTk0LDcgKzU5NCw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnAoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRpZiAoIWF0dHJzLmFnZ3JfaW50ZXJ2YWwpXFxuIFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImFnZ3JfaW50ZXJ2YWwgaXMgemVyby5cXFwiKTtcXG4gXFxuLVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icCgxMjMsIFxcdTAwMjZhdHRycyksIDApO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2FtcGxlX2NvdW50X3RvX2JwKDEyMywgXFx1MDAyNmF0dHJzKSwgMCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG5AQCAtNjAzLDMyICs2MDMsMzkgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRcXHQuc2FtcGxlX2ludGVydmFsID0gMTAsIC5hZ2dyX2ludGVydmFsID0gMTAwMCx9O1xcbiBcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgbmV3X2F0dHJzO1xcbiBcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyID0gZGFtb25fbmV3X3JlZ2lvbigzLCA3KTtcXG4rXFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xcbiBcXG4gXFx0aWYgKCFyKVxcbiBcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJyZWdpb24gYWxsb2MgZmFpbFxcXCIpO1xcbitcXHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XFxuK1xcdGlmICghY3R4KSB7XFxuK1xcdFxcdGRhbW9uX2ZyZWVfcmVnaW9uKHIpO1xcbitcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJjdHggYWxsb2MgZmFpbFxcXCIpO1xcbitcXHR9XFxuIFxcbiBcXHRyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IDE1O1xcbiBcXHRyLVxcdTAwM2VhZ2UgPSAyMDtcXG4gXFxuIFxcdG5ld19hdHRycyA9IChzdHJ1Y3QgZGFtb25fYXR0cnMpe1xcbiBcXHRcXHQuc2FtcGxlX2ludGVydmFsID0gMTAwLCAuYWdncl9pbnRlcnZhbCA9IDEwMDAwLH07XFxuLVxcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcXHUwMDI2b2xkX2F0dHJzLCBcXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSk7XFxuK1xcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcXHUwMDI2b2xkX2F0dHJzLCBcXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSwgY3R4KTtcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZW5yX2FjY2Vzc2VzLCAxNSk7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2VhZ2UsIDIpO1xcbiBcXG4gXFx0bmV3X2F0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XFxuIFxcdFxcdC5zYW1wbGVfaW50ZXJ2YWwgPSAxLCAuYWdncl9pbnRlcnZhbCA9IDEwMDB9O1xcbi1cXHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgXFx1MDAyNm9sZF9hdHRycywgXFx1MDAyNm5ld19hdHRycywgZmFsc2UpO1xcbitcXHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgXFx1MDAyNm9sZF9hdHRycywgXFx1MDAyNm5ld19hdHRycywgZmFsc2UsIGN0eCk7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2Vucl9hY2Nlc3NlcywgMTUwKTtcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFnZSwgMik7XFxuIFxcbiBcXHRuZXdfYXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcXG4gXFx0XFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEsIC5hZ2dyX2ludGVydmFsID0gMTAwfTtcXG4tXFx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFxcdTAwMjZvbGRfYXR0cnMsIFxcdTAwMjZuZXdfYXR0cnMsIGZhbHNlKTtcXG4rXFx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFxcdTAwMjZvbGRfYXR0cnMsIFxcdTAwMjZuZXdfYXR0cnMsIGZhbHNlLCBjdHgpO1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlbnJfYWNjZXNzZXMsIDE1MCk7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2VhZ2UsIDIwKTtcXG4gXFxuIFxcdGRhbW9uX2ZyZWVfcmVnaW9uKHIpO1xcbitcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuQEAgLTE1NzIsNyArMTU3OSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XFxuIFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zcGxpdF9hYm92ZV9oYWxmX3Byb2dyZXNzZXMpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbiksXFxuIFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zZXRfcmVnaW9ucyksXFxuLVxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icCksXFxuK1xcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zYW1wbGVfY291bnRfdG9fYnApLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9hdHRycyksXFxuIFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9tdnN1bSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEyOjI3OjE1Ljk5NDA2MDYzMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYzMTUzNTU5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc2V0X2F0dHJzXCIsXG4gICAgXCJkYW1vbl9wcm9iZV9oaXRzX212c3VtXCIsXG4gICAgXCJkYW1vbl9ob3Rfc2NvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIERBTU9OIGxvZ2ljIGZvciBjYWxjdWxhdGluZyBhbmQgdXBkYXRpbmcgbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMsIGluY2x1ZGluZyBhIG5ldyBjb25kaXRpb24gaW4gZGFtb25fcHJvYmVfaGl0c19tdnN1bSBhbmQgbmV3IHByb2JlIGhpdCB1cGRhdGluZyBsb2dpYyBpbiBkYW1vbl91cGRhdGVfcHJvYmVfaGl0cy4gSXQgYWxzbyByZW5hbWVzIHNldmVyYWwgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc2FtcGxlIGNvdW50aW5nIGFuZCBhZ2dyZWdhdGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBEQU1PTiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyM2MzNjk0YWVkNTMyMzdiNTg2NzIyY2NkZTFmMWRiNTZjZjZhNDIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAxMjoyNzoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggMTliN2U4MzliZGUwYjQuLjYzZjU5Njk1N2MxZjFmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC0xMDU2LDE1ICsxMDU2LDE3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vbl90YXJnZXRfaGFzX3BpZChjb25zdCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRyZXR1cm4gY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfVkFERFIgfHwgY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfRlZBRERSO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoY29uc3Qgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbisvKiBSZXR1cm5zIG51bWJlciBvZiBzYW1wbGVzIHBlciBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAqL1xuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXG4rXHRcdGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWw7XG4tXHR1bnNpZ25lZCBsb25nIG1heF9ucl9hY2Nlc3NlcztcbitcdHVuc2lnbmVkIGxvbmcgbnJfc2FtcGxlcztcbiBcbiBcdHNhbXBsZV9pbnRlcnZhbCA9IGF0dHJzLVx1MDAzZXNhbXBsZV9pbnRlcnZhbCA/IDogMTtcbi1cdG1heF9ucl9hY2Nlc3NlcyA9IG1pbihhdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsLFxuK1x0bnJfc2FtcGxlcyA9IG1pbihhdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsLFxuIFx0XHRcdCh1bnNpZ25lZCBsb25nKVVJTlRfTUFYKTtcbi1cdHJldHVybiBtYXhfbnJfYWNjZXNzZXMgPyA6IDE7XG4rXHRyZXR1cm4gbnJfc2FtcGxlcyA/IDogMTtcbiB9XG4gXG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCAzOTBlMDBiMzY4NWVmYy4uMDkzZGE1YzBiMzY5MzQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTI5MCw2ICsyOTAsOSBAQCB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0XHRjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHM7XG4gXHRsZWZ0X3dpbmRvd19icCA9IG11bHRfZnJhYyhsZWZ0X3dpbmRvdywgMTAwMDAsIHdpbmRvd19sZW4pO1xuIFxuK1x0aWYgKGxlZnRfd2luZG93X2JwID09IDEwMDAwKVxuK1x0XHRyZXR1cm4gci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XTtcbitcbiBcdHJldHVybiBkYW1vbl9tdnN1bShyLVx1MDAzZXByb2JlX2hpdHNbcHJvYmVfaWR4XSxcbiBcdFx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdLCBsZWZ0X3dpbmRvd19icCk7XG4gfVxuQEAgLTg3Niw0MyArODc5LDU4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fYWdlX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IGFnZSxcbiBcdHJldHVybiBhZ2UgKiBvbGRfYXR0cnMtXHUwMDNlYWdncl9pbnRlcnZhbCAvIG5ld19hdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsO1xuIH1cbiBcbi0vKiBjb252ZXJ0IGFjY2VzcyByYXRpbyBpbiBicCAocGVyIDEwLDAwMCkgdG8gbnJfYWNjZXNzZXMgKi9cbi1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzKFxuLVx0XHR1bnNpZ25lZCBpbnQgYWNjZXNzZXNfYnAsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4rLyogY29udmVydCBzYW1wbGUgcmF0aW8gaW4gYnAgKHBlciAxMCwwMDApIHRvIGNvdW50ICovXG4rc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9zYW1wbGVfYnBfdG9fY291bnQoXG4rXHRcdHVuc2lnbmVkIGludCBicCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbiB7XG4tXHRyZXR1cm4gYWNjZXNzZXNfYnAgKiBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpIC8gMTAwMDA7XG4rXHRyZXR1cm4gYnAgKiBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKGF0dHJzKSAvIDEwMDAwO1xuIH1cbiBcbi0vKlxuLSAqIENvbnZlcnQgbnJfYWNjZXNzZXMgdG8gYWNjZXNzIHJhdGlvIGluIGJwIChwZXIgMTAsMDAwKS5cbi0gKlxuLSAqIENhbGxlcnMgc2hvdWxkIGVuc3VyZSBhdHRycy5hZ2dyX2ludGVydmFsIGlzIG5vdCB6ZXJvLCBsaWtlXG4tICogZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0cygpIGRvZXMgLiAgT3RoZXJ3aXNlLCBkaXZpZGUtYnktemVybyB3b3VsZFxuLSAqIGhhcHBlbi5cbi0gKi9cbi1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKFxuLVx0XHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4rLyogY29udmVydCBzYW1wbGUgY291bnQgdG8gcmF0aW8gaW4gYnAgKHBlciAxMCwwMDApICovXG4rc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9zYW1wbGVfY291bnRfdG9fYnAoXG4rXHRcdHVuc2lnbmVkIGludCBjb3VudCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbiB7XG4tXHRyZXR1cm4gbXVsdF9mcmFjKG5yX2FjY2Vzc2VzLCAxMDAwMCwgZGFtb25fbWF4X25yX2FjY2Vzc2VzKGF0dHJzKSk7XG4rXHRyZXR1cm4gbXVsdF9mcmFjKGNvdW50LCAxMDAwMCwgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihhdHRycykpO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzLFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucl9hY2Nlc3NlcyxcbiBcdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzKVxuIHtcbi1cdHJldHVybiBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3Nlcyhcbi1cdFx0XHRkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icChcbi1cdFx0XHRcdG5yX2FjY2Vzc2VzLCBvbGRfYXR0cnMpLFxuK1x0cmV0dXJuIGRhbW9uX3NhbXBsZV9icF90b19jb3VudChcbitcdFx0XHRkYW1vbl9zYW1wbGVfY291bnRfdG9fYnAobnJfYWNjZXNzZXMsIG9sZF9hdHRycyksXG4gXHRcdFx0bmV3X2F0dHJzKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbitcdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuK1x0XHRib29sIGFnZ3JlZ2F0aW5nLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4re1xuK1x0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xuK1x0aW50IGkgPSAwO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XG4rXHRcdHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKFxuK1x0XHRcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0sIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbitcdFx0aWYgKCFhZ2dyZWdhdGluZylcbitcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0gPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoXG4rXHRcdFx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSwgb2xkX2F0dHJzLFxuK1x0XHRcdFx0XHRuZXdfYXR0cnMpO1xuK1x0XHRlbHNlXG4rXHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcbitcdFx0aSsrO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuLVx0XHRib29sIGFnZ3JlZ2F0aW5nKVxuK1x0XHRib29sIGFnZ3JlZ2F0aW5nLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4ge1xuLVx0ci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycyhcbitcdGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHIsIG9sZF9hdHRycywgbmV3X2F0dHJzLCBhZ2dyZWdhdGluZywgY3R4KTtcbitcbitcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcbiBcdFx0XHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbiBcdGlmICghYWdncmVnYXRpbmcpXG4tXHRcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKFxuK1x0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKFxuIFx0XHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlcywgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xuIFx0ZWxzZVxuIFx0XHQvKlxuQEAgLTk0OCw4ICs5NjYsOCBAQCBzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiBcbiBcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpXG4gXHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KVxuLVx0XHRcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChcbi1cdFx0XHRcdFx0ciwgb2xkX2F0dHJzLCBuZXdfYXR0cnMsIGFnZ3JlZ2F0aW5nKTtcbitcdFx0XHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgb2xkX2F0dHJzLCBuZXdfYXR0cnMsXG4rXHRcdFx0XHRcdGFnZ3JlZ2F0aW5nLCBjdHgpO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2xydV9zb3J0LmMgYi9tbS9kYW1vbi9scnVfc29ydC5jXG5pbmRleCBlOGMzODlhZDMyMjZmNy4uN2UwNzcwODRjYjAzYWEgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9scnVfc29ydC5jXG4rKysgYi9tbS9kYW1vbi9scnVfc29ydC5jXG5AQCAtMzAzLDcgKzMwMyw3IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdGVyciA9IC1FTk9NRU07XG4tXHRob3RfdGhyZXMgPSBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoXHUwMDI2YXR0cnMpICpcbitcdGhvdF90aHJlcyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpICpcbiBcdFx0aG90X3RocmVzX2FjY2Vzc19mcmVxIC8gMTAwMDtcbiBcdGhvdF9zY2hlbWUgPSBkYW1vbl9scnVfc29ydF9uZXdfaG90X3NjaGVtZShob3RfdGhyZXMpO1xuIFx0aWYgKCFob3Rfc2NoZW1lKVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuaW5kZXggNmJkZDFjZmQzODYzYTMuLjg5YzY5NGY2ZTRmYTg5IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG4rKysgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbkBAIC0xMTIsNyArMTEyLDcgQEAgaW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0aW50IGhvdG5lc3M7XG4gXG4gXHRmcmVxX3N1YnNjb3JlID0gci1cdTAwM2Vucl9hY2Nlc3NlcyAqIERBTU9OX01BWF9TVUJTQ09SRSAvXG4tXHRcdGRhbW9uX21heF9ucl9hY2Nlc3NlcyhcdTAwMjZjLVx1MDAzZWF0dHJzKTtcbitcdFx0ZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZjLVx1MDAzZWF0dHJzKTtcbiBcbiBcdGFnZV9pbl9zZWMgPSAodW5zaWduZWQgbG9uZylyLVx1MDAzZWFnZSAqIGMtXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCAvIDEwMDAwMDA7XG4gXHRpZiAoYWdlX2luX3NlYylcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IDAxMjRmODNiMzliODM5Li44ZTAxNDM3ZWI1ZWE4MSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtNTc1LDcgKzU3NSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdH0sIDMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKHN0cnVjdCBrdW5pdCAqdGVzdClcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NhbXBsZV9jb3VudF90b19icChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4ge1xuIFx0c3RydWN0IGRhbW9uX2F0dHJzIGF0dHJzID0ge1xuIFx0XHQuc2FtcGxlX2ludGVydmFsID0gMTAsXG5AQCAtNTg1LDcgKzU4NSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnAoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0LypcbiBcdCAqIEluIHNvbWUgY2FzZXMgc3VjaCBhcyAzMmJpdCBhcmNoaXRlY3R1cmVzIHdoZXJlIFVJTlRfTUFYIGlzXG4gXHQgKiBVTE9OR19NQVgsIGF0dHJzLmFnZ3JfaW50ZXJ2YWwgYmVjb21lcyB6ZXJvLiAgQ2FsbGluZ1xuLVx0ICogZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnAoKSBpbiB0aGUgY2FzZSB3aWxsIGNhdXNlXG4rXHQgKiBkYW1vbl9zYW1wbGVfY291bnRfdG9fYnAoKSBpbiB0aGUgY2FzZSB3aWxsIGNhdXNlXG4gXHQgKiBkaXZpZGUtYnktemVyby4gIFN1Y2ggY2FzZSBpcyBwcm9oaWJpdGVkIGluIG5vcm1hbCBleGVjdXRpb24gc2luY2VcbiBcdCAqIHRoZSBjYXV0aW9uIGlzIGRvY3VtZW50ZWQgb24gdGhlIGNvbW1lbnQgZm9yIHRoZSBmdW5jdGlvbiwgYW5kXG4gXHQgKiBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKCkgZG9lcyB0aGUgY2hlY2suICBTa2lwIHRoZSB0ZXN0IGluXG5AQCAtNTk0LDcgKzU5NCw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnAoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0aWYgKCFhdHRycy5hZ2dyX2ludGVydmFsKVxuIFx0XHRrdW5pdF9za2lwKHRlc3QsIFwiYWdncl9pbnRlcnZhbCBpcyB6ZXJvLlwiKTtcbiBcbi1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icCgxMjMsIFx1MDAyNmF0dHJzKSwgMCk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2FtcGxlX2NvdW50X3RvX2JwKDEyMywgXHUwMDI2YXR0cnMpLCAwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxuQEAgLTYwMywzMiArNjAzLDM5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEwLCAuYWdncl9pbnRlcnZhbCA9IDEwMDAsfTtcbiBcdHN0cnVjdCBkYW1vbl9hdHRycyBuZXdfYXR0cnM7XG4gXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyID0gZGFtb25fbmV3X3JlZ2lvbigzLCA3KTtcbitcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbiBcbiBcdGlmICghcilcbiBcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcInJlZ2lvbiBhbGxvYyBmYWlsXCIpO1xuK1x0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xuK1x0aWYgKCFjdHgpIHtcbitcdFx0ZGFtb25fZnJlZV9yZWdpb24ocik7XG4rXHRcdGt1bml0X3NraXAodGVzdCwgXCJjdHggYWxsb2MgZmFpbFwiKTtcbitcdH1cbiBcbiBcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSAxNTtcbiBcdHItXHUwMDNlYWdlID0gMjA7XG4gXG4gXHRuZXdfYXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbiBcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEwMCwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwMCx9O1xuLVx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFx1MDAyNm9sZF9hdHRycywgXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSk7XG4rXHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgXHUwMDI2b2xkX2F0dHJzLCBcdTAwMjZuZXdfYXR0cnMsIGZhbHNlLCBjdHgpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlbnJfYWNjZXNzZXMsIDE1KTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgMik7XG4gXG4gXHRuZXdfYXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbiBcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEsIC5hZ2dyX2ludGVydmFsID0gMTAwMH07XG4tXHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgXHUwMDI2b2xkX2F0dHJzLCBcdTAwMjZuZXdfYXR0cnMsIGZhbHNlKTtcbitcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcdTAwMjZvbGRfYXR0cnMsIFx1MDAyNm5ld19hdHRycywgZmFsc2UsIGN0eCk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vucl9hY2Nlc3NlcywgMTUwKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgMik7XG4gXG4gXHRuZXdfYXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbiBcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEsIC5hZ2dyX2ludGVydmFsID0gMTAwfTtcbi1cdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcdTAwMjZvbGRfYXR0cnMsIFx1MDAyNm5ld19hdHRycywgZmFsc2UpO1xuK1x0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFx1MDAyNm9sZF9hdHRycywgXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSwgY3R4KTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZW5yX2FjY2Vzc2VzLCAxNTApO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYWdlLCAyMCk7XG4gXG4gXHRkYW1vbl9mcmVlX3JlZ2lvbihyKTtcbitcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKHN0cnVjdCBrdW5pdCAqdGVzdClcbkBAIC0xNTcyLDcgKzE1NzksNyBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NwbGl0X2Fib3ZlX2hhbGZfcHJvZ3Jlc3NlcyksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbiksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMpLFxuLVx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKSxcbitcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zYW1wbGVfY291bnRfdG9fYnApLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdCksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9tdnN1bSksXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoyNzoxNS45OTQwNjIyMzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzI2MjkwNjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gQ29yZSBDb2RlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBjb3JlIGNvZGUgcGF0Y2guIEVzc2VudGlhbGx5LCBpdCdzIGEgcmVmYWN0b3JpbmcgZXhlcmNpc2UsIHdoaWNoIGlzIHVzdWFsbHkgYSBnb29kIHRoaW5nIGZvciBtYWludGFpbmFiaWxpdHkuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIHJlbmFtaW5nIGEgYnVuY2ggb2YgdmFyaWFibGVzOiBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYCBpcyBub3cgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgLCBgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNgIGlzIG5vdyBgZGFtb25fc2FtcGxlX2JwX3RvX2NvdW50YCwgYW5kIHNvIG9uLiBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBqdXN0IGNsYXJpZnlpbmcgdGhlIGludGVudCBhbmQgdW5pdHMsIGxpa2VseSB0byBpbXByb3ZlIHJlYWRhYmlsaXR5LlxuXG5CZXlvbmQgdGhlIHJlbmFtaW5nLCB0aGUgbWVhdCBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHNgLiBUaGlzIGZ1bmN0aW9uLCBmcm9tIHdoYXQgSSBjYW4gdGVsbCwgdXBkYXRlcyB0aGUgYHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzYCBhbmQgYHItXHUwMDNlcHJvYmVfaGl0c2AgZmllbGRzIGJhc2VkIG9uIHRoZSBvbGQgYW5kIG5ldyBhdHRyaWJ1dGVzLiBUaGF0J3MgYSBrZXkgYWRkaXRpb24sIGltcGx5aW5nIGEgY2hhbmdlIGluIGhvdyBoaXQgY291bnRzIGFyZSBtYW5hZ2VkIGFuZCB1cGRhdGVkIHdpdGhpbiB0aGUgbW9uaXRvcmluZyBwcm9jZXNzLiBBbmQsIGltcG9ydGFudGx5LCBgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0YCBub3cgY2FsbHMgdGhpcyBuZXcgZnVuY3Rpb24gd2hpY2ggdGVsbHMgbWUgaXQncyBiZWVuIGludGVncmF0ZWQgaW50byB0aGUgY29yZSB3b3JrZmxvdy5cblxuTG9va2luZyBhdCBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAsIHRoZXJlJ3MgYSBuZXcgY29uZGl0aW9uIGluIHRoZXJlIHRvby4gU3BlY2lmaWNhbGx5LCBpZiBgbGVmdF93aW5kb3dfYnAgPT0gMTAwMDBgLCBpdCBub3cgcmV0dXJucyBgci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XWAuIFRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIHJlbmFtaW5nLCBhbmQgd29ydGggbm90aW5nLiBTZWVtcyBsaWtlIGEgc3BlY2lmaWMgb3B0aW1pemF0aW9uIG9yIHNob3J0Y3V0IGZvciBhIHBhcnRpY3VsYXIgd2luZG93IHNpemUuIEknZCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGF0IGNvbmRpdGlvbiwgYnV0IGl0J3MgY2xlYXJseSBhIGRlbGliZXJhdGUgYWRkaXRpb24uXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgREFNT04gdG8gZnVuY3Rpb24gd2l0aCB0aGlzIHBhdGNoLiBJJ2xsIHNlYXJjaCBmb3IgZWl0aGVyIGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRgIG9yIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCB0byBzZWUgd2hhdCBDT05GSUcgb3B0aW9ucyBhcmUgaW52b2x2ZWQuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGVuYWJsZWQgY29ycmVjdGx5IHRvIHRlc3QgdGhlIGZ1bGwgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoyNzoyMy43MjAzNTUxMDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU1MTU0MTg3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9wcm9iZV9oaXRzX212c3VtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0xMDA1PXVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDA2LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMDc6dW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwMDgtXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNTI9dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjc1LVxcbm1tL2RhbW9uL2NvcmUuYzoyNzY6dW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jLTI3Ny1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9OTA9c3RhdGljIGludCBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyAqcHJvYmVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExMy1cXHRcXHRzeXNfcHJvYmUgPSBkYW1vc19zeXNmc19wcm9iZV9hbGxvYyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE0OlxcdFxcdFxcdFxcdGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSwgcmVnaW9uLCBjdHgpKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTE1LVxcdFxcdGlmICghc3lzX3Byb2JlKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEyOjI3OjI2LjI3MTkwOTE2N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTE3Njk1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBtbS9kYW1vbi9jb3JlLmMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb24gaXMgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBkZWJ1Z2dpbmcgdGFzay4gSSdtIGFzc3VtaW5nIGl0J3MgcGFydCBvZiBEQU1PTiwgd2hpY2ggaXMgbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nLiBUaGUgZmlyc3QgdGhpbmcgSSdkIGRvIGlzIHVzZSB0aGUgc3RhbmRhcmQgdG9vbHMgZm9yIHRoaXMuIGBnaXQgZ3JlcGAgc2hvdWxkIGJlIG15IGZyaWVuZCBoZXJlLiBJJ2Qgc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlLCBwcm9iYWJseSBzdGFydGluZyB3aXRoIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIEknZCBuZWVkIHRvIGxvb2sgZm9yIGFueSByZWZlcmVuY2VzLCBjb25kaXRpb25hbHMsIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGluY2x1ZGUgaXQsIG9yIGRpcmVjdGx5IG1lbnRpb24gdGhlIGZpbGUgaXRzZWxmIG9yIGl0cyBhc3NvY2lhdGVkIGZ1bmN0aW9uYWxpdHkuIEknZCBsaWtlbHkgYWxzbyBjaGVjayB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYG1tL2RhbW9uL2AgZGlyZWN0b3J5IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGhpbnRzIHRoZXJlIGFib3V0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLlxuXG5TaW5jZSBJIGFtIGZhbWlsaWFyIHdpdGggdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHByb2Nlc3MsIEkgd2lsbCB0cnkgdG8gc2VlIHdoYXQgZmVhdHVyZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGZpbGUgYW5kIHNlYXJjaCB1c2luZyB0aG9zZSBmZWF0dXJlcy5cbkkgYW0gY29tZm9ydGFibGUgZ29pbmcgdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcywgSSBuZWVkIHRvIGtub3cgdGhlIGZlYXR1cmVzIGFzc29jaWF0ZWQgd2l0aCBgbW0vZGFtb24vY29yZS5jYCBzbyBJIGNhbiBzZWUgd2hhdCBJIGNhbiBzZWFyY2ggZm9yLlxuT25jZSBJIGhhdmUgYSByZWFzb25hYmxlIGxlYWQgZnJvbSB0aGUgaW5pdGlhbCBzZWFyY2gsIEkgY2FuIHJlZmluZSBpdCBmdXJ0aGVyIHRvIG5hcnJvdyB0aGUgb3B0aW9ucyBkb3duLiBJIG1pZ2h0IGFsc28gbG9vayBhdCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIHdpdGhpbiB0aGUgc291cmNlIGNvZGUgaXRzZWxmLCBhcyB0aG9zZSBtaWdodCBvZmZlciBjbHVlcy4gVWx0aW1hdGVseSwgaXTigJlzIGEgcHJvY2VzcyBvZiBlbGltaW5hdGlvbiBhbmQgcGF0dGVybiBtYXRjaGluZyB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbSB1bnRpbCBJIGZpbmQgdGhlIHJlc3BvbnNpYmxlIGNvbmZpZyBzeW1ib2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NTksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoyNzoyOS43ODM2ODA0NDZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MTI5NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvcmVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vTWFrZWZpbGUtMi1cXG5tbS9kYW1vbi9NYWtlZmlsZTozOm9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxubW0vZGFtb24vTWFrZWZpbGUtNC1vYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6Mjc6MjkuODk5ODE0OTU2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMTA1MDU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqTWFrZWZpbGUgSW52ZXN0aWdhdGlvbjogYG1tL2RhbW9uL2AgSW5jbHVzaW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBJJ20gc3RhcmluZyBhdCBgbW0vZGFtb24vTWFrZWZpbGVgLCBhbmQgdGhlIGtleSBsaW5lIGhlcmUgaXMgYG9iai15IDo9IGNvcmUub2AuIE9rYXksIHN0YW5kYXJkIGVub3VnaDogdGhpcyB0ZWxscyB0aGUgYnVpbGQgc3lzdGVtIHRvIGluY2x1ZGUgYGNvcmUub2Agd2hlbiBidWlsZGluZyB0aGUgYG1tL2RhbW9uYCBjb21wb25lbnQuIEJ1dCBub3cgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IHBvcHM6ICp3aGF0KiBpbmNsdWRlcyBgbW0vZGFtb25gIGluIHRoZSBmaXJzdCBwbGFjZT8gV2hlcmUgaXMgdGhpcyBkaXJlY3RvcnkgZ2V0dGluZyBwdWxsZWQgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgYnVpbGQ/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGRlcGVuZGVuY3kgYmFjayB1cCB0aGUgY2hhaW4uIFVuZGVyc3RhbmRpbmcgdGhlIGhpZ2hlci1sZXZlbCBNYWtlZmlsZSBzdHJ1Y3R1cmUgaXMgdml0YWwuIElzIGl0IGluY2x1ZGVkIGRpcmVjdGx5IGluIGEgcGFyZW50IGRpcmVjdG9yeSdzIGBvYmoteWAgb3IgYG9iai1tYCBkZWZpbml0aW9uPyBPciBpcyB0aGVyZSBzb21lIGluZGlyZWN0IGluY2x1c2lvbiB2aWEgYSBtb2R1bGUgZGVwZW5kZW5jeSBvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGRpZ2dpbmcgdGhyb3VnaCB0aGUga2VybmVsJ3MgYnVpbGQgc3lzdGVtIGNhbiBiZSBmcnVzdHJhdGluZy4gR290dGEgZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jeSB0cmVlIHRvIHNlZSBob3cgYG1tL2RhbW9uYCBnZXRzIGJha2VkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTAzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6Mjc6MzMuMzMwODY3OTM1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2OTE3MzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEzND1vYmotJChDT05GSUdfREVCVUdfUEFHRV9SRUYpICs9IGRlYnVnX3BhZ2VfcmVmLm9cXG5tbS9NYWtlZmlsZToxMzU6b2JqLSQoQ09ORklHX0RBTU9OKSArPSBkYW1vbi9cXG5tbS9NYWtlZmlsZS0xMzYtb2JqLSQoQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZKSArPSB1c2VyY29weS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEyOjI3OjMzLjQwNzc4OTEwNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3ODUwNjM0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIERBTU9OIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSBzZWUgdGhpcyByZXF1aXJlbWVudCBmb3IgYENPTkZJR19EQU1PTmAuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBjb3JlIG9mIER5bmFtaWMgQWNjZXNzIE1vbml0b3JpbmcgKERBTU9OKS4gQnV0IEkga25vdyBEQU1PTiBoYXMgYSBsb3Qgb2YgZmxleGliaWxpdHksIHNvIEkgbmVlZCB0byB0aGluayBiZXlvbmQganVzdCB0aGUgYmFzZSBzZXR0aW5nLiBMZXQncyBzZWUuLi4gd2hhdCBhYm91dCB0aG9zZSBmaW5lci1ncmFpbmVkIGNvbnRyb2xzPyBJIHdvbmRlciBpZiBJIG5lZWQgdG8gZW5hYmxlIHNwZWNpZmljIGFzcGVjdHMgbGlrZSBgQ09ORklHX0RBTU9OX1ZBRERSYCwgd2hpY2ggaW1wbGllcyBWaXJ0dWFsIEFkZHJlc3MgbW9uaXRvcmluZywgb3IgcGVyaGFwcyBgQ09ORklHX0RBTU9OX1BBRERSYCwgZm9yIFBoeXNpY2FsIEFkZHJlc3MgbW9uaXRvcmluZyDigJMgdmVyeSBkaWZmZXJlbnQgdXNlIGNhc2VzIHRoZXJlIGRlcGVuZGluZyBvbiB0aGUgc3lzdGVtJ3MgbmVlZHMgYW5kIGhvdyBJIGludGVuZCB0byB1c2UgaXQuIEFuZCB0aGVuIGBDT05GSUdfREFNT05fU1lTRlNgIGlzIGNydWNpYWwgaWYgSSB3YW50IHRvIGFjdHVhbGx5ICppbnRlcmFjdCogd2l0aCBEQU1PTiB0aHJvdWdoIHRoZSBmaWxlc3lzdGVtIGludGVyZmFjZS5cblxuT2theSwgYmVzdCBiZXQgaXMgdG8gY2hlY2sgdGhlIGRlZmluaXRpdmUgc291cmNlOiB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSBhbGwgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbG9uZyB3aXRoIHRoZWlyIGRlcGVuZGVuY2llcywgZGVzY3JpcHRpb25zLCBhbmQgbGlrZWx5LCBkZWZhdWx0IHZhbHVlcy4gSSdsbCB0YWtlIGEgbG9vayBhbmQgZ2V0IHRoZSByaWdodCBjaG9pY2VzIHNlbGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDc2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6Mjc6MzguMTkyODU0MTAzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTQyNjgxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoyNzozOC43NDcxMjg5MzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NzE3NTkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoJ3MgU2NvcGUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vbHJ1X3NvcnQuY2AsIGFuZCBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCwgYW5kIGEgdGVzdCBoZWFkZXIsIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBJbW1lZGlhdGVseSwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX0xSVV9TT1JUYCwgYW5kIGBDT05GSUdfREFNT05fVkFERFJgIGFyZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUuIFRoYXQgY292ZXJzIHRoZSBtYWpvcml0eSBvZiB0aGUgY2hhbmdlcywgaXQgc2VlbXMuXG5cbkJ1dCBob2xkIG9uLi4uIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgIOKAkyB0aGF0IG9uZSBzb21ldGltZXMgdHJpcHMgcGVvcGxlIHVwLiBUaGF0IGZpbGUgaXMgb25seSBjb21waWxlZCB3aGVuICplaXRoZXIqIGBDT05GSUdfREFNT05fVkFERFJgICpvciogYENPTkZJR19EQU1PTl9QQUREUmAgaXMgZW5hYmxlZC4gQmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgYE1ha2VmaWxlYCBpbiBgbW0vZGFtb24vYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSB1bmRlcnN0YW5kIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgY29ycmVjdGx5LiBHb3R0YSBtYWtlIHN1cmUgSSdtIHNlZWluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gTm8gYXNzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NTUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6Mjc6NDIuNDM0MzA3MDAxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk3NDM0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3BzLWNvbW1vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9NYWtlZmlsZT0zPW9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxubW0vZGFtb24vTWFrZWZpbGU6NDpvYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG5tbS9kYW1vbi9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbm1tL2RhbW9uL01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEyOjI3OjQyLjU4NDA1NTI1MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDk5MDUxMTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBLZXkgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9MUlVfU09SVGAgY29uZmlndXJhdGlvbnMgYXJlIGFsbCByZWxldmFudCBhbmQgc291bmQgbGlrZSBhIHNvbGlkIGZvdW5kYXRpb24uIE5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgZm9yIHRoaXMgcGFydGljdWxhciBhcmVhIG9mIGludmVzdGlnYXRpb24uIEknbSBmb2N1c2luZyBvbiB0aGVzZTogYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdGAsIGBkYW1vbl91cGRhdGVfcHJvYmVfaGl0c2AsIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLCBhbmQgYGRhbW9uX2hvdF9zY29yZWAuXG5cbk5leHQsIEkgbmVlZGVkIHRvIGNoZWNrIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBhbmQgaWYgdGhleSdyZSBhY2Nlc3NpYmxlLiBJdCBsb29rcyBsaWtlIGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRgIGFuZCBgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHNgIGFyZSBzdGF0aWNhbGx5IGRlZmluZWQgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLCB3aGljaCBtZWFucyB0aGVpciBzY29wZSBpcyBsaW1pdGVkIHdpdGhpbiB0aGF0IGZpbGUuIEhvd2V2ZXIsIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBpcyBleHBvcnRlZCwgbWFraW5nIGl0IGdsb2JhbGx5IGFjY2Vzc2libGUgZnJvbSBgbW0vZGFtb24vY29yZS5jYC4gVGhlbiBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AgaXMgc3RhdGljIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhbmQgYGRhbW9uX2hvdF9zY29yZWAgaXMgZ2xvYmFsIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLlxuXG5GaW5hbGx5LCBpdCBzZWVtcyB3aXNlIHRvIGFsc28gbG9vayBhdCBgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0c2AgYW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCB0aGUgc3RhdGljIGZ1bmN0aW9uIGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDg5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEyOjI3OjQ3LjY4MzEwNzk0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIxMzQyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTkyND1zdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05NTMtICovXFxubW0vZGFtb24vY29yZS5jOjk1NDpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9jb3JlLmMtOTU1LVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLCBib29sIGFnZ3JlZ2F0aW5nKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEwMTI9aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTA0MS1cXG5tbS9kYW1vbi9jb3JlLmM6MTA0MjpcXHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKGN0eCwgYXR0cnMsIGFnZ3JlZ2F0aW5nKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTA0My1cXHRjdHgtXFx1MDAzZWF0dHJzID0gKmF0dHJzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoyNzo0Ny43OTUyNDg2M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDczMTUyNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBEYW1vbiBVcGRhdGUgUGF0aCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBpdCBsb29rcyBsaWtlIGBkYW1vbl9zZXRfYXR0cnNgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGUgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHNgIGZ1bmN0aW9uLiBUaGF0J3MgZ29vZCB0byBrbm93LCB0aGF0IHNldHMgdGhlIHN0YWdlIGZvciB3aGVyZSB0aGUgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBpcyBsaWtlbHkgdG8gYmUga2lja2VkIG9mZi4gTm93LCBzaW5jZSB3ZSdyZSB0YWxraW5nIGFib3V0IHVwZGF0ZXMsIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGRhbW9uX3Byb2JlX2hpdHNfbXZzdW1gLiBUaGlzIHNlZW1zIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgbW9uaXRvcmluZyByZXN1bHRzIGFyZSBhY3R1YWxseSBjb2xsZWN0ZWQgYW5kIGFnZ3JlZ2F0ZWQuIExldCdzIHNlZSBob3cgdGhhdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHVwZGF0ZSBwcm9jZXNzIGFuZCBzZWUgd2hlcmUgdGhlcmUgbWlnaHQgYmUgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoyNzo1MC44Njg0MDM2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5ODIyNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3Byb2JlX2hpdHNfbXZzdW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNTI9dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjc1LVxcbm1tL2RhbW9uL2NvcmUuYzoyNzY6dW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jLTI3Ny1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9OTA9c3RhdGljIGludCBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyAqcHJvYmVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExMy1cXHRcXHRzeXNfcHJvYmUgPSBkYW1vc19zeXNmc19wcm9iZV9hbGxvYyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE0OlxcdFxcdFxcdFxcdGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSwgcmVnaW9uLCBjdHgpKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTE1LVxcdFxcdGlmICghc3lzX3Byb2JlKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEyOjI3OjUwLjk5ODIzMTIwOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ5NTAyNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipOYXZpZ2F0aW5nIHRoZSBEQU1PTiBDb2RlYmFzZTogQSBUcmFjZSBvZiBEYXRhIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgREFNT04gY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtb25pdG9yaW5nIGRhdGEgZ2V0cyBwcm9jZXNzZWQgYW5kIHByb3BhZ2F0ZWQuIEkndmUgdHJhY2tlZCBkb3duIHRoYXQgYGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlyc2AgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyB0byBjYWxsIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYC4gVGhhdCdzIGludGVyZXN0aW5nLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgd2hlcmUgdGhlIHJhdyBwcm9iZSBoaXRzIGFyZSBiZWluZyBhZ2dyZWdhdGVkLCBwb3NzaWJseSBpbnRvIHNvbWUgbW92aW5nIHN1bSBvciBzaW1pbGFyIHN0YXRpc3RpY2FsIHN1bW1hcnkuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC5cblxuVGhlbiwgSSBzZWUgdGhhdCB3aGVuIGBkYW1vbl9zZXRfYXR0cnNgIGlzIGNhbGxlZCwgaXQgdHJpZ2dlcnMgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHNgLiBUaGlzIGlzIGdvb2QsIGl0IGlzIGxpa2VseSB3aGVyZSB0aGUgZmluYWwgYXR0cmlidXRlcyB0aGF0IHRyaWdnZXIgbWVtb3J5IHJlY2xhaW0gYXJlIGNhbGN1bGF0ZWQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGZpbmFsIHN0ZXBzIG9yIGlmIGl0IGhhcyBzb21lIGludGVybWVkaWF0ZSBmdW5jdGlvbmFsaXR5LlxuXG5JIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLiBUaGlzIHNlZW1zIHRvIGJlIHdoZXJlIHRoZSBMUlUgc29ydGluZyBhc3BlY3QgY29tZXMgaW50byBwbGF5IGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBtZW1vcnkgcmVjbGFpbSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGNvcnJlY3RseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgcHJvY2VzcyBpcyBhbmQgd2hpY2ggcGFyYW1ldGVycyBhcmUgYmVpbmcgdGFrZW4gaW50byBhY2NvdW50IGJ5IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uIEZyb20gdGhlIGZ1bmN0aW9uIG5hbWUsIEknZCBleHBlY3QgaXQgdG8gaW5jb3Jwb3JhdGUgc29tZSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgbW9uaXRvcmluZyBpbnRvIHNvcnRpbmcgYW5kIHNlbGVjdGlvbiBvZiB0aGUgcGFnZXMsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgYWN0dWFsIGZsb3cuIEkgbmVlZCB0byBtYXAgdGhlIG91dHB1dCBvZiB0aGUgbW9uaXRvcmluZyB0byB0aGUgcGFnZSBzZWxlY3Rpb24gZm9yIHJlY2xhaW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDQ1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6Mjc6NTUuNTQ3NzM2Njg4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjk5Nzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2xydV9zb3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vbHJ1X3NvcnQuYz0yNDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTI3MC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjI3MTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG5tbS9kYW1vbi9scnVfc29ydC5jLTI3Mi17XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTM0Mj1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQzLXtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjM0NDpcXHRyZXR1cm4gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQ1LX1cXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9NDA4PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy00MTYtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo0MTc6XFx0ZXJyID0gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE4LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEyOjI3OjU1LjYzMDc0OTI4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc4MTIyNjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcywgc3BlYWtpbmcgYXMgYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6XG5cbioqRGl2aW5nIERlZXAgaW50byBEQU1PTidzIExSVSBTb3J0aW5nKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgdGhhdCBib3RoIGBkYW1vbl9scnVfc29ydF90dXJuYCBhbmQgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm5gIGFyZSB1bHRpbWF0ZWx5IGNhbGxpbmcgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgc3VnZ2VzdHMgYSBjb21tb24gcGFyYW1ldGVyIGFwcGxpY2F0aW9uIHBhdGggZm9yIHRoZXNlIHNlZW1pbmdseSBkaXN0aW5jdCBMUlUgc29ydGluZyBvcGVyYXRpb25zIHdpdGhpbiBEQU1PTi4gVGhpcyBpbXBsaWVzIGEgY2VudHJhbGl6ZWQgbWVjaGFuaXNtIGZvciBjb25maWd1cmluZyBhbmQgYXBwbHlpbmcgdGhlIHJ1bGVzIGZvciBob3cgdGhlIExSVSBsaXN0cyBhcmUgbWFuYWdlZCBhbmQgYWRqdXN0ZWQgZHVyaW5nIHRoZWlyIHR1cm5zIGFuZCBjb21taXRtZW50IG9mIGlucHV0IG9wZXJhdGlvbnMuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IHdoYXQgYXJlIHRoZSBwYXJhbWV0ZXJzPyBBbmQsIG1vcmUgaW1wb3J0YW50bHksIGhvdyBhcmUgdGhleSAqYWZmZWN0aW5nKiB0aGUgc29ydGluZyBwcm9jZXNzLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIGhvdyBgZGFtb25faG90X3Njb3JlYCBmYWN0b3JzIGludG8gdGhpcyB3aG9sZSB0aGluZy4gSXMgYGRhbW9uX2hvdF9zY29yZWAgb25lIG9mIHRoZSBrZXkgcGFyYW1ldGVycyBiZWluZyBhcHBsaWVkPyBJcyBpdCBhIGtleSBkZXRlcm1pbmFudCBpbiBob3cgREFNT04gZGVjaWRlcyB0byBzb3J0IGFuZCBtYW5hZ2UgdGhlIExSVSBsaXN0cz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uc3RpdHV0ZXMgYSBob3Qgc2NvcmUsIHRoZSB3ZWlnaHRpbmcgb2YgdmFyaW91cyBob3Qgc2NvcmUgcGFyYW1ldGVycywgYW5kIGhvdyB0aGVzZSBkaXJlY3RseSBpbXBhY3QgdGhlIHNvcnRpbmcgbG9naWMgd2l0aGluIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYC4gVGhpcyBpcyB3aGVyZSBJJ2xsIGdldCB0aGUgcmVhbCBpbnNpZ2h0cyBpbnRvIHRoZSBwZXJmb3JtYW5jZSB0dW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjA5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6Mjc6NTkuNTA4ODczNzc3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzcwNDQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9ob3Rfc2NvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL29wcy1jb21tb24uYz03Mz12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMDMtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjEwNDppbnQgZGFtb25faG90X3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTEwNS1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTQ5PWludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTUxLXtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTUyOlxcdGludCBob3RuZXNzID0gZGFtb25faG90X3Njb3JlKGMsIHIsIHMpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNTMtXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg9MTU9aW50IGRhbW9uX2NvbGRfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTYtXFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTc6aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xOC1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz00MTc9c3RhdGljIGludCBkYW1vbl9wYV9zY2hlbWVfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtNDIzLVxcdGNhc2UgREFNT1NfTFJVX1BSSU86XFxubW0vZGFtb24vcGFkZHIuYzo0MjQ6XFx0XFx0cmV0dXJuIGRhbW9uX2hvdF9zY29yZShjb250ZXh0LCByLCBzY2hlbWUpO1xcbm1tL2RhbW9uL3BhZGRyLmMtNDI1LVxcdGNhc2UgREFNT1NfTFJVX0RFUFJJTzpcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtNDI3LVxcdGNhc2UgREFNT1NfTUlHUkFURV9IT1Q6XFxubW0vZGFtb24vcGFkZHIuYzo0Mjg6XFx0XFx0cmV0dXJuIGRhbW9uX2hvdF9zY29yZShjb250ZXh0LCByLCBzY2hlbWUpO1xcbm1tL2RhbW9uL3BhZGRyLmMtNDI5LVxcdGNhc2UgREFNT1NfTUlHUkFURV9DT0xEOlxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz05Mzg9c3RhdGljIGludCBkYW1vbl92YV9zY2hlbWVfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtOTQ1LVxcdGNhc2UgREFNT1NfTUlHUkFURV9IT1Q6XFxubW0vZGFtb24vdmFkZHIuYzo5NDY6XFx0XFx0cmV0dXJuIGRhbW9uX2hvdF9zY29yZShjb250ZXh0LCByLCBzY2hlbWUpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtOTQ3LVxcdGNhc2UgREFNT1NfTUlHUkFURV9DT0xEOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoyNzo1OS42MDI1ODI1NDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwODMwNzU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBEQU1PTiBTeW1ib2wgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIGl0IGxvb2tzIGxpa2UgYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLCBhbmQgYGRhbW9uX2hvdF9zY29yZWAgYXJlIHRoZSBtb3N0IHByb21pc2luZyBzeW1ib2xzIHRvIGRlbHZlIGludG8gaGVyZS4gU3BlY2lmaWNhbGx5LCBJIHRoaW5rIGBkYW1vbl9zZXRfYXR0cnNgIGlzIGEgc3Ryb25nIGNvbnRlbmRlciB0byBzdGFydCB3aXRoLiBUaGVuLCBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgc2VlbXMgcmVsZXZhbnQgYXMgd2VsbC4gXG5cbkhtbSwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgb2YgYSB3cmlua2xlLiBNYXliZSBgZGFtb25fbHJ1X3NvcnRfdHVybmAgb3IgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm5gIHdvdWxkIGJlIG1vcmUgZnJ1aXRmdWwgaW4gdGhhdCBjYXNlPyBPbiBzZWNvbmQgdGhvdWdodCwgc2luY2Ugc3l6a2FsbGVyIGNhbiBwb3RlbnRpYWxseSBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgaWYgcmVhY2hhYmxlLCBwZXJoYXBzIGBkYW1vbl9zZXRfYXR0cnNgIGlzIHRoZSBiZXN0IGJldCBzaW5jZSBpdCBpcyBleHBvcnRlZCBhbmQgbGlrZWx5IGdsb2JhbC4gSXQncyBiZXN0IHRvIHZlcmlmeSB0aGlzIHRob3VnaC4gVGltZSB0byBjb25maXJtIGlmIGBkYW1vbl9zZXRfYXR0cnNgIGlzIGFjdHVhbGx5IGdsb2JhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyODUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6Mjg6MDQuMTEwODkyNDc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDcxOTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zZXRfYXR0cnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz05Nzc9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05OTItLyoqXFxubW0vZGFtb24vY29yZS5jOjk5MzogKiBkYW1vbl9zZXRfYXR0cnMoKSAtIFNldCBhdHRyaWJ1dGVzIGZvciB0aGUgbW9uaXRvcmluZy5cXG5tbS9kYW1vbi9jb3JlLmMtOTk0LSAqIEBjdHg6XFx0XFx0bW9uaXRvcmluZyBjb250ZXh0XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTAxMS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTAxMjppbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG5tbS9kYW1vbi9jb3JlLmMtMTAxMy17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTY4NT1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzE1LVxcdCAqIHNjaGVtZXMgYW5kIHRhcmdldHMgc2hvdWxkIGJlIHVwZGF0ZWQgZmlyc3QsIHNpbmNlXFxubW0vZGFtb24vY29yZS5jOjE3MTY6XFx0ICogMS4gZGFtb25fc2V0X2F0dHJzKCkgdXBkYXRlcyBtb25pdG9yaW5nIHJlc3VsdHMgb2YgdGFyZ2V0cyBhbmRcXG5tbS9kYW1vbi9jb3JlLmMtMTcxNy1cXHQgKiBuZXh0X2FwcGx5X3NpcyBvZiBzY2hlbWVzLCBhbmRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzIxLVxcdGlmICghZGFtb25fYXR0cnNfZXF1YWxzKFxcdTAwMjZkc3QtXFx1MDAzZWF0dHJzLCBcXHUwMDI2c3JjLVxcdTAwM2VhdHRycykpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTcyMjpcXHRcXHRlcnIgPSBkYW1vbl9zZXRfYXR0cnMoZHN0LCBcXHUwMDI2c3JjLVxcdTAwM2VhdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTE3MjMtXFx0XFx0aWYgKGVycikge1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIxODM9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkIGtkYW1vbmRfdHVuZV9pbnRlcnZhbHMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjAxLVxcdHRyYWNlX2RhbW9uX21vbml0b3JfaW50ZXJ2YWxzX3R1bmUobmV3X2F0dHJzLnNhbXBsZV9pbnRlcnZhbCk7XFxubW0vZGFtb24vY29yZS5jOjIyMDI6XFx0ZGFtb25fc2V0X2F0dHJzKGMsIFxcdTAwMjZuZXdfYXR0cnMpO1xcbm1tL2RhbW9uL2NvcmUuYy0yMjAzLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNjQ0PXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM2NzMtXFx0XFx0ICogYmUgY2hhbmdlZCBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgUmVhZCB0aGUgdmFsdWVzIGhlcmUsIGFuZFxcbm1tL2RhbW9uL2NvcmUuYzozNjc0OlxcdFxcdCAqIHVzZSB0aG9zZSBmb3IgdGhpcyBpdGVyYXRpb24uICBUaGF0IGlzLCBkYW1vbl9zZXRfYXR0cnMoKVxcbm1tL2RhbW9uL2NvcmUuYy0zNjc1LVxcdFxcdCAqIHVwZGF0ZWQgbmV3IHZhbHVlcyBhcmUgcmVzcGVjdGVkIGZyb20gbmV4dCBpdGVyYXRpb24uXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzczNC1cXHRcXHRcXHRcXHQgKiBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgSW4gdGhlIGNhc2UsXFxubW0vZGFtb24vY29yZS5jOjM3MzU6XFx0XFx0XFx0XFx0ICogZGFtb25fc2V0X2F0dHJzKCkgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZnJvbVxcbm1tL2RhbW9uL2NvcmUuYy0zNzM2LVxcdFxcdFxcdFxcdCAqIGtkYW1vbmRfdHVuZV9pbnRlcnZhbCgpIG1heSB3cm9uZ2x5IHRoaW5rXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTI3MT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzAwLVxcdH1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjMwMTpcXHRlcnIgPSBkYW1vbl9zZXRfYXR0cnMocGFyYW1fY3R4LCBcXHUwMDI2YXR0cnMpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzAyLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjI0LVxcdH1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MjI1OlxcdGVyciA9IGRhbW9uX3NldF9hdHRycyhwYXJhbV9jdHgsIFxcdTAwMjZhdHRycyk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTIyNi1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTE1MT1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3RhdF9idWlsZF9jdHgodm9pZClcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy0xNzUtXFx0fTtcXG5tbS9kYW1vbi9zdGF0LmM6MTc2OlxcdGlmIChkYW1vbl9zZXRfYXR0cnMoY3R4LCBcXHUwMDI2YXR0cnMpKVxcbm1tL2RhbW9uL3N0YXQuYy0xNzctXFx0XFx0Z290byBmcmVlX291dDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTg4OT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE5MDgtXFx0fTtcXG5tbS9kYW1vbi9zeXNmcy5jOjE5MDk6XFx0cmV0dXJuIGRhbW9uX3NldF9hdHRycyhjdHgsIFxcdTAwMjZhdHRycyk7XFxubW0vZGFtb24vc3lzZnMuYy0xOTEwLX1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD02NDE9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfYXR0cnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY1MS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NjUyOlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZXRfYXR0cnMoYywgXFx1MDAyNnZhbGlkX2F0dHJzKSwgMCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY1My1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02NTUtXFx0aW52YWxpZF9hdHRycy5taW5fbnJfcmVnaW9ucyA9IDE7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjY1NjpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFxcdTAwMjZpbnZhbGlkX2F0dHJzKSwgLUVJTlZBTCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY1Ny1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02NTktXFx0aW52YWxpZF9hdHRycy5tYXhfbnJfcmVnaW9ucyA9IDk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjY2MDpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFxcdTAwMjZpbnZhbGlkX2F0dHJzKSwgLUVJTlZBTCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY2MS1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02NjMtXFx0aW52YWxpZF9hdHRycy5hZ2dyX2ludGVydmFsID0gNDk5OTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NjY0OlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZXRfYXR0cnMoYywgXFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjY1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoyODowNC4yMDE2MTcxNjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU5MDYwMjQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBEQU1PTiBTeW1ib2wgU2NvcGUgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBzZWVpbmcgYSBoYW5kZnVsIG9mIGtleSBzeW1ib2xzIGJlaW5nIHRvdWNoZWQgaGVyZSBpbiB0aGlzIERBTU9OIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIGdsb2JhbCBuYXR1cmUgb2YgYGRhbW9uX3NldF9hdHRyc2AgYW5kIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBqdW1wcyBvdXQgaW1tZWRpYXRlbHkuIFRoZSBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AgYW5kIGBkYW1vbl9scnVfc29ydF90dXJuYCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBub3QgdGhlIHByaW1hcnkgZm9jdXMgaGVyZS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGFjY291bnQgZm9yIHRoZWlyIHN0YXRpYyBuYXR1cmUgZHVyaW5nIGludmVzdGlnYXRpb24uXG5cblRoZW4sIHRoZXJlJ3MgYGRhbW9uX2hvdF9zY29yZWAsIGFsc28gZ2xvYmFsLCBhbmQgbG9jYXRlZCBpbiBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYC5cblxuU28sIGNvbnNpZGVyaW5nIHRoZXNlIGluaXRpYWwgZmluZGluZ3MsIHRoZSBwcmltYXJ5IGZvY3VzIGFyZWFzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24gYXJlOlxuXG4qICAgYGRhbW9uX3NldF9hdHRyc2BcbiogICBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWBcbiogICBgZGFtb25faG90X3Njb3JlYFxuXG5JJ2xsIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMgYXMgcGFydCBvZiB0aGlzIHByb2Nlc3MuIFRoZSBwcmVzZW5jZSBvZiBzdGF0aWMgaW5saW5lIG9yIHN0YXRpYyBmdW5jdGlvbnMgaXMgZXhwZWN0ZWQgYmVoYXZpb3IsIGJ1dCB0aGUgc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQsIHdpbGwgbmVlZCBmdXJ0aGVyIGFuYWx5c2lzLlxuXG5Mb29raW5nIHRocm91Z2ggdGhlIG90aGVyIHN5bWJvbHMsIGl0J3MgY2xlYXIgd2UgaGF2ZSBtYW55IHN0YXRpYyBmdW5jdGlvbnM6XG5cbiogICBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAgKHN0YXRpYyBpbmxpbmUgaW4gYGluY2x1ZGUvbGludXgvZGFtb24uaGApXG4qICAgYGRhbW9uX3NhbXBsZV9icF90b19jb3VudGAgKHN0YXRpYyBpbiBgbW0vZGFtb24vY29yZS5jYClcbiogICBgZGFtb25fc2FtcGxlX2NvdW50X3RvX2JwYCAoc3RhdGljIGluIGBtbS9kYW1vbi9jb3JlLmNgKVxuKiAgIGBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnNgIChzdGF0aWMgaW4gYG1tL2RhbW9uL2NvcmUuY2ApXG4qICAgYGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzYCAoc3RhdGljIGluIGBtbS9kYW1vbi9jb3JlLmNgKVxuKiAgIGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRgIChzdGF0aWMgaW4gYG1tL2RhbW9uL2NvcmUuY2ApXG4qICAgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHNgIChzdGF0aWMgaW4gYG1tL2RhbW9uL2NvcmUuY2ApXG5cbk5vdywgaGVyZSdzIGEgY3J1Y2lhbCBwb2ludC4gSXQncyBiZWNvbWluZyBldmlkZW50IHRoYXQgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHNgIGlzIGNhbGxlZCBieSBgZGFtb25fc2V0X2F0dHJzYC4gVGhpcyBjZW1lbnRzIGBkYW1vbl9zZXRfYXR0cnNgIGFzIGEgdmVyeSBzb2xpZCBmb2N1cyBzeW1ib2wuXG5cbkFsc28sIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBpcyBjYWxsZWQgYnkgYGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlyc2AuIEFuZCBgZGFtb25faG90X3Njb3JlYCBpcyBjYWxsZWQgYnkgYGRhbW9uX3BhX3NjaGVtZV9zY29yZWAgYW5kIGBkYW1vbl92YV9zY2hlbWVfc2NvcmVgLiBUaGlzIHJlbGF0aW9uc2hpcCBmdXJ0aGVyIGRlZmluZXMgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucy5cblxuVG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgSSBuZWVkIHRvIHJldmlzaXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJIHNlZTpcblxuKiAgIGBEQU1PTmBcbiogICBgREFNT05fVkFERFJgXG4qICAgYERBTU9OX1BBRERSYFxuKiAgIGBEQU1PTl9TWVNGU2BcbiogICBgREFNT05fTFJVX1NPUlRgXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBwcmVzZW5jZSBhbmQgbWVhbmluZyBvZiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMuIEkgbm90ZSB0aGF0IGBEQU1PTl9SRUNMQUlNYCBoYXNuJ3QgYmVlbiBtb2RpZmllZCwgYnV0IHRoZSBwYXRjaCBtb2RpZmllcyBgbW0vZGFtb24vbHJ1X3NvcnQuY2AuIExldCdzIGNoZWNrIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhZ2Fpbi5cblxuT3ZlcmFsbCwgaXQgc2VlbXMgdGhhdCB0aGVyZSdzIGEgc3Ryb25nIGZvY3VzIG9uIGNvcmUgREFNT04gZnVuY3Rpb25hbGl0eSwgaW5jbHVkaW5nIGF0dHJpYnV0ZSBzZXR0aW5nLCBwcm9iaW5nLCBob3Qtc2NvcmUgY2FsY3VsYXRpb24sIGFuZCBMUlUgc29ydGluZywgYXMgaXQgcmVsYXRlcyB0byB0aGUgcHJvYmUgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6Mjg6MTIuNzkyMjIxMjkyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIzNDI5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OX0xSVV9TT1JUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz04OD1jb25maWcgREFNT05fUkVDTEFJTVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoyODoxMi44OTQ1NjgxNDJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI5MDAwMzE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIGBEQU1PTl9MUlVfU09SVGAgY29uZmlnIGlzIGluZGVlZCByZWxldmFudCBoZXJlLiBMZXQncyBicmVhayBkb3duIHRoZSBjb25maWd1cmF0aW9uIHNpZGUgb2YgdGhpbmdzLiBJJ20gc2VlaW5nIHRoZSBjb3JlIGBEQU1PTmAgb3B0aW9uczogYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBEQU1PTl9MUlVfU09SVGAgYXJlIGFsbCBjcnVjaWFsIGZvciBlbmFibGluZyBhbmQgY29udHJvbGxpbmcgREFNT04ncyBiZWhhdmlvci5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIHRoZSBpbXBvcnRhbnQgc3ltYm9scyB0aGlzIHBhdGNoIGFmZmVjdHMuIEkgbmVlZCB0byBrZWVwIGEgY2xvc2UgZXllIG9uIGBkYW1vbl9zZXRfYXR0cnNgLCBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAsIGFuZCBgZGFtb25faG90X3Njb3JlYC4gSSBhbHJlYWR5IGtub3cgdGhhdCBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgZ2V0cyBjYWxsZWQgZnJvbSBgZGFtb3Nfc3lzZnNfcHJvYmVzX2FkZF9kaXJzYC4gQW5kIHllcywgdGhhdCdzIHJlYWNoYWJsZSB2aWEgc3lzZnMuIEkgY2FuIGFsc28gcmVhY2ggYGRhbW9uX3NldF9hdHRyc2AgdmlhIHN5c2ZzIGFuZCBwb3RlbnRpYWxseSBvdGhlciBtb2R1bGVzLiBBbHNvLCBgZGFtb25faG90X3Njb3JlYCBnZXRzIGNhbGxlZCB2aWEgdGhlIGBkYW1vbl9wYV9zY2hlbWVfc2NvcmVgIGFuZCBgZGFtb25fdmFfc2NoZW1lX3Njb3JlYCBmdW5jdGlvbnMuXG5cbkkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHNgIGlzIHJlYWNoYWJsZSBmcm9tIGFueXdoZXJlIGVsc2UuIEdvb2QsIGl0IGlzIGNhbGxlZCBmcm9tIGBkYW1vbl9zZXRfYXR0cnNgLCB0aGF0IG1ha2VzIHNlbnNlLlxuXG5Ob3csIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IGFyZSByZWxldmFudD8gQWhhLCBgREFNT05fS1VOSVRfVEVTVGAgaXMgbW9kaWZpZWQgaW4gdGhlIHBhdGNoJ3MgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIEhvd2V2ZXIsIEkgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gZW5hYmxlIGt1bml0IHRlc3RzIHRvIGZ1enogdGhlIGNvcmUgbG9naWMgaGVyZSwgYWx0aG91Z2ggaXQgd291bGRuJ3QgaHVydC4gV2UgdXN1YWxseSBkb24ndCBsaXN0IGt1bml0IGNvbmZpZ3MgdW5sZXNzIHRoZSBwYXRjaCBpcyBvbmx5IGFib3V0IGt1bml0LlxuXG5Ob3csIGZvciB0aGUgcmVhc29uaW5nOiB0aGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IERBTU9OIGhhbmRsZXMgc2FtcGxlIGNvdW50aW5nIGFuZCBhZ2dyZWdhdGlvbi4gVGhlIGludHJvZHVjdGlvbiBvZiBgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHNgIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgdG8gYWNjb21tb2RhdGUgc3BlY2lmaWMgd2luZG93IGNvbmRpdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhpcyBwYXRjaC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbXBhY3RpbmcgdGhlIHZlcnkgY29yZSBvZiBEQU1PTidzIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZywgaW5jbHVkaW5nIGhvdyByZXN1bHRzIGFyZSBjYWxjdWxhdGVkIGFuZCB1cGRhdGVkLiBUaGlzIGlzIHZlcnkgcmVsZXZhbnQgdG8gZnV6emluZy5cblxuVGhlcmVmb3JlOlxuXG5Xb3J0aEZ1enppbmc6IFRydWVcbkZvY3VzU3ltYm9sczogYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCwgYGRhbW9uX2hvdF9zY29yZWBcbkVuYWJsZUNvbmZpZ3M6IGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9MUlVfU09SVGBcblJlYXNvbmluZzogVGhlIHBhdGNoIGRpcmVjdGx5IGFsdGVycyBjb3JlIERBTU9OIGxvZ2ljIHJlbGF0ZWQgdG8gdGhlIGNhbGN1bGF0aW9uIGFuZCB1cGRhdGluZyBvZiBtZW1vcnkgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cywgaW50cm9kdWNpbmcgYSBuZXcgY29uZGl0aW9uIGluIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBhbmQgbmV3IHByb2JlIGhpdCB1cGRhdGluZyBsb2dpYyBpbiBgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc1MSwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6Mjg6MjIuMTg0NTcyOTkxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0ODM4MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fTFJVX1NPUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zZXRfYXR0cnNcIixcbiAgICBcImRhbW9uX3Byb2JlX2hpdHNfbXZzdW1cIixcbiAgICBcImRhbW9uX2hvdF9zY29yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgREFNT04gbG9naWMgZm9yIGNhbGN1bGF0aW5nIGFuZCB1cGRhdGluZyBtZW1vcnkgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cywgaW5jbHVkaW5nIGEgbmV3IGNvbmRpdGlvbiBpbiBkYW1vbl9wcm9iZV9oaXRzX212c3VtIGFuZCBuZXcgcHJvYmUgaGl0IHVwZGF0aW5nIGxvZ2ljIGluIGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzLiBJdCBhbHNvIHJlbmFtZXMgc2V2ZXJhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzYW1wbGUgY291bnRpbmcgYW5kIGFnZ3JlZ2F0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIERBTU9OIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3NldF9hdHRyc1wiLFxuICAgIFwiZGFtb25fcHJvYmVfaGl0c19tdnN1bVwiLFxuICAgIFwiZGFtb25faG90X3Njb3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBEQU1PTiBsb2dpYyBmb3IgY2FsY3VsYXRpbmcgYW5kIHVwZGF0aW5nIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzLCBpbmNsdWRpbmcgYSBuZXcgY29uZGl0aW9uIGluIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0gYW5kIG5ldyBwcm9iZSBoaXQgdXBkYXRpbmcgbG9naWMgaW4gZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMuIEl0IGFsc28gcmVuYW1lcyBzZXZlcmFsIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHNhbXBsZSBjb3VudGluZyBhbmQgYWdncmVnYXRpb24uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgREFNT04gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2sh4b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 12:09:00 +0000 UTC FinishedAt: 2026-07-07 12:28:24 +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": "db6ed2a3d31068ca5577466591b2521dee0508ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "DAMON_LRU_SORT" ], "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": "db6ed2a3d31068ca5577466591b2521dee0508ca", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "DAMON_LRU_SORT" ], "series_id": "ec3fff8b-e6b6-45a1-88e7-7686cc863ac9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_set_attrs", "damon_probe_hits_mvsum", "damon_hot_score" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc2V0X2F0dHJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3Byb2JlX2hpdHNfbXZzdW0mIzM0OywKICAgICYjMzQ7ZGFtb25faG90X3Njb3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgREFNT04gbG9naWMgZm9yIGNhbGN1bGF0aW5nIGFuZCB1cGRhdGluZyBtZW1vcnkgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cywgaW5jbHVkaW5nIGEgbmV3IGNvbmRpdGlvbiBpbiBkYW1vbl9wcm9iZV9oaXRzX212c3VtIGFuZCBuZXcgcHJvYmUgaGl0IHVwZGF0aW5nIGxvZ2ljIGluIGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzLiBJdCBhbHNvIHJlbmFtZXMgc2V2ZXJhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzYW1wbGUgY291bnRpbmcgYW5kIGFnZ3JlZ2F0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIERBTU9OIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjNjMzY5NGFlZDUzMjM3YjU4NjcyMmNjZGUxZjFkYjU2Y2Y2YTQyMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMTI6Mjc6MTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCAxOWI3ZTgzOWJkZTBiNC4uNjNmNTk2OTU3YzFmMWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTEwNTYsMTUgJiM0MzsxMDU2LDE3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vbl90YXJnZXRfaGFzX3BpZChjb25zdCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRyZXR1cm4gY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfVkFERFIgfHwgY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfRlZBRERSO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoY29uc3Qgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbiYjNDM7LyogUmV0dXJucyBudW1iZXIgb2Ygc2FtcGxlcyBwZXIgYWdncmVnYXRpb24gaW50ZXJ2YWwgKi9cbiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWw7XG4tXHR1bnNpZ25lZCBsb25nIG1heF9ucl9hY2Nlc3NlcztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3NhbXBsZXM7XG4gXG4gXHRzYW1wbGVfaW50ZXJ2YWwgPSBhdHRycy1cdTAwM2VzYW1wbGVfaW50ZXJ2YWwgPyA6IDE7XG4tXHRtYXhfbnJfYWNjZXNzZXMgPSBtaW4oYXR0cnMtXHUwMDNlYWdncl9pbnRlcnZhbCAvIHNhbXBsZV9pbnRlcnZhbCxcbiYjNDM7XHRucl9zYW1wbGVzID0gbWluKGF0dHJzLVx1MDAzZWFnZ3JfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWwsXG4gXHRcdFx0KHVuc2lnbmVkIGxvbmcpVUlOVF9NQVgpO1xuLVx0cmV0dXJuIG1heF9ucl9hY2Nlc3NlcyA/IDogMTtcbiYjNDM7XHRyZXR1cm4gbnJfc2FtcGxlcyA/IDogMTtcbiB9XG4gXG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCAzOTBlMDBiMzY4NWVmYy4uMDkzZGE1YzBiMzY5MzQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTI5MCw2ICYjNDM7MjkwLDkgQEAgdW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gXHRcdFx0Y3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzO1xuIFx0bGVmdF93aW5kb3dfYnAgPSBtdWx0X2ZyYWMobGVmdF93aW5kb3csIDEwMDAwLCB3aW5kb3dfbGVuKTtcbiBcbiYjNDM7XHRpZiAobGVmdF93aW5kb3dfYnAgPT0gMTAwMDApXG4mIzQzO1x0XHRyZXR1cm4gci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XTtcbiYjNDM7XG4gXHRyZXR1cm4gZGFtb25fbXZzdW0oci1cdTAwM2Vwcm9iZV9oaXRzW3Byb2JlX2lkeF0sXG4gXHRcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XSwgbGVmdF93aW5kb3dfYnApO1xuIH1cbkBAIC04NzYsNDMgJiM0Mzs4NzksNTggQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9hZ2VfZm9yX25ld19hdHRycyh1bnNpZ25lZCBpbnQgYWdlLFxuIFx0cmV0dXJuIGFnZSAqIG9sZF9hdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsIC8gbmV3X2F0dHJzLVx1MDAzZWFnZ3JfaW50ZXJ2YWw7XG4gfVxuIFxuLS8qIGNvbnZlcnQgYWNjZXNzIHJhdGlvIGluIGJwIChwZXIgMTAsMDAwKSB0byBucl9hY2Nlc3NlcyAqL1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXMoXG4tXHRcdHVuc2lnbmVkIGludCBhY2Nlc3Nlc19icCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbiYjNDM7LyogY29udmVydCBzYW1wbGUgcmF0aW8gaW4gYnAgKHBlciAxMCwwMDApIHRvIGNvdW50ICovXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fc2FtcGxlX2JwX3RvX2NvdW50KFxuJiM0MztcdFx0dW5zaWduZWQgaW50IGJwLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuIHtcbi1cdHJldHVybiBhY2Nlc3Nlc19icCAqIGRhbW9uX21heF9ucl9hY2Nlc3NlcyhhdHRycykgLyAxMDAwMDtcbiYjNDM7XHRyZXR1cm4gYnAgKiBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKGF0dHJzKSAvIDEwMDAwO1xuIH1cbiBcbi0vKlxuLSAqIENvbnZlcnQgbnJfYWNjZXNzZXMgdG8gYWNjZXNzIHJhdGlvIGluIGJwIChwZXIgMTAsMDAwKS5cbi0gKlxuLSAqIENhbGxlcnMgc2hvdWxkIGVuc3VyZSBhdHRycy5hZ2dyX2ludGVydmFsIGlzIG5vdCB6ZXJvLCBsaWtlXG4tICogZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0cygpIGRvZXMgLiAgT3RoZXJ3aXNlLCBkaXZpZGUtYnktemVybyB3b3VsZFxuLSAqIGhhcHBlbi5cbi0gKi9cbi1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKFxuLVx0XHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4mIzQzOy8qIGNvbnZlcnQgc2FtcGxlIGNvdW50IHRvIHJhdGlvIGluIGJwIChwZXIgMTAsMDAwKSAqL1xuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3NhbXBsZV9jb3VudF90b19icChcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBjb3VudCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbiB7XG4tXHRyZXR1cm4gbXVsdF9mcmFjKG5yX2FjY2Vzc2VzLCAxMDAwMCwgZGFtb25fbWF4X25yX2FjY2Vzc2VzKGF0dHJzKSk7XG4mIzQzO1x0cmV0dXJuIG11bHRfZnJhYyhjb3VudCwgMTAwMDAsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoYXR0cnMpKTtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucl9hY2Nlc3NlcyxcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzLFxuIFx0XHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMpXG4ge1xuLVx0cmV0dXJuIGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzKFxuLVx0XHRcdGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKFxuLVx0XHRcdFx0bnJfYWNjZXNzZXMsIG9sZF9hdHRycyksXG4mIzQzO1x0cmV0dXJuIGRhbW9uX3NhbXBsZV9icF90b19jb3VudChcbiYjNDM7XHRcdFx0ZGFtb25fc2FtcGxlX2NvdW50X3RvX2JwKG5yX2FjY2Vzc2VzLCBvbGRfYXR0cnMpLFxuIFx0XHRcdG5ld19hdHRycyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuJiM0MztcdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuJiM0MztcdFx0Ym9vbCBhZ2dyZWdhdGluZywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xuJiM0MztcdGludCBpID0gMDtcbiYjNDM7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XG4mIzQzO1x0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcbiYjNDM7XHRcdFx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1tpXSwgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xuJiM0MztcdFx0aWYgKCFhZ2dyZWdhdGluZylcbiYjNDM7XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKFxuJiM0MztcdFx0XHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldLCBvbGRfYXR0cnMsXG4mIzQzO1x0XHRcdFx0XHRuZXdfYXR0cnMpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xuJiM0MztcdFx0aSYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsXG4tXHRcdGJvb2wgYWdncmVnYXRpbmcpXG4mIzQzO1x0XHRib29sIGFnZ3JlZ2F0aW5nLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4ge1xuLVx0ci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycyhcbiYjNDM7XHRkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhyLCBvbGRfYXR0cnMsIG5ld19hdHRycywgYWdncmVnYXRpbmcsIGN0eCk7XG4mIzQzO1xuJiM0MztcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcbiBcdFx0XHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbiBcdGlmICghYWdncmVnYXRpbmcpXG4tXHRcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKFxuJiM0MztcdFx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcbiBcdFx0XHRcdHItXHUwMDNlbnJfYWNjZXNzZXMsIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbiBcdGVsc2VcbiBcdFx0LypcbkBAIC05NDgsOCAmIzQzOzk2Niw4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFxuIFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eClcbiBcdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpXG4tXHRcdFx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KFxuLVx0XHRcdFx0XHRyLCBvbGRfYXR0cnMsIG5ld19hdHRycywgYWdncmVnYXRpbmcpO1xuJiM0MztcdFx0XHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgb2xkX2F0dHJzLCBuZXdfYXR0cnMsXG4mIzQzO1x0XHRcdFx0XHRhZ2dyZWdhdGluZywgY3R4KTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuaW5kZXggZThjMzg5YWQzMjI2ZjcuLjdlMDc3MDg0Y2IwM2FhIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vbHJ1X3NvcnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuQEAgLTMwMyw3ICYjNDM7MzAzLDcgQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0ZXJyID0gLUVOT01FTTtcbi1cdGhvdF90aHJlcyA9IGRhbW9uX21heF9ucl9hY2Nlc3NlcyhcdTAwMjZhdHRycykgKlxuJiM0MztcdGhvdF90aHJlcyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpICpcbiBcdFx0aG90X3RocmVzX2FjY2Vzc19mcmVxIC8gMTAwMDtcbiBcdGhvdF9zY2hlbWUgPSBkYW1vbl9scnVfc29ydF9uZXdfaG90X3NjaGVtZShob3RfdGhyZXMpO1xuIFx0aWYgKCFob3Rfc2NoZW1lKVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuaW5kZXggNmJkZDFjZmQzODYzYTMuLjg5YzY5NGY2ZTRmYTg5IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbkBAIC0xMTIsNyAmIzQzOzExMiw3IEBAIGludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdGludCBob3RuZXNzO1xuIFxuIFx0ZnJlcV9zdWJzY29yZSA9IHItXHUwMDNlbnJfYWNjZXNzZXMgKiBEQU1PTl9NQVhfU1VCU0NPUkUgL1xuLVx0XHRkYW1vbl9tYXhfbnJfYWNjZXNzZXMoXHUwMDI2Yy1cdTAwM2VhdHRycyk7XG4mIzQzO1x0XHRkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmMtXHUwMDNlYXR0cnMpO1xuIFxuIFx0YWdlX2luX3NlYyA9ICh1bnNpZ25lZCBsb25nKXItXHUwMDNlYWdlICogYy1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsIC8gMTAwMDAwMDtcbiBcdGlmIChhZ2VfaW5fc2VjKVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuaW5kZXggMDEyNGY4M2IzOWI4MzkuLjhlMDE0MzdlYjVlYTgxIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbkBAIC01NzUsNyAmIzQzOzU3NSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdH0sIDMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zYW1wbGVfY291bnRfdG9fYnAoc3RydWN0IGt1bml0ICp0ZXN0KVxuIHtcbiBcdHN0cnVjdCBkYW1vbl9hdHRycyBhdHRycyA9IHtcbiBcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEwLFxuQEAgLTU4NSw3ICYjNDM7NTg1LDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHQvKlxuIFx0ICogSW4gc29tZSBjYXNlcyBzdWNoIGFzIDMyYml0IGFyY2hpdGVjdHVyZXMgd2hlcmUgVUlOVF9NQVggaXNcbiBcdCAqIFVMT05HX01BWCwgYXR0cnMuYWdncl9pbnRlcnZhbCBiZWNvbWVzIHplcm8uICBDYWxsaW5nXG4tXHQgKiBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icCgpIGluIHRoZSBjYXNlIHdpbGwgY2F1c2VcbiYjNDM7XHQgKiBkYW1vbl9zYW1wbGVfY291bnRfdG9fYnAoKSBpbiB0aGUgY2FzZSB3aWxsIGNhdXNlXG4gXHQgKiBkaXZpZGUtYnktemVyby4gIFN1Y2ggY2FzZSBpcyBwcm9oaWJpdGVkIGluIG5vcm1hbCBleGVjdXRpb24gc2luY2VcbiBcdCAqIHRoZSBjYXV0aW9uIGlzIGRvY3VtZW50ZWQgb24gdGhlIGNvbW1lbnQgZm9yIHRoZSBmdW5jdGlvbiwgYW5kXG4gXHQgKiBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKCkgZG9lcyB0aGUgY2hlY2suICBTa2lwIHRoZSB0ZXN0IGluXG5AQCAtNTk0LDcgJiM0Mzs1OTQsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdGlmICghYXR0cnMuYWdncl9pbnRlcnZhbClcbiBcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDthZ2dyX2ludGVydmFsIGlzIHplcm8uXCYjMzQ7KTtcbiBcbi1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icCgxMjMsIFx1MDAyNmF0dHJzKSwgMCk7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX3NhbXBsZV9jb3VudF90b19icCgxMjMsIFx1MDAyNmF0dHJzKSwgMCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBrdW5pdCAqdGVzdClcbkBAIC02MDMsMzIgJiM0Mzs2MDMsMzkgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHQuc2FtcGxlX2ludGVydmFsID0gMTAsIC5hZ2dyX2ludGVydmFsID0gMTAwMCx9O1xuIFx0c3RydWN0IGRhbW9uX2F0dHJzIG5ld19hdHRycztcbiBcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIgPSBkYW1vbl9uZXdfcmVnaW9uKDMsIDcpO1xuJiM0MztcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbiBcbiBcdGlmICghcilcbiBcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtyZWdpb24gYWxsb2MgZmFpbFwmIzM0Oyk7XG4mIzQzO1x0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xuJiM0MztcdGlmICghY3R4KSB7XG4mIzQzO1x0XHRkYW1vbl9mcmVlX3JlZ2lvbihyKTtcbiYjNDM7XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7Y3R4IGFsbG9jIGZhaWxcJiMzNDspO1xuJiM0MztcdH1cbiBcbiBcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSAxNTtcbiBcdHItXHUwMDNlYWdlID0gMjA7XG4gXG4gXHRuZXdfYXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbiBcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEwMCwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwMCx9O1xuLVx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFx1MDAyNm9sZF9hdHRycywgXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSk7XG4mIzQzO1x0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFx1MDAyNm9sZF9hdHRycywgXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSwgY3R4KTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZW5yX2FjY2Vzc2VzLCAxNSk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VhZ2UsIDIpO1xuIFxuIFx0bmV3X2F0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XG4gXHRcdC5zYW1wbGVfaW50ZXJ2YWwgPSAxLCAuYWdncl9pbnRlcnZhbCA9IDEwMDB9O1xuLVx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFx1MDAyNm9sZF9hdHRycywgXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSk7XG4mIzQzO1x0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFx1MDAyNm9sZF9hdHRycywgXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSwgY3R4KTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZW5yX2FjY2Vzc2VzLCAxNTApO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYWdlLCAyKTtcbiBcbiBcdG5ld19hdHRycyA9IChzdHJ1Y3QgZGFtb25fYXR0cnMpe1xuIFx0XHQuc2FtcGxlX2ludGVydmFsID0gMSwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDB9O1xuLVx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFx1MDAyNm9sZF9hdHRycywgXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSk7XG4mIzQzO1x0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFx1MDAyNm9sZF9hdHRycywgXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSwgY3R4KTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZW5yX2FjY2Vzc2VzLCAxNTApO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYWdlLCAyMCk7XG4gXG4gXHRkYW1vbl9mcmVlX3JlZ2lvbihyKTtcbiYjNDM7XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG5AQCAtMTU3Miw3ICYjNDM7MTU3OSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9vcHNfcmVnaXN0cmF0aW9uKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zZXRfcmVnaW9ucyksXG4tXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnApLFxuJiM0MztcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zYW1wbGVfY291bnRfdG9fYnApLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdCksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9tdnN1bSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fTFJVX1NPUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zZXRfYXR0cnMmIzM0OywKICAgICYjMzQ7ZGFtb25fcHJvYmVfaGl0c19tdnN1bSYjMzQ7LAogICAgJiMzNDtkYW1vbl9ob3Rfc2NvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBEQU1PTiBsb2dpYyBmb3IgY2FsY3VsYXRpbmcgYW5kIHVwZGF0aW5nIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzLCBpbmNsdWRpbmcgYSBuZXcgY29uZGl0aW9uIGluIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0gYW5kIG5ldyBwcm9iZSBoaXQgdXBkYXRpbmcgbG9naWMgaW4gZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMuIEl0IGFsc28gcmVuYW1lcyBzZXZlcmFsIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHNhbXBsZSBjb3VudGluZyBhbmQgYWdncmVnYXRpb24uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgREFNT04gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDIzYzM2OTRhZWQ1MzIzN2I1ODY3MjJjY2RlMWYxZGI1NmNmNmE0MjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCA3IDEyOjI3OjEzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCmluZGV4IDE5YjdlODM5YmRlMGI0Li42M2Y1OTY5NTdjMWYxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZGFtb24uaApAQCAtMTA1NiwxNSAmIzQzOzEwNTYsMTcgQEAgc3RhdGljIGlubGluZSBib29sIGRhbW9uX3RhcmdldF9oYXNfcGlkKGNvbnN0IHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIAlyZXR1cm4gY3R4LSZndDtvcHMuaWQgPT0gREFNT05fT1BTX1ZBRERSIHx8IGN0eC0mZ3Q7b3BzLmlkID09IERBTU9OX09QU19GVkFERFI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRhbW9uX21heF9ucl9hY2Nlc3Nlcyhjb25zdCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKQomIzQzOy8qIFJldHVybnMgbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGFnZ3JlZ2F0aW9uIGludGVydmFsICovCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncigKJiM0MzsJCWNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpCiB7CiAJdW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWw7Ci0JdW5zaWduZWQgbG9uZyBtYXhfbnJfYWNjZXNzZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfc2FtcGxlczsKIAogCXNhbXBsZV9pbnRlcnZhbCA9IGF0dHJzLSZndDtzYW1wbGVfaW50ZXJ2YWwgPyA6IDE7Ci0JbWF4X25yX2FjY2Vzc2VzID0gbWluKGF0dHJzLSZndDthZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsLAomIzQzOwlucl9zYW1wbGVzID0gbWluKGF0dHJzLSZndDthZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsLAogCQkJKHVuc2lnbmVkIGxvbmcpVUlOVF9NQVgpOwotCXJldHVybiBtYXhfbnJfYWNjZXNzZXMgPyA6IDE7CiYjNDM7CXJldHVybiBucl9zYW1wbGVzID8gOiAxOwogfQogCiAKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCAzOTBlMDBiMzY4NWVmYy4uMDkzZGE1YzBiMzY5MzQgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTI5MCw2ICYjNDM7MjkwLDkgQEAgdW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJCQljdHgtJmd0O3Bhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzOwogCWxlZnRfd2luZG93X2JwID0gbXVsdF9mcmFjKGxlZnRfd2luZG93LCAxMDAwMCwgd2luZG93X2xlbik7CiAKJiM0MzsJaWYgKGxlZnRfd2luZG93X2JwID09IDEwMDAwKQomIzQzOwkJcmV0dXJuIHItJmd0O2xhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdOwomIzQzOwogCXJldHVybiBkYW1vbl9tdnN1bShyLSZndDtwcm9iZV9oaXRzW3Byb2JlX2lkeF0sCiAJCQlyLSZndDtsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XSwgbGVmdF93aW5kb3dfYnApOwogfQpAQCAtODc2LDQzICYjNDM7ODc5LDU4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fYWdlX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IGFnZSwKIAlyZXR1cm4gYWdlICogb2xkX2F0dHJzLSZndDthZ2dyX2ludGVydmFsIC8gbmV3X2F0dHJzLSZndDthZ2dyX2ludGVydmFsOwogfQogCi0vKiBjb252ZXJ0IGFjY2VzcyByYXRpbyBpbiBicCAocGVyIDEwLDAwMCkgdG8gbnJfYWNjZXNzZXMgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXMoCi0JCXVuc2lnbmVkIGludCBhY2Nlc3Nlc19icCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycykKJiM0MzsvKiBjb252ZXJ0IHNhbXBsZSByYXRpbyBpbiBicCAocGVyIDEwLDAwMCkgdG8gY291bnQgKi8KJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3NhbXBsZV9icF90b19jb3VudCgKJiM0MzsJCXVuc2lnbmVkIGludCBicCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycykKIHsKLQlyZXR1cm4gYWNjZXNzZXNfYnAgKiBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpIC8gMTAwMDA7CiYjNDM7CXJldHVybiBicCAqIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoYXR0cnMpIC8gMTAwMDA7CiB9CiAKLS8qCi0gKiBDb252ZXJ0IG5yX2FjY2Vzc2VzIHRvIGFjY2VzcyByYXRpbyBpbiBicCAocGVyIDEwLDAwMCkuCi0gKgotICogQ2FsbGVycyBzaG91bGQgZW5zdXJlIGF0dHJzLmFnZ3JfaW50ZXJ2YWwgaXMgbm90IHplcm8sIGxpa2UKLSAqIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoKSBkb2VzIC4gIE90aGVyd2lzZSwgZGl2aWRlLWJ5LXplcm8gd291bGQKLSAqIGhhcHBlbi4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icCgKLQkJdW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKQomIzQzOy8qIGNvbnZlcnQgc2FtcGxlIGNvdW50IHRvIHJhdGlvIGluIGJwIChwZXIgMTAsMDAwKSAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fc2FtcGxlX2NvdW50X3RvX2JwKAomIzQzOwkJdW5zaWduZWQgaW50IGNvdW50LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKQogewotCXJldHVybiBtdWx0X2ZyYWMobnJfYWNjZXNzZXMsIDEwMDAwLCBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpKTsKJiM0MzsJcmV0dXJuIG11bHRfZnJhYyhjb3VudCwgMTAwMDAsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoYXR0cnMpKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucl9hY2Nlc3NlcywKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyh1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMsCiAJCXN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycykKIHsKLQlyZXR1cm4gZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXMoCi0JCQlkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icCgKLQkJCQlucl9hY2Nlc3Nlcywgb2xkX2F0dHJzKSwKJiM0MzsJcmV0dXJuIGRhbW9uX3NhbXBsZV9icF90b19jb3VudCgKJiM0MzsJCQlkYW1vbl9zYW1wbGVfY291bnRfdG9fYnAobnJfYWNjZXNzZXMsIG9sZF9hdHRycyksCiAJCQluZXdfYXR0cnMpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKJiM0MzsJCXN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycywKJiM0MzsJCWJvb2wgYWdncmVnYXRpbmcsIHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcm9iZSAqcDsKJiM0MzsJaW50IGkgPSAwOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpIHsKJiM0MzsJCXItJmd0O2xhc3RfcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycygKJiM0MzsJCQkJci0mZ3Q7bGFzdF9wcm9iZV9oaXRzW2ldLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7CiYjNDM7CQlpZiAoIWFnZ3JlZ2F0aW5nKQomIzQzOwkJCXItJmd0O3Byb2JlX2hpdHNbaV0gPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoCiYjNDM7CQkJCQlyLSZndDtwcm9iZV9oaXRzW2ldLCBvbGRfYXR0cnMsCiYjNDM7CQkJCQluZXdfYXR0cnMpOwomIzQzOwkJZWxzZQomIzQzOwkJCXItJmd0O3Byb2JlX2hpdHNbaV0gPSAwOwomIzQzOwkJaSYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKIAkJc3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLAotCQlib29sIGFnZ3JlZ2F0aW5nKQomIzQzOwkJYm9vbCBhZ2dyZWdhdGluZywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogewotCXItJmd0O2xhc3RfbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKAomIzQzOwlkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhyLCBvbGRfYXR0cnMsIG5ld19hdHRycywgYWdncmVnYXRpbmcsIGN0eCk7CiYjNDM7CiYjNDM7CXItJmd0O2xhc3RfbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoCiAJCQlyLSZndDtsYXN0X25yX2FjY2Vzc2VzLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7CiAJaWYgKCFhZ2dyZWdhdGluZykKLQkJci0mZ3Q7bnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKAomIzQzOwkJci0mZ3Q7bnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoCiAJCQkJci0mZ3Q7bnJfYWNjZXNzZXMsIG9sZF9hdHRycywgbmV3X2F0dHJzKTsKIAllbHNlCiAJCS8qCkBAIC05NDgsOCAmIzQzOzk2Niw4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LAogCiAJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkKIAkJZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpCi0JCQlkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoCi0JCQkJCXIsIG9sZF9hdHRycywgbmV3X2F0dHJzLCBhZ2dyZWdhdGluZyk7CiYjNDM7CQkJZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIG9sZF9hdHRycywgbmV3X2F0dHJzLAomIzQzOwkJCQkJYWdncmVnYXRpbmcsIGN0eCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuYwppbmRleCBlOGMzODlhZDMyMjZmNy4uN2UwNzcwODRjYjAzYWEgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vbHJ1X3NvcnQuYwpAQCAtMzAzLDcgJiM0MzszMDMsNyBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZCkKIAkJZ290byBvdXQ7CiAKIAllcnIgPSAtRU5PTUVNOwotCWhvdF90aHJlcyA9IGRhbW9uX21heF9ucl9hY2Nlc3NlcygmYW1wO2F0dHJzKSAqCiYjNDM7CWhvdF90aHJlcyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoJmFtcDthdHRycykgKgogCQlob3RfdGhyZXNfYWNjZXNzX2ZyZXEgLyAxMDAwOwogCWhvdF9zY2hlbWUgPSBkYW1vbl9scnVfc29ydF9uZXdfaG90X3NjaGVtZShob3RfdGhyZXMpOwogCWlmICghaG90X3NjaGVtZSkKZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uYwppbmRleCA2YmRkMWNmZDM4NjNhMy4uODljNjk0ZjZlNGZhODkgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmMKQEAgLTExMiw3ICYjNDM7MTEyLDcgQEAgaW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCWludCBob3RuZXNzOwogCiAJZnJlcV9zdWJzY29yZSA9IHItJmd0O25yX2FjY2Vzc2VzICogREFNT05fTUFYX1NVQlNDT1JFIC8KLQkJZGFtb25fbWF4X25yX2FjY2Vzc2VzKCZhbXA7Yy0mZ3Q7YXR0cnMpOwomIzQzOwkJZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncigmYW1wO2MtJmd0O2F0dHJzKTsKIAogCWFnZV9pbl9zZWMgPSAodW5zaWduZWQgbG9uZylyLSZndDthZ2UgKiBjLSZndDthdHRycy5hZ2dyX2ludGVydmFsIC8gMTAwMDAwMDsKIAlpZiAoYWdlX2luX3NlYykKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaAppbmRleCAwMTI0ZjgzYjM5YjgzOS4uOGUwMTQzN2ViNWVhODEgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKQEAgLTU3NSw3ICYjNDM7NTc1LDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJCQl9LCAzKTsKIH0KIAotc3RhdGljIHZvaWQgZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiYjNDM7c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zYW1wbGVfY291bnRfdG9fYnAoc3RydWN0IGt1bml0ICp0ZXN0KQogewogCXN0cnVjdCBkYW1vbl9hdHRycyBhdHRycyA9IHsKIAkJLnNhbXBsZV9pbnRlcnZhbCA9IDEwLApAQCAtNTg1LDcgJiM0Mzs1ODUsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAkvKgogCSAqIEluIHNvbWUgY2FzZXMgc3VjaCBhcyAzMmJpdCBhcmNoaXRlY3R1cmVzIHdoZXJlIFVJTlRfTUFYIGlzCiAJICogVUxPTkdfTUFYLCBhdHRycy5hZ2dyX2ludGVydmFsIGJlY29tZXMgemVyby4gIENhbGxpbmcKLQkgKiBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icCgpIGluIHRoZSBjYXNlIHdpbGwgY2F1c2UKJiM0MzsJICogZGFtb25fc2FtcGxlX2NvdW50X3RvX2JwKCkgaW4gdGhlIGNhc2Ugd2lsbCBjYXVzZQogCSAqIGRpdmlkZS1ieS16ZXJvLiAgU3VjaCBjYXNlIGlzIHByb2hpYml0ZWQgaW4gbm9ybWFsIGV4ZWN1dGlvbiBzaW5jZQogCSAqIHRoZSBjYXV0aW9uIGlzIGRvY3VtZW50ZWQgb24gdGhlIGNvbW1lbnQgZm9yIHRoZSBmdW5jdGlvbiwgYW5kCiAJICogZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0cygpIGRvZXMgdGhlIGNoZWNrLiAgU2tpcCB0aGUgdGVzdCBpbgpAQCAtNTk0LDcgJiM0Mzs1OTQsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAlpZiAoIWF0dHJzLmFnZ3JfaW50ZXJ2YWwpCiAJCWt1bml0X3NraXAodGVzdCwgJiMzNDthZ2dyX2ludGVydmFsIGlzIHplcm8uJiMzNDspOwogCi0JS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKDEyMywgJmFtcDthdHRycyksIDApOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2FtcGxlX2NvdW50X3RvX2JwKDEyMywgJmFtcDthdHRycyksIDApOwogfQogCiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3Qga3VuaXQgKnRlc3QpCkBAIC02MDMsMzIgJiM0Mzs2MDMsMzkgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KQogCQkuc2FtcGxlX2ludGVydmFsID0gMTAsIC5hZ2dyX2ludGVydmFsID0gMTAwMCx9OwogCXN0cnVjdCBkYW1vbl9hdHRycyBuZXdfYXR0cnM7CiAJc3RydWN0IGRhbW9uX3JlZ2lvbiAqciA9IGRhbW9uX25ld19yZWdpb24oMywgNyk7CiYjNDM7CXN0cnVjdCBkYW1vbl9jdHggKmN0eDsKIAogCWlmICghcikKIAkJa3VuaXRfc2tpcCh0ZXN0LCAmIzM0O3JlZ2lvbiBhbGxvYyBmYWlsJiMzNDspOwomIzQzOwljdHggPSBkYW1vbl9uZXdfY3R4KCk7CiYjNDM7CWlmICghY3R4KSB7CiYjNDM7CQlkYW1vbl9mcmVlX3JlZ2lvbihyKTsKJiM0MzsJCWt1bml0X3NraXAodGVzdCwgJiMzNDtjdHggYWxsb2MgZmFpbCYjMzQ7KTsKJiM0MzsJfQogCiAJci0mZ3Q7bnJfYWNjZXNzZXMgPSAxNTsKIAlyLSZndDthZ2UgPSAyMDsKIAogCW5ld19hdHRycyA9IChzdHJ1Y3QgZGFtb25fYXR0cnMpewogCQkuc2FtcGxlX2ludGVydmFsID0gMTAwLCAuYWdncl9pbnRlcnZhbCA9IDEwMDAwLH07Ci0JZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsICZhbXA7b2xkX2F0dHJzLCAmYW1wO25ld19hdHRycywgZmFsc2UpOwomIzQzOwlkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgJmFtcDtvbGRfYXR0cnMsICZhbXA7bmV3X2F0dHJzLCBmYWxzZSwgY3R4KTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7bnJfYWNjZXNzZXMsIDE1KTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7YWdlLCAyKTsKIAogCW5ld19hdHRycyA9IChzdHJ1Y3QgZGFtb25fYXR0cnMpewogCQkuc2FtcGxlX2ludGVydmFsID0gMSwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwfTsKLQlkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgJmFtcDtvbGRfYXR0cnMsICZhbXA7bmV3X2F0dHJzLCBmYWxzZSk7CiYjNDM7CWRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCAmYW1wO29sZF9hdHRycywgJmFtcDtuZXdfYXR0cnMsIGZhbHNlLCBjdHgpOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLSZndDtucl9hY2Nlc3NlcywgMTUwKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7YWdlLCAyKTsKIAogCW5ld19hdHRycyA9IChzdHJ1Y3QgZGFtb25fYXR0cnMpewogCQkuc2FtcGxlX2ludGVydmFsID0gMSwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDB9OwotCWRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCAmYW1wO29sZF9hdHRycywgJmFtcDtuZXdfYXR0cnMsIGZhbHNlKTsKJiM0MzsJZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsICZhbXA7b2xkX2F0dHJzLCAmYW1wO25ld19hdHRycywgZmFsc2UsIGN0eCk7CiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O25yX2FjY2Vzc2VzLCAxNTApOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLSZndDthZ2UsIDIwKTsKIAogCWRhbW9uX2ZyZWVfcmVnaW9uKHIpOwomIzQzOwlkYW1vbl9kZXN0cm95X2N0eChjdHgpOwogfQogCiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCkBAIC0xNTcyLDcgJiM0MzsxNTc5LDcgQEAgc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIGRhbW9uX3Rlc3RfY2FzZXNbXSA9IHsKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc3BsaXRfYWJvdmVfaGFsZl9wcm9ncmVzc2VzKSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbiksCiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9yZWdpb25zKSwKLQlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnApLAomIzQzOwlLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2FtcGxlX2NvdW50X3RvX2JwKSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbXZzdW0pLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDAyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gQ29yZSBDb2RlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIERBTU9OIGNvcmUgY29kZSBwYXRjaC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGEgcmVmYWN0b3JpbmcgZXhlcmNpc2UsIHdoaWNoIGlzIHVzdWFsbHkgYSBnb29kIHRoaW5nIGZvciBtYWludGFpbmFiaWxpdHkuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIHJlbmFtaW5nIGEgYnVuY2ggb2YgdmFyaWFibGVzOiBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYCBpcyBub3cgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgLCBgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNgIGlzIG5vdyBgZGFtb25fc2FtcGxlX2JwX3RvX2NvdW50YCwgYW5kIHNvIG9uLiBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBqdXN0IGNsYXJpZnlpbmcgdGhlIGludGVudCBhbmQgdW5pdHMsIGxpa2VseSB0byBpbXByb3ZlIHJlYWRhYmlsaXR5LgoKQmV5b25kIHRoZSByZW5hbWluZywgdGhlIG1lYXQgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgYWRkaXRpb24gb2YgYGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzYC4gVGhpcyBmdW5jdGlvbiwgZnJvbSB3aGF0IEkgY2FuIHRlbGwsIHVwZGF0ZXMgdGhlIGByLSZndDtsYXN0X3Byb2JlX2hpdHNgIGFuZCBgci0mZ3Q7cHJvYmVfaGl0c2AgZmllbGRzIGJhc2VkIG9uIHRoZSBvbGQgYW5kIG5ldyBhdHRyaWJ1dGVzLiBUaGF0JiMzOTtzIGEga2V5IGFkZGl0aW9uLCBpbXBseWluZyBhIGNoYW5nZSBpbiBob3cgaGl0IGNvdW50cyBhcmUgbWFuYWdlZCBhbmQgdXBkYXRlZCB3aXRoaW4gdGhlIG1vbml0b3JpbmcgcHJvY2Vzcy4gQW5kLCBpbXBvcnRhbnRseSwgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdGAgbm93IGNhbGxzIHRoaXMgbmV3IGZ1bmN0aW9uIHdoaWNoIHRlbGxzIG1lIGl0JiMzOTtzIGJlZW4gaW50ZWdyYXRlZCBpbnRvIHRoZSBjb3JlIHdvcmtmbG93LgoKTG9va2luZyBhdCBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAsIHRoZXJlJiMzOTtzIGEgbmV3IGNvbmRpdGlvbiBpbiB0aGVyZSB0b28uIFNwZWNpZmljYWxseSwgaWYgYGxlZnRfd2luZG93X2JwID09IDEwMDAwYCwgaXQgbm93IHJldHVybnMgYHItJmd0O2xhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdYC4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIHJlbmFtaW5nLCBhbmQgd29ydGggbm90aW5nLiBTZWVtcyBsaWtlIGEgc3BlY2lmaWMgb3B0aW1pemF0aW9uIG9yIHNob3J0Y3V0IGZvciBhIHBhcnRpY3VsYXIgd2luZG93IHNpemUuIEkmIzM5O2QgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdCBjb25kaXRpb24sIGJ1dCBpdCYjMzk7cyBjbGVhcmx5IGEgZGVsaWJlcmF0ZSBhZGRpdGlvbi4KCk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgREFNT04gdG8gZnVuY3Rpb24gd2l0aCB0aGlzIHBhdGNoLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGVpdGhlciBgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0YCBvciBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgdG8gc2VlIHdoYXQgQ09ORklHIG9wdGlvbnMgYXJlIGludm9sdmVkLiBHb3R0YSBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBlbmFibGVkIGNvcnJlY3RseSB0byB0ZXN0IHRoZSBmdWxsIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3Byb2JlX2hpdHNfbXZzdW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9kYW1vbi5oPTEwMDU9dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAwNi1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDA3OnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwMDgtXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG4tLVxubW0vZGFtb24vY29yZS5jPTI1Mj11bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjc1LVxubW0vZGFtb24vY29yZS5jOjI3Njp1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL2NvcmUuYy0yNzctXHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9OTA9c3RhdGljIGludCBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyAqcHJvYmVzLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMTMtXHRcdHN5c19wcm9iZSA9IGRhbW9zX3N5c2ZzX3Byb2JlX2FsbG9jKFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjExNDpcdFx0XHRcdGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSwgcmVnaW9uLCBjdHgpKTtcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0xMTUtXHRcdGlmICghc3lzX3Byb2JlKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY1OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBtbS9kYW1vbi9jb3JlLmMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyBgbW0vZGFtb24vY29yZS5jYC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZGVidWdnaW5nIHRhc2suIEkmIzM5O20gYXNzdW1pbmcgaXQmIzM5O3MgcGFydCBvZiBEQU1PTiwgd2hpY2ggaXMgbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7ZCBkbyBpcyB1c2UgdGhlIHN0YW5kYXJkIHRvb2xzIGZvciB0aGlzLiBgZ2l0IGdyZXBgIHNob3VsZCBiZSBteSBmcmllbmQgaGVyZS4gSSYjMzk7ZCBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UsIHByb2JhYmx5IHN0YXJ0aW5nIHdpdGggdGhlIGBLY29uZmlnYCBmaWxlcy4gSSYjMzk7ZCBuZWVkIHRvIGxvb2sgZm9yIGFueSByZWZlcmVuY2VzLCBjb25kaXRpb25hbHMsIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGluY2x1ZGUgaXQsIG9yIGRpcmVjdGx5IG1lbnRpb24gdGhlIGZpbGUgaXRzZWxmIG9yIGl0cyBhc3NvY2lhdGVkIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2QgbGlrZWx5IGFsc28gY2hlY2sgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaW50cyB0aGVyZSBhYm91dCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KClNpbmNlIEkgYW0gZmFtaWxpYXIgd2l0aCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gcHJvY2VzcywgSSB3aWxsIHRyeSB0byBzZWUgd2hhdCBmZWF0dXJlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoYXQgZmlsZSBhbmQgc2VhcmNoIHVzaW5nIHRob3NlIGZlYXR1cmVzLgpJIGFtIGNvbWZvcnRhYmxlIGdvaW5nIHRocm91Z2ggdGhlIEtjb25maWcgZmlsZXMsIEkgbmVlZCB0byBrbm93IHRoZSBmZWF0dXJlcyBhc3NvY2lhdGVkIHdpdGggYG1tL2RhbW9uL2NvcmUuY2Agc28gSSBjYW4gc2VlIHdoYXQgSSBjYW4gc2VhcmNoIGZvci4KT25jZSBJIGhhdmUgYSByZWFzb25hYmxlIGxlYWQgZnJvbSB0aGUgaW5pdGlhbCBzZWFyY2gsIEkgY2FuIHJlZmluZSBpdCBmdXJ0aGVyIHRvIG5hcnJvdyB0aGUgb3B0aW9ucyBkb3duLiBJIG1pZ2h0IGFsc28gbG9vayBhdCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIHdpdGhpbiB0aGUgc291cmNlIGNvZGUgaXRzZWxmLCBhcyB0aG9zZSBtaWdodCBvZmZlciBjbHVlcy4gVWx0aW1hdGVseSwgaXTigJlzIGEgcHJvY2VzcyBvZiBlbGltaW5hdGlvbiBhbmQgcGF0dGVybiBtYXRjaGluZyB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbSB1bnRpbCBJIGZpbmQgdGhlIHJlc3BvbnNpYmxlIGNvbmZpZyBzeW1ib2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29yZVxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZS0yLVxubW0vZGFtb24vTWFrZWZpbGU6MzpvYmoteVx0XHRcdFx0Oj0gY29yZS5vXG5tbS9kYW1vbi9NYWtlZmlsZS00LW9iai0kKENPTkZJR19EQU1PTl9WQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gdmFkZHIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxMDMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqTWFrZWZpbGUgSW52ZXN0aWdhdGlvbjogYG1tL2RhbW9uL2AgSW5jbHVzaW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIEkmIzM5O20gc3RhcmluZyBhdCBgbW0vZGFtb24vTWFrZWZpbGVgLCBhbmQgdGhlIGtleSBsaW5lIGhlcmUgaXMgYG9iai15IDo9IGNvcmUub2AuIE9rYXksIHN0YW5kYXJkIGVub3VnaDogdGhpcyB0ZWxscyB0aGUgYnVpbGQgc3lzdGVtIHRvIGluY2x1ZGUgYGNvcmUub2Agd2hlbiBidWlsZGluZyB0aGUgYG1tL2RhbW9uYCBjb21wb25lbnQuIEJ1dCBub3cgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IHBvcHM6ICp3aGF0KiBpbmNsdWRlcyBgbW0vZGFtb25gIGluIHRoZSBmaXJzdCBwbGFjZT8gV2hlcmUgaXMgdGhpcyBkaXJlY3RvcnkgZ2V0dGluZyBwdWxsZWQgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgYnVpbGQ/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGRlcGVuZGVuY3kgYmFjayB1cCB0aGUgY2hhaW4uIFVuZGVyc3RhbmRpbmcgdGhlIGhpZ2hlci1sZXZlbCBNYWtlZmlsZSBzdHJ1Y3R1cmUgaXMgdml0YWwuIElzIGl0IGluY2x1ZGVkIGRpcmVjdGx5IGluIGEgcGFyZW50IGRpcmVjdG9yeSYjMzk7cyBgb2JqLXlgIG9yIGBvYmotbWAgZGVmaW5pdGlvbj8gT3IgaXMgdGhlcmUgc29tZSBpbmRpcmVjdCBpbmNsdXNpb24gdmlhIGEgbW9kdWxlIGRlcGVuZGVuY3kgb3IgYSBjb25maWd1cmF0aW9uIG9wdGlvbj8gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCBkaWdnaW5nIHRocm91Z2ggdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0gY2FuIGJlIGZydXN0cmF0aW5nLiBHb3R0YSBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmN5IHRyZWUgdG8gc2VlIGhvdyBgbW0vZGFtb25gIGdldHMgYmFrZWQgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMzQ9b2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSAmIzQzOz0gZGVidWdfcGFnZV9yZWYub1xubW0vTWFrZWZpbGU6MTM1Om9iai0kKENPTkZJR19EQU1PTikgJiM0Mzs9IGRhbW9uL1xubW0vTWFrZWZpbGUtMTM2LW9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgJiM0Mzs9IHVzZXJjb3B5Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDc2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gREFNT04gQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSBzZWUgdGhpcyByZXF1aXJlbWVudCBmb3IgYENPTkZJR19EQU1PTmAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCB0aGUgY29yZSBvZiBEeW5hbWljIEFjY2VzcyBNb25pdG9yaW5nIChEQU1PTikuIEJ1dCBJIGtub3cgREFNT04gaGFzIGEgbG90IG9mIGZsZXhpYmlsaXR5LCBzbyBJIG5lZWQgdG8gdGhpbmsgYmV5b25kIGp1c3QgdGhlIGJhc2Ugc2V0dGluZy4gTGV0JiMzOTtzIHNlZS4uLiB3aGF0IGFib3V0IHRob3NlIGZpbmVyLWdyYWluZWQgY29udHJvbHM/IEkgd29uZGVyIGlmIEkgbmVlZCB0byBlbmFibGUgc3BlY2lmaWMgYXNwZWN0cyBsaWtlIGBDT05GSUdfREFNT05fVkFERFJgLCB3aGljaCBpbXBsaWVzIFZpcnR1YWwgQWRkcmVzcyBtb25pdG9yaW5nLCBvciBwZXJoYXBzIGBDT05GSUdfREFNT05fUEFERFJgLCBmb3IgUGh5c2ljYWwgQWRkcmVzcyBtb25pdG9yaW5nIOKAkyB2ZXJ5IGRpZmZlcmVudCB1c2UgY2FzZXMgdGhlcmUgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0mIzM5O3MgbmVlZHMgYW5kIGhvdyBJIGludGVuZCB0byB1c2UgaXQuIEFuZCB0aGVuIGBDT05GSUdfREFNT05fU1lTRlNgIGlzIGNydWNpYWwgaWYgSSB3YW50IHRvIGFjdHVhbGx5ICppbnRlcmFjdCogd2l0aCBEQU1PTiB0aHJvdWdoIHRoZSBmaWxlc3lzdGVtIGludGVyZmFjZS4KCk9rYXksIGJlc3QgYmV0IGlzIHRvIGNoZWNrIHRoZSBkZWZpbml0aXZlIHNvdXJjZTogdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFsb25nIHdpdGggdGhlaXIgZGVwZW5kZW5jaWVzLCBkZXNjcmlwdGlvbnMsIGFuZCBsaWtlbHksIGRlZmF1bHQgdmFsdWVzLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhbmQgZ2V0IHRoZSByaWdodCBjaG9pY2VzIHNlbGVjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTU1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2gmIzM5O3MgU2NvcGUqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vZGFtb24vY29yZS5jYCwgYG1tL2RhbW9uL2xydV9zb3J0LmNgLCBhbmQgYG1tL2RhbW9uL29wcy1jb21tb24uY2AsIGFuZCBhIHRlc3QgaGVhZGVyLCBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gSW1tZWRpYXRlbHksIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9MUlVfU09SVGAsIGFuZCBgQ09ORklHX0RBTU9OX1ZBRERSYCBhcmUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlLiBUaGF0IGNvdmVycyB0aGUgbWFqb3JpdHkgb2YgdGhlIGNoYW5nZXMsIGl0IHNlZW1zLgoKQnV0IGhvbGQgb24uLi4gYG1tL2RhbW9uL29wcy1jb21tb24uY2Ag4oCTIHRoYXQgb25lIHNvbWV0aW1lcyB0cmlwcyBwZW9wbGUgdXAuIFRoYXQgZmlsZSBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gKmVpdGhlciogYENPTkZJR19EQU1PTl9WQUREUmAgKm9yKiBgQ09ORklHX0RBTU9OX1BBRERSYCBpcyBlbmFibGVkLiBCZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBgTWFrZWZpbGVgIGluIGBtbS9kYW1vbi9gIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBjb3JyZWN0bHkuIEdvdHRhIG1ha2Ugc3VyZSBJJiMzOTttIHNlZWluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gTm8gYXNzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29wcy1jb21tb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZT0zPW9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbm1tL2RhbW9uL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyB2YWRkci5vXG5tbS9kYW1vbi9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19EQU1PTl9QQUREUilcdCYjNDM7PSBvcHMtY29tbW9uLm8gcGFkZHIub1xubW0vZGFtb24vTWFrZWZpbGUtNi1vYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA4OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgREFNT04gQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9MUlVfU09SVGAgY29uZmlndXJhdGlvbnMgYXJlIGFsbCByZWxldmFudCBhbmQgc291bmQgbGlrZSBhIHNvbGlkIGZvdW5kYXRpb24uIE5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgZm9yIHRoaXMgcGFydGljdWxhciBhcmVhIG9mIGludmVzdGlnYXRpb24uIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2U6IGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRgLCBgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHNgLCBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAsIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYCwgYW5kIGBkYW1vbl9ob3Rfc2NvcmVgLgoKTmV4dCwgSSBuZWVkZWQgdG8gY2hlY2sgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGFuZCBpZiB0aGV5JiMzOTtyZSBhY2Nlc3NpYmxlLiBJdCBsb29rcyBsaWtlIGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRgIGFuZCBgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHNgIGFyZSBzdGF0aWNhbGx5IGRlZmluZWQgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLCB3aGljaCBtZWFucyB0aGVpciBzY29wZSBpcyBsaW1pdGVkIHdpdGhpbiB0aGF0IGZpbGUuIEhvd2V2ZXIsIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBpcyBleHBvcnRlZCwgbWFraW5nIGl0IGdsb2JhbGx5IGFjY2Vzc2libGUgZnJvbSBgbW0vZGFtb24vY29yZS5jYC4gVGhlbiBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AgaXMgc3RhdGljIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhbmQgYGRhbW9uX2hvdF9zY29yZWAgaXMgZ2xvYmFsIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLgoKRmluYWxseSwgaXQgc2VlbXMgd2lzZSB0byBhbHNvIGxvb2sgYXQgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHNgIGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggdGhlIHN0YXRpYyBmdW5jdGlvbiBgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9OTI0PXN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy05NTMtICovXG5tbS9kYW1vbi9jb3JlLmM6OTU0OnN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vY29yZS5jLTk1NS1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsIGJvb2wgYWdncmVnYXRpbmcpXG4tLVxubW0vZGFtb24vY29yZS5jPTEwMTI9aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwNDEtXG5tbS9kYW1vbi9jb3JlLmM6MTA0MjpcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoY3R4LCBhdHRycywgYWdncmVnYXRpbmcpO1xubW0vZGFtb24vY29yZS5jLTEwNDMtXHRjdHgtXHUwMDNlYXR0cnMgPSAqYXR0cnM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBEYW1vbiBVcGRhdGUgUGF0aCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGl0IGxvb2tzIGxpa2UgYGRhbW9uX3NldF9hdHRyc2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoZSBgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0c2AgZnVuY3Rpb24uIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LCB0aGF0IHNldHMgdGhlIHN0YWdlIGZvciB3aGVyZSB0aGUgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBpcyBsaWtlbHkgdG8gYmUga2lja2VkIG9mZi4gTm93LCBzaW5jZSB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB1cGRhdGVzLCBJIHdhbnQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYC4gVGhpcyBzZWVtcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIG1vbml0b3JpbmcgcmVzdWx0cyBhcmUgYWN0dWFsbHkgY29sbGVjdGVkIGFuZCBhZ2dyZWdhdGVkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IGludGVncmF0ZXMgd2l0aCB0aGUgdXBkYXRlIHByb2Nlc3MgYW5kIHNlZSB3aGVyZSB0aGVyZSBtaWdodCBiZSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fcHJvYmVfaGl0c19tdnN1bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjUyPXVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNzUtXG5tbS9kYW1vbi9jb3JlLmM6Mjc2OnVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxubW0vZGFtb24vY29yZS5jLTI3Ny1cdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz05MD1zdGF0aWMgaW50IGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlycyhzdHJ1Y3QgZGFtb3Nfc3lzZnNfcHJvYmVzICpwcm9iZXMsXG4tLVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExMy1cdFx0c3lzX3Byb2JlID0gZGFtb3Nfc3lzZnNfcHJvYmVfYWxsb2MoXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE0Olx0XHRcdFx0ZGFtb25fcHJvYmVfaGl0c19tdnN1bShpLCByZWdpb24sIGN0eCkpO1xubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExNS1cdFx0aWYgKCFzeXNfcHJvYmUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NDUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipOYXZpZ2F0aW5nIHRoZSBEQU1PTiBDb2RlYmFzZTogQSBUcmFjZSBvZiBEYXRhIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBEQU1PTiBjb2RlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtb25pdG9yaW5nIGRhdGEgZ2V0cyBwcm9jZXNzZWQgYW5kIHByb3BhZ2F0ZWQuIEkmIzM5O3ZlIHRyYWNrZWQgZG93biB0aGF0IGBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnNgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgdG8gY2FsbCBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIGl0IGxvb2tzIGxpa2UgdGhpcyBpcyB3aGVyZSB0aGUgcmF3IHByb2JlIGhpdHMgYXJlIGJlaW5nIGFnZ3JlZ2F0ZWQsIHBvc3NpYmx5IGludG8gc29tZSBtb3Zpbmcgc3VtIG9yIHNpbWlsYXIgc3RhdGlzdGljYWwgc3VtbWFyeS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLgoKVGhlbiwgSSBzZWUgdGhhdCB3aGVuIGBkYW1vbl9zZXRfYXR0cnNgIGlzIGNhbGxlZCwgaXQgdHJpZ2dlcnMgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHNgLiBUaGlzIGlzIGdvb2QsIGl0IGlzIGxpa2VseSB3aGVyZSB0aGUgZmluYWwgYXR0cmlidXRlcyB0aGF0IHRyaWdnZXIgbWVtb3J5IHJlY2xhaW0gYXJlIGNhbGN1bGF0ZWQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGZpbmFsIHN0ZXBzIG9yIGlmIGl0IGhhcyBzb21lIGludGVybWVkaWF0ZSBmdW5jdGlvbmFsaXR5LgoKSSB0aGluayB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYC4gVGhpcyBzZWVtcyB0byBiZSB3aGVyZSB0aGUgTFJVIHNvcnRpbmcgYXNwZWN0IGNvbWVzIGludG8gcGxheSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGUgbWVtb3J5IHJlY2xhaW0gb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBjb3JyZWN0bHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIHByb2Nlc3MgaXMgYW5kIHdoaWNoIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHRha2VuIGludG8gYWNjb3VudCBieSB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBGcm9tIHRoZSBmdW5jdGlvbiBuYW1lLCBJJiMzOTtkIGV4cGVjdCBpdCB0byBpbmNvcnBvcmF0ZSBzb21lIG9mIHRoZSByZXN1bHRzIG9mIHRoZSBtb25pdG9yaW5nIGludG8gc29ydGluZyBhbmQgc2VsZWN0aW9uIG9mIHRoZSBwYWdlcywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoZSBhY3R1YWwgZmxvdy4gSSBuZWVkIHRvIG1hcCB0aGUgb3V0cHV0IG9mIHRoZSBtb25pdG9yaW5nIHRvIHRoZSBwYWdlIHNlbGVjdGlvbiBmb3IgcmVjbGFpbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2xydV9zb3J0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vbHJ1X3NvcnQuYz0yNDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNzAtXG5tbS9kYW1vbi9scnVfc29ydC5jOjI3MTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjcyLXtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTM0Mj1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDMte1xubW0vZGFtb24vbHJ1X3NvcnQuYzozNDQ6XHRyZXR1cm4gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDUtfVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDA4PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE2LVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0MTc6XHRlcnIgPSBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKCk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTQxOC1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjA5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcywgc3BlYWtpbmcgYXMgYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6CgoqKkRpdmluZyBEZWVwIGludG8gREFNT04mIzM5O3MgTFJVIFNvcnRpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgYm90aCBgZGFtb25fbHJ1X3NvcnRfdHVybmAgYW5kIGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuYCBhcmUgdWx0aW1hdGVseSBjYWxsaW5nIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBzdWdnZXN0cyBhIGNvbW1vbiBwYXJhbWV0ZXIgYXBwbGljYXRpb24gcGF0aCBmb3IgdGhlc2Ugc2VlbWluZ2x5IGRpc3RpbmN0IExSVSBzb3J0aW5nIG9wZXJhdGlvbnMgd2l0aGluIERBTU9OLiBUaGlzIGltcGxpZXMgYSBjZW50cmFsaXplZCBtZWNoYW5pc20gZm9yIGNvbmZpZ3VyaW5nIGFuZCBhcHBseWluZyB0aGUgcnVsZXMgZm9yIGhvdyB0aGUgTFJVIGxpc3RzIGFyZSBtYW5hZ2VkIGFuZCBhZGp1c3RlZCBkdXJpbmcgdGhlaXIgdHVybnMgYW5kIGNvbW1pdG1lbnQgb2YgaW5wdXQgb3BlcmF0aW9ucy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IHdoYXQgYXJlIHRoZSBwYXJhbWV0ZXJzPyBBbmQsIG1vcmUgaW1wb3J0YW50bHksIGhvdyBhcmUgdGhleSAqYWZmZWN0aW5nKiB0aGUgc29ydGluZyBwcm9jZXNzLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIGhvdyBgZGFtb25faG90X3Njb3JlYCBmYWN0b3JzIGludG8gdGhpcyB3aG9sZSB0aGluZy4gSXMgYGRhbW9uX2hvdF9zY29yZWAgb25lIG9mIHRoZSBrZXkgcGFyYW1ldGVycyBiZWluZyBhcHBsaWVkPyBJcyBpdCBhIGtleSBkZXRlcm1pbmFudCBpbiBob3cgREFNT04gZGVjaWRlcyB0byBzb3J0IGFuZCBtYW5hZ2UgdGhlIExSVSBsaXN0cz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uc3RpdHV0ZXMgYSBob3Qgc2NvcmUsIHRoZSB3ZWlnaHRpbmcgb2YgdmFyaW91cyBob3Qgc2NvcmUgcGFyYW1ldGVycywgYW5kIGhvdyB0aGVzZSBkaXJlY3RseSBpbXBhY3QgdGhlIHNvcnRpbmcgbG9naWMgd2l0aGluIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYC4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgdGhlIHJlYWwgaW5zaWdodHMgaW50byB0aGUgcGVyZm9ybWFuY2UgdHVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9ob3Rfc2NvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vb3BzLWNvbW1vbi5jPTczPXZvaWQgZGFtb25fcG1kcF9ta29sZChwbWRfdCAqcG1kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMDMtXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTA0OmludCBkYW1vbl9ob3Rfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMDUtXHRcdFx0c3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0xNDk9aW50IGRhbW9uX2NvbGRfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTUxLXtcbm1tL2RhbW9uL29wcy1jb21tb24uYzoxNTI6XHRpbnQgaG90bmVzcyA9IGRhbW9uX2hvdF9zY29yZShjLCByLCBzKTtcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNTMtXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5oPTE1PWludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTYtXHRcdFx0c3RydWN0IGRhbW9zICpzKTtcbm1tL2RhbW9uL29wcy1jb21tb24uaDoxNzppbnQgZGFtb25faG90X3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTgtXHRcdFx0c3RydWN0IGRhbW9zICpzKTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTQxNz1zdGF0aWMgaW50IGRhbW9uX3BhX3NjaGVtZV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDIzLVx0Y2FzZSBEQU1PU19MUlVfUFJJTzpcbm1tL2RhbW9uL3BhZGRyLmM6NDI0Olx0XHRyZXR1cm4gZGFtb25faG90X3Njb3JlKGNvbnRleHQsIHIsIHNjaGVtZSk7XG5tbS9kYW1vbi9wYWRkci5jLTQyNS1cdGNhc2UgREFNT1NfTFJVX0RFUFJJTzpcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTQyNy1cdGNhc2UgREFNT1NfTUlHUkFURV9IT1Q6XG5tbS9kYW1vbi9wYWRkci5jOjQyODpcdFx0cmV0dXJuIGRhbW9uX2hvdF9zY29yZShjb250ZXh0LCByLCBzY2hlbWUpO1xubW0vZGFtb24vcGFkZHIuYy00MjktXHRjYXNlIERBTU9TX01JR1JBVEVfQ09MRDpcbi0tXG5tbS9kYW1vbi92YWRkci5jPTkzOD1zdGF0aWMgaW50IGRhbW9uX3ZhX3NjaGVtZV9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtOTQ1LVx0Y2FzZSBEQU1PU19NSUdSQVRFX0hPVDpcbm1tL2RhbW9uL3ZhZGRyLmM6OTQ2Olx0XHRyZXR1cm4gZGFtb25faG90X3Njb3JlKGNvbnRleHQsIHIsIHNjaGVtZSk7XG5tbS9kYW1vbi92YWRkci5jLTk0Ny1cdGNhc2UgREFNT1NfTUlHUkFURV9DT0xEOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI4NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBEQU1PTiBTeW1ib2wgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIHNlZSwgaXQgbG9va3MgbGlrZSBgZGFtb25fc2V0X2F0dHJzYCwgYGRhbW9uX3Byb2JlX2hpdHNfbXZzdW1gLCBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AsIGFuZCBgZGFtb25faG90X3Njb3JlYCBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIHN5bWJvbHMgdG8gZGVsdmUgaW50byBoZXJlLiBTcGVjaWZpY2FsbHksIEkgdGhpbmsgYGRhbW9uX3NldF9hdHRyc2AgaXMgYSBzdHJvbmcgY29udGVuZGVyIHRvIHN0YXJ0IHdpdGguIFRoZW4sIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBzZWVtcyByZWxldmFudCBhcyB3ZWxsLiAKCkhtbSwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgb2YgYSB3cmlua2xlLiBNYXliZSBgZGFtb25fbHJ1X3NvcnRfdHVybmAgb3IgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm5gIHdvdWxkIGJlIG1vcmUgZnJ1aXRmdWwgaW4gdGhhdCBjYXNlPyBPbiBzZWNvbmQgdGhvdWdodCwgc2luY2Ugc3l6a2FsbGVyIGNhbiBwb3RlbnRpYWxseSBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgaWYgcmVhY2hhYmxlLCBwZXJoYXBzIGBkYW1vbl9zZXRfYXR0cnNgIGlzIHRoZSBiZXN0IGJldCBzaW5jZSBpdCBpcyBleHBvcnRlZCBhbmQgbGlrZWx5IGdsb2JhbC4gSXQmIzM5O3MgYmVzdCB0byB2ZXJpZnkgdGhpcyB0aG91Z2guIFRpbWUgdG8gY29uZmlybSBpZiBgZGFtb25fc2V0X2F0dHJzYCBpcyBhY3R1YWxseSBnbG9iYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3NldF9hdHRycyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9OTc3PXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTk5Mi0vKipcbm1tL2RhbW9uL2NvcmUuYzo5OTM6ICogZGFtb25fc2V0X2F0dHJzKCkgLSBTZXQgYXR0cmlidXRlcyBmb3IgdGhlIG1vbml0b3JpbmcuXG5tbS9kYW1vbi9jb3JlLmMtOTk0LSAqIEBjdHg6XHRcdG1vbml0b3JpbmcgY29udGV4dFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMDExLSAqL1xubW0vZGFtb24vY29yZS5jOjEwMTI6aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG5tbS9kYW1vbi9jb3JlLmMtMTAxMy17XG4tLVxubW0vZGFtb24vY29yZS5jPTE2ODU9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE3MTUtXHQgKiBzY2hlbWVzIGFuZCB0YXJnZXRzIHNob3VsZCBiZSB1cGRhdGVkIGZpcnN0LCBzaW5jZVxubW0vZGFtb24vY29yZS5jOjE3MTY6XHQgKiAxLiBkYW1vbl9zZXRfYXR0cnMoKSB1cGRhdGVzIG1vbml0b3JpbmcgcmVzdWx0cyBvZiB0YXJnZXRzIGFuZFxubW0vZGFtb24vY29yZS5jLTE3MTctXHQgKiBuZXh0X2FwcGx5X3NpcyBvZiBzY2hlbWVzLCBhbmRcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTcyMS1cdGlmICghZGFtb25fYXR0cnNfZXF1YWxzKFx1MDAyNmRzdC1cdTAwM2VhdHRycywgXHUwMDI2c3JjLVx1MDAzZWF0dHJzKSkge1xubW0vZGFtb24vY29yZS5jOjE3MjI6XHRcdGVyciA9IGRhbW9uX3NldF9hdHRycyhkc3QsIFx1MDAyNnNyYy1cdTAwM2VhdHRycyk7XG5tbS9kYW1vbi9jb3JlLmMtMTcyMy1cdFx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMTgzPXN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZCBrZGFtb25kX3R1bmVfaW50ZXJ2YWxzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIyMDEtXHR0cmFjZV9kYW1vbl9tb25pdG9yX2ludGVydmFsc190dW5lKG5ld19hdHRycy5zYW1wbGVfaW50ZXJ2YWwpO1xubW0vZGFtb24vY29yZS5jOjIyMDI6XHRkYW1vbl9zZXRfYXR0cnMoYywgXHUwMDI2bmV3X2F0dHJzKTtcbm1tL2RhbW9uL2NvcmUuYy0yMjAzLX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzY0ND1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzY3My1cdFx0ICogYmUgY2hhbmdlZCBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgUmVhZCB0aGUgdmFsdWVzIGhlcmUsIGFuZFxubW0vZGFtb24vY29yZS5jOjM2NzQ6XHRcdCAqIHVzZSB0aG9zZSBmb3IgdGhpcyBpdGVyYXRpb24uICBUaGF0IGlzLCBkYW1vbl9zZXRfYXR0cnMoKVxubW0vZGFtb24vY29yZS5jLTM2NzUtXHRcdCAqIHVwZGF0ZWQgbmV3IHZhbHVlcyBhcmUgcmVzcGVjdGVkIGZyb20gbmV4dCBpdGVyYXRpb24uXG4tLVxubW0vZGFtb24vY29yZS5jLTM3MzQtXHRcdFx0XHQgKiBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgSW4gdGhlIGNhc2UsXG5tbS9kYW1vbi9jb3JlLmM6MzczNTpcdFx0XHRcdCAqIGRhbW9uX3NldF9hdHRycygpIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGZyb21cbm1tL2RhbW9uL2NvcmUuYy0zNzM2LVx0XHRcdFx0ICoga2RhbW9uZF90dW5lX2ludGVydmFsKCkgbWF5IHdyb25nbHkgdGhpbmtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTI3MT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTMwMC1cdH1cbm1tL2RhbW9uL2xydV9zb3J0LmM6MzAxOlx0ZXJyID0gZGFtb25fc2V0X2F0dHJzKHBhcmFtX2N0eCwgXHUwMDI2YXR0cnMpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zMDItXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xOTQ9c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnModm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjI0LVx0fVxubW0vZGFtb24vcmVjbGFpbS5jOjIyNTpcdGVyciA9IGRhbW9uX3NldF9hdHRycyhwYXJhbV9jdHgsIFx1MDAyNmF0dHJzKTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0yMjYtXHRpZiAoZXJyKVxuLS1cbm1tL2RhbW9uL3N0YXQuYz0xNTE9c3RhdGljIHN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX3N0YXRfYnVpbGRfY3R4KHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTE3NS1cdH07XG5tbS9kYW1vbi9zdGF0LmM6MTc2Olx0aWYgKGRhbW9uX3NldF9hdHRycyhjdHgsIFx1MDAyNmF0dHJzKSlcbm1tL2RhbW9uL3N0YXQuYy0xNzctXHRcdGdvdG8gZnJlZV9vdXQ7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0xODg5PXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTE5MDgtXHR9O1xubW0vZGFtb24vc3lzZnMuYzoxOTA5Olx0cmV0dXJuIGRhbW9uX3NldF9hdHRycyhjdHgsIFx1MDAyNmF0dHJzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMTkxMC19XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTY0MT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY1MS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2NTI6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNnZhbGlkX2F0dHJzKSwgMCk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjUzLVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02NTUtXHRpbnZhbGlkX2F0dHJzLm1pbl9ucl9yZWdpb25zID0gMTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2NTY6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02NTctXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY1OS1cdGludmFsaWRfYXR0cnMubWF4X25yX3JlZ2lvbnMgPSA5O1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjY2MDpcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZXRfYXR0cnMoYywgXHUwMDI2aW52YWxpZF9hdHRycyksIC1FSU5WQUwpO1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY2MS1cbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjYzLVx0aW52YWxpZF9hdHRycy5hZ2dyX2ludGVydmFsID0gNDk5OTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo2NjQ6XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02NjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDEyOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzEyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIERBTU9OIFN5bWJvbCBTY29wZSBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIHNlZWluZyBhIGhhbmRmdWwgb2Yga2V5IHN5bWJvbHMgYmVpbmcgdG91Y2hlZCBoZXJlIGluIHRoaXMgREFNT04gY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgZ2xvYmFsIG5hdHVyZSBvZiBgZGFtb25fc2V0X2F0dHJzYCBhbmQgYGRhbW9uX3Byb2JlX2hpdHNfbXZzdW1gIGp1bXBzIG91dCBpbW1lZGlhdGVseS4gVGhlIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYCBhbmQgYGRhbW9uX2xydV9zb3J0X3R1cm5gIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYnV0IG5vdCB0aGUgcHJpbWFyeSBmb2N1cyBoZXJlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGFjY291bnQgZm9yIHRoZWlyIHN0YXRpYyBuYXR1cmUgZHVyaW5nIGludmVzdGlnYXRpb24uCgpUaGVuLCB0aGVyZSYjMzk7cyBgZGFtb25faG90X3Njb3JlYCwgYWxzbyBnbG9iYWwsIGFuZCBsb2NhdGVkIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLgoKU28sIGNvbnNpZGVyaW5nIHRoZXNlIGluaXRpYWwgZmluZGluZ3MsIHRoZSBwcmltYXJ5IGZvY3VzIGFyZWFzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24gYXJlOgoKKiAgIGBkYW1vbl9zZXRfYXR0cnNgCiogICBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAKKiAgIGBkYW1vbl9ob3Rfc2NvcmVgCgpJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGZvciBhbnkgb3RoZXIgbW9kaWZpZWQgZnVuY3Rpb25zIGFzIHBhcnQgb2YgdGhpcyBwcm9jZXNzLiBUaGUgcHJlc2VuY2Ugb2Ygc3RhdGljIGlubGluZSBvciBzdGF0aWMgZnVuY3Rpb25zIGlzIGV4cGVjdGVkIGJlaGF2aW9yLCBidXQgdGhlIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkLCB3aWxsIG5lZWQgZnVydGhlciBhbmFseXNpcy4KCkxvb2tpbmcgdGhyb3VnaCB0aGUgb3RoZXIgc3ltYm9scywgaXQmIzM5O3MgY2xlYXIgd2UgaGF2ZSBtYW55IHN0YXRpYyBmdW5jdGlvbnM6CgoqICAgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgIChzdGF0aWMgaW5saW5lIGluIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgKQoqICAgYGRhbW9uX3NhbXBsZV9icF90b19jb3VudGAgKHN0YXRpYyBpbiBgbW0vZGFtb24vY29yZS5jYCkKKiAgIGBkYW1vbl9zYW1wbGVfY291bnRfdG9fYnBgIChzdGF0aWMgaW4gYG1tL2RhbW9uL2NvcmUuY2ApCiogICBgZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzYCAoc3RhdGljIGluIGBtbS9kYW1vbi9jb3JlLmNgKQoqICAgYGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzYCAoc3RhdGljIGluIGBtbS9kYW1vbi9jb3JlLmNgKQoqICAgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdGAgKHN0YXRpYyBpbiBgbW0vZGFtb24vY29yZS5jYCkKKiAgIGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzYCAoc3RhdGljIGluIGBtbS9kYW1vbi9jb3JlLmNgKQoKTm93LCBoZXJlJiMzOTtzIGEgY3J1Y2lhbCBwb2ludC4gSXQmIzM5O3MgYmVjb21pbmcgZXZpZGVudCB0aGF0IGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzYCBpcyBjYWxsZWQgYnkgYGRhbW9uX3NldF9hdHRyc2AuIFRoaXMgY2VtZW50cyBgZGFtb25fc2V0X2F0dHJzYCBhcyBhIHZlcnkgc29saWQgZm9jdXMgc3ltYm9sLgoKQWxzbywgYGRhbW9uX3Byb2JlX2hpdHNfbXZzdW1gIGlzIGNhbGxlZCBieSBgZGFtb3Nfc3lzZnNfcHJvYmVzX2FkZF9kaXJzYC4gQW5kIGBkYW1vbl9ob3Rfc2NvcmVgIGlzIGNhbGxlZCBieSBgZGFtb25fcGFfc2NoZW1lX3Njb3JlYCBhbmQgYGRhbW9uX3ZhX3NjaGVtZV9zY29yZWAuIFRoaXMgcmVsYXRpb25zaGlwIGZ1cnRoZXIgZGVmaW5lcyB0aGUgc2NvcGUgb2YgdGhlc2UgZnVuY3Rpb25zLgoKVG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgSSBuZWVkIHRvIHJldmlzaXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJIHNlZToKCiogICBgREFNT05gCiogICBgREFNT05fVkFERFJgCiogICBgREFNT05fUEFERFJgCiogICBgREFNT05fU1lTRlNgCiogICBgREFNT05fTFJVX1NPUlRgCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgcHJlc2VuY2UgYW5kIG1lYW5pbmcgb2YgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zLiBJIG5vdGUgdGhhdCBgREFNT05fUkVDTEFJTWAgaGFzbiYjMzk7dCBiZWVuIG1vZGlmaWVkLCBidXQgdGhlIHBhdGNoIG1vZGlmaWVzIGBtbS9kYW1vbi9scnVfc29ydC5jYC4gTGV0JiMzOTtzIGNoZWNrIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhZ2Fpbi4KCk92ZXJhbGwsIGl0IHNlZW1zIHRoYXQgdGhlcmUmIzM5O3MgYSBzdHJvbmcgZm9jdXMgb24gY29yZSBEQU1PTiBmdW5jdGlvbmFsaXR5LCBpbmNsdWRpbmcgYXR0cmlidXRlIHNldHRpbmcsIHByb2JpbmcsIGhvdC1zY29yZSBjYWxjdWxhdGlvbiwgYW5kIExSVSBzb3J0aW5nLCBhcyBpdCByZWxhdGVzIHRvIHRoZSBwcm9iZSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT05fTFJVX1NPUlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9ODg9Y29uZmlnIERBTU9OX1JFQ0xBSU1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxMjoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc1MQoJCQkJCQkJb3V0cHV0OiAxNjgKCQkJCQkJCXRob3VnaHRzOiA1NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgREFNT04gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIGBEQU1PTl9MUlVfU09SVGAgY29uZmlnIGlzIGluZGVlZCByZWxldmFudCBoZXJlLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY29uZmlndXJhdGlvbiBzaWRlIG9mIHRoaW5ncy4gSSYjMzk7bSBzZWVpbmcgdGhlIGNvcmUgYERBTU9OYCBvcHRpb25zOiBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBhbmQgYERBTU9OX0xSVV9TT1JUYCBhcmUgYWxsIGNydWNpYWwgZm9yIGVuYWJsaW5nIGFuZCBjb250cm9sbGluZyBEQU1PTiYjMzk7cyBiZWhhdmlvci4KCk5vdywgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIGltcG9ydGFudCBzeW1ib2xzIHRoaXMgcGF0Y2ggYWZmZWN0cy4gSSBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb24gYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCwgYW5kIGBkYW1vbl9ob3Rfc2NvcmVgLiBJIGFscmVhZHkga25vdyB0aGF0IGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBnZXRzIGNhbGxlZCBmcm9tIGBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnNgLiBBbmQgeWVzLCB0aGF0JiMzOTtzIHJlYWNoYWJsZSB2aWEgc3lzZnMuIEkgY2FuIGFsc28gcmVhY2ggYGRhbW9uX3NldF9hdHRyc2AgdmlhIHN5c2ZzIGFuZCBwb3RlbnRpYWxseSBvdGhlciBtb2R1bGVzLiBBbHNvLCBgZGFtb25faG90X3Njb3JlYCBnZXRzIGNhbGxlZCB2aWEgdGhlIGBkYW1vbl9wYV9zY2hlbWVfc2NvcmVgIGFuZCBgZGFtb25fdmFfc2NoZW1lX3Njb3JlYCBmdW5jdGlvbnMuCgpJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzYCBpcyByZWFjaGFibGUgZnJvbSBhbnl3aGVyZSBlbHNlLiBHb29kLCBpdCBpcyBjYWxsZWQgZnJvbSBgZGFtb25fc2V0X2F0dHJzYCwgdGhhdCBtYWtlcyBzZW5zZS4KCk5vdywgYW55IG90aGVyIGNvbmZpZyBvcHRpb25zIHRoYXQgYXJlIHJlbGV2YW50PyBBaGEsIGBEQU1PTl9LVU5JVF9URVNUYCBpcyBtb2RpZmllZCBpbiB0aGUgcGF0Y2gmIzM5O3MgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIEhvd2V2ZXIsIEkgZG9uJiMzOTt0IHJlYWxseSBuZWVkIHRvIGVuYWJsZSBrdW5pdCB0ZXN0cyB0byBmdXp6IHRoZSBjb3JlIGxvZ2ljIGhlcmUsIGFsdGhvdWdoIGl0IHdvdWxkbiYjMzk7dCBodXJ0LiBXZSB1c3VhbGx5IGRvbiYjMzk7dCBsaXN0IGt1bml0IGNvbmZpZ3MgdW5sZXNzIHRoZSBwYXRjaCBpcyBvbmx5IGFib3V0IGt1bml0LgoKTm93LCBmb3IgdGhlIHJlYXNvbmluZzogdGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyBEQU1PTiBoYW5kbGVzIHNhbXBsZSBjb3VudGluZyBhbmQgYWdncmVnYXRpb24uIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzYCBhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYGRhbW9uX3Byb2JlX2hpdHNfbXZzdW1gIHRvIGFjY29tbW9kYXRlIHNwZWNpZmljIHdpbmRvdyBjb25kaXRpb25zIGFyZSBjZW50cmFsIHRvIHRoaXMgcGF0Y2guIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW1wYWN0aW5nIHRoZSB2ZXJ5IGNvcmUgb2YgREFNT04mIzM5O3MgbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nLCBpbmNsdWRpbmcgaG93IHJlc3VsdHMgYXJlIGNhbGN1bGF0ZWQgYW5kIHVwZGF0ZWQuIFRoaXMgaXMgdmVyeSByZWxldmFudCB0byBmdXp6aW5nLgoKVGhlcmVmb3JlOgoKV29ydGhGdXp6aW5nOiBUcnVlCkZvY3VzU3ltYm9sczogYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCwgYGRhbW9uX2hvdF9zY29yZWAKRW5hYmxlQ29uZmlnczogYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX0xSVV9TT1JUYApSZWFzb25pbmc6IFRoZSBwYXRjaCBkaXJlY3RseSBhbHRlcnMgY29yZSBEQU1PTiBsb2dpYyByZWxhdGVkIHRvIHRoZSBjYWxjdWxhdGlvbiBhbmQgdXBkYXRpbmcgb2YgbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMsIGludHJvZHVjaW5nIGEgbmV3IGNvbmRpdGlvbiBpbiBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgYW5kIG5ldyBwcm9iZSBoaXQgdXBkYXRpbmcgbG9naWMgaW4gYGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTI6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc2V0X2F0dHJzJiMzNDssCiAgICAmIzM0O2RhbW9uX3Byb2JlX2hpdHNfbXZzdW0mIzM0OywKICAgICYjMzQ7ZGFtb25faG90X3Njb3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgREFNT04gbG9naWMgZm9yIGNhbGN1bGF0aW5nIGFuZCB1cGRhdGluZyBtZW1vcnkgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cywgaW5jbHVkaW5nIGEgbmV3IGNvbmRpdGlvbiBpbiBkYW1vbl9wcm9iZV9oaXRzX212c3VtIGFuZCBuZXcgcHJvYmUgaGl0IHVwZGF0aW5nIGxvZ2ljIGluIGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzLiBJdCBhbHNvIHJlbmFtZXMgc2V2ZXJhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzYW1wbGUgY291bnRpbmcgYW5kIGFnZ3JlZ2F0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIERBTU9OIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3NldF9hdHRycyYjMzQ7LAogICAgJiMzNDtkYW1vbl9wcm9iZV9oaXRzX212c3VtJiMzNDssCiAgICAmIzM0O2RhbW9uX2hvdF9zY29yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIERBTU9OIGxvZ2ljIGZvciBjYWxjdWxhdGluZyBhbmQgdXBkYXRpbmcgbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMsIGluY2x1ZGluZyBhIG5ldyBjb25kaXRpb24gaW4gZGFtb25fcHJvYmVfaGl0c19tdnN1bSBhbmQgbmV3IHByb2JlIGhpdCB1cGRhdGluZyBsb2dpYyBpbiBkYW1vbl91cGRhdGVfcHJvYmVfaGl0cy4gSXQgYWxzbyByZW5hbWVzIHNldmVyYWwgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc2FtcGxlIGNvdW50aW5nIGFuZCBhZ2dyZWdhdGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBEQU1PTiBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEyOjI3OjE1LjI2MjIwNjA1MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MDQ3MjE5NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3NldF9hdHRyc1wiLFxuICAgIFwiZGFtb25fcHJvYmVfaGl0c19tdnN1bVwiLFxuICAgIFwiZGFtb25faG90X3Njb3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBEQU1PTiBsb2dpYyBmb3IgY2FsY3VsYXRpbmcgYW5kIHVwZGF0aW5nIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzLCBpbmNsdWRpbmcgYSBuZXcgY29uZGl0aW9uIGluIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0gYW5kIG5ldyBwcm9iZSBoaXQgdXBkYXRpbmcgbG9naWMgaW4gZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMuIEl0IGFsc28gcmVuYW1lcyBzZXZlcmFsIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHNhbXBsZSBjb3VudGluZyBhbmQgYWdncmVnYXRpb24uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgREFNT04gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEyOjI3OjE1LjI2MjIxMDk3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMxMTIyOTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjNjMzY5NGFlZDUzMjM3YjU4NjcyMmNjZGUxZjFkYjU2Y2Y2YTQyMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCA3IDEyOjI3OjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbmluZGV4IDE5YjdlODM5YmRlMGI0Li42M2Y1OTY5NTdjMWYxZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5AQCAtMTA1NiwxNSArMTA1NiwxNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fdGFyZ2V0X2hhc19waWQoY29uc3Qgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiBcXHRyZXR1cm4gY3R4LVxcdTAwM2VvcHMuaWQgPT0gREFNT05fT1BTX1ZBRERSIHx8IGN0eC1cXHUwMDNlb3BzLmlkID09IERBTU9OX09QU19GVkFERFI7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRhbW9uX21heF9ucl9hY2Nlc3Nlcyhjb25zdCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbisvKiBSZXR1cm5zIG51bWJlciBvZiBzYW1wbGVzIHBlciBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAqL1xcbitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcbitcXHRcXHRjb25zdCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsO1xcbi1cXHR1bnNpZ25lZCBsb25nIG1heF9ucl9hY2Nlc3NlcztcXG4rXFx0dW5zaWduZWQgbG9uZyBucl9zYW1wbGVzO1xcbiBcXG4gXFx0c2FtcGxlX2ludGVydmFsID0gYXR0cnMtXFx1MDAzZXNhbXBsZV9pbnRlcnZhbCA/IDogMTtcXG4tXFx0bWF4X25yX2FjY2Vzc2VzID0gbWluKGF0dHJzLVxcdTAwM2VhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsLFxcbitcXHRucl9zYW1wbGVzID0gbWluKGF0dHJzLVxcdTAwM2VhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsLFxcbiBcXHRcXHRcXHQodW5zaWduZWQgbG9uZylVSU5UX01BWCk7XFxuLVxcdHJldHVybiBtYXhfbnJfYWNjZXNzZXMgPyA6IDE7XFxuK1xcdHJldHVybiBucl9zYW1wbGVzID8gOiAxO1xcbiB9XFxuIFxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggMzkwZTAwYjM2ODVlZmMuLjA5M2RhNWMwYjM2OTM0IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC0yOTAsNiArMjkwLDkgQEAgdW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIFxcdFxcdFxcdGN0eC1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHM7XFxuIFxcdGxlZnRfd2luZG93X2JwID0gbXVsdF9mcmFjKGxlZnRfd2luZG93LCAxMDAwMCwgd2luZG93X2xlbik7XFxuIFxcbitcXHRpZiAobGVmdF93aW5kb3dfYnAgPT0gMTAwMDApXFxuK1xcdFxcdHJldHVybiByLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XTtcXG4rXFxuIFxcdHJldHVybiBkYW1vbl9tdnN1bShyLVxcdTAwM2Vwcm9iZV9oaXRzW3Byb2JlX2lkeF0sXFxuIFxcdFxcdFxcdHItXFx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdLCBsZWZ0X3dpbmRvd19icCk7XFxuIH1cXG5AQCAtODc2LDQzICs4NzksNTggQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9hZ2VfZm9yX25ld19hdHRycyh1bnNpZ25lZCBpbnQgYWdlLFxcbiBcXHRyZXR1cm4gYWdlICogb2xkX2F0dHJzLVxcdTAwM2VhZ2dyX2ludGVydmFsIC8gbmV3X2F0dHJzLVxcdTAwM2VhZ2dyX2ludGVydmFsO1xcbiB9XFxuIFxcbi0vKiBjb252ZXJ0IGFjY2VzcyByYXRpbyBpbiBicCAocGVyIDEwLDAwMCkgdG8gbnJfYWNjZXNzZXMgKi9cXG4tc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3NlcyhcXG4tXFx0XFx0dW5zaWduZWQgaW50IGFjY2Vzc2VzX2JwLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbisvKiBjb252ZXJ0IHNhbXBsZSByYXRpbyBpbiBicCAocGVyIDEwLDAwMCkgdG8gY291bnQgKi9cXG4rc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9zYW1wbGVfYnBfdG9fY291bnQoXFxuK1xcdFxcdHVuc2lnbmVkIGludCBicCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4ge1xcbi1cXHRyZXR1cm4gYWNjZXNzZXNfYnAgKiBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpIC8gMTAwMDA7XFxuK1xcdHJldHVybiBicCAqIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoYXR0cnMpIC8gMTAwMDA7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIENvbnZlcnQgbnJfYWNjZXNzZXMgdG8gYWNjZXNzIHJhdGlvIGluIGJwIChwZXIgMTAsMDAwKS5cXG4tICpcXG4tICogQ2FsbGVycyBzaG91bGQgZW5zdXJlIGF0dHJzLmFnZ3JfaW50ZXJ2YWwgaXMgbm90IHplcm8sIGxpa2VcXG4tICogZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0cygpIGRvZXMgLiAgT3RoZXJ3aXNlLCBkaXZpZGUtYnktemVybyB3b3VsZFxcbi0gKiBoYXBwZW4uXFxuLSAqL1xcbi1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKFxcbi1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuKy8qIGNvbnZlcnQgc2FtcGxlIGNvdW50IHRvIHJhdGlvIGluIGJwIChwZXIgMTAsMDAwKSAqL1xcbitzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3NhbXBsZV9jb3VudF90b19icChcXG4rXFx0XFx0dW5zaWduZWQgaW50IGNvdW50LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbiB7XFxuLVxcdHJldHVybiBtdWx0X2ZyYWMobnJfYWNjZXNzZXMsIDEwMDAwLCBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpKTtcXG4rXFx0cmV0dXJuIG11bHRfZnJhYyhjb3VudCwgMTAwMDAsIGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoYXR0cnMpKTtcXG4gfVxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucl9hY2Nlc3NlcyxcXG4rc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzLFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMpXFxuIHtcXG4tXFx0cmV0dXJuIGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzKFxcbi1cXHRcXHRcXHRkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icChcXG4tXFx0XFx0XFx0XFx0bnJfYWNjZXNzZXMsIG9sZF9hdHRycyksXFxuK1xcdHJldHVybiBkYW1vbl9zYW1wbGVfYnBfdG9fY291bnQoXFxuK1xcdFxcdFxcdGRhbW9uX3NhbXBsZV9jb3VudF90b19icChucl9hY2Nlc3Nlcywgb2xkX2F0dHJzKSxcXG4gXFx0XFx0XFx0bmV3X2F0dHJzKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4rXFx0XFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxcbitcXHRcXHRib29sIGFnZ3JlZ2F0aW5nLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xcbitcXHRpbnQgaSA9IDA7XFxuK1xcbitcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjdHgpIHtcXG4rXFx0XFx0ci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKFxcbitcXHRcXHRcXHRcXHRyLVxcdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0sIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcXG4rXFx0XFx0aWYgKCFhZ2dyZWdhdGluZylcXG4rXFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcXG4rXFx0XFx0XFx0XFx0XFx0ci1cXHUwMDNlcHJvYmVfaGl0c1tpXSwgb2xkX2F0dHJzLFxcbitcXHRcXHRcXHRcXHRcXHRuZXdfYXR0cnMpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xcbitcXHRcXHRpKys7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIFxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqb2xkX2F0dHJzLCBzdHJ1Y3QgZGFtb25fYXR0cnMgKm5ld19hdHRycyxcXG4tXFx0XFx0Ym9vbCBhZ2dyZWdhdGluZylcXG4rXFx0XFx0Ym9vbCBhZ2dyZWdhdGluZywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiB7XFxuLVxcdHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKFxcbitcXHRkYW1vbl91cGRhdGVfcHJvYmVfaGl0cyhyLCBvbGRfYXR0cnMsIG5ld19hdHRycywgYWdncmVnYXRpbmcsIGN0eCk7XFxuK1xcbitcXHRyLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKFxcbiBcXHRcXHRcXHRyLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7XFxuIFxcdGlmICghYWdncmVnYXRpbmcpXFxuLVxcdFxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycyhcXG4rXFx0XFx0ci1cXHUwMDNlbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoXFxuIFxcdFxcdFxcdFxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0LypcXG5AQCAtOTQ4LDggKzk2Niw4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbiBcXG4gXFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eClcXG4gXFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpXFxuLVxcdFxcdFxcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChcXG4tXFx0XFx0XFx0XFx0XFx0ciwgb2xkX2F0dHJzLCBuZXdfYXR0cnMsIGFnZ3JlZ2F0aW5nKTtcXG4rXFx0XFx0XFx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIG9sZF9hdHRycywgbmV3X2F0dHJzLFxcbitcXHRcXHRcXHRcXHRcXHRhZ2dyZWdhdGluZywgY3R4KTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vbHJ1X3NvcnQuYyBiL21tL2RhbW9uL2xydV9zb3J0LmNcXG5pbmRleCBlOGMzODlhZDMyMjZmNy4uN2UwNzcwODRjYjAzYWEgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vbHJ1X3NvcnQuY1xcbisrKyBiL21tL2RhbW9uL2xydV9zb3J0LmNcXG5AQCAtMzAzLDcgKzMwMyw3IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdGVyciA9IC1FTk9NRU07XFxuLVxcdGhvdF90aHJlcyA9IGRhbW9uX21heF9ucl9hY2Nlc3NlcyhcXHUwMDI2YXR0cnMpICpcXG4rXFx0aG90X3RocmVzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXHUwMDI2YXR0cnMpICpcXG4gXFx0XFx0aG90X3RocmVzX2FjY2Vzc19mcmVxIC8gMTAwMDtcXG4gXFx0aG90X3NjaGVtZSA9IGRhbW9uX2xydV9zb3J0X25ld19ob3Rfc2NoZW1lKGhvdF90aHJlcyk7XFxuIFxcdGlmICghaG90X3NjaGVtZSlcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jIGIvbW0vZGFtb24vb3BzLWNvbW1vbi5jXFxuaW5kZXggNmJkZDFjZmQzODYzYTMuLjg5YzY5NGY2ZTRmYTg5IDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL29wcy1jb21tb24uY1xcbisrKyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xcbkBAIC0xMTIsNyArMTEyLDcgQEAgaW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiBcXHRpbnQgaG90bmVzcztcXG4gXFxuIFxcdGZyZXFfc3Vic2NvcmUgPSByLVxcdTAwM2Vucl9hY2Nlc3NlcyAqIERBTU9OX01BWF9TVUJTQ09SRSAvXFxuLVxcdFxcdGRhbW9uX21heF9ucl9hY2Nlc3NlcyhcXHUwMDI2Yy1cXHUwMDNlYXR0cnMpO1xcbitcXHRcXHRkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFxcdTAwMjZjLVxcdTAwM2VhdHRycyk7XFxuIFxcbiBcXHRhZ2VfaW5fc2VjID0gKHVuc2lnbmVkIGxvbmcpci1cXHUwMDNlYWdlICogYy1cXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCAvIDEwMDAwMDA7XFxuIFxcdGlmIChhZ2VfaW5fc2VjKVxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5pbmRleCAwMTI0ZjgzYjM5YjgzOS4uOGUwMTQzN2ViNWVhODEgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuQEAgLTU3NSw3ICs1NzUsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9yZWdpb25zKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0XFx0XFx0fSwgMyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnAoc3RydWN0IGt1bml0ICp0ZXN0KVxcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NhbXBsZV9jb3VudF90b19icChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIHtcXG4gXFx0c3RydWN0IGRhbW9uX2F0dHJzIGF0dHJzID0ge1xcbiBcXHRcXHQuc2FtcGxlX2ludGVydmFsID0gMTAsXFxuQEAgLTU4NSw3ICs1ODUsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0LypcXG4gXFx0ICogSW4gc29tZSBjYXNlcyBzdWNoIGFzIDMyYml0IGFyY2hpdGVjdHVyZXMgd2hlcmUgVUlOVF9NQVggaXNcXG4gXFx0ICogVUxPTkdfTUFYLCBhdHRycy5hZ2dyX2ludGVydmFsIGJlY29tZXMgemVyby4gIENhbGxpbmdcXG4tXFx0ICogZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnAoKSBpbiB0aGUgY2FzZSB3aWxsIGNhdXNlXFxuK1xcdCAqIGRhbW9uX3NhbXBsZV9jb3VudF90b19icCgpIGluIHRoZSBjYXNlIHdpbGwgY2F1c2VcXG4gXFx0ICogZGl2aWRlLWJ5LXplcm8uICBTdWNoIGNhc2UgaXMgcHJvaGliaXRlZCBpbiBub3JtYWwgZXhlY3V0aW9uIHNpbmNlXFxuIFxcdCAqIHRoZSBjYXV0aW9uIGlzIGRvY3VtZW50ZWQgb24gdGhlIGNvbW1lbnQgZm9yIHRoZSBmdW5jdGlvbiwgYW5kXFxuIFxcdCAqIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHMoKSBkb2VzIHRoZSBjaGVjay4gIFNraXAgdGhlIHRlc3QgaW5cXG5AQCAtNTk0LDcgKzU5NCw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnAoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRpZiAoIWF0dHJzLmFnZ3JfaW50ZXJ2YWwpXFxuIFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcImFnZ3JfaW50ZXJ2YWwgaXMgemVyby5cXFwiKTtcXG4gXFxuLVxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icCgxMjMsIFxcdTAwMjZhdHRycyksIDApO1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2FtcGxlX2NvdW50X3RvX2JwKDEyMywgXFx1MDAyNmF0dHJzKSwgMCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG5AQCAtNjAzLDMyICs2MDMsMzkgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRcXHQuc2FtcGxlX2ludGVydmFsID0gMTAsIC5hZ2dyX2ludGVydmFsID0gMTAwMCx9O1xcbiBcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgbmV3X2F0dHJzO1xcbiBcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyID0gZGFtb25fbmV3X3JlZ2lvbigzLCA3KTtcXG4rXFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xcbiBcXG4gXFx0aWYgKCFyKVxcbiBcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJyZWdpb24gYWxsb2MgZmFpbFxcXCIpO1xcbitcXHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XFxuK1xcdGlmICghY3R4KSB7XFxuK1xcdFxcdGRhbW9uX2ZyZWVfcmVnaW9uKHIpO1xcbitcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJjdHggYWxsb2MgZmFpbFxcXCIpO1xcbitcXHR9XFxuIFxcbiBcXHRyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IDE1O1xcbiBcXHRyLVxcdTAwM2VhZ2UgPSAyMDtcXG4gXFxuIFxcdG5ld19hdHRycyA9IChzdHJ1Y3QgZGFtb25fYXR0cnMpe1xcbiBcXHRcXHQuc2FtcGxlX2ludGVydmFsID0gMTAwLCAuYWdncl9pbnRlcnZhbCA9IDEwMDAwLH07XFxuLVxcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcXHUwMDI2b2xkX2F0dHJzLCBcXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSk7XFxuK1xcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcXHUwMDI2b2xkX2F0dHJzLCBcXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSwgY3R4KTtcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZW5yX2FjY2Vzc2VzLCAxNSk7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2VhZ2UsIDIpO1xcbiBcXG4gXFx0bmV3X2F0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XFxuIFxcdFxcdC5zYW1wbGVfaW50ZXJ2YWwgPSAxLCAuYWdncl9pbnRlcnZhbCA9IDEwMDB9O1xcbi1cXHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgXFx1MDAyNm9sZF9hdHRycywgXFx1MDAyNm5ld19hdHRycywgZmFsc2UpO1xcbitcXHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgXFx1MDAyNm9sZF9hdHRycywgXFx1MDAyNm5ld19hdHRycywgZmFsc2UsIGN0eCk7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2Vucl9hY2Nlc3NlcywgMTUwKTtcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFnZSwgMik7XFxuIFxcbiBcXHRuZXdfYXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcXG4gXFx0XFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEsIC5hZ2dyX2ludGVydmFsID0gMTAwfTtcXG4tXFx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFxcdTAwMjZvbGRfYXR0cnMsIFxcdTAwMjZuZXdfYXR0cnMsIGZhbHNlKTtcXG4rXFx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFxcdTAwMjZvbGRfYXR0cnMsIFxcdTAwMjZuZXdfYXR0cnMsIGZhbHNlLCBjdHgpO1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlbnJfYWNjZXNzZXMsIDE1MCk7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2VhZ2UsIDIwKTtcXG4gXFxuIFxcdGRhbW9uX2ZyZWVfcmVnaW9uKHIpO1xcbitcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuQEAgLTE1NzIsNyArMTU3OSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XFxuIFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zcGxpdF9hYm92ZV9oYWxmX3Byb2dyZXNzZXMpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbiksXFxuIFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zZXRfcmVnaW9ucyksXFxuLVxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icCksXFxuK1xcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zYW1wbGVfY291bnRfdG9fYnApLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9hdHRycyksXFxuIFxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9tdnN1bSksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEyOjI3OjE1Ljk5NDA2MDYzMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYzMTUzNTU5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fc2V0X2F0dHJzXCIsXG4gICAgXCJkYW1vbl9wcm9iZV9oaXRzX212c3VtXCIsXG4gICAgXCJkYW1vbl9ob3Rfc2NvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIERBTU9OIGxvZ2ljIGZvciBjYWxjdWxhdGluZyBhbmQgdXBkYXRpbmcgbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMsIGluY2x1ZGluZyBhIG5ldyBjb25kaXRpb24gaW4gZGFtb25fcHJvYmVfaGl0c19tdnN1bSBhbmQgbmV3IHByb2JlIGhpdCB1cGRhdGluZyBsb2dpYyBpbiBkYW1vbl91cGRhdGVfcHJvYmVfaGl0cy4gSXQgYWxzbyByZW5hbWVzIHNldmVyYWwgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc2FtcGxlIGNvdW50aW5nIGFuZCBhZ2dyZWdhdGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBEQU1PTiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyM2MzNjk0YWVkNTMyMzdiNTg2NzIyY2NkZTFmMWRiNTZjZjZhNDIyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAxMjoyNzoxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggMTliN2U4MzliZGUwYjQuLjYzZjU5Njk1N2MxZjFmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC0xMDU2LDE1ICsxMDU2LDE3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vbl90YXJnZXRfaGFzX3BpZChjb25zdCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRyZXR1cm4gY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfVkFERFIgfHwgY3R4LVx1MDAzZW9wcy5pZCA9PSBEQU1PTl9PUFNfRlZBRERSO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoY29uc3Qgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbisvKiBSZXR1cm5zIG51bWJlciBvZiBzYW1wbGVzIHBlciBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAqL1xuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXG4rXHRcdGNvbnN0IHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWw7XG4tXHR1bnNpZ25lZCBsb25nIG1heF9ucl9hY2Nlc3NlcztcbitcdHVuc2lnbmVkIGxvbmcgbnJfc2FtcGxlcztcbiBcbiBcdHNhbXBsZV9pbnRlcnZhbCA9IGF0dHJzLVx1MDAzZXNhbXBsZV9pbnRlcnZhbCA/IDogMTtcbi1cdG1heF9ucl9hY2Nlc3NlcyA9IG1pbihhdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsLFxuK1x0bnJfc2FtcGxlcyA9IG1pbihhdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsLFxuIFx0XHRcdCh1bnNpZ25lZCBsb25nKVVJTlRfTUFYKTtcbi1cdHJldHVybiBtYXhfbnJfYWNjZXNzZXMgPyA6IDE7XG4rXHRyZXR1cm4gbnJfc2FtcGxlcyA/IDogMTtcbiB9XG4gXG4gXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCAzOTBlMDBiMzY4NWVmYy4uMDkzZGE1YzBiMzY5MzQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTI5MCw2ICsyOTAsOSBAQCB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0XHRjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHM7XG4gXHRsZWZ0X3dpbmRvd19icCA9IG11bHRfZnJhYyhsZWZ0X3dpbmRvdywgMTAwMDAsIHdpbmRvd19sZW4pO1xuIFxuK1x0aWYgKGxlZnRfd2luZG93X2JwID09IDEwMDAwKVxuK1x0XHRyZXR1cm4gci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XTtcbitcbiBcdHJldHVybiBkYW1vbl9tdnN1bShyLVx1MDAzZXByb2JlX2hpdHNbcHJvYmVfaWR4XSxcbiBcdFx0XHRyLVx1MDAzZWxhc3RfcHJvYmVfaGl0c1twcm9iZV9pZHhdLCBsZWZ0X3dpbmRvd19icCk7XG4gfVxuQEAgLTg3Niw0MyArODc5LDU4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fYWdlX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IGFnZSxcbiBcdHJldHVybiBhZ2UgKiBvbGRfYXR0cnMtXHUwMDNlYWdncl9pbnRlcnZhbCAvIG5ld19hdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsO1xuIH1cbiBcbi0vKiBjb252ZXJ0IGFjY2VzcyByYXRpbyBpbiBicCAocGVyIDEwLDAwMCkgdG8gbnJfYWNjZXNzZXMgKi9cbi1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX2FjY2Vzc2VzX2JwX3RvX25yX2FjY2Vzc2VzKFxuLVx0XHR1bnNpZ25lZCBpbnQgYWNjZXNzZXNfYnAsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4rLyogY29udmVydCBzYW1wbGUgcmF0aW8gaW4gYnAgKHBlciAxMCwwMDApIHRvIGNvdW50ICovXG4rc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9zYW1wbGVfYnBfdG9fY291bnQoXG4rXHRcdHVuc2lnbmVkIGludCBicCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbiB7XG4tXHRyZXR1cm4gYWNjZXNzZXNfYnAgKiBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpIC8gMTAwMDA7XG4rXHRyZXR1cm4gYnAgKiBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKGF0dHJzKSAvIDEwMDAwO1xuIH1cbiBcbi0vKlxuLSAqIENvbnZlcnQgbnJfYWNjZXNzZXMgdG8gYWNjZXNzIHJhdGlvIGluIGJwIChwZXIgMTAsMDAwKS5cbi0gKlxuLSAqIENhbGxlcnMgc2hvdWxkIGVuc3VyZSBhdHRycy5hZ2dyX2ludGVydmFsIGlzIG5vdCB6ZXJvLCBsaWtlXG4tICogZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0cygpIGRvZXMgLiAgT3RoZXJ3aXNlLCBkaXZpZGUtYnktemVybyB3b3VsZFxuLSAqIGhhcHBlbi5cbi0gKi9cbi1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKFxuLVx0XHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4rLyogY29udmVydCBzYW1wbGUgY291bnQgdG8gcmF0aW8gaW4gYnAgKHBlciAxMCwwMDApICovXG4rc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9zYW1wbGVfY291bnRfdG9fYnAoXG4rXHRcdHVuc2lnbmVkIGludCBjb3VudCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbiB7XG4tXHRyZXR1cm4gbXVsdF9mcmFjKG5yX2FjY2Vzc2VzLCAxMDAwMCwgZGFtb25fbWF4X25yX2FjY2Vzc2VzKGF0dHJzKSk7XG4rXHRyZXR1cm4gbXVsdF9mcmFjKGNvdW50LCAxMDAwMCwgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihhdHRycykpO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX2Zvcl9uZXdfYXR0cnModW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzLFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKHVuc2lnbmVkIGludCBucl9hY2Nlc3NlcyxcbiBcdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzKVxuIHtcbi1cdHJldHVybiBkYW1vbl9hY2Nlc3Nlc19icF90b19ucl9hY2Nlc3Nlcyhcbi1cdFx0XHRkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icChcbi1cdFx0XHRcdG5yX2FjY2Vzc2VzLCBvbGRfYXR0cnMpLFxuK1x0cmV0dXJuIGRhbW9uX3NhbXBsZV9icF90b19jb3VudChcbitcdFx0XHRkYW1vbl9zYW1wbGVfY291bnRfdG9fYnAobnJfYWNjZXNzZXMsIG9sZF9hdHRycyksXG4gXHRcdFx0bmV3X2F0dHJzKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbitcdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuK1x0XHRib29sIGFnZ3JlZ2F0aW5nLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4re1xuK1x0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xuK1x0aW50IGkgPSAwO1xuK1xuK1x0ZGFtb25fZm9yX2VhY2hfcHJvYmUocCwgY3R4KSB7XG4rXHRcdHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2ldID0gZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKFxuK1x0XHRcdFx0ci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbaV0sIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbitcdFx0aWYgKCFhZ2dyZWdhdGluZylcbitcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0gPSBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnMoXG4rXHRcdFx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSwgb2xkX2F0dHJzLFxuK1x0XHRcdFx0XHRuZXdfYXR0cnMpO1xuK1x0XHRlbHNlXG4rXHRcdFx0ci1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcbitcdFx0aSsrO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuLVx0XHRib29sIGFnZ3JlZ2F0aW5nKVxuK1x0XHRib29sIGFnZ3JlZ2F0aW5nLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4ge1xuLVx0ci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycyhcbitcdGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzKHIsIG9sZF9hdHRycywgbmV3X2F0dHJzLCBhZ2dyZWdhdGluZywgY3R4KTtcbitcbitcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IGRhbW9uX25yX3NhbXBsZXNfZm9yX25ld19hdHRycyhcbiBcdFx0XHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbiBcdGlmICghYWdncmVnYXRpbmcpXG4tXHRcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKFxuK1x0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gZGFtb25fbnJfc2FtcGxlc19mb3JfbmV3X2F0dHJzKFxuIFx0XHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlcywgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xuIFx0ZWxzZVxuIFx0XHQvKlxuQEAgLTk0OCw4ICs5NjYsOCBAQCBzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiBcbiBcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpXG4gXHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KVxuLVx0XHRcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChcbi1cdFx0XHRcdFx0ciwgb2xkX2F0dHJzLCBuZXdfYXR0cnMsIGFnZ3JlZ2F0aW5nKTtcbitcdFx0XHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgb2xkX2F0dHJzLCBuZXdfYXR0cnMsXG4rXHRcdFx0XHRcdGFnZ3JlZ2F0aW5nLCBjdHgpO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2xydV9zb3J0LmMgYi9tbS9kYW1vbi9scnVfc29ydC5jXG5pbmRleCBlOGMzODlhZDMyMjZmNy4uN2UwNzcwODRjYjAzYWEgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9scnVfc29ydC5jXG4rKysgYi9tbS9kYW1vbi9scnVfc29ydC5jXG5AQCAtMzAzLDcgKzMwMyw3IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdGVyciA9IC1FTk9NRU07XG4tXHRob3RfdGhyZXMgPSBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoXHUwMDI2YXR0cnMpICpcbitcdGhvdF90aHJlcyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2YXR0cnMpICpcbiBcdFx0aG90X3RocmVzX2FjY2Vzc19mcmVxIC8gMTAwMDtcbiBcdGhvdF9zY2hlbWUgPSBkYW1vbl9scnVfc29ydF9uZXdfaG90X3NjaGVtZShob3RfdGhyZXMpO1xuIFx0aWYgKCFob3Rfc2NoZW1lKVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL29wcy1jb21tb24uYyBiL21tL2RhbW9uL29wcy1jb21tb24uY1xuaW5kZXggNmJkZDFjZmQzODYzYTMuLjg5YzY5NGY2ZTRmYTg5IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vb3BzLWNvbW1vbi5jXG4rKysgYi9tbS9kYW1vbi9vcHMtY29tbW9uLmNcbkBAIC0xMTIsNyArMTEyLDcgQEAgaW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0aW50IGhvdG5lc3M7XG4gXG4gXHRmcmVxX3N1YnNjb3JlID0gci1cdTAwM2Vucl9hY2Nlc3NlcyAqIERBTU9OX01BWF9TVUJTQ09SRSAvXG4tXHRcdGRhbW9uX21heF9ucl9hY2Nlc3NlcyhcdTAwMjZjLVx1MDAzZWF0dHJzKTtcbitcdFx0ZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcdTAwMjZjLVx1MDAzZWF0dHJzKTtcbiBcbiBcdGFnZV9pbl9zZWMgPSAodW5zaWduZWQgbG9uZylyLVx1MDAzZWFnZSAqIGMtXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCAvIDEwMDAwMDA7XG4gXHRpZiAoYWdlX2luX3NlYylcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IDAxMjRmODNiMzliODM5Li44ZTAxNDM3ZWI1ZWE4MSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtNTc1LDcgKzU3NSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdH0sIDMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKHN0cnVjdCBrdW5pdCAqdGVzdClcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NhbXBsZV9jb3VudF90b19icChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4ge1xuIFx0c3RydWN0IGRhbW9uX2F0dHJzIGF0dHJzID0ge1xuIFx0XHQuc2FtcGxlX2ludGVydmFsID0gMTAsXG5AQCAtNTg1LDcgKzU4NSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnAoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0LypcbiBcdCAqIEluIHNvbWUgY2FzZXMgc3VjaCBhcyAzMmJpdCBhcmNoaXRlY3R1cmVzIHdoZXJlIFVJTlRfTUFYIGlzXG4gXHQgKiBVTE9OR19NQVgsIGF0dHJzLmFnZ3JfaW50ZXJ2YWwgYmVjb21lcyB6ZXJvLiAgQ2FsbGluZ1xuLVx0ICogZGFtb25fbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnAoKSBpbiB0aGUgY2FzZSB3aWxsIGNhdXNlXG4rXHQgKiBkYW1vbl9zYW1wbGVfY291bnRfdG9fYnAoKSBpbiB0aGUgY2FzZSB3aWxsIGNhdXNlXG4gXHQgKiBkaXZpZGUtYnktemVyby4gIFN1Y2ggY2FzZSBpcyBwcm9oaWJpdGVkIGluIG5vcm1hbCBleGVjdXRpb24gc2luY2VcbiBcdCAqIHRoZSBjYXV0aW9uIGlzIGRvY3VtZW50ZWQgb24gdGhlIGNvbW1lbnQgZm9yIHRoZSBmdW5jdGlvbiwgYW5kXG4gXHQgKiBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKCkgZG9lcyB0aGUgY2hlY2suICBTa2lwIHRoZSB0ZXN0IGluXG5AQCAtNTk0LDcgKzU5NCw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnAoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0aWYgKCFhdHRycy5hZ2dyX2ludGVydmFsKVxuIFx0XHRrdW5pdF9za2lwKHRlc3QsIFwiYWdncl9pbnRlcnZhbCBpcyB6ZXJvLlwiKTtcbiBcbi1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9hY2Nlc3Nlc190b19hY2Nlc3Nlc19icCgxMjMsIFx1MDAyNmF0dHJzKSwgMCk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2FtcGxlX2NvdW50X3RvX2JwKDEyMywgXHUwMDI2YXR0cnMpLCAwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxuQEAgLTYwMywzMiArNjAzLDM5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEwLCAuYWdncl9pbnRlcnZhbCA9IDEwMDAsfTtcbiBcdHN0cnVjdCBkYW1vbl9hdHRycyBuZXdfYXR0cnM7XG4gXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyID0gZGFtb25fbmV3X3JlZ2lvbigzLCA3KTtcbitcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbiBcbiBcdGlmICghcilcbiBcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcInJlZ2lvbiBhbGxvYyBmYWlsXCIpO1xuK1x0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xuK1x0aWYgKCFjdHgpIHtcbitcdFx0ZGFtb25fZnJlZV9yZWdpb24ocik7XG4rXHRcdGt1bml0X3NraXAodGVzdCwgXCJjdHggYWxsb2MgZmFpbFwiKTtcbitcdH1cbiBcbiBcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSAxNTtcbiBcdHItXHUwMDNlYWdlID0gMjA7XG4gXG4gXHRuZXdfYXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbiBcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEwMCwgLmFnZ3JfaW50ZXJ2YWwgPSAxMDAwMCx9O1xuLVx0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFx1MDAyNm9sZF9hdHRycywgXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSk7XG4rXHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgXHUwMDI2b2xkX2F0dHJzLCBcdTAwMjZuZXdfYXR0cnMsIGZhbHNlLCBjdHgpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlbnJfYWNjZXNzZXMsIDE1KTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgMik7XG4gXG4gXHRuZXdfYXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbiBcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEsIC5hZ2dyX2ludGVydmFsID0gMTAwMH07XG4tXHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQociwgXHUwMDI2b2xkX2F0dHJzLCBcdTAwMjZuZXdfYXR0cnMsIGZhbHNlKTtcbitcdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcdTAwMjZvbGRfYXR0cnMsIFx1MDAyNm5ld19hdHRycywgZmFsc2UsIGN0eCk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vucl9hY2Nlc3NlcywgMTUwKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgMik7XG4gXG4gXHRuZXdfYXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbiBcdFx0LnNhbXBsZV9pbnRlcnZhbCA9IDEsIC5hZ2dyX2ludGVydmFsID0gMTAwfTtcbi1cdGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChyLCBcdTAwMjZvbGRfYXR0cnMsIFx1MDAyNm5ld19hdHRycywgZmFsc2UpO1xuK1x0ZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHIsIFx1MDAyNm9sZF9hdHRycywgXHUwMDI2bmV3X2F0dHJzLCBmYWxzZSwgY3R4KTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZW5yX2FjY2Vzc2VzLCAxNTApO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYWdlLCAyMCk7XG4gXG4gXHRkYW1vbl9mcmVlX3JlZ2lvbihyKTtcbitcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKHN0cnVjdCBrdW5pdCAqdGVzdClcbkBAIC0xNTcyLDcgKzE1NzksNyBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NwbGl0X2Fib3ZlX2hhbGZfcHJvZ3Jlc3NlcyksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfb3BzX3JlZ2lzdHJhdGlvbiksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X3JlZ2lvbnMpLFxuLVx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKSxcbitcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9zYW1wbGVfY291bnRfdG9fYnApLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdCksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9tdnN1bSksXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoyNzoxNS45OTQwNjIyMzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NzI2MjkwNjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgREFNT04gQ29yZSBDb2RlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBjb3JlIGNvZGUgcGF0Y2guIEVzc2VudGlhbGx5LCBpdCdzIGEgcmVmYWN0b3JpbmcgZXhlcmNpc2UsIHdoaWNoIGlzIHVzdWFsbHkgYSBnb29kIHRoaW5nIGZvciBtYWludGFpbmFiaWxpdHkuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIHJlbmFtaW5nIGEgYnVuY2ggb2YgdmFyaWFibGVzOiBgZGFtb25fbWF4X25yX2FjY2Vzc2VzYCBpcyBub3cgYGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3JgLCBgZGFtb25fYWNjZXNzZXNfYnBfdG9fbnJfYWNjZXNzZXNgIGlzIG5vdyBgZGFtb25fc2FtcGxlX2JwX3RvX2NvdW50YCwgYW5kIHNvIG9uLiBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBqdXN0IGNsYXJpZnlpbmcgdGhlIGludGVudCBhbmQgdW5pdHMsIGxpa2VseSB0byBpbXByb3ZlIHJlYWRhYmlsaXR5LlxuXG5CZXlvbmQgdGhlIHJlbmFtaW5nLCB0aGUgbWVhdCBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHNgLiBUaGlzIGZ1bmN0aW9uLCBmcm9tIHdoYXQgSSBjYW4gdGVsbCwgdXBkYXRlcyB0aGUgYHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzYCBhbmQgYHItXHUwMDNlcHJvYmVfaGl0c2AgZmllbGRzIGJhc2VkIG9uIHRoZSBvbGQgYW5kIG5ldyBhdHRyaWJ1dGVzLiBUaGF0J3MgYSBrZXkgYWRkaXRpb24sIGltcGx5aW5nIGEgY2hhbmdlIGluIGhvdyBoaXQgY291bnRzIGFyZSBtYW5hZ2VkIGFuZCB1cGRhdGVkIHdpdGhpbiB0aGUgbW9uaXRvcmluZyBwcm9jZXNzLiBBbmQsIGltcG9ydGFudGx5LCBgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0YCBub3cgY2FsbHMgdGhpcyBuZXcgZnVuY3Rpb24gd2hpY2ggdGVsbHMgbWUgaXQncyBiZWVuIGludGVncmF0ZWQgaW50byB0aGUgY29yZSB3b3JrZmxvdy5cblxuTG9va2luZyBhdCBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAsIHRoZXJlJ3MgYSBuZXcgY29uZGl0aW9uIGluIHRoZXJlIHRvby4gU3BlY2lmaWNhbGx5LCBpZiBgbGVmdF93aW5kb3dfYnAgPT0gMTAwMDBgLCBpdCBub3cgcmV0dXJucyBgci1cdTAwM2VsYXN0X3Byb2JlX2hpdHNbcHJvYmVfaWR4XWAuIFRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIHJlbmFtaW5nLCBhbmQgd29ydGggbm90aW5nLiBTZWVtcyBsaWtlIGEgc3BlY2lmaWMgb3B0aW1pemF0aW9uIG9yIHNob3J0Y3V0IGZvciBhIHBhcnRpY3VsYXIgd2luZG93IHNpemUuIEknZCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGF0IGNvbmRpdGlvbiwgYnV0IGl0J3MgY2xlYXJseSBhIGRlbGliZXJhdGUgYWRkaXRpb24uXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgREFNT04gdG8gZnVuY3Rpb24gd2l0aCB0aGlzIHBhdGNoLiBJJ2xsIHNlYXJjaCBmb3IgZWl0aGVyIGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRgIG9yIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCB0byBzZWUgd2hhdCBDT05GSUcgb3B0aW9ucyBhcmUgaW52b2x2ZWQuIEdvdHRhIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGVuYWJsZWQgY29ycmVjdGx5IHRvIHRlc3QgdGhlIGZ1bGwgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoyNzoyMy43MjAzNTUxMDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU1MTU0MTg3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9wcm9iZV9oaXRzX212c3VtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0xMDA1PXVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDA2LVxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwMDc6dW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwMDgtXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNTI9dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjc1LVxcbm1tL2RhbW9uL2NvcmUuYzoyNzY6dW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jLTI3Ny1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9OTA9c3RhdGljIGludCBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyAqcHJvYmVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExMy1cXHRcXHRzeXNfcHJvYmUgPSBkYW1vc19zeXNmc19wcm9iZV9hbGxvYyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE0OlxcdFxcdFxcdFxcdGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSwgcmVnaW9uLCBjdHgpKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTE1LVxcdFxcdGlmICghc3lzX3Byb2JlKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEyOjI3OjI2LjI3MTkwOTE2N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MTE3Njk1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIGZvciBtbS9kYW1vbi9jb3JlLmMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb24gaXMgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBkZWJ1Z2dpbmcgdGFzay4gSSdtIGFzc3VtaW5nIGl0J3MgcGFydCBvZiBEQU1PTiwgd2hpY2ggaXMgbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nLiBUaGUgZmlyc3QgdGhpbmcgSSdkIGRvIGlzIHVzZSB0aGUgc3RhbmRhcmQgdG9vbHMgZm9yIHRoaXMuIGBnaXQgZ3JlcGAgc2hvdWxkIGJlIG15IGZyaWVuZCBoZXJlLiBJJ2Qgc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlLCBwcm9iYWJseSBzdGFydGluZyB3aXRoIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIEknZCBuZWVkIHRvIGxvb2sgZm9yIGFueSByZWZlcmVuY2VzLCBjb25kaXRpb25hbHMsIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGluY2x1ZGUgaXQsIG9yIGRpcmVjdGx5IG1lbnRpb24gdGhlIGZpbGUgaXRzZWxmIG9yIGl0cyBhc3NvY2lhdGVkIGZ1bmN0aW9uYWxpdHkuIEknZCBsaWtlbHkgYWxzbyBjaGVjayB0aGUgYE1ha2VmaWxlYCBpbiB0aGUgYG1tL2RhbW9uL2AgZGlyZWN0b3J5IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGhpbnRzIHRoZXJlIGFib3V0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLlxuXG5TaW5jZSBJIGFtIGZhbWlsaWFyIHdpdGggdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHByb2Nlc3MsIEkgd2lsbCB0cnkgdG8gc2VlIHdoYXQgZmVhdHVyZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGZpbGUgYW5kIHNlYXJjaCB1c2luZyB0aG9zZSBmZWF0dXJlcy5cbkkgYW0gY29tZm9ydGFibGUgZ29pbmcgdGhyb3VnaCB0aGUgS2NvbmZpZyBmaWxlcywgSSBuZWVkIHRvIGtub3cgdGhlIGZlYXR1cmVzIGFzc29jaWF0ZWQgd2l0aCBgbW0vZGFtb24vY29yZS5jYCBzbyBJIGNhbiBzZWUgd2hhdCBJIGNhbiBzZWFyY2ggZm9yLlxuT25jZSBJIGhhdmUgYSByZWFzb25hYmxlIGxlYWQgZnJvbSB0aGUgaW5pdGlhbCBzZWFyY2gsIEkgY2FuIHJlZmluZSBpdCBmdXJ0aGVyIHRvIG5hcnJvdyB0aGUgb3B0aW9ucyBkb3duLiBJIG1pZ2h0IGFsc28gbG9vayBhdCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzIHdpdGhpbiB0aGUgc291cmNlIGNvZGUgaXRzZWxmLCBhcyB0aG9zZSBtaWdodCBvZmZlciBjbHVlcy4gVWx0aW1hdGVseSwgaXTigJlzIGEgcHJvY2VzcyBvZiBlbGltaW5hdGlvbiBhbmQgcGF0dGVybiBtYXRjaGluZyB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbSB1bnRpbCBJIGZpbmQgdGhlIHJlc3BvbnNpYmxlIGNvbmZpZyBzeW1ib2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NTksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoyNzoyOS43ODM2ODA0NDZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MTI5NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvcmVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vTWFrZWZpbGUtMi1cXG5tbS9kYW1vbi9NYWtlZmlsZTozOm9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxubW0vZGFtb24vTWFrZWZpbGUtNC1vYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6Mjc6MjkuODk5ODE0OTU2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMTA1MDU4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqTWFrZWZpbGUgSW52ZXN0aWdhdGlvbjogYG1tL2RhbW9uL2AgSW5jbHVzaW9uKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBJJ20gc3RhcmluZyBhdCBgbW0vZGFtb24vTWFrZWZpbGVgLCBhbmQgdGhlIGtleSBsaW5lIGhlcmUgaXMgYG9iai15IDo9IGNvcmUub2AuIE9rYXksIHN0YW5kYXJkIGVub3VnaDogdGhpcyB0ZWxscyB0aGUgYnVpbGQgc3lzdGVtIHRvIGluY2x1ZGUgYGNvcmUub2Agd2hlbiBidWlsZGluZyB0aGUgYG1tL2RhbW9uYCBjb21wb25lbnQuIEJ1dCBub3cgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IHBvcHM6ICp3aGF0KiBpbmNsdWRlcyBgbW0vZGFtb25gIGluIHRoZSBmaXJzdCBwbGFjZT8gV2hlcmUgaXMgdGhpcyBkaXJlY3RvcnkgZ2V0dGluZyBwdWxsZWQgaW50byB0aGUgYnJvYWRlciBrZXJuZWwgYnVpbGQ/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGRlcGVuZGVuY3kgYmFjayB1cCB0aGUgY2hhaW4uIFVuZGVyc3RhbmRpbmcgdGhlIGhpZ2hlci1sZXZlbCBNYWtlZmlsZSBzdHJ1Y3R1cmUgaXMgdml0YWwuIElzIGl0IGluY2x1ZGVkIGRpcmVjdGx5IGluIGEgcGFyZW50IGRpcmVjdG9yeSdzIGBvYmoteWAgb3IgYG9iai1tYCBkZWZpbml0aW9uPyBPciBpcyB0aGVyZSBzb21lIGluZGlyZWN0IGluY2x1c2lvbiB2aWEgYSBtb2R1bGUgZGVwZW5kZW5jeSBvciBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGRpZ2dpbmcgdGhyb3VnaCB0aGUga2VybmVsJ3MgYnVpbGQgc3lzdGVtIGNhbiBiZSBmcnVzdHJhdGluZy4gR290dGEgZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jeSB0cmVlIHRvIHNlZSBob3cgYG1tL2RhbW9uYCBnZXRzIGJha2VkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTAzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6Mjc6MzMuMzMwODY3OTM1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2OTE3MzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTEzND1vYmotJChDT05GSUdfREVCVUdfUEFHRV9SRUYpICs9IGRlYnVnX3BhZ2VfcmVmLm9cXG5tbS9NYWtlZmlsZToxMzU6b2JqLSQoQ09ORklHX0RBTU9OKSArPSBkYW1vbi9cXG5tbS9NYWtlZmlsZS0xMzYtb2JqLSQoQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZKSArPSB1c2VyY29weS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEyOjI3OjMzLjQwNzc4OTEwNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3ODUwNjM0NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIERBTU9OIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSBzZWUgdGhpcyByZXF1aXJlbWVudCBmb3IgYENPTkZJR19EQU1PTmAuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBjb3JlIG9mIER5bmFtaWMgQWNjZXNzIE1vbml0b3JpbmcgKERBTU9OKS4gQnV0IEkga25vdyBEQU1PTiBoYXMgYSBsb3Qgb2YgZmxleGliaWxpdHksIHNvIEkgbmVlZCB0byB0aGluayBiZXlvbmQganVzdCB0aGUgYmFzZSBzZXR0aW5nLiBMZXQncyBzZWUuLi4gd2hhdCBhYm91dCB0aG9zZSBmaW5lci1ncmFpbmVkIGNvbnRyb2xzPyBJIHdvbmRlciBpZiBJIG5lZWQgdG8gZW5hYmxlIHNwZWNpZmljIGFzcGVjdHMgbGlrZSBgQ09ORklHX0RBTU9OX1ZBRERSYCwgd2hpY2ggaW1wbGllcyBWaXJ0dWFsIEFkZHJlc3MgbW9uaXRvcmluZywgb3IgcGVyaGFwcyBgQ09ORklHX0RBTU9OX1BBRERSYCwgZm9yIFBoeXNpY2FsIEFkZHJlc3MgbW9uaXRvcmluZyDigJMgdmVyeSBkaWZmZXJlbnQgdXNlIGNhc2VzIHRoZXJlIGRlcGVuZGluZyBvbiB0aGUgc3lzdGVtJ3MgbmVlZHMgYW5kIGhvdyBJIGludGVuZCB0byB1c2UgaXQuIEFuZCB0aGVuIGBDT05GSUdfREFNT05fU1lTRlNgIGlzIGNydWNpYWwgaWYgSSB3YW50IHRvIGFjdHVhbGx5ICppbnRlcmFjdCogd2l0aCBEQU1PTiB0aHJvdWdoIHRoZSBmaWxlc3lzdGVtIGludGVyZmFjZS5cblxuT2theSwgYmVzdCBiZXQgaXMgdG8gY2hlY2sgdGhlIGRlZmluaXRpdmUgc291cmNlOiB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSBhbGwgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbG9uZyB3aXRoIHRoZWlyIGRlcGVuZGVuY2llcywgZGVzY3JpcHRpb25zLCBhbmQgbGlrZWx5LCBkZWZhdWx0IHZhbHVlcy4gSSdsbCB0YWtlIGEgbG9vayBhbmQgZ2V0IHRoZSByaWdodCBjaG9pY2VzIHNlbGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDc2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6Mjc6MzguMTkyODU0MTAzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTQyNjgxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoyNzozOC43NDcxMjg5MzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NzE3NTkxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoJ3MgU2NvcGUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vbHJ1X3NvcnQuY2AsIGFuZCBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYCwgYW5kIGEgdGVzdCBoZWFkZXIsIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBJbW1lZGlhdGVseSwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX0xSVV9TT1JUYCwgYW5kIGBDT05GSUdfREFNT05fVkFERFJgIGFyZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUuIFRoYXQgY292ZXJzIHRoZSBtYWpvcml0eSBvZiB0aGUgY2hhbmdlcywgaXQgc2VlbXMuXG5cbkJ1dCBob2xkIG9uLi4uIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgIOKAkyB0aGF0IG9uZSBzb21ldGltZXMgdHJpcHMgcGVvcGxlIHVwLiBUaGF0IGZpbGUgaXMgb25seSBjb21waWxlZCB3aGVuICplaXRoZXIqIGBDT05GSUdfREFNT05fVkFERFJgICpvciogYENPTkZJR19EQU1PTl9QQUREUmAgaXMgZW5hYmxlZC4gQmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgYE1ha2VmaWxlYCBpbiBgbW0vZGFtb24vYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSB1bmRlcnN0YW5kIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgY29ycmVjdGx5LiBHb3R0YSBtYWtlIHN1cmUgSSdtIHNlZWluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gTm8gYXNzdW1wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NTUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6Mjc6NDIuNDM0MzA3MDAxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk3NDM0NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3BzLWNvbW1vblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9NYWtlZmlsZT0zPW9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxubW0vZGFtb24vTWFrZWZpbGU6NDpvYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG5tbS9kYW1vbi9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbm1tL2RhbW9uL01ha2VmaWxlLTYtb2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEyOjI3OjQyLjU4NDA1NTI1MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDk5MDUxMTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBLZXkgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9MUlVfU09SVGAgY29uZmlndXJhdGlvbnMgYXJlIGFsbCByZWxldmFudCBhbmQgc291bmQgbGlrZSBhIHNvbGlkIGZvdW5kYXRpb24uIE5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgZm9yIHRoaXMgcGFydGljdWxhciBhcmVhIG9mIGludmVzdGlnYXRpb24uIEknbSBmb2N1c2luZyBvbiB0aGVzZTogYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdGAsIGBkYW1vbl91cGRhdGVfcHJvYmVfaGl0c2AsIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLCBhbmQgYGRhbW9uX2hvdF9zY29yZWAuXG5cbk5leHQsIEkgbmVlZGVkIHRvIGNoZWNrIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBhbmQgaWYgdGhleSdyZSBhY2Nlc3NpYmxlLiBJdCBsb29rcyBsaWtlIGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRgIGFuZCBgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHNgIGFyZSBzdGF0aWNhbGx5IGRlZmluZWQgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLCB3aGljaCBtZWFucyB0aGVpciBzY29wZSBpcyBsaW1pdGVkIHdpdGhpbiB0aGF0IGZpbGUuIEhvd2V2ZXIsIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBpcyBleHBvcnRlZCwgbWFraW5nIGl0IGdsb2JhbGx5IGFjY2Vzc2libGUgZnJvbSBgbW0vZGFtb24vY29yZS5jYC4gVGhlbiBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AgaXMgc3RhdGljIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhbmQgYGRhbW9uX2hvdF9zY29yZWAgaXMgZ2xvYmFsIGluIGBtbS9kYW1vbi9vcHMtY29tbW9uLmNgLlxuXG5GaW5hbGx5LCBpdCBzZWVtcyB3aXNlIHRvIGFsc28gbG9vayBhdCBgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0c2AgYW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCB0aGUgc3RhdGljIGZ1bmN0aW9uIGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDg5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEyOjI3OjQ3LjY4MzEwNzk0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIxMzQyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTkyND1zdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05NTMtICovXFxubW0vZGFtb24vY29yZS5jOjk1NDpzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9jb3JlLmMtOTU1LVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLCBib29sIGFnZ3JlZ2F0aW5nKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTEwMTI9aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTA0MS1cXG5tbS9kYW1vbi9jb3JlLmM6MTA0MjpcXHRkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRzKGN0eCwgYXR0cnMsIGFnZ3JlZ2F0aW5nKTtcXG5tbS9kYW1vbi9jb3JlLmMtMTA0My1cXHRjdHgtXFx1MDAzZWF0dHJzID0gKmF0dHJzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoyNzo0Ny43OTUyNDg2M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDczMTUyNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBEYW1vbiBVcGRhdGUgUGF0aCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBpdCBsb29rcyBsaWtlIGBkYW1vbl9zZXRfYXR0cnNgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGUgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHNgIGZ1bmN0aW9uLiBUaGF0J3MgZ29vZCB0byBrbm93LCB0aGF0IHNldHMgdGhlIHN0YWdlIGZvciB3aGVyZSB0aGUgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyBpcyBsaWtlbHkgdG8gYmUga2lja2VkIG9mZi4gTm93LCBzaW5jZSB3ZSdyZSB0YWxraW5nIGFib3V0IHVwZGF0ZXMsIEkgd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGRhbW9uX3Byb2JlX2hpdHNfbXZzdW1gLiBUaGlzIHNlZW1zIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgbW9uaXRvcmluZyByZXN1bHRzIGFyZSBhY3R1YWxseSBjb2xsZWN0ZWQgYW5kIGFnZ3JlZ2F0ZWQuIExldCdzIHNlZSBob3cgdGhhdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHVwZGF0ZSBwcm9jZXNzIGFuZCBzZWUgd2hlcmUgdGhlcmUgbWlnaHQgYmUgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoyNzo1MC44Njg0MDM2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5ODIyNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3Byb2JlX2hpdHNfbXZzdW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNTI9dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjc1LVxcbm1tL2RhbW9uL2NvcmUuYzoyNzY6dW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vY29yZS5jLTI3Ny1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM9OTA9c3RhdGljIGludCBkYW1vc19zeXNmc19wcm9iZXNfYWRkX2RpcnMoc3RydWN0IGRhbW9zX3N5c2ZzX3Byb2JlcyAqcHJvYmVzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTExMy1cXHRcXHRzeXNfcHJvYmUgPSBkYW1vc19zeXNmc19wcm9iZV9hbGxvYyhcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MTE0OlxcdFxcdFxcdFxcdGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaSwgcmVnaW9uLCBjdHgpKTtcXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMTE1LVxcdFxcdGlmICghc3lzX3Byb2JlKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEyOjI3OjUwLjk5ODIzMTIwOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ5NTAyNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipOYXZpZ2F0aW5nIHRoZSBEQU1PTiBDb2RlYmFzZTogQSBUcmFjZSBvZiBEYXRhIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgREFNT04gY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtb25pdG9yaW5nIGRhdGEgZ2V0cyBwcm9jZXNzZWQgYW5kIHByb3BhZ2F0ZWQuIEkndmUgdHJhY2tlZCBkb3duIHRoYXQgYGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlyc2AgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyB0byBjYWxsIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYC4gVGhhdCdzIGludGVyZXN0aW5nLCBpdCBsb29rcyBsaWtlIHRoaXMgaXMgd2hlcmUgdGhlIHJhdyBwcm9iZSBoaXRzIGFyZSBiZWluZyBhZ2dyZWdhdGVkLCBwb3NzaWJseSBpbnRvIHNvbWUgbW92aW5nIHN1bSBvciBzaW1pbGFyIHN0YXRpc3RpY2FsIHN1bW1hcnkuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC5cblxuVGhlbiwgSSBzZWUgdGhhdCB3aGVuIGBkYW1vbl9zZXRfYXR0cnNgIGlzIGNhbGxlZCwgaXQgdHJpZ2dlcnMgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHNgLiBUaGlzIGlzIGdvb2QsIGl0IGlzIGxpa2VseSB3aGVyZSB0aGUgZmluYWwgYXR0cmlidXRlcyB0aGF0IHRyaWdnZXIgbWVtb3J5IHJlY2xhaW0gYXJlIGNhbGN1bGF0ZWQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhhdCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGZpbmFsIHN0ZXBzIG9yIGlmIGl0IGhhcyBzb21lIGludGVybWVkaWF0ZSBmdW5jdGlvbmFsaXR5LlxuXG5JIHRoaW5rIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLiBUaGlzIHNlZW1zIHRvIGJlIHdoZXJlIHRoZSBMUlUgc29ydGluZyBhc3BlY3QgY29tZXMgaW50byBwbGF5IGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBtZW1vcnkgcmVjbGFpbSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGNvcnJlY3RseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgcHJvY2VzcyBpcyBhbmQgd2hpY2ggcGFyYW1ldGVycyBhcmUgYmVpbmcgdGFrZW4gaW50byBhY2NvdW50IGJ5IHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uIEZyb20gdGhlIGZ1bmN0aW9uIG5hbWUsIEknZCBleHBlY3QgaXQgdG8gaW5jb3Jwb3JhdGUgc29tZSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgbW9uaXRvcmluZyBpbnRvIHNvcnRpbmcgYW5kIHNlbGVjdGlvbiBvZiB0aGUgcGFnZXMsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgYWN0dWFsIGZsb3cuIEkgbmVlZCB0byBtYXAgdGhlIG91dHB1dCBvZiB0aGUgbW9uaXRvcmluZyB0byB0aGUgcGFnZSBzZWxlY3Rpb24gZm9yIHJlY2xhaW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDQ1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6Mjc6NTUuNTQ3NzM2Njg4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjk5Nzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2xydV9zb3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vbHJ1X3NvcnQuYz0yNDk9c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTI3MC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjI3MTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG5tbS9kYW1vbi9scnVfc29ydC5jLTI3Mi17XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTM0Mj1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQzLXtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjM0NDpcXHRyZXR1cm4gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQ1LX1cXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9NDA4PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy00MTYtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo0MTc6XFx0ZXJyID0gZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycygpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDE4LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDEyOjI3OjU1LjYzMDc0OTI4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc4MTIyNjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcywgc3BlYWtpbmcgYXMgYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6XG5cbioqRGl2aW5nIERlZXAgaW50byBEQU1PTidzIExSVSBTb3J0aW5nKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgdGhhdCBib3RoIGBkYW1vbl9scnVfc29ydF90dXJuYCBhbmQgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm5gIGFyZSB1bHRpbWF0ZWx5IGNhbGxpbmcgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgc3VnZ2VzdHMgYSBjb21tb24gcGFyYW1ldGVyIGFwcGxpY2F0aW9uIHBhdGggZm9yIHRoZXNlIHNlZW1pbmdseSBkaXN0aW5jdCBMUlUgc29ydGluZyBvcGVyYXRpb25zIHdpdGhpbiBEQU1PTi4gVGhpcyBpbXBsaWVzIGEgY2VudHJhbGl6ZWQgbWVjaGFuaXNtIGZvciBjb25maWd1cmluZyBhbmQgYXBwbHlpbmcgdGhlIHJ1bGVzIGZvciBob3cgdGhlIExSVSBsaXN0cyBhcmUgbWFuYWdlZCBhbmQgYWRqdXN0ZWQgZHVyaW5nIHRoZWlyIHR1cm5zIGFuZCBjb21taXRtZW50IG9mIGlucHV0IG9wZXJhdGlvbnMuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IHdoYXQgYXJlIHRoZSBwYXJhbWV0ZXJzPyBBbmQsIG1vcmUgaW1wb3J0YW50bHksIGhvdyBhcmUgdGhleSAqYWZmZWN0aW5nKiB0aGUgc29ydGluZyBwcm9jZXNzLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIGhvdyBgZGFtb25faG90X3Njb3JlYCBmYWN0b3JzIGludG8gdGhpcyB3aG9sZSB0aGluZy4gSXMgYGRhbW9uX2hvdF9zY29yZWAgb25lIG9mIHRoZSBrZXkgcGFyYW1ldGVycyBiZWluZyBhcHBsaWVkPyBJcyBpdCBhIGtleSBkZXRlcm1pbmFudCBpbiBob3cgREFNT04gZGVjaWRlcyB0byBzb3J0IGFuZCBtYW5hZ2UgdGhlIExSVSBsaXN0cz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uc3RpdHV0ZXMgYSBob3Qgc2NvcmUsIHRoZSB3ZWlnaHRpbmcgb2YgdmFyaW91cyBob3Qgc2NvcmUgcGFyYW1ldGVycywgYW5kIGhvdyB0aGVzZSBkaXJlY3RseSBpbXBhY3QgdGhlIHNvcnRpbmcgbG9naWMgd2l0aGluIGBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzYC4gVGhpcyBpcyB3aGVyZSBJJ2xsIGdldCB0aGUgcmVhbCBpbnNpZ2h0cyBpbnRvIHRoZSBwZXJmb3JtYW5jZSB0dW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjA5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6Mjc6NTkuNTA4ODczNzc3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzcwNDQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9ob3Rfc2NvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL29wcy1jb21tb24uYz03Mz12b2lkIGRhbW9uX3BtZHBfbWtvbGQocG1kX3QgKnBtZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xMDMtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjEwNDppbnQgZGFtb25faG90X3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTEwNS1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM9MTQ5PWludCBkYW1vbl9jb2xkX3Njb3JlKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMTUxLXtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MTUyOlxcdGludCBob3RuZXNzID0gZGFtb25faG90X3Njb3JlKGMsIHIsIHMpO1xcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNTMtXFxuLS1cXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg9MTU9aW50IGRhbW9uX2NvbGRfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmgtMTYtXFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmg6MTc6aW50IGRhbW9uX2hvdF9zY29yZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbm1tL2RhbW9uL29wcy1jb21tb24uaC0xOC1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz00MTc9c3RhdGljIGludCBkYW1vbl9wYV9zY2hlbWVfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtNDIzLVxcdGNhc2UgREFNT1NfTFJVX1BSSU86XFxubW0vZGFtb24vcGFkZHIuYzo0MjQ6XFx0XFx0cmV0dXJuIGRhbW9uX2hvdF9zY29yZShjb250ZXh0LCByLCBzY2hlbWUpO1xcbm1tL2RhbW9uL3BhZGRyLmMtNDI1LVxcdGNhc2UgREFNT1NfTFJVX0RFUFJJTzpcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtNDI3LVxcdGNhc2UgREFNT1NfTUlHUkFURV9IT1Q6XFxubW0vZGFtb24vcGFkZHIuYzo0Mjg6XFx0XFx0cmV0dXJuIGRhbW9uX2hvdF9zY29yZShjb250ZXh0LCByLCBzY2hlbWUpO1xcbm1tL2RhbW9uL3BhZGRyLmMtNDI5LVxcdGNhc2UgREFNT1NfTUlHUkFURV9DT0xEOlxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz05Mzg9c3RhdGljIGludCBkYW1vbl92YV9zY2hlbWVfc2NvcmUoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtOTQ1LVxcdGNhc2UgREFNT1NfTUlHUkFURV9IT1Q6XFxubW0vZGFtb24vdmFkZHIuYzo5NDY6XFx0XFx0cmV0dXJuIGRhbW9uX2hvdF9zY29yZShjb250ZXh0LCByLCBzY2hlbWUpO1xcbm1tL2RhbW9uL3ZhZGRyLmMtOTQ3LVxcdGNhc2UgREFNT1NfTUlHUkFURV9DT0xEOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoyNzo1OS42MDI1ODI1NDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwODMwNzU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBEQU1PTiBTeW1ib2wgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBzZWUsIGl0IGxvb2tzIGxpa2UgYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgLCBhbmQgYGRhbW9uX2hvdF9zY29yZWAgYXJlIHRoZSBtb3N0IHByb21pc2luZyBzeW1ib2xzIHRvIGRlbHZlIGludG8gaGVyZS4gU3BlY2lmaWNhbGx5LCBJIHRoaW5rIGBkYW1vbl9zZXRfYXR0cnNgIGlzIGEgc3Ryb25nIGNvbnRlbmRlciB0byBzdGFydCB3aXRoLiBUaGVuLCBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgc2VlbXMgcmVsZXZhbnQgYXMgd2VsbC4gXG5cbkhtbSwgYGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnNgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgb2YgYSB3cmlua2xlLiBNYXliZSBgZGFtb25fbHJ1X3NvcnRfdHVybmAgb3IgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm5gIHdvdWxkIGJlIG1vcmUgZnJ1aXRmdWwgaW4gdGhhdCBjYXNlPyBPbiBzZWNvbmQgdGhvdWdodCwgc2luY2Ugc3l6a2FsbGVyIGNhbiBwb3RlbnRpYWxseSBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgaWYgcmVhY2hhYmxlLCBwZXJoYXBzIGBkYW1vbl9zZXRfYXR0cnNgIGlzIHRoZSBiZXN0IGJldCBzaW5jZSBpdCBpcyBleHBvcnRlZCBhbmQgbGlrZWx5IGdsb2JhbC4gSXQncyBiZXN0IHRvIHZlcmlmeSB0aGlzIHRob3VnaC4gVGltZSB0byBjb25maXJtIGlmIGBkYW1vbl9zZXRfYXR0cnNgIGlzIGFjdHVhbGx5IGdsb2JhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyODUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6Mjg6MDQuMTEwODkyNDc1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDcxOTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zZXRfYXR0cnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz05Nzc9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy05OTItLyoqXFxubW0vZGFtb24vY29yZS5jOjk5MzogKiBkYW1vbl9zZXRfYXR0cnMoKSAtIFNldCBhdHRyaWJ1dGVzIGZvciB0aGUgbW9uaXRvcmluZy5cXG5tbS9kYW1vbi9jb3JlLmMtOTk0LSAqIEBjdHg6XFx0XFx0bW9uaXRvcmluZyBjb250ZXh0XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTAxMS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTAxMjppbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG5tbS9kYW1vbi9jb3JlLmMtMTAxMy17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTY4NT1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzE1LVxcdCAqIHNjaGVtZXMgYW5kIHRhcmdldHMgc2hvdWxkIGJlIHVwZGF0ZWQgZmlyc3QsIHNpbmNlXFxubW0vZGFtb24vY29yZS5jOjE3MTY6XFx0ICogMS4gZGFtb25fc2V0X2F0dHJzKCkgdXBkYXRlcyBtb25pdG9yaW5nIHJlc3VsdHMgb2YgdGFyZ2V0cyBhbmRcXG5tbS9kYW1vbi9jb3JlLmMtMTcxNy1cXHQgKiBuZXh0X2FwcGx5X3NpcyBvZiBzY2hlbWVzLCBhbmRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzIxLVxcdGlmICghZGFtb25fYXR0cnNfZXF1YWxzKFxcdTAwMjZkc3QtXFx1MDAzZWF0dHJzLCBcXHUwMDI2c3JjLVxcdTAwM2VhdHRycykpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MTcyMjpcXHRcXHRlcnIgPSBkYW1vbl9zZXRfYXR0cnMoZHN0LCBcXHUwMDI2c3JjLVxcdTAwM2VhdHRycyk7XFxubW0vZGFtb24vY29yZS5jLTE3MjMtXFx0XFx0aWYgKGVycikge1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIxODM9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkIGtkYW1vbmRfdHVuZV9pbnRlcnZhbHMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjAxLVxcdHRyYWNlX2RhbW9uX21vbml0b3JfaW50ZXJ2YWxzX3R1bmUobmV3X2F0dHJzLnNhbXBsZV9pbnRlcnZhbCk7XFxubW0vZGFtb24vY29yZS5jOjIyMDI6XFx0ZGFtb25fc2V0X2F0dHJzKGMsIFxcdTAwMjZuZXdfYXR0cnMpO1xcbm1tL2RhbW9uL2NvcmUuYy0yMjAzLX1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNjQ0PXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM2NzMtXFx0XFx0ICogYmUgY2hhbmdlZCBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgUmVhZCB0aGUgdmFsdWVzIGhlcmUsIGFuZFxcbm1tL2RhbW9uL2NvcmUuYzozNjc0OlxcdFxcdCAqIHVzZSB0aG9zZSBmb3IgdGhpcyBpdGVyYXRpb24uICBUaGF0IGlzLCBkYW1vbl9zZXRfYXR0cnMoKVxcbm1tL2RhbW9uL2NvcmUuYy0zNjc1LVxcdFxcdCAqIHVwZGF0ZWQgbmV3IHZhbHVlcyBhcmUgcmVzcGVjdGVkIGZyb20gbmV4dCBpdGVyYXRpb24uXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzczNC1cXHRcXHRcXHRcXHQgKiBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgSW4gdGhlIGNhc2UsXFxubW0vZGFtb24vY29yZS5jOjM3MzU6XFx0XFx0XFx0XFx0ICogZGFtb25fc2V0X2F0dHJzKCkgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZnJvbVxcbm1tL2RhbW9uL2NvcmUuYy0zNzM2LVxcdFxcdFxcdFxcdCAqIGtkYW1vbmRfdHVuZV9pbnRlcnZhbCgpIG1heSB3cm9uZ2x5IHRoaW5rXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTI3MT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzAwLVxcdH1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjMwMTpcXHRlcnIgPSBkYW1vbl9zZXRfYXR0cnMocGFyYW1fY3R4LCBcXHUwMDI2YXR0cnMpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzAyLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MTk0PXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMjI0LVxcdH1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MjI1OlxcdGVyciA9IGRhbW9uX3NldF9hdHRycyhwYXJhbV9jdHgsIFxcdTAwMjZhdHRycyk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTIyNi1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTE1MT1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc3RhdF9idWlsZF9jdHgodm9pZClcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy0xNzUtXFx0fTtcXG5tbS9kYW1vbi9zdGF0LmM6MTc2OlxcdGlmIChkYW1vbl9zZXRfYXR0cnMoY3R4LCBcXHUwMDI2YXR0cnMpKVxcbm1tL2RhbW9uL3N0YXQuYy0xNzctXFx0XFx0Z290byBmcmVlX291dDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTg4OT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTE5MDgtXFx0fTtcXG5tbS9kYW1vbi9zeXNmcy5jOjE5MDk6XFx0cmV0dXJuIGRhbW9uX3NldF9hdHRycyhjdHgsIFxcdTAwMjZhdHRycyk7XFxubW0vZGFtb24vc3lzZnMuYy0xOTEwLX1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD02NDE9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfYXR0cnMoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY1MS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NjUyOlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZXRfYXR0cnMoYywgXFx1MDAyNnZhbGlkX2F0dHJzKSwgMCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY1My1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02NTUtXFx0aW52YWxpZF9hdHRycy5taW5fbnJfcmVnaW9ucyA9IDE7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjY1NjpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFxcdTAwMjZpbnZhbGlkX2F0dHJzKSwgLUVJTlZBTCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY1Ny1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02NTktXFx0aW52YWxpZF9hdHRycy5tYXhfbnJfcmVnaW9ucyA9IDk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjY2MDpcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fc2V0X2F0dHJzKGMsIFxcdTAwMjZpbnZhbGlkX2F0dHJzKSwgLUVJTlZBTCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTY2MS1cXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC02NjMtXFx0aW52YWxpZF9hdHRycy5hZ2dyX2ludGVydmFsID0gNDk5OTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6NjY0OlxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9zZXRfYXR0cnMoYywgXFx1MDAyNmludmFsaWRfYXR0cnMpLCAtRUlOVkFMKTtcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNjY1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoyODowNC4yMDE2MTcxNjVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODU5MDYwMjQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBEQU1PTiBTeW1ib2wgU2NvcGUgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBzZWVpbmcgYSBoYW5kZnVsIG9mIGtleSBzeW1ib2xzIGJlaW5nIHRvdWNoZWQgaGVyZSBpbiB0aGlzIERBTU9OIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIGdsb2JhbCBuYXR1cmUgb2YgYGRhbW9uX3NldF9hdHRyc2AgYW5kIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBqdW1wcyBvdXQgaW1tZWRpYXRlbHkuIFRoZSBgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVyc2AgYW5kIGBkYW1vbl9scnVfc29ydF90dXJuYCBmdW5jdGlvbnMgYXJlIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJ1dCBub3QgdGhlIHByaW1hcnkgZm9jdXMgaGVyZS4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGFjY291bnQgZm9yIHRoZWlyIHN0YXRpYyBuYXR1cmUgZHVyaW5nIGludmVzdGlnYXRpb24uXG5cblRoZW4sIHRoZXJlJ3MgYGRhbW9uX2hvdF9zY29yZWAsIGFsc28gZ2xvYmFsLCBhbmQgbG9jYXRlZCBpbiBgbW0vZGFtb24vb3BzLWNvbW1vbi5jYC5cblxuU28sIGNvbnNpZGVyaW5nIHRoZXNlIGluaXRpYWwgZmluZGluZ3MsIHRoZSBwcmltYXJ5IGZvY3VzIGFyZWFzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24gYXJlOlxuXG4qICAgYGRhbW9uX3NldF9hdHRyc2BcbiogICBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWBcbiogICBgZGFtb25faG90X3Njb3JlYFxuXG5JJ2xsIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMgYXMgcGFydCBvZiB0aGlzIHByb2Nlc3MuIFRoZSBwcmVzZW5jZSBvZiBzdGF0aWMgaW5saW5lIG9yIHN0YXRpYyBmdW5jdGlvbnMgaXMgZXhwZWN0ZWQgYmVoYXZpb3IsIGJ1dCB0aGUgc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQsIHdpbGwgbmVlZCBmdXJ0aGVyIGFuYWx5c2lzLlxuXG5Mb29raW5nIHRocm91Z2ggdGhlIG90aGVyIHN5bWJvbHMsIGl0J3MgY2xlYXIgd2UgaGF2ZSBtYW55IHN0YXRpYyBmdW5jdGlvbnM6XG5cbiogICBgZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncmAgKHN0YXRpYyBpbmxpbmUgaW4gYGluY2x1ZGUvbGludXgvZGFtb24uaGApXG4qICAgYGRhbW9uX3NhbXBsZV9icF90b19jb3VudGAgKHN0YXRpYyBpbiBgbW0vZGFtb24vY29yZS5jYClcbiogICBgZGFtb25fc2FtcGxlX2NvdW50X3RvX2JwYCAoc3RhdGljIGluIGBtbS9kYW1vbi9jb3JlLmNgKVxuKiAgIGBkYW1vbl9ucl9zYW1wbGVzX2Zvcl9uZXdfYXR0cnNgIChzdGF0aWMgaW4gYG1tL2RhbW9uL2NvcmUuY2ApXG4qICAgYGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzYCAoc3RhdGljIGluIGBtbS9kYW1vbi9jb3JlLmNgKVxuKiAgIGBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHRgIChzdGF0aWMgaW4gYG1tL2RhbW9uL2NvcmUuY2ApXG4qICAgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHNgIChzdGF0aWMgaW4gYG1tL2RhbW9uL2NvcmUuY2ApXG5cbk5vdywgaGVyZSdzIGEgY3J1Y2lhbCBwb2ludC4gSXQncyBiZWNvbWluZyBldmlkZW50IHRoYXQgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHNgIGlzIGNhbGxlZCBieSBgZGFtb25fc2V0X2F0dHJzYC4gVGhpcyBjZW1lbnRzIGBkYW1vbl9zZXRfYXR0cnNgIGFzIGEgdmVyeSBzb2xpZCBmb2N1cyBzeW1ib2wuXG5cbkFsc28sIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBpcyBjYWxsZWQgYnkgYGRhbW9zX3N5c2ZzX3Byb2Jlc19hZGRfZGlyc2AuIEFuZCBgZGFtb25faG90X3Njb3JlYCBpcyBjYWxsZWQgYnkgYGRhbW9uX3BhX3NjaGVtZV9zY29yZWAgYW5kIGBkYW1vbl92YV9zY2hlbWVfc2NvcmVgLiBUaGlzIHJlbGF0aW9uc2hpcCBmdXJ0aGVyIGRlZmluZXMgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucy5cblxuVG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgSSBuZWVkIHRvIHJldmlzaXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBJIHNlZTpcblxuKiAgIGBEQU1PTmBcbiogICBgREFNT05fVkFERFJgXG4qICAgYERBTU9OX1BBRERSYFxuKiAgIGBEQU1PTl9TWVNGU2BcbiogICBgREFNT05fTFJVX1NPUlRgXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBwcmVzZW5jZSBhbmQgbWVhbmluZyBvZiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMuIEkgbm90ZSB0aGF0IGBEQU1PTl9SRUNMQUlNYCBoYXNuJ3QgYmVlbiBtb2RpZmllZCwgYnV0IHRoZSBwYXRjaCBtb2RpZmllcyBgbW0vZGFtb24vbHJ1X3NvcnQuY2AuIExldCdzIGNoZWNrIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhZ2Fpbi5cblxuT3ZlcmFsbCwgaXQgc2VlbXMgdGhhdCB0aGVyZSdzIGEgc3Ryb25nIGZvY3VzIG9uIGNvcmUgREFNT04gZnVuY3Rpb25hbGl0eSwgaW5jbHVkaW5nIGF0dHJpYnV0ZSBzZXR0aW5nLCBwcm9iaW5nLCBob3Qtc2NvcmUgY2FsY3VsYXRpb24sIGFuZCBMUlUgc29ydGluZywgYXMgaXQgcmVsYXRlcyB0byB0aGUgcHJvYmUgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6Mjg6MTIuNzkyMjIxMjkyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDIzNDI5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OX0xSVV9TT1JUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz04OD1jb25maWcgREFNT05fUkVDTEFJTVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxMjoyODoxMi44OTQ1NjgxNDJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTI5MDAwMzE3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIGBEQU1PTl9MUlVfU09SVGAgY29uZmlnIGlzIGluZGVlZCByZWxldmFudCBoZXJlLiBMZXQncyBicmVhayBkb3duIHRoZSBjb25maWd1cmF0aW9uIHNpZGUgb2YgdGhpbmdzLiBJJ20gc2VlaW5nIHRoZSBjb3JlIGBEQU1PTmAgb3B0aW9uczogYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBEQU1PTl9MUlVfU09SVGAgYXJlIGFsbCBjcnVjaWFsIGZvciBlbmFibGluZyBhbmQgY29udHJvbGxpbmcgREFNT04ncyBiZWhhdmlvci5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIHRoZSBpbXBvcnRhbnQgc3ltYm9scyB0aGlzIHBhdGNoIGFmZmVjdHMuIEkgbmVlZCB0byBrZWVwIGEgY2xvc2UgZXllIG9uIGBkYW1vbl9zZXRfYXR0cnNgLCBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAsIGFuZCBgZGFtb25faG90X3Njb3JlYC4gSSBhbHJlYWR5IGtub3cgdGhhdCBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgZ2V0cyBjYWxsZWQgZnJvbSBgZGFtb3Nfc3lzZnNfcHJvYmVzX2FkZF9kaXJzYC4gQW5kIHllcywgdGhhdCdzIHJlYWNoYWJsZSB2aWEgc3lzZnMuIEkgY2FuIGFsc28gcmVhY2ggYGRhbW9uX3NldF9hdHRyc2AgdmlhIHN5c2ZzIGFuZCBwb3RlbnRpYWxseSBvdGhlciBtb2R1bGVzLiBBbHNvLCBgZGFtb25faG90X3Njb3JlYCBnZXRzIGNhbGxlZCB2aWEgdGhlIGBkYW1vbl9wYV9zY2hlbWVfc2NvcmVgIGFuZCBgZGFtb25fdmFfc2NoZW1lX3Njb3JlYCBmdW5jdGlvbnMuXG5cbkkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdHNgIGlzIHJlYWNoYWJsZSBmcm9tIGFueXdoZXJlIGVsc2UuIEdvb2QsIGl0IGlzIGNhbGxlZCBmcm9tIGBkYW1vbl9zZXRfYXR0cnNgLCB0aGF0IG1ha2VzIHNlbnNlLlxuXG5Ob3csIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IGFyZSByZWxldmFudD8gQWhhLCBgREFNT05fS1VOSVRfVEVTVGAgaXMgbW9kaWZpZWQgaW4gdGhlIHBhdGNoJ3MgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAuIEhvd2V2ZXIsIEkgZG9uJ3QgcmVhbGx5IG5lZWQgdG8gZW5hYmxlIGt1bml0IHRlc3RzIHRvIGZ1enogdGhlIGNvcmUgbG9naWMgaGVyZSwgYWx0aG91Z2ggaXQgd291bGRuJ3QgaHVydC4gV2UgdXN1YWxseSBkb24ndCBsaXN0IGt1bml0IGNvbmZpZ3MgdW5sZXNzIHRoZSBwYXRjaCBpcyBvbmx5IGFib3V0IGt1bml0LlxuXG5Ob3csIGZvciB0aGUgcmVhc29uaW5nOiB0aGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IERBTU9OIGhhbmRsZXMgc2FtcGxlIGNvdW50aW5nIGFuZCBhZ2dyZWdhdGlvbi4gVGhlIGludHJvZHVjdGlvbiBvZiBgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHNgIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgZGFtb25fcHJvYmVfaGl0c19tdnN1bWAgdG8gYWNjb21tb2RhdGUgc3BlY2lmaWMgd2luZG93IGNvbmRpdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhpcyBwYXRjaC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbXBhY3RpbmcgdGhlIHZlcnkgY29yZSBvZiBEQU1PTidzIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZywgaW5jbHVkaW5nIGhvdyByZXN1bHRzIGFyZSBjYWxjdWxhdGVkIGFuZCB1cGRhdGVkLiBUaGlzIGlzIHZlcnkgcmVsZXZhbnQgdG8gZnV6emluZy5cblxuVGhlcmVmb3JlOlxuXG5Xb3J0aEZ1enppbmc6IFRydWVcbkZvY3VzU3ltYm9sczogYGRhbW9uX3NldF9hdHRyc2AsIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCwgYGRhbW9uX2hvdF9zY29yZWBcbkVuYWJsZUNvbmZpZ3M6IGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9MUlVfU09SVGBcblJlYXNvbmluZzogVGhlIHBhdGNoIGRpcmVjdGx5IGFsdGVycyBjb3JlIERBTU9OIGxvZ2ljIHJlbGF0ZWQgdG8gdGhlIGNhbGN1bGF0aW9uIGFuZCB1cGRhdGluZyBvZiBtZW1vcnkgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cywgaW50cm9kdWNpbmcgYSBuZXcgY29uZGl0aW9uIGluIGBkYW1vbl9wcm9iZV9oaXRzX212c3VtYCBhbmQgbmV3IHByb2JlIGhpdCB1cGRhdGluZyBsb2dpYyBpbiBgZGFtb25fdXBkYXRlX3Byb2JlX2hpdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc1MSwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTI6Mjg6MjIuMTg0NTcyOTkxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0ODM4MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fTFJVX1NPUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zZXRfYXR0cnNcIixcbiAgICBcImRhbW9uX3Byb2JlX2hpdHNfbXZzdW1cIixcbiAgICBcImRhbW9uX2hvdF9zY29yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgREFNT04gbG9naWMgZm9yIGNhbGN1bGF0aW5nIGFuZCB1cGRhdGluZyBtZW1vcnkgYWNjZXNzIG1vbml0b3JpbmcgcmVzdWx0cywgaW5jbHVkaW5nIGEgbmV3IGNvbmRpdGlvbiBpbiBkYW1vbl9wcm9iZV9oaXRzX212c3VtIGFuZCBuZXcgcHJvYmUgaGl0IHVwZGF0aW5nIGxvZ2ljIGluIGRhbW9uX3VwZGF0ZV9wcm9iZV9oaXRzLiBJdCBhbHNvIHJlbmFtZXMgc2V2ZXJhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzYW1wbGUgY291bnRpbmcgYW5kIGFnZ3JlZ2F0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIERBTU9OIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3NldF9hdHRyc1wiLFxuICAgIFwiZGFtb25fcHJvYmVfaGl0c19tdnN1bVwiLFxuICAgIFwiZGFtb25faG90X3Njb3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBEQU1PTiBsb2dpYyBmb3IgY2FsY3VsYXRpbmcgYW5kIHVwZGF0aW5nIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzLCBpbmNsdWRpbmcgYSBuZXcgY29uZGl0aW9uIGluIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0gYW5kIG5ldyBwcm9iZSBoaXQgdXBkYXRpbmcgbG9naWMgaW4gZGFtb25fdXBkYXRlX3Byb2JlX2hpdHMuIEl0IGFsc28gcmVuYW1lcyBzZXZlcmFsIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHNhbXBsZSBjb3VudGluZyBhbmQgYWdncmVnYXRpb24uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgREFNT04gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2sh4b[1] Phase: Succeeded StartedAt: 2026-07-07 12:28:34 +0000 UTC FinishedAt: 2026-07-07 12:28:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-07 12:28:34 +0000 UTC FinishedAt: 2026-07-07 12:28:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2] Phase: Succeeded StartedAt: 2026-07-07 12:28:34 +0000 UTC FinishedAt: 2026-07-07 17:00:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 12:28:34 +0000 UTC FinishedAt: 2026-07-07 17:00:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 12:28:34 +0000 UTC FinishedAt: 2026-07-07 12:28:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 12:28:34 +0000 UTC FinishedAt: 2026-07-07 12:28:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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-workflow2sh4b/series-workflow2sh4b-convert-artifact-2035331867/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 12:28:44 +0000 UTC FinishedAt: 2026-07-07 13:01:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 12:28:44 +0000 UTC FinishedAt: 2026-07-07 13:01:30 +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:*cb7e1f52-472a-4145-a72b-e3be8e57cadb,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-workflow2sh4b/series-workflow2sh4b-convert-artifact-2035331867/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": "fba0ec17-40a5-42a8-a8ae-b41d6674f3b9", "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-workflow2sh4b/series-workflow2sh4b-build-action-2324053849/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 12:28:44 +0000 UTC FinishedAt: 2026-07-07 13:01:13 +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:*cb7e1f52-472a-4145-a72b-e3be8e57cadb,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-workflow2sh4b/series-workflow2sh4b-convert-artifact-2035331867/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": "fba0ec17-40a5-42a8-a8ae-b41d6674f3b9", "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-workflow2sh4b/series-workflow2sh4b-build-action-2324053849/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:01:30 +0000 UTC FinishedAt: 2026-07-07 13:01:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:01:31 +0000 UTC FinishedAt: 2026-07-07 13:01:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:01:31 +0000 UTC FinishedAt: 2026-07-07 13:01:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:01:31 +0000 UTC FinishedAt: 2026-07-07 13:01:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-workflow2sh4b/series-workflow2sh4b-convert-artifact-2193713010/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:01:48 +0000 UTC FinishedAt: 2026-07-07 13:03:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:01:48 +0000 UTC FinishedAt: 2026-07-07 13:03:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fba0ec17-40a5-42a8-a8ae-b41d6674f3b9,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-workflow2sh4b/series-workflow2sh4b-build-action-2324053849/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-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:03:49 +0000 UTC FinishedAt: 2026-07-07 13:03:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:03:49 +0000 UTC FinishedAt: 2026-07-07 13:03:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:03:49 +0000 UTC FinishedAt: 2026-07-07 13:55:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:03:49 +0000 UTC FinishedAt: 2026-07-07 13:55:06 +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:*cb7e1f52-472a-4145-a72b-e3be8e57cadb,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-workflow2sh4b/series-workflow2sh4b-convert-artifact-2193713010/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": "580d2b1f-0016-431f-8452-4e6adaa64044", "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-workflow2sh4b/series-workflow2sh4b-build-action-2859427590/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:03:49 +0000 UTC FinishedAt: 2026-07-07 13:54:56 +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:*cb7e1f52-472a-4145-a72b-e3be8e57cadb,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-workflow2sh4b/series-workflow2sh4b-convert-artifact-2193713010/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": "580d2b1f-0016-431f-8452-4e6adaa64044", "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-workflow2sh4b/series-workflow2sh4b-build-action-2859427590/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:55:06 +0000 UTC FinishedAt: 2026-07-07 13:55:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:55:06 +0000 UTC FinishedAt: 2026-07-07 13:55:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:55:06 +0000 UTC FinishedAt: 2026-07-07 13:57:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:55:06 +0000 UTC FinishedAt: 2026-07-07 13:57:07 +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:*580d2b1f-0016-431f-8452-4e6adaa64044,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-workflow2sh4b/series-workflow2sh4b-build-action-2859427590/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-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:57:17 +0000 UTC FinishedAt: 2026-07-07 17:00:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:57:17 +0000 UTC FinishedAt: 2026-07-07 17:00:33 +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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"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:*fba0ec17-40a5-42a8-a8ae-b41d6674f3b9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*580d2b1f-0016-431f-8452-4e6adaa64044,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-workflow2sh4b/series-workflow2sh4b-build-action-2324053849/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-workflow2sh4b/series-workflow2sh4b-build-action-2859427590/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:57:17 +0000 UTC FinishedAt: 2026-07-07 13:57:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:57:17 +0000 UTC FinishedAt: 2026-07-07 13:57:50 +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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"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-workflow2sh4b/series-workflow2sh4b-convert-artifact-393044679/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:57:17 +0000 UTC FinishedAt: 2026-07-07 13:57:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:57:17 +0000 UTC FinishedAt: 2026-07-07 13:57:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:57:17 +0000 UTC FinishedAt: 2026-07-07 13:57:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:57:58 +0000 UTC FinishedAt: 2026-07-07 17:00:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2sh4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"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":["damon_set_attrs","damon_probe_hits_mvsum","damon_hot_score"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"db6ed2a3d31068ca5577466591b2521dee0508ca","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_LRU_SORT"],"series_id":"ec3fff8b-e6b6-45a1-88e7-7686cc863ac9","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-07 13:57:58 +0000 UTC FinishedAt: 2026-07-07 17:00:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fba0ec17-40a5-42a8-a8ae-b41d6674f3b9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*580d2b1f-0016-431f-8452-4e6adaa64044,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-workflow2sh4b/series-workflow2sh4b-build-action-2324053849/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-workflow2sh4b/series-workflow2sh4b-build-action-2859427590/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-workflow2sh4b/series-workflow2sh4b-convert-artifact-393044679/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,}