Name: series-workflowckbr4 Phase: Succeeded StartedAt: 2026-09-05 22:50:45 +0000 UTC FinishedAt: 2026-09-06 03:21:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[0] Phase: Succeeded StartedAt: 2026-09-05 22:50:45 +0000 UTC FinishedAt: 2026-09-05 23:39:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 22:50:45 +0000 UTC FinishedAt: 2026-09-05 23:39:26 +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": "f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e", "config_name": "upstream-apparmor-kasan.config", "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": "f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e", "config_name": "upstream-apparmor-kasan.config", "series_id": "b394e1ba-75a8-4da7-b722-4cb7ec7ccb27" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_huge_zero_folio", "__do_huge_pmd_anonymous_page", "allocate_slab", "__filemap_get_folio_mpol" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgICAmIzM0O19fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UmIzM0OywKICAgICYjMzQ7YWxsb2NhdGVfc2xhYiYjMzQ7LAogICAgJiMzNDtfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBhbGxvY2F0b3Igc2xvd3BhdGggKF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgpIHRvIGNsZWFyIF9fR0ZQX0RJUkVDVF9SRUNMQUlNIGZvciBjb3N0bHktb3JkZXIgYWxsb2NhdGlvbnMgdGhhdCBoYXZlIF9fR0ZQX05PUkVUUlkgc2V0IChhbmQgbm90IF9fR0ZQX1RISVNOT0RFKSwgYXZvaWRpbmcgc3RhbGxzIGluIHJlY2xhaW0gYW5kIGNvbXBhY3Rpb24uXG5cblRoaXMgY2hhbmdlIHN0cmljdGx5IG1vZGlmaWVzIGFsbG9jYXRvciByZWNsYWltIGFuZCBjb21wYWN0aW9uIGJlaGF2aW9yLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiBvciB6ZXJvaW5nIChlLmcuLCBfX0dGUF9aRVJPKSwgYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgbGVhayBpbmZvIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc2xvd3BhdGggbG9naWMgaW4gbW0vcGFnZV9hbGxvYy5jIChfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKSB0byBjbGVhciBfX0dGUF9ESVJFQ1RfUkVDTEFJTSBmb3IgY29zdGx5LW9yZGVyIGFsbG9jYXRpb25zIHJlcXVlc3RpbmcgX19HRlBfTk9SRVRSWSAodW5sZXNzIF9fR0ZQX1RISVNOT0RFIGlzIHNwZWNpZmllZCkuIFRoaXMgZGlyZWN0bHkgYWx0ZXJzIGRpcmVjdCByZWNsYWltIGFuZCBjb21wYWN0aW9uIGJlaGF2aW9yIGZvciBoaWdoLW9yZGVyIGFsbG9jYXRpb25zIHN1Y2ggYXMgVEhQIGFuZCBsYXJnZSBmb2xpbyBhbGxvY2F0aW9ucy4gSXQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgY29tcGFjdGlvbiBhbmQgZmFsbGJhY2sgaW52YXJpYW50cyBob2xkIHdpdGhvdXQgY2F1c2luZyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGFsbG9jYXRpb24gZmFpbHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNjEyOGEyOTRhMjRlODRjMDI2NDc1MjA2YjVhMTUyMmZkOTNiZDE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAyMzozODoxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjU0MmMyZWMzMTA2MTMgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTQ3ODQsMTAgJiM0Mzs0Nzg0LDEwIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKlxuIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0XHRcdFx0XHRzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMpXG4ge1xuLVx0Ym9vbCBjYW5fZGlyZWN0X3JlY2xhaW0gPSBnZnBfbWFzayBcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU07XG4tXHRib29sIGNhbl9jb21wYWN0ID0gY2FuX2RpcmVjdF9yZWNsYWltIFx1MDAyNlx1MDAyNiBnZnBfY29tcGFjdGlvbl9hbGxvd2VkKGdmcF9tYXNrKTtcbi1cdGJvb2wgbm9mYWlsID0gZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PRkFJTDtcbiBcdGNvbnN0IGJvb2wgY29zdGx5X29yZGVyID0gb3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSO1xuJiM0MztcdGJvb2wgY2FuX2RpcmVjdF9yZWNsYWltO1xuJiM0MztcdGJvb2wgY2FuX2NvbXBhY3Q7XG4mIzQzO1x0Ym9vbCBub2ZhaWw7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4gXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3M7XG4gXHR1bnNpZ25lZCBsb25nIGRpZF9zb21lX3Byb2dyZXNzO1xuQEAgLTQ4MDIsNiAmIzQzOzQ4MDIsMTggQEAgX19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0Ym9vbCBjYW5fcmV0cnlfcmVzZXJ2ZXMgPSB0cnVlO1xuIFx0dW5zaWduZWQgbG9uZyBhbGxvY19zdGFydF90aW1lID0gamlmZmllcztcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENvc3RseSBfX0dGUF9OT1JFVFJZIGNhbGxlcnMgaGF2ZSBhIGNoZWFwIGZhbGxiYWNrLCBzbyBkb24mIzM5O3Qgc3RhbGxcbiYjNDM7XHQgKiB0aGVtIGluIHJlY2xhaW0gb3IgY29tcGFjdGlvbi4gX19HRlBfVEhJU05PREUgY2FsbGVycyBhcmUgZXhlbXB0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjb3N0bHlfb3JkZXIgXHUwMDI2XHUwMDI2IChnZnBfbWFzayBcdTAwMjYgX19HRlBfTk9SRVRSWSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICEoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSlcbiYjNDM7XHRcdGdmcF9tYXNrIFx1MDAyNj0gfl9fR0ZQX0RJUkVDVF9SRUNMQUlNO1xuJiM0MztcbiYjNDM7XHRjYW5fZGlyZWN0X3JlY2xhaW0gPSBnZnBfbWFzayBcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU07XG4mIzQzO1x0Y2FuX2NvbXBhY3QgPSBjYW5fZGlyZWN0X3JlY2xhaW0gXHUwMDI2XHUwMDI2IGdmcF9jb21wYWN0aW9uX2FsbG93ZWQoZ2ZwX21hc2spO1xuJiM0MztcdG5vZmFpbCA9IGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9OT0ZBSUw7XG4mIzQzO1xuIFx0aWYgKHVubGlrZWx5KG5vZmFpbCkpIHtcbiBcdFx0LypcbiBcdFx0ICogQWxzbyB3ZSBkb24mIzM5O3Qgc3VwcG9ydCBfX0dGUF9OT0ZBSUwgd2l0aG91dCBfX0dGUF9ESVJFQ1RfUkVDTEFJTSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDtfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlJiMzNDssCiAgICAmIzM0O2FsbG9jYXRlX3NsYWImIzM0OywKICAgICYjMzQ7X19maWxlbWFwX2dldF9mb2xpb19tcG9sJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc2xvd3BhdGggbG9naWMgaW4gbW0vcGFnZV9hbGxvYy5jIChfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKSB0byBjbGVhciBfX0dGUF9ESVJFQ1RfUkVDTEFJTSBmb3IgY29zdGx5LW9yZGVyIGFsbG9jYXRpb25zIHJlcXVlc3RpbmcgX19HRlBfTk9SRVRSWSAodW5sZXNzIF9fR0ZQX1RISVNOT0RFIGlzIHNwZWNpZmllZCkuIFRoaXMgZGlyZWN0bHkgYWx0ZXJzIGRpcmVjdCByZWNsYWltIGFuZCBjb21wYWN0aW9uIGJlaGF2aW9yIGZvciBoaWdoLW9yZGVyIGFsbG9jYXRpb25zIHN1Y2ggYXMgVEhQIGFuZCBsYXJnZSBmb2xpbyBhbGxvY2F0aW9ucy4gSXQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgY29tcGFjdGlvbiBhbmQgZmFsbGJhY2sgaW52YXJpYW50cyBob2xkIHdpdGhvdXQgY2F1c2luZyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGFsbG9jYXRpb24gZmFpbHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNjEyOGEyOTRhMjRlODRjMDI2NDc1MjA2YjVhMTUyMmZkOTNiZDE0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAyMzozODoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCAxMmZhYzkwODRjNDgzLi41NDJjMmVjMzEwNjEzIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC00Nzg0LDEwICYjNDM7NDc4NCwxMCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICoKIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKIAkJCQkJCXN0cnVjdCBhbGxvY19jb250ZXh0ICphYykKIHsKLQlib29sIGNhbl9kaXJlY3RfcmVjbGFpbSA9IGdmcF9tYXNrICZhbXA7IF9fR0ZQX0RJUkVDVF9SRUNMQUlNOwotCWJvb2wgY2FuX2NvbXBhY3QgPSBjYW5fZGlyZWN0X3JlY2xhaW0gJmFtcDsmYW1wOyBnZnBfY29tcGFjdGlvbl9hbGxvd2VkKGdmcF9tYXNrKTsKLQlib29sIG5vZmFpbCA9IGdmcF9tYXNrICZhbXA7IF9fR0ZQX05PRkFJTDsKIAljb25zdCBib29sIGNvc3RseV9vcmRlciA9IG9yZGVyICZndDsgUEFHRV9BTExPQ19DT1NUTFlfT1JERVI7CiYjNDM7CWJvb2wgY2FuX2RpcmVjdF9yZWNsYWltOwomIzQzOwlib29sIGNhbl9jb21wYWN0OwomIzQzOwlib29sIG5vZmFpbDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzOwogCXVuc2lnbmVkIGxvbmcgZGlkX3NvbWVfcHJvZ3Jlc3M7CkBAIC00ODAyLDYgJiM0Mzs0ODAyLDE4IEBAIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKIAlib29sIGNhbl9yZXRyeV9yZXNlcnZlcyA9IHRydWU7CiAJdW5zaWduZWQgbG9uZyBhbGxvY19zdGFydF90aW1lID0gamlmZmllczsKIAomIzQzOwkvKgomIzQzOwkgKiBDb3N0bHkgX19HRlBfTk9SRVRSWSBjYWxsZXJzIGhhdmUgYSBjaGVhcCBmYWxsYmFjaywgc28gZG9uJiMzOTt0IHN0YWxsCiYjNDM7CSAqIHRoZW0gaW4gcmVjbGFpbSBvciBjb21wYWN0aW9uLiBfX0dGUF9USElTTk9ERSBjYWxsZXJzIGFyZSBleGVtcHQuCiYjNDM7CSAqLwomIzQzOwlpZiAoY29zdGx5X29yZGVyICZhbXA7JmFtcDsgKGdmcF9tYXNrICZhbXA7IF9fR0ZQX05PUkVUUlkpICZhbXA7JmFtcDsKJiM0MzsJICAgICEoZ2ZwX21hc2sgJmFtcDsgX19HRlBfVEhJU05PREUpKQomIzQzOwkJZ2ZwX21hc2sgJmFtcDs9IH5fX0dGUF9ESVJFQ1RfUkVDTEFJTTsKJiM0MzsKJiM0MzsJY2FuX2RpcmVjdF9yZWNsYWltID0gZ2ZwX21hc2sgJmFtcDsgX19HRlBfRElSRUNUX1JFQ0xBSU07CiYjNDM7CWNhbl9jb21wYWN0ID0gY2FuX2RpcmVjdF9yZWNsYWltICZhbXA7JmFtcDsgZ2ZwX2NvbXBhY3Rpb25fYWxsb3dlZChnZnBfbWFzayk7CiYjNDM7CW5vZmFpbCA9IGdmcF9tYXNrICZhbXA7IF9fR0ZQX05PRkFJTDsKJiM0MzsKIAlpZiAodW5saWtlbHkobm9mYWlsKSkgewogCQkvKgogCQkgKiBBbHNvIHdlIGRvbiYjMzk7dCBzdXBwb3J0IF9fR0ZQX05PRkFJTCB3aXRob3V0IF9fR0ZQX0RJUkVDVF9SRUNMQUlNLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjI5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGFnZSBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRhcmdldHMgdGhlIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCBmdW5jdGlvbiB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIFRoaXMgaXMgYSBjb3JlIGFyZWEsIHNvIGxldCYjMzk7cyBwYXkgY2xvc2UgYXR0ZW50aW9uLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgc29tZSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1vZGlmaWVzIHRoZSBgZ2ZwX21hc2tgIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBgX19HRlBfTk9SRVRSWWAgYW5kIGBfX0dGUF9USElTTk9ERWAgZmxhZ3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByZXRyaWVzIGFuZCByZWNsYWltLiBUaGUgY29tbWVudCBnaXZlcyBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIHRoaXMuCgpJdCYjMzk7cyBldmlkZW50IHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBoZXJlLCBzcGVjaWZpY2FsbHkgZm9yIGNhbGxlcnMgdXNpbmcgYF9fR0ZQX05PUkVUUllgLCB3aGljaCBzdWdnZXN0cyB0aGF0IHdlIHdhbnQgdG8gYXZvaWQgcG90ZW50aWFsbHkgZXhwZW5zaXZlIHJlY2xhaW0gb3IgY29tcGFjdGlvbiBvcGVyYXRpb25zIGluIGNlcnRhaW4gY29udGV4dHMuIEkgdGhpbmsgdGhlIGNvc3RseSBvcmRlciBwYXJhbWV0ZXIgaXMgYWxzbyB2ZXJ5IGludGVyZXN0aW5nLCBhcyB0aGF0IHdpbGwgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBoZXJlLiBXZSBoYXZlIHRvIGNvbnNpZGVyIHdoYXQgY29uc3RpdHV0ZXMgYSAmIzM0O2Nvc3RseSBvcmRlci4mIzM0OwoKVGhlIGxvZ2ljIHRoZW4gc2V0cyBgY2FuX2RpcmVjdF9yZWNsYWltYCwgYGNhbl9jb21wYWN0YCwgYW5kIGBub2ZhaWxgIGJhc2VkIG9uIHRoZSBtb2RpZmllZCBgZ2ZwX21hc2tgLiBUaGlzIHNlZW1zIGZhaXJseSBzdHJhaWdodGZvcndhcmQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGF0dGVtcHRpbmcgdG8gZW5zdXJlIHRoYXQgZXhwZW5zaXZlIHJlY2xhaW0gb3BlcmF0aW9ucyBkb24mIzM5O3QgdW5uZWNlc3NhcmlseSBibG9jayBjYWxsZXJzIHdpdGggYF9fR0ZQX05PUkVUUllgIGlmIHRoZXkgYXJlIG5vdCBleHBsaWNpdGx5IGFza2luZyBmb3IgaXQgb24gdGhlIGN1cnJlbnQgbm9kZS4gVGhpcyBjb3VsZCBpbXByb3ZlIHJlc3BvbnNpdmVuZXNzIGluIGNyaXRpY2FsIHBhdGhzIHdoZXJlIHJldHJpZXMgYXJlIHVuZGVzaXJhYmxlLCBidXQgd2Ugd2lsbCBoYXZlIHRvIGRpZyBpbiB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKTm93LCBJIHRoaW5rIHRoZSBiZXN0IHdheSB0byBnZXQgYSBmdWxsIGdyYXNwIG9mIHRoaXMgcGF0Y2ggaXMgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSBhcm91bmQgbGluZSA0Nzg0LCB3aGljaCBpcyBhIGtleSBwb2ludCB3aGVyZSB0aGlzIG5ldyBsb2dpYyBpcyBpbmplY3RlZC4gSSB3aWxsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgYSBmdWxsIHZpZXcgb2YgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ3ODA6XHRcdHdhcm5fYWxsb2Nfc2hvd19tZW0oZ2ZwX21hc2ssIG5vZGVtYXNrKTtcbjQ3ODE6XHR9XG40NzgyOlx0XG40NzgzOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqXG40Nzg0Olx0X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuNDc4NTpcdFx0XHRcdFx0XHRcdHN0cnVjdCBhbGxvY19jb250ZXh0ICphYylcbjQ3ODY6XHR7XG40Nzg3Olx0XHRjb25zdCBib29sIGNvc3RseV9vcmRlciA9IG9yZGVyIFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUjtcbjQ3ODg6XHRcdGJvb2wgY2FuX2RpcmVjdF9yZWNsYWltO1xuNDc4OTpcdFx0Ym9vbCBjYW5fY29tcGFjdDtcbjQ3OTA6XHRcdGJvb2wgbm9mYWlsO1xuNDc5MTpcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuNDc5MjpcdFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzO1xuNDc5MzpcdFx0dW5zaWduZWQgbG9uZyBkaWRfc29tZV9wcm9ncmVzcztcbjQ3OTQ6XHRcdGVudW0gY29tcGFjdF9wcmlvcml0eSBjb21wYWN0X3ByaW9yaXR5O1xuNDc5NTpcdFx0ZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3Jlc3VsdDtcbjQ3OTY6XHRcdGludCBjb21wYWN0aW9uX3JldHJpZXM7XG40Nzk3Olx0XHRpbnQgbm9fcHJvZ3Jlc3NfbG9vcHM7XG40Nzk4Olx0XHR1bnNpZ25lZCBpbnQgY3B1c2V0X21lbXNfY29va2llO1xuNDc5OTpcdFx0dW5zaWduZWQgaW50IHpvbmVsaXN0X2l0ZXJfY29va2llO1xuNDgwMDpcdFx0aW50IHJlc2VydmVfZmxhZ3M7XG40ODAxOlx0XHRib29sIGNvbXBhY3RfZmlyc3QgPSBmYWxzZTtcbjQ4MDI6XHRcdGJvb2wgY2FuX3JldHJ5X3Jlc2VydmVzID0gdHJ1ZTtcbjQ4MDM6XHRcdHVuc2lnbmVkIGxvbmcgYWxsb2Nfc3RhcnRfdGltZSA9IGppZmZpZXM7XG40ODA0Olx0XG40ODA1Olx0XHQvKlxuNDgwNjpcdFx0ICogQ29zdGx5IF9fR0ZQX05PUkVUUlkgY2FsbGVycyBoYXZlIGEgY2hlYXAgZmFsbGJhY2ssIHNvIGRvbiYjMzk7dCBzdGFsbFxuNDgwNzpcdFx0ICogdGhlbSBpbiByZWNsYWltIG9yIGNvbXBhY3Rpb24uIF9fR0ZQX1RISVNOT0RFIGNhbGxlcnMgYXJlIGV4ZW1wdC5cbjQ4MDg6XHRcdCAqL1xuNDgwOTpcdFx0aWYgKGNvc3RseV9vcmRlciBcdTAwMjZcdTAwMjYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9OT1JFVFJZKSBcdTAwMjZcdTAwMjZcbjQ4MTA6XHRcdCAgICAhKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9USElTTk9ERSkpXG40ODExOlx0XHRcdGdmcF9tYXNrIFx1MDAyNj0gfl9fR0ZQX0RJUkVDVF9SRUNMQUlNO1xuNDgxMjpcdFxuNDgxMzpcdFx0Y2FuX2RpcmVjdF9yZWNsYWltID0gZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0RJUkVDVF9SRUNMQUlNO1xuNDgxNDpcdFx0Y2FuX2NvbXBhY3QgPSBjYW5fZGlyZWN0X3JlY2xhaW0gXHUwMDI2XHUwMDI2IGdmcF9jb21wYWN0aW9uX2FsbG93ZWQoZ2ZwX21hc2spO1xuNDgxNTpcdFx0bm9mYWlsID0gZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PRkFJTDtcbjQ4MTY6XHRcbjQ4MTc6XHRcdGlmICh1bmxpa2VseShub2ZhaWwpKSB7XG40ODE4Olx0XHRcdC8qXG40ODE5Olx0XHRcdCAqIEFsc28gd2UgZG9uJiMzOTt0IHN1cHBvcnQgX19HRlBfTk9GQUlMIHdpdGhvdXQgX19HRlBfRElSRUNUX1JFQ0xBSU0sXG40ODIwOlx0XHRcdCAqIG90aGVyd2lzZSwgd2UgbWF5IHJlc3VsdCBpbiBsb2NrdXAuXG40ODIxOlx0XHRcdCAqL1xuNDgyMjpcdFx0XHRXQVJOX09OX09OQ0UoIWNhbl9kaXJlY3RfcmVjbGFpbSk7XG40ODIzOlx0XHRcdC8qXG40ODI0Olx0XHRcdCAqIFBGX01FTUFMTE9DIHJlcXVlc3QgZnJvbSB0aGlzIGNvbnRleHQgaXMgcmF0aGVyIGJpemFycmVcbjQ4MjU6XHRcdFx0ICogYmVjYXVzZSB3ZSBjYW5ub3QgcmVjbGFpbSBhbnl0aGluZyBhbmQgb25seSBjYW4gbG9vcCB3YWl0aW5nXG40ODI2Olx0XHRcdCAqIGZvciBzb21lYm9keSB0byBkbyBhIHdvcmsgZm9yIHVzLlxuNDgyNzpcdFx0XHQgKi9cbjQ4Mjg6XHRcdFx0V0FSTl9PTl9PTkNFKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKTtcbjQ4Mjk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzA3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZSBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dvcnRoRnV6emluZz10cnVlLCYjMzQ7IHNpbmNlIHdlJiMzOTtyZSB0d2Vha2luZyBjb3JlIHBhZ2UgYWxsb2NhdG9yIGJlaGF2aW9yLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBpdCBoYW5kbGVzIGRpcmVjdCByZWNsYWltIGFuZCBjb21wYWN0aW9uLCBwYXJ0aWN1bGFybHkgZm9yIFRIUCBhbmQgaGlnaGVyLW9yZGVyIGFsbG9jYXRpb25zLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogZmlndXJpbmcgb3V0IGhvdyB0byBndWlkZSB0aGUgZnV6emVyIGVmZmVjdGl2ZWx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBydWxlcyBmb3IgYEZvY3VzU3ltYm9sc2AuIExldCYjMzk7cyBzZWUuLi4gdGhlIGNvcmUgcHJpbmNpcGxlIGlzIHRvIGF2b2lkIGRpbHV0aW5nIHRoZSBmdXp6aW5nIGVmZm9ydC4gSSBuZWVkIHRvIGF2b2lkIGxpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIGV2ZXJ5d2hlcmUuIFRoaXMgbWVhbnMgbm8gZ2VuZXJpYyBhbGxvY2F0b3JzLCBkZWFsbG9jYXRvcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEluc3RlYWQsIHRoZSBmb2N1cyBzaG91bGQgYmUgb24gdGFyZ2V0aW5nICpzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljKiBvciBBUEkgZW50cnkgcG9pbnRzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGNoYW5nZS4gQWxzbywgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRob3NlIHBlc2t5IHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGRlZmluZWQgaW4gaGVhZGVycywgYW5kIG1ha2Ugc3VyZSB0aGF0IEkgZG9uJiMzOTt0IHByb3ZpZGUgYSB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVyLgoKU28sIHRoZSBxdWVzdGlvbiBpcywgaXMgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIHViaXF1aXRvdXM/IE9yIGlzIGl0IHN0YXRpYyBpbmxpbmUvc3RhdGljPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdG8gc2VlIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIHdoZXJlIGl0IGlzIGRlZmluZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBpZiBpdCYjMzk7cyBhIHN1aXRhYmxlIHRhcmdldCBmb3IgYEZvY3VzU3ltYm9sc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgZnVuY3Rpb25zIHRvIGVuc3VyZSBJJiMzOTttIG5vdCBhY2NpZGVudGFsbHkgbGlzdGluZyBzb21ldGhpbmcgdGhhdCB0aGUgZnV6emVyIHdpbGwgY29uc2lkZXIgJiMzNDtmb2N1c2VkJiMzNDsgd2l0aG91dCBhY3R1YWxseSBwcm92aWRpbmcgYW55IHVzZWZ1bCBzaWduYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbGxvY19wYWdlc19zbG93cGF0aCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9NDc4Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcbm1tL3BhZ2VfYWxsb2MuYzo0Nzg0Ol9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy00Nzg1LVx0XHRcdFx0XHRcdHN0cnVjdCBhbGxvY19jb250ZXh0ICphYylcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTM5NT1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01NDYwLVxubW0vcGFnZV9hbGxvYy5jOjU0NjE6XHRwYWdlID0gX19hbGxvY19wYWdlc19zbG93cGF0aChhbGxvY19nZnAsIG9yZGVyLCBcdTAwMjZhYyk7XG5tbS9wYWdlX2FsbG9jLmMtNTQ2Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODAyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTWVtb3J5IEFsbG9jYXRpb24gQm90dGxlbmVja3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlLiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjdWxwcml0cyDigJMgdGhlIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHRyaWdnZXJpbmcgdGhpcyBzbG93ZG93bi4gSSBzaG91bGQgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBjYWxscyB0byBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCBhbmQgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgLCBvciBhbnl0aGluZyB0aGF0IGhlYXZpbHkgbGV2ZXJhZ2VzIGBfX0dGUF9OT1JFVFJZYCBhbGxvY2F0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpBbHRlcm5hdGl2ZWx5LCBJIGNvdWxkIGJyb2FkZW4gdGhlIHNlYXJjaCB0byBsb29rIGZvciAqYW55KiBwbGFjZSBpbiB0aGUga2VybmVsIG9yIHRoZSBtZW1vcnkgbWFuYWdlbWVudCAobW0pIGNvZGUgd2hlcmUgdGhvc2UgbW9yZSBzaWduaWZpY2FudCBvcmRlciBhbGxvY2F0aW9ucyBhcmUgdXNpbmcgYF9fR0ZQX05PUkVUUllgLiBUaG9zZSBjYW4gYmUgcmVhbCBwZXJmb3JtYW5jZSBraWxsZXJzLgoKQWN0dWFsbHksIGJlZm9yZSBJIGdldCB0b28gZGVlcCwgaXQgbWlnaHQgYmUgbW9yZSBlZmZpY2llbnQgdG8ganVzdCBncmVwIGRpcmVjdGx5IGZvciB0aGUga2V5IGZsYWdzIGFuZCBtYWNyb3MuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYF9fR0ZQX05PUkVUUllgLCBgUEFHRV9BTExPQ19DT1NUTFlfT1JERVJgLCBvciB0aG9zZSBgR0ZQX1RSQU5TSFVHRWAgLyBgR0ZQX1RSQU5TSFVHRV9MSUdIVGAgZmxhZ3Mg4oCTIHRoYXQgc2hvdWxkIGltbWVkaWF0ZWx5IGhpZ2hsaWdodCByZWxldmFudCBjb2RlIHBhdGhzLiBUaGF0IHNob3VsZCBjdXQgZG93biBvbiB0aGUgbm9pc2UgZnJvbSB0aGlzIHNlYXJjaCwgYW5kIGdldCBtZSBkaXJlY3RseSB0byB0aGUgaW1wb3J0YW50IHBhcnRzIG9mIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0dGUF9UUkFOU0hVR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oPTI2PWVudW0ge1xuLS1cbmluY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmgtMzYzLSAqXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oOjM2NDogKiAlR0ZQX1RSQU5TSFVHRSBhbmQgJUdGUF9UUkFOU0hVR0VfTElHSFQgYXJlIHVzZWQgZm9yIFRIUCBhbGxvY2F0aW9ucy4gVGhleVxuaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaC0zNjUtICogYXJlIGNvbXBvdW5kIGFsbG9jYXRpb25zIHRoYXQgd2lsbCBnZW5lcmFsbHkgZmFpbCBxdWlja2x5IGlmIG1lbW9yeSBpcyBub3Rcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oLTM4MC0jZGVmaW5lIEdGUF9ISUdIVVNFUl9NT1ZBQkxFXHQoR0ZQX0hJR0hVU0VSIHwgX19HRlBfTU9WQUJMRSB8IF9fR0ZQX1NLSVBfS0FTQU4pXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oOjM4MTojZGVmaW5lIEdGUF9UUkFOU0hVR0VfTElHSFRcdCgoR0ZQX0hJR0hVU0VSX01PVkFCTEUgfCBfX0dGUF9DT01QIHwgXFxcbmluY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmgtMzgyLVx0XHRcdCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOKSBcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oOjM4MzojZGVmaW5lIEdGUF9UUkFOU0hVR0VcdChHRlBfVFJBTlNIVUdFX0xJR0hUIHwgX19HRlBfRElSRUNUX1JFQ0xBSU0pXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oLTM4NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDkyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBvbiBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgZm9yIEZvY3VzU3ltYm9scyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uc2lkZXIgaXRzIGluY2x1c2lvbiBpbiBgRm9jdXNTeW1ib2xzYCwgYnV0IEkgaGF2ZSBhIHNlcmlvdXMgcmVzZXJ2YXRpb24sIGFuZCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlLgoKVGhlIGd1aWRlbGluZSBpcyBzY3JlYW1pbmcgYXQgbWU6IGF2b2lkIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocyEgSSBuZWVkIHRvIGJlICp2ZXJ5KiBjYXV0aW91cyBhYm91dCBsaXN0aW5nIGNvcmUgYWxsb2NhdG9ycyBsaWtlIHRoaXMgb25lLiBJZiBpdCYjMzk7cyB1c2VkICpldmVyeXdoZXJlKiwgdGhlbiBpbmNsdWRpbmcgaXQgd2lsbCBsZWFkIHRvIGEgZGVsdWdlIG9mIG5vaXNlIGluIG15IGZ1enppbmcgcmVzdWx0cywgb2JzY3VyaW5nIGFueSBhY3R1YWwgdGFyZ2V0ZWQgY2hhbmdlcy4gU28sIHRoZSBmaXJzdCBxdWVzdGlvbiBpczogaXMgdGhpcyAqcmVhbGx5KiBhIHViaXF1aXRvdXMgZnVuY3Rpb24/IEkgc3VzcGVjdCBpdCBtaWdodCBiZS4KCkhvd2V2ZXIsIEkmIzM5O20gbm90IHJlYWR5IHRvIGdpdmUgdXAganVzdCB5ZXQuIFdoYXQgaWYgdGhlcmUgYXJlICpzcGVjaWZpYyogY2FsbGVycyB0aGF0IGFyZSBpbnRlcmVzdGluZz8gTXkgbmV4dCB0cmFpbiBvZiB0aG91Z2h0IGlzIHRvIGxvb2sgZm9yIHRoZSAqbGVzcyogY29tbW9uIHVzZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBmb3IgcGxhY2VzIHdoZXJlIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCBpcyBjYWxsZWQgd2l0aCBjb3N0bHkgbWVtb3J5IG9yZGVyIGFsbG9jYXRpb25zLCBvciB3aXRoIGBfX0dGUF9OT1JFVFJZYC4gVGhlIGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSBwb3RlbnRpYWwgJiMzNDtzcGVjaWFsIGNhc2VzJiMzNDsgd2hlcmUgdGhlIGZ1bmN0aW9uIG1pZ2h0IGJlIGludm9sdmVkIGluIGludGVyZXN0aW5nLCBsZXNzLWNvbW1vbiBiZWhhdmlvci4gU28sIGxldCYjMzk7cyB0cnkgdG8gZm9jdXMgb3VyIGF0dGVudGlvbiBvbiBmdW5jdGlvbnMgd2hlcmUgbGFyZ2UgbWVtb3J5IG9yZGVycyBhcmUgcmVxdWVzdGVkIG9yIHdoZXJlIGEgbm9uLXJldHJ5YWJsZSBhbGxvY2F0aW9uIGlzIGhhcHBlbmluZyB3aXRoIHRoaXMgc2xvd3BhdGggZnVuY3Rpb24uCgpUaGVyZWZvcmUsIGxldCYjMzk7cyBzZWFyY2ggZm9yIGNhbGxzIHRvIGBfX0dGUF9OT1JFVFJZYCB3aXRoIGFuIG9yZGVyIGxhcmdlciB0aGFuIGBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUmAgb3IganVzdCBzZWFyY2ggZm9yIGBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUmAgaW4gbW0vIGZpbGVzIHRvIHNlZSB3aGljaCBjYWxsZXJzIG1pZ2h0IGJlIG9mIGludGVyZXN0LiBUaGlzIHdpbGwgaGVscCBtZSBuYXJyb3cgZG93biB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgZ2VuZXJhbGx5IHViaXF1aXRpb3VzIG9yIGlmIHdlIGNhbiBtYWtlIGEgY2FzZSBmb3IgaXQgd2l0aGluIHRoZSBGb2N1c1N5bWJvbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BBR0VfQUxMT0NfQ09TVExZX09SREVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYz0yNzc9X19yZXNldF9pc29sYXRpb25fcGZuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBjaGVja19zb3VyY2UsXG4tLVxubW0vY29tcGFjdGlvbi5jLTMzOC1cbm1tL2NvbXBhY3Rpb24uYzozMzk6XHRcdHBhZ2UgJiM0Mzs9ICgxIFx1MDAzY1x1MDAzYyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUik7XG5tbS9jb21wYWN0aW9uLmMtMzQwLVx0fSB3aGlsZSAocGFnZSBcdTAwM2M9IGVuZF9wYWdlKTtcbi0tXG5tbS9jb21wYWN0aW9uLmM9MTk2OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yMDAyLVx0ICovXG5tbS9jb21wYWN0aW9uLmM6MjAwMzpcdGlmIChjYy1cdTAwM2VvcmRlciBcdTAwM2M9IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxubW0vY29tcGFjdGlvbi5jLTIwMDQtXHRcdHJldHVybiBwZm47XG4tLVxubW0vY29tcGFjdGlvbi5jLTIwMjYtXHRmb3IgKG9yZGVyID0gY2MtXHUwMDNlb3JkZXIgLSAxO1xubW0vY29tcGFjdGlvbi5jOjIwMjc6XHQgICAgIG9yZGVyIFx1MDAzZT0gUEFHRV9BTExPQ19DT1NUTFlfT1JERVIgXHUwMDI2XHUwMDI2ICFmb3VuZF9ibG9jayBcdTAwMjZcdTAwMjYgbnJfc2Nhbm5lZCBcdTAwM2MgbGltaXQ7XG5tbS9jb21wYWN0aW9uLmMtMjAyOC1cdCAgICAgb3JkZXItLSkge1xuLS1cbm1tL2NvbXBhY3Rpb24uYz0yNDA0PXN0YXRpYyBib29sIF9fY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yNDI0LVx0d2F0ZXJtYXJrICYjNDM7PSBjb21wYWN0X2dhcChvcmRlcik7XG5tbS9jb21wYWN0aW9uLmM6MjQyNTpcdGlmIChvcmRlciBcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpXG5tbS9jb21wYWN0aW9uLmMtMjQyNi1cdFx0d2F0ZXJtYXJrICYjNDM7PSBsb3dfd21hcmtfcGFnZXMoem9uZSkgLSBtaW5fd21hcmtfcGFnZXMoem9uZSk7XG4tLVxubW0vY29tcGFjdGlvbi5jPTI0MzQ9Ym9vbCBjb21wYWN0aW9uX3N1aXRhYmxlKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsIHVuc2lnbmVkIGxvbmcgd2F0ZXJtYXJrLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yNDU5LVx0XHRjb21wYWN0X3Jlc3VsdCA9IENPTVBBQ1RfQ09OVElOVUU7XG5tbS9jb21wYWN0aW9uLmM6MjQ2MDpcdFx0aWYgKG9yZGVyIFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikge1xubW0vY29tcGFjdGlvbi5jLTI0NjEtXHRcdFx0aW50IGZyYWdpbmRleCA9IGZyYWdtZW50YXRpb25faW5kZXgoem9uZSwgb3JkZXIpO1xuLS1cbm1tL2NvbXBhY3Rpb24uYz0yNTIxPWNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vY29tcGFjdGlvbi5jLTI1NDYtXHQgKi9cbm1tL2NvbXBhY3Rpb24uYzoyNTQ3Olx0aWYgKG9yZGVyIFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUiBcdTAwMjZcdTAwMjYgYXN5bmMgXHUwMDI2XHUwMDI2XG5tbS9jb21wYWN0aW9uLmMtMjU0OC1cdCAgICAhKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19DTUEpKSB7XG4tLVxubW0va2FzYW4vaHdfdGFncy5jPTczPXVuc2lnbmVkIGxvbmcga2FzYW5fcGFnZV9hbGxvY19zYW1wbGUgPSBQQUdFX0FMTE9DX1NBTVBMRV9ERUZBVUxUO1xuLS1cbm1tL2thc2FuL2h3X3RhZ3MuYy03Ny0gKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBjaG9zZW4gdG8gbWF0Y2ggYm90aFxubW0va2FzYW4vaHdfdGFncy5jOjc4OiAqIFBBR0VfQUxMT0NfQ09TVExZX09SREVSIGFuZCBTS0JfRlJBR19QQUdFX09SREVSLlxubW0va2FzYW4vaHdfdGFncy5jLTc5LSAqL1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xOTYzPXN0YXRpYyBib29sIG1lbV9jZ3JvdXBfb29tKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgbWFzaywgaW50IG9yZGVyKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xOTY2LVxubW0vbWVtY29udHJvbC5jOjE5Njc6XHRpZiAob3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxubW0vbWVtY29udHJvbC5jLTE5NjgtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MjY0NT1zdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjc0MS1cdCAqL1xubW0vbWVtY29udHJvbC5jOjI3NDI6XHRpZiAobnJfcmVjbGFpbWVkIFx1MDAyNlx1MDAyNiBucl9wYWdlcyBcdTAwM2M9ICgxIFx1MDAzY1x1MDAzYyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikpXG5tbS9tZW1jb250cm9sLmMtMjc0My1cdFx0Z290byByZXRyeTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NjU1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9yZGVyX3RvX3BpbmRleChpbnQgbWlncmF0ZXR5cGUsIGludCBvcmRlcilcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNjU5LVxubW0vcGFnZV9hbGxvYy5jOjY2MDpcdFx0aWYgKG9yZGVyIFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUilcbm1tL3BhZ2VfYWxsb2MuYy02NjEtXHRcdFx0cmV0dXJuIE5SX0xPV09SREVSX1BDUF9MSVNUUyAmIzQzOyBtb3ZhYmxlO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz02Nzk9c3RhdGljIGlubGluZSBib29sIHBjcF9hbGxvd2VkX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcilcbm1tL3BhZ2VfYWxsb2MuYy02ODAte1xubW0vcGFnZV9hbGxvYy5jOjY4MTpcdGlmIChvcmRlciBcdTAwM2M9IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxubW0vcGFnZV9hbGxvYy5jLTY4Mi1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTI4NDQ9c3RhdGljIGJvb2wgZnJlZV9mcm96ZW5fcGFnZV9jb21taXQoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTI4NzItXHQgKi9cbm1tL3BhZ2VfYWxsb2MuYzoyODczOlx0aWYgKG9yZGVyIFx1MDAyNlx1MDAyNiBvcmRlciBcdTAwM2M9IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSB7XG5tbS9wYWdlX2FsbG9jLmMtMjg3NC1cdFx0ZnJlZV9oaWdoID0gKHBjcC1cdTAwM2VmcmVlX2NvdW50IFx1MDAzZT0gKGJhdGNoICYjNDM7IHBjcC1cdTAwM2VoaWdoX21pbiAvIDIpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00MDQ0PV9fYWxsb2NfcGFnZXNfbWF5X29vbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00MDg0LVx0LyogVGhlIE9PTSBraWxsZXIgd2lsbCBub3QgaGVscCBoaWdoZXIgb3JkZXIgYWxsb2NzICovXG5tbS9wYWdlX2FsbG9jLmM6NDA4NTpcdGlmIChvcmRlciBcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpXG5tbS9wYWdlX2FsbG9jLmMtNDA4Ni1cdFx0Z290byBvdXQ7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTQyNDg9c2hvdWxkX2NvbXBhY3RfcmV0cnkoZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00Mjg5LVx0XHQgKi9cbm1tL3BhZ2VfYWxsb2MuYzo0MjkwOlx0XHRpZiAob3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxubW0vcGFnZV9hbGxvYy5jLTQyOTEtXHRcdFx0bWF4X3JldHJpZXMgLz0gNDtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDMwMS1cdCAqL1xubW0vcGFnZV9hbGxvYy5jOjQzMDI6XHRtaW5fcHJpb3JpdHkgPSAob3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSA/XG5tbS9wYWdlX2FsbG9jLmMtNDMwMy1cdFx0XHRNSU5fQ09NUEFDVF9DT1NUTFlfUFJJT1JJVFkgOiBNSU5fQ09NUEFDVF9QUklPUklUWTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDMyNT1zaG91bGRfY29tcGFjdF9yZXRyeShnZnBfdCBnZnBfbWFzaywgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQzMzMtXG5tbS9wYWdlX2FsbG9jLmM6NDMzNDpcdGlmICghb3JkZXIgfHwgb3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxubW0vcGFnZV9hbGxvYy5jLTQzMzUtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDY0MD1zaG91bGRfcmVjbGFpbV9yZXRyeShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ2NTItXHQgKi9cbm1tL3BhZ2VfYWxsb2MuYzo0NjUzOlx0aWYgKGRpZF9zb21lX3Byb2dyZXNzIFx1MDAyNlx1MDAyNiBvcmRlciBcdTAwM2M9IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxubW0vcGFnZV9hbGxvYy5jLTQ2NTQtXHRcdCpub19wcm9ncmVzc19sb29wcyA9IDA7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTQ3ODQ9X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00Nzg2LXtcbm1tL3BhZ2VfYWxsb2MuYzo0Nzg3Olx0Y29uc3QgYm9vbCBjb3N0bHlfb3JkZXIgPSBvcmRlciBcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVI7XG5tbS9wYWdlX2FsbG9jLmMtNDc4OC1cdGJvb2wgY2FuX2RpcmVjdF9yZWNsYWltO1xuLS1cbm1tL3NsdWIuYz03NTU5PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2x1Yl9tYXhfb3JkZXIgPVxubW0vc2x1Yi5jOjc1NjA6XHRJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpID8gMSA6IFBBR0VfQUxMT0NfQ09TVExZX09SREVSO1xubW0vc2x1Yi5jLTc1NjEtc3RhdGljIHVuc2lnbmVkIGludCBzbHViX21pbl9vYmplY3RzO1xuLS1cbm1tL3ZtcHJlc3N1cmUuYz0xMDk9dm9pZCB2bXByZXNzdXJlKGdmcF90IGdmcCwgaW50IG9yZGVyLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgdHJlZSxcbi0tXG5tbS92bXByZXNzdXJlLmMtMTgxLVx0XHQgKi9cbm1tL3ZtcHJlc3N1cmUuYzoxODI6XHRcdGlmIChsZXZlbCBcdTAwM2UgVk1QUkVTU1VSRV9MT1cgXHUwMDI2XHUwMDI2IG9yZGVyIFx1MDAzYz0gUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpIHtcbm1tL3ZtcHJlc3N1cmUuYy0xODMtXHRcdFx0Lypcbi0tXG5tbS92bXNjYW4uYz02MDkxPXN0YXRpYyBib29sIGluX3JlY2xhaW1fY29tcGFjdGlvbihzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MDkzLVx0aWYgKGdmcF9jb21wYWN0aW9uX2FsbG93ZWQoc2MtXHUwMDNlZ2ZwX21hc2spIFx1MDAyNlx1MDAyNiBzYy1cdTAwM2VvcmRlciBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jOjYwOTQ6XHRcdFx0KHNjLVx1MDAzZW9yZGVyIFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUiB8fFxubW0vdm1zY2FuLmMtNjA5NS1cdFx0XHQgc2MtXHUwMDNlcHJpb3JpdHkgXHUwMDNjIERFRl9QUklPUklUWSAtIDIpKVxuLS1cbm1tL3Ztc2Nhbi5jPTY0MjQ9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTY0NjUtXHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NPTVBBQ1RJT04pIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmM6NjQ2NjpcdFx0XHQgICAgc2MtXHUwMDNlb3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtNjQ2Ny1cdFx0XHQgICAgY29tcGFjdGlvbl9yZWFkeSh6b25lLCBzYykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBNZW1vcnkgQWxsb2NhdGlvbiBCZWhhdmlvcioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBvcmlnaW5hbCBwdXJwb3NlIG9yIGludGVudGlvbiBiZWhpbmQgdGhpcyBzcGVjaWZpYyBjb21taXQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGdpdCBsb2cgYW5kIGhpc3RvcnkgdG8gZ2V0IHRoZSBjb250ZXh0LgoKSG9sZCBvbiwgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSB3aG9sZSBjb21taXQgaGlzdG9yeSwgSSYjMzk7bGwgc2VhcmNoIGZvciBzb21ldGhpbmcgc3BlY2lmaWMsIGxpa2UgdGhlIHBocmFzZSAmIzM0O0Nvc3RseSBfX0dGUF9OT1JFVFJZIGNhbGxlcnMgaGF2ZSBhIGNoZWFwIGZhbGxiYWNrJiMzNDsgb3Igc2ltaWxhciB0ZXJtcyB3aXRoaW4gdGhlIGdpdCBsb2cgb3IgaW4gY29tbWVudHMuIFRoaXMgc2hvdWxkIHBvaW50IG1lIHJpZ2h0IHRvIHRoZSBpbnRlbnQuCgpIbW0sIGl0IGxvb2tzIGxpa2Ugb25seSBgbW0vcGFnZV9hbGxvYy5jYCB3YXMgbW9kaWZpZWQgaW4gdGhpcyBjb21taXQsIHNvIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIExldCBtZSByZS1leGFtaW5lIHRoZSBjaGFuZ2VzIHdpdGhpbiB0aGF0IGZpbGUgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlZW4gY2hhbmdlZC4KClNwZWNpZmljYWxseSwgaW4gYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgLCB0aGUgY29kZSBub3cgaW5jbHVkZXM6CgpgYGBjCgkvKgoJICogQ29zdGx5IF9fR0ZQX05PUkVUUlkgY2FsbGVycyBoYXZlIGEgY2hlYXAgZmFsbGJhY2ssIHNvIGRvbiYjMzk7dCBzdGFsbAoJICogdGhlbSBpbiByZWNsYWltIG9yIGNvbXBhY3Rpb24uIF9fR0ZQX1RISVNOT0RFIGNhbGxlcnMgYXJlIGV4ZW1wdC4KCSAqLwoJaWYgKGNvc3RseV9vcmRlciAmYW1wOyZhbXA7IChnZnBfbWFzayAmYW1wOyBfX0dGUF9OT1JFVFJZKSAmYW1wOyZhbXA7CgkgICAgIShnZnBfbWFzayAmYW1wOyBfX0dGUF9USElTTk9ERSkpCgkJZ2ZwX21hc2sgJmFtcDs9IH5fX0dGUF9ESVJFQ1RfUkVDTEFJTTsKYGBgCgpJdCBzZWVtcyB0aGUgY29yZSBsb2dpYyBoZXJlIGlzIGFib3V0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24gZm9yIGNhbGxzIHRoYXQgbWlnaHQgYmUgJiMzNDtjb3N0bHkmIzM0OyAoYmFzZWQgb24gYG9yZGVyICZndDsgUEFHRV9BTExPQ19DT1NUTFlfT1JERVJgKSwgZXNwZWNpYWxseSB3aGVuIHRob3NlIGNhbGxzIGhhdmUgdGhlIGBfX0dGUF9OT1JFVFJZYCBmbGFnIHNldC4gSWYgdGhlIG9yZGVyIGlzICYjMzQ7Y29zdGx5JiMzNDsgYW5kIHRoZSBjYWxsZXIgaGFzIGBfX0dGUF9OT1JFVFJZYCBidXQgbm90IGBfX0dGUF9USElTTk9ERWAsIGl0IHJlbW92ZXMgdGhlIGBfX0dGUF9ESVJFQ1RfUkVDTEFJTWAgZmxhZy4gSSB0aGluayB0aGlzIG1lYW5zIHRoYXQgZm9yIHRoZXNlIGNhbGxlcnMsIHdlIHdvbiYjMzk7dCBzdGFsbCB0aGUgcHJvY2VzcyBpbiByZWNsYWltIG9yIGNvbXBhY3Rpb24uCgpUaGlzIHNlZW1zIGltcG9ydGFudCwgYnV0IEkgbmVlZCB0byByZWFkIHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbiBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIGhvdyB0aGlzIGZpdHMgaW50byB0aGUgbGFyZ2VyIG1lbW9yeSBhbGxvY2F0aW9uIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDgzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0ODMwOlx0XG40ODMxOlx0cmVzdGFydDpcbjQ4MzI6XHRcdGNvbXBhY3Rpb25fcmV0cmllcyA9IDA7XG40ODMzOlx0XHRub19wcm9ncmVzc19sb29wcyA9IDA7XG40ODM0Olx0XHRjb21wYWN0X3Jlc3VsdCA9IENPTVBBQ1RfU0tJUFBFRDtcbjQ4MzU6XHRcdGNvbXBhY3RfcHJpb3JpdHkgPSBERUZfQ09NUEFDVF9QUklPUklUWTtcbjQ4MzY6XHRcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG40ODM3Olx0XHR6b25lbGlzdF9pdGVyX2Nvb2tpZSA9IHpvbmVsaXN0X2l0ZXJfYmVnaW4oKTtcbjQ4Mzg6XHRcbjQ4Mzk6XHRcdC8qXG40ODQwOlx0XHQgKiBGb3IgY29zdGx5IGFsbG9jYXRpb25zLCB0cnkgZGlyZWN0IGNvbXBhY3Rpb24gZmlyc3QsIGFzIGl0JiMzOTtzIGxpa2VseVxuNDg0MTpcdFx0ICogdGhhdCB3ZSBoYXZlIGVub3VnaCBiYXNlIHBhZ2VzIGFuZCBkb24mIzM5O3QgbmVlZCB0byByZWNsYWltLiBGb3Igbm9uLVxuNDg0MjpcdFx0ICogbW92YWJsZSBoaWdoLW9yZGVyIGFsbG9jYXRpb25zLCBkbyB0aGF0IGFzIHdlbGwsIGFzIGNvbXBhY3Rpb24gd2lsbFxuNDg0MzpcdFx0ICogdHJ5IHByZXZlbnQgcGVybWFuZW50IGZyYWdtZW50YXRpb24gYnkgbWlncmF0aW5nIGZyb20gYmxvY2tzIG9mIHRoZVxuNDg0NDpcdFx0ICogc2FtZSBtaWdyYXRldHlwZS5cbjQ4NDU6XHRcdCAqL1xuNDg0NjpcdFx0aWYgKGNhbl9jb21wYWN0IFx1MDAyNlx1MDAyNiAoY29zdGx5X29yZGVyIHx8IChvcmRlciBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbjQ4NDc6XHRcdFx0XHRcdFx0YWMtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKSkpIHtcbjQ4NDg6XHRcdFx0Y29tcGFjdF9maXJzdCA9IHRydWU7XG40ODQ5Olx0XHRcdGNvbXBhY3RfcHJpb3JpdHkgPSBJTklUX0NPTVBBQ1RfUFJJT1JJVFk7XG40ODUwOlx0XHR9XG40ODUxOlx0XG40ODUyOlx0XHQvKlxuNDg1MzpcdFx0ICogVGhlIGZhc3QgcGF0aCB1c2VzIGNvbnNlcnZhdGl2ZSBhbGxvY19mbGFncyB0byBzdWNjZWVkIG9ubHkgdW50aWxcbjQ4NTQ6XHRcdCAqIGtzd2FwZCBuZWVkcyB0byBiZSB3b2tlbiB1cCwgYW5kIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHNldHRpbmcgdXBcbjQ4NTU6XHRcdCAqIGFsbG9jX2ZsYWdzIHByZWNpc2VseS4gU28gd2UgZG8gdGhhdCBub3cuXG40ODU2Olx0XHQgKlxuNDg1NzpcdFx0ICogQ2FuJiMzOTt0IGp1c3Qgb3IgYWxsb2NfZmxhZ3MgaWYgaXQgY29udGFpbnMgV01BUksgYml0cywgYnV0IHRob3NlIGZsYWdzXG40ODU4Olx0XHQgKiBzaG91bGRuJiMzOTt0IGJlIHNldCBpbiBhYy1cdTAwM2VhbGxvY19mbGFncy5cbjQ4NTk6XHRcdCAqL1xuNDg2MDpcdFx0Vk1fV0FSTl9PTihhYy1cdTAwM2VhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfV01BUktfTUFTSyk7XG40ODYxOlx0XHRhbGxvY19mbGFncyA9IGFjLVx1MDAzZWFsbG9jX2ZsYWdzIHwgYWxsb2NfZmxhZ3Nfc2xvd3BhdGgoZ2ZwX21hc2ssIG9yZGVyKTtcbjQ4NjI6XHRcbjQ4NjM6XHRcdC8qXG40ODY0Olx0XHQgKiBXZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIHpvbmVsaXN0IGl0ZXJhdG9yXG40ODY1Olx0XHQgKiBiZWNhdXNlIHdlIG1pZ2h0IGhhdmUgdXNlZCBkaWZmZXJlbnQgbm9kZW1hc2sgaW4gdGhlIGZhc3QgcGF0aCwgb3JcbjQ4NjY6XHRcdCAqIHRoZXJlIHdhcyBhIGNwdXNldCBtb2RpZmljYXRpb24gYW5kIHdlIGFyZSByZXRyeWluZyAtIG90aGVyd2lzZSB3ZVxuNDg2NzpcdFx0ICogY291bGQgZW5kIHVwIGl0ZXJhdGluZyBvdmVyIG5vbi1lbGlnaWJsZSB6b25lcyBlbmRsZXNzbHkuXG40ODY4Olx0XHQgKi9cbjQ4Njk6XHRcdGFjLVx1MDAzZXByZWZlcnJlZF96b25lcmVmID0gZmlyc3Rfem9uZXNfem9uZWxpc3QoYWMtXHUwMDNlem9uZWxpc3QsXG40ODcwOlx0XHRcdFx0XHRcdGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgYWMtXHUwMDNlbm9kZW1hc2spO1xuNDg3MTpcdFx0aWYgKCF6b25lbGlzdF96b25lKGFjLVx1MDAzZXByZWZlcnJlZF96b25lcmVmKSlcbjQ4NzI6XHRcdFx0Z290byBub3BhZ2U7XG40ODczOlx0XG40ODc0Olx0XHQvKlxuNDg3NTpcdFx0ICogQ2hlY2sgZm9yIGluc2FuZSBjb25maWd1cmF0aW9ucyB3aGVyZSB0aGUgY3B1c2V0IGRvZXNuJiMzOTt0IGNvbnRhaW5cbjQ4NzY6XHRcdCAqIGFueSBzdWl0YWJsZSB6b25lIHRvIHNhdGlzZnkgdGhlIHJlcXVlc3QgLSBlLmcuIG5vbi1tb3ZhYmxlXG40ODc3Olx0XHQgKiBHRlBfSElHSFVTRVIgYWxsb2NhdGlvbnMgZnJvbSBNT1ZBQkxFIG5vZGVzIG9ubHkuXG40ODc4Olx0XHQgKi9cbjQ4Nzk6XHRcdGlmIChjcHVzZXRzX2luc2FuZV9jb25maWcoKSBcdTAwMjZcdTAwMjYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9IQVJEV0FMTCkpIHtcbjQ4ODA6XHRcdFx0c3RydWN0IHpvbmVyZWYgKnogPSBmaXJzdF96b25lc196b25lbGlzdChhYy1cdTAwM2V6b25lbGlzdCxcbjQ4ODE6XHRcdFx0XHRcdFx0YWMtXHUwMDNlaGlnaGVzdF96b25laWR4LFxuNDg4MjpcdFx0XHRcdFx0XHRcdTAwMjZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpO1xuNDg4MzpcdFx0XHRpZiAoIXpvbmVsaXN0X3pvbmUoeikpXG40ODg0Olx0XHRcdFx0Z290byBub3BhZ2U7XG40ODg1Olx0XHR9XG40ODg2Olx0XG40ODg3Olx0cmV0cnk6XG40ODg4Olx0XHQvKiBFbnN1cmUga3N3YXBkIGRvZXNuJiMzOTt0IGFjY2lkZW50YWxseSBnbyB0byBzbGVlcCBhcyBsb25nIGFzIHdlIGxvb3AgKi9cbjQ4ODk6XHRcdGlmIChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfS1NXQVBEKVxuNDg5MDpcdFx0XHR3YWtlX2FsbF9rc3dhcGRzKG9yZGVyLCBnZnBfbWFzaywgYWMpO1xuNDg5MTpcdFxuNDg5MjpcdFx0LypcbjQ4OTM6XHRcdCAqIFRoZSBhZGp1c3RlZCBhbGxvY19mbGFncyBtaWdodCByZXN1bHQgaW4gaW1tZWRpYXRlIHN1Y2Nlc3MsIHNvIHRyeVxuNDg5NDpcdFx0ICogdGhhdCBmaXJzdFxuNDg5NTpcdFx0ICovXG40ODk2Olx0XHRwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfbWFzaywgb3JkZXIsIGFsbG9jX2ZsYWdzLCBhYyk7XG40ODk3Olx0XHRpZiAocGFnZSlcbjQ4OTg6XHRcdFx0Z290byBnb3RfcGc7XG40ODk5Olx0XG40OTAwOlx0XHRyZXNlcnZlX2ZsYWdzID0gX19nZnBfcGZtZW1hbGxvY19mbGFncyhnZnBfbWFzayk7XG40OTAxOlx0XHRpZiAocmVzZXJ2ZV9mbGFncylcbjQ5MDI6XHRcdFx0YWxsb2NfZmxhZ3MgPSBhbGxvY19mbGFnc19jbWEoZ2ZwX21hc2spIHwgcmVzZXJ2ZV9mbGFncyB8XG40OTAzOlx0XHRcdFx0XHRhYy1cdTAwM2VhbGxvY19mbGFncyB8IChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfS1NXQVBEKTtcbjQ5MDQ6XHRcbjQ5MDU6XHRcdC8qXG40OTA2Olx0XHQgKiBSZXNldCB0aGUgbm9kZW1hc2sgYW5kIHpvbmVsaXN0IGl0ZXJhdG9ycyBpZiBtZW1vcnkgcG9saWNpZXMgY2FuIGJlXG40OTA3Olx0XHQgKiBpZ25vcmVkLiBUaGVzZSBhbGxvY2F0aW9ucyBhcmUgaGlnaCBwcmlvcml0eSBhbmQgc3lzdGVtIHJhdGhlciB0aGFuXG40OTA4Olx0XHQgKiB1c2VyIG9yaWVudGVkLlxuNDkwOTpcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODg3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogODI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGb2N1c1N5bWJvbHMgZm9yIE1lbW9yeSBBbGxvY2F0aW9uIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byBjb25maWd1cmUgYEZvY3VzU3ltYm9sc2AgZm9yIGZ1enppbmcsIHNwZWNpZmljYWxseSB3aGVuIGNoYW5nZXMgaW52b2x2ZSBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYy4gVGhlIHRleHQgcG9pbnRzIHRvIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCwgdGhlIHNsb3cgcGF0aCBmb3IgdGhlIGNvcmUgcGFnZSBhbGxvY2F0b3IuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGluY2x1c2lvbiBpbiBgRm9jdXNTeW1ib2xzYC4KCkkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgZGlsdXRlIHRoZSBmdXp6aW5nIGVmZm9ydC4gVGhlIHJ1bGVzIGFyZSBjbGVhcjogYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoaXMgaW5jbHVkZXMgZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBsaWtlIHRoaXMgb25lLiBTbywgaXMgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIHViaXF1aXRvdXM/IExldCBtZSBxdWlja2x5IHZlcmlmeTogSXQmIzM5O3MgZGVmaW5lZCBpbiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgaXMgbWFya2VkIGBzdGF0aWMgaW5saW5lYCwgY2FsbGVkIGZyb20gYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAuCgpBaGEsIHRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgZmFsbCB1bmRlciB0aGUgJiMzNDt1YmlxdWl0b3VzJiMzNDsgY2F0ZWdvcnkuIFRoZSB0ZXh0IGV4cGxpY2l0bHkgd2FybnMgYWdhaW5zdCBpbmNsdWRpbmcgJiMzNDtnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzLCYjMzQ7IHNvIGFkZGluZyBgX19hbGxvY19wYWdlc19zbG93cGF0aGAsIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgLCBvciBgX19hbGxvY19wYWdlc19ub3Byb2ZgIGl0c2VsZiBzZWVtcyBsaWtlIGEgYmFkIGlkZWEuIEl0JiMzOTtzIGEgbWVtb3J5IGFsbG9jYXRvciBzbG93IHBhdGgsIGFuZCB0aHVzIGxpa2VseSB1YmlxdWl0b3VzLiBUaGF0IHdvdWxkIG1ha2UgYEZvY3VzU3ltYm9sc2AgaW5lZmZlY3RpdmUuCgpOb3csIGlmIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCAqaXMqIHRoZSBvbmx5IHRoaW5nIHRoYXQmIzM5O3MgY2hhbmdlZCwgY2FuIGBGb2N1c1N5bWJvbHNgIGJlIGVtcHR5PyBPciBzaG91bGQgSSBsb29rIGZvciBvdGhlciBmdW5jdGlvbnM/IFNob3VsZCBpdCBjb250YWluIGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBleGVyY2lzZSBjb3N0bHkgYF9fR0ZQX05PUkVUUllgIGFsbG9jYXRpb25zLCBsaWtlIHRob3NlIHVzZWQgYnkgVEhQIGFsbG9jYXRpb24sIGNvbXBhY3Rpb24sIG9yIG90aGVyIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBwYWdlIGFsbG9jYXRpb25zPyBJdCYjMzk7cyBhIGJpdCBvZiBhIGdyYXkgYXJlYSwgcmVhbGx5LgoKSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25zdGl0dXRlcyAmIzM0O3NwZWNpZmljIGZlYXR1cmUgbG9naWMuJiMzNDsgSWYgY2hhbmdlcyBhcmUgKnByaW1hcmlseSogaW4gdGhpcyBjb21tb24gbWVtb3J5IGFsbG9jYXRvciwgc2hvdWxkIEkgZm9jdXMgb24gc3BlY2lmaWMgY2FsbGVycyB0aGF0IGV4ZXJjaXNlIHRob3NlIGFsbG9jYXRpb25zPyBMZXQmIzM5O3MgY2hlY2s6IFdoZXJlIGFyZSBjb3N0bHkgb3JkZXJzIGNvbWJpbmVkIHdpdGggYF9fR0ZQX05PUkVUUllgPyBMZXQgbWUgc2VhcmNoIHdpdGhpbiBgbW0vYCBmb3IgYEdGUF9UUkFOU0hVR0VgIG9yIGBfX0dGUF9OT1JFVFJZYCB0byBmaW5kIHNwZWNpZmljIGZlYXR1cmVzIHRoYXQgbWlnaHQgYmUgaW1wYWN0ZWQgYnkgdGhlIGNoYW5nZXMgdG8gdGhlIGFsbG9jYXRvci4gVGhhdCBtaWdodCBwcm92aWRlIHNvbWUgdXNlZnVsIHRhcmdldHMgZm9yIGBGb2N1c1N5bWJvbHNgLCBldmVuIGlmIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCBpdHNlbGYgaXNuJiMzOTt0IGEgZ29vZCBmaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0dGUF9UUkFOU0hVR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0yNzM9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNzYtXG5tbS9odWdlX21lbW9yeS5jOjI3NzpcdHplcm9fZm9saW8gPSBmb2xpb19hbGxvYygoR0ZQX1RSQU5TSFVHRSB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9aRVJPVEFHUykgXHUwMDI2XG5tbS9odWdlX21lbW9yeS5jLTI3OC1cdFx0XHRcdCB+X19HRlBfTU9WQUJMRSxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE1MjM9Z2ZwX3Qgdm1hX3RocF9nZnBfbWFzayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE1MjgtXHRpZiAodGVzdF9iaXQoVFJBTlNQQVJFTlRfSFVHRVBBR0VfREVGUkFHX0RJUkVDVF9GTEFHLCBcdTAwMjZ0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncykpXG5tbS9odWdlX21lbW9yeS5jOjE1Mjk6XHRcdHJldHVybiBHRlBfVFJBTlNIVUdFIHwgKHZtYV9tYWR2aXNlZCA/IDAgOiBfX0dGUF9OT1JFVFJZKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTUzMC1cbi0tXG5tbS9odWdlX21lbW9yeS5jLTE1MzItXHRpZiAodGVzdF9iaXQoVFJBTlNQQVJFTlRfSFVHRVBBR0VfREVGUkFHX0tTV0FQRF9GTEFHLCBcdTAwMjZ0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncykpXG5tbS9odWdlX21lbW9yeS5jOjE1MzM6XHRcdHJldHVybiBHRlBfVFJBTlNIVUdFX0xJR0hUIHwgX19HRlBfS1NXQVBEX1JFQ0xBSU07XG5tbS9odWdlX21lbW9yeS5jLTE1MzQtXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xNTM2LVx0aWYgKHRlc3RfYml0KFRSQU5TUEFSRU5UX0hVR0VQQUdFX0RFRlJBR19LU1dBUERfT1JfTUFEVl9GTEFHLCBcdTAwMjZ0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncykpXG5tbS9odWdlX21lbW9yeS5jOjE1Mzc6XHRcdHJldHVybiBHRlBfVFJBTlNIVUdFX0xJR0hUIHxcbm1tL2h1Z2VfbWVtb3J5LmMtMTUzOC1cdFx0XHQodm1hX21hZHZpc2VkID8gX19HRlBfRElSRUNUX1JFQ0xBSU0gOlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTU0Mi1cdGlmICh0ZXN0X2JpdChUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfUkVRX01BRFZfRkxBRywgXHUwMDI2dHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MpKVxubW0vaHVnZV9tZW1vcnkuYzoxNTQzOlx0XHRyZXR1cm4gR0ZQX1RSQU5TSFVHRV9MSUdIVCB8XG5tbS9odWdlX21lbW9yeS5jLTE1NDQtXHRcdCAgICAgICAodm1hX21hZHZpc2VkID8gX19HRlBfRElSRUNUX1JFQ0xBSU0gOiAwKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTU0NS1cbm1tL2h1Z2VfbWVtb3J5LmM6MTU0NjpcdHJldHVybiBHRlBfVFJBTlNIVUdFX0xJR0hUO1xubW0vaHVnZV9tZW1vcnkuYy0xNTQ3LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTAyNz1zdGF0aWMgaW5saW5lIGdmcF90IGFsbG9jX2h1Z2VwYWdlX2todWdlcGFnZWRfZ2ZwbWFzayh2b2lkKVxubW0va2h1Z2VwYWdlZC5jLTEwMjgte1xubW0va2h1Z2VwYWdlZC5jOjEwMjk6XHRyZXR1cm4ga2h1Z2VwYWdlZF9kZWZyYWcoKSA/IEdGUF9UUkFOU0hVR0UgOiBHRlBfVFJBTlNIVUdFX0xJR0hUO1xubW0va2h1Z2VwYWdlZC5jLTEwMzAtfVxuLS1cbm1tL2todWdlcGFnZWQuYz0xMjUwPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGFsbG9jX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xMjUzLVx0Z2ZwX3QgZ2ZwID0gKGNjLVx1MDAzZWlzX2todWdlcGFnZWQgPyBhbGxvY19odWdlcGFnZV9raHVnZXBhZ2VkX2dmcG1hc2soKSA6XG5tbS9raHVnZXBhZ2VkLmM6MTI1NDpcdFx0ICAgICBHRlBfVFJBTlNIVUdFKTtcbm1tL2todWdlcGFnZWQuYy0xMjU1LVx0aW50IG5vZGUgPSBjb2xsYXBzZV9maW5kX3RhcmdldF9ub2RlKGNjKTtcbi0tXG5tbS9tZW1wb2xpY3kuYz0xNDM3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXRfYnlfbXBvbChzdHJ1Y3QgZm9saW8gKnNyYyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNDYxLVx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2Uoc3JjKSlcbm1tL21lbXBvbGljeS5jOjE0NjI6XHRcdGdmcCA9IEdGUF9UUkFOU0hVR0U7XG5tbS9tZW1wb2xpY3kuYy0xNDYzLVx0ZWxzZVxuLS1cbm1tL21pZ3JhdGUuYz0yMTk3PXN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBwcml2YXRlKVxuLS1cbm1tL21pZ3JhdGUuYy0yMjI1LVx0XHRnZnBfbWFzayBcdTAwMjY9IH5fX0dGUF9SRUNMQUlNO1xubW0vbWlncmF0ZS5jOjIyMjY6XHRcdGdmcF9tYXNrIHw9IEdGUF9UUkFOU0hVR0U7XG5tbS9taWdyYXRlLmMtMjIyNy1cdFx0b3JkZXIgPSBmb2xpb19vcmRlcihzcmMpO1xuLS1cbm1tL21pZ3JhdGUuYz0yNjY5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pc3BsYWNlZF9kc3RfZm9saW8oc3RydWN0IGZvbGlvICpzcmMsXG4tLVxubW0vbWlncmF0ZS5jLTI2NzYtXHRpZiAob3JkZXIgXHUwMDNlIDApXG5tbS9taWdyYXRlLmM6MjY3NzpcdFx0Z2ZwIHw9IEdGUF9UUkFOU0hVR0VfTElHSFQ7XG5tbS9taWdyYXRlLmMtMjY3OC1cdGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQxMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVEhQIEFsbG9jYXRpb24gYW5kIFJlY2xhbWF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIGFsbG9jYXRpb24gc2NlbmFyaW8uIEkmIzM5O20gZm9jdXNpbmcgb24gYG1tL2h1Z2VfbWVtb3J5LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB2bWFfdGhwX2dmcF9tYXNrYCBmdW5jdGlvbi4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCB3aGVuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfRElSRUNUX0ZMQUdgIGlzIHNldCBpbiBgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3NgIGFuZCB0aGUgVk1BIGlzbiYjMzk7dCBtYWR2aXNlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYEdGUF9UUkFOU0hVR0UgfCBfX0dGUF9OT1JFVFJZYC4gQW5kLCBkaWdnaW5nIGZ1cnRoZXIsIGBHRlBfVFJBTlNIVUdFYCBleHBhbmRzIHRvIGBHRlBfVFJBTlNIVUdFX0xJR0hUIHwgX19HRlBfRElSRUNUX1JFQ0xBSU1gLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGVzcGVjaWFsbHkgZm9yIHRob3NlIGNvc3RseSBvcmRlcnMgbGlrZSBgSFBBR0VfUE1EX09SREVSYCwgd2hpY2ggaXMgOS4gV2UgYXJlIGdldHRpbmcgYSBtYXNrIHdpdGggYm90aCBgX19HRlBfRElSRUNUX1JFQ0xBSU1gIGFuZCBgX19HRlBfTk9SRVRSWWAuCgpOb3csIGlmIHdlIHRyYWNrIHRoYXQgdG8gdGhlIFRIUCBhbGxvY2F0aW9uIHBhdGgsIHBhcnRpY3VsYXJseSBgX19hbGxvY19wYWdlc19zbG93cGF0aGAsIHRoZSBiZWhhdmlvciBpcyBhbHRlcmVkIGJ5IHRoZSBwYXRjaC4gUHJldmlvdXNseSwgYm90aCBgY2FuX2RpcmVjdF9yZWNsYWltYCBhbmQgYGNhbl9jb21wYWN0YCB3ZXJlIHNldCB0byB0cnVlLiBXaXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBjb25kaXRpb25hbCBibG9jaywgdGhhdCBjaGFuZ2VzLiBTaW5jZSBgY29zdGx5X29yZGVyYCBpcyB0cnVlLCBhbmQgdGhlIEdGUCBtYXNrIGNvbnRhaW5zIGJvdGggYF9fR0ZQX05PUkVUUllgIGFuZCBkb2VzbiYjMzk7dCBoYXZlIGBfX0dGUF9USElTTk9ERWAsIHRoZSBwYXRjaCBjbGVhcnMgYF9fR0ZQX0RJUkVDVF9SRUNMQUlNYCBmcm9tIHRoZSBnZnAgbWFzay4gVGhpcyByZXN1bHRzIGluIGBjYW5fZGlyZWN0X3JlY2xhaW1gIGJlY29taW5nIGZhbHNlLCBhbmQgY29uc2VxdWVudGx5LCBgY2FuX2NvbXBhY3RgIGJlY29taW5nIGZhbHNlIGFzIHdlbGwuIEVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGRpc2FibGluZyBkaXJlY3QgcmVjbGFpbSBhbmQgY29tcGFjdGlvbiBmb3IgdGhlc2Ugc3BlY2lmaWMgVEhQIGFsbG9jYXRpb25zLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGljaCBwYXRocyBhcmUgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgc2l0ZXMgb2YgYHZtYV90aHBfZ2ZwX21hc2tgLCB3aGljaCBzaG91bGQgcG9pbnQgbWUgdG8gVEhQIGZhdWx0IGFsbG9jYXRpb25zIGluIGBtbS9odWdlX21lbW9yeS5jYC4gQSBzaW1wbGUgZ3JlcCBmb3IgYHZtYV90aHBfZ2ZwX21hc2tgIHNob3VsZCBkbyB0aGUgdHJpY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYV90aHBfZ2ZwX21hc2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0xMzQ5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEzNTEte1xubW0vaHVnZV9tZW1vcnkuYzoxMzUyOlx0Z2ZwX3QgZ2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xubW0vaHVnZV9tZW1vcnkuYy0xMzUzLVx0Y29uc3QgaW50IG9yZGVyID0gSFBBR0VfUE1EX09SREVSO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTQ3Nj12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2RldmljZV9wcml2YXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTUyMi0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MTUyMzpnZnBfdCB2bWFfdGhwX2dmcF9tYXNrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxubW0vaHVnZV9tZW1vcnkuYy0xNTI0LXtcbi0tXG5tbS9tZW1vcnkuYz01MzA0PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTM1Ni1cdC8qIFRyeSBhbGxvY2F0aW5nIHRoZSBoaWdoZXN0IG9mIHRoZSByZW1haW5pbmcgb3JkZXJzLiAqL1xubW0vbWVtb3J5LmM6NTM1NzpcdGdmcCA9IHZtYV90aHBfZ2ZwX21hc2sodm1hKTtcbm1tL21lbW9yeS5jLTUzNTgtXHR3aGlsZSAob3JkZXJzKSB7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz03OTg9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy04MDQtXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1pZ3JhdGUtXHUwMDNldm1hO1xubW0vbWlncmF0ZV9kZXZpY2UuYzo4MDU6XHRnZnBfdCBnZnAgPSB2bWFfdGhwX2dmcF9tYXNrKHZtYSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTgwNi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuLS1cbm1tL3NobWVtLmM9MjA4OT1zdGF0aWMgaW50IHNobWVtX3JlcGxhY2VfZm9saW8oc3RydWN0IGZvbGlvICoqZm9saW9wLCBnZnBfdCBnZnAsXG4tLVxubW0vc2htZW0uYy0yMTA1LVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxKSB7XG5tbS9zaG1lbS5jOjIxMDY6XHRcdGdmcF90IGh1Z2VfZ2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xubW0vc2htZW0uYy0yMTA3LVxuLS1cbm1tL3NobWVtLmM9MjQyOD1zdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTI1MTMtXG5tbS9zaG1lbS5jOjI1MTQ6XHRcdGh1Z2VfZ2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xubW0vc2htZW0uYy0yNTE1LVx0XHRodWdlX2dmcCA9IHRocF9zaG1lbV9saW1pdF9nZnBfbWFzayhodWdlX2dmcCwgZ2ZwKTtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NDA5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy00MzYtXHRpZiAob3JkZXIpXG5tbS9zd2FwX3N0YXRlLmM6NDM3Olx0XHRnZnAgPSB0aHBfc2htZW1fbGltaXRfZ2ZwX21hc2sodm1hX3RocF9nZnBfbWFzayh2bWEpLCBnZnApO1xubW0vc3dhcF9zdGF0ZS5jLTQzOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyMTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIERldGVybWluYXRpb246IEEgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBmaWd1cmUgb3V0IHRoZSByaWdodCBgRm9jdXNTeW1ib2xzYCBmb3IgdGhpcyB0YXNrLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gaW50cm9kdWNlIG5vaXNlLiBNeSBpbml0aWFsIHRob3VnaHRzIHdlcmUgdG8gY2hlY2sgZnVuY3Rpb25zIGxpa2UgYGFsbG9jX2Fub25fZm9saW9gLCBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCwgYHZtYV90aHBfZ2ZwX21hc2tgLCBhbmQgYHNobWVtX2dldF9mb2xpb19nZnBgLiBCdXQgdGhlbiBJIGhpdCBhIHNuYWcuIFdhaXQsIGlzIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCBva2F5IHRvIGxpc3QsIG9yIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmA/CgpJIGltbWVkaWF0ZWx5IHJlbWVtYmVyZWQgdGhlIGFkdmljZTogJiMzNDtBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFMuJiMzNDsgVGhlIGRvY3VtZW50IGlzIHJlYWxseSBjbGVhciBvbiB0aGlzIOKAkyBhdm9pZCBnZW5lcmljIGZ1bmN0aW9ucyB0aGF0IGFsbW9zdCBldmVyeXRoaW5nIGNhbGxzLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBiZSAqdmVyeSogc2VsZWN0aXZlLgoKSSB0aG91Z2h0IGFib3V0IGB2bWFfdGhwX2dmcF9tYXNrYC4gVGhhdCYjMzk7cyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHdoaWNoIGlzbiYjMzk7dCBldmVyeXdoZXJlLCBhbmQgaXQgZGlyZWN0bHkgc2V0cyB0aGUgVEhQIGdmcCBtYXNrIHdpdGggYF9fR0ZQX05PUkVUUllgLiBCdXQgdGhlbiBhZ2FpbiwgaXMgaXQgdHJ1bHkgc3BlY2lmaWMgZW5vdWdoPyBUaGVuLCBpcyBgYWxsb2NfYW5vbl9mb2xpb2Agb3V0IHNpbmNlIGl0IGlzIGluIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXI/IEl0JiMzOTtzIGFsbCBjb25uZWN0ZWQuCgpXaGF0IGFib3V0IGZ1bmN0aW9ucyBsaWtlIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgIG9yIHRoZSBgdm1hX3RocF9nZnBfbWFza2A/IEkgd2VudCBiYWNrIHRvIHRoZSBzb3VyY2U6IHdoYXQgYWJvdXQgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgPyBJdCYjMzk7cyBpbiBgbW0vcGFnZV9hbGxvYy5jYCwgc28gSSBzaG91bGQgYmUgZ29vZCwgcmlnaHQ/IFdhaXQsIHdoeSBkaWQgdGhlIGF1dGhvciBjaGFuZ2UgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgPyBUaGF0IGlzLCBpbiBpdHNlbGYsIGEgcmVkIGZsYWcuIExldCBtZSBzZWUgd2hhdCBlbHNlIGlzIGluIHRoYXQgZmlsZSwgb3Igb3RoZXJzLgoKSSBuZWVkIHRvIGNvbWUgYmFjayB0byB0aGUgYmFzaWNzOiBpcyBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgaXRzZWxmIHViaXF1aXRvdXM/IFdhaXQsIHRoZSBkb2N1bWVudGF0aW9uIHNhaWQsICYjMzQ7Z2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQgYW5kIHRyYXAgaGFuZGxlcnMuLi4pJiMzNDsgQW5kIHllcywgYF9fYWxsb2NfcGFnZXNgIG9yIGl0cyBzbG93IHBhdGggKmlzKiBhIGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvciBmdW5jdGlvbi4gSSBzaG91bGQgYXZvaWQgaXQuCgpTbywgd2hhdCBhYm91dCBgdm1hX3RocF9nZnBfbWFza2AsIGBhbGxvY19odWdlX3plcm9fZm9saW9gLCBvciBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYD8gSSBtdXN0IG5vdyB0aGluayBtb3JlIGFib3V0IHRoZSBjb250ZXh0LCBhbmQgd2hhdCYjMzk7cyBpbnRlcmVzdGluZy4gV2hhdCBjYWxsZXJzIHBlcmZvcm0gYWxsb2NhdGlvbnMgdGhhdCBhcmUgKmNvc3RseSogYmVjYXVzZSB0aGV5IHNwZWNpZnkgYF9fR0ZQX05PUkVUUllgPyBMZXQgbWUgZ3JlcCBmb3IgYF9fR0ZQX05PUkVUUllgIHRocm91Z2hvdXQgdGhlIHRyZWUgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLiBUaGF0JiMzOTtzIHRoZSBiZXN0IHdheSB0byB1bmNvdmVyIHRoZSByZWxldmFudCBhbmQgbm9uLXViaXF1aXRvdXMgYXJlYXMgb2YgaW50ZXJlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fR0ZQX05PUkVUUlkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vYmFsbG9vbi5jPTE0Nz1zdHJ1Y3QgcGFnZSAqYmFsbG9vbl9wYWdlX2FsbG9jKHZvaWQpXG5tbS9iYWxsb29uLmMtMTQ4LXtcbm1tL2JhbGxvb24uYzoxNDk6XHRnZnBfdCBnZnBfZmxhZ3MgPSBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PV0FSTjtcbm1tL2JhbGxvb24uYy0xNTAtXG4tLVxubW0vZXhlY21lbS5jPTQwOT1zdGF0aWMgYm9vbCBleGVjbWVtX2NhY2hlX2ZyZWUodm9pZCAqcHRyKVxuLS1cbm1tL2V4ZWNtZW0uYy00MjItXG5tbS9leGVjbWVtLmM6NDIzOlx0ZXJyID0gX19leGVjbWVtX2NhY2hlX2ZyZWUoXHUwMDI2bWFzLCBhcmVhLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9SRVRSWSk7XG5tbS9leGVjbWVtLmMtNDI0LVx0aWYgKGVycikge1xuLS1cbm1tL2ZpbGVtYXAuYz0xOTQ3PXN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL2ZpbGVtYXAuYy0yMDE2LVx0XHRcdGlmIChvcmRlciBcdTAwM2UgbWluX29yZGVyKVxubW0vZmlsZW1hcC5jOjIwMTc6XHRcdFx0XHRhbGxvY19nZnAgfD0gX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PV0FSTjtcbm1tL2ZpbGVtYXAuYy0yMDE4LVx0XHRcdGZvbGlvID0gZmlsZW1hcF9hbGxvY19mb2xpbyhhbGxvY19nZnAsIG9yZGVyLCBwb2xpY3kpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTUyMz1nZnBfdCB2bWFfdGhwX2dmcF9tYXNrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTUyOC1cdGlmICh0ZXN0X2JpdChUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfRElSRUNUX0ZMQUcsIFx1MDAyNnRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzKSlcbm1tL2h1Z2VfbWVtb3J5LmM6MTUyOTpcdFx0cmV0dXJuIEdGUF9UUkFOU0hVR0UgfCAodm1hX21hZHZpc2VkID8gMCA6IF9fR0ZQX05PUkVUUlkpO1xubW0vaHVnZV9tZW1vcnkuYy0xNTMwLVxuLS1cbm1tL2ludGVybmFsLmg9MTE3PXN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sIHtcbi0tXG5tbS9pbnRlcm5hbC5oLTE0Ni1cdFx0XHRfX0dGUF9OT1dBUk58X19HRlBfUkVUUllfTUFZRkFJTHxfX0dGUF9OT0ZBSUx8XFxcbm1tL2ludGVybmFsLmg6MTQ3Olx0XHRcdF9fR0ZQX05PUkVUUll8X19HRlBfTUVNQUxMT0N8X19HRlBfTk9NRU1BTExPQ3xcXFxubW0vaW50ZXJuYWwuaC0xNDgtXHRcdFx0X19HRlBfTk9MT0NLREVQKVxuLS1cbm1tL2tzbS5jPTU2Nz1zdGF0aWMgaW5saW5lIHN0cnVjdCBrc21fcm1hcF9pdGVtICphbGxvY19ybWFwX2l0ZW0odm9pZClcbi0tXG5tbS9rc20uYy01NzEtXHRybWFwX2l0ZW0gPSBrbWVtX2NhY2hlX3phbGxvYyhybWFwX2l0ZW1fY2FjaGUsIEdGUF9LRVJORUwgfFxubW0va3NtLmM6NTcyOlx0XHRcdFx0XHRcdF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk4pO1xubW0va3NtLmMtNTczLVx0aWYgKHJtYXBfaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmM9MjY0NT1zdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjczMC1cbm1tL21lbWNvbnRyb2wuYzoyNzMxOlx0aWYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9OT1JFVFJZKVxubW0vbWVtY29udHJvbC5jLTI3MzItXHRcdGdvdG8gbm9tZW07XG4tLVxubW0vbWVtcG9saWN5LmM9MjQ0MT1zdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX21wb2woZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vbWVtcG9saWN5LmMtMjQ3Mi1cdFx0XHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKFxubW0vbWVtcG9saWN5LmM6MjQ3MzpcdFx0XHRcdGdmcCB8IF9fR0ZQX1RISVNOT0RFIHwgX19HRlBfTk9SRVRSWSwgb3JkZXIsXG5tbS9tZW1wb2xpY3kuYy0yNDc0LVx0XHRcdFx0bmlkLCBOVUxMLCBBTExPQ19ERUZBVUxUKTtcbi0tXG5tbS9tZW1wb29sLmM9NDgwPXN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWVtcG9vbF9hZGp1c3RfZ2ZwKGdmcF90ICpnZnBfbWFzaylcbm1tL21lbXBvb2wuYy00ODEte1xubW0vbWVtcG9vbC5jOjQ4MjpcdCpnZnBfbWFzayB8PSBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PV0FSTjtcbm1tL21lbXBvb2wuYy00ODMtXHRyZXR1cm4gKmdmcF9tYXNrIFx1MDAyNiB+KF9fR0ZQX0RJUkVDVF9SRUNMQUlNIHwgX19HRlBfSU8pO1xuLS1cbm1tL21pZ3JhdGUuYz0yNjY5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pc3BsYWNlZF9kc3RfZm9saW8oc3RydWN0IGZvbGlvICpzcmMsXG4tLVxubW0vbWlncmF0ZS5jLTI2NzgtXHRlbHNlIHtcbm1tL21pZ3JhdGUuYzoyNjc5Olx0XHRnZnAgfD0gR0ZQX0hJR0hVU0VSX01PVkFCTEUgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9SRVRSWSB8XG5tbS9taWdyYXRlLmMtMjY4MC1cdFx0XHRfX0dGUF9OT1dBUk47XG4tLVxubW0vcGFnZV9hbGxvYy5jPTQwNDQ9X19hbGxvY19wYWdlc19tYXlfb29tKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQwNzEtXHQgKiB3ZSYjMzk7cmUgc3RpbGwgdW5kZXIgaGVhdnkgcHJlc3N1cmUuIEJ1dCBtYWtlIHN1cmUgdGhhdCB0aGlzIHJlY2xhaW1cbm1tL3BhZ2VfYWxsb2MuYzo0MDcyOlx0ICogYXR0ZW1wdCBzaGFsbCBub3QgZGVwZW5kIG9uIF9fR0ZQX0RJUkVDVF9SRUNMQUlNIFx1MDAyNlx1MDAyNiAhX19HRlBfTk9SRVRSWVxubW0vcGFnZV9hbGxvYy5jLTQwNzMtXHQgKiBhbGxvY2F0aW9uIHdoaWNoIHdpbGwgbmV2ZXIgZmFpbCBkdWUgdG8gb29tX2xvY2sgYWxyZWFkeSBoZWxkLlxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00Nzg0PV9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDgwNS1cdC8qXG5tbS9wYWdlX2FsbG9jLmM6NDgwNjpcdCAqIENvc3RseSBfX0dGUF9OT1JFVFJZIGNhbGxlcnMgaGF2ZSBhIGNoZWFwIGZhbGxiYWNrLCBzbyBkb24mIzM5O3Qgc3RhbGxcbm1tL3BhZ2VfYWxsb2MuYy00ODA3LVx0ICogdGhlbSBpbiByZWNsYWltIG9yIGNvbXBhY3Rpb24uIF9fR0ZQX1RISVNOT0RFIGNhbGxlcnMgYXJlIGV4ZW1wdC5cbm1tL3BhZ2VfYWxsb2MuYy00ODA4LVx0ICovXG5tbS9wYWdlX2FsbG9jLmM6NDgwOTpcdGlmIChjb3N0bHlfb3JkZXIgXHUwMDI2XHUwMDI2IChnZnBfbWFzayBcdTAwMjYgX19HRlBfTk9SRVRSWSkgXHUwMDI2XHUwMDI2XG5tbS9wYWdlX2FsbG9jLmMtNDgxMC1cdCAgICAhKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9USElTTk9ERSkpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ5NzMtXHRcdCAqL1xubW0vcGFnZV9hbGxvYy5jOjQ5NzQ6XHRcdGlmIChnZnBfaGFzX2ZsYWdzKGdmcF9tYXNrLCBfX0dGUF9OT1JFVFJZIHwgX19HRlBfVEhJU05PREUpKVxubW0vcGFnZV9hbGxvYy5jLTQ5NzUtXHRcdFx0Z290byBub3BhZ2U7XG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ5NzktXHRcdCAqIHByaW9yaXR5LiBSZXN0b3JlIGl0IGZvciBmdXJ0aGVyIHJldHJpZXMsIGlmIHRob3NlIGFyZVxubW0vcGFnZV9hbGxvYy5jOjQ5ODA6XHRcdCAqIGFsbG93ZWQuIFdpdGggX19HRlBfTk9SRVRSWSB0aGVyZSB3aWxsIGJlIGEgc2luZ2xlIHJvdW5kIG9mXG5tbS9wYWdlX2FsbG9jLmMtNDk4MS1cdFx0ICogcmVjbGFpbSBhbmQgY29tcGFjdGlvbiB3aXRoIHRoZSBsb3dlcmVkIHByaW9yaXR5LlxubW0vcGFnZV9hbGxvYy5jLTQ5ODItXHRcdCAqL1xubW0vcGFnZV9hbGxvYy5jOjQ5ODM6XHRcdGlmICghKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9OT1JFVFJZKSlcbm1tL3BhZ2VfYWxsb2MuYy00OTg0LVx0XHRcdGNvbXBhY3RfcHJpb3JpdHkgPSBERUZfQ09NUEFDVF9QUklPUklUWTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDk5MC1cdC8qIERvIG5vdCBsb29wIGlmIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQgKi9cbm1tL3BhZ2VfYWxsb2MuYzo0OTkxOlx0aWYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9OT1JFVFJZKVxubW0vcGFnZV9hbGxvYy5jLTQ5OTItXHRcdGdvdG8gbm9wYWdlO1xuLS1cbm1tL3BhZ2VfZnJhZ19jYWNoZS5jPTQ5PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19wYWdlX2ZyYWdfY2FjaGVfcmVmaWxsKHN0cnVjdCBwYWdlX2ZyYWdfY2FjaGUgKm5jLFxuLS1cbm1tL3BhZ2VfZnJhZ19jYWNoZS5jLTU3LVx0Z2ZwX21hc2sgPSAoZ2ZwX21hc2sgXHUwMDI2IH5fX0dGUF9ESVJFQ1RfUkVDTEFJTSkgfCAgX19HRlBfQ09NUCB8XG5tbS9wYWdlX2ZyYWdfY2FjaGUuYzo1ODpcdFx0ICAgX19HRlBfTk9XQVJOIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0M7XG5tbS9wYWdlX2ZyYWdfY2FjaGUuYy01OS1cdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzKGdmcF9tYXNrLCBQQUdFX0ZSQUdfQ0FDSEVfTUFYX09SREVSLFxuLS1cbm1tL3BlcmNwdS5jPTE3MzU9dm9pZCBfX3BlcmNwdSAqcGNwdV9hbGxvY19ub3Byb2Yoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgYm9vbCByZXNlcnZlZCxcbi0tXG5tbS9wZXJjcHUuYy0xNzYwLVx0ICovXG5tbS9wZXJjcHUuYzoxNzYxOlx0cGNwdV9nZnAgPSBnZnAgXHUwMDI2IChHRlBfTk9JTyB8IF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk4pO1xubW0vcGVyY3B1LmMtMTc2Mi1cdGlzX2F0b21pYyA9ICFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApO1xuLS1cbm1tL3BlcmNwdS5jPTIwMTM9c3RhdGljIHZvaWQgcGNwdV9iYWxhbmNlX3BvcHVsYXRlZCh2b2lkKVxuLS1cbm1tL3BlcmNwdS5jLTIwMTUtXHQvKiBnZnAgZmxhZ3MgcGFzc2VkIHRvIHVuZGVybHlpbmcgYWxsb2NhdG9ycyAqL1xubW0vcGVyY3B1LmM6MjAxNjpcdGNvbnN0IGdmcF90IGdmcCA9IEdGUF9LRVJORUwgfCBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOO1xubW0vcGVyY3B1LmMtMjAxNy1cdHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaztcbi0tXG5tbS9zaG1lbS5jPTU5MzQ9aW50IHNobWVtX3plcm9fc2V0dXBfZGVzYyhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuLS1cbm1tL3NobWVtLmMtNTk1OC0gKlxubW0vc2htZW0uYzo1OTU5OiAqIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfZ3R0KCkgbWl4ZXMgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PV0FSTiBpblxubW0vc2htZW0uYy01OTYwLSAqIHdpdGggdGhlIG1hcHBpbmdfZ2ZwX21hc2soKSwgdG8gYXZvaWQgT09NaW5nIHRoZSBtYWNoaW5lIHVubmVjZXNzYXJpbHkuXG4tLVxubW0vc2xhYl9jb21tb24uYz0xODcxPXN0YXRpYyB2b2lkIGZpbGxfcGFnZV9jYWNoZV9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTE4ODYtXHRcdGJub2RlID0gKHN0cnVjdCBrdmZyZWVfcmN1X2J1bGtfZGF0YSAqKVxubW0vc2xhYl9jb21tb24uYzoxODg3Olx0XHRcdF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9OT1dBUk4pO1xubW0vc2xhYl9jb21tb24uYy0xODg4LVxuLS1cbm1tL3NsYWJfY29tbW9uLmM9MTkxMz1hZGRfcHRyX3RvX2J1bGtfa3JjX2xvY2soc3RydWN0IGtmcmVlX3JjdV9jcHUgKiprcmNwLFxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTkzMi1cbm1tL3NsYWJfY29tbW9uLmM6MTkzMzpcdFx0XHQvLyBfX0dGUF9OT1JFVFJZIC0gYWxsb3dzIGEgbGlnaHQtd2VpZ2h0IGRpcmVjdCByZWNsYWltXG5tbS9zbGFiX2NvbW1vbi5jLTE5MzQtXHRcdFx0Ly8gd2hhdCBpcyBPSyBmcm9tIG1pbmltaXppbmcgb2YgZmFsbGJhY2sgaGl0dGluZyBwb2ludCBvZlxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTk0NC1cdFx0XHRibm9kZSA9IChzdHJ1Y3Qga3ZmcmVlX3JjdV9idWxrX2RhdGEgKilcbm1tL3NsYWJfY29tbW9uLmM6MTk0NTpcdFx0XHRcdF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9OT1dBUk4pO1xubW0vc2xhYl9jb21tb24uYy0xOTQ2LVx0XHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjYoKmtyY3ApLVx1MDAzZWxvY2ssICpmbGFncyk7XG4tLVxubW0vc2x1Yi5jPTM0NDE9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtMzQ1Ny1cdCAqL1xubW0vc2x1Yi5jOjM0NTg6XHRhbGxvY19nZnAgPSAoZmxhZ3MgfCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9OT1JFVFJZKSBcdTAwMjYgfl9fR0ZQX05PRkFJTDtcbm1tL3NsdWIuYy0zNDU5LVx0aWYgKChhbGxvY19nZnAgXHUwMDI2IF9fR0ZQX0RJUkVDVF9SRUNMQUlNKSBcdTAwMjZcdTAwMjYgb29fb3JkZXIob28pIFx1MDAzZSBvb19vcmRlcihzLVx1MDAzZW1pbikpXG4tLVxubW0vdm1hbGxvYy5jPTM4MjA9c3RhdGljIHZvaWQgZGVmZXJfdm1fYXJlYV9jbGVhbnVwKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEpXG4tLVxubW0vdm1hbGxvYy5jLTM4MzUtICogR0ZQX05PSU8gLSBtZW1hbGxvY19ub2lvX3NhdmUoKVxubW0vdm1hbGxvYy5jOjM4MzY6ICogX19HRlBfUkVUUllfTUFZRkFJTCwgX19HRlBfTk9SRVRSWSAtIG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKClcbm1tL3ZtYWxsb2MuYy0zODM3LSAqIHRvIHByZXZlbnQgT09Nc1xuLS1cbm1tL3ZtYWxsb2MuYz0zODQyPW1lbWFsbG9jX2FwcGx5X2dmcF9zY29wZShnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS92bWFsbG9jLmMtMzg0Ni1cdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spIHx8XG5tbS92bWFsbG9jLmM6Mzg0NzpcdFx0XHQoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9SRVRSWV9NQVlGQUlMIHwgX19HRlBfTk9SRVRSWSkpKVxubW0vdm1hbGxvYy5jLTM4NDgtXHRcdGZsYWdzID0gbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKTtcbi0tXG5tbS92bWFsbG9jLmM9Mzg2NT1zdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS92bWFsbG9jLmMtMzk2OS0gKiBUaGlzIGdmcCBsaXN0cyBhbGwgZmxhZ3MgY3VycmVudGx5IHBhc3NlZCB0aHJvdWdoIHZtYWxsb2MuIEN1cnJlbnRseSxcbm1tL3ZtYWxsb2MuYzozOTcwOiAqIF9fR0ZQX1pFUk8gaXMgdXNlZCBieSBCUEYgYW5kIF9fR0ZQX05PUkVUUlkgaXMgdXNlZCBieSBwZXJjcHUuIEJvdGggZHJtXG5tbS92bWFsbG9jLmMtMzk3MS0gKiBhbmQgQlBGIGFsc28gdXNlIEdGUF9VU0VSLiBBZGRpdGlvbmFsbHksIHZhcmlvdXMgdXNlcnMgcGFzc1xuLS1cbm1tL3ZtYWxsb2MuYy0zOTc1LVx0XHRcdFx0X19HRlBfTk9GQUlMIHwgX19HRlBfWkVSTyB8XFxcbm1tL3ZtYWxsb2MuYzozOTc2Olx0XHRcdFx0X19HRlBfTk9SRVRSWSB8IF9fR0ZQX1JFVFJZX01BWUZBSUwgfFxcXG5tbS92bWFsbG9jLmMtMzk3Ny1cdFx0XHRcdEdGUF9OT0ZTIHwgR0ZQX05PSU8gfCBHRlBfS0VSTkVMX0FDQ09VTlQgfFxcXG4tLVxubW0vdm1hbGxvYy5jPTM5ODA9c3RhdGljIGdmcF90IHZtYWxsb2NfZml4X2ZsYWdzKGdmcF90IGZsYWdzKVxuLS1cbm1tL3ZtYWxsb2MuYy00MDA2LSAqIFN1cHBvcnRlZCBHRlAgY2xhc3NlczogJUdGUF9LRVJORUwsICVHRlBfQVRPTUlDLCAlR0ZQX05PV0FJVCxcbm1tL3ZtYWxsb2MuYzo0MDA3OiAqICVfX0dGUF9SRVRSWV9NQVlGQUlMLCAlX19HRlBfTk9SRVRSWSwgJUdGUF9OT0ZTIGFuZCAlR0ZQX05PSU8uXG5tbS92bWFsbG9jLmMtNDAwOC0gKiBab25lIG1vZGlmaWVycyBhcmUgbm90IHN1cHBvcnRlZC5cbi0tXG5tbS92bWFsbG9jLmMtNDAxMi0gKiBSZXRyeSBtb2RpZmllcnM6IG9ubHkgJV9fR0ZQX05PRkFJTCBpcyBmdWxseSBzdXBwb3J0ZWQ7XG5tbS92bWFsbG9jLmM6NDAxMzogKiAlX19HRlBfTk9SRVRSWSBhbmQgJV9fR0ZQX1JFVFJZX01BWUZBSUwgYXJlIHN1cHBvcnRlZCB3aXRoIGxpbWl0YXRpb24sXG5tbS92bWFsbG9jLmMtNDAxNC0gKiBpLmUuIHBhZ2UgdGFibGVzIGFyZSBhbGxvY2F0ZWQgd2l0aCBOT1dBSVQgc2VtYW50aWMgc28gdGhleSBtaWdodCBmYWlsXG4tLVxubW0venN3YXAuYz04NDA9c3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4tLVxubW0venN3YXAuYy04OTgtXG5tbS96c3dhcC5jOjg5OTpcdGdmcCA9IEdGUF9OT1dBSVQgfCBfX0dGUF9OT1JFVFJZIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEU7XG5tbS96c3dhcC5jLTkwMC1cdGhhbmRsZSA9IHpzX21hbGxvYyhwb29sLVx1MDAzZXpzX3Bvb2wsIGRsZW4sIGdmcCwgcGFnZV90b19uaWQocGFnZSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk3OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUGFnZSBBbGxvY2F0aW9uIHdpdGggQ29zdGx5IE9yZGVycyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgb3B0aW1hbCBjb25maWd1cmF0aW9uIGFuZCBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIG1lbW9yeSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2hlcmUgJiMzNDtjb3N0bHkgb3JkZXJzJiMzNDsgY29tZSBpbnRvIHBsYXkuCgpJbml0aWFsbHksIEkmIzM5O20gbG9va2luZyBhdCBob3cgYF9fR0ZQX05PUkVUUllgIGlzIHVzZWQsIGFuZCBpdCBzZWVtcyB0aGlzIGZsYWcsIGFsb25nIHdpdGggYF9fR0ZQX05PV0FSTmAsIGlzIGFwcGxpZWQgdG8gY2VydGFpbiBgYWxsb2NfZ2ZwYCBmbGFncyBiYXNlZCBvbiB0aGUgb3JkZXIgc2l6ZSBpbiBhIGZldyBwbGFjZXM6IGluIGBtbS9zbHViLmNgIHdpdGhpbiBgYWxsb2NhdGVfc2xhYmAsIGluIGBtbS9odWdlX21lbW9yeS5jYCB3aXRoIGB2bWFfdGhwX2dmcF9tYXNrYCwgYW5kIGluIGBtbS9maWxlbWFwLmNgLiBUaGlzIHN1Z2dlc3RzIGEgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGZsYWdzIGFuZCBoaWdoLW9yZGVyIGFsbG9jYXRpb25zLiBJIGFsc28gdG9vayBub3RlIG9mIGBfX0dGUF9ESVJFQ1RfUkVDTEFJTWAuCgpGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBJIGhhZCBgQ09ORklHX0NPTVBBQ1RJT05gIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpbiBtaW5kLCBhcyB0aG9zZSBzZWVtIHJlbGV2YW50IHRvIGV4ZXJjaXNpbmcgdGhlICYjMzQ7Y29zdGx5IG9yZGVyJiMzNDsgbG9naWMuIEhvd2V2ZXIsIEkgd2FudCB0byBiZSAqc3VyZSouCgpTbywgSSBjaGVjayB0aGUgY29kZSwgYW5kIEkgc2VlIHRoYXQgdGhlIHJlbGV2YW50IGNvZGUgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgKHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0ODA1IGluIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCkgaXMgKm5vdCogZ3VhcmRlZCBieSBhbnkgYCNpZmRlZmAgZGlyZWN0aXZlcy4gVGhlIGNvc3RseSBvcmRlciBjaGVja3MgKHdoaWNoIGluY2x1ZGUgdGhlIGZsYWdzIG1lbnRpb25lZCBlYXJsaWVyKSBhcmUgdW5jb25kaXRpb25hbGx5IHByZXNlbnQuIGBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUmAgaXMgZGVmaW5lZCB1bmNvbmRpdGlvbmFsbHkgYXMgMy4KClRoaXMgbWVhbnMgYSAqc3RhbmRhcmQqIGtlcm5lbCBzaG91bGQgaW5jbHVkZSB0aGUgcmVsZXZhbnQgY29kZSwgdGh1cyB0aGUgYEVuYWJsZUNvbmZpZ3NgIGNhbiBiZSBlbXB0eS4gSG93ZXZlciwgZW5hYmxpbmcgYENPTkZJR19DT01QQUNUSU9OYCBhbmQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgd291bGQgbGlrZWx5ICppbmNyZWFzZSogdGhlIGxpa2VsaWhvb2Qgb2YgaGl0dGluZyB0aGVzZSBjb3N0bHkgYWxsb2NhdGlvbiBwYXRocy4KCk5leHQsIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHJpZ2h0IGBGb2N1c1N5bWJvbHNgLiBDYW4gSSB1c2UgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgPyBXZWxsLCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgaXQgYSBwb29yIGNob2ljZS4gSSBuZWVkIHRvIGZpbmQgdGhlICplbnRyeXBvaW50cyouCgpJIHJlLXJlYWQgdGhlIHByb21wdCBvbiBhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMsIHdoaWNoIHJ1bGVzIG91dCB2ZXJ5IGdlbmVyaWMgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCBldmVyeXdoZXJlLiBTbywgSSBuZWVkIHRoZSAqc3BlY2lmaWMqIGNhbGxlcnMgdGhhdCB3aWxsIGV4ZXJjaXNlIHRoZSBjb3N0bHkgYF9fR0ZQX05PUkVUUllgIGFsbG9jYXRpb24gbG9naWMuCgpJIGlkZW50aWZpZWQgYSBmZXcgY2FuZGlkYXRlcyBmcm9tIHRoZSBjb2RlOiBgYWxsb2NhdGVfc2xhYmAsIGB2bWFfdGhwX2dmcF9tYXNrYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIGBhbGxvY19odWdlX3plcm9fZm9saW9gIGFsc28gaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgYWxsb2NfcGFnZXNfbXBvbGAgaW4gYG1tL21lbXBvbGljeS5jYCwgYW5kIHBvdGVudGlhbGx5IGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLiBUaGUgc2xhYiBjYWNoZXMgYXJlIGludGVyZXN0aW5nIChgYWxsb2NhdGVfc2xhYmApIGJlY2F1c2UgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyBoYXBwZW4gdGhlcmUuCgpgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGRlYWxzIHdpdGggVEhQIGFsbG9jYXRpb25zLiBgYWxsb2NfaHVnZV96ZXJvX2ZvbGlvYCBpcyBhbm90aGVyIHBvdGVudGlhbGx5IGZydWl0ZnVsIGNhbGxlci4gVGhlcmVmb3JlLCBgRm9jdXNTeW1ib2xzYCBtaWdodCBpbmNsdWRlIGVudHJ5cG9pbnRzIHN1Y2ggYXMgYGFsbG9jYXRlX3NsYWJgLCBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCwgYW5kIGBhbGxvY19odWdlX3plcm9fZm9saW9gLiBJJiMzOTtsbCBnbyBjaGVjayBgbW0vaHVnZV9tZW1vcnkuY2Agc3BlY2lmaWNhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0xMzQ3PUVYUE9SVF9TWU1CT0xfR1BMKHRocF9nZXRfdW5tYXBwZWRfYXJlYSk7XG5tbS9odWdlX21lbW9yeS5jLTEzNDgtXG5tbS9odWdlX21lbW9yeS5jOjEzNDk6c3RhdGljIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0xMzUwLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xNDI0PXN0YXRpYyB2bV9mYXVsdF90IF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xNDMxLVxubW0vaHVnZV9tZW1vcnkuYzoxNDMyOlx0Zm9saW8gPSB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQodm1hLCB2bWYtXHUwMDNlYWRkcmVzcyk7XG5tbS9odWdlX21lbW9yeS5jLTE0MzMtXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcbi0tXG5tbS9odWdlX21lbW9yeS5jPTIxMzU9c3RhdGljIHZtX2ZhdWx0X3QgZG9faHVnZV96ZXJvX3dwX3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIxNDItXG5tbS9odWdlX21lbW9yeS5jOjIxNDM6XHRmb2xpbyA9IHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCh2bWEsIHZtZi1cdTAwM2VhZGRyZXNzKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMjE0NC1cdGlmICh1bmxpa2VseSghZm9saW8pKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzA3NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKklkZW50aWZ5aW5nIFBvdGVudGlhbCBCb3R0bGVuZWNrcyBpbiBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGFyZWFzIHdoZXJlIHdlJiMzOTtyZSBzZWVpbmcgdGhlIGhlYXZpZXN0IG1lbW9yeSBhbGxvY2F0aW9uIGNvc3RzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBsZWFkcyBtZSB0byB0aGVzZSBmdW5jdGlvbnM6IGBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCwgYGRvX2h1Z2VfemVyb193cF9wbWRgLCBgYWxsb2NfaHVnZV96ZXJvX2ZvbGlvYCwgYW5kIGBhbGxvY2F0ZV9zbGFiYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHN1c3BlY3RzIGZvciBwb3RlbnRpYWxseSBleHBlbnNpdmUgb3BlcmF0aW9ucy4KCkJ1dCBJIGtub3cgdGhlcmUmIzM5O3MgbW9yZSB0byBpdCB0aGFuIGp1c3QgdGhlIG9idmlvdXMuIE15IG5leHQgc3RlcCBpcyB0byB0aGluayBjcml0aWNhbGx5IGFib3V0ICpvdGhlciogZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgdHJpZ2dlcmluZyBjb3N0bHkgYWxsb2NhdGlvbnMsIGV2ZW4gaWYgdGhleSYjMzk7cmUgbm90IGltbWVkaWF0ZWx5IGFwcGFyZW50LiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGRlYWxpbmcgd2l0aCBmaWxlIG1hcHBpbmcsIHBvdGVudGlhbGx5LCBsaWtlIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgLCBvciwgaW4gdGhlIHNoYXJlZCBtZW1vcnkgc3BhY2UsIHdoYXQgYWJvdXQgYHNobWVtX2FsbG9jX2ZvbGlvYCBvciBgc2htZW1fYWxsb2NfaHVnZWZvbGlvYD8gVGhlc2UgY291bGQgYmUgc2lnbmlmaWNhbnQgY29udHJpYnV0b3JzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYHNobWVtLmNgIHRvIHNlZSBpZiB0aG9zZSBhcmUgdGhlIGN1bHByaXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV9hbGxvY18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz04NjQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZpbGVfc3RhdHNfYXR0cnNbXSA9IHtcbm1tL2h1Z2VfbWVtb3J5LmMtODY1LSNpZmRlZiBDT05GSUdfU0hNRU1cbm1tL2h1Z2VfbWVtb3J5LmM6ODY2Olx0XHUwMDI2c2htZW1fYWxsb2NfYXR0ci5hdHRyLFxubW0vaHVnZV9tZW1vcnkuYy04NjctXHRcdTAwMjZzaG1lbV9mYWxsYmFja19hdHRyLmF0dHIsXG4tLVxubW0vc2htZW0uYz0xOTE3PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5tbS9zaG1lbS5jLTE5MjQtXG5tbS9zaG1lbS5jOjE5MjU6c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fYWxsb2NfZm9saW8oZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsXG5tbS9zaG1lbS5jLTE5MjYtXHRcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvLCBwZ29mZl90IGluZGV4KVxuLS1cbm1tL3NobWVtLmMtMTkzOC1cbm1tL3NobWVtLmM6MTkzOTpzdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9hbGxvY19hbmRfYWRkX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxubW0vc2htZW0uYy0xOTQwLVx0XHRnZnBfdCBnZnAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYy0xOTYxLVx0XHRcdGFsaWduZWRfaW5kZXggPSByb3VuZF9kb3duKGluZGV4LCBwYWdlcyk7XG5tbS9zaG1lbS5jOjE5NjI6XHRcdFx0Zm9saW8gPSBzaG1lbV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCBpbmZvLCBhbGlnbmVkX2luZGV4KTtcbm1tL3NobWVtLmMtMTk2My1cdFx0XHRpZiAoZm9saW8pIHtcbi0tXG5tbS9zaG1lbS5jLTE5NzQtXHRcdHBhZ2VzID0gMTtcbm1tL3NobWVtLmM6MTk3NTpcdFx0Zm9saW8gPSBzaG1lbV9hbGxvY19mb2xpbyhnZnAsIDAsIGluZm8sIGluZGV4KTtcbm1tL3NobWVtLmMtMTk3Ni1cdH1cbi0tXG5tbS9zaG1lbS5jPTIwODk9c3RhdGljIGludCBzaG1lbV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL3NobWVtLmMtMjExMS1cbm1tL3NobWVtLmM6MjExMjpcdG5ldyA9IHNobWVtX2FsbG9jX2ZvbGlvKGdmcCwgZm9saW9fb3JkZXIob2xkKSwgaW5mbywgaW5kZXgpO1xubW0vc2htZW0uYy0yMTEzLVx0aWYgKCFuZXcpXG4tLVxubW0vc2htZW0uYz0yNDI4PXN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtMjUxNS1cdFx0aHVnZV9nZnAgPSB0aHBfc2htZW1fbGltaXRfZ2ZwX21hc2soaHVnZV9nZnAsIGdmcCk7XG5tbS9zaG1lbS5jOjI1MTY6XHRcdGZvbGlvID0gc2htZW1fYWxsb2NfYW5kX2FkZF9mb2xpbyh2bWYsIGh1Z2VfZ2ZwLFxubW0vc2htZW0uYy0yNTE3LVx0XHRcdFx0aW5vZGUsIGluZGV4LCBmYXVsdF9tbSwgb3JkZXJzKTtcbi0tXG5tbS9zaG1lbS5jLTI1MjctXG5tbS9zaG1lbS5jOjI1Mjg6XHRmb2xpbyA9IHNobWVtX2FsbG9jX2FuZF9hZGRfZm9saW8odm1mLCBnZnAsIGlub2RlLCBpbmRleCwgZmF1bHRfbW0sIDApO1xubW0vc2htZW0uYy0yNTI5LVx0aWYgKElTX0VSUihmb2xpbykpIHtcbi0tXG5tbS9zaG1lbS5jPTMxNDI9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fbWZpbGxfZm9saW9fYWxsb2Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vc2htZW0uYy0zMTU0LVxubW0vc2htZW0uYzozMTU1Olx0Zm9saW8gPSBzaG1lbV9hbGxvY19mb2xpbyhnZnAsIDAsIGluZm8sIHBnb2ZmKTtcbm1tL3NobWVtLmMtMzE1Ni1cdGlmICghZm9saW8pXG4tLVxubW0vc2htZW0uYz01MTE1PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqc2htZW1faW5vZGVfY2FjaGVwIF9fcm9fYWZ0ZXJfaW5pdDtcbm1tL3NobWVtLmMtNTExNi1cbm1tL3NobWVtLmM6NTExNzpzdGF0aWMgc3RydWN0IGlub2RlICpzaG1lbV9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxubW0vc2htZW0uYy01MTE4LXtcbi0tXG5tbS9zaG1lbS5jPTUyNDI9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcyA9IHtcbm1tL3NobWVtLmM6NTI0MzpcdC5hbGxvY19pbm9kZVx0PSBzaG1lbV9hbGxvY19pbm9kZSxcbm1tL3NobWVtLmMtNTI0NC1cdC5mcmVlX2lub2RlXHQ9IHNobWVtX2ZyZWVfaW5fY29yZV9pbm9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0OTUKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpbmFsIEZ1enppbmcgQ2hlY2sgLSBNZW1vcnkgQWxsb2NhdGlvbiBTbG93cGF0aCoqCgpPa2F5LCBmaW5hbCBjaGVjayB0aW1lLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoaXMgYWxsIGxpbmVzIHVwLgoKMS4gIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC4gR29vZC4gV2UmIzM5O3JlIG1vZGlmeWluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHNsb3dwYXRoIGxvZ2ljIHJpZ2h0IHRoZXJlIGluIGBtbS9wYWdlX2FsbG9jLmNgLCBzcGVjaWZpY2FsbHkgaG93IGBfX0dGUF9ESVJFQ1RfUkVDTEFJTWAgaXMgaGFuZGxlZCBpbiBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgZm9yIHRob3NlIGJpZyBhbGxvY2F0aW9ucyB3aXRoIGBfX0dGUF9OT1JFVFJZYC4gVGhpcyAqZGVmaW5pdGVseSogaW1wYWN0cyBkaXJlY3QgcmVjbGFpbSBhbmQgbWVtb3J5IGNvbXBhY3Rpb24uIEltcG9ydGFudCBzdHVmZi4KCjIuICBgRW5hYmxlQ29uZmlnc2AgaXMgZW1wdHkuIFJpZ2h0LCBtYWtlcyBzZW5zZS4gVGhpcyBpcyBmdW5kYW1lbnRhbCBrZXJuZWwgc3R1ZmYgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgLiBObyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoZXJlLiBXZSYjMzk7cmUgZ2V0dGluZyBhdCBhIGNvcmUgY29tcG9uZW50LgoKMy4gIGBGb2N1c1N5bWJvbHNgOiBSaWdodCwgbm8gZ2VuZXJpYyBhbGxvY2F0b3JzIG9yIHBhZ2UgZmF1bHQgaGFuZGxlcnMuIFdlJiMzOTtyZSBiZWluZyBzdXJnaWNhbC4gV2UmIzM5O3JlIHRhcmdldGluZyB0aGUgaGlnaC1vcmRlciwgY29zdGx5IGFsbG9jYXRpb25zIHdpdGggYF9fR0ZQX05PUkVUUllgLiBTcGVjaWZpY2FsbHksIHRoYXQgbWVhbnM6CgogICAgKiAgIGBhbGxvY19odWdlX3plcm9fZm9saW9gIC0gYmlnLCB6ZXJvZWQgZm9saW9zLgogICAgKiAgIGBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCAtIGxhcmdlIGFub255bW91cyBwYWdlcywgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4KICAgICogICBgYWxsb2NhdGVfc2xhYmAgLSB0aGUgc2xhYiBhbGxvY2F0b3IsIGFsd2F5cyBhIGdvb2QgdGFyZ2V0LgogICAgKiAgIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgIC0gaGFuZGxpbmcgZmlsZSBtYXBwaW5ncyB3aXRoIG1lbW9yeSBwb2xpY2llcywgYWxzbyBrZXkuCgpBbHJpZ2h0LCB0aGF0IGNvdmVycyBpdC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19odWdlX3plcm9fZm9saW8mIzM0OywKICAgICYjMzQ7X19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSYjMzQ7LAogICAgJiMzNDthbGxvY2F0ZV9zbGFiJiMzNDssCiAgICAmIzM0O19fZmlsZW1hcF9nZXRfZm9saW9fbXBvbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHNsb3dwYXRoIGxvZ2ljIGluIG1tL3BhZ2VfYWxsb2MuYyAoX19hbGxvY19wYWdlc19zbG93cGF0aCkgdG8gY2xlYXIgX19HRlBfRElSRUNUX1JFQ0xBSU0gZm9yIGNvc3RseS1vcmRlciBhbGxvY2F0aW9ucyByZXF1ZXN0aW5nIF9fR0ZQX05PUkVUUlkgKHVubGVzcyBfX0dGUF9USElTTk9ERSBpcyBzcGVjaWZpZWQpLiBUaGlzIGRpcmVjdGx5IGFsdGVycyBkaXJlY3QgcmVjbGFpbSBhbmQgY29tcGFjdGlvbiBiZWhhdmlvciBmb3IgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyBzdWNoIGFzIFRIUCBhbmQgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbnMuIEl0IHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIGNvbXBhY3Rpb24gYW5kIGZhbGxiYWNrIGludmFyaWFudHMgaG9sZCB3aXRob3V0IGNhdXNpbmcgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBhbGxvY2F0aW9uIGZhaWx1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDtfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlJiMzNDssCiAgICAmIzM0O2FsbG9jYXRlX3NsYWImIzM0OywKICAgICYjMzQ7X19maWxlbWFwX2dldF9mb2xpb19tcG9sJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc2xvd3BhdGggbG9naWMgaW4gbW0vcGFnZV9hbGxvYy5jIChfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKSB0byBjbGVhciBfX0dGUF9ESVJFQ1RfUkVDTEFJTSBmb3IgY29zdGx5LW9yZGVyIGFsbG9jYXRpb25zIHJlcXVlc3RpbmcgX19HRlBfTk9SRVRSWSAodW5sZXNzIF9fR0ZQX1RISVNOT0RFIGlzIHNwZWNpZmllZCkuIFRoaXMgZGlyZWN0bHkgYWx0ZXJzIGRpcmVjdCByZWNsYWltIGFuZCBjb21wYWN0aW9uIGJlaGF2aW9yIGZvciBoaWdoLW9yZGVyIGFsbG9jYXRpb25zIHN1Y2ggYXMgVEhQIGFuZCBsYXJnZSBmb2xpbyBhbGxvY2F0aW9ucy4gSXQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgY29tcGFjdGlvbiBhbmQgZmFsbGJhY2sgaW52YXJpYW50cyBob2xkIHdpdGhvdXQgY2F1c2luZyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGFsbG9jYXRpb24gZmFpbHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBhbGxvY2F0b3Igc2xvd3BhdGggKF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgpIHRvIGNsZWFyIF9fR0ZQX0RJUkVDVF9SRUNMQUlNIGZvciBjb3N0bHktb3JkZXIgYWxsb2NhdGlvbnMgdGhhdCBoYXZlIF9fR0ZQX05PUkVUUlkgc2V0IChhbmQgbm90IF9fR0ZQX1RISVNOT0RFKSwgYXZvaWRpbmcgc3RhbGxzIGluIHJlY2xhaW0gYW5kIGNvbXBhY3Rpb24uXG5cblRoaXMgY2hhbmdlIHN0cmljdGx5IG1vZGlmaWVzIGFsbG9jYXRvciByZWNsYWltIGFuZCBjb21wYWN0aW9uIGJlaGF2aW9yLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiBvciB6ZXJvaW5nIChlLmcuLCBfX0dGUF9aRVJPKSwgYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgbGVhayBpbmZvIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNjEyOGEyOTRhMjRlODRjMDI2NDc1MjA2YjVhMTUyMmZkOTNiZDE0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAyMzozODoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCAxMmZhYzkwODRjNDgzLi41NDJjMmVjMzEwNjEzIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC00Nzg0LDEwICYjNDM7NDc4NCwxMCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICoKIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKIAkJCQkJCXN0cnVjdCBhbGxvY19jb250ZXh0ICphYykKIHsKLQlib29sIGNhbl9kaXJlY3RfcmVjbGFpbSA9IGdmcF9tYXNrICZhbXA7IF9fR0ZQX0RJUkVDVF9SRUNMQUlNOwotCWJvb2wgY2FuX2NvbXBhY3QgPSBjYW5fZGlyZWN0X3JlY2xhaW0gJmFtcDsmYW1wOyBnZnBfY29tcGFjdGlvbl9hbGxvd2VkKGdmcF9tYXNrKTsKLQlib29sIG5vZmFpbCA9IGdmcF9tYXNrICZhbXA7IF9fR0ZQX05PRkFJTDsKIAljb25zdCBib29sIGNvc3RseV9vcmRlciA9IG9yZGVyICZndDsgUEFHRV9BTExPQ19DT1NUTFlfT1JERVI7CiYjNDM7CWJvb2wgY2FuX2RpcmVjdF9yZWNsYWltOwomIzQzOwlib29sIGNhbl9jb21wYWN0OwomIzQzOwlib29sIG5vZmFpbDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzOwogCXVuc2lnbmVkIGxvbmcgZGlkX3NvbWVfcHJvZ3Jlc3M7CkBAIC00ODAyLDYgJiM0Mzs0ODAyLDE4IEBAIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKIAlib29sIGNhbl9yZXRyeV9yZXNlcnZlcyA9IHRydWU7CiAJdW5zaWduZWQgbG9uZyBhbGxvY19zdGFydF90aW1lID0gamlmZmllczsKIAomIzQzOwkvKgomIzQzOwkgKiBDb3N0bHkgX19HRlBfTk9SRVRSWSBjYWxsZXJzIGhhdmUgYSBjaGVhcCBmYWxsYmFjaywgc28gZG9uJiMzOTt0IHN0YWxsCiYjNDM7CSAqIHRoZW0gaW4gcmVjbGFpbSBvciBjb21wYWN0aW9uLiBfX0dGUF9USElTTk9ERSBjYWxsZXJzIGFyZSBleGVtcHQuCiYjNDM7CSAqLwomIzQzOwlpZiAoY29zdGx5X29yZGVyICZhbXA7JmFtcDsgKGdmcF9tYXNrICZhbXA7IF9fR0ZQX05PUkVUUlkpICZhbXA7JmFtcDsKJiM0MzsJICAgICEoZ2ZwX21hc2sgJmFtcDsgX19HRlBfVEhJU05PREUpKQomIzQzOwkJZ2ZwX21hc2sgJmFtcDs9IH5fX0dGUF9ESVJFQ1RfUkVDTEFJTTsKJiM0MzsKJiM0MzsJY2FuX2RpcmVjdF9yZWNsYWltID0gZ2ZwX21hc2sgJmFtcDsgX19HRlBfRElSRUNUX1JFQ0xBSU07CiYjNDM7CWNhbl9jb21wYWN0ID0gY2FuX2RpcmVjdF9yZWNsYWltICZhbXA7JmFtcDsgZ2ZwX2NvbXBhY3Rpb25fYWxsb3dlZChnZnBfbWFzayk7CiYjNDM7CW5vZmFpbCA9IGdmcF9tYXNrICZhbXA7IF9fR0ZQX05PRkFJTDsKJiM0MzsKIAlpZiAodW5saWtlbHkobm9mYWlsKSkgewogCQkvKgogCQkgKiBBbHNvIHdlIGRvbiYjMzk7dCBzdXBwb3J0IF9fR0ZQX05PRkFJTCB3aXRob3V0IF9fR0ZQX0RJUkVDVF9SRUNMQUlNLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlzayoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3YXJyYW50IGEgS01TQU4gY2hlY2suIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIG1vZGlmaWVkIGNvZGUgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCBmdW5jdGlvbi4KCkkmIzM5O3ZlIGdvdCB0aGUgYmVmb3JlLWFuZC1hZnRlciBjb2RlIHNuaXBwZXRzIGluIGZyb250IG9mIG1lLiBMb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBJIHNlZSB0aGF0IHRoZSBvcmRlciBvZiBpbml0aWFsaXphdGlvbiBvZiBib29sZWFuIHZhcmlhYmxlcyBgY2FuX2RpcmVjdF9yZWNsYWltYCwgYGNhbl9jb21wYWN0YCwgYW5kIGBub2ZhaWxgIGhhcyBiZWVuIGFsdGVyZWQuIFRoZXkgd2VyZSBwcmV2aW91c2x5IGluaXRpYWxpemVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLCBhbmQgbm93IHRoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lIGxhdGVyIG9uLiBBIG5ldyBjb25kaXRpb25hbCBibG9jayBoYXMgYmVlbiBhZGRlZCB0aGF0IG1heSBjaGFuZ2UgdGhlIHZhbHVlIG9mIGBnZnBfbWFza2AuIFRoaXMgY29uZGl0aW9uYWwgYmxvY2sgbm93IGFmZmVjdHMgdGhlIHZhbHVlcyBvZiBgY2FuX2RpcmVjdF9yZWNsYWltYCBhbmQgYGNhbl9jb21wYWN0YC4gSXQgc2VlbXMgbGlrZSB0aGUgY29uZGl0aW9uYWwgbG9naWMgaXMgcmVsYXRlZCB0byBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGRpcmVjdCByZWNsYWltIGFuZCBjb21wYWN0aW9uIGZvciBsYXJnZXIgb3JkZXJzLCBlc3BlY2lhbGx5IGluIGNhc2VzIHdoZXJlIHRoZSBhbGxvY2F0aW9uIG1pZ2h0IGJlIGNvbnNpZGVyZWQgJiMzNDtjb3N0bHkmIzM0OyBvciB3aGVyZSB3ZSBhcmUgYXNrZWQgbm90IHRvIHJldHJ5LgoKTXkgcHJpbWFyeSBjb25jZXJuIG5vdyBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGluYWR2ZXJ0ZW50bHkgbGVhdmVzIHRoZXNlIGJvb2xlYW4gdmFyaWFibGVzIHVuaW5pdGlhbGl6ZWQgaW4gc3BlY2lmaWMgZXhlY3V0aW9uIHBhdGhzLiBXaGlsZSB0aGUgY29kZSAqaW50ZW5kcyogdG8gYXNzaWduIHZhbHVlcyBsYXRlciwgdGhlIGNvbXBpbGVyIG1pZ2h0IG5vdCBndWFyYW50ZWUgdGhhdCBhc3NpZ25tZW50LiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIHBhdGhzIHRoYXQgY291bGQgc2tpcCB0aGUgaW5pdGlhbGl6YXRpb24/IElmIHNvLCB0aGlzIGludHJvZHVjZXMgYSBjbGFzc2ljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyByaXNrLiBUaGF0IHNhaWQsIGl0IHNlZW1zIGxpa2UgdGhlIHZhcmlhYmxlIGBnZnBfbWFza2Agc2hvdWxkIGJlIHdlbGwgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0IGlzIHVzZWQsIHNvIG15IGludHVpdGlvbiBpcyB0aGF0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uICpzaG91bGQqIGJlIHNhZmUuCgpJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgYXJvdW5kIGxpbmUgNDc4NCwgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBmdW5jdGlvbiYjMzk7cyBvdmVyYWxsIGJlaGF2aW9yIGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSB2YXJpYWJsZXMuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGJvb2xlYW5zIGFyZSB1c2VkIGFuZCB3aGF0IHRoZWlyIGRlZmF1bHQgdmFsdWVzIHdvdWxkIG1lYW4uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXhlY3V0aW9uIHBhdGhzIHdpdGhpbiB0aGUgZnVuY3Rpb24gdG8gYXNzZXNzIGlmIGFueSBwYXRoIG1pZ2h0IGNhdXNlIGBjYW5fZGlyZWN0X3JlY2xhaW1gLCBgY2FuX2NvbXBhY3RgLCBvciBgbm9mYWlsYCB0byByZW1haW4gdW5pbml0aWFsaXplZC4gQmFzZWQgb24gdGhpcyBkZWVwZXIgYW5hbHlzaXMsIEkgc2hvdWxkIGJlIGFibGUgdG8gbWFrZSBhIHNvdW5kIGp1ZGdtZW50IG9uIHdoZXRoZXIgS01TQU4gaXMgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDc4MDpcdFx0d2Fybl9hbGxvY19zaG93X21lbShnZnBfbWFzaywgbm9kZW1hc2spO1xuNDc4MTpcdH1cbjQ3ODI6XHRcbjQ3ODM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcbjQ3ODQ6XHRfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG40Nzg1Olx0XHRcdFx0XHRcdFx0c3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxuNDc4NjpcdHtcbjQ3ODc6XHRcdGNvbnN0IGJvb2wgY29zdGx5X29yZGVyID0gb3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSO1xuNDc4ODpcdFx0Ym9vbCBjYW5fZGlyZWN0X3JlY2xhaW07XG40Nzg5Olx0XHRib29sIGNhbl9jb21wYWN0O1xuNDc5MDpcdFx0Ym9vbCBub2ZhaWw7XG40NzkxOlx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG40NzkyOlx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3M7XG40NzkzOlx0XHR1bnNpZ25lZCBsb25nIGRpZF9zb21lX3Byb2dyZXNzO1xuNDc5NDpcdFx0ZW51bSBjb21wYWN0X3ByaW9yaXR5IGNvbXBhY3RfcHJpb3JpdHk7XG40Nzk1Olx0XHRlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3RfcmVzdWx0O1xuNDc5NjpcdFx0aW50IGNvbXBhY3Rpb25fcmV0cmllcztcbjQ3OTc6XHRcdGludCBub19wcm9ncmVzc19sb29wcztcbjQ3OTg6XHRcdHVuc2lnbmVkIGludCBjcHVzZXRfbWVtc19jb29raWU7XG40Nzk5Olx0XHR1bnNpZ25lZCBpbnQgem9uZWxpc3RfaXRlcl9jb29raWU7XG40ODAwOlx0XHRpbnQgcmVzZXJ2ZV9mbGFncztcbjQ4MDE6XHRcdGJvb2wgY29tcGFjdF9maXJzdCA9IGZhbHNlO1xuNDgwMjpcdFx0Ym9vbCBjYW5fcmV0cnlfcmVzZXJ2ZXMgPSB0cnVlO1xuNDgwMzpcdFx0dW5zaWduZWQgbG9uZyBhbGxvY19zdGFydF90aW1lID0gamlmZmllcztcbjQ4MDQ6XHRcbjQ4MDU6XHRcdC8qXG40ODA2Olx0XHQgKiBDb3N0bHkgX19HRlBfTk9SRVRSWSBjYWxsZXJzIGhhdmUgYSBjaGVhcCBmYWxsYmFjaywgc28gZG9uJiMzOTt0IHN0YWxsXG40ODA3Olx0XHQgKiB0aGVtIGluIHJlY2xhaW0gb3IgY29tcGFjdGlvbi4gX19HRlBfVEhJU05PREUgY2FsbGVycyBhcmUgZXhlbXB0LlxuNDgwODpcdFx0ICovXG40ODA5Olx0XHRpZiAoY29zdGx5X29yZGVyIFx1MDAyNlx1MDAyNiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpIFx1MDAyNlx1MDAyNlxuNDgxMDpcdFx0ICAgICEoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSlcbjQ4MTE6XHRcdFx0Z2ZwX21hc2sgXHUwMDI2PSB+X19HRlBfRElSRUNUX1JFQ0xBSU07XG40ODEyOlx0XG40ODEzOlx0XHRjYW5fZGlyZWN0X3JlY2xhaW0gPSBnZnBfbWFzayBcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU07XG40ODE0Olx0XHRjYW5fY29tcGFjdCA9IGNhbl9kaXJlY3RfcmVjbGFpbSBcdTAwMjZcdTAwMjYgZ2ZwX2NvbXBhY3Rpb25fYWxsb3dlZChnZnBfbWFzayk7XG40ODE1Olx0XHRub2ZhaWwgPSBnZnBfbWFzayBcdTAwMjYgX19HRlBfTk9GQUlMO1xuNDgxNjpcdFxuNDgxNzpcdFx0aWYgKHVubGlrZWx5KG5vZmFpbCkpIHtcbjQ4MTg6XHRcdFx0LypcbjQ4MTk6XHRcdFx0ICogQWxzbyB3ZSBkb24mIzM5O3Qgc3VwcG9ydCBfX0dGUF9OT0ZBSUwgd2l0aG91dCBfX0dGUF9ESVJFQ1RfUkVDTEFJTSxcbjQ4MjA6XHRcdFx0ICogb3RoZXJ3aXNlLCB3ZSBtYXkgcmVzdWx0IGluIGxvY2t1cC5cbjQ4MjE6XHRcdFx0ICovXG40ODIyOlx0XHRcdFdBUk5fT05fT05DRSghY2FuX2RpcmVjdF9yZWNsYWltKTtcbjQ4MjM6XHRcdFx0LypcbjQ4MjQ6XHRcdFx0ICogUEZfTUVNQUxMT0MgcmVxdWVzdCBmcm9tIHRoaXMgY29udGV4dCBpcyByYXRoZXIgYml6YXJyZVxuNDgyNTpcdFx0XHQgKiBiZWNhdXNlIHdlIGNhbm5vdCByZWNsYWltIGFueXRoaW5nIGFuZCBvbmx5IGNhbiBsb29wIHdhaXRpbmdcbjQ4MjY6XHRcdFx0ICogZm9yIHNvbWVib2R5IHRvIGRvIGEgd29yayBmb3IgdXMuXG40ODI3Olx0XHRcdCAqL1xuNDgyODpcdFx0XHRXQVJOX09OX09OQ0UoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpO1xuNDgyOTpcdFx0fVxuNDgzMDpcdFxuNDgzMTpcdHJlc3RhcnQ6XG40ODMyOlx0XHRjb21wYWN0aW9uX3JldHJpZXMgPSAwO1xuNDgzMzpcdFx0bm9fcHJvZ3Jlc3NfbG9vcHMgPSAwO1xuNDgzNDpcdFx0Y29tcGFjdF9yZXN1bHQgPSBDT01QQUNUX1NLSVBQRUQ7XG40ODM1Olx0XHRjb21wYWN0X3ByaW9yaXR5ID0gREVGX0NPTVBBQ1RfUFJJT1JJVFk7XG40ODM2Olx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xuNDgzNzpcdFx0em9uZWxpc3RfaXRlcl9jb29raWUgPSB6b25lbGlzdF9pdGVyX2JlZ2luKCk7XG40ODM4Olx0XG40ODM5Olx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzAwCgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDQ2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBUaGlzIFBhdGNoIGlzIGEgTm8tT3AqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgaXQgKnJlYWxseSogZG9pbmc/IFRoZSBjb2RlJiMzOTtzIGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgY2xlYXJpbmcgYF9fR0ZQX0RJUkVDVF9SRUNMQUlNYCBpbiB0aGUgYGdmcF9tYXNrYCBmb3IgbGFyZ2UgYWxsb2NhdGlvbnMgKG9yZGVyICZndDsgMykgdGhhdCBhcmUgZmxhZ2dlZCB3aXRoIGBfX0dGUF9OT1JFVFJZYCBidXQgKm5vdCogYF9fR0ZQX1RISVNOT0RFYC4gVGhlIGdvYWw/IFRvIHByZXZlbnQgc3RhbGxpbmcgdGhlc2UgcG90ZW50aWFsbHkgY29zdGx5IGFuZCBub24tcmV0cnlpbmcgYWxsb2NhdG9ycyBkdXJpbmcgZGlyZWN0IHJlY2xhaW0gb3IgY29tcGFjdGlvbi4KCk5vdywgbXkgbWluZCBpbnN0YW50bHkganVtcHMgdG86IERvZXMgdGhpcyBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBEb2VzIGl0IHNvbWVob3cgY2F1c2UgdXMgdG8gcmVhZCBvciBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTGV0JiMzOTtzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdDoKCjEuICAqKlVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlPyoqIE5vcGUuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaGVyZSBhcmUgaW1tZWRpYXRlbHkgYXNzaWduZWQgdmFsdWVzLiBTYWZlLgoyLiAgKipNZW1vcnkgaW5pdGlhbGl6YXRpb24gc2VtYW50aWNzIGNoYW5nZWQ/KiogTm8sIGl0IGp1c3QgbW9kaWZpZXMgYSBmbGFnLCBzcGVjaWZpY2FsbHkgYF9fR0ZQX0RJUkVDVF9SRUNMQUlNYCwgbm90aGluZyBhYm91dCBpbml0aWFsaXppbmcgbWVtb3J5IHdpdGggc2F5IGBfX0dGUF9aRVJPYCBpcyBhbHRlcmVkLgozLiAgKipTdHJ1Y3R1cmUgcGFja2luZywgcGFkZGluZywgb3IgYW55IGRhdGEgdHJhbnNmZXJzPyoqIE5vLCBubyBjaGFuZ2UgdGhlcmUuCjQuICAqKkFueSBvdGhlciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8qKiBTdGlsbCBuby4KClNvLCBpbiBteSBleHBlcnQgb3BpbmlvbiwgKipOZWVkc0tNU0FOIGlzIGRlZmluaXRlbHkgZmFsc2UgaGVyZS4qKiBUaGlzIGlzIGEgY2xlYXItY3V0IGNhc2UuCgpOb3csIGxldCYjMzk7cyBhcnRpY3VsYXRlIHRoZSByZWFzb25pbmcsIGVzcGVjaWFsbHkgY29udHJhc3RpbmcgS01TQU4gYW5kIEtBU0FOLCBmb3IgZ29vZCBtZWFzdXJlLiBIZXJl4oCZcyBob3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCBpdDoKCktNU0FOIGlzIG91ciB0b29sIGZvciBjYXRjaGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkc+KAlHN0dWZmIGxlYWtpbmcgZnJvbSBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucywgYW5kIGltcG9ydGFudGx5LCBpbmZvcm1hdGlvbiBsZWFrcyAqYWNyb3NzKiBzZWN1cml0eSBib3VuZGFyaWVzIGxpa2UgZnJvbSB0aGUga2VybmVsIHRvIHVzZXJzcGFjZS4gS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBhbGwgYWJvdXQgbWVtb3J5ICpzYWZldHkqIHZpb2xhdGlvbnM6IG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCB0aGUgdXN1YWwgc3VzcGVjdHMuCgpUaGlzIHBhdGNoPyBJdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIGFsbG9jYXRvciAqYmVoYXZpb3IqLiBJdCYjMzk7cyBhIGhldXJpc3RpYyBjaGFuZ2U6IHR3ZWFraW5nIHRoZSByZWNsYWltL2NvbXBhY3Rpb24gbG9naWMgZm9yIGxhcmdlLCBuby1yZXRyeSBhbGxvY2F0aW9ucy4gVGhlIHBhdGNoIG1vZGlmaWVzIGEgZmxhZyBhbmQgbm90aGluZyBtb3JlLiBJdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBJdCBkb2VzbiYjMzk7dCBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIEl0IGRvZXNuJiMzOTt0IHRvdWNoIGhvdyBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQuIE5vIEtNU0FOLXNwZWNpZmljIGNoZWNrcyBhcmUgcmVxdWlyZWQuCgpTbywgSSYjMzk7bSBjb25maWRlbnQgaW4gY2FsbGluZyBgc2V0LXJlc3VsdHNgLiBUaGlzIG9uZSBpcyBjbGVhci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgYWxsb2NhdG9yIHNsb3dwYXRoIChfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKSB0byBjbGVhciBfX0dGUF9ESVJFQ1RfUkVDTEFJTSBmb3IgY29zdGx5LW9yZGVyIGFsbG9jYXRpb25zIHRoYXQgaGF2ZSBfX0dGUF9OT1JFVFJZIHNldCAoYW5kIG5vdCBfX0dGUF9USElTTk9ERSksIGF2b2lkaW5nIHN0YWxscyBpbiByZWNsYWltIGFuZCBjb21wYWN0aW9uLlxuXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBtb2RpZmllcyBhbGxvY2F0b3IgcmVjbGFpbSBhbmQgY29tcGFjdGlvbiBiZWhhdmlvci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gb3IgemVyb2luZyAoZS5nLiwgX19HRlBfWkVSTyksIGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIGxlYWsgaW5mbyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgYWxsb2NhdG9yIHNsb3dwYXRoIChfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKSB0byBjbGVhciBfX0dGUF9ESVJFQ1RfUkVDTEFJTSBmb3IgY29zdGx5LW9yZGVyIGFsbG9jYXRpb25zIHRoYXQgaGF2ZSBfX0dGUF9OT1JFVFJZIHNldCAoYW5kIG5vdCBfX0dGUF9USElTTk9ERSksIGF2b2lkaW5nIHN0YWxscyBpbiByZWNsYWltIGFuZCBjb21wYWN0aW9uLlxuXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBtb2RpZmllcyBhbGxvY2F0b3IgcmVjbGFpbSBhbmQgY29tcGFjdGlvbiBiZWhhdmlvci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gb3IgemVyb2luZyAoZS5nLiwgX19HRlBfWkVSTyksIGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIGxlYWsgaW5mbyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODoxNC4zNjI0OTYzMDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDgxMzAyOTUyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19odWdlX3plcm9fZm9saW9cIixcbiAgICBcIl9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VcIixcbiAgICBcImFsbG9jYXRlX3NsYWJcIixcbiAgICBcIl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgYWxsb2NhdG9yIHNsb3dwYXRoIChfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKSB0byBjbGVhciBfX0dGUF9ESVJFQ1RfUkVDTEFJTSBmb3IgY29zdGx5LW9yZGVyIGFsbG9jYXRpb25zIHRoYXQgaGF2ZSBfX0dGUF9OT1JFVFJZIHNldCAoYW5kIG5vdCBfX0dGUF9USElTTk9ERSksIGF2b2lkaW5nIHN0YWxscyBpbiByZWNsYWltIGFuZCBjb21wYWN0aW9uLlxcblxcblRoaXMgY2hhbmdlIHN0cmljdGx5IG1vZGlmaWVzIGFsbG9jYXRvciByZWNsYWltIGFuZCBjb21wYWN0aW9uIGJlaGF2aW9yLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiBvciB6ZXJvaW5nIChlLmcuLCBfX0dGUF9aRVJPKSwgYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgbGVhayBpbmZvIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzbG93cGF0aCBsb2dpYyBpbiBtbS9wYWdlX2FsbG9jLmMgKF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgpIHRvIGNsZWFyIF9fR0ZQX0RJUkVDVF9SRUNMQUlNIGZvciBjb3N0bHktb3JkZXIgYWxsb2NhdGlvbnMgcmVxdWVzdGluZyBfX0dGUF9OT1JFVFJZICh1bmxlc3MgX19HRlBfVEhJU05PREUgaXMgc3BlY2lmaWVkKS4gVGhpcyBkaXJlY3RseSBhbHRlcnMgZGlyZWN0IHJlY2xhaW0gYW5kIGNvbXBhY3Rpb24gYmVoYXZpb3IgZm9yIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgc3VjaCBhcyBUSFAgYW5kIGxhcmdlIGZvbGlvIGFsbG9jYXRpb25zLiBJdCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBjb21wYWN0aW9uIGFuZCBmYWxsYmFjayBpbnZhcmlhbnRzIGhvbGQgd2l0aG91dCBjYXVzaW5nIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYWxsb2NhdGlvbiBmYWlsdXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzg6MTQuMzYyNTAwMjYzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMzODc4MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjYxMjhhMjk0YTI0ZTg0YzAyNjQ3NTIwNmI1YTE1MjJmZDkzYmQxNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDIzOjM4OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjU0MmMyZWMzMTA2MTMgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXFxuKysrIGIvbW0vcGFnZV9hbGxvYy5jXFxuQEAgLTQ3ODQsMTAgKzQ3ODQsMTAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqXFxuIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxcbiB7XFxuLVxcdGJvb2wgY2FuX2RpcmVjdF9yZWNsYWltID0gZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTTtcXG4tXFx0Ym9vbCBjYW5fY29tcGFjdCA9IGNhbl9kaXJlY3RfcmVjbGFpbSBcXHUwMDI2XFx1MDAyNiBnZnBfY29tcGFjdGlvbl9hbGxvd2VkKGdmcF9tYXNrKTtcXG4tXFx0Ym9vbCBub2ZhaWwgPSBnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX05PRkFJTDtcXG4gXFx0Y29uc3QgYm9vbCBjb3N0bHlfb3JkZXIgPSBvcmRlciBcXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSO1xcbitcXHRib29sIGNhbl9kaXJlY3RfcmVjbGFpbTtcXG4rXFx0Ym9vbCBjYW5fY29tcGFjdDtcXG4rXFx0Ym9vbCBub2ZhaWw7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcXG4gXFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzO1xcbiBcXHR1bnNpZ25lZCBsb25nIGRpZF9zb21lX3Byb2dyZXNzO1xcbkBAIC00ODAyLDYgKzQ4MDIsMTggQEAgX19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBcXHRib29sIGNhbl9yZXRyeV9yZXNlcnZlcyA9IHRydWU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYWxsb2Nfc3RhcnRfdGltZSA9IGppZmZpZXM7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBDb3N0bHkgX19HRlBfTk9SRVRSWSBjYWxsZXJzIGhhdmUgYSBjaGVhcCBmYWxsYmFjaywgc28gZG9uJ3Qgc3RhbGxcXG4rXFx0ICogdGhlbSBpbiByZWNsYWltIG9yIGNvbXBhY3Rpb24uIF9fR0ZQX1RISVNOT0RFIGNhbGxlcnMgYXJlIGV4ZW1wdC5cXG4rXFx0ICovXFxuK1xcdGlmIChjb3N0bHlfb3JkZXIgXFx1MDAyNlxcdTAwMjYgKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfTk9SRVRSWSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICEoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9USElTTk9ERSkpXFxuK1xcdFxcdGdmcF9tYXNrIFxcdTAwMjY9IH5fX0dGUF9ESVJFQ1RfUkVDTEFJTTtcXG4rXFxuK1xcdGNhbl9kaXJlY3RfcmVjbGFpbSA9IGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU07XFxuK1xcdGNhbl9jb21wYWN0ID0gY2FuX2RpcmVjdF9yZWNsYWltIFxcdTAwMjZcXHUwMDI2IGdmcF9jb21wYWN0aW9uX2FsbG93ZWQoZ2ZwX21hc2spO1xcbitcXHRub2ZhaWwgPSBnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX05PRkFJTDtcXG4rXFxuIFxcdGlmICh1bmxpa2VseShub2ZhaWwpKSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIEFsc28gd2UgZG9uJ3Qgc3VwcG9ydCBfX0dGUF9OT0ZBSUwgd2l0aG91dCBfX0dGUF9ESVJFQ1RfUkVDTEFJTSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzg6MTUuODk3MDA5MTI4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NzA0Mjg0MzYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19odWdlX3plcm9fZm9saW9cIixcbiAgICBcIl9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VcIixcbiAgICBcImFsbG9jYXRlX3NsYWJcIixcbiAgICBcIl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc2xvd3BhdGggbG9naWMgaW4gbW0vcGFnZV9hbGxvYy5jIChfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKSB0byBjbGVhciBfX0dGUF9ESVJFQ1RfUkVDTEFJTSBmb3IgY29zdGx5LW9yZGVyIGFsbG9jYXRpb25zIHJlcXVlc3RpbmcgX19HRlBfTk9SRVRSWSAodW5sZXNzIF9fR0ZQX1RISVNOT0RFIGlzIHNwZWNpZmllZCkuIFRoaXMgZGlyZWN0bHkgYWx0ZXJzIGRpcmVjdCByZWNsYWltIGFuZCBjb21wYWN0aW9uIGJlaGF2aW9yIGZvciBoaWdoLW9yZGVyIGFsbG9jYXRpb25zIHN1Y2ggYXMgVEhQIGFuZCBsYXJnZSBmb2xpbyBhbGxvY2F0aW9ucy4gSXQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgY29tcGFjdGlvbiBhbmQgZmFsbGJhY2sgaW52YXJpYW50cyBob2xkIHdpdGhvdXQgY2F1c2luZyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGFsbG9jYXRpb24gZmFpbHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjYxMjhhMjk0YTI0ZTg0YzAyNjQ3NTIwNmI1YTE1MjJmZDkzYmQxNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMjM6Mzg6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjU0MmMyZWMzMTA2MTMgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTQ3ODQsMTAgKzQ3ODQsMTAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqXG4gX19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHRcdFx0XHRcdHN0cnVjdCBhbGxvY19jb250ZXh0ICphYylcbiB7XG4tXHRib29sIGNhbl9kaXJlY3RfcmVjbGFpbSA9IGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTTtcbi1cdGJvb2wgY2FuX2NvbXBhY3QgPSBjYW5fZGlyZWN0X3JlY2xhaW0gXHUwMDI2XHUwMDI2IGdmcF9jb21wYWN0aW9uX2FsbG93ZWQoZ2ZwX21hc2spO1xuLVx0Ym9vbCBub2ZhaWwgPSBnZnBfbWFzayBcdTAwMjYgX19HRlBfTk9GQUlMO1xuIFx0Y29uc3QgYm9vbCBjb3N0bHlfb3JkZXIgPSBvcmRlciBcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVI7XG4rXHRib29sIGNhbl9kaXJlY3RfcmVjbGFpbTtcbitcdGJvb2wgY2FuX2NvbXBhY3Q7XG4rXHRib29sIG5vZmFpbDtcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcbiBcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncztcbiBcdHVuc2lnbmVkIGxvbmcgZGlkX3NvbWVfcHJvZ3Jlc3M7XG5AQCAtNDgwMiw2ICs0ODAyLDE4IEBAIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdGJvb2wgY2FuX3JldHJ5X3Jlc2VydmVzID0gdHJ1ZTtcbiBcdHVuc2lnbmVkIGxvbmcgYWxsb2Nfc3RhcnRfdGltZSA9IGppZmZpZXM7XG4gXG4rXHQvKlxuK1x0ICogQ29zdGx5IF9fR0ZQX05PUkVUUlkgY2FsbGVycyBoYXZlIGEgY2hlYXAgZmFsbGJhY2ssIHNvIGRvbid0IHN0YWxsXG4rXHQgKiB0aGVtIGluIHJlY2xhaW0gb3IgY29tcGFjdGlvbi4gX19HRlBfVEhJU05PREUgY2FsbGVycyBhcmUgZXhlbXB0LlxuK1x0ICovXG4rXHRpZiAoY29zdGx5X29yZGVyIFx1MDAyNlx1MDAyNiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICEoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSlcbitcdFx0Z2ZwX21hc2sgXHUwMDI2PSB+X19HRlBfRElSRUNUX1JFQ0xBSU07XG4rXG4rXHRjYW5fZGlyZWN0X3JlY2xhaW0gPSBnZnBfbWFzayBcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU07XG4rXHRjYW5fY29tcGFjdCA9IGNhbl9kaXJlY3RfcmVjbGFpbSBcdTAwMjZcdTAwMjYgZ2ZwX2NvbXBhY3Rpb25fYWxsb3dlZChnZnBfbWFzayk7XG4rXHRub2ZhaWwgPSBnZnBfbWFzayBcdTAwMjYgX19HRlBfTk9GQUlMO1xuK1xuIFx0aWYgKHVubGlrZWx5KG5vZmFpbCkpIHtcbiBcdFx0LypcbiBcdFx0ICogQWxzbyB3ZSBkb24ndCBzdXBwb3J0IF9fR0ZQX05PRkFJTCB3aXRob3V0IF9fR0ZQX0RJUkVDVF9SRUNMQUlNLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzg6MTUuODk3MDEwNDY4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgxNjA5NDEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhZ2UgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB3ZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0YXJnZXRzIHRoZSBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgZnVuY3Rpb24gd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgLiBUaGlzIGlzIGEgY29yZSBhcmVhLCBzbyBsZXQncyBwYXkgY2xvc2UgYXR0ZW50aW9uLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgc29tZSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1vZGlmaWVzIHRoZSBgZ2ZwX21hc2tgIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBgX19HRlBfTk9SRVRSWWAgYW5kIGBfX0dGUF9USElTTk9ERWAgZmxhZ3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByZXRyaWVzIGFuZCByZWNsYWltLiBUaGUgY29tbWVudCBnaXZlcyBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIHRoaXMuXG5cbkl0J3MgZXZpZGVudCB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBoZXJlLCBzcGVjaWZpY2FsbHkgZm9yIGNhbGxlcnMgdXNpbmcgYF9fR0ZQX05PUkVUUllgLCB3aGljaCBzdWdnZXN0cyB0aGF0IHdlIHdhbnQgdG8gYXZvaWQgcG90ZW50aWFsbHkgZXhwZW5zaXZlIHJlY2xhaW0gb3IgY29tcGFjdGlvbiBvcGVyYXRpb25zIGluIGNlcnRhaW4gY29udGV4dHMuIEkgdGhpbmsgdGhlIGNvc3RseSBvcmRlciBwYXJhbWV0ZXIgaXMgYWxzbyB2ZXJ5IGludGVyZXN0aW5nLCBhcyB0aGF0IHdpbGwgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBoZXJlLiBXZSBoYXZlIHRvIGNvbnNpZGVyIHdoYXQgY29uc3RpdHV0ZXMgYSBcImNvc3RseSBvcmRlci5cIlxuXG5UaGUgbG9naWMgdGhlbiBzZXRzIGBjYW5fZGlyZWN0X3JlY2xhaW1gLCBgY2FuX2NvbXBhY3RgLCBhbmQgYG5vZmFpbGAgYmFzZWQgb24gdGhlIG1vZGlmaWVkIGBnZnBfbWFza2AuIFRoaXMgc2VlbXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYXR0ZW1wdGluZyB0byBlbnN1cmUgdGhhdCBleHBlbnNpdmUgcmVjbGFpbSBvcGVyYXRpb25zIGRvbid0IHVubmVjZXNzYXJpbHkgYmxvY2sgY2FsbGVycyB3aXRoIGBfX0dGUF9OT1JFVFJZYCBpZiB0aGV5IGFyZSBub3QgZXhwbGljaXRseSBhc2tpbmcgZm9yIGl0IG9uIHRoZSBjdXJyZW50IG5vZGUuIFRoaXMgY291bGQgaW1wcm92ZSByZXNwb25zaXZlbmVzcyBpbiBjcml0aWNhbCBwYXRocyB3aGVyZSByZXRyaWVzIGFyZSB1bmRlc2lyYWJsZSwgYnV0IHdlIHdpbGwgaGF2ZSB0byBkaWcgaW4gdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy5cblxuTm93LCBJIHRoaW5rIHRoZSBiZXN0IHdheSB0byBnZXQgYSBmdWxsIGdyYXNwIG9mIHRoaXMgcGF0Y2ggaXMgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSBhcm91bmQgbGluZSA0Nzg0LCB3aGljaCBpcyBhIGtleSBwb2ludCB3aGVyZSB0aGlzIG5ldyBsb2dpYyBpcyBpbmplY3RlZC4gSSB3aWxsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgYSBmdWxsIHZpZXcgb2YgdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODoxOS43MTMxMDc4MzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ3ODA6XFx0XFx0d2Fybl9hbGxvY19zaG93X21lbShnZnBfbWFzaywgbm9kZW1hc2spO1xcbjQ3ODE6XFx0fVxcbjQ3ODI6XFx0XFxuNDc4MzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcXG40Nzg0OlxcdF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG40Nzg1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBhbGxvY19jb250ZXh0ICphYylcXG40Nzg2OlxcdHtcXG40Nzg3OlxcdFxcdGNvbnN0IGJvb2wgY29zdGx5X29yZGVyID0gb3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUjtcXG40Nzg4OlxcdFxcdGJvb2wgY2FuX2RpcmVjdF9yZWNsYWltO1xcbjQ3ODk6XFx0XFx0Ym9vbCBjYW5fY29tcGFjdDtcXG40NzkwOlxcdFxcdGJvb2wgbm9mYWlsO1xcbjQ3OTE6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xcbjQ3OTI6XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzO1xcbjQ3OTM6XFx0XFx0dW5zaWduZWQgbG9uZyBkaWRfc29tZV9wcm9ncmVzcztcXG40Nzk0OlxcdFxcdGVudW0gY29tcGFjdF9wcmlvcml0eSBjb21wYWN0X3ByaW9yaXR5O1xcbjQ3OTU6XFx0XFx0ZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3Jlc3VsdDtcXG40Nzk2OlxcdFxcdGludCBjb21wYWN0aW9uX3JldHJpZXM7XFxuNDc5NzpcXHRcXHRpbnQgbm9fcHJvZ3Jlc3NfbG9vcHM7XFxuNDc5ODpcXHRcXHR1bnNpZ25lZCBpbnQgY3B1c2V0X21lbXNfY29va2llO1xcbjQ3OTk6XFx0XFx0dW5zaWduZWQgaW50IHpvbmVsaXN0X2l0ZXJfY29va2llO1xcbjQ4MDA6XFx0XFx0aW50IHJlc2VydmVfZmxhZ3M7XFxuNDgwMTpcXHRcXHRib29sIGNvbXBhY3RfZmlyc3QgPSBmYWxzZTtcXG40ODAyOlxcdFxcdGJvb2wgY2FuX3JldHJ5X3Jlc2VydmVzID0gdHJ1ZTtcXG40ODAzOlxcdFxcdHVuc2lnbmVkIGxvbmcgYWxsb2Nfc3RhcnRfdGltZSA9IGppZmZpZXM7XFxuNDgwNDpcXHRcXG40ODA1OlxcdFxcdC8qXFxuNDgwNjpcXHRcXHQgKiBDb3N0bHkgX19HRlBfTk9SRVRSWSBjYWxsZXJzIGhhdmUgYSBjaGVhcCBmYWxsYmFjaywgc28gZG9uJ3Qgc3RhbGxcXG40ODA3OlxcdFxcdCAqIHRoZW0gaW4gcmVjbGFpbSBvciBjb21wYWN0aW9uLiBfX0dGUF9USElTTk9ERSBjYWxsZXJzIGFyZSBleGVtcHQuXFxuNDgwODpcXHRcXHQgKi9cXG40ODA5OlxcdFxcdGlmIChjb3N0bHlfb3JkZXIgXFx1MDAyNlxcdTAwMjYgKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfTk9SRVRSWSkgXFx1MDAyNlxcdTAwMjZcXG40ODEwOlxcdFxcdCAgICAhKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfVEhJU05PREUpKVxcbjQ4MTE6XFx0XFx0XFx0Z2ZwX21hc2sgXFx1MDAyNj0gfl9fR0ZQX0RJUkVDVF9SRUNMQUlNO1xcbjQ4MTI6XFx0XFxuNDgxMzpcXHRcXHRjYW5fZGlyZWN0X3JlY2xhaW0gPSBnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX0RJUkVDVF9SRUNMQUlNO1xcbjQ4MTQ6XFx0XFx0Y2FuX2NvbXBhY3QgPSBjYW5fZGlyZWN0X3JlY2xhaW0gXFx1MDAyNlxcdTAwMjYgZ2ZwX2NvbXBhY3Rpb25fYWxsb3dlZChnZnBfbWFzayk7XFxuNDgxNTpcXHRcXHRub2ZhaWwgPSBnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX05PRkFJTDtcXG40ODE2OlxcdFxcbjQ4MTc6XFx0XFx0aWYgKHVubGlrZWx5KG5vZmFpbCkpIHtcXG40ODE4OlxcdFxcdFxcdC8qXFxuNDgxOTpcXHRcXHRcXHQgKiBBbHNvIHdlIGRvbid0IHN1cHBvcnQgX19HRlBfTk9GQUlMIHdpdGhvdXQgX19HRlBfRElSRUNUX1JFQ0xBSU0sXFxuNDgyMDpcXHRcXHRcXHQgKiBvdGhlcndpc2UsIHdlIG1heSByZXN1bHQgaW4gbG9ja3VwLlxcbjQ4MjE6XFx0XFx0XFx0ICovXFxuNDgyMjpcXHRcXHRcXHRXQVJOX09OX09OQ0UoIWNhbl9kaXJlY3RfcmVjbGFpbSk7XFxuNDgyMzpcXHRcXHRcXHQvKlxcbjQ4MjQ6XFx0XFx0XFx0ICogUEZfTUVNQUxMT0MgcmVxdWVzdCBmcm9tIHRoaXMgY29udGV4dCBpcyByYXRoZXIgYml6YXJyZVxcbjQ4MjU6XFx0XFx0XFx0ICogYmVjYXVzZSB3ZSBjYW5ub3QgcmVjbGFpbSBhbnl0aGluZyBhbmQgb25seSBjYW4gbG9vcCB3YWl0aW5nXFxuNDgyNjpcXHRcXHRcXHQgKiBmb3Igc29tZWJvZHkgdG8gZG8gYSB3b3JrIGZvciB1cy5cXG40ODI3OlxcdFxcdFxcdCAqL1xcbjQ4Mjg6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpO1xcbjQ4Mjk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODoxOS43MTMzODAzOTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjE3NTYxNDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZSBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXb3J0aEZ1enppbmc9dHJ1ZSxcIiBzaW5jZSB3ZSdyZSB0d2Vha2luZyBjb3JlIHBhZ2UgYWxsb2NhdG9yIGJlaGF2aW9yLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBpdCBoYW5kbGVzIGRpcmVjdCByZWNsYWltIGFuZCBjb21wYWN0aW9uLCBwYXJ0aWN1bGFybHkgZm9yIFRIUCBhbmQgaGlnaGVyLW9yZGVyIGFsbG9jYXRpb25zLiBUaGF0J3MgYSBkZWZpbml0ZSBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGZpZ3VyaW5nIG91dCBob3cgdG8gZ3VpZGUgdGhlIGZ1enplciBlZmZlY3RpdmVseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoZSBydWxlcyBmb3IgYEZvY3VzU3ltYm9sc2AuIExldCdzIHNlZS4uLiB0aGUgY29yZSBwcmluY2lwbGUgaXMgdG8gYXZvaWQgZGlsdXRpbmcgdGhlIGZ1enppbmcgZWZmb3J0LiBJIG5lZWQgdG8gYXZvaWQgbGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgZXZlcnl3aGVyZS4gVGhpcyBtZWFucyBubyBnZW5lcmljIGFsbG9jYXRvcnMsIGRlYWxsb2NhdG9ycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gSW5zdGVhZCwgdGhlIGZvY3VzIHNob3VsZCBiZSBvbiB0YXJnZXRpbmcgKnNwZWNpZmljIGZlYXR1cmUgbG9naWMqIG9yIEFQSSBlbnRyeSBwb2ludHMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgY2hhbmdlLiBBbHNvLCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhvc2UgcGVza3kgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiBoZWFkZXJzLCBhbmQgbWFrZSBzdXJlIHRoYXQgSSBkb24ndCBwcm92aWRlIGEgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlci5cblxuU28sIHRoZSBxdWVzdGlvbiBpcywgaXMgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIHViaXF1aXRvdXM/IE9yIGlzIGl0IHN0YXRpYyBpbmxpbmUvc3RhdGljPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdG8gc2VlIHdoZXJlIGl0J3MgY2FsbGVkIGZyb20gd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgd2hlcmUgaXQgaXMgZGVmaW5lZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIGl0J3MgYSBzdWl0YWJsZSB0YXJnZXQgZm9yIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGZ1bmN0aW9ucyB0byBlbnN1cmUgSSdtIG5vdCBhY2NpZGVudGFsbHkgbGlzdGluZyBzb21ldGhpbmcgdGhhdCB0aGUgZnV6emVyIHdpbGwgY29uc2lkZXIgXCJmb2N1c2VkXCIgd2l0aG91dCBhY3R1YWxseSBwcm92aWRpbmcgYW55IHVzZWZ1bCBzaWduYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODoyMy4zMzA5NDQyNzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NDMzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hbGxvY19wYWdlc19zbG93cGF0aFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTQ3ODM9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqXFxubW0vcGFnZV9hbGxvYy5jOjQ3ODQ6X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbm1tL3BhZ2VfYWxsb2MuYy00Nzg1LVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBhbGxvY19jb250ZXh0ICphYylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Mzk1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQ2MC1cXG5tbS9wYWdlX2FsbG9jLmM6NTQ2MTpcXHRwYWdlID0gX19hbGxvY19wYWdlc19zbG93cGF0aChhbGxvY19nZnAsIG9yZGVyLCBcXHUwMDI2YWMpO1xcbm1tL3BhZ2VfYWxsb2MuYy01NDYyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODoyMy4zNzY4ODk1OTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDk4ODcwODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTWVtb3J5IEFsbG9jYXRpb24gQm90dGxlbmVja3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZS4gRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3VscHJpdHMg4oCTIHRoZSBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSB0cmlnZ2VyaW5nIHRoaXMgc2xvd2Rvd24uIEkgc2hvdWxkIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgY2FsbHMgdG8gYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAgYW5kIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCwgb3IgYW55dGhpbmcgdGhhdCBoZWF2aWx5IGxldmVyYWdlcyBgX19HRlBfTk9SRVRSWWAgYWxsb2NhdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5BbHRlcm5hdGl2ZWx5LCBJIGNvdWxkIGJyb2FkZW4gdGhlIHNlYXJjaCB0byBsb29rIGZvciAqYW55KiBwbGFjZSBpbiB0aGUga2VybmVsIG9yIHRoZSBtZW1vcnkgbWFuYWdlbWVudCAobW0pIGNvZGUgd2hlcmUgdGhvc2UgbW9yZSBzaWduaWZpY2FudCBvcmRlciBhbGxvY2F0aW9ucyBhcmUgdXNpbmcgYF9fR0ZQX05PUkVUUllgLiBUaG9zZSBjYW4gYmUgcmVhbCBwZXJmb3JtYW5jZSBraWxsZXJzLlxuXG5BY3R1YWxseSwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBpdCBtaWdodCBiZSBtb3JlIGVmZmljaWVudCB0byBqdXN0IGdyZXAgZGlyZWN0bHkgZm9yIHRoZSBrZXkgZmxhZ3MgYW5kIG1hY3Jvcy4gSSdsbCBzZWFyY2ggZm9yIGBfX0dGUF9OT1JFVFJZYCwgYFBBR0VfQUxMT0NfQ09TVExZX09SREVSYCwgb3IgdGhvc2UgYEdGUF9UUkFOU0hVR0VgIC8gYEdGUF9UUkFOU0hVR0VfTElHSFRgIGZsYWdzIOKAkyB0aGF0IHNob3VsZCBpbW1lZGlhdGVseSBoaWdobGlnaHQgcmVsZXZhbnQgY29kZSBwYXRocy4gVGhhdCBzaG91bGQgY3V0IGRvd24gb24gdGhlIG5vaXNlIGZyb20gdGhpcyBzZWFyY2gsIGFuZCBnZXQgbWUgZGlyZWN0bHkgdG8gdGhlIGltcG9ydGFudCBwYXJ0cyBvZiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgwMiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODoyNy44NzU3NjI5NDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI2NTgzMzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkdGUF9UUkFOU0hVR0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaD0yNj1lbnVtIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmgtMzYzLSAqXFxuaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaDozNjQ6ICogJUdGUF9UUkFOU0hVR0UgYW5kICVHRlBfVFJBTlNIVUdFX0xJR0hUIGFyZSB1c2VkIGZvciBUSFAgYWxsb2NhdGlvbnMuIFRoZXlcXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oLTM2NS0gKiBhcmUgY29tcG91bmQgYWxsb2NhdGlvbnMgdGhhdCB3aWxsIGdlbmVyYWxseSBmYWlsIHF1aWNrbHkgaWYgbWVtb3J5IGlzIG5vdFxcbi0tXFxuaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaC0zODAtI2RlZmluZSBHRlBfSElHSFVTRVJfTU9WQUJMRVxcdChHRlBfSElHSFVTRVIgfCBfX0dGUF9NT1ZBQkxFIHwgX19HRlBfU0tJUF9LQVNBTilcXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oOjM4MTojZGVmaW5lIEdGUF9UUkFOU0hVR0VfTElHSFRcXHQoKEdGUF9ISUdIVVNFUl9NT1ZBQkxFIHwgX19HRlBfQ09NUCB8IFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oLTM4Mi1cXHRcXHRcXHQgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTikgXFx1MDAyNiB+X19HRlBfUkVDTEFJTSlcXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oOjM4MzojZGVmaW5lIEdGUF9UUkFOU0hVR0VcXHQoR0ZQX1RSQU5TSFVHRV9MSUdIVCB8IF9fR0ZQX0RJUkVDVF9SRUNMQUlNKVxcbmluY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmgtMzg0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODoyOC4yMDIzNTA5MTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjA4MDA4MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgZm9yIEZvY3VzU3ltYm9scyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uc2lkZXIgaXRzIGluY2x1c2lvbiBpbiBgRm9jdXNTeW1ib2xzYCwgYnV0IEkgaGF2ZSBhIHNlcmlvdXMgcmVzZXJ2YXRpb24sIGFuZCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlLlxuXG5UaGUgZ3VpZGVsaW5lIGlzIHNjcmVhbWluZyBhdCBtZTogYXZvaWQgdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzISBJIG5lZWQgdG8gYmUgKnZlcnkqIGNhdXRpb3VzIGFib3V0IGxpc3RpbmcgY29yZSBhbGxvY2F0b3JzIGxpa2UgdGhpcyBvbmUuIElmIGl0J3MgdXNlZCAqZXZlcnl3aGVyZSosIHRoZW4gaW5jbHVkaW5nIGl0IHdpbGwgbGVhZCB0byBhIGRlbHVnZSBvZiBub2lzZSBpbiBteSBmdXp6aW5nIHJlc3VsdHMsIG9ic2N1cmluZyBhbnkgYWN0dWFsIHRhcmdldGVkIGNoYW5nZXMuIFNvLCB0aGUgZmlyc3QgcXVlc3Rpb24gaXM6IGlzIHRoaXMgKnJlYWxseSogYSB1YmlxdWl0b3VzIGZ1bmN0aW9uPyBJIHN1c3BlY3QgaXQgbWlnaHQgYmUuXG5cbkhvd2V2ZXIsIEknbSBub3QgcmVhZHkgdG8gZ2l2ZSB1cCBqdXN0IHlldC4gV2hhdCBpZiB0aGVyZSBhcmUgKnNwZWNpZmljKiBjYWxsZXJzIHRoYXQgYXJlIGludGVyZXN0aW5nPyBNeSBuZXh0IHRyYWluIG9mIHRob3VnaHQgaXMgdG8gbG9vayBmb3IgdGhlICpsZXNzKiBjb21tb24gdXNlcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGZvciBwbGFjZXMgd2hlcmUgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIGlzIGNhbGxlZCB3aXRoIGNvc3RseSBtZW1vcnkgb3JkZXIgYWxsb2NhdGlvbnMsIG9yIHdpdGggYF9fR0ZQX05PUkVUUllgLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBcInNwZWNpYWwgY2FzZXNcIiB3aGVyZSB0aGUgZnVuY3Rpb24gbWlnaHQgYmUgaW52b2x2ZWQgaW4gaW50ZXJlc3RpbmcsIGxlc3MtY29tbW9uIGJlaGF2aW9yLiBTbywgbGV0J3MgdHJ5IHRvIGZvY3VzIG91ciBhdHRlbnRpb24gb24gZnVuY3Rpb25zIHdoZXJlIGxhcmdlIG1lbW9yeSBvcmRlcnMgYXJlIHJlcXVlc3RlZCBvciB3aGVyZSBhIG5vbi1yZXRyeWFibGUgYWxsb2NhdGlvbiBpcyBoYXBwZW5pbmcgd2l0aCB0aGlzIHNsb3dwYXRoIGZ1bmN0aW9uLlxuXG5UaGVyZWZvcmUsIGxldCdzIHNlYXJjaCBmb3IgY2FsbHMgdG8gYF9fR0ZQX05PUkVUUllgIHdpdGggYW4gb3JkZXIgbGFyZ2VyIHRoYW4gYFBBR0VfQUxMT0NfQ09TVExZX09SREVSYCBvciBqdXN0IHNlYXJjaCBmb3IgYFBBR0VfQUxMT0NfQ09TVExZX09SREVSYCBpbiBtbS8gZmlsZXMgdG8gc2VlIHdoaWNoIGNhbGxlcnMgbWlnaHQgYmUgb2YgaW50ZXJlc3QuIFRoaXMgd2lsbCBoZWxwIG1lIG5hcnJvdyBkb3duIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyBnZW5lcmFsbHkgdWJpcXVpdGlvdXMgb3IgaWYgd2UgY2FuIG1ha2UgYSBjYXNlIGZvciBpdCB3aXRoaW4gdGhlIEZvY3VzU3ltYm9scy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ5MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODozMS40MTAzNjM0MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MzAwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEFHRV9BTExPQ19DT1NUTFlfT1JERVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NvbXBhY3Rpb24uYz0yNzc9X19yZXNldF9pc29sYXRpb25fcGZuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBjaGVja19zb3VyY2UsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzM4LVxcbm1tL2NvbXBhY3Rpb24uYzozMzk6XFx0XFx0cGFnZSArPSAoMSBcXHUwMDNjXFx1MDAzYyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUik7XFxubW0vY29tcGFjdGlvbi5jLTM0MC1cXHR9IHdoaWxlIChwYWdlIFxcdTAwM2M9IGVuZF9wYWdlKTtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0xOTY5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGZhc3RfZmluZF9taWdyYXRlYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjAwMi1cXHQgKi9cXG5tbS9jb21wYWN0aW9uLmM6MjAwMzpcXHRpZiAoY2MtXFx1MDAzZW9yZGVyIFxcdTAwM2M9IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxcbm1tL2NvbXBhY3Rpb24uYy0yMDA0LVxcdFxcdHJldHVybiBwZm47XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjAyNi1cXHRmb3IgKG9yZGVyID0gY2MtXFx1MDAzZW9yZGVyIC0gMTtcXG5tbS9jb21wYWN0aW9uLmM6MjAyNzpcXHQgICAgIG9yZGVyIFxcdTAwM2U9IFBBR0VfQUxMT0NfQ09TVExZX09SREVSIFxcdTAwMjZcXHUwMDI2ICFmb3VuZF9ibG9jayBcXHUwMDI2XFx1MDAyNiBucl9zY2FubmVkIFxcdTAwM2MgbGltaXQ7XFxubW0vY29tcGFjdGlvbi5jLTIwMjgtXFx0ICAgICBvcmRlci0tKSB7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MjQwND1zdGF0aWMgYm9vbCBfX2NvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yNDI0LVxcdHdhdGVybWFyayArPSBjb21wYWN0X2dhcChvcmRlcik7XFxubW0vY29tcGFjdGlvbi5jOjI0MjU6XFx0aWYgKG9yZGVyIFxcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpXFxubW0vY29tcGFjdGlvbi5jLTI0MjYtXFx0XFx0d2F0ZXJtYXJrICs9IGxvd193bWFya19wYWdlcyh6b25lKSAtIG1pbl93bWFya19wYWdlcyh6b25lKTtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yNDM0PWJvb2wgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIHdhdGVybWFyayxcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yNDU5LVxcdFxcdGNvbXBhY3RfcmVzdWx0ID0gQ09NUEFDVF9DT05USU5VRTtcXG5tbS9jb21wYWN0aW9uLmM6MjQ2MDpcXHRcXHRpZiAob3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikge1xcbm1tL2NvbXBhY3Rpb24uYy0yNDYxLVxcdFxcdFxcdGludCBmcmFnaW5kZXggPSBmcmFnbWVudGF0aW9uX2luZGV4KHpvbmUsIG9yZGVyKTtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yNTIxPWNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjU0Ni1cXHQgKi9cXG5tbS9jb21wYWN0aW9uLmM6MjU0NzpcXHRpZiAob3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUiBcXHUwMDI2XFx1MDAyNiBhc3luYyBcXHUwMDI2XFx1MDAyNlxcbm1tL2NvbXBhY3Rpb24uYy0yNTQ4LVxcdCAgICAhKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfQ01BKSkge1xcbi0tXFxubW0va2FzYW4vaHdfdGFncy5jPTczPXVuc2lnbmVkIGxvbmcga2FzYW5fcGFnZV9hbGxvY19zYW1wbGUgPSBQQUdFX0FMTE9DX1NBTVBMRV9ERUZBVUxUO1xcbi0tXFxubW0va2FzYW4vaHdfdGFncy5jLTc3LSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGNob3NlbiB0byBtYXRjaCBib3RoXFxubW0va2FzYW4vaHdfdGFncy5jOjc4OiAqIFBBR0VfQUxMT0NfQ09TVExZX09SREVSIGFuZCBTS0JfRlJBR19QQUdFX09SREVSLlxcbm1tL2thc2FuL2h3X3RhZ3MuYy03OS0gKi9cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xOTYzPXN0YXRpYyBib29sIG1lbV9jZ3JvdXBfb29tKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgbWFzaywgaW50IG9yZGVyKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE5NjYtXFxubW0vbWVtY29udHJvbC5jOjE5Njc6XFx0aWYgKG9yZGVyIFxcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpXFxubW0vbWVtY29udHJvbC5jLTE5NjgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI2NDU9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjc0MS1cXHQgKi9cXG5tbS9tZW1jb250cm9sLmM6Mjc0MjpcXHRpZiAobnJfcmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2IG5yX3BhZ2VzIFxcdTAwM2M9ICgxIFxcdTAwM2NcXHUwMDNjIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSlcXG5tbS9tZW1jb250cm9sLmMtMjc0My1cXHRcXHRnb3RvIHJldHJ5O1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTY1NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvcmRlcl90b19waW5kZXgoaW50IG1pZ3JhdGV0eXBlLCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNjU5LVxcbm1tL3BhZ2VfYWxsb2MuYzo2NjA6XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpXFxubW0vcGFnZV9hbGxvYy5jLTY2MS1cXHRcXHRcXHRyZXR1cm4gTlJfTE9XT1JERVJfUENQX0xJU1RTICsgbW92YWJsZTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz02Nzk9c3RhdGljIGlubGluZSBib29sIHBjcF9hbGxvd2VkX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS9wYWdlX2FsbG9jLmMtNjgwLXtcXG5tbS9wYWdlX2FsbG9jLmM6NjgxOlxcdGlmIChvcmRlciBcXHUwMDNjPSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUilcXG5tbS9wYWdlX2FsbG9jLmMtNjgyLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTI4NDQ9c3RhdGljIGJvb2wgZnJlZV9mcm96ZW5fcGFnZV9jb21taXQoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMjg3Mi1cXHQgKi9cXG5tbS9wYWdlX2FsbG9jLmM6Mjg3MzpcXHRpZiAob3JkZXIgXFx1MDAyNlxcdTAwMjYgb3JkZXIgXFx1MDAzYz0gUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpIHtcXG5tbS9wYWdlX2FsbG9jLmMtMjg3NC1cXHRcXHRmcmVlX2hpZ2ggPSAocGNwLVxcdTAwM2VmcmVlX2NvdW50IFxcdTAwM2U9IChiYXRjaCArIHBjcC1cXHUwMDNlaGlnaF9taW4gLyAyKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQwNDQ9X19hbGxvY19wYWdlc19tYXlfb29tKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDA4NC1cXHQvKiBUaGUgT09NIGtpbGxlciB3aWxsIG5vdCBoZWxwIGhpZ2hlciBvcmRlciBhbGxvY3MgKi9cXG5tbS9wYWdlX2FsbG9jLmM6NDA4NTpcXHRpZiAob3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUilcXG5tbS9wYWdlX2FsbG9jLmMtNDA4Ni1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00MjQ4PXNob3VsZF9jb21wYWN0X3JldHJ5KGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00Mjg5LVxcdFxcdCAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo0MjkwOlxcdFxcdGlmIChvcmRlciBcXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxcbm1tL3BhZ2VfYWxsb2MuYy00MjkxLVxcdFxcdFxcdG1heF9yZXRyaWVzIC89IDQ7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDMwMS1cXHQgKi9cXG5tbS9wYWdlX2FsbG9jLmM6NDMwMjpcXHRtaW5fcHJpb3JpdHkgPSAob3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikgP1xcbm1tL3BhZ2VfYWxsb2MuYy00MzAzLVxcdFxcdFxcdE1JTl9DT01QQUNUX0NPU1RMWV9QUklPUklUWSA6IE1JTl9DT01QQUNUX1BSSU9SSVRZO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQzMjU9c2hvdWxkX2NvbXBhY3RfcmV0cnkoZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQzMzMtXFxubW0vcGFnZV9hbGxvYy5jOjQzMzQ6XFx0aWYgKCFvcmRlciB8fCBvcmRlciBcXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxcbm1tL3BhZ2VfYWxsb2MuYy00MzM1LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00NjQwPXNob3VsZF9yZWNsYWltX3JldHJ5KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00NjUyLVxcdCAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo0NjUzOlxcdGlmIChkaWRfc29tZV9wcm9ncmVzcyBcXHUwMDI2XFx1MDAyNiBvcmRlciBcXHUwMDNjPSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUilcXG5tbS9wYWdlX2FsbG9jLmMtNDY1NC1cXHRcXHQqbm9fcHJvZ3Jlc3NfbG9vcHMgPSAwO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQ3ODQ9X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQ3ODYte1xcbm1tL3BhZ2VfYWxsb2MuYzo0Nzg3OlxcdGNvbnN0IGJvb2wgY29zdGx5X29yZGVyID0gb3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUjtcXG5tbS9wYWdlX2FsbG9jLmMtNDc4OC1cXHRib29sIGNhbl9kaXJlY3RfcmVjbGFpbTtcXG4tLVxcbm1tL3NsdWIuYz03NTU5PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2x1Yl9tYXhfb3JkZXIgPVxcbm1tL3NsdWIuYzo3NTYwOlxcdElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgPyAxIDogUEFHRV9BTExPQ19DT1NUTFlfT1JERVI7XFxubW0vc2x1Yi5jLTc1NjEtc3RhdGljIHVuc2lnbmVkIGludCBzbHViX21pbl9vYmplY3RzO1xcbi0tXFxubW0vdm1wcmVzc3VyZS5jPTEwOT12b2lkIHZtcHJlc3N1cmUoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCB0cmVlLFxcbi0tXFxubW0vdm1wcmVzc3VyZS5jLTE4MS1cXHRcXHQgKi9cXG5tbS92bXByZXNzdXJlLmM6MTgyOlxcdFxcdGlmIChsZXZlbCBcXHUwMDNlIFZNUFJFU1NVUkVfTE9XIFxcdTAwMjZcXHUwMDI2IG9yZGVyIFxcdTAwM2M9IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSB7XFxubW0vdm1wcmVzc3VyZS5jLTE4My1cXHRcXHRcXHQvKlxcbi0tXFxubW0vdm1zY2FuLmM9NjA5MT1zdGF0aWMgYm9vbCBpbl9yZWNsYWltX2NvbXBhY3Rpb24oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDkzLVxcdGlmIChnZnBfY29tcGFjdGlvbl9hbGxvd2VkKHNjLVxcdTAwM2VnZnBfbWFzaykgXFx1MDAyNlxcdTAwMjYgc2MtXFx1MDAzZW9yZGVyIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmM6NjA5NDpcXHRcXHRcXHQoc2MtXFx1MDAzZW9yZGVyIFxcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIgfHxcXG5tbS92bXNjYW4uYy02MDk1LVxcdFxcdFxcdCBzYy1cXHUwMDNlcHJpb3JpdHkgXFx1MDAzYyBERUZfUFJJT1JJVFkgLSAyKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY0MjQ9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjQ2NS1cXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ09NUEFDVElPTikgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYzo2NDY2OlxcdFxcdFxcdCAgICBzYy1cXHUwMDNlb3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUiBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTY0NjctXFx0XFx0XFx0ICAgIGNvbXBhY3Rpb25fcmVhZHkoem9uZSwgc2MpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjM4OjMxLjQ1ODgwMDI3OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTM0NTAxOTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IE1lbW9yeSBBbGxvY2F0aW9uIEJlaGF2aW9yKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBvcmlnaW5hbCBwdXJwb3NlIG9yIGludGVudGlvbiBiZWhpbmQgdGhpcyBzcGVjaWZpYyBjb21taXQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZ2l0IGxvZyBhbmQgaGlzdG9yeSB0byBnZXQgdGhlIGNvbnRleHQuXG5cbkhvbGQgb24sIGJlZm9yZSBJIGRpdmUgaW50byB0aGUgd2hvbGUgY29tbWl0IGhpc3RvcnksIEknbGwgc2VhcmNoIGZvciBzb21ldGhpbmcgc3BlY2lmaWMsIGxpa2UgdGhlIHBocmFzZSBcIkNvc3RseSBfX0dGUF9OT1JFVFJZIGNhbGxlcnMgaGF2ZSBhIGNoZWFwIGZhbGxiYWNrXCIgb3Igc2ltaWxhciB0ZXJtcyB3aXRoaW4gdGhlIGdpdCBsb2cgb3IgaW4gY29tbWVudHMuIFRoaXMgc2hvdWxkIHBvaW50IG1lIHJpZ2h0IHRvIHRoZSBpbnRlbnQuXG5cbkhtbSwgaXQgbG9va3MgbGlrZSBvbmx5IGBtbS9wYWdlX2FsbG9jLmNgIHdhcyBtb2RpZmllZCBpbiB0aGlzIGNvbW1pdCwgc28gdGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gTGV0IG1lIHJlLWV4YW1pbmUgdGhlIGNoYW5nZXMgd2l0aGluIHRoYXQgZmlsZSB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIGNoYW5nZWQuXG5cblNwZWNpZmljYWxseSwgaW4gYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgLCB0aGUgY29kZSBub3cgaW5jbHVkZXM6XG5cbmBgYGNcblx0Lypcblx0ICogQ29zdGx5IF9fR0ZQX05PUkVUUlkgY2FsbGVycyBoYXZlIGEgY2hlYXAgZmFsbGJhY2ssIHNvIGRvbid0IHN0YWxsXG5cdCAqIHRoZW0gaW4gcmVjbGFpbSBvciBjb21wYWN0aW9uLiBfX0dGUF9USElTTk9ERSBjYWxsZXJzIGFyZSBleGVtcHQuXG5cdCAqL1xuXHRpZiAoY29zdGx5X29yZGVyIFx1MDAyNlx1MDAyNiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpIFx1MDAyNlx1MDAyNlxuXHQgICAgIShnZnBfbWFzayBcdTAwMjYgX19HRlBfVEhJU05PREUpKVxuXHRcdGdmcF9tYXNrIFx1MDAyNj0gfl9fR0ZQX0RJUkVDVF9SRUNMQUlNO1xuYGBgXG5cbkl0IHNlZW1zIHRoZSBjb3JlIGxvZ2ljIGhlcmUgaXMgYWJvdXQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgY2FsbHMgdGhhdCBtaWdodCBiZSBcImNvc3RseVwiIChiYXNlZCBvbiBgb3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSYCksIGVzcGVjaWFsbHkgd2hlbiB0aG9zZSBjYWxscyBoYXZlIHRoZSBgX19HRlBfTk9SRVRSWWAgZmxhZyBzZXQuIElmIHRoZSBvcmRlciBpcyBcImNvc3RseVwiIGFuZCB0aGUgY2FsbGVyIGhhcyBgX19HRlBfTk9SRVRSWWAgYnV0IG5vdCBgX19HRlBfVEhJU05PREVgLCBpdCByZW1vdmVzIHRoZSBgX19HRlBfRElSRUNUX1JFQ0xBSU1gIGZsYWcuIEkgdGhpbmsgdGhpcyBtZWFucyB0aGF0IGZvciB0aGVzZSBjYWxsZXJzLCB3ZSB3b24ndCBzdGFsbCB0aGUgcHJvY2VzcyBpbiByZWNsYWltIG9yIGNvbXBhY3Rpb24uXG5cblRoaXMgc2VlbXMgaW1wb3J0YW50LCBidXQgSSBuZWVkIHRvIHJlYWQgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2YgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBsYXJnZXIgbWVtb3J5IGFsbG9jYXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUwOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODozNS4zOTMzMDUwMDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODMwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0ODMwOlxcdFxcbjQ4MzE6XFx0cmVzdGFydDpcXG40ODMyOlxcdFxcdGNvbXBhY3Rpb25fcmV0cmllcyA9IDA7XFxuNDgzMzpcXHRcXHRub19wcm9ncmVzc19sb29wcyA9IDA7XFxuNDgzNDpcXHRcXHRjb21wYWN0X3Jlc3VsdCA9IENPTVBBQ1RfU0tJUFBFRDtcXG40ODM1OlxcdFxcdGNvbXBhY3RfcHJpb3JpdHkgPSBERUZfQ09NUEFDVF9QUklPUklUWTtcXG40ODM2OlxcdFxcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XFxuNDgzNzpcXHRcXHR6b25lbGlzdF9pdGVyX2Nvb2tpZSA9IHpvbmVsaXN0X2l0ZXJfYmVnaW4oKTtcXG40ODM4OlxcdFxcbjQ4Mzk6XFx0XFx0LypcXG40ODQwOlxcdFxcdCAqIEZvciBjb3N0bHkgYWxsb2NhdGlvbnMsIHRyeSBkaXJlY3QgY29tcGFjdGlvbiBmaXJzdCwgYXMgaXQncyBsaWtlbHlcXG40ODQxOlxcdFxcdCAqIHRoYXQgd2UgaGF2ZSBlbm91Z2ggYmFzZSBwYWdlcyBhbmQgZG9uJ3QgbmVlZCB0byByZWNsYWltLiBGb3Igbm9uLVxcbjQ4NDI6XFx0XFx0ICogbW92YWJsZSBoaWdoLW9yZGVyIGFsbG9jYXRpb25zLCBkbyB0aGF0IGFzIHdlbGwsIGFzIGNvbXBhY3Rpb24gd2lsbFxcbjQ4NDM6XFx0XFx0ICogdHJ5IHByZXZlbnQgcGVybWFuZW50IGZyYWdtZW50YXRpb24gYnkgbWlncmF0aW5nIGZyb20gYmxvY2tzIG9mIHRoZVxcbjQ4NDQ6XFx0XFx0ICogc2FtZSBtaWdyYXRldHlwZS5cXG40ODQ1OlxcdFxcdCAqL1xcbjQ4NDY6XFx0XFx0aWYgKGNhbl9jb21wYWN0IFxcdTAwMjZcXHUwMDI2IChjb3N0bHlfb3JkZXIgfHwgKG9yZGVyIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbjQ4NDc6XFx0XFx0XFx0XFx0XFx0XFx0YWMtXFx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSkpKSB7XFxuNDg0ODpcXHRcXHRcXHRjb21wYWN0X2ZpcnN0ID0gdHJ1ZTtcXG40ODQ5OlxcdFxcdFxcdGNvbXBhY3RfcHJpb3JpdHkgPSBJTklUX0NPTVBBQ1RfUFJJT1JJVFk7XFxuNDg1MDpcXHRcXHR9XFxuNDg1MTpcXHRcXG40ODUyOlxcdFxcdC8qXFxuNDg1MzpcXHRcXHQgKiBUaGUgZmFzdCBwYXRoIHVzZXMgY29uc2VydmF0aXZlIGFsbG9jX2ZsYWdzIHRvIHN1Y2NlZWQgb25seSB1bnRpbFxcbjQ4NTQ6XFx0XFx0ICoga3N3YXBkIG5lZWRzIHRvIGJlIHdva2VuIHVwLCBhbmQgdG8gYXZvaWQgdGhlIGNvc3Qgb2Ygc2V0dGluZyB1cFxcbjQ4NTU6XFx0XFx0ICogYWxsb2NfZmxhZ3MgcHJlY2lzZWx5LiBTbyB3ZSBkbyB0aGF0IG5vdy5cXG40ODU2OlxcdFxcdCAqXFxuNDg1NzpcXHRcXHQgKiBDYW4ndCBqdXN0IG9yIGFsbG9jX2ZsYWdzIGlmIGl0IGNvbnRhaW5zIFdNQVJLIGJpdHMsIGJ1dCB0aG9zZSBmbGFnc1xcbjQ4NTg6XFx0XFx0ICogc2hvdWxkbid0IGJlIHNldCBpbiBhYy1cXHUwMDNlYWxsb2NfZmxhZ3MuXFxuNDg1OTpcXHRcXHQgKi9cXG40ODYwOlxcdFxcdFZNX1dBUk5fT04oYWMtXFx1MDAzZWFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfV01BUktfTUFTSyk7XFxuNDg2MTpcXHRcXHRhbGxvY19mbGFncyA9IGFjLVxcdTAwM2VhbGxvY19mbGFncyB8IGFsbG9jX2ZsYWdzX3Nsb3dwYXRoKGdmcF9tYXNrLCBvcmRlcik7XFxuNDg2MjpcXHRcXG40ODYzOlxcdFxcdC8qXFxuNDg2NDpcXHRcXHQgKiBXZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIHpvbmVsaXN0IGl0ZXJhdG9yXFxuNDg2NTpcXHRcXHQgKiBiZWNhdXNlIHdlIG1pZ2h0IGhhdmUgdXNlZCBkaWZmZXJlbnQgbm9kZW1hc2sgaW4gdGhlIGZhc3QgcGF0aCwgb3JcXG40ODY2OlxcdFxcdCAqIHRoZXJlIHdhcyBhIGNwdXNldCBtb2RpZmljYXRpb24gYW5kIHdlIGFyZSByZXRyeWluZyAtIG90aGVyd2lzZSB3ZVxcbjQ4Njc6XFx0XFx0ICogY291bGQgZW5kIHVwIGl0ZXJhdGluZyBvdmVyIG5vbi1lbGlnaWJsZSB6b25lcyBlbmRsZXNzbHkuXFxuNDg2ODpcXHRcXHQgKi9cXG40ODY5OlxcdFxcdGFjLVxcdTAwM2VwcmVmZXJyZWRfem9uZXJlZiA9IGZpcnN0X3pvbmVzX3pvbmVsaXN0KGFjLVxcdTAwM2V6b25lbGlzdCxcXG40ODcwOlxcdFxcdFxcdFxcdFxcdFxcdGFjLVxcdTAwM2VoaWdoZXN0X3pvbmVpZHgsIGFjLVxcdTAwM2Vub2RlbWFzayk7XFxuNDg3MTpcXHRcXHRpZiAoIXpvbmVsaXN0X3pvbmUoYWMtXFx1MDAzZXByZWZlcnJlZF96b25lcmVmKSlcXG40ODcyOlxcdFxcdFxcdGdvdG8gbm9wYWdlO1xcbjQ4NzM6XFx0XFxuNDg3NDpcXHRcXHQvKlxcbjQ4NzU6XFx0XFx0ICogQ2hlY2sgZm9yIGluc2FuZSBjb25maWd1cmF0aW9ucyB3aGVyZSB0aGUgY3B1c2V0IGRvZXNuJ3QgY29udGFpblxcbjQ4NzY6XFx0XFx0ICogYW55IHN1aXRhYmxlIHpvbmUgdG8gc2F0aXNmeSB0aGUgcmVxdWVzdCAtIGUuZy4gbm9uLW1vdmFibGVcXG40ODc3OlxcdFxcdCAqIEdGUF9ISUdIVVNFUiBhbGxvY2F0aW9ucyBmcm9tIE1PVkFCTEUgbm9kZXMgb25seS5cXG40ODc4OlxcdFxcdCAqL1xcbjQ4Nzk6XFx0XFx0aWYgKGNwdXNldHNfaW5zYW5lX2NvbmZpZygpIFxcdTAwMjZcXHUwMDI2IChnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX0hBUkRXQUxMKSkge1xcbjQ4ODA6XFx0XFx0XFx0c3RydWN0IHpvbmVyZWYgKnogPSBmaXJzdF96b25lc196b25lbGlzdChhYy1cXHUwMDNlem9uZWxpc3QsXFxuNDg4MTpcXHRcXHRcXHRcXHRcXHRcXHRhYy1cXHUwMDNlaGlnaGVzdF96b25laWR4LFxcbjQ4ODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCk7XFxuNDg4MzpcXHRcXHRcXHRpZiAoIXpvbmVsaXN0X3pvbmUoeikpXFxuNDg4NDpcXHRcXHRcXHRcXHRnb3RvIG5vcGFnZTtcXG40ODg1OlxcdFxcdH1cXG40ODg2OlxcdFxcbjQ4ODc6XFx0cmV0cnk6XFxuNDg4ODpcXHRcXHQvKiBFbnN1cmUga3N3YXBkIGRvZXNuJ3QgYWNjaWRlbnRhbGx5IGdvIHRvIHNsZWVwIGFzIGxvbmcgYXMgd2UgbG9vcCAqL1xcbjQ4ODk6XFx0XFx0aWYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfS1NXQVBEKVxcbjQ4OTA6XFx0XFx0XFx0d2FrZV9hbGxfa3N3YXBkcyhvcmRlciwgZ2ZwX21hc2ssIGFjKTtcXG40ODkxOlxcdFxcbjQ4OTI6XFx0XFx0LypcXG40ODkzOlxcdFxcdCAqIFRoZSBhZGp1c3RlZCBhbGxvY19mbGFncyBtaWdodCByZXN1bHQgaW4gaW1tZWRpYXRlIHN1Y2Nlc3MsIHNvIHRyeVxcbjQ4OTQ6XFx0XFx0ICogdGhhdCBmaXJzdFxcbjQ4OTU6XFx0XFx0ICovXFxuNDg5NjpcXHRcXHRwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfbWFzaywgb3JkZXIsIGFsbG9jX2ZsYWdzLCBhYyk7XFxuNDg5NzpcXHRcXHRpZiAocGFnZSlcXG40ODk4OlxcdFxcdFxcdGdvdG8gZ290X3BnO1xcbjQ4OTk6XFx0XFxuNDkwMDpcXHRcXHRyZXNlcnZlX2ZsYWdzID0gX19nZnBfcGZtZW1hbGxvY19mbGFncyhnZnBfbWFzayk7XFxuNDkwMTpcXHRcXHRpZiAocmVzZXJ2ZV9mbGFncylcXG40OTAyOlxcdFxcdFxcdGFsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrKSB8IHJlc2VydmVfZmxhZ3MgfFxcbjQ5MDM6XFx0XFx0XFx0XFx0XFx0YWMtXFx1MDAzZWFsbG9jX2ZsYWdzIHwgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfS1NXQVBEKTtcXG40OTA0OlxcdFxcbjQ5MDU6XFx0XFx0LypcXG40OTA2OlxcdFxcdCAqIFJlc2V0IHRoZSBub2RlbWFzayBhbmQgem9uZWxpc3QgaXRlcmF0b3JzIGlmIG1lbW9yeSBwb2xpY2llcyBjYW4gYmVcXG40OTA3OlxcdFxcdCAqIGlnbm9yZWQuIFRoZXNlIGFsbG9jYXRpb25zIGFyZSBoaWdoIHByaW9yaXR5IGFuZCBzeXN0ZW0gcmF0aGVyIHRoYW5cXG40OTA4OlxcdFxcdCAqIHVzZXIgb3JpZW50ZWQuXFxuNDkwOTpcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzg6MzUuMzkzNTg5MzA2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyMTA1NDgxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZvY3VzU3ltYm9scyBmb3IgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgaG93IHRvIGNvbmZpZ3VyZSBgRm9jdXNTeW1ib2xzYCBmb3IgZnV6emluZywgc3BlY2lmaWNhbGx5IHdoZW4gY2hhbmdlcyBpbnZvbHZlIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljLiBUaGUgdGV4dCBwb2ludHMgdG8gYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgLCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgY29yZSBwYWdlIGFsbG9jYXRvci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZnVuY3Rpb24gaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgaW5jbHVzaW9uIGluIGBGb2N1c1N5bWJvbHNgLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgZGlsdXRlIHRoZSBmdXp6aW5nIGVmZm9ydC4gVGhlIHJ1bGVzIGFyZSBjbGVhcjogYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoaXMgaW5jbHVkZXMgZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBsaWtlIHRoaXMgb25lLiBTbywgaXMgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIHViaXF1aXRvdXM/IExldCBtZSBxdWlja2x5IHZlcmlmeTogSXQncyBkZWZpbmVkIGluIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCBpcyBtYXJrZWQgYHN0YXRpYyBpbmxpbmVgLCBjYWxsZWQgZnJvbSBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYC5cblxuQWhhLCB0aGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGZhbGwgdW5kZXIgdGhlIFwidWJpcXVpdG91c1wiIGNhdGVnb3J5LiBUaGUgdGV4dCBleHBsaWNpdGx5IHdhcm5zIGFnYWluc3QgaW5jbHVkaW5nIFwiZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyxcIiBzbyBhZGRpbmcgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgLCBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCwgb3IgYF9fYWxsb2NfcGFnZXNfbm9wcm9mYCBpdHNlbGYgc2VlbXMgbGlrZSBhIGJhZCBpZGVhLiBJdCdzIGEgbWVtb3J5IGFsbG9jYXRvciBzbG93IHBhdGgsIGFuZCB0aHVzIGxpa2VseSB1YmlxdWl0b3VzLiBUaGF0IHdvdWxkIG1ha2UgYEZvY3VzU3ltYm9sc2AgaW5lZmZlY3RpdmUuXG5cbk5vdywgaWYgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgICppcyogdGhlIG9ubHkgdGhpbmcgdGhhdCdzIGNoYW5nZWQsIGNhbiBgRm9jdXNTeW1ib2xzYCBiZSBlbXB0eT8gT3Igc2hvdWxkIEkgbG9vayBmb3Igb3RoZXIgZnVuY3Rpb25zPyBTaG91bGQgaXQgY29udGFpbiBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgZXhlcmNpc2UgY29zdGx5IGBfX0dGUF9OT1JFVFJZYCBhbGxvY2F0aW9ucywgbGlrZSB0aG9zZSB1c2VkIGJ5IFRIUCBhbGxvY2F0aW9uLCBjb21wYWN0aW9uLCBvciBvdGhlciBwb3RlbnRpYWxseSBleHBlbnNpdmUgcGFnZSBhbGxvY2F0aW9ucz8gSXQncyBhIGJpdCBvZiBhIGdyYXkgYXJlYSwgcmVhbGx5LlxuXG5JIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbnN0aXR1dGVzIFwic3BlY2lmaWMgZmVhdHVyZSBsb2dpYy5cIiBJZiBjaGFuZ2VzIGFyZSAqcHJpbWFyaWx5KiBpbiB0aGlzIGNvbW1vbiBtZW1vcnkgYWxsb2NhdG9yLCBzaG91bGQgSSBmb2N1cyBvbiBzcGVjaWZpYyBjYWxsZXJzIHRoYXQgZXhlcmNpc2UgdGhvc2UgYWxsb2NhdGlvbnM/IExldCdzIGNoZWNrOiBXaGVyZSBhcmUgY29zdGx5IG9yZGVycyBjb21iaW5lZCB3aXRoIGBfX0dGUF9OT1JFVFJZYD8gTGV0IG1lIHNlYXJjaCB3aXRoaW4gYG1tL2AgZm9yIGBHRlBfVFJBTlNIVUdFYCBvciBgX19HRlBfTk9SRVRSWWAgdG8gZmluZCBzcGVjaWZpYyBmZWF0dXJlcyB0aGF0IG1pZ2h0IGJlIGltcGFjdGVkIGJ5IHRoZSBjaGFuZ2VzIHRvIHRoZSBhbGxvY2F0b3IuIFRoYXQgbWlnaHQgcHJvdmlkZSBzb21lIHVzZWZ1bCB0YXJnZXRzIGZvciBgRm9jdXNTeW1ib2xzYCwgZXZlbiBpZiBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgaXRzZWxmIGlzbid0IGEgZ29vZCBmaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODg3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzg6NDAuNjA0MTM5NTYzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY2ODUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJHRlBfVFJBTlNIVUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTI3Mz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19odWdlX3plcm9fZm9saW8odm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjc2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6Mjc3OlxcdHplcm9fZm9saW8gPSBmb2xpb19hbGxvYygoR0ZQX1RSQU5TSFVHRSB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9aRVJPVEFHUykgXFx1MDAyNlxcbm1tL2h1Z2VfbWVtb3J5LmMtMjc4LVxcdFxcdFxcdFxcdCB+X19HRlBfTU9WQUJMRSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTUyMz1nZnBfdCB2bWFfdGhwX2dmcF9tYXNrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xNTI4LVxcdGlmICh0ZXN0X2JpdChUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfRElSRUNUX0ZMQUcsIFxcdTAwMjZ0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncykpXFxubW0vaHVnZV9tZW1vcnkuYzoxNTI5OlxcdFxcdHJldHVybiBHRlBfVFJBTlNIVUdFIHwgKHZtYV9tYWR2aXNlZCA/IDAgOiBfX0dGUF9OT1JFVFJZKTtcXG5tbS9odWdlX21lbW9yeS5jLTE1MzAtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1MzItXFx0aWYgKHRlc3RfYml0KFRSQU5TUEFSRU5UX0hVR0VQQUdFX0RFRlJBR19LU1dBUERfRkxBRywgXFx1MDAyNnRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzKSlcXG5tbS9odWdlX21lbW9yeS5jOjE1MzM6XFx0XFx0cmV0dXJuIEdGUF9UUkFOU0hVR0VfTElHSFQgfCBfX0dGUF9LU1dBUERfUkVDTEFJTTtcXG5tbS9odWdlX21lbW9yeS5jLTE1MzQtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1MzYtXFx0aWYgKHRlc3RfYml0KFRSQU5TUEFSRU5UX0hVR0VQQUdFX0RFRlJBR19LU1dBUERfT1JfTUFEVl9GTEFHLCBcXHUwMDI2dHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MpKVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTUzNzpcXHRcXHRyZXR1cm4gR0ZQX1RSQU5TSFVHRV9MSUdIVCB8XFxubW0vaHVnZV9tZW1vcnkuYy0xNTM4LVxcdFxcdFxcdCh2bWFfbWFkdmlzZWQgPyBfX0dGUF9ESVJFQ1RfUkVDTEFJTSA6XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1NDItXFx0aWYgKHRlc3RfYml0KFRSQU5TUEFSRU5UX0hVR0VQQUdFX0RFRlJBR19SRVFfTUFEVl9GTEFHLCBcXHUwMDI2dHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MpKVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTU0MzpcXHRcXHRyZXR1cm4gR0ZQX1RSQU5TSFVHRV9MSUdIVCB8XFxubW0vaHVnZV9tZW1vcnkuYy0xNTQ0LVxcdFxcdCAgICAgICAodm1hX21hZHZpc2VkID8gX19HRlBfRElSRUNUX1JFQ0xBSU0gOiAwKTtcXG5tbS9odWdlX21lbW9yeS5jLTE1NDUtXFxubW0vaHVnZV9tZW1vcnkuYzoxNTQ2OlxcdHJldHVybiBHRlBfVFJBTlNIVUdFX0xJR0hUO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTU0Ny19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTAyNz1zdGF0aWMgaW5saW5lIGdmcF90IGFsbG9jX2h1Z2VwYWdlX2todWdlcGFnZWRfZ2ZwbWFzayh2b2lkKVxcbm1tL2todWdlcGFnZWQuYy0xMDI4LXtcXG5tbS9raHVnZXBhZ2VkLmM6MTAyOTpcXHRyZXR1cm4ga2h1Z2VwYWdlZF9kZWZyYWcoKSA/IEdGUF9UUkFOU0hVR0UgOiBHRlBfVFJBTlNIVUdFX0xJR0hUO1xcbm1tL2todWdlcGFnZWQuYy0xMDMwLX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xMjUwPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGFsbG9jX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEyNTMtXFx0Z2ZwX3QgZ2ZwID0gKGNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkID8gYWxsb2NfaHVnZXBhZ2Vfa2h1Z2VwYWdlZF9nZnBtYXNrKCkgOlxcbm1tL2todWdlcGFnZWQuYzoxMjU0OlxcdFxcdCAgICAgR0ZQX1RSQU5TSFVHRSk7XFxubW0va2h1Z2VwYWdlZC5jLTEyNTUtXFx0aW50IG5vZGUgPSBjb2xsYXBzZV9maW5kX3RhcmdldF9ub2RlKGNjKTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTE0Mzc9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldF9ieV9tcG9sKHN0cnVjdCBmb2xpbyAqc3JjLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTQ2MS1cXHRpZiAoZm9saW9fdGVzdF9sYXJnZShzcmMpKVxcbm1tL21lbXBvbGljeS5jOjE0NjI6XFx0XFx0Z2ZwID0gR0ZQX1RSQU5TSFVHRTtcXG5tbS9tZW1wb2xpY3kuYy0xNDYzLVxcdGVsc2VcXG4tLVxcbm1tL21pZ3JhdGUuYz0yMTk3PXN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBwcml2YXRlKVxcbi0tXFxubW0vbWlncmF0ZS5jLTIyMjUtXFx0XFx0Z2ZwX21hc2sgXFx1MDAyNj0gfl9fR0ZQX1JFQ0xBSU07XFxubW0vbWlncmF0ZS5jOjIyMjY6XFx0XFx0Z2ZwX21hc2sgfD0gR0ZQX1RSQU5TSFVHRTtcXG5tbS9taWdyYXRlLmMtMjIyNy1cXHRcXHRvcmRlciA9IGZvbGlvX29yZGVyKHNyYyk7XFxuLS1cXG5tbS9taWdyYXRlLmM9MjY2OT1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19taXNwbGFjZWRfZHN0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqc3JjLFxcbi0tXFxubW0vbWlncmF0ZS5jLTI2NzYtXFx0aWYgKG9yZGVyIFxcdTAwM2UgMClcXG5tbS9taWdyYXRlLmM6MjY3NzpcXHRcXHRnZnAgfD0gR0ZQX1RSQU5TSFVHRV9MSUdIVDtcXG5tbS9taWdyYXRlLmMtMjY3OC1cXHRlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzg6NDAuNjU0ODEzNDUyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwOTYyMDMwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRIUCBBbGxvY2F0aW9uIGFuZCBSZWNsYW1hdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgYWxsb2NhdGlvbiBzY2VuYXJpby4gSSdtIGZvY3VzaW5nIG9uIGBtbS9odWdlX21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdm1hX3RocF9nZnBfbWFza2AgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCB3aGVuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfRElSRUNUX0ZMQUdgIGlzIHNldCBpbiBgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3NgIGFuZCB0aGUgVk1BIGlzbid0IG1hZHZpc2VkLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgR0ZQX1RSQU5TSFVHRSB8IF9fR0ZQX05PUkVUUllgLiBBbmQsIGRpZ2dpbmcgZnVydGhlciwgYEdGUF9UUkFOU0hVR0VgIGV4cGFuZHMgdG8gYEdGUF9UUkFOU0hVR0VfTElHSFQgfCBfX0dGUF9ESVJFQ1RfUkVDTEFJTWAuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgZXNwZWNpYWxseSBmb3IgdGhvc2UgY29zdGx5IG9yZGVycyBsaWtlIGBIUEFHRV9QTURfT1JERVJgLCB3aGljaCBpcyA5LiBXZSBhcmUgZ2V0dGluZyBhIG1hc2sgd2l0aCBib3RoIGBfX0dGUF9ESVJFQ1RfUkVDTEFJTWAgYW5kIGBfX0dGUF9OT1JFVFJZYC5cblxuTm93LCBpZiB3ZSB0cmFjayB0aGF0IHRvIHRoZSBUSFAgYWxsb2NhdGlvbiBwYXRoLCBwYXJ0aWN1bGFybHkgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgLCB0aGUgYmVoYXZpb3IgaXMgYWx0ZXJlZCBieSB0aGUgcGF0Y2guIFByZXZpb3VzbHksIGJvdGggYGNhbl9kaXJlY3RfcmVjbGFpbWAgYW5kIGBjYW5fY29tcGFjdGAgd2VyZSBzZXQgdG8gdHJ1ZS4gV2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgY29uZGl0aW9uYWwgYmxvY2ssIHRoYXQgY2hhbmdlcy4gU2luY2UgYGNvc3RseV9vcmRlcmAgaXMgdHJ1ZSwgYW5kIHRoZSBHRlAgbWFzayBjb250YWlucyBib3RoIGBfX0dGUF9OT1JFVFJZYCBhbmQgZG9lc24ndCBoYXZlIGBfX0dGUF9USElTTk9ERWAsIHRoZSBwYXRjaCBjbGVhcnMgYF9fR0ZQX0RJUkVDVF9SRUNMQUlNYCBmcm9tIHRoZSBnZnAgbWFzay4gVGhpcyByZXN1bHRzIGluIGBjYW5fZGlyZWN0X3JlY2xhaW1gIGJlY29taW5nIGZhbHNlLCBhbmQgY29uc2VxdWVudGx5LCBgY2FuX2NvbXBhY3RgIGJlY29taW5nIGZhbHNlIGFzIHdlbGwuIEVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGRpc2FibGluZyBkaXJlY3QgcmVjbGFpbSBhbmQgY29tcGFjdGlvbiBmb3IgdGhlc2Ugc3BlY2lmaWMgVEhQIGFsbG9jYXRpb25zLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoaWNoIHBhdGhzIGFyZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIHNpdGVzIG9mIGB2bWFfdGhwX2dmcF9tYXNrYCwgd2hpY2ggc2hvdWxkIHBvaW50IG1lIHRvIFRIUCBmYXVsdCBhbGxvY2F0aW9ucyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEEgc2ltcGxlIGdyZXAgZm9yIGB2bWFfdGhwX2dmcF9tYXNrYCBzaG91bGQgZG8gdGhlIHRyaWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQxMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODo0NC43NTEwMTg5MTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzcyNjkzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bWFfdGhwX2dmcF9tYXNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTEzNDk9c3RhdGljIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMzUxLXtcXG5tbS9odWdlX21lbW9yeS5jOjEzNTI6XFx0Z2ZwX3QgZ2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTM1My1cXHRjb25zdCBpbnQgb3JkZXIgPSBIUEFHRV9QTURfT1JERVI7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE0NzY9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9kZXZpY2VfcHJpdmF0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTUyMi0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjE1MjM6Z2ZwX3Qgdm1hX3RocF9nZnBfbWFzayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9odWdlX21lbW9yeS5jLTE1MjQte1xcbi0tXFxubW0vbWVtb3J5LmM9NTMwND1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19hbm9uX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTM1Ni1cXHQvKiBUcnkgYWxsb2NhdGluZyB0aGUgaGlnaGVzdCBvZiB0aGUgcmVtYWluaW5nIG9yZGVycy4gKi9cXG5tbS9tZW1vcnkuYzo1MzU3OlxcdGdmcCA9IHZtYV90aHBfZ2ZwX21hc2sodm1hKTtcXG5tbS9tZW1vcnkuYy01MzU4LVxcdHdoaWxlIChvcmRlcnMpIHtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9Nzk4PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy04MDQtXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtaWdyYXRlLVxcdTAwM2V2bWE7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzo4MDU6XFx0Z2ZwX3QgZ2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtODA2LVxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbi0tXFxubW0vc2htZW0uYz0yMDg5PXN0YXRpYyBpbnQgc2htZW1fcmVwbGFjZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGdmcF90IGdmcCxcXG4tLVxcbm1tL3NobWVtLmMtMjEwNS1cXHRpZiAobnJfcGFnZXMgXFx1MDAzZSAxKSB7XFxubW0vc2htZW0uYzoyMTA2OlxcdFxcdGdmcF90IGh1Z2VfZ2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xcbm1tL3NobWVtLmMtMjEwNy1cXG4tLVxcbm1tL3NobWVtLmM9MjQyOD1zdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtMjUxMy1cXG5tbS9zaG1lbS5jOjI1MTQ6XFx0XFx0aHVnZV9nZnAgPSB2bWFfdGhwX2dmcF9tYXNrKHZtYSk7XFxubW0vc2htZW0uYy0yNTE1LVxcdFxcdGh1Z2VfZ2ZwID0gdGhwX3NobWVtX2xpbWl0X2dmcF9tYXNrKGh1Z2VfZ2ZwLCBnZnApO1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTQwOT1zdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy00MzYtXFx0aWYgKG9yZGVyKVxcbm1tL3N3YXBfc3RhdGUuYzo0Mzc6XFx0XFx0Z2ZwID0gdGhwX3NobWVtX2xpbWl0X2dmcF9tYXNrKHZtYV90aHBfZ2ZwX21hc2sodm1hKSwgZ2ZwKTtcXG5tbS9zd2FwX3N0YXRlLmMtNDM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODo0NC45NTg3NDg5NDNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk5OTMxMjY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgRGV0ZXJtaW5hdGlvbjogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBmaWd1cmUgb3V0IHRoZSByaWdodCBgRm9jdXNTeW1ib2xzYCBmb3IgdGhpcyB0YXNrLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gaW50cm9kdWNlIG5vaXNlLiBNeSBpbml0aWFsIHRob3VnaHRzIHdlcmUgdG8gY2hlY2sgZnVuY3Rpb25zIGxpa2UgYGFsbG9jX2Fub25fZm9saW9gLCBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCwgYHZtYV90aHBfZ2ZwX21hc2tgLCBhbmQgYHNobWVtX2dldF9mb2xpb19nZnBgLiBCdXQgdGhlbiBJIGhpdCBhIHNuYWcuIFdhaXQsIGlzIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCBva2F5IHRvIGxpc3QsIG9yIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmA/XG5cbkkgaW1tZWRpYXRlbHkgcmVtZW1iZXJlZCB0aGUgYWR2aWNlOiBcIkFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUy5cIiBUaGUgZG9jdW1lbnQgaXMgcmVhbGx5IGNsZWFyIG9uIHRoaXMg4oCTIGF2b2lkIGdlbmVyaWMgZnVuY3Rpb25zIHRoYXQgYWxtb3N0IGV2ZXJ5dGhpbmcgY2FsbHMuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGJlICp2ZXJ5KiBzZWxlY3RpdmUuXG5cbkkgdGhvdWdodCBhYm91dCBgdm1hX3RocF9nZnBfbWFza2AuIFRoYXQncyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHdoaWNoIGlzbid0IGV2ZXJ5d2hlcmUsIGFuZCBpdCBkaXJlY3RseSBzZXRzIHRoZSBUSFAgZ2ZwIG1hc2sgd2l0aCBgX19HRlBfTk9SRVRSWWAuIEJ1dCB0aGVuIGFnYWluLCBpcyBpdCB0cnVseSBzcGVjaWZpYyBlbm91Z2g/IFRoZW4sIGlzIGBhbGxvY19hbm9uX2ZvbGlvYCBvdXQgc2luY2UgaXQgaXMgaW4gdGhlIHBhZ2UgZmF1bHQgaGFuZGxlcj8gSXQncyBhbGwgY29ubmVjdGVkLlxuXG5XaGF0IGFib3V0IGZ1bmN0aW9ucyBsaWtlIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgIG9yIHRoZSBgdm1hX3RocF9nZnBfbWFza2A/IEkgd2VudCBiYWNrIHRvIHRoZSBzb3VyY2U6IHdoYXQgYWJvdXQgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgPyBJdCdzIGluIGBtbS9wYWdlX2FsbG9jLmNgLCBzbyBJIHNob3VsZCBiZSBnb29kLCByaWdodD8gV2FpdCwgd2h5IGRpZCB0aGUgYXV0aG9yIGNoYW5nZSBgX19hbGxvY19wYWdlc19zbG93cGF0aGA/IFRoYXQgaXMsIGluIGl0c2VsZiwgYSByZWQgZmxhZy4gTGV0IG1lIHNlZSB3aGF0IGVsc2UgaXMgaW4gdGhhdCBmaWxlLCBvciBvdGhlcnMuXG5cbkkgbmVlZCB0byBjb21lIGJhY2sgdG8gdGhlIGJhc2ljczogaXMgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIGl0c2VsZiB1YmlxdWl0b3VzPyBXYWl0LCB0aGUgZG9jdW1lbnRhdGlvbiBzYWlkLCBcImdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0IGFuZCB0cmFwIGhhbmRsZXJzLi4uKVwiIEFuZCB5ZXMsIGBfX2FsbG9jX3BhZ2VzYCBvciBpdHMgc2xvdyBwYXRoICppcyogYSBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3IgZnVuY3Rpb24uIEkgc2hvdWxkIGF2b2lkIGl0LlxuXG5Tbywgd2hhdCBhYm91dCBgdm1hX3RocF9nZnBfbWFza2AsIGBhbGxvY19odWdlX3plcm9fZm9saW9gLCBvciBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYD8gSSBtdXN0IG5vdyB0aGluayBtb3JlIGFib3V0IHRoZSBjb250ZXh0LCBhbmQgd2hhdCdzIGludGVyZXN0aW5nLiBXaGF0IGNhbGxlcnMgcGVyZm9ybSBhbGxvY2F0aW9ucyB0aGF0IGFyZSAqY29zdGx5KiBiZWNhdXNlIHRoZXkgc3BlY2lmeSBgX19HRlBfTk9SRVRSWWA/IExldCBtZSBncmVwIGZvciBgX19HRlBfTk9SRVRSWWAgdGhyb3VnaG91dCB0aGUgdHJlZSB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUuIFRoYXQncyB0aGUgYmVzdCB3YXkgdG8gdW5jb3ZlciB0aGUgcmVsZXZhbnQgYW5kIG5vbi11YmlxdWl0b3VzIGFyZWFzIG9mIGludGVyZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIxOSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODo0OS45NTgwNjQyODNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTkzNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fR0ZQX05PUkVUUllcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2JhbGxvb24uYz0xNDc9c3RydWN0IHBhZ2UgKmJhbGxvb25fcGFnZV9hbGxvYyh2b2lkKVxcbm1tL2JhbGxvb24uYy0xNDgte1xcbm1tL2JhbGxvb24uYzoxNDk6XFx0Z2ZwX3QgZ2ZwX2ZsYWdzID0gX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk47XFxubW0vYmFsbG9vbi5jLTE1MC1cXG4tLVxcbm1tL2V4ZWNtZW0uYz00MDk9c3RhdGljIGJvb2wgZXhlY21lbV9jYWNoZV9mcmVlKHZvaWQgKnB0cilcXG4tLVxcbm1tL2V4ZWNtZW0uYy00MjItXFxubW0vZXhlY21lbS5jOjQyMzpcXHRlcnIgPSBfX2V4ZWNtZW1fY2FjaGVfZnJlZShcXHUwMDI2bWFzLCBhcmVhLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9SRVRSWSk7XFxubW0vZXhlY21lbS5jLTQyNC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5tbS9maWxlbWFwLmM9MTk0Nz1zdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yMDE2LVxcdFxcdFxcdGlmIChvcmRlciBcXHUwMDNlIG1pbl9vcmRlcilcXG5tbS9maWxlbWFwLmM6MjAxNzpcXHRcXHRcXHRcXHRhbGxvY19nZnAgfD0gX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PV0FSTjtcXG5tbS9maWxlbWFwLmMtMjAxOC1cXHRcXHRcXHRmb2xpbyA9IGZpbGVtYXBfYWxsb2NfZm9saW8oYWxsb2NfZ2ZwLCBvcmRlciwgcG9saWN5KTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTUyMz1nZnBfdCB2bWFfdGhwX2dmcF9tYXNrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xNTI4LVxcdGlmICh0ZXN0X2JpdChUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfRElSRUNUX0ZMQUcsIFxcdTAwMjZ0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncykpXFxubW0vaHVnZV9tZW1vcnkuYzoxNTI5OlxcdFxcdHJldHVybiBHRlBfVFJBTlNIVUdFIHwgKHZtYV9tYWR2aXNlZCA/IDAgOiBfX0dGUF9OT1JFVFJZKTtcXG5tbS9odWdlX21lbW9yeS5jLTE1MzAtXFxuLS1cXG5tbS9pbnRlcm5hbC5oPTExNz1zdHJ1Y3QgcGFnZXRhYmxlX21vdmVfY29udHJvbCB7XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTE0Ni1cXHRcXHRcXHRfX0dGUF9OT1dBUk58X19HRlBfUkVUUllfTUFZRkFJTHxfX0dGUF9OT0ZBSUx8XFxcXFxcbm1tL2ludGVybmFsLmg6MTQ3OlxcdFxcdFxcdF9fR0ZQX05PUkVUUll8X19HRlBfTUVNQUxMT0N8X19HRlBfTk9NRU1BTExPQ3xcXFxcXFxubW0vaW50ZXJuYWwuaC0xNDgtXFx0XFx0XFx0X19HRlBfTk9MT0NLREVQKVxcbi0tXFxubW0va3NtLmM9NTY3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKmFsbG9jX3JtYXBfaXRlbSh2b2lkKVxcbi0tXFxubW0va3NtLmMtNTcxLVxcdHJtYXBfaXRlbSA9IGttZW1fY2FjaGVfemFsbG9jKHJtYXBfaXRlbV9jYWNoZSwgR0ZQX0tFUk5FTCB8XFxubW0va3NtLmM6NTcyOlxcdFxcdFxcdFxcdFxcdFxcdF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk4pO1xcbm1tL2tzbS5jLTU3My1cXHRpZiAocm1hcF9pdGVtKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI2NDU9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjczMC1cXG5tbS9tZW1jb250cm9sLmM6MjczMTpcXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9OT1JFVFJZKVxcbm1tL21lbWNvbnRyb2wuYy0yNzMyLVxcdFxcdGdvdG8gbm9tZW07XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNDQxPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbXBvbChnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI0NzItXFx0XFx0XFx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihcXG5tbS9tZW1wb2xpY3kuYzoyNDczOlxcdFxcdFxcdFxcdGdmcCB8IF9fR0ZQX1RISVNOT0RFIHwgX19HRlBfTk9SRVRSWSwgb3JkZXIsXFxubW0vbWVtcG9saWN5LmMtMjQ3NC1cXHRcXHRcXHRcXHRuaWQsIE5VTEwsIEFMTE9DX0RFRkFVTFQpO1xcbi0tXFxubW0vbWVtcG9vbC5jPTQ4MD1zdGF0aWMgaW5saW5lIGdmcF90IG1lbXBvb2xfYWRqdXN0X2dmcChnZnBfdCAqZ2ZwX21hc2spXFxubW0vbWVtcG9vbC5jLTQ4MS17XFxubW0vbWVtcG9vbC5jOjQ4MjpcXHQqZ2ZwX21hc2sgfD0gX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk47XFxubW0vbWVtcG9vbC5jLTQ4My1cXHRyZXR1cm4gKmdmcF9tYXNrIFxcdTAwMjYgfihfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IF9fR0ZQX0lPKTtcXG4tLVxcbm1tL21pZ3JhdGUuYz0yNjY5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pc3BsYWNlZF9kc3RfZm9saW8oc3RydWN0IGZvbGlvICpzcmMsXFxuLS1cXG5tbS9taWdyYXRlLmMtMjY3OC1cXHRlbHNlIHtcXG5tbS9taWdyYXRlLmM6MjY3OTpcXHRcXHRnZnAgfD0gR0ZQX0hJR0hVU0VSX01PVkFCTEUgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9SRVRSWSB8XFxubW0vbWlncmF0ZS5jLTI2ODAtXFx0XFx0XFx0X19HRlBfTk9XQVJOO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQwNDQ9X19hbGxvY19wYWdlc19tYXlfb29tKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDA3MS1cXHQgKiB3ZSdyZSBzdGlsbCB1bmRlciBoZWF2eSBwcmVzc3VyZS4gQnV0IG1ha2Ugc3VyZSB0aGF0IHRoaXMgcmVjbGFpbVxcbm1tL3BhZ2VfYWxsb2MuYzo0MDcyOlxcdCAqIGF0dGVtcHQgc2hhbGwgbm90IGRlcGVuZCBvbiBfX0dGUF9ESVJFQ1RfUkVDTEFJTSBcXHUwMDI2XFx1MDAyNiAhX19HRlBfTk9SRVRSWVxcbm1tL3BhZ2VfYWxsb2MuYy00MDczLVxcdCAqIGFsbG9jYXRpb24gd2hpY2ggd2lsbCBuZXZlciBmYWlsIGR1ZSB0byBvb21fbG9jayBhbHJlYWR5IGhlbGQuXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDc4ND1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDgwNS1cXHQvKlxcbm1tL3BhZ2VfYWxsb2MuYzo0ODA2OlxcdCAqIENvc3RseSBfX0dGUF9OT1JFVFJZIGNhbGxlcnMgaGF2ZSBhIGNoZWFwIGZhbGxiYWNrLCBzbyBkb24ndCBzdGFsbFxcbm1tL3BhZ2VfYWxsb2MuYy00ODA3LVxcdCAqIHRoZW0gaW4gcmVjbGFpbSBvciBjb21wYWN0aW9uLiBfX0dGUF9USElTTk9ERSBjYWxsZXJzIGFyZSBleGVtcHQuXFxubW0vcGFnZV9hbGxvYy5jLTQ4MDgtXFx0ICovXFxubW0vcGFnZV9hbGxvYy5jOjQ4MDk6XFx0aWYgKGNvc3RseV9vcmRlciBcXHUwMDI2XFx1MDAyNiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9OT1JFVFJZKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3BhZ2VfYWxsb2MuYy00ODEwLVxcdCAgICAhKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfVEhJU05PREUpKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQ5NzMtXFx0XFx0ICovXFxubW0vcGFnZV9hbGxvYy5jOjQ5NzQ6XFx0XFx0aWYgKGdmcF9oYXNfZmxhZ3MoZ2ZwX21hc2ssIF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9USElTTk9ERSkpXFxubW0vcGFnZV9hbGxvYy5jLTQ5NzUtXFx0XFx0XFx0Z290byBub3BhZ2U7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDk3OS1cXHRcXHQgKiBwcmlvcml0eS4gUmVzdG9yZSBpdCBmb3IgZnVydGhlciByZXRyaWVzLCBpZiB0aG9zZSBhcmVcXG5tbS9wYWdlX2FsbG9jLmM6NDk4MDpcXHRcXHQgKiBhbGxvd2VkLiBXaXRoIF9fR0ZQX05PUkVUUlkgdGhlcmUgd2lsbCBiZSBhIHNpbmdsZSByb3VuZCBvZlxcbm1tL3BhZ2VfYWxsb2MuYy00OTgxLVxcdFxcdCAqIHJlY2xhaW0gYW5kIGNvbXBhY3Rpb24gd2l0aCB0aGUgbG93ZXJlZCBwcmlvcml0eS5cXG5tbS9wYWdlX2FsbG9jLmMtNDk4Mi1cXHRcXHQgKi9cXG5tbS9wYWdlX2FsbG9jLmM6NDk4MzpcXHRcXHRpZiAoIShnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX05PUkVUUlkpKVxcbm1tL3BhZ2VfYWxsb2MuYy00OTg0LVxcdFxcdFxcdGNvbXBhY3RfcHJpb3JpdHkgPSBERUZfQ09NUEFDVF9QUklPUklUWTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00OTkwLVxcdC8qIERvIG5vdCBsb29wIGlmIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQgKi9cXG5tbS9wYWdlX2FsbG9jLmM6NDk5MTpcXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9OT1JFVFJZKVxcbm1tL3BhZ2VfYWxsb2MuYy00OTkyLVxcdFxcdGdvdG8gbm9wYWdlO1xcbi0tXFxubW0vcGFnZV9mcmFnX2NhY2hlLmM9NDk9c3RhdGljIHN0cnVjdCBwYWdlICpfX3BhZ2VfZnJhZ19jYWNoZV9yZWZpbGwoc3RydWN0IHBhZ2VfZnJhZ19jYWNoZSAqbmMsXFxuLS1cXG5tbS9wYWdlX2ZyYWdfY2FjaGUuYy01Ny1cXHRnZnBfbWFzayA9IChnZnBfbWFzayBcXHUwMDI2IH5fX0dGUF9ESVJFQ1RfUkVDTEFJTSkgfCAgX19HRlBfQ09NUCB8XFxubW0vcGFnZV9mcmFnX2NhY2hlLmM6NTg6XFx0XFx0ICAgX19HRlBfTk9XQVJOIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0M7XFxubW0vcGFnZV9mcmFnX2NhY2hlLmMtNTktXFx0cGFnZSA9IF9fYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIFBBR0VfRlJBR19DQUNIRV9NQVhfT1JERVIsXFxuLS1cXG5tbS9wZXJjcHUuYz0xNzM1PXZvaWQgX19wZXJjcHUgKnBjcHVfYWxsb2Nfbm9wcm9mKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24sIGJvb2wgcmVzZXJ2ZWQsXFxuLS1cXG5tbS9wZXJjcHUuYy0xNzYwLVxcdCAqL1xcbm1tL3BlcmNwdS5jOjE3NjE6XFx0cGNwdV9nZnAgPSBnZnAgXFx1MDAyNiAoR0ZQX05PSU8gfCBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOKTtcXG5tbS9wZXJjcHUuYy0xNzYyLVxcdGlzX2F0b21pYyA9ICFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApO1xcbi0tXFxubW0vcGVyY3B1LmM9MjAxMz1zdGF0aWMgdm9pZCBwY3B1X2JhbGFuY2VfcG9wdWxhdGVkKHZvaWQpXFxuLS1cXG5tbS9wZXJjcHUuYy0yMDE1LVxcdC8qIGdmcCBmbGFncyBwYXNzZWQgdG8gdW5kZXJseWluZyBhbGxvY2F0b3JzICovXFxubW0vcGVyY3B1LmM6MjAxNjpcXHRjb25zdCBnZnBfdCBnZnAgPSBHRlBfS0VSTkVMIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PV0FSTjtcXG5tbS9wZXJjcHUuYy0yMDE3LVxcdHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaztcXG4tLVxcbm1tL3NobWVtLmM9NTkzND1pbnQgc2htZW1femVyb19zZXR1cF9kZXNjKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXFxuLS1cXG5tbS9zaG1lbS5jLTU5NTgtICpcXG5tbS9zaG1lbS5jOjU5NTk6ICogaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlc19ndHQoKSBtaXhlcyBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOIGluXFxubW0vc2htZW0uYy01OTYwLSAqIHdpdGggdGhlIG1hcHBpbmdfZ2ZwX21hc2soKSwgdG8gYXZvaWQgT09NaW5nIHRoZSBtYWNoaW5lIHVubmVjZXNzYXJpbHkuXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTE4NzE9c3RhdGljIHZvaWQgZmlsbF9wYWdlX2NhY2hlX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xODg2LVxcdFxcdGJub2RlID0gKHN0cnVjdCBrdmZyZWVfcmN1X2J1bGtfZGF0YSAqKVxcbm1tL3NsYWJfY29tbW9uLmM6MTg4NzpcXHRcXHRcXHRfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTE4ODgtXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTE5MTM9YWRkX3B0cl90b19idWxrX2tyY19sb2NrKHN0cnVjdCBrZnJlZV9yY3VfY3B1ICoqa3JjcCxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTkzMi1cXG5tbS9zbGFiX2NvbW1vbi5jOjE5MzM6XFx0XFx0XFx0Ly8gX19HRlBfTk9SRVRSWSAtIGFsbG93cyBhIGxpZ2h0LXdlaWdodCBkaXJlY3QgcmVjbGFpbVxcbm1tL3NsYWJfY29tbW9uLmMtMTkzNC1cXHRcXHRcXHQvLyB3aGF0IGlzIE9LIGZyb20gbWluaW1pemluZyBvZiBmYWxsYmFjayBoaXR0aW5nIHBvaW50IG9mXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTE5NDQtXFx0XFx0XFx0Ym5vZGUgPSAoc3RydWN0IGt2ZnJlZV9yY3VfYnVsa19kYXRhICopXFxubW0vc2xhYl9jb21tb24uYzoxOTQ1OlxcdFxcdFxcdFxcdF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9OT1dBUk4pO1xcbm1tL3NsYWJfY29tbW9uLmMtMTk0Ni1cXHRcXHRcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNigqa3JjcCktXFx1MDAzZWxvY2ssICpmbGFncyk7XFxuLS1cXG5tbS9zbHViLmM9MzQ0MT1zdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTM0NTctXFx0ICovXFxubW0vc2x1Yi5jOjM0NTg6XFx0YWxsb2NfZ2ZwID0gKGZsYWdzIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfTk9SRVRSWSkgXFx1MDAyNiB+X19HRlBfTk9GQUlMO1xcbm1tL3NsdWIuYy0zNDU5LVxcdGlmICgoYWxsb2NfZ2ZwIFxcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU0pIFxcdTAwMjZcXHUwMDI2IG9vX29yZGVyKG9vKSBcXHUwMDNlIG9vX29yZGVyKHMtXFx1MDAzZW1pbikpXFxuLS1cXG5tbS92bWFsbG9jLmM9MzgyMD1zdGF0aWMgdm9pZCBkZWZlcl92bV9hcmVhX2NsZWFudXAoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSlcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zODM1LSAqIEdGUF9OT0lPIC0gbWVtYWxsb2Nfbm9pb19zYXZlKClcXG5tbS92bWFsbG9jLmM6MzgzNjogKiBfX0dGUF9SRVRSWV9NQVlGQUlMLCBfX0dGUF9OT1JFVFJZIC0gbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKVxcbm1tL3ZtYWxsb2MuYy0zODM3LSAqIHRvIHByZXZlbnQgT09Nc1xcbi0tXFxubW0vdm1hbGxvYy5jPTM4NDI9bWVtYWxsb2NfYXBwbHlfZ2ZwX3Njb3BlKGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vdm1hbGxvYy5jLTM4NDYtXFx0aWYgKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykgfHxcXG5tbS92bWFsbG9jLmM6Mzg0NzpcXHRcXHRcXHQoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfUkVUUllfTUFZRkFJTCB8IF9fR0ZQX05PUkVUUlkpKSlcXG5tbS92bWFsbG9jLmMtMzg0OC1cXHRcXHRmbGFncyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7XFxuLS1cXG5tbS92bWFsbG9jLmM9Mzg2NT1zdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zOTY5LSAqIFRoaXMgZ2ZwIGxpc3RzIGFsbCBmbGFncyBjdXJyZW50bHkgcGFzc2VkIHRocm91Z2ggdm1hbGxvYy4gQ3VycmVudGx5LFxcbm1tL3ZtYWxsb2MuYzozOTcwOiAqIF9fR0ZQX1pFUk8gaXMgdXNlZCBieSBCUEYgYW5kIF9fR0ZQX05PUkVUUlkgaXMgdXNlZCBieSBwZXJjcHUuIEJvdGggZHJtXFxubW0vdm1hbGxvYy5jLTM5NzEtICogYW5kIEJQRiBhbHNvIHVzZSBHRlBfVVNFUi4gQWRkaXRpb25hbGx5LCB2YXJpb3VzIHVzZXJzIHBhc3NcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zOTc1LVxcdFxcdFxcdFxcdF9fR0ZQX05PRkFJTCB8IF9fR0ZQX1pFUk8gfFxcXFxcXG5tbS92bWFsbG9jLmM6Mzk3NjpcXHRcXHRcXHRcXHRfX0dGUF9OT1JFVFJZIHwgX19HRlBfUkVUUllfTUFZRkFJTCB8XFxcXFxcbm1tL3ZtYWxsb2MuYy0zOTc3LVxcdFxcdFxcdFxcdEdGUF9OT0ZTIHwgR0ZQX05PSU8gfCBHRlBfS0VSTkVMX0FDQ09VTlQgfFxcXFxcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zOTgwPXN0YXRpYyBnZnBfdCB2bWFsbG9jX2ZpeF9mbGFncyhnZnBfdCBmbGFncylcXG4tLVxcbm1tL3ZtYWxsb2MuYy00MDA2LSAqIFN1cHBvcnRlZCBHRlAgY2xhc3NlczogJUdGUF9LRVJORUwsICVHRlBfQVRPTUlDLCAlR0ZQX05PV0FJVCxcXG5tbS92bWFsbG9jLmM6NDAwNzogKiAlX19HRlBfUkVUUllfTUFZRkFJTCwgJV9fR0ZQX05PUkVUUlksICVHRlBfTk9GUyBhbmQgJUdGUF9OT0lPLlxcbm1tL3ZtYWxsb2MuYy00MDA4LSAqIFpvbmUgbW9kaWZpZXJzIGFyZSBub3Qgc3VwcG9ydGVkLlxcbi0tXFxubW0vdm1hbGxvYy5jLTQwMTItICogUmV0cnkgbW9kaWZpZXJzOiBvbmx5ICVfX0dGUF9OT0ZBSUwgaXMgZnVsbHkgc3VwcG9ydGVkO1xcbm1tL3ZtYWxsb2MuYzo0MDEzOiAqICVfX0dGUF9OT1JFVFJZIGFuZCAlX19HRlBfUkVUUllfTUFZRkFJTCBhcmUgc3VwcG9ydGVkIHdpdGggbGltaXRhdGlvbixcXG5tbS92bWFsbG9jLmMtNDAxNC0gKiBpLmUuIHBhZ2UgdGFibGVzIGFyZSBhbGxvY2F0ZWQgd2l0aCBOT1dBSVQgc2VtYW50aWMgc28gdGhleSBtaWdodCBmYWlsXFxuLS1cXG5tbS96c3dhcC5jPTg0MD1zdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4tLVxcbm1tL3pzd2FwLmMtODk4LVxcbm1tL3pzd2FwLmM6ODk5OlxcdGdmcCA9IEdGUF9OT1dBSVQgfCBfX0dGUF9OT1JFVFJZIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEU7XFxubW0venN3YXAuYy05MDAtXFx0aGFuZGxlID0genNfbWFsbG9jKHBvb2wtXFx1MDAzZXpzX3Bvb2wsIGRsZW4sIGdmcCwgcGFnZV90b19uaWQocGFnZSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODo1MC4wMDgyNjQzNzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMxOTQ5MDA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQYWdlIEFsbG9jYXRpb24gd2l0aCBDb3N0bHkgT3JkZXJzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgb3B0aW1hbCBjb25maWd1cmF0aW9uIGFuZCBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIG1lbW9yeSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2hlcmUgXCJjb3N0bHkgb3JkZXJzXCIgY29tZSBpbnRvIHBsYXkuXG5cbkluaXRpYWxseSwgSSdtIGxvb2tpbmcgYXQgaG93IGBfX0dGUF9OT1JFVFJZYCBpcyB1c2VkLCBhbmQgaXQgc2VlbXMgdGhpcyBmbGFnLCBhbG9uZyB3aXRoIGBfX0dGUF9OT1dBUk5gLCBpcyBhcHBsaWVkIHRvIGNlcnRhaW4gYGFsbG9jX2dmcGAgZmxhZ3MgYmFzZWQgb24gdGhlIG9yZGVyIHNpemUgaW4gYSBmZXcgcGxhY2VzOiBpbiBgbW0vc2x1Yi5jYCB3aXRoaW4gYGFsbG9jYXRlX3NsYWJgLCBpbiBgbW0vaHVnZV9tZW1vcnkuY2Agd2l0aCBgdm1hX3RocF9nZnBfbWFza2AsIGFuZCBpbiBgbW0vZmlsZW1hcC5jYC4gVGhpcyBzdWdnZXN0cyBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBmbGFncyBhbmQgaGlnaC1vcmRlciBhbGxvY2F0aW9ucy4gSSBhbHNvIHRvb2sgbm90ZSBvZiBgX19HRlBfRElSRUNUX1JFQ0xBSU1gLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBJIGhhZCBgQ09ORklHX0NPTVBBQ1RJT05gIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpbiBtaW5kLCBhcyB0aG9zZSBzZWVtIHJlbGV2YW50IHRvIGV4ZXJjaXNpbmcgdGhlIFwiY29zdGx5IG9yZGVyXCIgbG9naWMuIEhvd2V2ZXIsIEkgd2FudCB0byBiZSAqc3VyZSouXG5cblNvLCBJIGNoZWNrIHRoZSBjb2RlLCBhbmQgSSBzZWUgdGhhdCB0aGUgcmVsZXZhbnQgY29kZSBpbiBgbW0vcGFnZV9hbGxvYy5jYCAoc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQ4MDUgaW4gYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgKSBpcyAqbm90KiBndWFyZGVkIGJ5IGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzLiBUaGUgY29zdGx5IG9yZGVyIGNoZWNrcyAod2hpY2ggaW5jbHVkZSB0aGUgZmxhZ3MgbWVudGlvbmVkIGVhcmxpZXIpIGFyZSB1bmNvbmRpdGlvbmFsbHkgcHJlc2VudC4gYFBBR0VfQUxMT0NfQ09TVExZX09SREVSYCBpcyBkZWZpbmVkIHVuY29uZGl0aW9uYWxseSBhcyAzLlxuXG5UaGlzIG1lYW5zIGEgKnN0YW5kYXJkKiBrZXJuZWwgc2hvdWxkIGluY2x1ZGUgdGhlIHJlbGV2YW50IGNvZGUsIHRodXMgdGhlIGBFbmFibGVDb25maWdzYCBjYW4gYmUgZW1wdHkuIEhvd2V2ZXIsIGVuYWJsaW5nIGBDT05GSUdfQ09NUEFDVElPTmAgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHdvdWxkIGxpa2VseSAqaW5jcmVhc2UqIHRoZSBsaWtlbGlob29kIG9mIGhpdHRpbmcgdGhlc2UgY29zdGx5IGFsbG9jYXRpb24gcGF0aHMuXG5cbk5leHQsIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHJpZ2h0IGBGb2N1c1N5bWJvbHNgLiBDYW4gSSB1c2UgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgPyBXZWxsLCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyBpdCBhIHBvb3IgY2hvaWNlLiBJIG5lZWQgdG8gZmluZCB0aGUgKmVudHJ5cG9pbnRzKi5cblxuSSByZS1yZWFkIHRoZSBwcm9tcHQgb24gYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzLCB3aGljaCBydWxlcyBvdXQgdmVyeSBnZW5lcmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgZXZlcnl3aGVyZS4gU28sIEkgbmVlZCB0aGUgKnNwZWNpZmljKiBjYWxsZXJzIHRoYXQgd2lsbCBleGVyY2lzZSB0aGUgY29zdGx5IGBfX0dGUF9OT1JFVFJZYCBhbGxvY2F0aW9uIGxvZ2ljLlxuXG5JIGlkZW50aWZpZWQgYSBmZXcgY2FuZGlkYXRlcyBmcm9tIHRoZSBjb2RlOiBgYWxsb2NhdGVfc2xhYmAsIGB2bWFfdGhwX2dmcF9tYXNrYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIGBhbGxvY19odWdlX3plcm9fZm9saW9gIGFsc28gaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgYWxsb2NfcGFnZXNfbXBvbGAgaW4gYG1tL21lbXBvbGljeS5jYCwgYW5kIHBvdGVudGlhbGx5IGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLiBUaGUgc2xhYiBjYWNoZXMgYXJlIGludGVyZXN0aW5nIChgYWxsb2NhdGVfc2xhYmApIGJlY2F1c2UgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyBoYXBwZW4gdGhlcmUuXG5cbmB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgZGVhbHMgd2l0aCBUSFAgYWxsb2NhdGlvbnMuIGBhbGxvY19odWdlX3plcm9fZm9saW9gIGlzIGFub3RoZXIgcG90ZW50aWFsbHkgZnJ1aXRmdWwgY2FsbGVyLiBUaGVyZWZvcmUsIGBGb2N1c1N5bWJvbHNgIG1pZ2h0IGluY2x1ZGUgZW50cnlwb2ludHMgc3VjaCBhcyBgYWxsb2NhdGVfc2xhYmAsIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLCBhbmQgYGFsbG9jX2h1Z2VfemVyb19mb2xpb2AuIEknbGwgZ28gY2hlY2sgYG1tL2h1Z2VfbWVtb3J5LmNgIHNwZWNpZmljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjM4OjU2LjMyNzc1NjM2MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExNjI5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hX2FsbG9jX2Fub25fZm9saW9fcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTEzNDc9RVhQT1JUX1NZTUJPTF9HUEwodGhwX2dldF91bm1hcHBlZF9hcmVhKTtcXG5tbS9odWdlX21lbW9yeS5jLTEzNDgtXFxubW0vaHVnZV9tZW1vcnkuYzoxMzQ5OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdlX21lbW9yeS5jLTEzNTAtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNDI0PXN0YXRpYyB2bV9mYXVsdF90IF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE0MzEtXFxubW0vaHVnZV9tZW1vcnkuYzoxNDMyOlxcdGZvbGlvID0gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHZtYSwgdm1mLVxcdTAwM2VhZGRyZXNzKTtcXG5tbS9odWdlX21lbW9yeS5jLTE0MzMtXFx0aWYgKHVubGlrZWx5KCFmb2xpbykpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIxMzU9c3RhdGljIHZtX2ZhdWx0X3QgZG9faHVnZV96ZXJvX3dwX3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjE0Mi1cXG5tbS9odWdlX21lbW9yeS5jOjIxNDM6XFx0Zm9saW8gPSB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQodm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjE0NC1cXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzg6NTYuMzc4OTIxNjExWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NTI5MzIzOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSWRlbnRpZnlpbmcgUG90ZW50aWFsIEJvdHRsZW5lY2tzIGluIE1lbW9yeSBBbGxvY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGFyZWFzIHdoZXJlIHdlJ3JlIHNlZWluZyB0aGUgaGVhdmllc3QgbWVtb3J5IGFsbG9jYXRpb24gY29zdHMuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGxlYWRzIG1lIHRvIHRoZXNlIGZ1bmN0aW9uczogYF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgLCBgZG9faHVnZV96ZXJvX3dwX3BtZGAsIGBhbGxvY19odWdlX3plcm9fZm9saW9gLCBhbmQgYGFsbG9jYXRlX3NsYWJgLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgc3VzcGVjdHMgZm9yIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBvcGVyYXRpb25zLlxuXG5CdXQgSSBrbm93IHRoZXJlJ3MgbW9yZSB0byBpdCB0aGFuIGp1c3QgdGhlIG9idmlvdXMuIE15IG5leHQgc3RlcCBpcyB0byB0aGluayBjcml0aWNhbGx5IGFib3V0ICpvdGhlciogZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgdHJpZ2dlcmluZyBjb3N0bHkgYWxsb2NhdGlvbnMsIGV2ZW4gaWYgdGhleSdyZSBub3QgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIExldCdzIHNlZS4uLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGRlYWxpbmcgd2l0aCBmaWxlIG1hcHBpbmcsIHBvdGVudGlhbGx5LCBsaWtlIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgLCBvciwgaW4gdGhlIHNoYXJlZCBtZW1vcnkgc3BhY2UsIHdoYXQgYWJvdXQgYHNobWVtX2FsbG9jX2ZvbGlvYCBvciBgc2htZW1fYWxsb2NfaHVnZWZvbGlvYD8gVGhlc2UgY291bGQgYmUgc2lnbmlmaWNhbnQgY29udHJpYnV0b3JzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgc2htZW0uY2AgdG8gc2VlIGlmIHRob3NlIGFyZSB0aGUgY3VscHJpdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDc1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzg6NTguODMxODU2NjQxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTYzNjQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaG1lbV9hbGxvY19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9ODY0PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpmaWxlX3N0YXRzX2F0dHJzW10gPSB7XFxubW0vaHVnZV9tZW1vcnkuYy04NjUtI2lmZGVmIENPTkZJR19TSE1FTVxcbm1tL2h1Z2VfbWVtb3J5LmM6ODY2OlxcdFxcdTAwMjZzaG1lbV9hbGxvY19hdHRyLmF0dHIsXFxubW0vaHVnZV9tZW1vcnkuYy04NjctXFx0XFx1MDAyNnNobWVtX2ZhbGxiYWNrX2F0dHIuYXR0cixcXG4tLVxcbm1tL3NobWVtLmM9MTkxNz1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5tbS9zaG1lbS5jLTE5MjQtXFxubW0vc2htZW0uYzoxOTI1OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX2FsbG9jX2ZvbGlvKGdmcF90IGdmcCwgaW50IG9yZGVyLFxcbm1tL3NobWVtLmMtMTkyNi1cXHRcXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbywgcGdvZmZfdCBpbmRleClcXG4tLVxcbm1tL3NobWVtLmMtMTkzOC1cXG5tbS9zaG1lbS5jOjE5Mzk6c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fYWxsb2NfYW5kX2FkZF9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG5tbS9zaG1lbS5jLTE5NDAtXFx0XFx0Z2ZwX3QgZ2ZwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0xOTYxLVxcdFxcdFxcdGFsaWduZWRfaW5kZXggPSByb3VuZF9kb3duKGluZGV4LCBwYWdlcyk7XFxubW0vc2htZW0uYzoxOTYyOlxcdFxcdFxcdGZvbGlvID0gc2htZW1fYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgaW5mbywgYWxpZ25lZF9pbmRleCk7XFxubW0vc2htZW0uYy0xOTYzLVxcdFxcdFxcdGlmIChmb2xpbykge1xcbi0tXFxubW0vc2htZW0uYy0xOTc0LVxcdFxcdHBhZ2VzID0gMTtcXG5tbS9zaG1lbS5jOjE5NzU6XFx0XFx0Zm9saW8gPSBzaG1lbV9hbGxvY19mb2xpbyhnZnAsIDAsIGluZm8sIGluZGV4KTtcXG5tbS9zaG1lbS5jLTE5NzYtXFx0fVxcbi0tXFxubW0vc2htZW0uYz0yMDg5PXN0YXRpYyBpbnQgc2htZW1fcmVwbGFjZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGdmcF90IGdmcCxcXG4tLVxcbm1tL3NobWVtLmMtMjExMS1cXG5tbS9zaG1lbS5jOjIxMTI6XFx0bmV3ID0gc2htZW1fYWxsb2NfZm9saW8oZ2ZwLCBmb2xpb19vcmRlcihvbGQpLCBpbmZvLCBpbmRleCk7XFxubW0vc2htZW0uYy0yMTEzLVxcdGlmICghbmV3KVxcbi0tXFxubW0vc2htZW0uYz0yNDI4PXN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0yNTE1LVxcdFxcdGh1Z2VfZ2ZwID0gdGhwX3NobWVtX2xpbWl0X2dmcF9tYXNrKGh1Z2VfZ2ZwLCBnZnApO1xcbm1tL3NobWVtLmM6MjUxNjpcXHRcXHRmb2xpbyA9IHNobWVtX2FsbG9jX2FuZF9hZGRfZm9saW8odm1mLCBodWdlX2dmcCxcXG5tbS9zaG1lbS5jLTI1MTctXFx0XFx0XFx0XFx0aW5vZGUsIGluZGV4LCBmYXVsdF9tbSwgb3JkZXJzKTtcXG4tLVxcbm1tL3NobWVtLmMtMjUyNy1cXG5tbS9zaG1lbS5jOjI1Mjg6XFx0Zm9saW8gPSBzaG1lbV9hbGxvY19hbmRfYWRkX2ZvbGlvKHZtZiwgZ2ZwLCBpbm9kZSwgaW5kZXgsIGZhdWx0X21tLCAwKTtcXG5tbS9zaG1lbS5jLTI1MjktXFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4tLVxcbm1tL3NobWVtLmM9MzE0Mj1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9tZmlsbF9mb2xpb19hbGxvYyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3NobWVtLmMtMzE1NC1cXG5tbS9zaG1lbS5jOjMxNTU6XFx0Zm9saW8gPSBzaG1lbV9hbGxvY19mb2xpbyhnZnAsIDAsIGluZm8sIHBnb2ZmKTtcXG5tbS9zaG1lbS5jLTMxNTYtXFx0aWYgKCFmb2xpbylcXG4tLVxcbm1tL3NobWVtLmM9NTExNT1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnNobWVtX2lub2RlX2NhY2hlcCBfX3JvX2FmdGVyX2luaXQ7XFxubW0vc2htZW0uYy01MTE2LVxcbm1tL3NobWVtLmM6NTExNzpzdGF0aWMgc3RydWN0IGlub2RlICpzaG1lbV9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbm1tL3NobWVtLmMtNTExOC17XFxuLS1cXG5tbS9zaG1lbS5jPTUyNDI9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcyA9IHtcXG5tbS9zaG1lbS5jOjUyNDM6XFx0LmFsbG9jX2lub2RlXFx0PSBzaG1lbV9hbGxvY19pbm9kZSxcXG5tbS9zaG1lbS5jLTUyNDQtXFx0LmZyZWVfaW5vZGVcXHQ9IHNobWVtX2ZyZWVfaW5fY29yZV9pbm9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzg6NTguODgxNDk5NTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDA1ODMyNDk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGaW5hbCBGdXp6aW5nIENoZWNrIC0gTWVtb3J5IEFsbG9jYXRpb24gU2xvd3BhdGgqKlxuXG5Pa2F5LCBmaW5hbCBjaGVjayB0aW1lLiBMZXQncyBtYWtlIHN1cmUgdGhpcyBhbGwgbGluZXMgdXAuXG5cbjEuICBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuIEdvb2QuIFdlJ3JlIG1vZGlmeWluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHNsb3dwYXRoIGxvZ2ljIHJpZ2h0IHRoZXJlIGluIGBtbS9wYWdlX2FsbG9jLmNgLCBzcGVjaWZpY2FsbHkgaG93IGBfX0dGUF9ESVJFQ1RfUkVDTEFJTWAgaXMgaGFuZGxlZCBpbiBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgZm9yIHRob3NlIGJpZyBhbGxvY2F0aW9ucyB3aXRoIGBfX0dGUF9OT1JFVFJZYC4gVGhpcyAqZGVmaW5pdGVseSogaW1wYWN0cyBkaXJlY3QgcmVjbGFpbSBhbmQgbWVtb3J5IGNvbXBhY3Rpb24uIEltcG9ydGFudCBzdHVmZi5cblxuMi4gIGBFbmFibGVDb25maWdzYCBpcyBlbXB0eS4gUmlnaHQsIG1ha2VzIHNlbnNlLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGtlcm5lbCBzdHVmZiB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIE5vIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGhlcmUuIFdlJ3JlIGdldHRpbmcgYXQgYSBjb3JlIGNvbXBvbmVudC5cblxuMy4gIGBGb2N1c1N5bWJvbHNgOiBSaWdodCwgbm8gZ2VuZXJpYyBhbGxvY2F0b3JzIG9yIHBhZ2UgZmF1bHQgaGFuZGxlcnMuIFdlJ3JlIGJlaW5nIHN1cmdpY2FsLiBXZSdyZSB0YXJnZXRpbmcgdGhlIGhpZ2gtb3JkZXIsIGNvc3RseSBhbGxvY2F0aW9ucyB3aXRoIGBfX0dGUF9OT1JFVFJZYC4gU3BlY2lmaWNhbGx5LCB0aGF0IG1lYW5zOlxuXG4gICAgKiAgIGBhbGxvY19odWdlX3plcm9fZm9saW9gIC0gYmlnLCB6ZXJvZWQgZm9saW9zLlxuICAgICogICBgX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgLSBsYXJnZSBhbm9ueW1vdXMgcGFnZXMsIGNyaXRpY2FsIGZvciBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuXG4gICAgKiAgIGBhbGxvY2F0ZV9zbGFiYCAtIHRoZSBzbGFiIGFsbG9jYXRvciwgYWx3YXlzIGEgZ29vZCB0YXJnZXQuXG4gICAgKiAgIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgIC0gaGFuZGxpbmcgZmlsZSBtYXBwaW5ncyB3aXRoIG1lbW9yeSBwb2xpY2llcywgYWxzbyBrZXkuXG5cbkFscmlnaHQsIHRoYXQgY292ZXJzIGl0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0OTUsIk91dHB1dFRva2VucyI6MTY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjM5OjAyLjkzOTgyNzAyNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfaHVnZV96ZXJvX2ZvbGlvXCIsXG4gICAgXCJfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlXCIsXG4gICAgXCJhbGxvY2F0ZV9zbGFiXCIsXG4gICAgXCJfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHNsb3dwYXRoIGxvZ2ljIGluIG1tL3BhZ2VfYWxsb2MuYyAoX19hbGxvY19wYWdlc19zbG93cGF0aCkgdG8gY2xlYXIgX19HRlBfRElSRUNUX1JFQ0xBSU0gZm9yIGNvc3RseS1vcmRlciBhbGxvY2F0aW9ucyByZXF1ZXN0aW5nIF9fR0ZQX05PUkVUUlkgKHVubGVzcyBfX0dGUF9USElTTk9ERSBpcyBzcGVjaWZpZWQpLiBUaGlzIGRpcmVjdGx5IGFsdGVycyBkaXJlY3QgcmVjbGFpbSBhbmQgY29tcGFjdGlvbiBiZWhhdmlvciBmb3IgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyBzdWNoIGFzIFRIUCBhbmQgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbnMuIEl0IHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIGNvbXBhY3Rpb24gYW5kIGZhbGxiYWNrIGludmFyaWFudHMgaG9sZCB3aXRob3V0IGNhdXNpbmcgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBhbGxvY2F0aW9uIGZhaWx1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX2h1Z2VfemVyb19mb2xpb1wiLFxuICAgIFwiX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZVwiLFxuICAgIFwiYWxsb2NhdGVfc2xhYlwiLFxuICAgIFwiX19maWxlbWFwX2dldF9mb2xpb19tcG9sXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzbG93cGF0aCBsb2dpYyBpbiBtbS9wYWdlX2FsbG9jLmMgKF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgpIHRvIGNsZWFyIF9fR0ZQX0RJUkVDVF9SRUNMQUlNIGZvciBjb3N0bHktb3JkZXIgYWxsb2NhdGlvbnMgcmVxdWVzdGluZyBfX0dGUF9OT1JFVFJZICh1bmxlc3MgX19HRlBfVEhJU05PREUgaXMgc3BlY2lmaWVkKS4gVGhpcyBkaXJlY3RseSBhbHRlcnMgZGlyZWN0IHJlY2xhaW0gYW5kIGNvbXBhY3Rpb24gYmVoYXZpb3IgZm9yIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgc3VjaCBhcyBUSFAgYW5kIGxhcmdlIGZvbGlvIGFsbG9jYXRpb25zLiBJdCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBjb21wYWN0aW9uIGFuZCBmYWxsYmFjayBpbnZhcmlhbnRzIGhvbGQgd2l0aG91dCBjYXVzaW5nIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYWxsb2NhdGlvbiBmYWlsdXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzk6MDIuOTM5ODU0Nzg2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIzNTY2MTgwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjM5OjAyLjk0MDI2NjYxNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyMjM1MjQ0Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBhbGxvY2F0b3Igc2xvd3BhdGggKF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgpIHRvIGNsZWFyIF9fR0ZQX0RJUkVDVF9SRUNMQUlNIGZvciBjb3N0bHktb3JkZXIgYWxsb2NhdGlvbnMgdGhhdCBoYXZlIF9fR0ZQX05PUkVUUlkgc2V0IChhbmQgbm90IF9fR0ZQX1RISVNOT0RFKSwgYXZvaWRpbmcgc3RhbGxzIGluIHJlY2xhaW0gYW5kIGNvbXBhY3Rpb24uXFxuXFxuVGhpcyBjaGFuZ2Ugc3RyaWN0bHkgbW9kaWZpZXMgYWxsb2NhdG9yIHJlY2xhaW0gYW5kIGNvbXBhY3Rpb24gYmVoYXZpb3IuIEl0IGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIG9yIHplcm9pbmcgKGUuZy4sIF9fR0ZQX1pFUk8pLCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBsZWFrIGluZm8gdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNjEyOGEyOTRhMjRlODRjMDI2NDc1MjA2YjVhMTUyMmZkOTNiZDE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAyMzozODoxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggMTJmYWM5MDg0YzQ4My4uNTQyYzJlYzMxMDYxMyAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNDc4NCwxMCArNDc4NCwxMCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcbiBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdFx0XHRcdFx0c3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxuIHtcbi1cdGJvb2wgY2FuX2RpcmVjdF9yZWNsYWltID0gZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0RJUkVDVF9SRUNMQUlNO1xuLVx0Ym9vbCBjYW5fY29tcGFjdCA9IGNhbl9kaXJlY3RfcmVjbGFpbSBcdTAwMjZcdTAwMjYgZ2ZwX2NvbXBhY3Rpb25fYWxsb3dlZChnZnBfbWFzayk7XG4tXHRib29sIG5vZmFpbCA9IGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9OT0ZBSUw7XG4gXHRjb25zdCBib29sIGNvc3RseV9vcmRlciA9IG9yZGVyIFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUjtcbitcdGJvb2wgY2FuX2RpcmVjdF9yZWNsYWltO1xuK1x0Ym9vbCBjYW5fY29tcGFjdDtcbitcdGJvb2wgbm9mYWlsO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuIFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzO1xuIFx0dW5zaWduZWQgbG9uZyBkaWRfc29tZV9wcm9ncmVzcztcbkBAIC00ODAyLDYgKzQ4MDIsMTggQEAgX19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0Ym9vbCBjYW5fcmV0cnlfcmVzZXJ2ZXMgPSB0cnVlO1xuIFx0dW5zaWduZWQgbG9uZyBhbGxvY19zdGFydF90aW1lID0gamlmZmllcztcbiBcbitcdC8qXG4rXHQgKiBDb3N0bHkgX19HRlBfTk9SRVRSWSBjYWxsZXJzIGhhdmUgYSBjaGVhcCBmYWxsYmFjaywgc28gZG9uJ3Qgc3RhbGxcbitcdCAqIHRoZW0gaW4gcmVjbGFpbSBvciBjb21wYWN0aW9uLiBfX0dGUF9USElTTk9ERSBjYWxsZXJzIGFyZSBleGVtcHQuXG4rXHQgKi9cbitcdGlmIChjb3N0bHlfb3JkZXIgXHUwMDI2XHUwMDI2IChnZnBfbWFzayBcdTAwMjYgX19HRlBfTk9SRVRSWSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIShnZnBfbWFzayBcdTAwMjYgX19HRlBfVEhJU05PREUpKVxuK1x0XHRnZnBfbWFzayBcdTAwMjY9IH5fX0dGUF9ESVJFQ1RfUkVDTEFJTTtcbitcbitcdGNhbl9kaXJlY3RfcmVjbGFpbSA9IGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTTtcbitcdGNhbl9jb21wYWN0ID0gY2FuX2RpcmVjdF9yZWNsYWltIFx1MDAyNlx1MDAyNiBnZnBfY29tcGFjdGlvbl9hbGxvd2VkKGdmcF9tYXNrKTtcbitcdG5vZmFpbCA9IGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9OT0ZBSUw7XG4rXG4gXHRpZiAodW5saWtlbHkobm9mYWlsKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBBbHNvIHdlIGRvbid0IHN1cHBvcnQgX19HRlBfTk9GQUlMIHdpdGhvdXQgX19HRlBfRElSRUNUX1JFQ0xBSU0sXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozOTowMi45NDAyNjczODZaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEzMzczMDcyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlzayoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgd2FycmFudCBhIEtNU0FOIGNoZWNrLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBtb2RpZmllZCBjb2RlIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgZnVuY3Rpb24uXG5cbkkndmUgZ290IHRoZSBiZWZvcmUtYW5kLWFmdGVyIGNvZGUgc25pcHBldHMgaW4gZnJvbnQgb2YgbWUuIExvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIEkgc2VlIHRoYXQgdGhlIG9yZGVyIG9mIGluaXRpYWxpemF0aW9uIG9mIGJvb2xlYW4gdmFyaWFibGVzIGBjYW5fZGlyZWN0X3JlY2xhaW1gLCBgY2FuX2NvbXBhY3RgLCBhbmQgYG5vZmFpbGAgaGFzIGJlZW4gYWx0ZXJlZC4gVGhleSB3ZXJlIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24sIGFuZCBub3cgdGhlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUgbGF0ZXIgb24uIEEgbmV3IGNvbmRpdGlvbmFsIGJsb2NrIGhhcyBiZWVuIGFkZGVkIHRoYXQgbWF5IGNoYW5nZSB0aGUgdmFsdWUgb2YgYGdmcF9tYXNrYC4gVGhpcyBjb25kaXRpb25hbCBibG9jayBub3cgYWZmZWN0cyB0aGUgdmFsdWVzIG9mIGBjYW5fZGlyZWN0X3JlY2xhaW1gIGFuZCBgY2FuX2NvbXBhY3RgLiBJdCBzZWVtcyBsaWtlIHRoZSBjb25kaXRpb25hbCBsb2dpYyBpcyByZWxhdGVkIHRvIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgZGlyZWN0IHJlY2xhaW0gYW5kIGNvbXBhY3Rpb24gZm9yIGxhcmdlciBvcmRlcnMsIGVzcGVjaWFsbHkgaW4gY2FzZXMgd2hlcmUgdGhlIGFsbG9jYXRpb24gbWlnaHQgYmUgY29uc2lkZXJlZCBcImNvc3RseVwiIG9yIHdoZXJlIHdlIGFyZSBhc2tlZCBub3QgdG8gcmV0cnkuXG5cbk15IHByaW1hcnkgY29uY2VybiBub3cgaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpbmFkdmVydGVudGx5IGxlYXZlcyB0aGVzZSBib29sZWFuIHZhcmlhYmxlcyB1bmluaXRpYWxpemVkIGluIHNwZWNpZmljIGV4ZWN1dGlvbiBwYXRocy4gV2hpbGUgdGhlIGNvZGUgKmludGVuZHMqIHRvIGFzc2lnbiB2YWx1ZXMgbGF0ZXIsIHRoZSBjb21waWxlciBtaWdodCBub3QgZ3VhcmFudGVlIHRoYXQgYXNzaWdubWVudC4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBwYXRocyB0aGF0IGNvdWxkIHNraXAgdGhlIGluaXRpYWxpemF0aW9uPyBJZiBzbywgdGhpcyBpbnRyb2R1Y2VzIGEgY2xhc3NpYyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgcmlzay4gVGhhdCBzYWlkLCBpdCBzZWVtcyBsaWtlIHRoZSB2YXJpYWJsZSBgZ2ZwX21hc2tgIHNob3VsZCBiZSB3ZWxsIGluaXRpYWxpemVkIGJlZm9yZSBpdCBpcyB1c2VkLCBzbyBteSBpbnR1aXRpb24gaXMgdGhhdCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiAqc2hvdWxkKiBiZSBzYWZlLlxuXG5JJ20gZ29pbmcgdG8gc2NhbiB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vcGFnZV9hbGxvYy5jYCBhcm91bmQgbGluZSA0Nzg0LCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGZ1bmN0aW9uJ3Mgb3ZlcmFsbCBiZWhhdmlvciBhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgdmFyaWFibGVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBib29sZWFucyBhcmUgdXNlZCBhbmQgd2hhdCB0aGVpciBkZWZhdWx0IHZhbHVlcyB3b3VsZCBtZWFuLiBTcGVjaWZpY2FsbHksIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXhlY3V0aW9uIHBhdGhzIHdpdGhpbiB0aGUgZnVuY3Rpb24gdG8gYXNzZXNzIGlmIGFueSBwYXRoIG1pZ2h0IGNhdXNlIGBjYW5fZGlyZWN0X3JlY2xhaW1gLCBgY2FuX2NvbXBhY3RgLCBvciBgbm9mYWlsYCB0byByZW1haW4gdW5pbml0aWFsaXplZC4gQmFzZWQgb24gdGhpcyBkZWVwZXIgYW5hbHlzaXMsIEkgc2hvdWxkIGJlIGFibGUgdG8gbWFrZSBhIHNvdW5kIGp1ZGdtZW50IG9uIHdoZXRoZXIgS01TQU4gaXMgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzk6MDkuMDc0MDAwNTU3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDc4MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDc4MDpcXHRcXHR3YXJuX2FsbG9jX3Nob3dfbWVtKGdmcF9tYXNrLCBub2RlbWFzayk7XFxuNDc4MTpcXHR9XFxuNDc4MjpcXHRcXG40NzgzOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKlxcbjQ3ODQ6XFx0X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbjQ3ODU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxcbjQ3ODY6XFx0e1xcbjQ3ODc6XFx0XFx0Y29uc3QgYm9vbCBjb3N0bHlfb3JkZXIgPSBvcmRlciBcXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSO1xcbjQ3ODg6XFx0XFx0Ym9vbCBjYW5fZGlyZWN0X3JlY2xhaW07XFxuNDc4OTpcXHRcXHRib29sIGNhbl9jb21wYWN0O1xcbjQ3OTA6XFx0XFx0Ym9vbCBub2ZhaWw7XFxuNDc5MTpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XFxuNDc5MjpcXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3M7XFxuNDc5MzpcXHRcXHR1bnNpZ25lZCBsb25nIGRpZF9zb21lX3Byb2dyZXNzO1xcbjQ3OTQ6XFx0XFx0ZW51bSBjb21wYWN0X3ByaW9yaXR5IGNvbXBhY3RfcHJpb3JpdHk7XFxuNDc5NTpcXHRcXHRlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3RfcmVzdWx0O1xcbjQ3OTY6XFx0XFx0aW50IGNvbXBhY3Rpb25fcmV0cmllcztcXG40Nzk3OlxcdFxcdGludCBub19wcm9ncmVzc19sb29wcztcXG40Nzk4OlxcdFxcdHVuc2lnbmVkIGludCBjcHVzZXRfbWVtc19jb29raWU7XFxuNDc5OTpcXHRcXHR1bnNpZ25lZCBpbnQgem9uZWxpc3RfaXRlcl9jb29raWU7XFxuNDgwMDpcXHRcXHRpbnQgcmVzZXJ2ZV9mbGFncztcXG40ODAxOlxcdFxcdGJvb2wgY29tcGFjdF9maXJzdCA9IGZhbHNlO1xcbjQ4MDI6XFx0XFx0Ym9vbCBjYW5fcmV0cnlfcmVzZXJ2ZXMgPSB0cnVlO1xcbjQ4MDM6XFx0XFx0dW5zaWduZWQgbG9uZyBhbGxvY19zdGFydF90aW1lID0gamlmZmllcztcXG40ODA0OlxcdFxcbjQ4MDU6XFx0XFx0LypcXG40ODA2OlxcdFxcdCAqIENvc3RseSBfX0dGUF9OT1JFVFJZIGNhbGxlcnMgaGF2ZSBhIGNoZWFwIGZhbGxiYWNrLCBzbyBkb24ndCBzdGFsbFxcbjQ4MDc6XFx0XFx0ICogdGhlbSBpbiByZWNsYWltIG9yIGNvbXBhY3Rpb24uIF9fR0ZQX1RISVNOT0RFIGNhbGxlcnMgYXJlIGV4ZW1wdC5cXG40ODA4OlxcdFxcdCAqL1xcbjQ4MDk6XFx0XFx0aWYgKGNvc3RseV9vcmRlciBcXHUwMDI2XFx1MDAyNiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9OT1JFVFJZKSBcXHUwMDI2XFx1MDAyNlxcbjQ4MTA6XFx0XFx0ICAgICEoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9USElTTk9ERSkpXFxuNDgxMTpcXHRcXHRcXHRnZnBfbWFzayBcXHUwMDI2PSB+X19HRlBfRElSRUNUX1JFQ0xBSU07XFxuNDgxMjpcXHRcXG40ODEzOlxcdFxcdGNhbl9kaXJlY3RfcmVjbGFpbSA9IGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU07XFxuNDgxNDpcXHRcXHRjYW5fY29tcGFjdCA9IGNhbl9kaXJlY3RfcmVjbGFpbSBcXHUwMDI2XFx1MDAyNiBnZnBfY29tcGFjdGlvbl9hbGxvd2VkKGdmcF9tYXNrKTtcXG40ODE1OlxcdFxcdG5vZmFpbCA9IGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfTk9GQUlMO1xcbjQ4MTY6XFx0XFxuNDgxNzpcXHRcXHRpZiAodW5saWtlbHkobm9mYWlsKSkge1xcbjQ4MTg6XFx0XFx0XFx0LypcXG40ODE5OlxcdFxcdFxcdCAqIEFsc28gd2UgZG9uJ3Qgc3VwcG9ydCBfX0dGUF9OT0ZBSUwgd2l0aG91dCBfX0dGUF9ESVJFQ1RfUkVDTEFJTSxcXG40ODIwOlxcdFxcdFxcdCAqIG90aGVyd2lzZSwgd2UgbWF5IHJlc3VsdCBpbiBsb2NrdXAuXFxuNDgyMTpcXHRcXHRcXHQgKi9cXG40ODIyOlxcdFxcdFxcdFdBUk5fT05fT05DRSghY2FuX2RpcmVjdF9yZWNsYWltKTtcXG40ODIzOlxcdFxcdFxcdC8qXFxuNDgyNDpcXHRcXHRcXHQgKiBQRl9NRU1BTExPQyByZXF1ZXN0IGZyb20gdGhpcyBjb250ZXh0IGlzIHJhdGhlciBiaXphcnJlXFxuNDgyNTpcXHRcXHRcXHQgKiBiZWNhdXNlIHdlIGNhbm5vdCByZWNsYWltIGFueXRoaW5nIGFuZCBvbmx5IGNhbiBsb29wIHdhaXRpbmdcXG40ODI2OlxcdFxcdFxcdCAqIGZvciBzb21lYm9keSB0byBkbyBhIHdvcmsgZm9yIHVzLlxcbjQ4Mjc6XFx0XFx0XFx0ICovXFxuNDgyODpcXHRcXHRcXHRXQVJOX09OX09OQ0UoY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQRl9NRU1BTExPQyk7XFxuNDgyOTpcXHRcXHR9XFxuNDgzMDpcXHRcXG40ODMxOlxcdHJlc3RhcnQ6XFxuNDgzMjpcXHRcXHRjb21wYWN0aW9uX3JldHJpZXMgPSAwO1xcbjQ4MzM6XFx0XFx0bm9fcHJvZ3Jlc3NfbG9vcHMgPSAwO1xcbjQ4MzQ6XFx0XFx0Y29tcGFjdF9yZXN1bHQgPSBDT01QQUNUX1NLSVBQRUQ7XFxuNDgzNTpcXHRcXHRjb21wYWN0X3ByaW9yaXR5ID0gREVGX0NPTVBBQ1RfUFJJT1JJVFk7XFxuNDgzNjpcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbjQ4Mzc6XFx0XFx0em9uZWxpc3RfaXRlcl9jb29raWUgPSB6b25lbGlzdF9pdGVyX2JlZ2luKCk7XFxuNDgzODpcXHRcXG40ODM5OlxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjM5OjA5LjA3NDM0NzI2N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTAxMTQ1MTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFRoaXMgUGF0Y2ggaXMgYSBOby1PcCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyBpdCAqcmVhbGx5KiBkb2luZz8gVGhlIGNvZGUncyBjaGFuZ2luZyB0aGUgYmVoYXZpb3Igb2YgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgY2xlYXJpbmcgYF9fR0ZQX0RJUkVDVF9SRUNMQUlNYCBpbiB0aGUgYGdmcF9tYXNrYCBmb3IgbGFyZ2UgYWxsb2NhdGlvbnMgKG9yZGVyIFx1MDAzZSAzKSB0aGF0IGFyZSBmbGFnZ2VkIHdpdGggYF9fR0ZQX05PUkVUUllgIGJ1dCAqbm90KiBgX19HRlBfVEhJU05PREVgLiBUaGUgZ29hbD8gVG8gcHJldmVudCBzdGFsbGluZyB0aGVzZSBwb3RlbnRpYWxseSBjb3N0bHkgYW5kIG5vbi1yZXRyeWluZyBhbGxvY2F0b3JzIGR1cmluZyBkaXJlY3QgcmVjbGFpbSBvciBjb21wYWN0aW9uLlxuXG5Ob3csIG15IG1pbmQgaW5zdGFudGx5IGp1bXBzIHRvOiBEb2VzIHRoaXMgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeT8gRG9lcyBpdCBzb21laG93IGNhdXNlIHVzIHRvIHJlYWQgb3IgbGVhayB1bmluaXRpYWxpemVkIGRhdGE/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdDpcblxuMS4gICoqVW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmU/KiogTm9wZS4gQWxsIGxvY2FsIHZhcmlhYmxlcyBoZXJlIGFyZSBpbW1lZGlhdGVseSBhc3NpZ25lZCB2YWx1ZXMuIFNhZmUuXG4yLiAgKipNZW1vcnkgaW5pdGlhbGl6YXRpb24gc2VtYW50aWNzIGNoYW5nZWQ/KiogTm8sIGl0IGp1c3QgbW9kaWZpZXMgYSBmbGFnLCBzcGVjaWZpY2FsbHkgYF9fR0ZQX0RJUkVDVF9SRUNMQUlNYCwgbm90aGluZyBhYm91dCBpbml0aWFsaXppbmcgbWVtb3J5IHdpdGggc2F5IGBfX0dGUF9aRVJPYCBpcyBhbHRlcmVkLlxuMy4gICoqU3RydWN0dXJlIHBhY2tpbmcsIHBhZGRpbmcsIG9yIGFueSBkYXRhIHRyYW5zZmVycz8qKiBObywgbm8gY2hhbmdlIHRoZXJlLlxuNC4gICoqQW55IG90aGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyoqIFN0aWxsIG5vLlxuXG5TbywgaW4gbXkgZXhwZXJ0IG9waW5pb24sICoqTmVlZHNLTVNBTiBpcyBkZWZpbml0ZWx5IGZhbHNlIGhlcmUuKiogVGhpcyBpcyBhIGNsZWFyLWN1dCBjYXNlLlxuXG5Ob3csIGxldCdzIGFydGljdWxhdGUgdGhlIHJlYXNvbmluZywgZXNwZWNpYWxseSBjb250cmFzdGluZyBLTVNBTiBhbmQgS0FTQU4sIGZvciBnb29kIG1lYXN1cmUuIEhlcmXigJlzIGhvdyBJJ20gdGhpbmtpbmcgYWJvdXQgaXQ6XG5cbktNU0FOIGlzIG91ciB0b29sIGZvciBjYXRjaGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkc+KAlHN0dWZmIGxlYWtpbmcgZnJvbSBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucywgYW5kIGltcG9ydGFudGx5LCBpbmZvcm1hdGlvbiBsZWFrcyAqYWNyb3NzKiBzZWN1cml0eSBib3VuZGFyaWVzIGxpa2UgZnJvbSB0aGUga2VybmVsIHRvIHVzZXJzcGFjZS4gS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBhbGwgYWJvdXQgbWVtb3J5ICpzYWZldHkqIHZpb2xhdGlvbnM6IG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCB0aGUgdXN1YWwgc3VzcGVjdHMuXG5cblRoaXMgcGF0Y2g/IEl0J3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyBhbGxvY2F0b3IgKmJlaGF2aW9yKi4gSXQncyBhIGhldXJpc3RpYyBjaGFuZ2U6IHR3ZWFraW5nIHRoZSByZWNsYWltL2NvbXBhY3Rpb24gbG9naWMgZm9yIGxhcmdlLCBuby1yZXRyeSBhbGxvY2F0aW9ucy4gVGhlIHBhdGNoIG1vZGlmaWVzIGEgZmxhZyBhbmQgbm90aGluZyBtb3JlLiBJdCBkb2Vzbid0IGludHJvZHVjZSBvciBhbHRlciBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEl0IGRvZXNuJ3QgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBJdCBkb2Vzbid0IHRvdWNoIGhvdyBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQuIE5vIEtNU0FOLXNwZWNpZmljIGNoZWNrcyBhcmUgcmVxdWlyZWQuXG5cblNvLCBJJ20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYC4gVGhpcyBvbmUgaXMgY2xlYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMDAsIk91dHB1dFRva2VucyI6MTQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzk6MTUuMTc1NDk0NjdaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGFsbG9jYXRvciBzbG93cGF0aCAoX19hbGxvY19wYWdlc19zbG93cGF0aCkgdG8gY2xlYXIgX19HRlBfRElSRUNUX1JFQ0xBSU0gZm9yIGNvc3RseS1vcmRlciBhbGxvY2F0aW9ucyB0aGF0IGhhdmUgX19HRlBfTk9SRVRSWSBzZXQgKGFuZCBub3QgX19HRlBfVEhJU05PREUpLCBhdm9pZGluZyBzdGFsbHMgaW4gcmVjbGFpbSBhbmQgY29tcGFjdGlvbi5cXG5cXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBtb2RpZmllcyBhbGxvY2F0b3IgcmVjbGFpbSBhbmQgY29tcGFjdGlvbiBiZWhhdmlvci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gb3IgemVyb2luZyAoZS5nLiwgX19HRlBfWkVSTyksIGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIGxlYWsgaW5mbyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGFsbG9jYXRvciBzbG93cGF0aCAoX19hbGxvY19wYWdlc19zbG93cGF0aCkgdG8gY2xlYXIgX19HRlBfRElSRUNUX1JFQ0xBSU0gZm9yIGNvc3RseS1vcmRlciBhbGxvY2F0aW9ucyB0aGF0IGhhdmUgX19HRlBfTk9SRVRSWSBzZXQgKGFuZCBub3QgX19HRlBfVEhJU05PREUpLCBhdm9pZGluZyBzdGFsbHMgaW4gcmVjbGFpbSBhbmQgY29tcGFjdGlvbi5cXG5cXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBtb2RpZmllcyBhbGxvY2F0b3IgcmVjbGFpbSBhbmQgY29tcGFjdGlvbiBiZWhhdmlvci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gb3IgemVyb2luZyAoZS5nLiwgX19HRlBfWkVSTyksIGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIGxlYWsgaW5mbyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowckbr4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 22:50:45 +0000 UTC FinishedAt: 2026-09-05 23:39:16 +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": "f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e", "config_name": "upstream-apparmor-kasan.config", "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": "f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e", "config_name": "upstream-apparmor-kasan.config", "series_id": "b394e1ba-75a8-4da7-b722-4cb7ec7ccb27" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_huge_zero_folio", "__do_huge_pmd_anonymous_page", "allocate_slab", "__filemap_get_folio_mpol" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2NfaHVnZV96ZXJvX2ZvbGlvJiMzNDssCiAgICAmIzM0O19fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2UmIzM0OywKICAgICYjMzQ7YWxsb2NhdGVfc2xhYiYjMzQ7LAogICAgJiMzNDtfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2wmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBhbGxvY2F0b3Igc2xvd3BhdGggKF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgpIHRvIGNsZWFyIF9fR0ZQX0RJUkVDVF9SRUNMQUlNIGZvciBjb3N0bHktb3JkZXIgYWxsb2NhdGlvbnMgdGhhdCBoYXZlIF9fR0ZQX05PUkVUUlkgc2V0IChhbmQgbm90IF9fR0ZQX1RISVNOT0RFKSwgYXZvaWRpbmcgc3RhbGxzIGluIHJlY2xhaW0gYW5kIGNvbXBhY3Rpb24uXG5cblRoaXMgY2hhbmdlIHN0cmljdGx5IG1vZGlmaWVzIGFsbG9jYXRvciByZWNsYWltIGFuZCBjb21wYWN0aW9uIGJlaGF2aW9yLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiBvciB6ZXJvaW5nIChlLmcuLCBfX0dGUF9aRVJPKSwgYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgbGVhayBpbmZvIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc2xvd3BhdGggbG9naWMgaW4gbW0vcGFnZV9hbGxvYy5jIChfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKSB0byBjbGVhciBfX0dGUF9ESVJFQ1RfUkVDTEFJTSBmb3IgY29zdGx5LW9yZGVyIGFsbG9jYXRpb25zIHJlcXVlc3RpbmcgX19HRlBfTk9SRVRSWSAodW5sZXNzIF9fR0ZQX1RISVNOT0RFIGlzIHNwZWNpZmllZCkuIFRoaXMgZGlyZWN0bHkgYWx0ZXJzIGRpcmVjdCByZWNsYWltIGFuZCBjb21wYWN0aW9uIGJlaGF2aW9yIGZvciBoaWdoLW9yZGVyIGFsbG9jYXRpb25zIHN1Y2ggYXMgVEhQIGFuZCBsYXJnZSBmb2xpbyBhbGxvY2F0aW9ucy4gSXQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgY29tcGFjdGlvbiBhbmQgZmFsbGJhY2sgaW52YXJpYW50cyBob2xkIHdpdGhvdXQgY2F1c2luZyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGFsbG9jYXRpb24gZmFpbHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNjEyOGEyOTRhMjRlODRjMDI2NDc1MjA2YjVhMTUyMmZkOTNiZDE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAyMzozODoxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjU0MmMyZWMzMTA2MTMgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTQ3ODQsMTAgJiM0Mzs0Nzg0LDEwIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKlxuIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0XHRcdFx0XHRzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMpXG4ge1xuLVx0Ym9vbCBjYW5fZGlyZWN0X3JlY2xhaW0gPSBnZnBfbWFzayBcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU07XG4tXHRib29sIGNhbl9jb21wYWN0ID0gY2FuX2RpcmVjdF9yZWNsYWltIFx1MDAyNlx1MDAyNiBnZnBfY29tcGFjdGlvbl9hbGxvd2VkKGdmcF9tYXNrKTtcbi1cdGJvb2wgbm9mYWlsID0gZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PRkFJTDtcbiBcdGNvbnN0IGJvb2wgY29zdGx5X29yZGVyID0gb3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSO1xuJiM0MztcdGJvb2wgY2FuX2RpcmVjdF9yZWNsYWltO1xuJiM0MztcdGJvb2wgY2FuX2NvbXBhY3Q7XG4mIzQzO1x0Ym9vbCBub2ZhaWw7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4gXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3M7XG4gXHR1bnNpZ25lZCBsb25nIGRpZF9zb21lX3Byb2dyZXNzO1xuQEAgLTQ4MDIsNiAmIzQzOzQ4MDIsMTggQEAgX19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0Ym9vbCBjYW5fcmV0cnlfcmVzZXJ2ZXMgPSB0cnVlO1xuIFx0dW5zaWduZWQgbG9uZyBhbGxvY19zdGFydF90aW1lID0gamlmZmllcztcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENvc3RseSBfX0dGUF9OT1JFVFJZIGNhbGxlcnMgaGF2ZSBhIGNoZWFwIGZhbGxiYWNrLCBzbyBkb24mIzM5O3Qgc3RhbGxcbiYjNDM7XHQgKiB0aGVtIGluIHJlY2xhaW0gb3IgY29tcGFjdGlvbi4gX19HRlBfVEhJU05PREUgY2FsbGVycyBhcmUgZXhlbXB0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjb3N0bHlfb3JkZXIgXHUwMDI2XHUwMDI2IChnZnBfbWFzayBcdTAwMjYgX19HRlBfTk9SRVRSWSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICEoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSlcbiYjNDM7XHRcdGdmcF9tYXNrIFx1MDAyNj0gfl9fR0ZQX0RJUkVDVF9SRUNMQUlNO1xuJiM0MztcbiYjNDM7XHRjYW5fZGlyZWN0X3JlY2xhaW0gPSBnZnBfbWFzayBcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU07XG4mIzQzO1x0Y2FuX2NvbXBhY3QgPSBjYW5fZGlyZWN0X3JlY2xhaW0gXHUwMDI2XHUwMDI2IGdmcF9jb21wYWN0aW9uX2FsbG93ZWQoZ2ZwX21hc2spO1xuJiM0MztcdG5vZmFpbCA9IGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9OT0ZBSUw7XG4mIzQzO1xuIFx0aWYgKHVubGlrZWx5KG5vZmFpbCkpIHtcbiBcdFx0LypcbiBcdFx0ICogQWxzbyB3ZSBkb24mIzM5O3Qgc3VwcG9ydCBfX0dGUF9OT0ZBSUwgd2l0aG91dCBfX0dGUF9ESVJFQ1RfUkVDTEFJTSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDtfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlJiMzNDssCiAgICAmIzM0O2FsbG9jYXRlX3NsYWImIzM0OywKICAgICYjMzQ7X19maWxlbWFwX2dldF9mb2xpb19tcG9sJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc2xvd3BhdGggbG9naWMgaW4gbW0vcGFnZV9hbGxvYy5jIChfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKSB0byBjbGVhciBfX0dGUF9ESVJFQ1RfUkVDTEFJTSBmb3IgY29zdGx5LW9yZGVyIGFsbG9jYXRpb25zIHJlcXVlc3RpbmcgX19HRlBfTk9SRVRSWSAodW5sZXNzIF9fR0ZQX1RISVNOT0RFIGlzIHNwZWNpZmllZCkuIFRoaXMgZGlyZWN0bHkgYWx0ZXJzIGRpcmVjdCByZWNsYWltIGFuZCBjb21wYWN0aW9uIGJlaGF2aW9yIGZvciBoaWdoLW9yZGVyIGFsbG9jYXRpb25zIHN1Y2ggYXMgVEhQIGFuZCBsYXJnZSBmb2xpbyBhbGxvY2F0aW9ucy4gSXQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgY29tcGFjdGlvbiBhbmQgZmFsbGJhY2sgaW52YXJpYW50cyBob2xkIHdpdGhvdXQgY2F1c2luZyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGFsbG9jYXRpb24gZmFpbHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNjEyOGEyOTRhMjRlODRjMDI2NDc1MjA2YjVhMTUyMmZkOTNiZDE0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAyMzozODoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCAxMmZhYzkwODRjNDgzLi41NDJjMmVjMzEwNjEzIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC00Nzg0LDEwICYjNDM7NDc4NCwxMCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICoKIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKIAkJCQkJCXN0cnVjdCBhbGxvY19jb250ZXh0ICphYykKIHsKLQlib29sIGNhbl9kaXJlY3RfcmVjbGFpbSA9IGdmcF9tYXNrICZhbXA7IF9fR0ZQX0RJUkVDVF9SRUNMQUlNOwotCWJvb2wgY2FuX2NvbXBhY3QgPSBjYW5fZGlyZWN0X3JlY2xhaW0gJmFtcDsmYW1wOyBnZnBfY29tcGFjdGlvbl9hbGxvd2VkKGdmcF9tYXNrKTsKLQlib29sIG5vZmFpbCA9IGdmcF9tYXNrICZhbXA7IF9fR0ZQX05PRkFJTDsKIAljb25zdCBib29sIGNvc3RseV9vcmRlciA9IG9yZGVyICZndDsgUEFHRV9BTExPQ19DT1NUTFlfT1JERVI7CiYjNDM7CWJvb2wgY2FuX2RpcmVjdF9yZWNsYWltOwomIzQzOwlib29sIGNhbl9jb21wYWN0OwomIzQzOwlib29sIG5vZmFpbDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzOwogCXVuc2lnbmVkIGxvbmcgZGlkX3NvbWVfcHJvZ3Jlc3M7CkBAIC00ODAyLDYgJiM0Mzs0ODAyLDE4IEBAIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKIAlib29sIGNhbl9yZXRyeV9yZXNlcnZlcyA9IHRydWU7CiAJdW5zaWduZWQgbG9uZyBhbGxvY19zdGFydF90aW1lID0gamlmZmllczsKIAomIzQzOwkvKgomIzQzOwkgKiBDb3N0bHkgX19HRlBfTk9SRVRSWSBjYWxsZXJzIGhhdmUgYSBjaGVhcCBmYWxsYmFjaywgc28gZG9uJiMzOTt0IHN0YWxsCiYjNDM7CSAqIHRoZW0gaW4gcmVjbGFpbSBvciBjb21wYWN0aW9uLiBfX0dGUF9USElTTk9ERSBjYWxsZXJzIGFyZSBleGVtcHQuCiYjNDM7CSAqLwomIzQzOwlpZiAoY29zdGx5X29yZGVyICZhbXA7JmFtcDsgKGdmcF9tYXNrICZhbXA7IF9fR0ZQX05PUkVUUlkpICZhbXA7JmFtcDsKJiM0MzsJICAgICEoZ2ZwX21hc2sgJmFtcDsgX19HRlBfVEhJU05PREUpKQomIzQzOwkJZ2ZwX21hc2sgJmFtcDs9IH5fX0dGUF9ESVJFQ1RfUkVDTEFJTTsKJiM0MzsKJiM0MzsJY2FuX2RpcmVjdF9yZWNsYWltID0gZ2ZwX21hc2sgJmFtcDsgX19HRlBfRElSRUNUX1JFQ0xBSU07CiYjNDM7CWNhbl9jb21wYWN0ID0gY2FuX2RpcmVjdF9yZWNsYWltICZhbXA7JmFtcDsgZ2ZwX2NvbXBhY3Rpb25fYWxsb3dlZChnZnBfbWFzayk7CiYjNDM7CW5vZmFpbCA9IGdmcF9tYXNrICZhbXA7IF9fR0ZQX05PRkFJTDsKJiM0MzsKIAlpZiAodW5saWtlbHkobm9mYWlsKSkgewogCQkvKgogCQkgKiBBbHNvIHdlIGRvbiYjMzk7dCBzdXBwb3J0IF9fR0ZQX05PRkFJTCB3aXRob3V0IF9fR0ZQX0RJUkVDVF9SRUNMQUlNLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjI5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGFnZSBBbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRhcmdldHMgdGhlIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCBmdW5jdGlvbiB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIFRoaXMgaXMgYSBjb3JlIGFyZWEsIHNvIGxldCYjMzk7cyBwYXkgY2xvc2UgYXR0ZW50aW9uLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgc29tZSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1vZGlmaWVzIHRoZSBgZ2ZwX21hc2tgIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBgX19HRlBfTk9SRVRSWWAgYW5kIGBfX0dGUF9USElTTk9ERWAgZmxhZ3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByZXRyaWVzIGFuZCByZWNsYWltLiBUaGUgY29tbWVudCBnaXZlcyBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIHRoaXMuCgpJdCYjMzk7cyBldmlkZW50IHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBoZXJlLCBzcGVjaWZpY2FsbHkgZm9yIGNhbGxlcnMgdXNpbmcgYF9fR0ZQX05PUkVUUllgLCB3aGljaCBzdWdnZXN0cyB0aGF0IHdlIHdhbnQgdG8gYXZvaWQgcG90ZW50aWFsbHkgZXhwZW5zaXZlIHJlY2xhaW0gb3IgY29tcGFjdGlvbiBvcGVyYXRpb25zIGluIGNlcnRhaW4gY29udGV4dHMuIEkgdGhpbmsgdGhlIGNvc3RseSBvcmRlciBwYXJhbWV0ZXIgaXMgYWxzbyB2ZXJ5IGludGVyZXN0aW5nLCBhcyB0aGF0IHdpbGwgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBoZXJlLiBXZSBoYXZlIHRvIGNvbnNpZGVyIHdoYXQgY29uc3RpdHV0ZXMgYSAmIzM0O2Nvc3RseSBvcmRlci4mIzM0OwoKVGhlIGxvZ2ljIHRoZW4gc2V0cyBgY2FuX2RpcmVjdF9yZWNsYWltYCwgYGNhbl9jb21wYWN0YCwgYW5kIGBub2ZhaWxgIGJhc2VkIG9uIHRoZSBtb2RpZmllZCBgZ2ZwX21hc2tgLiBUaGlzIHNlZW1zIGZhaXJseSBzdHJhaWdodGZvcndhcmQuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGF0dGVtcHRpbmcgdG8gZW5zdXJlIHRoYXQgZXhwZW5zaXZlIHJlY2xhaW0gb3BlcmF0aW9ucyBkb24mIzM5O3QgdW5uZWNlc3NhcmlseSBibG9jayBjYWxsZXJzIHdpdGggYF9fR0ZQX05PUkVUUllgIGlmIHRoZXkgYXJlIG5vdCBleHBsaWNpdGx5IGFza2luZyBmb3IgaXQgb24gdGhlIGN1cnJlbnQgbm9kZS4gVGhpcyBjb3VsZCBpbXByb3ZlIHJlc3BvbnNpdmVuZXNzIGluIGNyaXRpY2FsIHBhdGhzIHdoZXJlIHJldHJpZXMgYXJlIHVuZGVzaXJhYmxlLCBidXQgd2Ugd2lsbCBoYXZlIHRvIGRpZyBpbiB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKTm93LCBJIHRoaW5rIHRoZSBiZXN0IHdheSB0byBnZXQgYSBmdWxsIGdyYXNwIG9mIHRoaXMgcGF0Y2ggaXMgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSBhcm91bmQgbGluZSA0Nzg0LCB3aGljaCBpcyBhIGtleSBwb2ludCB3aGVyZSB0aGlzIG5ldyBsb2dpYyBpcyBpbmplY3RlZC4gSSB3aWxsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgYSBmdWxsIHZpZXcgb2YgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ3ODA6XHRcdHdhcm5fYWxsb2Nfc2hvd19tZW0oZ2ZwX21hc2ssIG5vZGVtYXNrKTtcbjQ3ODE6XHR9XG40NzgyOlx0XG40NzgzOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqXG40Nzg0Olx0X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuNDc4NTpcdFx0XHRcdFx0XHRcdHN0cnVjdCBhbGxvY19jb250ZXh0ICphYylcbjQ3ODY6XHR7XG40Nzg3Olx0XHRjb25zdCBib29sIGNvc3RseV9vcmRlciA9IG9yZGVyIFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUjtcbjQ3ODg6XHRcdGJvb2wgY2FuX2RpcmVjdF9yZWNsYWltO1xuNDc4OTpcdFx0Ym9vbCBjYW5fY29tcGFjdDtcbjQ3OTA6XHRcdGJvb2wgbm9mYWlsO1xuNDc5MTpcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuNDc5MjpcdFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzO1xuNDc5MzpcdFx0dW5zaWduZWQgbG9uZyBkaWRfc29tZV9wcm9ncmVzcztcbjQ3OTQ6XHRcdGVudW0gY29tcGFjdF9wcmlvcml0eSBjb21wYWN0X3ByaW9yaXR5O1xuNDc5NTpcdFx0ZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3Jlc3VsdDtcbjQ3OTY6XHRcdGludCBjb21wYWN0aW9uX3JldHJpZXM7XG40Nzk3Olx0XHRpbnQgbm9fcHJvZ3Jlc3NfbG9vcHM7XG40Nzk4Olx0XHR1bnNpZ25lZCBpbnQgY3B1c2V0X21lbXNfY29va2llO1xuNDc5OTpcdFx0dW5zaWduZWQgaW50IHpvbmVsaXN0X2l0ZXJfY29va2llO1xuNDgwMDpcdFx0aW50IHJlc2VydmVfZmxhZ3M7XG40ODAxOlx0XHRib29sIGNvbXBhY3RfZmlyc3QgPSBmYWxzZTtcbjQ4MDI6XHRcdGJvb2wgY2FuX3JldHJ5X3Jlc2VydmVzID0gdHJ1ZTtcbjQ4MDM6XHRcdHVuc2lnbmVkIGxvbmcgYWxsb2Nfc3RhcnRfdGltZSA9IGppZmZpZXM7XG40ODA0Olx0XG40ODA1Olx0XHQvKlxuNDgwNjpcdFx0ICogQ29zdGx5IF9fR0ZQX05PUkVUUlkgY2FsbGVycyBoYXZlIGEgY2hlYXAgZmFsbGJhY2ssIHNvIGRvbiYjMzk7dCBzdGFsbFxuNDgwNzpcdFx0ICogdGhlbSBpbiByZWNsYWltIG9yIGNvbXBhY3Rpb24uIF9fR0ZQX1RISVNOT0RFIGNhbGxlcnMgYXJlIGV4ZW1wdC5cbjQ4MDg6XHRcdCAqL1xuNDgwOTpcdFx0aWYgKGNvc3RseV9vcmRlciBcdTAwMjZcdTAwMjYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9OT1JFVFJZKSBcdTAwMjZcdTAwMjZcbjQ4MTA6XHRcdCAgICAhKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9USElTTk9ERSkpXG40ODExOlx0XHRcdGdmcF9tYXNrIFx1MDAyNj0gfl9fR0ZQX0RJUkVDVF9SRUNMQUlNO1xuNDgxMjpcdFxuNDgxMzpcdFx0Y2FuX2RpcmVjdF9yZWNsYWltID0gZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0RJUkVDVF9SRUNMQUlNO1xuNDgxNDpcdFx0Y2FuX2NvbXBhY3QgPSBjYW5fZGlyZWN0X3JlY2xhaW0gXHUwMDI2XHUwMDI2IGdmcF9jb21wYWN0aW9uX2FsbG93ZWQoZ2ZwX21hc2spO1xuNDgxNTpcdFx0bm9mYWlsID0gZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PRkFJTDtcbjQ4MTY6XHRcbjQ4MTc6XHRcdGlmICh1bmxpa2VseShub2ZhaWwpKSB7XG40ODE4Olx0XHRcdC8qXG40ODE5Olx0XHRcdCAqIEFsc28gd2UgZG9uJiMzOTt0IHN1cHBvcnQgX19HRlBfTk9GQUlMIHdpdGhvdXQgX19HRlBfRElSRUNUX1JFQ0xBSU0sXG40ODIwOlx0XHRcdCAqIG90aGVyd2lzZSwgd2UgbWF5IHJlc3VsdCBpbiBsb2NrdXAuXG40ODIxOlx0XHRcdCAqL1xuNDgyMjpcdFx0XHRXQVJOX09OX09OQ0UoIWNhbl9kaXJlY3RfcmVjbGFpbSk7XG40ODIzOlx0XHRcdC8qXG40ODI0Olx0XHRcdCAqIFBGX01FTUFMTE9DIHJlcXVlc3QgZnJvbSB0aGlzIGNvbnRleHQgaXMgcmF0aGVyIGJpemFycmVcbjQ4MjU6XHRcdFx0ICogYmVjYXVzZSB3ZSBjYW5ub3QgcmVjbGFpbSBhbnl0aGluZyBhbmQgb25seSBjYW4gbG9vcCB3YWl0aW5nXG40ODI2Olx0XHRcdCAqIGZvciBzb21lYm9keSB0byBkbyBhIHdvcmsgZm9yIHVzLlxuNDgyNzpcdFx0XHQgKi9cbjQ4Mjg6XHRcdFx0V0FSTl9PTl9PTkNFKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKTtcbjQ4Mjk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzA3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZSBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1dvcnRoRnV6emluZz10cnVlLCYjMzQ7IHNpbmNlIHdlJiMzOTtyZSB0d2Vha2luZyBjb3JlIHBhZ2UgYWxsb2NhdG9yIGJlaGF2aW9yLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBpdCBoYW5kbGVzIGRpcmVjdCByZWNsYWltIGFuZCBjb21wYWN0aW9uLCBwYXJ0aWN1bGFybHkgZm9yIFRIUCBhbmQgaGlnaGVyLW9yZGVyIGFsbG9jYXRpb25zLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogZmlndXJpbmcgb3V0IGhvdyB0byBndWlkZSB0aGUgZnV6emVyIGVmZmVjdGl2ZWx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBydWxlcyBmb3IgYEZvY3VzU3ltYm9sc2AuIExldCYjMzk7cyBzZWUuLi4gdGhlIGNvcmUgcHJpbmNpcGxlIGlzIHRvIGF2b2lkIGRpbHV0aW5nIHRoZSBmdXp6aW5nIGVmZm9ydC4gSSBuZWVkIHRvIGF2b2lkIGxpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIGV2ZXJ5d2hlcmUuIFRoaXMgbWVhbnMgbm8gZ2VuZXJpYyBhbGxvY2F0b3JzLCBkZWFsbG9jYXRvcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEluc3RlYWQsIHRoZSBmb2N1cyBzaG91bGQgYmUgb24gdGFyZ2V0aW5nICpzcGVjaWZpYyBmZWF0dXJlIGxvZ2ljKiBvciBBUEkgZW50cnkgcG9pbnRzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGNoYW5nZS4gQWxzbywgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRob3NlIHBlc2t5IHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGRlZmluZWQgaW4gaGVhZGVycywgYW5kIG1ha2Ugc3VyZSB0aGF0IEkgZG9uJiMzOTt0IHByb3ZpZGUgYSB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVyLgoKU28sIHRoZSBxdWVzdGlvbiBpcywgaXMgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIHViaXF1aXRvdXM/IE9yIGlzIGl0IHN0YXRpYyBpbmxpbmUvc3RhdGljPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdG8gc2VlIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCwgYW5kIG1vcmUgaW1wb3J0YW50bHksIHdoZXJlIGl0IGlzIGRlZmluZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBpZiBpdCYjMzk7cyBhIHN1aXRhYmxlIHRhcmdldCBmb3IgYEZvY3VzU3ltYm9sc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgZnVuY3Rpb25zIHRvIGVuc3VyZSBJJiMzOTttIG5vdCBhY2NpZGVudGFsbHkgbGlzdGluZyBzb21ldGhpbmcgdGhhdCB0aGUgZnV6emVyIHdpbGwgY29uc2lkZXIgJiMzNDtmb2N1c2VkJiMzNDsgd2l0aG91dCBhY3R1YWxseSBwcm92aWRpbmcgYW55IHVzZWZ1bCBzaWduYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbGxvY19wYWdlc19zbG93cGF0aCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2FsbG9jLmM9NDc4Mz1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcbm1tL3BhZ2VfYWxsb2MuYzo0Nzg0Ol9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy00Nzg1LVx0XHRcdFx0XHRcdHN0cnVjdCBhbGxvY19jb250ZXh0ICphYylcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NTM5NT1zdHJ1Y3QgcGFnZSAqX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy01NDYwLVxubW0vcGFnZV9hbGxvYy5jOjU0NjE6XHRwYWdlID0gX19hbGxvY19wYWdlc19zbG93cGF0aChhbGxvY19nZnAsIG9yZGVyLCBcdTAwMjZhYyk7XG5tbS9wYWdlX2FsbG9jLmMtNTQ2Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODAyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTWVtb3J5IEFsbG9jYXRpb24gQm90dGxlbmVja3MqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlLiBGaXJzdCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjdWxwcml0cyDigJMgdGhlIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHRyaWdnZXJpbmcgdGhpcyBzbG93ZG93bi4gSSBzaG91bGQgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBjYWxscyB0byBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCBhbmQgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgLCBvciBhbnl0aGluZyB0aGF0IGhlYXZpbHkgbGV2ZXJhZ2VzIGBfX0dGUF9OT1JFVFJZYCBhbGxvY2F0aW9ucy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgpBbHRlcm5hdGl2ZWx5LCBJIGNvdWxkIGJyb2FkZW4gdGhlIHNlYXJjaCB0byBsb29rIGZvciAqYW55KiBwbGFjZSBpbiB0aGUga2VybmVsIG9yIHRoZSBtZW1vcnkgbWFuYWdlbWVudCAobW0pIGNvZGUgd2hlcmUgdGhvc2UgbW9yZSBzaWduaWZpY2FudCBvcmRlciBhbGxvY2F0aW9ucyBhcmUgdXNpbmcgYF9fR0ZQX05PUkVUUllgLiBUaG9zZSBjYW4gYmUgcmVhbCBwZXJmb3JtYW5jZSBraWxsZXJzLgoKQWN0dWFsbHksIGJlZm9yZSBJIGdldCB0b28gZGVlcCwgaXQgbWlnaHQgYmUgbW9yZSBlZmZpY2llbnQgdG8ganVzdCBncmVwIGRpcmVjdGx5IGZvciB0aGUga2V5IGZsYWdzIGFuZCBtYWNyb3MuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYF9fR0ZQX05PUkVUUllgLCBgUEFHRV9BTExPQ19DT1NUTFlfT1JERVJgLCBvciB0aG9zZSBgR0ZQX1RSQU5TSFVHRWAgLyBgR0ZQX1RSQU5TSFVHRV9MSUdIVGAgZmxhZ3Mg4oCTIHRoYXQgc2hvdWxkIGltbWVkaWF0ZWx5IGhpZ2hsaWdodCByZWxldmFudCBjb2RlIHBhdGhzLiBUaGF0IHNob3VsZCBjdXQgZG93biBvbiB0aGUgbm9pc2UgZnJvbSB0aGlzIHNlYXJjaCwgYW5kIGdldCBtZSBkaXJlY3RseSB0byB0aGUgaW1wb3J0YW50IHBhcnRzIG9mIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0dGUF9UUkFOU0hVR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oPTI2PWVudW0ge1xuLS1cbmluY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmgtMzYzLSAqXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oOjM2NDogKiAlR0ZQX1RSQU5TSFVHRSBhbmQgJUdGUF9UUkFOU0hVR0VfTElHSFQgYXJlIHVzZWQgZm9yIFRIUCBhbGxvY2F0aW9ucy4gVGhleVxuaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaC0zNjUtICogYXJlIGNvbXBvdW5kIGFsbG9jYXRpb25zIHRoYXQgd2lsbCBnZW5lcmFsbHkgZmFpbCBxdWlja2x5IGlmIG1lbW9yeSBpcyBub3Rcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oLTM4MC0jZGVmaW5lIEdGUF9ISUdIVVNFUl9NT1ZBQkxFXHQoR0ZQX0hJR0hVU0VSIHwgX19HRlBfTU9WQUJMRSB8IF9fR0ZQX1NLSVBfS0FTQU4pXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oOjM4MTojZGVmaW5lIEdGUF9UUkFOU0hVR0VfTElHSFRcdCgoR0ZQX0hJR0hVU0VSX01PVkFCTEUgfCBfX0dGUF9DT01QIHwgXFxcbmluY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmgtMzgyLVx0XHRcdCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOKSBcdTAwMjYgfl9fR0ZQX1JFQ0xBSU0pXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oOjM4MzojZGVmaW5lIEdGUF9UUkFOU0hVR0VcdChHRlBfVFJBTlNIVUdFX0xJR0hUIHwgX19HRlBfRElSRUNUX1JFQ0xBSU0pXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oLTM4NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDkyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBvbiBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgZm9yIEZvY3VzU3ltYm9scyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uc2lkZXIgaXRzIGluY2x1c2lvbiBpbiBgRm9jdXNTeW1ib2xzYCwgYnV0IEkgaGF2ZSBhIHNlcmlvdXMgcmVzZXJ2YXRpb24sIGFuZCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlLgoKVGhlIGd1aWRlbGluZSBpcyBzY3JlYW1pbmcgYXQgbWU6IGF2b2lkIHViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRocyEgSSBuZWVkIHRvIGJlICp2ZXJ5KiBjYXV0aW91cyBhYm91dCBsaXN0aW5nIGNvcmUgYWxsb2NhdG9ycyBsaWtlIHRoaXMgb25lLiBJZiBpdCYjMzk7cyB1c2VkICpldmVyeXdoZXJlKiwgdGhlbiBpbmNsdWRpbmcgaXQgd2lsbCBsZWFkIHRvIGEgZGVsdWdlIG9mIG5vaXNlIGluIG15IGZ1enppbmcgcmVzdWx0cywgb2JzY3VyaW5nIGFueSBhY3R1YWwgdGFyZ2V0ZWQgY2hhbmdlcy4gU28sIHRoZSBmaXJzdCBxdWVzdGlvbiBpczogaXMgdGhpcyAqcmVhbGx5KiBhIHViaXF1aXRvdXMgZnVuY3Rpb24/IEkgc3VzcGVjdCBpdCBtaWdodCBiZS4KCkhvd2V2ZXIsIEkmIzM5O20gbm90IHJlYWR5IHRvIGdpdmUgdXAganVzdCB5ZXQuIFdoYXQgaWYgdGhlcmUgYXJlICpzcGVjaWZpYyogY2FsbGVycyB0aGF0IGFyZSBpbnRlcmVzdGluZz8gTXkgbmV4dCB0cmFpbiBvZiB0aG91Z2h0IGlzIHRvIGxvb2sgZm9yIHRoZSAqbGVzcyogY29tbW9uIHVzZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBmb3IgcGxhY2VzIHdoZXJlIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCBpcyBjYWxsZWQgd2l0aCBjb3N0bHkgbWVtb3J5IG9yZGVyIGFsbG9jYXRpb25zLCBvciB3aXRoIGBfX0dGUF9OT1JFVFJZYC4gVGhlIGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSBwb3RlbnRpYWwgJiMzNDtzcGVjaWFsIGNhc2VzJiMzNDsgd2hlcmUgdGhlIGZ1bmN0aW9uIG1pZ2h0IGJlIGludm9sdmVkIGluIGludGVyZXN0aW5nLCBsZXNzLWNvbW1vbiBiZWhhdmlvci4gU28sIGxldCYjMzk7cyB0cnkgdG8gZm9jdXMgb3VyIGF0dGVudGlvbiBvbiBmdW5jdGlvbnMgd2hlcmUgbGFyZ2UgbWVtb3J5IG9yZGVycyBhcmUgcmVxdWVzdGVkIG9yIHdoZXJlIGEgbm9uLXJldHJ5YWJsZSBhbGxvY2F0aW9uIGlzIGhhcHBlbmluZyB3aXRoIHRoaXMgc2xvd3BhdGggZnVuY3Rpb24uCgpUaGVyZWZvcmUsIGxldCYjMzk7cyBzZWFyY2ggZm9yIGNhbGxzIHRvIGBfX0dGUF9OT1JFVFJZYCB3aXRoIGFuIG9yZGVyIGxhcmdlciB0aGFuIGBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUmAgb3IganVzdCBzZWFyY2ggZm9yIGBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUmAgaW4gbW0vIGZpbGVzIHRvIHNlZSB3aGljaCBjYWxsZXJzIG1pZ2h0IGJlIG9mIGludGVyZXN0LiBUaGlzIHdpbGwgaGVscCBtZSBuYXJyb3cgZG93biB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgZ2VuZXJhbGx5IHViaXF1aXRpb3VzIG9yIGlmIHdlIGNhbiBtYWtlIGEgY2FzZSBmb3IgaXQgd2l0aGluIHRoZSBGb2N1c1N5bWJvbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BBR0VfQUxMT0NfQ09TVExZX09SREVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYz0yNzc9X19yZXNldF9pc29sYXRpb25fcGZuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBjaGVja19zb3VyY2UsXG4tLVxubW0vY29tcGFjdGlvbi5jLTMzOC1cbm1tL2NvbXBhY3Rpb24uYzozMzk6XHRcdHBhZ2UgJiM0Mzs9ICgxIFx1MDAzY1x1MDAzYyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUik7XG5tbS9jb21wYWN0aW9uLmMtMzQwLVx0fSB3aGlsZSAocGFnZSBcdTAwM2M9IGVuZF9wYWdlKTtcbi0tXG5tbS9jb21wYWN0aW9uLmM9MTk2OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBmYXN0X2ZpbmRfbWlncmF0ZWJsb2NrKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yMDAyLVx0ICovXG5tbS9jb21wYWN0aW9uLmM6MjAwMzpcdGlmIChjYy1cdTAwM2VvcmRlciBcdTAwM2M9IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxubW0vY29tcGFjdGlvbi5jLTIwMDQtXHRcdHJldHVybiBwZm47XG4tLVxubW0vY29tcGFjdGlvbi5jLTIwMjYtXHRmb3IgKG9yZGVyID0gY2MtXHUwMDNlb3JkZXIgLSAxO1xubW0vY29tcGFjdGlvbi5jOjIwMjc6XHQgICAgIG9yZGVyIFx1MDAzZT0gUEFHRV9BTExPQ19DT1NUTFlfT1JERVIgXHUwMDI2XHUwMDI2ICFmb3VuZF9ibG9jayBcdTAwMjZcdTAwMjYgbnJfc2Nhbm5lZCBcdTAwM2MgbGltaXQ7XG5tbS9jb21wYWN0aW9uLmMtMjAyOC1cdCAgICAgb3JkZXItLSkge1xuLS1cbm1tL2NvbXBhY3Rpb24uYz0yNDA0PXN0YXRpYyBib29sIF9fY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yNDI0LVx0d2F0ZXJtYXJrICYjNDM7PSBjb21wYWN0X2dhcChvcmRlcik7XG5tbS9jb21wYWN0aW9uLmM6MjQyNTpcdGlmIChvcmRlciBcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpXG5tbS9jb21wYWN0aW9uLmMtMjQyNi1cdFx0d2F0ZXJtYXJrICYjNDM7PSBsb3dfd21hcmtfcGFnZXMoem9uZSkgLSBtaW5fd21hcmtfcGFnZXMoem9uZSk7XG4tLVxubW0vY29tcGFjdGlvbi5jPTI0MzQ9Ym9vbCBjb21wYWN0aW9uX3N1aXRhYmxlKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsIHVuc2lnbmVkIGxvbmcgd2F0ZXJtYXJrLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yNDU5LVx0XHRjb21wYWN0X3Jlc3VsdCA9IENPTVBBQ1RfQ09OVElOVUU7XG5tbS9jb21wYWN0aW9uLmM6MjQ2MDpcdFx0aWYgKG9yZGVyIFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikge1xubW0vY29tcGFjdGlvbi5jLTI0NjEtXHRcdFx0aW50IGZyYWdpbmRleCA9IGZyYWdtZW50YXRpb25faW5kZXgoem9uZSwgb3JkZXIpO1xuLS1cbm1tL2NvbXBhY3Rpb24uYz0yNTIxPWNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vY29tcGFjdGlvbi5jLTI1NDYtXHQgKi9cbm1tL2NvbXBhY3Rpb24uYzoyNTQ3Olx0aWYgKG9yZGVyIFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUiBcdTAwMjZcdTAwMjYgYXN5bmMgXHUwMDI2XHUwMDI2XG5tbS9jb21wYWN0aW9uLmMtMjU0OC1cdCAgICAhKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19DTUEpKSB7XG4tLVxubW0va2FzYW4vaHdfdGFncy5jPTczPXVuc2lnbmVkIGxvbmcga2FzYW5fcGFnZV9hbGxvY19zYW1wbGUgPSBQQUdFX0FMTE9DX1NBTVBMRV9ERUZBVUxUO1xuLS1cbm1tL2thc2FuL2h3X3RhZ3MuYy03Ny0gKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBjaG9zZW4gdG8gbWF0Y2ggYm90aFxubW0va2FzYW4vaHdfdGFncy5jOjc4OiAqIFBBR0VfQUxMT0NfQ09TVExZX09SREVSIGFuZCBTS0JfRlJBR19QQUdFX09SREVSLlxubW0va2FzYW4vaHdfdGFncy5jLTc5LSAqL1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xOTYzPXN0YXRpYyBib29sIG1lbV9jZ3JvdXBfb29tKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgbWFzaywgaW50IG9yZGVyKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xOTY2LVxubW0vbWVtY29udHJvbC5jOjE5Njc6XHRpZiAob3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxubW0vbWVtY29udHJvbC5jLTE5NjgtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MjY0NT1zdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjc0MS1cdCAqL1xubW0vbWVtY29udHJvbC5jOjI3NDI6XHRpZiAobnJfcmVjbGFpbWVkIFx1MDAyNlx1MDAyNiBucl9wYWdlcyBcdTAwM2M9ICgxIFx1MDAzY1x1MDAzYyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikpXG5tbS9tZW1jb250cm9sLmMtMjc0My1cdFx0Z290byByZXRyeTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NjU1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9yZGVyX3RvX3BpbmRleChpbnQgbWlncmF0ZXR5cGUsIGludCBvcmRlcilcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNjU5LVxubW0vcGFnZV9hbGxvYy5jOjY2MDpcdFx0aWYgKG9yZGVyIFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUilcbm1tL3BhZ2VfYWxsb2MuYy02NjEtXHRcdFx0cmV0dXJuIE5SX0xPV09SREVSX1BDUF9MSVNUUyAmIzQzOyBtb3ZhYmxlO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz02Nzk9c3RhdGljIGlubGluZSBib29sIHBjcF9hbGxvd2VkX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcilcbm1tL3BhZ2VfYWxsb2MuYy02ODAte1xubW0vcGFnZV9hbGxvYy5jOjY4MTpcdGlmIChvcmRlciBcdTAwM2M9IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxubW0vcGFnZV9hbGxvYy5jLTY4Mi1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTI4NDQ9c3RhdGljIGJvb2wgZnJlZV9mcm96ZW5fcGFnZV9jb21taXQoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTI4NzItXHQgKi9cbm1tL3BhZ2VfYWxsb2MuYzoyODczOlx0aWYgKG9yZGVyIFx1MDAyNlx1MDAyNiBvcmRlciBcdTAwM2M9IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSB7XG5tbS9wYWdlX2FsbG9jLmMtMjg3NC1cdFx0ZnJlZV9oaWdoID0gKHBjcC1cdTAwM2VmcmVlX2NvdW50IFx1MDAzZT0gKGJhdGNoICYjNDM7IHBjcC1cdTAwM2VoaWdoX21pbiAvIDIpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00MDQ0PV9fYWxsb2NfcGFnZXNfbWF5X29vbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00MDg0LVx0LyogVGhlIE9PTSBraWxsZXIgd2lsbCBub3QgaGVscCBoaWdoZXIgb3JkZXIgYWxsb2NzICovXG5tbS9wYWdlX2FsbG9jLmM6NDA4NTpcdGlmIChvcmRlciBcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpXG5tbS9wYWdlX2FsbG9jLmMtNDA4Ni1cdFx0Z290byBvdXQ7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTQyNDg9c2hvdWxkX2NvbXBhY3RfcmV0cnkoZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00Mjg5LVx0XHQgKi9cbm1tL3BhZ2VfYWxsb2MuYzo0MjkwOlx0XHRpZiAob3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxubW0vcGFnZV9hbGxvYy5jLTQyOTEtXHRcdFx0bWF4X3JldHJpZXMgLz0gNDtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDMwMS1cdCAqL1xubW0vcGFnZV9hbGxvYy5jOjQzMDI6XHRtaW5fcHJpb3JpdHkgPSAob3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSA/XG5tbS9wYWdlX2FsbG9jLmMtNDMwMy1cdFx0XHRNSU5fQ09NUEFDVF9DT1NUTFlfUFJJT1JJVFkgOiBNSU5fQ09NUEFDVF9QUklPUklUWTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDMyNT1zaG91bGRfY29tcGFjdF9yZXRyeShnZnBfdCBnZnBfbWFzaywgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQzMzMtXG5tbS9wYWdlX2FsbG9jLmM6NDMzNDpcdGlmICghb3JkZXIgfHwgb3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxubW0vcGFnZV9hbGxvYy5jLTQzMzUtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDY0MD1zaG91bGRfcmVjbGFpbV9yZXRyeShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ2NTItXHQgKi9cbm1tL3BhZ2VfYWxsb2MuYzo0NjUzOlx0aWYgKGRpZF9zb21lX3Byb2dyZXNzIFx1MDAyNlx1MDAyNiBvcmRlciBcdTAwM2M9IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxubW0vcGFnZV9hbGxvYy5jLTQ2NTQtXHRcdCpub19wcm9ncmVzc19sb29wcyA9IDA7XG4tLVxubW0vcGFnZV9hbGxvYy5jPTQ3ODQ9X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00Nzg2LXtcbm1tL3BhZ2VfYWxsb2MuYzo0Nzg3Olx0Y29uc3QgYm9vbCBjb3N0bHlfb3JkZXIgPSBvcmRlciBcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVI7XG5tbS9wYWdlX2FsbG9jLmMtNDc4OC1cdGJvb2wgY2FuX2RpcmVjdF9yZWNsYWltO1xuLS1cbm1tL3NsdWIuYz03NTU5PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2x1Yl9tYXhfb3JkZXIgPVxubW0vc2x1Yi5jOjc1NjA6XHRJU19FTkFCTEVEKENPTkZJR19TTFVCX1RJTlkpID8gMSA6IFBBR0VfQUxMT0NfQ09TVExZX09SREVSO1xubW0vc2x1Yi5jLTc1NjEtc3RhdGljIHVuc2lnbmVkIGludCBzbHViX21pbl9vYmplY3RzO1xuLS1cbm1tL3ZtcHJlc3N1cmUuYz0xMDk9dm9pZCB2bXByZXNzdXJlKGdmcF90IGdmcCwgaW50IG9yZGVyLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgdHJlZSxcbi0tXG5tbS92bXByZXNzdXJlLmMtMTgxLVx0XHQgKi9cbm1tL3ZtcHJlc3N1cmUuYzoxODI6XHRcdGlmIChsZXZlbCBcdTAwM2UgVk1QUkVTU1VSRV9MT1cgXHUwMDI2XHUwMDI2IG9yZGVyIFx1MDAzYz0gUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpIHtcbm1tL3ZtcHJlc3N1cmUuYy0xODMtXHRcdFx0Lypcbi0tXG5tbS92bXNjYW4uYz02MDkxPXN0YXRpYyBib29sIGluX3JlY2xhaW1fY29tcGFjdGlvbihzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MDkzLVx0aWYgKGdmcF9jb21wYWN0aW9uX2FsbG93ZWQoc2MtXHUwMDNlZ2ZwX21hc2spIFx1MDAyNlx1MDAyNiBzYy1cdTAwM2VvcmRlciBcdTAwMjZcdTAwMjZcbm1tL3Ztc2Nhbi5jOjYwOTQ6XHRcdFx0KHNjLVx1MDAzZW9yZGVyIFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUiB8fFxubW0vdm1zY2FuLmMtNjA5NS1cdFx0XHQgc2MtXHUwMDNlcHJpb3JpdHkgXHUwMDNjIERFRl9QUklPUklUWSAtIDIpKVxuLS1cbm1tL3Ztc2Nhbi5jPTY0MjQ9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTY0NjUtXHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NPTVBBQ1RJT04pIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmM6NjQ2NjpcdFx0XHQgICAgc2MtXHUwMDNlb3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSIFx1MDAyNlx1MDAyNlxubW0vdm1zY2FuLmMtNjQ2Ny1cdFx0XHQgICAgY29tcGFjdGlvbl9yZWFkeSh6b25lLCBzYykpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUwOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBNZW1vcnkgQWxsb2NhdGlvbiBCZWhhdmlvcioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBvcmlnaW5hbCBwdXJwb3NlIG9yIGludGVudGlvbiBiZWhpbmQgdGhpcyBzcGVjaWZpYyBjb21taXQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGdpdCBsb2cgYW5kIGhpc3RvcnkgdG8gZ2V0IHRoZSBjb250ZXh0LgoKSG9sZCBvbiwgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSB3aG9sZSBjb21taXQgaGlzdG9yeSwgSSYjMzk7bGwgc2VhcmNoIGZvciBzb21ldGhpbmcgc3BlY2lmaWMsIGxpa2UgdGhlIHBocmFzZSAmIzM0O0Nvc3RseSBfX0dGUF9OT1JFVFJZIGNhbGxlcnMgaGF2ZSBhIGNoZWFwIGZhbGxiYWNrJiMzNDsgb3Igc2ltaWxhciB0ZXJtcyB3aXRoaW4gdGhlIGdpdCBsb2cgb3IgaW4gY29tbWVudHMuIFRoaXMgc2hvdWxkIHBvaW50IG1lIHJpZ2h0IHRvIHRoZSBpbnRlbnQuCgpIbW0sIGl0IGxvb2tzIGxpa2Ugb25seSBgbW0vcGFnZV9hbGxvYy5jYCB3YXMgbW9kaWZpZWQgaW4gdGhpcyBjb21taXQsIHNvIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIExldCBtZSByZS1leGFtaW5lIHRoZSBjaGFuZ2VzIHdpdGhpbiB0aGF0IGZpbGUgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlZW4gY2hhbmdlZC4KClNwZWNpZmljYWxseSwgaW4gYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgLCB0aGUgY29kZSBub3cgaW5jbHVkZXM6CgpgYGBjCgkvKgoJICogQ29zdGx5IF9fR0ZQX05PUkVUUlkgY2FsbGVycyBoYXZlIGEgY2hlYXAgZmFsbGJhY2ssIHNvIGRvbiYjMzk7dCBzdGFsbAoJICogdGhlbSBpbiByZWNsYWltIG9yIGNvbXBhY3Rpb24uIF9fR0ZQX1RISVNOT0RFIGNhbGxlcnMgYXJlIGV4ZW1wdC4KCSAqLwoJaWYgKGNvc3RseV9vcmRlciAmYW1wOyZhbXA7IChnZnBfbWFzayAmYW1wOyBfX0dGUF9OT1JFVFJZKSAmYW1wOyZhbXA7CgkgICAgIShnZnBfbWFzayAmYW1wOyBfX0dGUF9USElTTk9ERSkpCgkJZ2ZwX21hc2sgJmFtcDs9IH5fX0dGUF9ESVJFQ1RfUkVDTEFJTTsKYGBgCgpJdCBzZWVtcyB0aGUgY29yZSBsb2dpYyBoZXJlIGlzIGFib3V0IGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24gZm9yIGNhbGxzIHRoYXQgbWlnaHQgYmUgJiMzNDtjb3N0bHkmIzM0OyAoYmFzZWQgb24gYG9yZGVyICZndDsgUEFHRV9BTExPQ19DT1NUTFlfT1JERVJgKSwgZXNwZWNpYWxseSB3aGVuIHRob3NlIGNhbGxzIGhhdmUgdGhlIGBfX0dGUF9OT1JFVFJZYCBmbGFnIHNldC4gSWYgdGhlIG9yZGVyIGlzICYjMzQ7Y29zdGx5JiMzNDsgYW5kIHRoZSBjYWxsZXIgaGFzIGBfX0dGUF9OT1JFVFJZYCBidXQgbm90IGBfX0dGUF9USElTTk9ERWAsIGl0IHJlbW92ZXMgdGhlIGBfX0dGUF9ESVJFQ1RfUkVDTEFJTWAgZmxhZy4gSSB0aGluayB0aGlzIG1lYW5zIHRoYXQgZm9yIHRoZXNlIGNhbGxlcnMsIHdlIHdvbiYjMzk7dCBzdGFsbCB0aGUgcHJvY2VzcyBpbiByZWNsYWltIG9yIGNvbXBhY3Rpb24uCgpUaGlzIHNlZW1zIGltcG9ydGFudCwgYnV0IEkgbmVlZCB0byByZWFkIHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbiBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlIG9mIGhvdyB0aGlzIGZpdHMgaW50byB0aGUgbGFyZ2VyIG1lbW9yeSBhbGxvY2F0aW9uIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV9hbGxvYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDgzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0ODMwOlx0XG40ODMxOlx0cmVzdGFydDpcbjQ4MzI6XHRcdGNvbXBhY3Rpb25fcmV0cmllcyA9IDA7XG40ODMzOlx0XHRub19wcm9ncmVzc19sb29wcyA9IDA7XG40ODM0Olx0XHRjb21wYWN0X3Jlc3VsdCA9IENPTVBBQ1RfU0tJUFBFRDtcbjQ4MzU6XHRcdGNvbXBhY3RfcHJpb3JpdHkgPSBERUZfQ09NUEFDVF9QUklPUklUWTtcbjQ4MzY6XHRcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XG40ODM3Olx0XHR6b25lbGlzdF9pdGVyX2Nvb2tpZSA9IHpvbmVsaXN0X2l0ZXJfYmVnaW4oKTtcbjQ4Mzg6XHRcbjQ4Mzk6XHRcdC8qXG40ODQwOlx0XHQgKiBGb3IgY29zdGx5IGFsbG9jYXRpb25zLCB0cnkgZGlyZWN0IGNvbXBhY3Rpb24gZmlyc3QsIGFzIGl0JiMzOTtzIGxpa2VseVxuNDg0MTpcdFx0ICogdGhhdCB3ZSBoYXZlIGVub3VnaCBiYXNlIHBhZ2VzIGFuZCBkb24mIzM5O3QgbmVlZCB0byByZWNsYWltLiBGb3Igbm9uLVxuNDg0MjpcdFx0ICogbW92YWJsZSBoaWdoLW9yZGVyIGFsbG9jYXRpb25zLCBkbyB0aGF0IGFzIHdlbGwsIGFzIGNvbXBhY3Rpb24gd2lsbFxuNDg0MzpcdFx0ICogdHJ5IHByZXZlbnQgcGVybWFuZW50IGZyYWdtZW50YXRpb24gYnkgbWlncmF0aW5nIGZyb20gYmxvY2tzIG9mIHRoZVxuNDg0NDpcdFx0ICogc2FtZSBtaWdyYXRldHlwZS5cbjQ4NDU6XHRcdCAqL1xuNDg0NjpcdFx0aWYgKGNhbl9jb21wYWN0IFx1MDAyNlx1MDAyNiAoY29zdGx5X29yZGVyIHx8IChvcmRlciBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbjQ4NDc6XHRcdFx0XHRcdFx0YWMtXHUwMDNlbWlncmF0ZXR5cGUgIT0gTUlHUkFURV9NT1ZBQkxFKSkpIHtcbjQ4NDg6XHRcdFx0Y29tcGFjdF9maXJzdCA9IHRydWU7XG40ODQ5Olx0XHRcdGNvbXBhY3RfcHJpb3JpdHkgPSBJTklUX0NPTVBBQ1RfUFJJT1JJVFk7XG40ODUwOlx0XHR9XG40ODUxOlx0XG40ODUyOlx0XHQvKlxuNDg1MzpcdFx0ICogVGhlIGZhc3QgcGF0aCB1c2VzIGNvbnNlcnZhdGl2ZSBhbGxvY19mbGFncyB0byBzdWNjZWVkIG9ubHkgdW50aWxcbjQ4NTQ6XHRcdCAqIGtzd2FwZCBuZWVkcyB0byBiZSB3b2tlbiB1cCwgYW5kIHRvIGF2b2lkIHRoZSBjb3N0IG9mIHNldHRpbmcgdXBcbjQ4NTU6XHRcdCAqIGFsbG9jX2ZsYWdzIHByZWNpc2VseS4gU28gd2UgZG8gdGhhdCBub3cuXG40ODU2Olx0XHQgKlxuNDg1NzpcdFx0ICogQ2FuJiMzOTt0IGp1c3Qgb3IgYWxsb2NfZmxhZ3MgaWYgaXQgY29udGFpbnMgV01BUksgYml0cywgYnV0IHRob3NlIGZsYWdzXG40ODU4Olx0XHQgKiBzaG91bGRuJiMzOTt0IGJlIHNldCBpbiBhYy1cdTAwM2VhbGxvY19mbGFncy5cbjQ4NTk6XHRcdCAqL1xuNDg2MDpcdFx0Vk1fV0FSTl9PTihhYy1cdTAwM2VhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfV01BUktfTUFTSyk7XG40ODYxOlx0XHRhbGxvY19mbGFncyA9IGFjLVx1MDAzZWFsbG9jX2ZsYWdzIHwgYWxsb2NfZmxhZ3Nfc2xvd3BhdGgoZ2ZwX21hc2ssIG9yZGVyKTtcbjQ4NjI6XHRcbjQ4NjM6XHRcdC8qXG40ODY0Olx0XHQgKiBXZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIHpvbmVsaXN0IGl0ZXJhdG9yXG40ODY1Olx0XHQgKiBiZWNhdXNlIHdlIG1pZ2h0IGhhdmUgdXNlZCBkaWZmZXJlbnQgbm9kZW1hc2sgaW4gdGhlIGZhc3QgcGF0aCwgb3JcbjQ4NjY6XHRcdCAqIHRoZXJlIHdhcyBhIGNwdXNldCBtb2RpZmljYXRpb24gYW5kIHdlIGFyZSByZXRyeWluZyAtIG90aGVyd2lzZSB3ZVxuNDg2NzpcdFx0ICogY291bGQgZW5kIHVwIGl0ZXJhdGluZyBvdmVyIG5vbi1lbGlnaWJsZSB6b25lcyBlbmRsZXNzbHkuXG40ODY4Olx0XHQgKi9cbjQ4Njk6XHRcdGFjLVx1MDAzZXByZWZlcnJlZF96b25lcmVmID0gZmlyc3Rfem9uZXNfem9uZWxpc3QoYWMtXHUwMDNlem9uZWxpc3QsXG40ODcwOlx0XHRcdFx0XHRcdGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgYWMtXHUwMDNlbm9kZW1hc2spO1xuNDg3MTpcdFx0aWYgKCF6b25lbGlzdF96b25lKGFjLVx1MDAzZXByZWZlcnJlZF96b25lcmVmKSlcbjQ4NzI6XHRcdFx0Z290byBub3BhZ2U7XG40ODczOlx0XG40ODc0Olx0XHQvKlxuNDg3NTpcdFx0ICogQ2hlY2sgZm9yIGluc2FuZSBjb25maWd1cmF0aW9ucyB3aGVyZSB0aGUgY3B1c2V0IGRvZXNuJiMzOTt0IGNvbnRhaW5cbjQ4NzY6XHRcdCAqIGFueSBzdWl0YWJsZSB6b25lIHRvIHNhdGlzZnkgdGhlIHJlcXVlc3QgLSBlLmcuIG5vbi1tb3ZhYmxlXG40ODc3Olx0XHQgKiBHRlBfSElHSFVTRVIgYWxsb2NhdGlvbnMgZnJvbSBNT1ZBQkxFIG5vZGVzIG9ubHkuXG40ODc4Olx0XHQgKi9cbjQ4Nzk6XHRcdGlmIChjcHVzZXRzX2luc2FuZV9jb25maWcoKSBcdTAwMjZcdTAwMjYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9IQVJEV0FMTCkpIHtcbjQ4ODA6XHRcdFx0c3RydWN0IHpvbmVyZWYgKnogPSBmaXJzdF96b25lc196b25lbGlzdChhYy1cdTAwM2V6b25lbGlzdCxcbjQ4ODE6XHRcdFx0XHRcdFx0YWMtXHUwMDNlaGlnaGVzdF96b25laWR4LFxuNDg4MjpcdFx0XHRcdFx0XHRcdTAwMjZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpO1xuNDg4MzpcdFx0XHRpZiAoIXpvbmVsaXN0X3pvbmUoeikpXG40ODg0Olx0XHRcdFx0Z290byBub3BhZ2U7XG40ODg1Olx0XHR9XG40ODg2Olx0XG40ODg3Olx0cmV0cnk6XG40ODg4Olx0XHQvKiBFbnN1cmUga3N3YXBkIGRvZXNuJiMzOTt0IGFjY2lkZW50YWxseSBnbyB0byBzbGVlcCBhcyBsb25nIGFzIHdlIGxvb3AgKi9cbjQ4ODk6XHRcdGlmIChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfS1NXQVBEKVxuNDg5MDpcdFx0XHR3YWtlX2FsbF9rc3dhcGRzKG9yZGVyLCBnZnBfbWFzaywgYWMpO1xuNDg5MTpcdFxuNDg5MjpcdFx0LypcbjQ4OTM6XHRcdCAqIFRoZSBhZGp1c3RlZCBhbGxvY19mbGFncyBtaWdodCByZXN1bHQgaW4gaW1tZWRpYXRlIHN1Y2Nlc3MsIHNvIHRyeVxuNDg5NDpcdFx0ICogdGhhdCBmaXJzdFxuNDg5NTpcdFx0ICovXG40ODk2Olx0XHRwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfbWFzaywgb3JkZXIsIGFsbG9jX2ZsYWdzLCBhYyk7XG40ODk3Olx0XHRpZiAocGFnZSlcbjQ4OTg6XHRcdFx0Z290byBnb3RfcGc7XG40ODk5Olx0XG40OTAwOlx0XHRyZXNlcnZlX2ZsYWdzID0gX19nZnBfcGZtZW1hbGxvY19mbGFncyhnZnBfbWFzayk7XG40OTAxOlx0XHRpZiAocmVzZXJ2ZV9mbGFncylcbjQ5MDI6XHRcdFx0YWxsb2NfZmxhZ3MgPSBhbGxvY19mbGFnc19jbWEoZ2ZwX21hc2spIHwgcmVzZXJ2ZV9mbGFncyB8XG40OTAzOlx0XHRcdFx0XHRhYy1cdTAwM2VhbGxvY19mbGFncyB8IChhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfS1NXQVBEKTtcbjQ5MDQ6XHRcbjQ5MDU6XHRcdC8qXG40OTA2Olx0XHQgKiBSZXNldCB0aGUgbm9kZW1hc2sgYW5kIHpvbmVsaXN0IGl0ZXJhdG9ycyBpZiBtZW1vcnkgcG9saWNpZXMgY2FuIGJlXG40OTA3Olx0XHQgKiBpZ25vcmVkLiBUaGVzZSBhbGxvY2F0aW9ucyBhcmUgaGlnaCBwcmlvcml0eSBhbmQgc3lzdGVtIHJhdGhlciB0aGFuXG40OTA4Olx0XHQgKiB1c2VyIG9yaWVudGVkLlxuNDkwOTpcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODg3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogODI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGb2N1c1N5bWJvbHMgZm9yIE1lbW9yeSBBbGxvY2F0aW9uIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byBjb25maWd1cmUgYEZvY3VzU3ltYm9sc2AgZm9yIGZ1enppbmcsIHNwZWNpZmljYWxseSB3aGVuIGNoYW5nZXMgaW52b2x2ZSBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYy4gVGhlIHRleHQgcG9pbnRzIHRvIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCwgdGhlIHNsb3cgcGF0aCBmb3IgdGhlIGNvcmUgcGFnZSBhbGxvY2F0b3IuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGluY2x1c2lvbiBpbiBgRm9jdXNTeW1ib2xzYC4KCkkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgZGlsdXRlIHRoZSBmdXp6aW5nIGVmZm9ydC4gVGhlIHJ1bGVzIGFyZSBjbGVhcjogYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoaXMgaW5jbHVkZXMgZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBsaWtlIHRoaXMgb25lLiBTbywgaXMgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIHViaXF1aXRvdXM/IExldCBtZSBxdWlja2x5IHZlcmlmeTogSXQmIzM5O3MgZGVmaW5lZCBpbiBgbW0vcGFnZV9hbGxvYy5jYCBhbmQgaXMgbWFya2VkIGBzdGF0aWMgaW5saW5lYCwgY2FsbGVkIGZyb20gYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAuCgpBaGEsIHRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgZmFsbCB1bmRlciB0aGUgJiMzNDt1YmlxdWl0b3VzJiMzNDsgY2F0ZWdvcnkuIFRoZSB0ZXh0IGV4cGxpY2l0bHkgd2FybnMgYWdhaW5zdCBpbmNsdWRpbmcgJiMzNDtnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzLCYjMzQ7IHNvIGFkZGluZyBgX19hbGxvY19wYWdlc19zbG93cGF0aGAsIGBfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2ZgLCBvciBgX19hbGxvY19wYWdlc19ub3Byb2ZgIGl0c2VsZiBzZWVtcyBsaWtlIGEgYmFkIGlkZWEuIEl0JiMzOTtzIGEgbWVtb3J5IGFsbG9jYXRvciBzbG93IHBhdGgsIGFuZCB0aHVzIGxpa2VseSB1YmlxdWl0b3VzLiBUaGF0IHdvdWxkIG1ha2UgYEZvY3VzU3ltYm9sc2AgaW5lZmZlY3RpdmUuCgpOb3csIGlmIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCAqaXMqIHRoZSBvbmx5IHRoaW5nIHRoYXQmIzM5O3MgY2hhbmdlZCwgY2FuIGBGb2N1c1N5bWJvbHNgIGJlIGVtcHR5PyBPciBzaG91bGQgSSBsb29rIGZvciBvdGhlciBmdW5jdGlvbnM/IFNob3VsZCBpdCBjb250YWluIGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBleGVyY2lzZSBjb3N0bHkgYF9fR0ZQX05PUkVUUllgIGFsbG9jYXRpb25zLCBsaWtlIHRob3NlIHVzZWQgYnkgVEhQIGFsbG9jYXRpb24sIGNvbXBhY3Rpb24sIG9yIG90aGVyIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBwYWdlIGFsbG9jYXRpb25zPyBJdCYjMzk7cyBhIGJpdCBvZiBhIGdyYXkgYXJlYSwgcmVhbGx5LgoKSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25zdGl0dXRlcyAmIzM0O3NwZWNpZmljIGZlYXR1cmUgbG9naWMuJiMzNDsgSWYgY2hhbmdlcyBhcmUgKnByaW1hcmlseSogaW4gdGhpcyBjb21tb24gbWVtb3J5IGFsbG9jYXRvciwgc2hvdWxkIEkgZm9jdXMgb24gc3BlY2lmaWMgY2FsbGVycyB0aGF0IGV4ZXJjaXNlIHRob3NlIGFsbG9jYXRpb25zPyBMZXQmIzM5O3MgY2hlY2s6IFdoZXJlIGFyZSBjb3N0bHkgb3JkZXJzIGNvbWJpbmVkIHdpdGggYF9fR0ZQX05PUkVUUllgPyBMZXQgbWUgc2VhcmNoIHdpdGhpbiBgbW0vYCBmb3IgYEdGUF9UUkFOU0hVR0VgIG9yIGBfX0dGUF9OT1JFVFJZYCB0byBmaW5kIHNwZWNpZmljIGZlYXR1cmVzIHRoYXQgbWlnaHQgYmUgaW1wYWN0ZWQgYnkgdGhlIGNoYW5nZXMgdG8gdGhlIGFsbG9jYXRvci4gVGhhdCBtaWdodCBwcm92aWRlIHNvbWUgdXNlZnVsIHRhcmdldHMgZm9yIGBGb2N1c1N5bWJvbHNgLCBldmVuIGlmIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCBpdHNlbGYgaXNuJiMzOTt0IGEgZ29vZCBmaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0dGUF9UUkFOU0hVR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0yNzM9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNzYtXG5tbS9odWdlX21lbW9yeS5jOjI3NzpcdHplcm9fZm9saW8gPSBmb2xpb19hbGxvYygoR0ZQX1RSQU5TSFVHRSB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9aRVJPVEFHUykgXHUwMDI2XG5tbS9odWdlX21lbW9yeS5jLTI3OC1cdFx0XHRcdCB+X19HRlBfTU9WQUJMRSxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE1MjM9Z2ZwX3Qgdm1hX3RocF9nZnBfbWFzayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE1MjgtXHRpZiAodGVzdF9iaXQoVFJBTlNQQVJFTlRfSFVHRVBBR0VfREVGUkFHX0RJUkVDVF9GTEFHLCBcdTAwMjZ0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncykpXG5tbS9odWdlX21lbW9yeS5jOjE1Mjk6XHRcdHJldHVybiBHRlBfVFJBTlNIVUdFIHwgKHZtYV9tYWR2aXNlZCA/IDAgOiBfX0dGUF9OT1JFVFJZKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTUzMC1cbi0tXG5tbS9odWdlX21lbW9yeS5jLTE1MzItXHRpZiAodGVzdF9iaXQoVFJBTlNQQVJFTlRfSFVHRVBBR0VfREVGUkFHX0tTV0FQRF9GTEFHLCBcdTAwMjZ0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncykpXG5tbS9odWdlX21lbW9yeS5jOjE1MzM6XHRcdHJldHVybiBHRlBfVFJBTlNIVUdFX0xJR0hUIHwgX19HRlBfS1NXQVBEX1JFQ0xBSU07XG5tbS9odWdlX21lbW9yeS5jLTE1MzQtXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xNTM2LVx0aWYgKHRlc3RfYml0KFRSQU5TUEFSRU5UX0hVR0VQQUdFX0RFRlJBR19LU1dBUERfT1JfTUFEVl9GTEFHLCBcdTAwMjZ0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncykpXG5tbS9odWdlX21lbW9yeS5jOjE1Mzc6XHRcdHJldHVybiBHRlBfVFJBTlNIVUdFX0xJR0hUIHxcbm1tL2h1Z2VfbWVtb3J5LmMtMTUzOC1cdFx0XHQodm1hX21hZHZpc2VkID8gX19HRlBfRElSRUNUX1JFQ0xBSU0gOlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTU0Mi1cdGlmICh0ZXN0X2JpdChUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfUkVRX01BRFZfRkxBRywgXHUwMDI2dHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MpKVxubW0vaHVnZV9tZW1vcnkuYzoxNTQzOlx0XHRyZXR1cm4gR0ZQX1RSQU5TSFVHRV9MSUdIVCB8XG5tbS9odWdlX21lbW9yeS5jLTE1NDQtXHRcdCAgICAgICAodm1hX21hZHZpc2VkID8gX19HRlBfRElSRUNUX1JFQ0xBSU0gOiAwKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTU0NS1cbm1tL2h1Z2VfbWVtb3J5LmM6MTU0NjpcdHJldHVybiBHRlBfVFJBTlNIVUdFX0xJR0hUO1xubW0vaHVnZV9tZW1vcnkuYy0xNTQ3LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTAyNz1zdGF0aWMgaW5saW5lIGdmcF90IGFsbG9jX2h1Z2VwYWdlX2todWdlcGFnZWRfZ2ZwbWFzayh2b2lkKVxubW0va2h1Z2VwYWdlZC5jLTEwMjgte1xubW0va2h1Z2VwYWdlZC5jOjEwMjk6XHRyZXR1cm4ga2h1Z2VwYWdlZF9kZWZyYWcoKSA/IEdGUF9UUkFOU0hVR0UgOiBHRlBfVFJBTlNIVUdFX0xJR0hUO1xubW0va2h1Z2VwYWdlZC5jLTEwMzAtfVxuLS1cbm1tL2todWdlcGFnZWQuYz0xMjUwPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGFsbG9jX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xMjUzLVx0Z2ZwX3QgZ2ZwID0gKGNjLVx1MDAzZWlzX2todWdlcGFnZWQgPyBhbGxvY19odWdlcGFnZV9raHVnZXBhZ2VkX2dmcG1hc2soKSA6XG5tbS9raHVnZXBhZ2VkLmM6MTI1NDpcdFx0ICAgICBHRlBfVFJBTlNIVUdFKTtcbm1tL2todWdlcGFnZWQuYy0xMjU1LVx0aW50IG5vZGUgPSBjb2xsYXBzZV9maW5kX3RhcmdldF9ub2RlKGNjKTtcbi0tXG5tbS9tZW1wb2xpY3kuYz0xNDM3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXRfYnlfbXBvbChzdHJ1Y3QgZm9saW8gKnNyYyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNDYxLVx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2Uoc3JjKSlcbm1tL21lbXBvbGljeS5jOjE0NjI6XHRcdGdmcCA9IEdGUF9UUkFOU0hVR0U7XG5tbS9tZW1wb2xpY3kuYy0xNDYzLVx0ZWxzZVxuLS1cbm1tL21pZ3JhdGUuYz0yMTk3PXN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBwcml2YXRlKVxuLS1cbm1tL21pZ3JhdGUuYy0yMjI1LVx0XHRnZnBfbWFzayBcdTAwMjY9IH5fX0dGUF9SRUNMQUlNO1xubW0vbWlncmF0ZS5jOjIyMjY6XHRcdGdmcF9tYXNrIHw9IEdGUF9UUkFOU0hVR0U7XG5tbS9taWdyYXRlLmMtMjIyNy1cdFx0b3JkZXIgPSBmb2xpb19vcmRlcihzcmMpO1xuLS1cbm1tL21pZ3JhdGUuYz0yNjY5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pc3BsYWNlZF9kc3RfZm9saW8oc3RydWN0IGZvbGlvICpzcmMsXG4tLVxubW0vbWlncmF0ZS5jLTI2NzYtXHRpZiAob3JkZXIgXHUwMDNlIDApXG5tbS9taWdyYXRlLmM6MjY3NzpcdFx0Z2ZwIHw9IEdGUF9UUkFOU0hVR0VfTElHSFQ7XG5tbS9taWdyYXRlLmMtMjY3OC1cdGVsc2Uge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQxMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVEhQIEFsbG9jYXRpb24gYW5kIFJlY2xhbWF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIGFsbG9jYXRpb24gc2NlbmFyaW8uIEkmIzM5O20gZm9jdXNpbmcgb24gYG1tL2h1Z2VfbWVtb3J5LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB2bWFfdGhwX2dmcF9tYXNrYCBmdW5jdGlvbi4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCB3aGVuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfRElSRUNUX0ZMQUdgIGlzIHNldCBpbiBgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3NgIGFuZCB0aGUgVk1BIGlzbiYjMzk7dCBtYWR2aXNlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYEdGUF9UUkFOU0hVR0UgfCBfX0dGUF9OT1JFVFJZYC4gQW5kLCBkaWdnaW5nIGZ1cnRoZXIsIGBHRlBfVFJBTlNIVUdFYCBleHBhbmRzIHRvIGBHRlBfVFJBTlNIVUdFX0xJR0hUIHwgX19HRlBfRElSRUNUX1JFQ0xBSU1gLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGVzcGVjaWFsbHkgZm9yIHRob3NlIGNvc3RseSBvcmRlcnMgbGlrZSBgSFBBR0VfUE1EX09SREVSYCwgd2hpY2ggaXMgOS4gV2UgYXJlIGdldHRpbmcgYSBtYXNrIHdpdGggYm90aCBgX19HRlBfRElSRUNUX1JFQ0xBSU1gIGFuZCBgX19HRlBfTk9SRVRSWWAuCgpOb3csIGlmIHdlIHRyYWNrIHRoYXQgdG8gdGhlIFRIUCBhbGxvY2F0aW9uIHBhdGgsIHBhcnRpY3VsYXJseSBgX19hbGxvY19wYWdlc19zbG93cGF0aGAsIHRoZSBiZWhhdmlvciBpcyBhbHRlcmVkIGJ5IHRoZSBwYXRjaC4gUHJldmlvdXNseSwgYm90aCBgY2FuX2RpcmVjdF9yZWNsYWltYCBhbmQgYGNhbl9jb21wYWN0YCB3ZXJlIHNldCB0byB0cnVlLiBXaXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBjb25kaXRpb25hbCBibG9jaywgdGhhdCBjaGFuZ2VzLiBTaW5jZSBgY29zdGx5X29yZGVyYCBpcyB0cnVlLCBhbmQgdGhlIEdGUCBtYXNrIGNvbnRhaW5zIGJvdGggYF9fR0ZQX05PUkVUUllgIGFuZCBkb2VzbiYjMzk7dCBoYXZlIGBfX0dGUF9USElTTk9ERWAsIHRoZSBwYXRjaCBjbGVhcnMgYF9fR0ZQX0RJUkVDVF9SRUNMQUlNYCBmcm9tIHRoZSBnZnAgbWFzay4gVGhpcyByZXN1bHRzIGluIGBjYW5fZGlyZWN0X3JlY2xhaW1gIGJlY29taW5nIGZhbHNlLCBhbmQgY29uc2VxdWVudGx5LCBgY2FuX2NvbXBhY3RgIGJlY29taW5nIGZhbHNlIGFzIHdlbGwuIEVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGRpc2FibGluZyBkaXJlY3QgcmVjbGFpbSBhbmQgY29tcGFjdGlvbiBmb3IgdGhlc2Ugc3BlY2lmaWMgVEhQIGFsbG9jYXRpb25zLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGljaCBwYXRocyBhcmUgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgc2l0ZXMgb2YgYHZtYV90aHBfZ2ZwX21hc2tgLCB3aGljaCBzaG91bGQgcG9pbnQgbWUgdG8gVEhQIGZhdWx0IGFsbG9jYXRpb25zIGluIGBtbS9odWdlX21lbW9yeS5jYC4gQSBzaW1wbGUgZ3JlcCBmb3IgYHZtYV90aHBfZ2ZwX21hc2tgIHNob3VsZCBkbyB0aGUgdHJpY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYV90aHBfZ2ZwX21hc2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0xMzQ5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEzNTEte1xubW0vaHVnZV9tZW1vcnkuYzoxMzUyOlx0Z2ZwX3QgZ2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xubW0vaHVnZV9tZW1vcnkuYy0xMzUzLVx0Y29uc3QgaW50IG9yZGVyID0gSFBBR0VfUE1EX09SREVSO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTQ3Nj12bV9mYXVsdF90IGRvX2h1Z2VfcG1kX2RldmljZV9wcml2YXRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTUyMi0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MTUyMzpnZnBfdCB2bWFfdGhwX2dmcF9tYXNrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxubW0vaHVnZV9tZW1vcnkuYy0xNTI0LXtcbi0tXG5tbS9tZW1vcnkuYz01MzA0PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2Fub25fZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTM1Ni1cdC8qIFRyeSBhbGxvY2F0aW5nIHRoZSBoaWdoZXN0IG9mIHRoZSByZW1haW5pbmcgb3JkZXJzLiAqL1xubW0vbWVtb3J5LmM6NTM1NzpcdGdmcCA9IHZtYV90aHBfZ2ZwX21hc2sodm1hKTtcbm1tL21lbW9yeS5jLTUzNTgtXHR3aGlsZSAob3JkZXJzKSB7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz03OTg9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy04MDQtXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IG1pZ3JhdGUtXHUwMDNldm1hO1xubW0vbWlncmF0ZV9kZXZpY2UuYzo4MDU6XHRnZnBfdCBnZnAgPSB2bWFfdGhwX2dmcF9tYXNrKHZtYSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTgwNi1cdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xuLS1cbm1tL3NobWVtLmM9MjA4OT1zdGF0aWMgaW50IHNobWVtX3JlcGxhY2VfZm9saW8oc3RydWN0IGZvbGlvICoqZm9saW9wLCBnZnBfdCBnZnAsXG4tLVxubW0vc2htZW0uYy0yMTA1LVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxKSB7XG5tbS9zaG1lbS5jOjIxMDY6XHRcdGdmcF90IGh1Z2VfZ2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xubW0vc2htZW0uYy0yMTA3LVxuLS1cbm1tL3NobWVtLmM9MjQyOD1zdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTI1MTMtXG5tbS9zaG1lbS5jOjI1MTQ6XHRcdGh1Z2VfZ2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xubW0vc2htZW0uYy0yNTE1LVx0XHRodWdlX2dmcCA9IHRocF9zaG1lbV9saW1pdF9nZnBfbWFzayhodWdlX2dmcCwgZ2ZwKTtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NDA5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy00MzYtXHRpZiAob3JkZXIpXG5tbS9zd2FwX3N0YXRlLmM6NDM3Olx0XHRnZnAgPSB0aHBfc2htZW1fbGltaXRfZ2ZwX21hc2sodm1hX3RocF9nZnBfbWFzayh2bWEpLCBnZnApO1xubW0vc3dhcF9zdGF0ZS5jLTQzOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyMTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXMgU3ltYm9sIERldGVybWluYXRpb246IEEgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBmaWd1cmUgb3V0IHRoZSByaWdodCBgRm9jdXNTeW1ib2xzYCBmb3IgdGhpcyB0YXNrLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gaW50cm9kdWNlIG5vaXNlLiBNeSBpbml0aWFsIHRob3VnaHRzIHdlcmUgdG8gY2hlY2sgZnVuY3Rpb25zIGxpa2UgYGFsbG9jX2Fub25fZm9saW9gLCBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCwgYHZtYV90aHBfZ2ZwX21hc2tgLCBhbmQgYHNobWVtX2dldF9mb2xpb19nZnBgLiBCdXQgdGhlbiBJIGhpdCBhIHNuYWcuIFdhaXQsIGlzIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCBva2F5IHRvIGxpc3QsIG9yIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmA/CgpJIGltbWVkaWF0ZWx5IHJlbWVtYmVyZWQgdGhlIGFkdmljZTogJiMzNDtBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFMuJiMzNDsgVGhlIGRvY3VtZW50IGlzIHJlYWxseSBjbGVhciBvbiB0aGlzIOKAkyBhdm9pZCBnZW5lcmljIGZ1bmN0aW9ucyB0aGF0IGFsbW9zdCBldmVyeXRoaW5nIGNhbGxzLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBiZSAqdmVyeSogc2VsZWN0aXZlLgoKSSB0aG91Z2h0IGFib3V0IGB2bWFfdGhwX2dmcF9tYXNrYC4gVGhhdCYjMzk7cyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHdoaWNoIGlzbiYjMzk7dCBldmVyeXdoZXJlLCBhbmQgaXQgZGlyZWN0bHkgc2V0cyB0aGUgVEhQIGdmcCBtYXNrIHdpdGggYF9fR0ZQX05PUkVUUllgLiBCdXQgdGhlbiBhZ2FpbiwgaXMgaXQgdHJ1bHkgc3BlY2lmaWMgZW5vdWdoPyBUaGVuLCBpcyBgYWxsb2NfYW5vbl9mb2xpb2Agb3V0IHNpbmNlIGl0IGlzIGluIHRoZSBwYWdlIGZhdWx0IGhhbmRsZXI/IEl0JiMzOTtzIGFsbCBjb25uZWN0ZWQuCgpXaGF0IGFib3V0IGZ1bmN0aW9ucyBsaWtlIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgIG9yIHRoZSBgdm1hX3RocF9nZnBfbWFza2A/IEkgd2VudCBiYWNrIHRvIHRoZSBzb3VyY2U6IHdoYXQgYWJvdXQgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgPyBJdCYjMzk7cyBpbiBgbW0vcGFnZV9hbGxvYy5jYCwgc28gSSBzaG91bGQgYmUgZ29vZCwgcmlnaHQ/IFdhaXQsIHdoeSBkaWQgdGhlIGF1dGhvciBjaGFuZ2UgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgPyBUaGF0IGlzLCBpbiBpdHNlbGYsIGEgcmVkIGZsYWcuIExldCBtZSBzZWUgd2hhdCBlbHNlIGlzIGluIHRoYXQgZmlsZSwgb3Igb3RoZXJzLgoKSSBuZWVkIHRvIGNvbWUgYmFjayB0byB0aGUgYmFzaWNzOiBpcyBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgaXRzZWxmIHViaXF1aXRvdXM/IFdhaXQsIHRoZSBkb2N1bWVudGF0aW9uIHNhaWQsICYjMzQ7Z2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQgYW5kIHRyYXAgaGFuZGxlcnMuLi4pJiMzNDsgQW5kIHllcywgYF9fYWxsb2NfcGFnZXNgIG9yIGl0cyBzbG93IHBhdGggKmlzKiBhIGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvciBmdW5jdGlvbi4gSSBzaG91bGQgYXZvaWQgaXQuCgpTbywgd2hhdCBhYm91dCBgdm1hX3RocF9nZnBfbWFza2AsIGBhbGxvY19odWdlX3plcm9fZm9saW9gLCBvciBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYD8gSSBtdXN0IG5vdyB0aGluayBtb3JlIGFib3V0IHRoZSBjb250ZXh0LCBhbmQgd2hhdCYjMzk7cyBpbnRlcmVzdGluZy4gV2hhdCBjYWxsZXJzIHBlcmZvcm0gYWxsb2NhdGlvbnMgdGhhdCBhcmUgKmNvc3RseSogYmVjYXVzZSB0aGV5IHNwZWNpZnkgYF9fR0ZQX05PUkVUUllgPyBMZXQgbWUgZ3JlcCBmb3IgYF9fR0ZQX05PUkVUUllgIHRocm91Z2hvdXQgdGhlIHRyZWUgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLiBUaGF0JiMzOTtzIHRoZSBiZXN0IHdheSB0byB1bmNvdmVyIHRoZSByZWxldmFudCBhbmQgbm9uLXViaXF1aXRvdXMgYXJlYXMgb2YgaW50ZXJlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fR0ZQX05PUkVUUlkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vYmFsbG9vbi5jPTE0Nz1zdHJ1Y3QgcGFnZSAqYmFsbG9vbl9wYWdlX2FsbG9jKHZvaWQpXG5tbS9iYWxsb29uLmMtMTQ4LXtcbm1tL2JhbGxvb24uYzoxNDk6XHRnZnBfdCBnZnBfZmxhZ3MgPSBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PV0FSTjtcbm1tL2JhbGxvb24uYy0xNTAtXG4tLVxubW0vZXhlY21lbS5jPTQwOT1zdGF0aWMgYm9vbCBleGVjbWVtX2NhY2hlX2ZyZWUodm9pZCAqcHRyKVxuLS1cbm1tL2V4ZWNtZW0uYy00MjItXG5tbS9leGVjbWVtLmM6NDIzOlx0ZXJyID0gX19leGVjbWVtX2NhY2hlX2ZyZWUoXHUwMDI2bWFzLCBhcmVhLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9SRVRSWSk7XG5tbS9leGVjbWVtLmMtNDI0LVx0aWYgKGVycikge1xuLS1cbm1tL2ZpbGVtYXAuYz0xOTQ3PXN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL2ZpbGVtYXAuYy0yMDE2LVx0XHRcdGlmIChvcmRlciBcdTAwM2UgbWluX29yZGVyKVxubW0vZmlsZW1hcC5jOjIwMTc6XHRcdFx0XHRhbGxvY19nZnAgfD0gX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PV0FSTjtcbm1tL2ZpbGVtYXAuYy0yMDE4LVx0XHRcdGZvbGlvID0gZmlsZW1hcF9hbGxvY19mb2xpbyhhbGxvY19nZnAsIG9yZGVyLCBwb2xpY3kpO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTUyMz1nZnBfdCB2bWFfdGhwX2dmcF9tYXNrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTUyOC1cdGlmICh0ZXN0X2JpdChUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfRElSRUNUX0ZMQUcsIFx1MDAyNnRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzKSlcbm1tL2h1Z2VfbWVtb3J5LmM6MTUyOTpcdFx0cmV0dXJuIEdGUF9UUkFOU0hVR0UgfCAodm1hX21hZHZpc2VkID8gMCA6IF9fR0ZQX05PUkVUUlkpO1xubW0vaHVnZV9tZW1vcnkuYy0xNTMwLVxuLS1cbm1tL2ludGVybmFsLmg9MTE3PXN0cnVjdCBwYWdldGFibGVfbW92ZV9jb250cm9sIHtcbi0tXG5tbS9pbnRlcm5hbC5oLTE0Ni1cdFx0XHRfX0dGUF9OT1dBUk58X19HRlBfUkVUUllfTUFZRkFJTHxfX0dGUF9OT0ZBSUx8XFxcbm1tL2ludGVybmFsLmg6MTQ3Olx0XHRcdF9fR0ZQX05PUkVUUll8X19HRlBfTUVNQUxMT0N8X19HRlBfTk9NRU1BTExPQ3xcXFxubW0vaW50ZXJuYWwuaC0xNDgtXHRcdFx0X19HRlBfTk9MT0NLREVQKVxuLS1cbm1tL2tzbS5jPTU2Nz1zdGF0aWMgaW5saW5lIHN0cnVjdCBrc21fcm1hcF9pdGVtICphbGxvY19ybWFwX2l0ZW0odm9pZClcbi0tXG5tbS9rc20uYy01NzEtXHRybWFwX2l0ZW0gPSBrbWVtX2NhY2hlX3phbGxvYyhybWFwX2l0ZW1fY2FjaGUsIEdGUF9LRVJORUwgfFxubW0va3NtLmM6NTcyOlx0XHRcdFx0XHRcdF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk4pO1xubW0va3NtLmMtNTczLVx0aWYgKHJtYXBfaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmM9MjY0NT1zdGF0aWMgaW50IHRyeV9jaGFyZ2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjczMC1cbm1tL21lbWNvbnRyb2wuYzoyNzMxOlx0aWYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9OT1JFVFJZKVxubW0vbWVtY29udHJvbC5jLTI3MzItXHRcdGdvdG8gbm9tZW07XG4tLVxubW0vbWVtcG9saWN5LmM9MjQ0MT1zdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX3BhZ2VzX21wb2woZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vbWVtcG9saWN5LmMtMjQ3Mi1cdFx0XHRwYWdlID0gX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKFxubW0vbWVtcG9saWN5LmM6MjQ3MzpcdFx0XHRcdGdmcCB8IF9fR0ZQX1RISVNOT0RFIHwgX19HRlBfTk9SRVRSWSwgb3JkZXIsXG5tbS9tZW1wb2xpY3kuYy0yNDc0LVx0XHRcdFx0bmlkLCBOVUxMLCBBTExPQ19ERUZBVUxUKTtcbi0tXG5tbS9tZW1wb29sLmM9NDgwPXN0YXRpYyBpbmxpbmUgZ2ZwX3QgbWVtcG9vbF9hZGp1c3RfZ2ZwKGdmcF90ICpnZnBfbWFzaylcbm1tL21lbXBvb2wuYy00ODEte1xubW0vbWVtcG9vbC5jOjQ4MjpcdCpnZnBfbWFzayB8PSBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PV0FSTjtcbm1tL21lbXBvb2wuYy00ODMtXHRyZXR1cm4gKmdmcF9tYXNrIFx1MDAyNiB+KF9fR0ZQX0RJUkVDVF9SRUNMQUlNIHwgX19HRlBfSU8pO1xuLS1cbm1tL21pZ3JhdGUuYz0yNjY5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pc3BsYWNlZF9kc3RfZm9saW8oc3RydWN0IGZvbGlvICpzcmMsXG4tLVxubW0vbWlncmF0ZS5jLTI2NzgtXHRlbHNlIHtcbm1tL21pZ3JhdGUuYzoyNjc5Olx0XHRnZnAgfD0gR0ZQX0hJR0hVU0VSX01PVkFCTEUgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9SRVRSWSB8XG5tbS9taWdyYXRlLmMtMjY4MC1cdFx0XHRfX0dGUF9OT1dBUk47XG4tLVxubW0vcGFnZV9hbGxvYy5jPTQwNDQ9X19hbGxvY19wYWdlc19tYXlfb29tKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQwNzEtXHQgKiB3ZSYjMzk7cmUgc3RpbGwgdW5kZXIgaGVhdnkgcHJlc3N1cmUuIEJ1dCBtYWtlIHN1cmUgdGhhdCB0aGlzIHJlY2xhaW1cbm1tL3BhZ2VfYWxsb2MuYzo0MDcyOlx0ICogYXR0ZW1wdCBzaGFsbCBub3QgZGVwZW5kIG9uIF9fR0ZQX0RJUkVDVF9SRUNMQUlNIFx1MDAyNlx1MDAyNiAhX19HRlBfTk9SRVRSWVxubW0vcGFnZV9hbGxvYy5jLTQwNzMtXHQgKiBhbGxvY2F0aW9uIHdoaWNoIHdpbGwgbmV2ZXIgZmFpbCBkdWUgdG8gb29tX2xvY2sgYWxyZWFkeSBoZWxkLlxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00Nzg0PV9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDgwNS1cdC8qXG5tbS9wYWdlX2FsbG9jLmM6NDgwNjpcdCAqIENvc3RseSBfX0dGUF9OT1JFVFJZIGNhbGxlcnMgaGF2ZSBhIGNoZWFwIGZhbGxiYWNrLCBzbyBkb24mIzM5O3Qgc3RhbGxcbm1tL3BhZ2VfYWxsb2MuYy00ODA3LVx0ICogdGhlbSBpbiByZWNsYWltIG9yIGNvbXBhY3Rpb24uIF9fR0ZQX1RISVNOT0RFIGNhbGxlcnMgYXJlIGV4ZW1wdC5cbm1tL3BhZ2VfYWxsb2MuYy00ODA4LVx0ICovXG5tbS9wYWdlX2FsbG9jLmM6NDgwOTpcdGlmIChjb3N0bHlfb3JkZXIgXHUwMDI2XHUwMDI2IChnZnBfbWFzayBcdTAwMjYgX19HRlBfTk9SRVRSWSkgXHUwMDI2XHUwMDI2XG5tbS9wYWdlX2FsbG9jLmMtNDgxMC1cdCAgICAhKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9USElTTk9ERSkpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ5NzMtXHRcdCAqL1xubW0vcGFnZV9hbGxvYy5jOjQ5NzQ6XHRcdGlmIChnZnBfaGFzX2ZsYWdzKGdmcF9tYXNrLCBfX0dGUF9OT1JFVFJZIHwgX19HRlBfVEhJU05PREUpKVxubW0vcGFnZV9hbGxvYy5jLTQ5NzUtXHRcdFx0Z290byBub3BhZ2U7XG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ5NzktXHRcdCAqIHByaW9yaXR5LiBSZXN0b3JlIGl0IGZvciBmdXJ0aGVyIHJldHJpZXMsIGlmIHRob3NlIGFyZVxubW0vcGFnZV9hbGxvYy5jOjQ5ODA6XHRcdCAqIGFsbG93ZWQuIFdpdGggX19HRlBfTk9SRVRSWSB0aGVyZSB3aWxsIGJlIGEgc2luZ2xlIHJvdW5kIG9mXG5tbS9wYWdlX2FsbG9jLmMtNDk4MS1cdFx0ICogcmVjbGFpbSBhbmQgY29tcGFjdGlvbiB3aXRoIHRoZSBsb3dlcmVkIHByaW9yaXR5LlxubW0vcGFnZV9hbGxvYy5jLTQ5ODItXHRcdCAqL1xubW0vcGFnZV9hbGxvYy5jOjQ5ODM6XHRcdGlmICghKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9OT1JFVFJZKSlcbm1tL3BhZ2VfYWxsb2MuYy00OTg0LVx0XHRcdGNvbXBhY3RfcHJpb3JpdHkgPSBERUZfQ09NUEFDVF9QUklPUklUWTtcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDk5MC1cdC8qIERvIG5vdCBsb29wIGlmIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQgKi9cbm1tL3BhZ2VfYWxsb2MuYzo0OTkxOlx0aWYgKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9OT1JFVFJZKVxubW0vcGFnZV9hbGxvYy5jLTQ5OTItXHRcdGdvdG8gbm9wYWdlO1xuLS1cbm1tL3BhZ2VfZnJhZ19jYWNoZS5jPTQ5PXN0YXRpYyBzdHJ1Y3QgcGFnZSAqX19wYWdlX2ZyYWdfY2FjaGVfcmVmaWxsKHN0cnVjdCBwYWdlX2ZyYWdfY2FjaGUgKm5jLFxuLS1cbm1tL3BhZ2VfZnJhZ19jYWNoZS5jLTU3LVx0Z2ZwX21hc2sgPSAoZ2ZwX21hc2sgXHUwMDI2IH5fX0dGUF9ESVJFQ1RfUkVDTEFJTSkgfCAgX19HRlBfQ09NUCB8XG5tbS9wYWdlX2ZyYWdfY2FjaGUuYzo1ODpcdFx0ICAgX19HRlBfTk9XQVJOIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0M7XG5tbS9wYWdlX2ZyYWdfY2FjaGUuYy01OS1cdHBhZ2UgPSBfX2FsbG9jX3BhZ2VzKGdmcF9tYXNrLCBQQUdFX0ZSQUdfQ0FDSEVfTUFYX09SREVSLFxuLS1cbm1tL3BlcmNwdS5jPTE3MzU9dm9pZCBfX3BlcmNwdSAqcGNwdV9hbGxvY19ub3Byb2Yoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgYm9vbCByZXNlcnZlZCxcbi0tXG5tbS9wZXJjcHUuYy0xNzYwLVx0ICovXG5tbS9wZXJjcHUuYzoxNzYxOlx0cGNwdV9nZnAgPSBnZnAgXHUwMDI2IChHRlBfTk9JTyB8IF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk4pO1xubW0vcGVyY3B1LmMtMTc2Mi1cdGlzX2F0b21pYyA9ICFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApO1xuLS1cbm1tL3BlcmNwdS5jPTIwMTM9c3RhdGljIHZvaWQgcGNwdV9iYWxhbmNlX3BvcHVsYXRlZCh2b2lkKVxuLS1cbm1tL3BlcmNwdS5jLTIwMTUtXHQvKiBnZnAgZmxhZ3MgcGFzc2VkIHRvIHVuZGVybHlpbmcgYWxsb2NhdG9ycyAqL1xubW0vcGVyY3B1LmM6MjAxNjpcdGNvbnN0IGdmcF90IGdmcCA9IEdGUF9LRVJORUwgfCBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOO1xubW0vcGVyY3B1LmMtMjAxNy1cdHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaztcbi0tXG5tbS9zaG1lbS5jPTU5MzQ9aW50IHNobWVtX3plcm9fc2V0dXBfZGVzYyhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuLS1cbm1tL3NobWVtLmMtNTk1OC0gKlxubW0vc2htZW0uYzo1OTU5OiAqIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfZ3R0KCkgbWl4ZXMgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PV0FSTiBpblxubW0vc2htZW0uYy01OTYwLSAqIHdpdGggdGhlIG1hcHBpbmdfZ2ZwX21hc2soKSwgdG8gYXZvaWQgT09NaW5nIHRoZSBtYWNoaW5lIHVubmVjZXNzYXJpbHkuXG4tLVxubW0vc2xhYl9jb21tb24uYz0xODcxPXN0YXRpYyB2b2lkIGZpbGxfcGFnZV9jYWNoZV9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTE4ODYtXHRcdGJub2RlID0gKHN0cnVjdCBrdmZyZWVfcmN1X2J1bGtfZGF0YSAqKVxubW0vc2xhYl9jb21tb24uYzoxODg3Olx0XHRcdF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9OT1dBUk4pO1xubW0vc2xhYl9jb21tb24uYy0xODg4LVxuLS1cbm1tL3NsYWJfY29tbW9uLmM9MTkxMz1hZGRfcHRyX3RvX2J1bGtfa3JjX2xvY2soc3RydWN0IGtmcmVlX3JjdV9jcHUgKiprcmNwLFxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTkzMi1cbm1tL3NsYWJfY29tbW9uLmM6MTkzMzpcdFx0XHQvLyBfX0dGUF9OT1JFVFJZIC0gYWxsb3dzIGEgbGlnaHQtd2VpZ2h0IGRpcmVjdCByZWNsYWltXG5tbS9zbGFiX2NvbW1vbi5jLTE5MzQtXHRcdFx0Ly8gd2hhdCBpcyBPSyBmcm9tIG1pbmltaXppbmcgb2YgZmFsbGJhY2sgaGl0dGluZyBwb2ludCBvZlxuLS1cbm1tL3NsYWJfY29tbW9uLmMtMTk0NC1cdFx0XHRibm9kZSA9IChzdHJ1Y3Qga3ZmcmVlX3JjdV9idWxrX2RhdGEgKilcbm1tL3NsYWJfY29tbW9uLmM6MTk0NTpcdFx0XHRcdF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9OT1dBUk4pO1xubW0vc2xhYl9jb21tb24uYy0xOTQ2LVx0XHRcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjYoKmtyY3ApLVx1MDAzZWxvY2ssICpmbGFncyk7XG4tLVxubW0vc2x1Yi5jPTM0NDE9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtMzQ1Ny1cdCAqL1xubW0vc2x1Yi5jOjM0NTg6XHRhbGxvY19nZnAgPSAoZmxhZ3MgfCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9OT1JFVFJZKSBcdTAwMjYgfl9fR0ZQX05PRkFJTDtcbm1tL3NsdWIuYy0zNDU5LVx0aWYgKChhbGxvY19nZnAgXHUwMDI2IF9fR0ZQX0RJUkVDVF9SRUNMQUlNKSBcdTAwMjZcdTAwMjYgb29fb3JkZXIob28pIFx1MDAzZSBvb19vcmRlcihzLVx1MDAzZW1pbikpXG4tLVxubW0vdm1hbGxvYy5jPTM4MjA9c3RhdGljIHZvaWQgZGVmZXJfdm1fYXJlYV9jbGVhbnVwKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEpXG4tLVxubW0vdm1hbGxvYy5jLTM4MzUtICogR0ZQX05PSU8gLSBtZW1hbGxvY19ub2lvX3NhdmUoKVxubW0vdm1hbGxvYy5jOjM4MzY6ICogX19HRlBfUkVUUllfTUFZRkFJTCwgX19HRlBfTk9SRVRSWSAtIG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKClcbm1tL3ZtYWxsb2MuYy0zODM3LSAqIHRvIHByZXZlbnQgT09Nc1xuLS1cbm1tL3ZtYWxsb2MuYz0zODQyPW1lbWFsbG9jX2FwcGx5X2dmcF9zY29wZShnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS92bWFsbG9jLmMtMzg0Ni1cdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spIHx8XG5tbS92bWFsbG9jLmM6Mzg0NzpcdFx0XHQoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9SRVRSWV9NQVlGQUlMIHwgX19HRlBfTk9SRVRSWSkpKVxubW0vdm1hbGxvYy5jLTM4NDgtXHRcdGZsYWdzID0gbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKTtcbi0tXG5tbS92bWFsbG9jLmM9Mzg2NT1zdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS92bWFsbG9jLmMtMzk2OS0gKiBUaGlzIGdmcCBsaXN0cyBhbGwgZmxhZ3MgY3VycmVudGx5IHBhc3NlZCB0aHJvdWdoIHZtYWxsb2MuIEN1cnJlbnRseSxcbm1tL3ZtYWxsb2MuYzozOTcwOiAqIF9fR0ZQX1pFUk8gaXMgdXNlZCBieSBCUEYgYW5kIF9fR0ZQX05PUkVUUlkgaXMgdXNlZCBieSBwZXJjcHUuIEJvdGggZHJtXG5tbS92bWFsbG9jLmMtMzk3MS0gKiBhbmQgQlBGIGFsc28gdXNlIEdGUF9VU0VSLiBBZGRpdGlvbmFsbHksIHZhcmlvdXMgdXNlcnMgcGFzc1xuLS1cbm1tL3ZtYWxsb2MuYy0zOTc1LVx0XHRcdFx0X19HRlBfTk9GQUlMIHwgX19HRlBfWkVSTyB8XFxcbm1tL3ZtYWxsb2MuYzozOTc2Olx0XHRcdFx0X19HRlBfTk9SRVRSWSB8IF9fR0ZQX1JFVFJZX01BWUZBSUwgfFxcXG5tbS92bWFsbG9jLmMtMzk3Ny1cdFx0XHRcdEdGUF9OT0ZTIHwgR0ZQX05PSU8gfCBHRlBfS0VSTkVMX0FDQ09VTlQgfFxcXG4tLVxubW0vdm1hbGxvYy5jPTM5ODA9c3RhdGljIGdmcF90IHZtYWxsb2NfZml4X2ZsYWdzKGdmcF90IGZsYWdzKVxuLS1cbm1tL3ZtYWxsb2MuYy00MDA2LSAqIFN1cHBvcnRlZCBHRlAgY2xhc3NlczogJUdGUF9LRVJORUwsICVHRlBfQVRPTUlDLCAlR0ZQX05PV0FJVCxcbm1tL3ZtYWxsb2MuYzo0MDA3OiAqICVfX0dGUF9SRVRSWV9NQVlGQUlMLCAlX19HRlBfTk9SRVRSWSwgJUdGUF9OT0ZTIGFuZCAlR0ZQX05PSU8uXG5tbS92bWFsbG9jLmMtNDAwOC0gKiBab25lIG1vZGlmaWVycyBhcmUgbm90IHN1cHBvcnRlZC5cbi0tXG5tbS92bWFsbG9jLmMtNDAxMi0gKiBSZXRyeSBtb2RpZmllcnM6IG9ubHkgJV9fR0ZQX05PRkFJTCBpcyBmdWxseSBzdXBwb3J0ZWQ7XG5tbS92bWFsbG9jLmM6NDAxMzogKiAlX19HRlBfTk9SRVRSWSBhbmQgJV9fR0ZQX1JFVFJZX01BWUZBSUwgYXJlIHN1cHBvcnRlZCB3aXRoIGxpbWl0YXRpb24sXG5tbS92bWFsbG9jLmMtNDAxNC0gKiBpLmUuIHBhZ2UgdGFibGVzIGFyZSBhbGxvY2F0ZWQgd2l0aCBOT1dBSVQgc2VtYW50aWMgc28gdGhleSBtaWdodCBmYWlsXG4tLVxubW0venN3YXAuYz04NDA9c3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4tLVxubW0venN3YXAuYy04OTgtXG5tbS96c3dhcC5jOjg5OTpcdGdmcCA9IEdGUF9OT1dBSVQgfCBfX0dGUF9OT1JFVFJZIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEU7XG5tbS96c3dhcC5jLTkwMC1cdGhhbmRsZSA9IHpzX21hbGxvYyhwb29sLVx1MDAzZXpzX3Bvb2wsIGRsZW4sIGdmcCwgcGFnZV90b19uaWQocGFnZSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk3OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUGFnZSBBbGxvY2F0aW9uIHdpdGggQ29zdGx5IE9yZGVycyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgb3B0aW1hbCBjb25maWd1cmF0aW9uIGFuZCBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIG1lbW9yeSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2hlcmUgJiMzNDtjb3N0bHkgb3JkZXJzJiMzNDsgY29tZSBpbnRvIHBsYXkuCgpJbml0aWFsbHksIEkmIzM5O20gbG9va2luZyBhdCBob3cgYF9fR0ZQX05PUkVUUllgIGlzIHVzZWQsIGFuZCBpdCBzZWVtcyB0aGlzIGZsYWcsIGFsb25nIHdpdGggYF9fR0ZQX05PV0FSTmAsIGlzIGFwcGxpZWQgdG8gY2VydGFpbiBgYWxsb2NfZ2ZwYCBmbGFncyBiYXNlZCBvbiB0aGUgb3JkZXIgc2l6ZSBpbiBhIGZldyBwbGFjZXM6IGluIGBtbS9zbHViLmNgIHdpdGhpbiBgYWxsb2NhdGVfc2xhYmAsIGluIGBtbS9odWdlX21lbW9yeS5jYCB3aXRoIGB2bWFfdGhwX2dmcF9tYXNrYCwgYW5kIGluIGBtbS9maWxlbWFwLmNgLiBUaGlzIHN1Z2dlc3RzIGEgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGZsYWdzIGFuZCBoaWdoLW9yZGVyIGFsbG9jYXRpb25zLiBJIGFsc28gdG9vayBub3RlIG9mIGBfX0dGUF9ESVJFQ1RfUkVDTEFJTWAuCgpGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBJIGhhZCBgQ09ORklHX0NPTVBBQ1RJT05gIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpbiBtaW5kLCBhcyB0aG9zZSBzZWVtIHJlbGV2YW50IHRvIGV4ZXJjaXNpbmcgdGhlICYjMzQ7Y29zdGx5IG9yZGVyJiMzNDsgbG9naWMuIEhvd2V2ZXIsIEkgd2FudCB0byBiZSAqc3VyZSouCgpTbywgSSBjaGVjayB0aGUgY29kZSwgYW5kIEkgc2VlIHRoYXQgdGhlIHJlbGV2YW50IGNvZGUgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgKHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0ODA1IGluIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCkgaXMgKm5vdCogZ3VhcmRlZCBieSBhbnkgYCNpZmRlZmAgZGlyZWN0aXZlcy4gVGhlIGNvc3RseSBvcmRlciBjaGVja3MgKHdoaWNoIGluY2x1ZGUgdGhlIGZsYWdzIG1lbnRpb25lZCBlYXJsaWVyKSBhcmUgdW5jb25kaXRpb25hbGx5IHByZXNlbnQuIGBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUmAgaXMgZGVmaW5lZCB1bmNvbmRpdGlvbmFsbHkgYXMgMy4KClRoaXMgbWVhbnMgYSAqc3RhbmRhcmQqIGtlcm5lbCBzaG91bGQgaW5jbHVkZSB0aGUgcmVsZXZhbnQgY29kZSwgdGh1cyB0aGUgYEVuYWJsZUNvbmZpZ3NgIGNhbiBiZSBlbXB0eS4gSG93ZXZlciwgZW5hYmxpbmcgYENPTkZJR19DT01QQUNUSU9OYCBhbmQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgd291bGQgbGlrZWx5ICppbmNyZWFzZSogdGhlIGxpa2VsaWhvb2Qgb2YgaGl0dGluZyB0aGVzZSBjb3N0bHkgYWxsb2NhdGlvbiBwYXRocy4KCk5leHQsIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHJpZ2h0IGBGb2N1c1N5bWJvbHNgLiBDYW4gSSB1c2UgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgPyBXZWxsLCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWFrZXMgaXQgYSBwb29yIGNob2ljZS4gSSBuZWVkIHRvIGZpbmQgdGhlICplbnRyeXBvaW50cyouCgpJIHJlLXJlYWQgdGhlIHByb21wdCBvbiBhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMsIHdoaWNoIHJ1bGVzIG91dCB2ZXJ5IGdlbmVyaWMgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCBldmVyeXdoZXJlLiBTbywgSSBuZWVkIHRoZSAqc3BlY2lmaWMqIGNhbGxlcnMgdGhhdCB3aWxsIGV4ZXJjaXNlIHRoZSBjb3N0bHkgYF9fR0ZQX05PUkVUUllgIGFsbG9jYXRpb24gbG9naWMuCgpJIGlkZW50aWZpZWQgYSBmZXcgY2FuZGlkYXRlcyBmcm9tIHRoZSBjb2RlOiBgYWxsb2NhdGVfc2xhYmAsIGB2bWFfdGhwX2dmcF9tYXNrYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIGBhbGxvY19odWdlX3plcm9fZm9saW9gIGFsc28gaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgYWxsb2NfcGFnZXNfbXBvbGAgaW4gYG1tL21lbXBvbGljeS5jYCwgYW5kIHBvdGVudGlhbGx5IGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLiBUaGUgc2xhYiBjYWNoZXMgYXJlIGludGVyZXN0aW5nIChgYWxsb2NhdGVfc2xhYmApIGJlY2F1c2UgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyBoYXBwZW4gdGhlcmUuCgpgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IGRlYWxzIHdpdGggVEhQIGFsbG9jYXRpb25zLiBgYWxsb2NfaHVnZV96ZXJvX2ZvbGlvYCBpcyBhbm90aGVyIHBvdGVudGlhbGx5IGZydWl0ZnVsIGNhbGxlci4gVGhlcmVmb3JlLCBgRm9jdXNTeW1ib2xzYCBtaWdodCBpbmNsdWRlIGVudHJ5cG9pbnRzIHN1Y2ggYXMgYGFsbG9jYXRlX3NsYWJgLCBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCwgYW5kIGBhbGxvY19odWdlX3plcm9fZm9saW9gLiBJJiMzOTtsbCBnbyBjaGVjayBgbW0vaHVnZV9tZW1vcnkuY2Agc3BlY2lmaWNhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz0xMzQ3PUVYUE9SVF9TWU1CT0xfR1BMKHRocF9nZXRfdW5tYXBwZWRfYXJlYSk7XG5tbS9odWdlX21lbW9yeS5jLTEzNDgtXG5tbS9odWdlX21lbW9yeS5jOjEzNDk6c3RhdGljIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0xMzUwLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xNDI0PXN0YXRpYyB2bV9mYXVsdF90IF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xNDMxLVxubW0vaHVnZV9tZW1vcnkuYzoxNDMyOlx0Zm9saW8gPSB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQodm1hLCB2bWYtXHUwMDNlYWRkcmVzcyk7XG5tbS9odWdlX21lbW9yeS5jLTE0MzMtXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcbi0tXG5tbS9odWdlX21lbW9yeS5jPTIxMzU9c3RhdGljIHZtX2ZhdWx0X3QgZG9faHVnZV96ZXJvX3dwX3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIxNDItXG5tbS9odWdlX21lbW9yeS5jOjIxNDM6XHRmb2xpbyA9IHZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZCh2bWEsIHZtZi1cdTAwM2VhZGRyZXNzKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMjE0NC1cdGlmICh1bmxpa2VseSghZm9saW8pKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzA3NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKklkZW50aWZ5aW5nIFBvdGVudGlhbCBCb3R0bGVuZWNrcyBpbiBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGFyZWFzIHdoZXJlIHdlJiMzOTtyZSBzZWVpbmcgdGhlIGhlYXZpZXN0IG1lbW9yeSBhbGxvY2F0aW9uIGNvc3RzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBsZWFkcyBtZSB0byB0aGVzZSBmdW5jdGlvbnM6IGBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCwgYGRvX2h1Z2VfemVyb193cF9wbWRgLCBgYWxsb2NfaHVnZV96ZXJvX2ZvbGlvYCwgYW5kIGBhbGxvY2F0ZV9zbGFiYC4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIHN1c3BlY3RzIGZvciBwb3RlbnRpYWxseSBleHBlbnNpdmUgb3BlcmF0aW9ucy4KCkJ1dCBJIGtub3cgdGhlcmUmIzM5O3MgbW9yZSB0byBpdCB0aGFuIGp1c3QgdGhlIG9idmlvdXMuIE15IG5leHQgc3RlcCBpcyB0byB0aGluayBjcml0aWNhbGx5IGFib3V0ICpvdGhlciogZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgdHJpZ2dlcmluZyBjb3N0bHkgYWxsb2NhdGlvbnMsIGV2ZW4gaWYgdGhleSYjMzk7cmUgbm90IGltbWVkaWF0ZWx5IGFwcGFyZW50LiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGRlYWxpbmcgd2l0aCBmaWxlIG1hcHBpbmcsIHBvdGVudGlhbGx5LCBsaWtlIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgLCBvciwgaW4gdGhlIHNoYXJlZCBtZW1vcnkgc3BhY2UsIHdoYXQgYWJvdXQgYHNobWVtX2FsbG9jX2ZvbGlvYCBvciBgc2htZW1fYWxsb2NfaHVnZWZvbGlvYD8gVGhlc2UgY291bGQgYmUgc2lnbmlmaWNhbnQgY29udHJpYnV0b3JzLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgYHNobWVtLmNgIHRvIHNlZSBpZiB0aG9zZSBhcmUgdGhlIGN1bHByaXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV9hbGxvY18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYz04NjQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZpbGVfc3RhdHNfYXR0cnNbXSA9IHtcbm1tL2h1Z2VfbWVtb3J5LmMtODY1LSNpZmRlZiBDT05GSUdfU0hNRU1cbm1tL2h1Z2VfbWVtb3J5LmM6ODY2Olx0XHUwMDI2c2htZW1fYWxsb2NfYXR0ci5hdHRyLFxubW0vaHVnZV9tZW1vcnkuYy04NjctXHRcdTAwMjZzaG1lbV9mYWxsYmFja19hdHRyLmF0dHIsXG4tLVxubW0vc2htZW0uYz0xOTE3PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5tbS9zaG1lbS5jLTE5MjQtXG5tbS9zaG1lbS5jOjE5MjU6c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fYWxsb2NfZm9saW8oZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsXG5tbS9zaG1lbS5jLTE5MjYtXHRcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvLCBwZ29mZl90IGluZGV4KVxuLS1cbm1tL3NobWVtLmMtMTkzOC1cbm1tL3NobWVtLmM6MTkzOTpzdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9hbGxvY19hbmRfYWRkX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxubW0vc2htZW0uYy0xOTQwLVx0XHRnZnBfdCBnZnAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYy0xOTYxLVx0XHRcdGFsaWduZWRfaW5kZXggPSByb3VuZF9kb3duKGluZGV4LCBwYWdlcyk7XG5tbS9zaG1lbS5jOjE5NjI6XHRcdFx0Zm9saW8gPSBzaG1lbV9hbGxvY19mb2xpbyhnZnAsIG9yZGVyLCBpbmZvLCBhbGlnbmVkX2luZGV4KTtcbm1tL3NobWVtLmMtMTk2My1cdFx0XHRpZiAoZm9saW8pIHtcbi0tXG5tbS9zaG1lbS5jLTE5NzQtXHRcdHBhZ2VzID0gMTtcbm1tL3NobWVtLmM6MTk3NTpcdFx0Zm9saW8gPSBzaG1lbV9hbGxvY19mb2xpbyhnZnAsIDAsIGluZm8sIGluZGV4KTtcbm1tL3NobWVtLmMtMTk3Ni1cdH1cbi0tXG5tbS9zaG1lbS5jPTIwODk9c3RhdGljIGludCBzaG1lbV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL3NobWVtLmMtMjExMS1cbm1tL3NobWVtLmM6MjExMjpcdG5ldyA9IHNobWVtX2FsbG9jX2ZvbGlvKGdmcCwgZm9saW9fb3JkZXIob2xkKSwgaW5mbywgaW5kZXgpO1xubW0vc2htZW0uYy0yMTEzLVx0aWYgKCFuZXcpXG4tLVxubW0vc2htZW0uYz0yNDI4PXN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtMjUxNS1cdFx0aHVnZV9nZnAgPSB0aHBfc2htZW1fbGltaXRfZ2ZwX21hc2soaHVnZV9nZnAsIGdmcCk7XG5tbS9zaG1lbS5jOjI1MTY6XHRcdGZvbGlvID0gc2htZW1fYWxsb2NfYW5kX2FkZF9mb2xpbyh2bWYsIGh1Z2VfZ2ZwLFxubW0vc2htZW0uYy0yNTE3LVx0XHRcdFx0aW5vZGUsIGluZGV4LCBmYXVsdF9tbSwgb3JkZXJzKTtcbi0tXG5tbS9zaG1lbS5jLTI1MjctXG5tbS9zaG1lbS5jOjI1Mjg6XHRmb2xpbyA9IHNobWVtX2FsbG9jX2FuZF9hZGRfZm9saW8odm1mLCBnZnAsIGlub2RlLCBpbmRleCwgZmF1bHRfbW0sIDApO1xubW0vc2htZW0uYy0yNTI5LVx0aWYgKElTX0VSUihmb2xpbykpIHtcbi0tXG5tbS9zaG1lbS5jPTMxNDI9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fbWZpbGxfZm9saW9fYWxsb2Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vc2htZW0uYy0zMTU0LVxubW0vc2htZW0uYzozMTU1Olx0Zm9saW8gPSBzaG1lbV9hbGxvY19mb2xpbyhnZnAsIDAsIGluZm8sIHBnb2ZmKTtcbm1tL3NobWVtLmMtMzE1Ni1cdGlmICghZm9saW8pXG4tLVxubW0vc2htZW0uYz01MTE1PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqc2htZW1faW5vZGVfY2FjaGVwIF9fcm9fYWZ0ZXJfaW5pdDtcbm1tL3NobWVtLmMtNTExNi1cbm1tL3NobWVtLmM6NTExNzpzdGF0aWMgc3RydWN0IGlub2RlICpzaG1lbV9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxubW0vc2htZW0uYy01MTE4LXtcbi0tXG5tbS9zaG1lbS5jPTUyNDI9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcyA9IHtcbm1tL3NobWVtLmM6NTI0MzpcdC5hbGxvY19pbm9kZVx0PSBzaG1lbV9hbGxvY19pbm9kZSxcbm1tL3NobWVtLmMtNTI0NC1cdC5mcmVlX2lub2RlXHQ9IHNobWVtX2ZyZWVfaW5fY29yZV9pbm9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0OTUKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpbmFsIEZ1enppbmcgQ2hlY2sgLSBNZW1vcnkgQWxsb2NhdGlvbiBTbG93cGF0aCoqCgpPa2F5LCBmaW5hbCBjaGVjayB0aW1lLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoaXMgYWxsIGxpbmVzIHVwLgoKMS4gIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC4gR29vZC4gV2UmIzM5O3JlIG1vZGlmeWluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHNsb3dwYXRoIGxvZ2ljIHJpZ2h0IHRoZXJlIGluIGBtbS9wYWdlX2FsbG9jLmNgLCBzcGVjaWZpY2FsbHkgaG93IGBfX0dGUF9ESVJFQ1RfUkVDTEFJTWAgaXMgaGFuZGxlZCBpbiBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgZm9yIHRob3NlIGJpZyBhbGxvY2F0aW9ucyB3aXRoIGBfX0dGUF9OT1JFVFJZYC4gVGhpcyAqZGVmaW5pdGVseSogaW1wYWN0cyBkaXJlY3QgcmVjbGFpbSBhbmQgbWVtb3J5IGNvbXBhY3Rpb24uIEltcG9ydGFudCBzdHVmZi4KCjIuICBgRW5hYmxlQ29uZmlnc2AgaXMgZW1wdHkuIFJpZ2h0LCBtYWtlcyBzZW5zZS4gVGhpcyBpcyBmdW5kYW1lbnRhbCBrZXJuZWwgc3R1ZmYgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgLiBObyBjb25kaXRpb25hbCBjb21waWxhdGlvbiBoZXJlLiBXZSYjMzk7cmUgZ2V0dGluZyBhdCBhIGNvcmUgY29tcG9uZW50LgoKMy4gIGBGb2N1c1N5bWJvbHNgOiBSaWdodCwgbm8gZ2VuZXJpYyBhbGxvY2F0b3JzIG9yIHBhZ2UgZmF1bHQgaGFuZGxlcnMuIFdlJiMzOTtyZSBiZWluZyBzdXJnaWNhbC4gV2UmIzM5O3JlIHRhcmdldGluZyB0aGUgaGlnaC1vcmRlciwgY29zdGx5IGFsbG9jYXRpb25zIHdpdGggYF9fR0ZQX05PUkVUUllgLiBTcGVjaWZpY2FsbHksIHRoYXQgbWVhbnM6CgogICAgKiAgIGBhbGxvY19odWdlX3plcm9fZm9saW9gIC0gYmlnLCB6ZXJvZWQgZm9saW9zLgogICAgKiAgIGBfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlYCAtIGxhcmdlIGFub255bW91cyBwYWdlcywgY3JpdGljYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4KICAgICogICBgYWxsb2NhdGVfc2xhYmAgLSB0aGUgc2xhYiBhbGxvY2F0b3IsIGFsd2F5cyBhIGdvb2QgdGFyZ2V0LgogICAgKiAgIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgIC0gaGFuZGxpbmcgZmlsZSBtYXBwaW5ncyB3aXRoIG1lbW9yeSBwb2xpY2llcywgYWxzbyBrZXkuCgpBbHJpZ2h0LCB0aGF0IGNvdmVycyBpdC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19odWdlX3plcm9fZm9saW8mIzM0OywKICAgICYjMzQ7X19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZSYjMzQ7LAogICAgJiMzNDthbGxvY2F0ZV9zbGFiJiMzNDssCiAgICAmIzM0O19fZmlsZW1hcF9nZXRfZm9saW9fbXBvbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHNsb3dwYXRoIGxvZ2ljIGluIG1tL3BhZ2VfYWxsb2MuYyAoX19hbGxvY19wYWdlc19zbG93cGF0aCkgdG8gY2xlYXIgX19HRlBfRElSRUNUX1JFQ0xBSU0gZm9yIGNvc3RseS1vcmRlciBhbGxvY2F0aW9ucyByZXF1ZXN0aW5nIF9fR0ZQX05PUkVUUlkgKHVubGVzcyBfX0dGUF9USElTTk9ERSBpcyBzcGVjaWZpZWQpLiBUaGlzIGRpcmVjdGx5IGFsdGVycyBkaXJlY3QgcmVjbGFpbSBhbmQgY29tcGFjdGlvbiBiZWhhdmlvciBmb3IgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyBzdWNoIGFzIFRIUCBhbmQgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbnMuIEl0IHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIGNvbXBhY3Rpb24gYW5kIGZhbGxiYWNrIGludmFyaWFudHMgaG9sZCB3aXRob3V0IGNhdXNpbmcgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBhbGxvY2F0aW9uIGZhaWx1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsbG9jX2h1Z2VfemVyb19mb2xpbyYjMzQ7LAogICAgJiMzNDtfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlJiMzNDssCiAgICAmIzM0O2FsbG9jYXRlX3NsYWImIzM0OywKICAgICYjMzQ7X19maWxlbWFwX2dldF9mb2xpb19tcG9sJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc2xvd3BhdGggbG9naWMgaW4gbW0vcGFnZV9hbGxvYy5jIChfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKSB0byBjbGVhciBfX0dGUF9ESVJFQ1RfUkVDTEFJTSBmb3IgY29zdGx5LW9yZGVyIGFsbG9jYXRpb25zIHJlcXVlc3RpbmcgX19HRlBfTk9SRVRSWSAodW5sZXNzIF9fR0ZQX1RISVNOT0RFIGlzIHNwZWNpZmllZCkuIFRoaXMgZGlyZWN0bHkgYWx0ZXJzIGRpcmVjdCByZWNsYWltIGFuZCBjb21wYWN0aW9uIGJlaGF2aW9yIGZvciBoaWdoLW9yZGVyIGFsbG9jYXRpb25zIHN1Y2ggYXMgVEhQIGFuZCBsYXJnZSBmb2xpbyBhbGxvY2F0aW9ucy4gSXQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgY29tcGFjdGlvbiBhbmQgZmFsbGJhY2sgaW52YXJpYW50cyBob2xkIHdpdGhvdXQgY2F1c2luZyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGFsbG9jYXRpb24gZmFpbHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDIzOjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6Mzk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBhbGxvY2F0b3Igc2xvd3BhdGggKF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgpIHRvIGNsZWFyIF9fR0ZQX0RJUkVDVF9SRUNMQUlNIGZvciBjb3N0bHktb3JkZXIgYWxsb2NhdGlvbnMgdGhhdCBoYXZlIF9fR0ZQX05PUkVUUlkgc2V0IChhbmQgbm90IF9fR0ZQX1RISVNOT0RFKSwgYXZvaWRpbmcgc3RhbGxzIGluIHJlY2xhaW0gYW5kIGNvbXBhY3Rpb24uXG5cblRoaXMgY2hhbmdlIHN0cmljdGx5IG1vZGlmaWVzIGFsbG9jYXRvciByZWNsYWltIGFuZCBjb21wYWN0aW9uIGJlaGF2aW9yLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiBvciB6ZXJvaW5nIChlLmcuLCBfX0dGUF9aRVJPKSwgYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgbGVhayBpbmZvIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNjEyOGEyOTRhMjRlODRjMDI2NDc1MjA2YjVhMTUyMmZkOTNiZDE0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAyMzozODoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCAxMmZhYzkwODRjNDgzLi41NDJjMmVjMzEwNjEzIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvYy5jCkBAIC00Nzg0LDEwICYjNDM7NDc4NCwxMCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICoKIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKIAkJCQkJCXN0cnVjdCBhbGxvY19jb250ZXh0ICphYykKIHsKLQlib29sIGNhbl9kaXJlY3RfcmVjbGFpbSA9IGdmcF9tYXNrICZhbXA7IF9fR0ZQX0RJUkVDVF9SRUNMQUlNOwotCWJvb2wgY2FuX2NvbXBhY3QgPSBjYW5fZGlyZWN0X3JlY2xhaW0gJmFtcDsmYW1wOyBnZnBfY29tcGFjdGlvbl9hbGxvd2VkKGdmcF9tYXNrKTsKLQlib29sIG5vZmFpbCA9IGdmcF9tYXNrICZhbXA7IF9fR0ZQX05PRkFJTDsKIAljb25zdCBib29sIGNvc3RseV9vcmRlciA9IG9yZGVyICZndDsgUEFHRV9BTExPQ19DT1NUTFlfT1JERVI7CiYjNDM7CWJvb2wgY2FuX2RpcmVjdF9yZWNsYWltOwomIzQzOwlib29sIGNhbl9jb21wYWN0OwomIzQzOwlib29sIG5vZmFpbDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzOwogCXVuc2lnbmVkIGxvbmcgZGlkX3NvbWVfcHJvZ3Jlc3M7CkBAIC00ODAyLDYgJiM0Mzs0ODAyLDE4IEBAIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKIAlib29sIGNhbl9yZXRyeV9yZXNlcnZlcyA9IHRydWU7CiAJdW5zaWduZWQgbG9uZyBhbGxvY19zdGFydF90aW1lID0gamlmZmllczsKIAomIzQzOwkvKgomIzQzOwkgKiBDb3N0bHkgX19HRlBfTk9SRVRSWSBjYWxsZXJzIGhhdmUgYSBjaGVhcCBmYWxsYmFjaywgc28gZG9uJiMzOTt0IHN0YWxsCiYjNDM7CSAqIHRoZW0gaW4gcmVjbGFpbSBvciBjb21wYWN0aW9uLiBfX0dGUF9USElTTk9ERSBjYWxsZXJzIGFyZSBleGVtcHQuCiYjNDM7CSAqLwomIzQzOwlpZiAoY29zdGx5X29yZGVyICZhbXA7JmFtcDsgKGdmcF9tYXNrICZhbXA7IF9fR0ZQX05PUkVUUlkpICZhbXA7JmFtcDsKJiM0MzsJICAgICEoZ2ZwX21hc2sgJmFtcDsgX19HRlBfVEhJU05PREUpKQomIzQzOwkJZ2ZwX21hc2sgJmFtcDs9IH5fX0dGUF9ESVJFQ1RfUkVDTEFJTTsKJiM0MzsKJiM0MzsJY2FuX2RpcmVjdF9yZWNsYWltID0gZ2ZwX21hc2sgJmFtcDsgX19HRlBfRElSRUNUX1JFQ0xBSU07CiYjNDM7CWNhbl9jb21wYWN0ID0gY2FuX2RpcmVjdF9yZWNsYWltICZhbXA7JmFtcDsgZ2ZwX2NvbXBhY3Rpb25fYWxsb3dlZChnZnBfbWFzayk7CiYjNDM7CW5vZmFpbCA9IGdmcF9tYXNrICZhbXA7IF9fR0ZQX05PRkFJTDsKJiM0MzsKIAlpZiAodW5saWtlbHkobm9mYWlsKSkgewogCQkvKgogCQkgKiBBbHNvIHdlIGRvbiYjMzk7dCBzdXBwb3J0IF9fR0ZQX05PRkFJTCB3aXRob3V0IF9fR0ZQX0RJUkVDVF9SRUNMQUlNLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlzayoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgdGhhdCB3YXJyYW50IGEgS01TQU4gY2hlY2suIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIG1vZGlmaWVkIGNvZGUgd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCBmdW5jdGlvbi4KCkkmIzM5O3ZlIGdvdCB0aGUgYmVmb3JlLWFuZC1hZnRlciBjb2RlIHNuaXBwZXRzIGluIGZyb250IG9mIG1lLiBMb29raW5nIGF0IHRoZSBjaGFuZ2VzLCBJIHNlZSB0aGF0IHRoZSBvcmRlciBvZiBpbml0aWFsaXphdGlvbiBvZiBib29sZWFuIHZhcmlhYmxlcyBgY2FuX2RpcmVjdF9yZWNsYWltYCwgYGNhbl9jb21wYWN0YCwgYW5kIGBub2ZhaWxgIGhhcyBiZWVuIGFsdGVyZWQuIFRoZXkgd2VyZSBwcmV2aW91c2x5IGluaXRpYWxpemVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLCBhbmQgbm93IHRoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lIGxhdGVyIG9uLiBBIG5ldyBjb25kaXRpb25hbCBibG9jayBoYXMgYmVlbiBhZGRlZCB0aGF0IG1heSBjaGFuZ2UgdGhlIHZhbHVlIG9mIGBnZnBfbWFza2AuIFRoaXMgY29uZGl0aW9uYWwgYmxvY2sgbm93IGFmZmVjdHMgdGhlIHZhbHVlcyBvZiBgY2FuX2RpcmVjdF9yZWNsYWltYCBhbmQgYGNhbl9jb21wYWN0YC4gSXQgc2VlbXMgbGlrZSB0aGUgY29uZGl0aW9uYWwgbG9naWMgaXMgcmVsYXRlZCB0byBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGRpcmVjdCByZWNsYWltIGFuZCBjb21wYWN0aW9uIGZvciBsYXJnZXIgb3JkZXJzLCBlc3BlY2lhbGx5IGluIGNhc2VzIHdoZXJlIHRoZSBhbGxvY2F0aW9uIG1pZ2h0IGJlIGNvbnNpZGVyZWQgJiMzNDtjb3N0bHkmIzM0OyBvciB3aGVyZSB3ZSBhcmUgYXNrZWQgbm90IHRvIHJldHJ5LgoKTXkgcHJpbWFyeSBjb25jZXJuIG5vdyBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGluYWR2ZXJ0ZW50bHkgbGVhdmVzIHRoZXNlIGJvb2xlYW4gdmFyaWFibGVzIHVuaW5pdGlhbGl6ZWQgaW4gc3BlY2lmaWMgZXhlY3V0aW9uIHBhdGhzLiBXaGlsZSB0aGUgY29kZSAqaW50ZW5kcyogdG8gYXNzaWduIHZhbHVlcyBsYXRlciwgdGhlIGNvbXBpbGVyIG1pZ2h0IG5vdCBndWFyYW50ZWUgdGhhdCBhc3NpZ25tZW50LiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIHBhdGhzIHRoYXQgY291bGQgc2tpcCB0aGUgaW5pdGlhbGl6YXRpb24/IElmIHNvLCB0aGlzIGludHJvZHVjZXMgYSBjbGFzc2ljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyByaXNrLiBUaGF0IHNhaWQsIGl0IHNlZW1zIGxpa2UgdGhlIHZhcmlhYmxlIGBnZnBfbWFza2Agc2hvdWxkIGJlIHdlbGwgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0IGlzIHVzZWQsIHNvIG15IGludHVpdGlvbiBpcyB0aGF0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uICpzaG91bGQqIGJlIHNhZmUuCgpJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL3BhZ2VfYWxsb2MuY2AgYXJvdW5kIGxpbmUgNDc4NCwgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBmdW5jdGlvbiYjMzk7cyBvdmVyYWxsIGJlaGF2aW9yIGFuZCB0aGUgY29udGV4dCBvZiB0aGVzZSB2YXJpYWJsZXMuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGJvb2xlYW5zIGFyZSB1c2VkIGFuZCB3aGF0IHRoZWlyIGRlZmF1bHQgdmFsdWVzIHdvdWxkIG1lYW4uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXhlY3V0aW9uIHBhdGhzIHdpdGhpbiB0aGUgZnVuY3Rpb24gdG8gYXNzZXNzIGlmIGFueSBwYXRoIG1pZ2h0IGNhdXNlIGBjYW5fZGlyZWN0X3JlY2xhaW1gLCBgY2FuX2NvbXBhY3RgLCBvciBgbm9mYWlsYCB0byByZW1haW4gdW5pbml0aWFsaXplZC4gQmFzZWQgb24gdGhpcyBkZWVwZXIgYW5hbHlzaXMsIEkgc2hvdWxkIGJlIGFibGUgdG8gbWFrZSBhIHNvdW5kIGp1ZGdtZW50IG9uIHdoZXRoZXIgS01TQU4gaXMgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2VfYWxsb2MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDc4MDpcdFx0d2Fybl9hbGxvY19zaG93X21lbShnZnBfbWFzaywgbm9kZW1hc2spO1xuNDc4MTpcdH1cbjQ3ODI6XHRcbjQ3ODM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcbjQ3ODQ6XHRfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG40Nzg1Olx0XHRcdFx0XHRcdFx0c3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxuNDc4NjpcdHtcbjQ3ODc6XHRcdGNvbnN0IGJvb2wgY29zdGx5X29yZGVyID0gb3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSO1xuNDc4ODpcdFx0Ym9vbCBjYW5fZGlyZWN0X3JlY2xhaW07XG40Nzg5Olx0XHRib29sIGNhbl9jb21wYWN0O1xuNDc5MDpcdFx0Ym9vbCBub2ZhaWw7XG40NzkxOlx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG40NzkyOlx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3M7XG40NzkzOlx0XHR1bnNpZ25lZCBsb25nIGRpZF9zb21lX3Byb2dyZXNzO1xuNDc5NDpcdFx0ZW51bSBjb21wYWN0X3ByaW9yaXR5IGNvbXBhY3RfcHJpb3JpdHk7XG40Nzk1Olx0XHRlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3RfcmVzdWx0O1xuNDc5NjpcdFx0aW50IGNvbXBhY3Rpb25fcmV0cmllcztcbjQ3OTc6XHRcdGludCBub19wcm9ncmVzc19sb29wcztcbjQ3OTg6XHRcdHVuc2lnbmVkIGludCBjcHVzZXRfbWVtc19jb29raWU7XG40Nzk5Olx0XHR1bnNpZ25lZCBpbnQgem9uZWxpc3RfaXRlcl9jb29raWU7XG40ODAwOlx0XHRpbnQgcmVzZXJ2ZV9mbGFncztcbjQ4MDE6XHRcdGJvb2wgY29tcGFjdF9maXJzdCA9IGZhbHNlO1xuNDgwMjpcdFx0Ym9vbCBjYW5fcmV0cnlfcmVzZXJ2ZXMgPSB0cnVlO1xuNDgwMzpcdFx0dW5zaWduZWQgbG9uZyBhbGxvY19zdGFydF90aW1lID0gamlmZmllcztcbjQ4MDQ6XHRcbjQ4MDU6XHRcdC8qXG40ODA2Olx0XHQgKiBDb3N0bHkgX19HRlBfTk9SRVRSWSBjYWxsZXJzIGhhdmUgYSBjaGVhcCBmYWxsYmFjaywgc28gZG9uJiMzOTt0IHN0YWxsXG40ODA3Olx0XHQgKiB0aGVtIGluIHJlY2xhaW0gb3IgY29tcGFjdGlvbi4gX19HRlBfVEhJU05PREUgY2FsbGVycyBhcmUgZXhlbXB0LlxuNDgwODpcdFx0ICovXG40ODA5Olx0XHRpZiAoY29zdGx5X29yZGVyIFx1MDAyNlx1MDAyNiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpIFx1MDAyNlx1MDAyNlxuNDgxMDpcdFx0ICAgICEoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSlcbjQ4MTE6XHRcdFx0Z2ZwX21hc2sgXHUwMDI2PSB+X19HRlBfRElSRUNUX1JFQ0xBSU07XG40ODEyOlx0XG40ODEzOlx0XHRjYW5fZGlyZWN0X3JlY2xhaW0gPSBnZnBfbWFzayBcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU07XG40ODE0Olx0XHRjYW5fY29tcGFjdCA9IGNhbl9kaXJlY3RfcmVjbGFpbSBcdTAwMjZcdTAwMjYgZ2ZwX2NvbXBhY3Rpb25fYWxsb3dlZChnZnBfbWFzayk7XG40ODE1Olx0XHRub2ZhaWwgPSBnZnBfbWFzayBcdTAwMjYgX19HRlBfTk9GQUlMO1xuNDgxNjpcdFxuNDgxNzpcdFx0aWYgKHVubGlrZWx5KG5vZmFpbCkpIHtcbjQ4MTg6XHRcdFx0LypcbjQ4MTk6XHRcdFx0ICogQWxzbyB3ZSBkb24mIzM5O3Qgc3VwcG9ydCBfX0dGUF9OT0ZBSUwgd2l0aG91dCBfX0dGUF9ESVJFQ1RfUkVDTEFJTSxcbjQ4MjA6XHRcdFx0ICogb3RoZXJ3aXNlLCB3ZSBtYXkgcmVzdWx0IGluIGxvY2t1cC5cbjQ4MjE6XHRcdFx0ICovXG40ODIyOlx0XHRcdFdBUk5fT05fT05DRSghY2FuX2RpcmVjdF9yZWNsYWltKTtcbjQ4MjM6XHRcdFx0LypcbjQ4MjQ6XHRcdFx0ICogUEZfTUVNQUxMT0MgcmVxdWVzdCBmcm9tIHRoaXMgY29udGV4dCBpcyByYXRoZXIgYml6YXJyZVxuNDgyNTpcdFx0XHQgKiBiZWNhdXNlIHdlIGNhbm5vdCByZWNsYWltIGFueXRoaW5nIGFuZCBvbmx5IGNhbiBsb29wIHdhaXRpbmdcbjQ4MjY6XHRcdFx0ICogZm9yIHNvbWVib2R5IHRvIGRvIGEgd29yayBmb3IgdXMuXG40ODI3Olx0XHRcdCAqL1xuNDgyODpcdFx0XHRXQVJOX09OX09OQ0UoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpO1xuNDgyOTpcdFx0fVxuNDgzMDpcdFxuNDgzMTpcdHJlc3RhcnQ6XG40ODMyOlx0XHRjb21wYWN0aW9uX3JldHJpZXMgPSAwO1xuNDgzMzpcdFx0bm9fcHJvZ3Jlc3NfbG9vcHMgPSAwO1xuNDgzNDpcdFx0Y29tcGFjdF9yZXN1bHQgPSBDT01QQUNUX1NLSVBQRUQ7XG40ODM1Olx0XHRjb21wYWN0X3ByaW9yaXR5ID0gREVGX0NPTVBBQ1RfUFJJT1JJVFk7XG40ODM2Olx0XHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xuNDgzNzpcdFx0em9uZWxpc3RfaXRlcl9jb29raWUgPSB6b25lbGlzdF9pdGVyX2JlZ2luKCk7XG40ODM4Olx0XG40ODM5Olx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAyMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzAwCgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDQ2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBUaGlzIFBhdGNoIGlzIGEgTm8tT3AqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQmIzM5O3MgaXQgKnJlYWxseSogZG9pbmc/IFRoZSBjb2RlJiMzOTtzIGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgY2xlYXJpbmcgYF9fR0ZQX0RJUkVDVF9SRUNMQUlNYCBpbiB0aGUgYGdmcF9tYXNrYCBmb3IgbGFyZ2UgYWxsb2NhdGlvbnMgKG9yZGVyICZndDsgMykgdGhhdCBhcmUgZmxhZ2dlZCB3aXRoIGBfX0dGUF9OT1JFVFJZYCBidXQgKm5vdCogYF9fR0ZQX1RISVNOT0RFYC4gVGhlIGdvYWw/IFRvIHByZXZlbnQgc3RhbGxpbmcgdGhlc2UgcG90ZW50aWFsbHkgY29zdGx5IGFuZCBub24tcmV0cnlpbmcgYWxsb2NhdG9ycyBkdXJpbmcgZGlyZWN0IHJlY2xhaW0gb3IgY29tcGFjdGlvbi4KCk5vdywgbXkgbWluZCBpbnN0YW50bHkganVtcHMgdG86IERvZXMgdGhpcyBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBEb2VzIGl0IHNvbWVob3cgY2F1c2UgdXMgdG8gcmVhZCBvciBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTGV0JiMzOTtzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdDoKCjEuICAqKlVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlPyoqIE5vcGUuIEFsbCBsb2NhbCB2YXJpYWJsZXMgaGVyZSBhcmUgaW1tZWRpYXRlbHkgYXNzaWduZWQgdmFsdWVzLiBTYWZlLgoyLiAgKipNZW1vcnkgaW5pdGlhbGl6YXRpb24gc2VtYW50aWNzIGNoYW5nZWQ/KiogTm8sIGl0IGp1c3QgbW9kaWZpZXMgYSBmbGFnLCBzcGVjaWZpY2FsbHkgYF9fR0ZQX0RJUkVDVF9SRUNMQUlNYCwgbm90aGluZyBhYm91dCBpbml0aWFsaXppbmcgbWVtb3J5IHdpdGggc2F5IGBfX0dGUF9aRVJPYCBpcyBhbHRlcmVkLgozLiAgKipTdHJ1Y3R1cmUgcGFja2luZywgcGFkZGluZywgb3IgYW55IGRhdGEgdHJhbnNmZXJzPyoqIE5vLCBubyBjaGFuZ2UgdGhlcmUuCjQuICAqKkFueSBvdGhlciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8qKiBTdGlsbCBuby4KClNvLCBpbiBteSBleHBlcnQgb3BpbmlvbiwgKipOZWVkc0tNU0FOIGlzIGRlZmluaXRlbHkgZmFsc2UgaGVyZS4qKiBUaGlzIGlzIGEgY2xlYXItY3V0IGNhc2UuCgpOb3csIGxldCYjMzk7cyBhcnRpY3VsYXRlIHRoZSByZWFzb25pbmcsIGVzcGVjaWFsbHkgY29udHJhc3RpbmcgS01TQU4gYW5kIEtBU0FOLCBmb3IgZ29vZCBtZWFzdXJlLiBIZXJl4oCZcyBob3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCBpdDoKCktNU0FOIGlzIG91ciB0b29sIGZvciBjYXRjaGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkc+KAlHN0dWZmIGxlYWtpbmcgZnJvbSBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucywgYW5kIGltcG9ydGFudGx5LCBpbmZvcm1hdGlvbiBsZWFrcyAqYWNyb3NzKiBzZWN1cml0eSBib3VuZGFyaWVzIGxpa2UgZnJvbSB0aGUga2VybmVsIHRvIHVzZXJzcGFjZS4gS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBhbGwgYWJvdXQgbWVtb3J5ICpzYWZldHkqIHZpb2xhdGlvbnM6IG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCB0aGUgdXN1YWwgc3VzcGVjdHMuCgpUaGlzIHBhdGNoPyBJdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIGFsbG9jYXRvciAqYmVoYXZpb3IqLiBJdCYjMzk7cyBhIGhldXJpc3RpYyBjaGFuZ2U6IHR3ZWFraW5nIHRoZSByZWNsYWltL2NvbXBhY3Rpb24gbG9naWMgZm9yIGxhcmdlLCBuby1yZXRyeSBhbGxvY2F0aW9ucy4gVGhlIHBhdGNoIG1vZGlmaWVzIGEgZmxhZyBhbmQgbm90aGluZyBtb3JlLiBJdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2Ugb3IgYWx0ZXIgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBJdCBkb2VzbiYjMzk7dCBjb3B5IHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UuIEl0IGRvZXNuJiMzOTt0IHRvdWNoIGhvdyBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQuIE5vIEtNU0FOLXNwZWNpZmljIGNoZWNrcyBhcmUgcmVxdWlyZWQuCgpTbywgSSYjMzk7bSBjb25maWRlbnQgaW4gY2FsbGluZyBgc2V0LXJlc3VsdHNgLiBUaGlzIG9uZSBpcyBjbGVhci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMjM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgYWxsb2NhdG9yIHNsb3dwYXRoIChfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKSB0byBjbGVhciBfX0dGUF9ESVJFQ1RfUkVDTEFJTSBmb3IgY29zdGx5LW9yZGVyIGFsbG9jYXRpb25zIHRoYXQgaGF2ZSBfX0dGUF9OT1JFVFJZIHNldCAoYW5kIG5vdCBfX0dGUF9USElTTk9ERSksIGF2b2lkaW5nIHN0YWxscyBpbiByZWNsYWltIGFuZCBjb21wYWN0aW9uLlxuXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBtb2RpZmllcyBhbGxvY2F0b3IgcmVjbGFpbSBhbmQgY29tcGFjdGlvbiBiZWhhdmlvci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gb3IgemVyb2luZyAoZS5nLiwgX19HRlBfWkVSTyksIGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIGxlYWsgaW5mbyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgYWxsb2NhdG9yIHNsb3dwYXRoIChfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKSB0byBjbGVhciBfX0dGUF9ESVJFQ1RfUkVDTEFJTSBmb3IgY29zdGx5LW9yZGVyIGFsbG9jYXRpb25zIHRoYXQgaGF2ZSBfX0dGUF9OT1JFVFJZIHNldCAoYW5kIG5vdCBfX0dGUF9USElTTk9ERSksIGF2b2lkaW5nIHN0YWxscyBpbiByZWNsYWltIGFuZCBjb21wYWN0aW9uLlxuXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBtb2RpZmllcyBhbGxvY2F0b3IgcmVjbGFpbSBhbmQgY29tcGFjdGlvbiBiZWhhdmlvci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gb3IgemVyb2luZyAoZS5nLiwgX19HRlBfWkVSTyksIGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIGxlYWsgaW5mbyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODoxNC4zNjI0OTYzMDNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDgxMzAyOTUyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19odWdlX3plcm9fZm9saW9cIixcbiAgICBcIl9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VcIixcbiAgICBcImFsbG9jYXRlX3NsYWJcIixcbiAgICBcIl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgYWxsb2NhdG9yIHNsb3dwYXRoIChfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKSB0byBjbGVhciBfX0dGUF9ESVJFQ1RfUkVDTEFJTSBmb3IgY29zdGx5LW9yZGVyIGFsbG9jYXRpb25zIHRoYXQgaGF2ZSBfX0dGUF9OT1JFVFJZIHNldCAoYW5kIG5vdCBfX0dGUF9USElTTk9ERSksIGF2b2lkaW5nIHN0YWxscyBpbiByZWNsYWltIGFuZCBjb21wYWN0aW9uLlxcblxcblRoaXMgY2hhbmdlIHN0cmljdGx5IG1vZGlmaWVzIGFsbG9jYXRvciByZWNsYWltIGFuZCBjb21wYWN0aW9uIGJlaGF2aW9yLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGRvZXMgbm90IG1vZGlmeSBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiBvciB6ZXJvaW5nIChlLmcuLCBfX0dGUF9aRVJPKSwgYW5kIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgbGVhayBpbmZvIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzbG93cGF0aCBsb2dpYyBpbiBtbS9wYWdlX2FsbG9jLmMgKF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgpIHRvIGNsZWFyIF9fR0ZQX0RJUkVDVF9SRUNMQUlNIGZvciBjb3N0bHktb3JkZXIgYWxsb2NhdGlvbnMgcmVxdWVzdGluZyBfX0dGUF9OT1JFVFJZICh1bmxlc3MgX19HRlBfVEhJU05PREUgaXMgc3BlY2lmaWVkKS4gVGhpcyBkaXJlY3RseSBhbHRlcnMgZGlyZWN0IHJlY2xhaW0gYW5kIGNvbXBhY3Rpb24gYmVoYXZpb3IgZm9yIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgc3VjaCBhcyBUSFAgYW5kIGxhcmdlIGZvbGlvIGFsbG9jYXRpb25zLiBJdCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBjb21wYWN0aW9uIGFuZCBmYWxsYmFjayBpbnZhcmlhbnRzIGhvbGQgd2l0aG91dCBjYXVzaW5nIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYWxsb2NhdGlvbiBmYWlsdXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzg6MTQuMzYyNTAwMjYzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTMzODc4MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjYxMjhhMjk0YTI0ZTg0YzAyNjQ3NTIwNmI1YTE1MjJmZDkzYmQxNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDIzOjM4OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjU0MmMyZWMzMTA2MTMgMTAwNjQ0XFxuLS0tIGEvbW0vcGFnZV9hbGxvYy5jXFxuKysrIGIvbW0vcGFnZV9hbGxvYy5jXFxuQEAgLTQ3ODQsMTAgKzQ3ODQsMTAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqXFxuIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxcbiB7XFxuLVxcdGJvb2wgY2FuX2RpcmVjdF9yZWNsYWltID0gZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTTtcXG4tXFx0Ym9vbCBjYW5fY29tcGFjdCA9IGNhbl9kaXJlY3RfcmVjbGFpbSBcXHUwMDI2XFx1MDAyNiBnZnBfY29tcGFjdGlvbl9hbGxvd2VkKGdmcF9tYXNrKTtcXG4tXFx0Ym9vbCBub2ZhaWwgPSBnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX05PRkFJTDtcXG4gXFx0Y29uc3QgYm9vbCBjb3N0bHlfb3JkZXIgPSBvcmRlciBcXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSO1xcbitcXHRib29sIGNhbl9kaXJlY3RfcmVjbGFpbTtcXG4rXFx0Ym9vbCBjYW5fY29tcGFjdDtcXG4rXFx0Ym9vbCBub2ZhaWw7XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcXG4gXFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzO1xcbiBcXHR1bnNpZ25lZCBsb25nIGRpZF9zb21lX3Byb2dyZXNzO1xcbkBAIC00ODAyLDYgKzQ4MDIsMTggQEAgX19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbiBcXHRib29sIGNhbl9yZXRyeV9yZXNlcnZlcyA9IHRydWU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYWxsb2Nfc3RhcnRfdGltZSA9IGppZmZpZXM7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBDb3N0bHkgX19HRlBfTk9SRVRSWSBjYWxsZXJzIGhhdmUgYSBjaGVhcCBmYWxsYmFjaywgc28gZG9uJ3Qgc3RhbGxcXG4rXFx0ICogdGhlbSBpbiByZWNsYWltIG9yIGNvbXBhY3Rpb24uIF9fR0ZQX1RISVNOT0RFIGNhbGxlcnMgYXJlIGV4ZW1wdC5cXG4rXFx0ICovXFxuK1xcdGlmIChjb3N0bHlfb3JkZXIgXFx1MDAyNlxcdTAwMjYgKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfTk9SRVRSWSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICEoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9USElTTk9ERSkpXFxuK1xcdFxcdGdmcF9tYXNrIFxcdTAwMjY9IH5fX0dGUF9ESVJFQ1RfUkVDTEFJTTtcXG4rXFxuK1xcdGNhbl9kaXJlY3RfcmVjbGFpbSA9IGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU07XFxuK1xcdGNhbl9jb21wYWN0ID0gY2FuX2RpcmVjdF9yZWNsYWltIFxcdTAwMjZcXHUwMDI2IGdmcF9jb21wYWN0aW9uX2FsbG93ZWQoZ2ZwX21hc2spO1xcbitcXHRub2ZhaWwgPSBnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX05PRkFJTDtcXG4rXFxuIFxcdGlmICh1bmxpa2VseShub2ZhaWwpKSB7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIEFsc28gd2UgZG9uJ3Qgc3VwcG9ydCBfX0dGUF9OT0ZBSUwgd2l0aG91dCBfX0dGUF9ESVJFQ1RfUkVDTEFJTSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzg6MTUuODk3MDA5MTI4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NzA0Mjg0MzYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19odWdlX3plcm9fZm9saW9cIixcbiAgICBcIl9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VcIixcbiAgICBcImFsbG9jYXRlX3NsYWJcIixcbiAgICBcIl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc2xvd3BhdGggbG9naWMgaW4gbW0vcGFnZV9hbGxvYy5jIChfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKSB0byBjbGVhciBfX0dGUF9ESVJFQ1RfUkVDTEFJTSBmb3IgY29zdGx5LW9yZGVyIGFsbG9jYXRpb25zIHJlcXVlc3RpbmcgX19HRlBfTk9SRVRSWSAodW5sZXNzIF9fR0ZQX1RISVNOT0RFIGlzIHNwZWNpZmllZCkuIFRoaXMgZGlyZWN0bHkgYWx0ZXJzIGRpcmVjdCByZWNsYWltIGFuZCBjb21wYWN0aW9uIGJlaGF2aW9yIGZvciBoaWdoLW9yZGVyIGFsbG9jYXRpb25zIHN1Y2ggYXMgVEhQIGFuZCBsYXJnZSBmb2xpbyBhbGxvY2F0aW9ucy4gSXQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgY29tcGFjdGlvbiBhbmQgZmFsbGJhY2sgaW52YXJpYW50cyBob2xkIHdpdGhvdXQgY2F1c2luZyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGFsbG9jYXRpb24gZmFpbHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjYxMjhhMjk0YTI0ZTg0YzAyNjQ3NTIwNmI1YTE1MjJmZDkzYmQxNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMjM6Mzg6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmNcbmluZGV4IDEyZmFjOTA4NGM0ODMuLjU0MmMyZWMzMTA2MTMgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2FsbG9jLmNcbisrKyBiL21tL3BhZ2VfYWxsb2MuY1xuQEAgLTQ3ODQsMTAgKzQ3ODQsMTAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqXG4gX19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0XHRcdFx0XHRcdHN0cnVjdCBhbGxvY19jb250ZXh0ICphYylcbiB7XG4tXHRib29sIGNhbl9kaXJlY3RfcmVjbGFpbSA9IGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTTtcbi1cdGJvb2wgY2FuX2NvbXBhY3QgPSBjYW5fZGlyZWN0X3JlY2xhaW0gXHUwMDI2XHUwMDI2IGdmcF9jb21wYWN0aW9uX2FsbG93ZWQoZ2ZwX21hc2spO1xuLVx0Ym9vbCBub2ZhaWwgPSBnZnBfbWFzayBcdTAwMjYgX19HRlBfTk9GQUlMO1xuIFx0Y29uc3QgYm9vbCBjb3N0bHlfb3JkZXIgPSBvcmRlciBcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVI7XG4rXHRib29sIGNhbl9kaXJlY3RfcmVjbGFpbTtcbitcdGJvb2wgY2FuX2NvbXBhY3Q7XG4rXHRib29sIG5vZmFpbDtcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcbiBcdHVuc2lnbmVkIGludCBhbGxvY19mbGFncztcbiBcdHVuc2lnbmVkIGxvbmcgZGlkX3NvbWVfcHJvZ3Jlc3M7XG5AQCAtNDgwMiw2ICs0ODAyLDE4IEBAIF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdGJvb2wgY2FuX3JldHJ5X3Jlc2VydmVzID0gdHJ1ZTtcbiBcdHVuc2lnbmVkIGxvbmcgYWxsb2Nfc3RhcnRfdGltZSA9IGppZmZpZXM7XG4gXG4rXHQvKlxuK1x0ICogQ29zdGx5IF9fR0ZQX05PUkVUUlkgY2FsbGVycyBoYXZlIGEgY2hlYXAgZmFsbGJhY2ssIHNvIGRvbid0IHN0YWxsXG4rXHQgKiB0aGVtIGluIHJlY2xhaW0gb3IgY29tcGFjdGlvbi4gX19HRlBfVEhJU05PREUgY2FsbGVycyBhcmUgZXhlbXB0LlxuK1x0ICovXG4rXHRpZiAoY29zdGx5X29yZGVyIFx1MDAyNlx1MDAyNiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICEoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSlcbitcdFx0Z2ZwX21hc2sgXHUwMDI2PSB+X19HRlBfRElSRUNUX1JFQ0xBSU07XG4rXG4rXHRjYW5fZGlyZWN0X3JlY2xhaW0gPSBnZnBfbWFzayBcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU07XG4rXHRjYW5fY29tcGFjdCA9IGNhbl9kaXJlY3RfcmVjbGFpbSBcdTAwMjZcdTAwMjYgZ2ZwX2NvbXBhY3Rpb25fYWxsb3dlZChnZnBfbWFzayk7XG4rXHRub2ZhaWwgPSBnZnBfbWFzayBcdTAwMjYgX19HRlBfTk9GQUlMO1xuK1xuIFx0aWYgKHVubGlrZWx5KG5vZmFpbCkpIHtcbiBcdFx0LypcbiBcdFx0ICogQWxzbyB3ZSBkb24ndCBzdXBwb3J0IF9fR0ZQX05PRkFJTCB3aXRob3V0IF9fR0ZQX0RJUkVDVF9SRUNMQUlNLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzg6MTUuODk3MDEwNDY4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgxNjA5NDEyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhZ2UgQWxsb2NhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB3ZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0YXJnZXRzIHRoZSBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgZnVuY3Rpb24gd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgLiBUaGlzIGlzIGEgY29yZSBhcmVhLCBzbyBsZXQncyBwYXkgY2xvc2UgYXR0ZW50aW9uLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgc29tZSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1vZGlmaWVzIHRoZSBgZ2ZwX21hc2tgIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBgX19HRlBfTk9SRVRSWWAgYW5kIGBfX0dGUF9USElTTk9ERWAgZmxhZ3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIGlzIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByZXRyaWVzIGFuZCByZWNsYWltLiBUaGUgY29tbWVudCBnaXZlcyBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIHRoaXMuXG5cbkl0J3MgZXZpZGVudCB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBoZXJlLCBzcGVjaWZpY2FsbHkgZm9yIGNhbGxlcnMgdXNpbmcgYF9fR0ZQX05PUkVUUllgLCB3aGljaCBzdWdnZXN0cyB0aGF0IHdlIHdhbnQgdG8gYXZvaWQgcG90ZW50aWFsbHkgZXhwZW5zaXZlIHJlY2xhaW0gb3IgY29tcGFjdGlvbiBvcGVyYXRpb25zIGluIGNlcnRhaW4gY29udGV4dHMuIEkgdGhpbmsgdGhlIGNvc3RseSBvcmRlciBwYXJhbWV0ZXIgaXMgYWxzbyB2ZXJ5IGludGVyZXN0aW5nLCBhcyB0aGF0IHdpbGwgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBoZXJlLiBXZSBoYXZlIHRvIGNvbnNpZGVyIHdoYXQgY29uc3RpdHV0ZXMgYSBcImNvc3RseSBvcmRlci5cIlxuXG5UaGUgbG9naWMgdGhlbiBzZXRzIGBjYW5fZGlyZWN0X3JlY2xhaW1gLCBgY2FuX2NvbXBhY3RgLCBhbmQgYG5vZmFpbGAgYmFzZWQgb24gdGhlIG1vZGlmaWVkIGBnZnBfbWFza2AuIFRoaXMgc2VlbXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYXR0ZW1wdGluZyB0byBlbnN1cmUgdGhhdCBleHBlbnNpdmUgcmVjbGFpbSBvcGVyYXRpb25zIGRvbid0IHVubmVjZXNzYXJpbHkgYmxvY2sgY2FsbGVycyB3aXRoIGBfX0dGUF9OT1JFVFJZYCBpZiB0aGV5IGFyZSBub3QgZXhwbGljaXRseSBhc2tpbmcgZm9yIGl0IG9uIHRoZSBjdXJyZW50IG5vZGUuIFRoaXMgY291bGQgaW1wcm92ZSByZXNwb25zaXZlbmVzcyBpbiBjcml0aWNhbCBwYXRocyB3aGVyZSByZXRyaWVzIGFyZSB1bmRlc2lyYWJsZSwgYnV0IHdlIHdpbGwgaGF2ZSB0byBkaWcgaW4gdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy5cblxuTm93LCBJIHRoaW5rIHRoZSBiZXN0IHdheSB0byBnZXQgYSBmdWxsIGdyYXNwIG9mIHRoaXMgcGF0Y2ggaXMgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgZXNwZWNpYWxseSBhcm91bmQgbGluZSA0Nzg0LCB3aGljaCBpcyBhIGtleSBwb2ludCB3aGVyZSB0aGlzIG5ldyBsb2dpYyBpcyBpbmplY3RlZC4gSSB3aWxsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBnZXQgYSBmdWxsIHZpZXcgb2YgdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMjksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODoxOS43MTMxMDc4MzdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV9hbGxvYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3ODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ3ODA6XFx0XFx0d2Fybl9hbGxvY19zaG93X21lbShnZnBfbWFzaywgbm9kZW1hc2spO1xcbjQ3ODE6XFx0fVxcbjQ3ODI6XFx0XFxuNDc4MzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcXG40Nzg0OlxcdF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG40Nzg1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBhbGxvY19jb250ZXh0ICphYylcXG40Nzg2OlxcdHtcXG40Nzg3OlxcdFxcdGNvbnN0IGJvb2wgY29zdGx5X29yZGVyID0gb3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUjtcXG40Nzg4OlxcdFxcdGJvb2wgY2FuX2RpcmVjdF9yZWNsYWltO1xcbjQ3ODk6XFx0XFx0Ym9vbCBjYW5fY29tcGFjdDtcXG40NzkwOlxcdFxcdGJvb2wgbm9mYWlsO1xcbjQ3OTE6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xcbjQ3OTI6XFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzO1xcbjQ3OTM6XFx0XFx0dW5zaWduZWQgbG9uZyBkaWRfc29tZV9wcm9ncmVzcztcXG40Nzk0OlxcdFxcdGVudW0gY29tcGFjdF9wcmlvcml0eSBjb21wYWN0X3ByaW9yaXR5O1xcbjQ3OTU6XFx0XFx0ZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3Jlc3VsdDtcXG40Nzk2OlxcdFxcdGludCBjb21wYWN0aW9uX3JldHJpZXM7XFxuNDc5NzpcXHRcXHRpbnQgbm9fcHJvZ3Jlc3NfbG9vcHM7XFxuNDc5ODpcXHRcXHR1bnNpZ25lZCBpbnQgY3B1c2V0X21lbXNfY29va2llO1xcbjQ3OTk6XFx0XFx0dW5zaWduZWQgaW50IHpvbmVsaXN0X2l0ZXJfY29va2llO1xcbjQ4MDA6XFx0XFx0aW50IHJlc2VydmVfZmxhZ3M7XFxuNDgwMTpcXHRcXHRib29sIGNvbXBhY3RfZmlyc3QgPSBmYWxzZTtcXG40ODAyOlxcdFxcdGJvb2wgY2FuX3JldHJ5X3Jlc2VydmVzID0gdHJ1ZTtcXG40ODAzOlxcdFxcdHVuc2lnbmVkIGxvbmcgYWxsb2Nfc3RhcnRfdGltZSA9IGppZmZpZXM7XFxuNDgwNDpcXHRcXG40ODA1OlxcdFxcdC8qXFxuNDgwNjpcXHRcXHQgKiBDb3N0bHkgX19HRlBfTk9SRVRSWSBjYWxsZXJzIGhhdmUgYSBjaGVhcCBmYWxsYmFjaywgc28gZG9uJ3Qgc3RhbGxcXG40ODA3OlxcdFxcdCAqIHRoZW0gaW4gcmVjbGFpbSBvciBjb21wYWN0aW9uLiBfX0dGUF9USElTTk9ERSBjYWxsZXJzIGFyZSBleGVtcHQuXFxuNDgwODpcXHRcXHQgKi9cXG40ODA5OlxcdFxcdGlmIChjb3N0bHlfb3JkZXIgXFx1MDAyNlxcdTAwMjYgKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfTk9SRVRSWSkgXFx1MDAyNlxcdTAwMjZcXG40ODEwOlxcdFxcdCAgICAhKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfVEhJU05PREUpKVxcbjQ4MTE6XFx0XFx0XFx0Z2ZwX21hc2sgXFx1MDAyNj0gfl9fR0ZQX0RJUkVDVF9SRUNMQUlNO1xcbjQ4MTI6XFx0XFxuNDgxMzpcXHRcXHRjYW5fZGlyZWN0X3JlY2xhaW0gPSBnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX0RJUkVDVF9SRUNMQUlNO1xcbjQ4MTQ6XFx0XFx0Y2FuX2NvbXBhY3QgPSBjYW5fZGlyZWN0X3JlY2xhaW0gXFx1MDAyNlxcdTAwMjYgZ2ZwX2NvbXBhY3Rpb25fYWxsb3dlZChnZnBfbWFzayk7XFxuNDgxNTpcXHRcXHRub2ZhaWwgPSBnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX05PRkFJTDtcXG40ODE2OlxcdFxcbjQ4MTc6XFx0XFx0aWYgKHVubGlrZWx5KG5vZmFpbCkpIHtcXG40ODE4OlxcdFxcdFxcdC8qXFxuNDgxOTpcXHRcXHRcXHQgKiBBbHNvIHdlIGRvbid0IHN1cHBvcnQgX19HRlBfTk9GQUlMIHdpdGhvdXQgX19HRlBfRElSRUNUX1JFQ0xBSU0sXFxuNDgyMDpcXHRcXHRcXHQgKiBvdGhlcndpc2UsIHdlIG1heSByZXN1bHQgaW4gbG9ja3VwLlxcbjQ4MjE6XFx0XFx0XFx0ICovXFxuNDgyMjpcXHRcXHRcXHRXQVJOX09OX09OQ0UoIWNhbl9kaXJlY3RfcmVjbGFpbSk7XFxuNDgyMzpcXHRcXHRcXHQvKlxcbjQ4MjQ6XFx0XFx0XFx0ICogUEZfTUVNQUxMT0MgcmVxdWVzdCBmcm9tIHRoaXMgY29udGV4dCBpcyByYXRoZXIgYml6YXJyZVxcbjQ4MjU6XFx0XFx0XFx0ICogYmVjYXVzZSB3ZSBjYW5ub3QgcmVjbGFpbSBhbnl0aGluZyBhbmQgb25seSBjYW4gbG9vcCB3YWl0aW5nXFxuNDgyNjpcXHRcXHRcXHQgKiBmb3Igc29tZWJvZHkgdG8gZG8gYSB3b3JrIGZvciB1cy5cXG40ODI3OlxcdFxcdFxcdCAqL1xcbjQ4Mjg6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpO1xcbjQ4Mjk6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODoxOS43MTMzODAzOTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjE3NTYxNDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZSBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJXb3J0aEZ1enppbmc9dHJ1ZSxcIiBzaW5jZSB3ZSdyZSB0d2Vha2luZyBjb3JlIHBhZ2UgYWxsb2NhdG9yIGJlaGF2aW9yLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBpdCBoYW5kbGVzIGRpcmVjdCByZWNsYWltIGFuZCBjb21wYWN0aW9uLCBwYXJ0aWN1bGFybHkgZm9yIFRIUCBhbmQgaGlnaGVyLW9yZGVyIGFsbG9jYXRpb25zLiBUaGF0J3MgYSBkZWZpbml0ZSBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGZpZ3VyaW5nIG91dCBob3cgdG8gZ3VpZGUgdGhlIGZ1enplciBlZmZlY3RpdmVseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoZSBydWxlcyBmb3IgYEZvY3VzU3ltYm9sc2AuIExldCdzIHNlZS4uLiB0aGUgY29yZSBwcmluY2lwbGUgaXMgdG8gYXZvaWQgZGlsdXRpbmcgdGhlIGZ1enppbmcgZWZmb3J0LiBJIG5lZWQgdG8gYXZvaWQgbGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgZXZlcnl3aGVyZS4gVGhpcyBtZWFucyBubyBnZW5lcmljIGFsbG9jYXRvcnMsIGRlYWxsb2NhdG9ycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gSW5zdGVhZCwgdGhlIGZvY3VzIHNob3VsZCBiZSBvbiB0YXJnZXRpbmcgKnNwZWNpZmljIGZlYXR1cmUgbG9naWMqIG9yIEFQSSBlbnRyeSBwb2ludHMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgY2hhbmdlLiBBbHNvLCBhbmQgdGhpcyBpcyBpbXBvcnRhbnQsIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhvc2UgcGVza3kgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiBoZWFkZXJzLCBhbmQgbWFrZSBzdXJlIHRoYXQgSSBkb24ndCBwcm92aWRlIGEgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlci5cblxuU28sIHRoZSBxdWVzdGlvbiBpcywgaXMgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIHViaXF1aXRvdXM/IE9yIGlzIGl0IHN0YXRpYyBpbmxpbmUvc3RhdGljPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdG8gc2VlIHdoZXJlIGl0J3MgY2FsbGVkIGZyb20gd2l0aGluIGBtbS9wYWdlX2FsbG9jLmNgLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgd2hlcmUgaXQgaXMgZGVmaW5lZC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIGl0J3MgYSBzdWl0YWJsZSB0YXJnZXQgZm9yIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGZ1bmN0aW9ucyB0byBlbnN1cmUgSSdtIG5vdCBhY2NpZGVudGFsbHkgbGlzdGluZyBzb21ldGhpbmcgdGhhdCB0aGUgZnV6emVyIHdpbGwgY29uc2lkZXIgXCJmb2N1c2VkXCIgd2l0aG91dCBhY3R1YWxseSBwcm92aWRpbmcgYW55IHVzZWZ1bCBzaWduYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODoyMy4zMzA5NDQyNzlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NDMzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hbGxvY19wYWdlc19zbG93cGF0aFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2FsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9hbGxvYy5jPTQ3ODM9c3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqXFxubW0vcGFnZV9hbGxvYy5jOjQ3ODQ6X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbm1tL3BhZ2VfYWxsb2MuYy00Nzg1LVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBhbGxvY19jb250ZXh0ICphYylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz01Mzk1PXN0cnVjdCBwYWdlICpfX2FsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNTQ2MC1cXG5tbS9wYWdlX2FsbG9jLmM6NTQ2MTpcXHRwYWdlID0gX19hbGxvY19wYWdlc19zbG93cGF0aChhbGxvY19nZnAsIG9yZGVyLCBcXHUwMDI2YWMpO1xcbm1tL3BhZ2VfYWxsb2MuYy01NDYyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODoyMy4zNzY4ODk1OTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDk4ODcwODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTWVtb3J5IEFsbG9jYXRpb24gQm90dGxlbmVja3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBtZW1vcnkgYWxsb2NhdGlvbiBpc3N1ZS4gRmlyc3QsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3VscHJpdHMg4oCTIHRoZSBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSB0cmlnZ2VyaW5nIHRoaXMgc2xvd2Rvd24uIEkgc2hvdWxkIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgY2FsbHMgdG8gYF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZmAgYW5kIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCwgb3IgYW55dGhpbmcgdGhhdCBoZWF2aWx5IGxldmVyYWdlcyBgX19HRlBfTk9SRVRSWWAgYWxsb2NhdGlvbnMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5BbHRlcm5hdGl2ZWx5LCBJIGNvdWxkIGJyb2FkZW4gdGhlIHNlYXJjaCB0byBsb29rIGZvciAqYW55KiBwbGFjZSBpbiB0aGUga2VybmVsIG9yIHRoZSBtZW1vcnkgbWFuYWdlbWVudCAobW0pIGNvZGUgd2hlcmUgdGhvc2UgbW9yZSBzaWduaWZpY2FudCBvcmRlciBhbGxvY2F0aW9ucyBhcmUgdXNpbmcgYF9fR0ZQX05PUkVUUllgLiBUaG9zZSBjYW4gYmUgcmVhbCBwZXJmb3JtYW5jZSBraWxsZXJzLlxuXG5BY3R1YWxseSwgYmVmb3JlIEkgZ2V0IHRvbyBkZWVwLCBpdCBtaWdodCBiZSBtb3JlIGVmZmljaWVudCB0byBqdXN0IGdyZXAgZGlyZWN0bHkgZm9yIHRoZSBrZXkgZmxhZ3MgYW5kIG1hY3Jvcy4gSSdsbCBzZWFyY2ggZm9yIGBfX0dGUF9OT1JFVFJZYCwgYFBBR0VfQUxMT0NfQ09TVExZX09SREVSYCwgb3IgdGhvc2UgYEdGUF9UUkFOU0hVR0VgIC8gYEdGUF9UUkFOU0hVR0VfTElHSFRgIGZsYWdzIOKAkyB0aGF0IHNob3VsZCBpbW1lZGlhdGVseSBoaWdobGlnaHQgcmVsZXZhbnQgY29kZSBwYXRocy4gVGhhdCBzaG91bGQgY3V0IGRvd24gb24gdGhlIG5vaXNlIGZyb20gdGhpcyBzZWFyY2gsIGFuZCBnZXQgbWUgZGlyZWN0bHkgdG8gdGhlIGltcG9ydGFudCBwYXJ0cyBvZiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgwMiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODoyNy44NzU3NjI5NDdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI2NTgzMzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkdGUF9UUkFOU0hVR0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaD0yNj1lbnVtIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmgtMzYzLSAqXFxuaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaDozNjQ6ICogJUdGUF9UUkFOU0hVR0UgYW5kICVHRlBfVFJBTlNIVUdFX0xJR0hUIGFyZSB1c2VkIGZvciBUSFAgYWxsb2NhdGlvbnMuIFRoZXlcXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oLTM2NS0gKiBhcmUgY29tcG91bmQgYWxsb2NhdGlvbnMgdGhhdCB3aWxsIGdlbmVyYWxseSBmYWlsIHF1aWNrbHkgaWYgbWVtb3J5IGlzIG5vdFxcbi0tXFxuaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaC0zODAtI2RlZmluZSBHRlBfSElHSFVTRVJfTU9WQUJMRVxcdChHRlBfSElHSFVTRVIgfCBfX0dGUF9NT1ZBQkxFIHwgX19HRlBfU0tJUF9LQVNBTilcXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oOjM4MTojZGVmaW5lIEdGUF9UUkFOU0hVR0VfTElHSFRcXHQoKEdGUF9ISUdIVVNFUl9NT1ZBQkxFIHwgX19HRlBfQ09NUCB8IFxcXFxcXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oLTM4Mi1cXHRcXHRcXHQgX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PV0FSTikgXFx1MDAyNiB+X19HRlBfUkVDTEFJTSlcXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oOjM4MzojZGVmaW5lIEdGUF9UUkFOU0hVR0VcXHQoR0ZQX1RSQU5TSFVHRV9MSUdIVCB8IF9fR0ZQX0RJUkVDVF9SRUNMQUlNKVxcbmluY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmgtMzg0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODoyOC4yMDIzNTA5MTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjA4MDA4MjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgZm9yIEZvY3VzU3ltYm9scyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uc2lkZXIgaXRzIGluY2x1c2lvbiBpbiBgRm9jdXNTeW1ib2xzYCwgYnV0IEkgaGF2ZSBhIHNlcmlvdXMgcmVzZXJ2YXRpb24sIGFuZCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBoZXJlLlxuXG5UaGUgZ3VpZGVsaW5lIGlzIHNjcmVhbWluZyBhdCBtZTogYXZvaWQgdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzISBJIG5lZWQgdG8gYmUgKnZlcnkqIGNhdXRpb3VzIGFib3V0IGxpc3RpbmcgY29yZSBhbGxvY2F0b3JzIGxpa2UgdGhpcyBvbmUuIElmIGl0J3MgdXNlZCAqZXZlcnl3aGVyZSosIHRoZW4gaW5jbHVkaW5nIGl0IHdpbGwgbGVhZCB0byBhIGRlbHVnZSBvZiBub2lzZSBpbiBteSBmdXp6aW5nIHJlc3VsdHMsIG9ic2N1cmluZyBhbnkgYWN0dWFsIHRhcmdldGVkIGNoYW5nZXMuIFNvLCB0aGUgZmlyc3QgcXVlc3Rpb24gaXM6IGlzIHRoaXMgKnJlYWxseSogYSB1YmlxdWl0b3VzIGZ1bmN0aW9uPyBJIHN1c3BlY3QgaXQgbWlnaHQgYmUuXG5cbkhvd2V2ZXIsIEknbSBub3QgcmVhZHkgdG8gZ2l2ZSB1cCBqdXN0IHlldC4gV2hhdCBpZiB0aGVyZSBhcmUgKnNwZWNpZmljKiBjYWxsZXJzIHRoYXQgYXJlIGludGVyZXN0aW5nPyBNeSBuZXh0IHRyYWluIG9mIHRob3VnaHQgaXMgdG8gbG9vayBmb3IgdGhlICpsZXNzKiBjb21tb24gdXNlcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGZvciBwbGFjZXMgd2hlcmUgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIGlzIGNhbGxlZCB3aXRoIGNvc3RseSBtZW1vcnkgb3JkZXIgYWxsb2NhdGlvbnMsIG9yIHdpdGggYF9fR0ZQX05PUkVUUllgLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBcInNwZWNpYWwgY2FzZXNcIiB3aGVyZSB0aGUgZnVuY3Rpb24gbWlnaHQgYmUgaW52b2x2ZWQgaW4gaW50ZXJlc3RpbmcsIGxlc3MtY29tbW9uIGJlaGF2aW9yLiBTbywgbGV0J3MgdHJ5IHRvIGZvY3VzIG91ciBhdHRlbnRpb24gb24gZnVuY3Rpb25zIHdoZXJlIGxhcmdlIG1lbW9yeSBvcmRlcnMgYXJlIHJlcXVlc3RlZCBvciB3aGVyZSBhIG5vbi1yZXRyeWFibGUgYWxsb2NhdGlvbiBpcyBoYXBwZW5pbmcgd2l0aCB0aGlzIHNsb3dwYXRoIGZ1bmN0aW9uLlxuXG5UaGVyZWZvcmUsIGxldCdzIHNlYXJjaCBmb3IgY2FsbHMgdG8gYF9fR0ZQX05PUkVUUllgIHdpdGggYW4gb3JkZXIgbGFyZ2VyIHRoYW4gYFBBR0VfQUxMT0NfQ09TVExZX09SREVSYCBvciBqdXN0IHNlYXJjaCBmb3IgYFBBR0VfQUxMT0NfQ09TVExZX09SREVSYCBpbiBtbS8gZmlsZXMgdG8gc2VlIHdoaWNoIGNhbGxlcnMgbWlnaHQgYmUgb2YgaW50ZXJlc3QuIFRoaXMgd2lsbCBoZWxwIG1lIG5hcnJvdyBkb3duIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyBnZW5lcmFsbHkgdWJpcXVpdGlvdXMgb3IgaWYgd2UgY2FuIG1ha2UgYSBjYXNlIGZvciBpdCB3aXRoaW4gdGhlIEZvY3VzU3ltYm9scy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ5MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODozMS40MTAzNjM0MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MzAwNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEFHRV9BTExPQ19DT1NUTFlfT1JERVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2NvbXBhY3Rpb24uYz0yNzc9X19yZXNldF9pc29sYXRpb25fcGZuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHBmbiwgYm9vbCBjaGVja19zb3VyY2UsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzM4LVxcbm1tL2NvbXBhY3Rpb24uYzozMzk6XFx0XFx0cGFnZSArPSAoMSBcXHUwMDNjXFx1MDAzYyBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUik7XFxubW0vY29tcGFjdGlvbi5jLTM0MC1cXHR9IHdoaWxlIChwYWdlIFxcdTAwM2M9IGVuZF9wYWdlKTtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0xOTY5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGZhc3RfZmluZF9taWdyYXRlYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjAwMi1cXHQgKi9cXG5tbS9jb21wYWN0aW9uLmM6MjAwMzpcXHRpZiAoY2MtXFx1MDAzZW9yZGVyIFxcdTAwM2M9IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxcbm1tL2NvbXBhY3Rpb24uYy0yMDA0LVxcdFxcdHJldHVybiBwZm47XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjAyNi1cXHRmb3IgKG9yZGVyID0gY2MtXFx1MDAzZW9yZGVyIC0gMTtcXG5tbS9jb21wYWN0aW9uLmM6MjAyNzpcXHQgICAgIG9yZGVyIFxcdTAwM2U9IFBBR0VfQUxMT0NfQ09TVExZX09SREVSIFxcdTAwMjZcXHUwMDI2ICFmb3VuZF9ibG9jayBcXHUwMDI2XFx1MDAyNiBucl9zY2FubmVkIFxcdTAwM2MgbGltaXQ7XFxubW0vY29tcGFjdGlvbi5jLTIwMjgtXFx0ICAgICBvcmRlci0tKSB7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MjQwND1zdGF0aWMgYm9vbCBfX2NvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yNDI0LVxcdHdhdGVybWFyayArPSBjb21wYWN0X2dhcChvcmRlcik7XFxubW0vY29tcGFjdGlvbi5jOjI0MjU6XFx0aWYgKG9yZGVyIFxcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpXFxubW0vY29tcGFjdGlvbi5jLTI0MjYtXFx0XFx0d2F0ZXJtYXJrICs9IGxvd193bWFya19wYWdlcyh6b25lKSAtIG1pbl93bWFya19wYWdlcyh6b25lKTtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yNDM0PWJvb2wgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIHdhdGVybWFyayxcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yNDU5LVxcdFxcdGNvbXBhY3RfcmVzdWx0ID0gQ09NUEFDVF9DT05USU5VRTtcXG5tbS9jb21wYWN0aW9uLmM6MjQ2MDpcXHRcXHRpZiAob3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikge1xcbm1tL2NvbXBhY3Rpb24uYy0yNDYxLVxcdFxcdFxcdGludCBmcmFnaW5kZXggPSBmcmFnbWVudGF0aW9uX2luZGV4KHpvbmUsIG9yZGVyKTtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yNTIxPWNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjU0Ni1cXHQgKi9cXG5tbS9jb21wYWN0aW9uLmM6MjU0NzpcXHRpZiAob3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUiBcXHUwMDI2XFx1MDAyNiBhc3luYyBcXHUwMDI2XFx1MDAyNlxcbm1tL2NvbXBhY3Rpb24uYy0yNTQ4LVxcdCAgICAhKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfQ01BKSkge1xcbi0tXFxubW0va2FzYW4vaHdfdGFncy5jPTczPXVuc2lnbmVkIGxvbmcga2FzYW5fcGFnZV9hbGxvY19zYW1wbGUgPSBQQUdFX0FMTE9DX1NBTVBMRV9ERUZBVUxUO1xcbi0tXFxubW0va2FzYW4vaHdfdGFncy5jLTc3LSAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGNob3NlbiB0byBtYXRjaCBib3RoXFxubW0va2FzYW4vaHdfdGFncy5jOjc4OiAqIFBBR0VfQUxMT0NfQ09TVExZX09SREVSIGFuZCBTS0JfRlJBR19QQUdFX09SREVSLlxcbm1tL2thc2FuL2h3X3RhZ3MuYy03OS0gKi9cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xOTYzPXN0YXRpYyBib29sIG1lbV9jZ3JvdXBfb29tKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgbWFzaywgaW50IG9yZGVyKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE5NjYtXFxubW0vbWVtY29udHJvbC5jOjE5Njc6XFx0aWYgKG9yZGVyIFxcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpXFxubW0vbWVtY29udHJvbC5jLTE5NjgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI2NDU9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjc0MS1cXHQgKi9cXG5tbS9tZW1jb250cm9sLmM6Mjc0MjpcXHRpZiAobnJfcmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2IG5yX3BhZ2VzIFxcdTAwM2M9ICgxIFxcdTAwM2NcXHUwMDNjIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSlcXG5tbS9tZW1jb250cm9sLmMtMjc0My1cXHRcXHRnb3RvIHJldHJ5O1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTY1NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvcmRlcl90b19waW5kZXgoaW50IG1pZ3JhdGV0eXBlLCBpbnQgb3JkZXIpXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNjU5LVxcbm1tL3BhZ2VfYWxsb2MuYzo2NjA6XFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpXFxubW0vcGFnZV9hbGxvYy5jLTY2MS1cXHRcXHRcXHRyZXR1cm4gTlJfTE9XT1JERVJfUENQX0xJU1RTICsgbW92YWJsZTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz02Nzk9c3RhdGljIGlubGluZSBib29sIHBjcF9hbGxvd2VkX29yZGVyKHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS9wYWdlX2FsbG9jLmMtNjgwLXtcXG5tbS9wYWdlX2FsbG9jLmM6NjgxOlxcdGlmIChvcmRlciBcXHUwMDNjPSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUilcXG5tbS9wYWdlX2FsbG9jLmMtNjgyLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTI4NDQ9c3RhdGljIGJvb2wgZnJlZV9mcm96ZW5fcGFnZV9jb21taXQoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMjg3Mi1cXHQgKi9cXG5tbS9wYWdlX2FsbG9jLmM6Mjg3MzpcXHRpZiAob3JkZXIgXFx1MDAyNlxcdTAwMjYgb3JkZXIgXFx1MDAzYz0gUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpIHtcXG5tbS9wYWdlX2FsbG9jLmMtMjg3NC1cXHRcXHRmcmVlX2hpZ2ggPSAocGNwLVxcdTAwM2VmcmVlX2NvdW50IFxcdTAwM2U9IChiYXRjaCArIHBjcC1cXHUwMDNlaGlnaF9taW4gLyAyKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQwNDQ9X19hbGxvY19wYWdlc19tYXlfb29tKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDA4NC1cXHQvKiBUaGUgT09NIGtpbGxlciB3aWxsIG5vdCBoZWxwIGhpZ2hlciBvcmRlciBhbGxvY3MgKi9cXG5tbS9wYWdlX2FsbG9jLmM6NDA4NTpcXHRpZiAob3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUilcXG5tbS9wYWdlX2FsbG9jLmMtNDA4Ni1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00MjQ4PXNob3VsZF9jb21wYWN0X3JldHJ5KGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00Mjg5LVxcdFxcdCAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo0MjkwOlxcdFxcdGlmIChvcmRlciBcXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxcbm1tL3BhZ2VfYWxsb2MuYy00MjkxLVxcdFxcdFxcdG1heF9yZXRyaWVzIC89IDQ7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDMwMS1cXHQgKi9cXG5tbS9wYWdlX2FsbG9jLmM6NDMwMjpcXHRtaW5fcHJpb3JpdHkgPSAob3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikgP1xcbm1tL3BhZ2VfYWxsb2MuYy00MzAzLVxcdFxcdFxcdE1JTl9DT01QQUNUX0NPU1RMWV9QUklPUklUWSA6IE1JTl9DT01QQUNUX1BSSU9SSVRZO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQzMjU9c2hvdWxkX2NvbXBhY3RfcmV0cnkoZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQzMzMtXFxubW0vcGFnZV9hbGxvYy5jOjQzMzQ6XFx0aWYgKCFvcmRlciB8fCBvcmRlciBcXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSKVxcbm1tL3BhZ2VfYWxsb2MuYy00MzM1LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00NjQwPXNob3VsZF9yZWNsYWltX3JldHJ5KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00NjUyLVxcdCAqL1xcbm1tL3BhZ2VfYWxsb2MuYzo0NjUzOlxcdGlmIChkaWRfc29tZV9wcm9ncmVzcyBcXHUwMDI2XFx1MDAyNiBvcmRlciBcXHUwMDNjPSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUilcXG5tbS9wYWdlX2FsbG9jLmMtNDY1NC1cXHRcXHQqbm9fcHJvZ3Jlc3NfbG9vcHMgPSAwO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQ3ODQ9X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQ3ODYte1xcbm1tL3BhZ2VfYWxsb2MuYzo0Nzg3OlxcdGNvbnN0IGJvb2wgY29zdGx5X29yZGVyID0gb3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUjtcXG5tbS9wYWdlX2FsbG9jLmMtNDc4OC1cXHRib29sIGNhbl9kaXJlY3RfcmVjbGFpbTtcXG4tLVxcbm1tL3NsdWIuYz03NTU5PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2x1Yl9tYXhfb3JkZXIgPVxcbm1tL3NsdWIuYzo3NTYwOlxcdElTX0VOQUJMRUQoQ09ORklHX1NMVUJfVElOWSkgPyAxIDogUEFHRV9BTExPQ19DT1NUTFlfT1JERVI7XFxubW0vc2x1Yi5jLTc1NjEtc3RhdGljIHVuc2lnbmVkIGludCBzbHViX21pbl9vYmplY3RzO1xcbi0tXFxubW0vdm1wcmVzc3VyZS5jPTEwOT12b2lkIHZtcHJlc3N1cmUoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCB0cmVlLFxcbi0tXFxubW0vdm1wcmVzc3VyZS5jLTE4MS1cXHRcXHQgKi9cXG5tbS92bXByZXNzdXJlLmM6MTgyOlxcdFxcdGlmIChsZXZlbCBcXHUwMDNlIFZNUFJFU1NVUkVfTE9XIFxcdTAwMjZcXHUwMDI2IG9yZGVyIFxcdTAwM2M9IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSB7XFxubW0vdm1wcmVzc3VyZS5jLTE4My1cXHRcXHRcXHQvKlxcbi0tXFxubW0vdm1zY2FuLmM9NjA5MT1zdGF0aWMgYm9vbCBpbl9yZWNsYWltX2NvbXBhY3Rpb24oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDkzLVxcdGlmIChnZnBfY29tcGFjdGlvbl9hbGxvd2VkKHNjLVxcdTAwM2VnZnBfbWFzaykgXFx1MDAyNlxcdTAwMjYgc2MtXFx1MDAzZW9yZGVyIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmM6NjA5NDpcXHRcXHRcXHQoc2MtXFx1MDAzZW9yZGVyIFxcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIgfHxcXG5tbS92bXNjYW4uYy02MDk1LVxcdFxcdFxcdCBzYy1cXHUwMDNlcHJpb3JpdHkgXFx1MDAzYyBERUZfUFJJT1JJVFkgLSAyKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY0MjQ9c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjQ2NS1cXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ09NUEFDVElPTikgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYzo2NDY2OlxcdFxcdFxcdCAgICBzYy1cXHUwMDNlb3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUiBcXHUwMDI2XFx1MDAyNlxcbm1tL3Ztc2Nhbi5jLTY0NjctXFx0XFx0XFx0ICAgIGNvbXBhY3Rpb25fcmVhZHkoem9uZSwgc2MpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjM4OjMxLjQ1ODgwMDI3OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTM0NTAxOTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2g6IE1lbW9yeSBBbGxvY2F0aW9uIEJlaGF2aW9yKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBvcmlnaW5hbCBwdXJwb3NlIG9yIGludGVudGlvbiBiZWhpbmQgdGhpcyBzcGVjaWZpYyBjb21taXQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZ2l0IGxvZyBhbmQgaGlzdG9yeSB0byBnZXQgdGhlIGNvbnRleHQuXG5cbkhvbGQgb24sIGJlZm9yZSBJIGRpdmUgaW50byB0aGUgd2hvbGUgY29tbWl0IGhpc3RvcnksIEknbGwgc2VhcmNoIGZvciBzb21ldGhpbmcgc3BlY2lmaWMsIGxpa2UgdGhlIHBocmFzZSBcIkNvc3RseSBfX0dGUF9OT1JFVFJZIGNhbGxlcnMgaGF2ZSBhIGNoZWFwIGZhbGxiYWNrXCIgb3Igc2ltaWxhciB0ZXJtcyB3aXRoaW4gdGhlIGdpdCBsb2cgb3IgaW4gY29tbWVudHMuIFRoaXMgc2hvdWxkIHBvaW50IG1lIHJpZ2h0IHRvIHRoZSBpbnRlbnQuXG5cbkhtbSwgaXQgbG9va3MgbGlrZSBvbmx5IGBtbS9wYWdlX2FsbG9jLmNgIHdhcyBtb2RpZmllZCBpbiB0aGlzIGNvbW1pdCwgc28gdGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gTGV0IG1lIHJlLWV4YW1pbmUgdGhlIGNoYW5nZXMgd2l0aGluIHRoYXQgZmlsZSB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIGNoYW5nZWQuXG5cblNwZWNpZmljYWxseSwgaW4gYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgLCB0aGUgY29kZSBub3cgaW5jbHVkZXM6XG5cbmBgYGNcblx0Lypcblx0ICogQ29zdGx5IF9fR0ZQX05PUkVUUlkgY2FsbGVycyBoYXZlIGEgY2hlYXAgZmFsbGJhY2ssIHNvIGRvbid0IHN0YWxsXG5cdCAqIHRoZW0gaW4gcmVjbGFpbSBvciBjb21wYWN0aW9uLiBfX0dGUF9USElTTk9ERSBjYWxsZXJzIGFyZSBleGVtcHQuXG5cdCAqL1xuXHRpZiAoY29zdGx5X29yZGVyIFx1MDAyNlx1MDAyNiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX05PUkVUUlkpIFx1MDAyNlx1MDAyNlxuXHQgICAgIShnZnBfbWFzayBcdTAwMjYgX19HRlBfVEhJU05PREUpKVxuXHRcdGdmcF9tYXNrIFx1MDAyNj0gfl9fR0ZQX0RJUkVDVF9SRUNMQUlNO1xuYGBgXG5cbkl0IHNlZW1zIHRoZSBjb3JlIGxvZ2ljIGhlcmUgaXMgYWJvdXQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgY2FsbHMgdGhhdCBtaWdodCBiZSBcImNvc3RseVwiIChiYXNlZCBvbiBgb3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSYCksIGVzcGVjaWFsbHkgd2hlbiB0aG9zZSBjYWxscyBoYXZlIHRoZSBgX19HRlBfTk9SRVRSWWAgZmxhZyBzZXQuIElmIHRoZSBvcmRlciBpcyBcImNvc3RseVwiIGFuZCB0aGUgY2FsbGVyIGhhcyBgX19HRlBfTk9SRVRSWWAgYnV0IG5vdCBgX19HRlBfVEhJU05PREVgLCBpdCByZW1vdmVzIHRoZSBgX19HRlBfRElSRUNUX1JFQ0xBSU1gIGZsYWcuIEkgdGhpbmsgdGhpcyBtZWFucyB0aGF0IGZvciB0aGVzZSBjYWxsZXJzLCB3ZSB3b24ndCBzdGFsbCB0aGUgcHJvY2VzcyBpbiByZWNsYWltIG9yIGNvbXBhY3Rpb24uXG5cblRoaXMgc2VlbXMgaW1wb3J0YW50LCBidXQgSSBuZWVkIHRvIHJlYWQgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2YgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBsYXJnZXIgbWVtb3J5IGFsbG9jYXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUwOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODozNS4zOTMzMDUwMDZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgyNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3BhZ2VfYWxsb2MuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODMwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0ODMwOlxcdFxcbjQ4MzE6XFx0cmVzdGFydDpcXG40ODMyOlxcdFxcdGNvbXBhY3Rpb25fcmV0cmllcyA9IDA7XFxuNDgzMzpcXHRcXHRub19wcm9ncmVzc19sb29wcyA9IDA7XFxuNDgzNDpcXHRcXHRjb21wYWN0X3Jlc3VsdCA9IENPTVBBQ1RfU0tJUFBFRDtcXG40ODM1OlxcdFxcdGNvbXBhY3RfcHJpb3JpdHkgPSBERUZfQ09NUEFDVF9QUklPUklUWTtcXG40ODM2OlxcdFxcdGNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7XFxuNDgzNzpcXHRcXHR6b25lbGlzdF9pdGVyX2Nvb2tpZSA9IHpvbmVsaXN0X2l0ZXJfYmVnaW4oKTtcXG40ODM4OlxcdFxcbjQ4Mzk6XFx0XFx0LypcXG40ODQwOlxcdFxcdCAqIEZvciBjb3N0bHkgYWxsb2NhdGlvbnMsIHRyeSBkaXJlY3QgY29tcGFjdGlvbiBmaXJzdCwgYXMgaXQncyBsaWtlbHlcXG40ODQxOlxcdFxcdCAqIHRoYXQgd2UgaGF2ZSBlbm91Z2ggYmFzZSBwYWdlcyBhbmQgZG9uJ3QgbmVlZCB0byByZWNsYWltLiBGb3Igbm9uLVxcbjQ4NDI6XFx0XFx0ICogbW92YWJsZSBoaWdoLW9yZGVyIGFsbG9jYXRpb25zLCBkbyB0aGF0IGFzIHdlbGwsIGFzIGNvbXBhY3Rpb24gd2lsbFxcbjQ4NDM6XFx0XFx0ICogdHJ5IHByZXZlbnQgcGVybWFuZW50IGZyYWdtZW50YXRpb24gYnkgbWlncmF0aW5nIGZyb20gYmxvY2tzIG9mIHRoZVxcbjQ4NDQ6XFx0XFx0ICogc2FtZSBtaWdyYXRldHlwZS5cXG40ODQ1OlxcdFxcdCAqL1xcbjQ4NDY6XFx0XFx0aWYgKGNhbl9jb21wYWN0IFxcdTAwMjZcXHUwMDI2IChjb3N0bHlfb3JkZXIgfHwgKG9yZGVyIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbjQ4NDc6XFx0XFx0XFx0XFx0XFx0XFx0YWMtXFx1MDAzZW1pZ3JhdGV0eXBlICE9IE1JR1JBVEVfTU9WQUJMRSkpKSB7XFxuNDg0ODpcXHRcXHRcXHRjb21wYWN0X2ZpcnN0ID0gdHJ1ZTtcXG40ODQ5OlxcdFxcdFxcdGNvbXBhY3RfcHJpb3JpdHkgPSBJTklUX0NPTVBBQ1RfUFJJT1JJVFk7XFxuNDg1MDpcXHRcXHR9XFxuNDg1MTpcXHRcXG40ODUyOlxcdFxcdC8qXFxuNDg1MzpcXHRcXHQgKiBUaGUgZmFzdCBwYXRoIHVzZXMgY29uc2VydmF0aXZlIGFsbG9jX2ZsYWdzIHRvIHN1Y2NlZWQgb25seSB1bnRpbFxcbjQ4NTQ6XFx0XFx0ICoga3N3YXBkIG5lZWRzIHRvIGJlIHdva2VuIHVwLCBhbmQgdG8gYXZvaWQgdGhlIGNvc3Qgb2Ygc2V0dGluZyB1cFxcbjQ4NTU6XFx0XFx0ICogYWxsb2NfZmxhZ3MgcHJlY2lzZWx5LiBTbyB3ZSBkbyB0aGF0IG5vdy5cXG40ODU2OlxcdFxcdCAqXFxuNDg1NzpcXHRcXHQgKiBDYW4ndCBqdXN0IG9yIGFsbG9jX2ZsYWdzIGlmIGl0IGNvbnRhaW5zIFdNQVJLIGJpdHMsIGJ1dCB0aG9zZSBmbGFnc1xcbjQ4NTg6XFx0XFx0ICogc2hvdWxkbid0IGJlIHNldCBpbiBhYy1cXHUwMDNlYWxsb2NfZmxhZ3MuXFxuNDg1OTpcXHRcXHQgKi9cXG40ODYwOlxcdFxcdFZNX1dBUk5fT04oYWMtXFx1MDAzZWFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfV01BUktfTUFTSyk7XFxuNDg2MTpcXHRcXHRhbGxvY19mbGFncyA9IGFjLVxcdTAwM2VhbGxvY19mbGFncyB8IGFsbG9jX2ZsYWdzX3Nsb3dwYXRoKGdmcF9tYXNrLCBvcmRlcik7XFxuNDg2MjpcXHRcXG40ODYzOlxcdFxcdC8qXFxuNDg2NDpcXHRcXHQgKiBXZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIHpvbmVsaXN0IGl0ZXJhdG9yXFxuNDg2NTpcXHRcXHQgKiBiZWNhdXNlIHdlIG1pZ2h0IGhhdmUgdXNlZCBkaWZmZXJlbnQgbm9kZW1hc2sgaW4gdGhlIGZhc3QgcGF0aCwgb3JcXG40ODY2OlxcdFxcdCAqIHRoZXJlIHdhcyBhIGNwdXNldCBtb2RpZmljYXRpb24gYW5kIHdlIGFyZSByZXRyeWluZyAtIG90aGVyd2lzZSB3ZVxcbjQ4Njc6XFx0XFx0ICogY291bGQgZW5kIHVwIGl0ZXJhdGluZyBvdmVyIG5vbi1lbGlnaWJsZSB6b25lcyBlbmRsZXNzbHkuXFxuNDg2ODpcXHRcXHQgKi9cXG40ODY5OlxcdFxcdGFjLVxcdTAwM2VwcmVmZXJyZWRfem9uZXJlZiA9IGZpcnN0X3pvbmVzX3pvbmVsaXN0KGFjLVxcdTAwM2V6b25lbGlzdCxcXG40ODcwOlxcdFxcdFxcdFxcdFxcdFxcdGFjLVxcdTAwM2VoaWdoZXN0X3pvbmVpZHgsIGFjLVxcdTAwM2Vub2RlbWFzayk7XFxuNDg3MTpcXHRcXHRpZiAoIXpvbmVsaXN0X3pvbmUoYWMtXFx1MDAzZXByZWZlcnJlZF96b25lcmVmKSlcXG40ODcyOlxcdFxcdFxcdGdvdG8gbm9wYWdlO1xcbjQ4NzM6XFx0XFxuNDg3NDpcXHRcXHQvKlxcbjQ4NzU6XFx0XFx0ICogQ2hlY2sgZm9yIGluc2FuZSBjb25maWd1cmF0aW9ucyB3aGVyZSB0aGUgY3B1c2V0IGRvZXNuJ3QgY29udGFpblxcbjQ4NzY6XFx0XFx0ICogYW55IHN1aXRhYmxlIHpvbmUgdG8gc2F0aXNmeSB0aGUgcmVxdWVzdCAtIGUuZy4gbm9uLW1vdmFibGVcXG40ODc3OlxcdFxcdCAqIEdGUF9ISUdIVVNFUiBhbGxvY2F0aW9ucyBmcm9tIE1PVkFCTEUgbm9kZXMgb25seS5cXG40ODc4OlxcdFxcdCAqL1xcbjQ4Nzk6XFx0XFx0aWYgKGNwdXNldHNfaW5zYW5lX2NvbmZpZygpIFxcdTAwMjZcXHUwMDI2IChnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX0hBUkRXQUxMKSkge1xcbjQ4ODA6XFx0XFx0XFx0c3RydWN0IHpvbmVyZWYgKnogPSBmaXJzdF96b25lc196b25lbGlzdChhYy1cXHUwMDNlem9uZWxpc3QsXFxuNDg4MTpcXHRcXHRcXHRcXHRcXHRcXHRhYy1cXHUwMDNlaGlnaGVzdF96b25laWR4LFxcbjQ4ODI6XFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCk7XFxuNDg4MzpcXHRcXHRcXHRpZiAoIXpvbmVsaXN0X3pvbmUoeikpXFxuNDg4NDpcXHRcXHRcXHRcXHRnb3RvIG5vcGFnZTtcXG40ODg1OlxcdFxcdH1cXG40ODg2OlxcdFxcbjQ4ODc6XFx0cmV0cnk6XFxuNDg4ODpcXHRcXHQvKiBFbnN1cmUga3N3YXBkIGRvZXNuJ3QgYWNjaWRlbnRhbGx5IGdvIHRvIHNsZWVwIGFzIGxvbmcgYXMgd2UgbG9vcCAqL1xcbjQ4ODk6XFx0XFx0aWYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfS1NXQVBEKVxcbjQ4OTA6XFx0XFx0XFx0d2FrZV9hbGxfa3N3YXBkcyhvcmRlciwgZ2ZwX21hc2ssIGFjKTtcXG40ODkxOlxcdFxcbjQ4OTI6XFx0XFx0LypcXG40ODkzOlxcdFxcdCAqIFRoZSBhZGp1c3RlZCBhbGxvY19mbGFncyBtaWdodCByZXN1bHQgaW4gaW1tZWRpYXRlIHN1Y2Nlc3MsIHNvIHRyeVxcbjQ4OTQ6XFx0XFx0ICogdGhhdCBmaXJzdFxcbjQ4OTU6XFx0XFx0ICovXFxuNDg5NjpcXHRcXHRwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfbWFzaywgb3JkZXIsIGFsbG9jX2ZsYWdzLCBhYyk7XFxuNDg5NzpcXHRcXHRpZiAocGFnZSlcXG40ODk4OlxcdFxcdFxcdGdvdG8gZ290X3BnO1xcbjQ4OTk6XFx0XFxuNDkwMDpcXHRcXHRyZXNlcnZlX2ZsYWdzID0gX19nZnBfcGZtZW1hbGxvY19mbGFncyhnZnBfbWFzayk7XFxuNDkwMTpcXHRcXHRpZiAocmVzZXJ2ZV9mbGFncylcXG40OTAyOlxcdFxcdFxcdGFsbG9jX2ZsYWdzID0gYWxsb2NfZmxhZ3NfY21hKGdmcF9tYXNrKSB8IHJlc2VydmVfZmxhZ3MgfFxcbjQ5MDM6XFx0XFx0XFx0XFx0XFx0YWMtXFx1MDAzZWFsbG9jX2ZsYWdzIHwgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfS1NXQVBEKTtcXG40OTA0OlxcdFxcbjQ5MDU6XFx0XFx0LypcXG40OTA2OlxcdFxcdCAqIFJlc2V0IHRoZSBub2RlbWFzayBhbmQgem9uZWxpc3QgaXRlcmF0b3JzIGlmIG1lbW9yeSBwb2xpY2llcyBjYW4gYmVcXG40OTA3OlxcdFxcdCAqIGlnbm9yZWQuIFRoZXNlIGFsbG9jYXRpb25zIGFyZSBoaWdoIHByaW9yaXR5IGFuZCBzeXN0ZW0gcmF0aGVyIHRoYW5cXG40OTA4OlxcdFxcdCAqIHVzZXIgb3JpZW50ZWQuXFxuNDkwOTpcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzg6MzUuMzkzNTg5MzA2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyMTA1NDgxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZvY3VzU3ltYm9scyBmb3IgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgaG93IHRvIGNvbmZpZ3VyZSBgRm9jdXNTeW1ib2xzYCBmb3IgZnV6emluZywgc3BlY2lmaWNhbGx5IHdoZW4gY2hhbmdlcyBpbnZvbHZlIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljLiBUaGUgdGV4dCBwb2ludHMgdG8gYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgLCB0aGUgc2xvdyBwYXRoIGZvciB0aGUgY29yZSBwYWdlIGFsbG9jYXRvci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZnVuY3Rpb24gaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgaW5jbHVzaW9uIGluIGBGb2N1c1N5bWJvbHNgLlxuXG5JIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgZGlsdXRlIHRoZSBmdXp6aW5nIGVmZm9ydC4gVGhlIHJ1bGVzIGFyZSBjbGVhcjogYXZvaWQgdWJpcXVpdG91cyBmdW5jdGlvbnMuIFRoaXMgaW5jbHVkZXMgZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBsaWtlIHRoaXMgb25lLiBTbywgaXMgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIHViaXF1aXRvdXM/IExldCBtZSBxdWlja2x5IHZlcmlmeTogSXQncyBkZWZpbmVkIGluIGBtbS9wYWdlX2FsbG9jLmNgIGFuZCBpcyBtYXJrZWQgYHN0YXRpYyBpbmxpbmVgLCBjYWxsZWQgZnJvbSBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYC5cblxuQWhhLCB0aGUga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGZhbGwgdW5kZXIgdGhlIFwidWJpcXVpdG91c1wiIGNhdGVnb3J5LiBUaGUgdGV4dCBleHBsaWNpdGx5IHdhcm5zIGFnYWluc3QgaW5jbHVkaW5nIFwiZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyxcIiBzbyBhZGRpbmcgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgLCBgX19hbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mYCwgb3IgYF9fYWxsb2NfcGFnZXNfbm9wcm9mYCBpdHNlbGYgc2VlbXMgbGlrZSBhIGJhZCBpZGVhLiBJdCdzIGEgbWVtb3J5IGFsbG9jYXRvciBzbG93IHBhdGgsIGFuZCB0aHVzIGxpa2VseSB1YmlxdWl0b3VzLiBUaGF0IHdvdWxkIG1ha2UgYEZvY3VzU3ltYm9sc2AgaW5lZmZlY3RpdmUuXG5cbk5vdywgaWYgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgICppcyogdGhlIG9ubHkgdGhpbmcgdGhhdCdzIGNoYW5nZWQsIGNhbiBgRm9jdXNTeW1ib2xzYCBiZSBlbXB0eT8gT3Igc2hvdWxkIEkgbG9vayBmb3Igb3RoZXIgZnVuY3Rpb25zPyBTaG91bGQgaXQgY29udGFpbiBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgZXhlcmNpc2UgY29zdGx5IGBfX0dGUF9OT1JFVFJZYCBhbGxvY2F0aW9ucywgbGlrZSB0aG9zZSB1c2VkIGJ5IFRIUCBhbGxvY2F0aW9uLCBjb21wYWN0aW9uLCBvciBvdGhlciBwb3RlbnRpYWxseSBleHBlbnNpdmUgcGFnZSBhbGxvY2F0aW9ucz8gSXQncyBhIGJpdCBvZiBhIGdyYXkgYXJlYSwgcmVhbGx5LlxuXG5JIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbnN0aXR1dGVzIFwic3BlY2lmaWMgZmVhdHVyZSBsb2dpYy5cIiBJZiBjaGFuZ2VzIGFyZSAqcHJpbWFyaWx5KiBpbiB0aGlzIGNvbW1vbiBtZW1vcnkgYWxsb2NhdG9yLCBzaG91bGQgSSBmb2N1cyBvbiBzcGVjaWZpYyBjYWxsZXJzIHRoYXQgZXhlcmNpc2UgdGhvc2UgYWxsb2NhdGlvbnM/IExldCdzIGNoZWNrOiBXaGVyZSBhcmUgY29zdGx5IG9yZGVycyBjb21iaW5lZCB3aXRoIGBfX0dGUF9OT1JFVFJZYD8gTGV0IG1lIHNlYXJjaCB3aXRoaW4gYG1tL2AgZm9yIGBHRlBfVFJBTlNIVUdFYCBvciBgX19HRlBfTk9SRVRSWWAgdG8gZmluZCBzcGVjaWZpYyBmZWF0dXJlcyB0aGF0IG1pZ2h0IGJlIGltcGFjdGVkIGJ5IHRoZSBjaGFuZ2VzIHRvIHRoZSBhbGxvY2F0b3IuIFRoYXQgbWlnaHQgcHJvdmlkZSBzb21lIHVzZWZ1bCB0YXJnZXRzIGZvciBgRm9jdXNTeW1ib2xzYCwgZXZlbiBpZiBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgaXRzZWxmIGlzbid0IGEgZ29vZCBmaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODg3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzg6NDAuNjA0MTM5NTYzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY2ODUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJHRlBfVFJBTlNIVUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTI3Mz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19odWdlX3plcm9fZm9saW8odm9pZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjc2LVxcbm1tL2h1Z2VfbWVtb3J5LmM6Mjc3OlxcdHplcm9fZm9saW8gPSBmb2xpb19hbGxvYygoR0ZQX1RSQU5TSFVHRSB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9aRVJPVEFHUykgXFx1MDAyNlxcbm1tL2h1Z2VfbWVtb3J5LmMtMjc4LVxcdFxcdFxcdFxcdCB+X19HRlBfTU9WQUJMRSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTUyMz1nZnBfdCB2bWFfdGhwX2dmcF9tYXNrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xNTI4LVxcdGlmICh0ZXN0X2JpdChUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfRElSRUNUX0ZMQUcsIFxcdTAwMjZ0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncykpXFxubW0vaHVnZV9tZW1vcnkuYzoxNTI5OlxcdFxcdHJldHVybiBHRlBfVFJBTlNIVUdFIHwgKHZtYV9tYWR2aXNlZCA/IDAgOiBfX0dGUF9OT1JFVFJZKTtcXG5tbS9odWdlX21lbW9yeS5jLTE1MzAtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1MzItXFx0aWYgKHRlc3RfYml0KFRSQU5TUEFSRU5UX0hVR0VQQUdFX0RFRlJBR19LU1dBUERfRkxBRywgXFx1MDAyNnRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzKSlcXG5tbS9odWdlX21lbW9yeS5jOjE1MzM6XFx0XFx0cmV0dXJuIEdGUF9UUkFOU0hVR0VfTElHSFQgfCBfX0dGUF9LU1dBUERfUkVDTEFJTTtcXG5tbS9odWdlX21lbW9yeS5jLTE1MzQtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1MzYtXFx0aWYgKHRlc3RfYml0KFRSQU5TUEFSRU5UX0hVR0VQQUdFX0RFRlJBR19LU1dBUERfT1JfTUFEVl9GTEFHLCBcXHUwMDI2dHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MpKVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTUzNzpcXHRcXHRyZXR1cm4gR0ZQX1RSQU5TSFVHRV9MSUdIVCB8XFxubW0vaHVnZV9tZW1vcnkuYy0xNTM4LVxcdFxcdFxcdCh2bWFfbWFkdmlzZWQgPyBfX0dGUF9ESVJFQ1RfUkVDTEFJTSA6XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1NDItXFx0aWYgKHRlc3RfYml0KFRSQU5TUEFSRU5UX0hVR0VQQUdFX0RFRlJBR19SRVFfTUFEVl9GTEFHLCBcXHUwMDI2dHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MpKVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTU0MzpcXHRcXHRyZXR1cm4gR0ZQX1RSQU5TSFVHRV9MSUdIVCB8XFxubW0vaHVnZV9tZW1vcnkuYy0xNTQ0LVxcdFxcdCAgICAgICAodm1hX21hZHZpc2VkID8gX19HRlBfRElSRUNUX1JFQ0xBSU0gOiAwKTtcXG5tbS9odWdlX21lbW9yeS5jLTE1NDUtXFxubW0vaHVnZV9tZW1vcnkuYzoxNTQ2OlxcdHJldHVybiBHRlBfVFJBTlNIVUdFX0xJR0hUO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTU0Ny19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTAyNz1zdGF0aWMgaW5saW5lIGdmcF90IGFsbG9jX2h1Z2VwYWdlX2todWdlcGFnZWRfZ2ZwbWFzayh2b2lkKVxcbm1tL2todWdlcGFnZWQuYy0xMDI4LXtcXG5tbS9raHVnZXBhZ2VkLmM6MTAyOTpcXHRyZXR1cm4ga2h1Z2VwYWdlZF9kZWZyYWcoKSA/IEdGUF9UUkFOU0hVR0UgOiBHRlBfVFJBTlNIVUdFX0xJR0hUO1xcbm1tL2todWdlcGFnZWQuYy0xMDMwLX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xMjUwPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGFsbG9jX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEyNTMtXFx0Z2ZwX3QgZ2ZwID0gKGNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkID8gYWxsb2NfaHVnZXBhZ2Vfa2h1Z2VwYWdlZF9nZnBtYXNrKCkgOlxcbm1tL2todWdlcGFnZWQuYzoxMjU0OlxcdFxcdCAgICAgR0ZQX1RSQU5TSFVHRSk7XFxubW0va2h1Z2VwYWdlZC5jLTEyNTUtXFx0aW50IG5vZGUgPSBjb2xsYXBzZV9maW5kX3RhcmdldF9ub2RlKGNjKTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTE0Mzc9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldF9ieV9tcG9sKHN0cnVjdCBmb2xpbyAqc3JjLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTQ2MS1cXHRpZiAoZm9saW9fdGVzdF9sYXJnZShzcmMpKVxcbm1tL21lbXBvbGljeS5jOjE0NjI6XFx0XFx0Z2ZwID0gR0ZQX1RSQU5TSFVHRTtcXG5tbS9tZW1wb2xpY3kuYy0xNDYzLVxcdGVsc2VcXG4tLVxcbm1tL21pZ3JhdGUuYz0yMTk3PXN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBwcml2YXRlKVxcbi0tXFxubW0vbWlncmF0ZS5jLTIyMjUtXFx0XFx0Z2ZwX21hc2sgXFx1MDAyNj0gfl9fR0ZQX1JFQ0xBSU07XFxubW0vbWlncmF0ZS5jOjIyMjY6XFx0XFx0Z2ZwX21hc2sgfD0gR0ZQX1RSQU5TSFVHRTtcXG5tbS9taWdyYXRlLmMtMjIyNy1cXHRcXHRvcmRlciA9IGZvbGlvX29yZGVyKHNyYyk7XFxuLS1cXG5tbS9taWdyYXRlLmM9MjY2OT1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19taXNwbGFjZWRfZHN0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqc3JjLFxcbi0tXFxubW0vbWlncmF0ZS5jLTI2NzYtXFx0aWYgKG9yZGVyIFxcdTAwM2UgMClcXG5tbS9taWdyYXRlLmM6MjY3NzpcXHRcXHRnZnAgfD0gR0ZQX1RSQU5TSFVHRV9MSUdIVDtcXG5tbS9taWdyYXRlLmMtMjY3OC1cXHRlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzg6NDAuNjU0ODEzNDUyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwOTYyMDMwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRIUCBBbGxvY2F0aW9uIGFuZCBSZWNsYW1hdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykgYWxsb2NhdGlvbiBzY2VuYXJpby4gSSdtIGZvY3VzaW5nIG9uIGBtbS9odWdlX21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgdm1hX3RocF9nZnBfbWFza2AgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgaW1tZWRpYXRlbHkgY2xlYXIgdGhhdCB3aGVuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfRElSRUNUX0ZMQUdgIGlzIHNldCBpbiBgdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3NgIGFuZCB0aGUgVk1BIGlzbid0IG1hZHZpc2VkLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgR0ZQX1RSQU5TSFVHRSB8IF9fR0ZQX05PUkVUUllgLiBBbmQsIGRpZ2dpbmcgZnVydGhlciwgYEdGUF9UUkFOU0hVR0VgIGV4cGFuZHMgdG8gYEdGUF9UUkFOU0hVR0VfTElHSFQgfCBfX0dGUF9ESVJFQ1RfUkVDTEFJTWAuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgZXNwZWNpYWxseSBmb3IgdGhvc2UgY29zdGx5IG9yZGVycyBsaWtlIGBIUEFHRV9QTURfT1JERVJgLCB3aGljaCBpcyA5LiBXZSBhcmUgZ2V0dGluZyBhIG1hc2sgd2l0aCBib3RoIGBfX0dGUF9ESVJFQ1RfUkVDTEFJTWAgYW5kIGBfX0dGUF9OT1JFVFJZYC5cblxuTm93LCBpZiB3ZSB0cmFjayB0aGF0IHRvIHRoZSBUSFAgYWxsb2NhdGlvbiBwYXRoLCBwYXJ0aWN1bGFybHkgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgLCB0aGUgYmVoYXZpb3IgaXMgYWx0ZXJlZCBieSB0aGUgcGF0Y2guIFByZXZpb3VzbHksIGJvdGggYGNhbl9kaXJlY3RfcmVjbGFpbWAgYW5kIGBjYW5fY29tcGFjdGAgd2VyZSBzZXQgdG8gdHJ1ZS4gV2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgY29uZGl0aW9uYWwgYmxvY2ssIHRoYXQgY2hhbmdlcy4gU2luY2UgYGNvc3RseV9vcmRlcmAgaXMgdHJ1ZSwgYW5kIHRoZSBHRlAgbWFzayBjb250YWlucyBib3RoIGBfX0dGUF9OT1JFVFJZYCBhbmQgZG9lc24ndCBoYXZlIGBfX0dGUF9USElTTk9ERWAsIHRoZSBwYXRjaCBjbGVhcnMgYF9fR0ZQX0RJUkVDVF9SRUNMQUlNYCBmcm9tIHRoZSBnZnAgbWFzay4gVGhpcyByZXN1bHRzIGluIGBjYW5fZGlyZWN0X3JlY2xhaW1gIGJlY29taW5nIGZhbHNlLCBhbmQgY29uc2VxdWVudGx5LCBgY2FuX2NvbXBhY3RgIGJlY29taW5nIGZhbHNlIGFzIHdlbGwuIEVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIGlzIGRpc2FibGluZyBkaXJlY3QgcmVjbGFpbSBhbmQgY29tcGFjdGlvbiBmb3IgdGhlc2Ugc3BlY2lmaWMgVEhQIGFsbG9jYXRpb25zLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoaWNoIHBhdGhzIGFyZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIHNpdGVzIG9mIGB2bWFfdGhwX2dmcF9tYXNrYCwgd2hpY2ggc2hvdWxkIHBvaW50IG1lIHRvIFRIUCBmYXVsdCBhbGxvY2F0aW9ucyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuIEEgc2ltcGxlIGdyZXAgZm9yIGB2bWFfdGhwX2dmcF9tYXNrYCBzaG91bGQgZG8gdGhlIHRyaWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQxMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODo0NC43NTEwMTg5MTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzcyNjkzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bWFfdGhwX2dmcF9tYXNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTEzNDk9c3RhdGljIHN0cnVjdCBmb2xpbyAqdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMzUxLXtcXG5tbS9odWdlX21lbW9yeS5jOjEzNTI6XFx0Z2ZwX3QgZ2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTM1My1cXHRjb25zdCBpbnQgb3JkZXIgPSBIUEFHRV9QTURfT1JERVI7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE0NzY9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9kZXZpY2VfcHJpdmF0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTUyMi0gKi9cXG5tbS9odWdlX21lbW9yeS5jOjE1MjM6Z2ZwX3Qgdm1hX3RocF9nZnBfbWFzayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9odWdlX21lbW9yeS5jLTE1MjQte1xcbi0tXFxubW0vbWVtb3J5LmM9NTMwND1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19hbm9uX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTM1Ni1cXHQvKiBUcnkgYWxsb2NhdGluZyB0aGUgaGlnaGVzdCBvZiB0aGUgcmVtYWluaW5nIG9yZGVycy4gKi9cXG5tbS9tZW1vcnkuYzo1MzU3OlxcdGdmcCA9IHZtYV90aHBfZ2ZwX21hc2sodm1hKTtcXG5tbS9tZW1vcnkuYy01MzU4LVxcdHdoaWxlIChvcmRlcnMpIHtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9Nzk4PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy04MDQtXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtaWdyYXRlLVxcdTAwM2V2bWE7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzo4MDU6XFx0Z2ZwX3QgZ2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtODA2LVxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbi0tXFxubW0vc2htZW0uYz0yMDg5PXN0YXRpYyBpbnQgc2htZW1fcmVwbGFjZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGdmcF90IGdmcCxcXG4tLVxcbm1tL3NobWVtLmMtMjEwNS1cXHRpZiAobnJfcGFnZXMgXFx1MDAzZSAxKSB7XFxubW0vc2htZW0uYzoyMTA2OlxcdFxcdGdmcF90IGh1Z2VfZ2ZwID0gdm1hX3RocF9nZnBfbWFzayh2bWEpO1xcbm1tL3NobWVtLmMtMjEwNy1cXG4tLVxcbm1tL3NobWVtLmM9MjQyOD1zdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtMjUxMy1cXG5tbS9zaG1lbS5jOjI1MTQ6XFx0XFx0aHVnZV9nZnAgPSB2bWFfdGhwX2dmcF9tYXNrKHZtYSk7XFxubW0vc2htZW0uYy0yNTE1LVxcdFxcdGh1Z2VfZ2ZwID0gdGhwX3NobWVtX2xpbWl0X2dmcF9tYXNrKGh1Z2VfZ2ZwLCBnZnApO1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTQwOT1zdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy00MzYtXFx0aWYgKG9yZGVyKVxcbm1tL3N3YXBfc3RhdGUuYzo0Mzc6XFx0XFx0Z2ZwID0gdGhwX3NobWVtX2xpbWl0X2dmcF9tYXNrKHZtYV90aHBfZ2ZwX21hc2sodm1hKSwgZ2ZwKTtcXG5tbS9zd2FwX3N0YXRlLmMtNDM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODo0NC45NTg3NDg5NDNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk5OTMxMjY3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1cyBTeW1ib2wgRGV0ZXJtaW5hdGlvbjogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBmaWd1cmUgb3V0IHRoZSByaWdodCBgRm9jdXNTeW1ib2xzYCBmb3IgdGhpcyB0YXNrLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gaW50cm9kdWNlIG5vaXNlLiBNeSBpbml0aWFsIHRob3VnaHRzIHdlcmUgdG8gY2hlY2sgZnVuY3Rpb25zIGxpa2UgYGFsbG9jX2Fub25fZm9saW9gLCBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYCwgYHZtYV90aHBfZ2ZwX21hc2tgLCBhbmQgYHNobWVtX2dldF9mb2xpb19nZnBgLiBCdXQgdGhlbiBJIGhpdCBhIHNuYWcuIFdhaXQsIGlzIGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYCBva2F5IHRvIGxpc3QsIG9yIGBfX2FsbG9jX3BhZ2VzX25vcHJvZmA/XG5cbkkgaW1tZWRpYXRlbHkgcmVtZW1iZXJlZCB0aGUgYWR2aWNlOiBcIkFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUy5cIiBUaGUgZG9jdW1lbnQgaXMgcmVhbGx5IGNsZWFyIG9uIHRoaXMg4oCTIGF2b2lkIGdlbmVyaWMgZnVuY3Rpb25zIHRoYXQgYWxtb3N0IGV2ZXJ5dGhpbmcgY2FsbHMuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGJlICp2ZXJ5KiBzZWxlY3RpdmUuXG5cbkkgdGhvdWdodCBhYm91dCBgdm1hX3RocF9nZnBfbWFza2AuIFRoYXQncyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHdoaWNoIGlzbid0IGV2ZXJ5d2hlcmUsIGFuZCBpdCBkaXJlY3RseSBzZXRzIHRoZSBUSFAgZ2ZwIG1hc2sgd2l0aCBgX19HRlBfTk9SRVRSWWAuIEJ1dCB0aGVuIGFnYWluLCBpcyBpdCB0cnVseSBzcGVjaWZpYyBlbm91Z2g/IFRoZW4sIGlzIGBhbGxvY19hbm9uX2ZvbGlvYCBvdXQgc2luY2UgaXQgaXMgaW4gdGhlIHBhZ2UgZmF1bHQgaGFuZGxlcj8gSXQncyBhbGwgY29ubmVjdGVkLlxuXG5XaGF0IGFib3V0IGZ1bmN0aW9ucyBsaWtlIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgIG9yIHRoZSBgdm1hX3RocF9nZnBfbWFza2A/IEkgd2VudCBiYWNrIHRvIHRoZSBzb3VyY2U6IHdoYXQgYWJvdXQgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgPyBJdCdzIGluIGBtbS9wYWdlX2FsbG9jLmNgLCBzbyBJIHNob3VsZCBiZSBnb29kLCByaWdodD8gV2FpdCwgd2h5IGRpZCB0aGUgYXV0aG9yIGNoYW5nZSBgX19hbGxvY19wYWdlc19zbG93cGF0aGA/IFRoYXQgaXMsIGluIGl0c2VsZiwgYSByZWQgZmxhZy4gTGV0IG1lIHNlZSB3aGF0IGVsc2UgaXMgaW4gdGhhdCBmaWxlLCBvciBvdGhlcnMuXG5cbkkgbmVlZCB0byBjb21lIGJhY2sgdG8gdGhlIGJhc2ljczogaXMgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIGl0c2VsZiB1YmlxdWl0b3VzPyBXYWl0LCB0aGUgZG9jdW1lbnRhdGlvbiBzYWlkLCBcImdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0IGFuZCB0cmFwIGhhbmRsZXJzLi4uKVwiIEFuZCB5ZXMsIGBfX2FsbG9jX3BhZ2VzYCBvciBpdHMgc2xvdyBwYXRoICppcyogYSBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3IgZnVuY3Rpb24uIEkgc2hvdWxkIGF2b2lkIGl0LlxuXG5Tbywgd2hhdCBhYm91dCBgdm1hX3RocF9nZnBfbWFza2AsIGBhbGxvY19odWdlX3plcm9fZm9saW9gLCBvciBgdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kYD8gSSBtdXN0IG5vdyB0aGluayBtb3JlIGFib3V0IHRoZSBjb250ZXh0LCBhbmQgd2hhdCdzIGludGVyZXN0aW5nLiBXaGF0IGNhbGxlcnMgcGVyZm9ybSBhbGxvY2F0aW9ucyB0aGF0IGFyZSAqY29zdGx5KiBiZWNhdXNlIHRoZXkgc3BlY2lmeSBgX19HRlBfTk9SRVRSWWA/IExldCBtZSBncmVwIGZvciBgX19HRlBfTk9SRVRSWWAgdGhyb3VnaG91dCB0aGUgdHJlZSB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUuIFRoYXQncyB0aGUgYmVzdCB3YXkgdG8gdW5jb3ZlciB0aGUgcmVsZXZhbnQgYW5kIG5vbi11YmlxdWl0b3VzIGFyZWFzIG9mIGludGVyZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIxOSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODo0OS45NTgwNjQyODNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTkzNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fR0ZQX05PUkVUUllcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2JhbGxvb24uYz0xNDc9c3RydWN0IHBhZ2UgKmJhbGxvb25fcGFnZV9hbGxvYyh2b2lkKVxcbm1tL2JhbGxvb24uYy0xNDgte1xcbm1tL2JhbGxvb24uYzoxNDk6XFx0Z2ZwX3QgZ2ZwX2ZsYWdzID0gX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk47XFxubW0vYmFsbG9vbi5jLTE1MC1cXG4tLVxcbm1tL2V4ZWNtZW0uYz00MDk9c3RhdGljIGJvb2wgZXhlY21lbV9jYWNoZV9mcmVlKHZvaWQgKnB0cilcXG4tLVxcbm1tL2V4ZWNtZW0uYy00MjItXFxubW0vZXhlY21lbS5jOjQyMzpcXHRlcnIgPSBfX2V4ZWNtZW1fY2FjaGVfZnJlZShcXHUwMDI2bWFzLCBhcmVhLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9SRVRSWSk7XFxubW0vZXhlY21lbS5jLTQyNC1cXHRpZiAoZXJyKSB7XFxuLS1cXG5tbS9maWxlbWFwLmM9MTk0Nz1zdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL2ZpbGVtYXAuYy0yMDE2LVxcdFxcdFxcdGlmIChvcmRlciBcXHUwMDNlIG1pbl9vcmRlcilcXG5tbS9maWxlbWFwLmM6MjAxNzpcXHRcXHRcXHRcXHRhbGxvY19nZnAgfD0gX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PV0FSTjtcXG5tbS9maWxlbWFwLmMtMjAxOC1cXHRcXHRcXHRmb2xpbyA9IGZpbGVtYXBfYWxsb2NfZm9saW8oYWxsb2NfZ2ZwLCBvcmRlciwgcG9saWN5KTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTUyMz1nZnBfdCB2bWFfdGhwX2dmcF9tYXNrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xNTI4LVxcdGlmICh0ZXN0X2JpdChUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfRElSRUNUX0ZMQUcsIFxcdTAwMjZ0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncykpXFxubW0vaHVnZV9tZW1vcnkuYzoxNTI5OlxcdFxcdHJldHVybiBHRlBfVFJBTlNIVUdFIHwgKHZtYV9tYWR2aXNlZCA/IDAgOiBfX0dGUF9OT1JFVFJZKTtcXG5tbS9odWdlX21lbW9yeS5jLTE1MzAtXFxuLS1cXG5tbS9pbnRlcm5hbC5oPTExNz1zdHJ1Y3QgcGFnZXRhYmxlX21vdmVfY29udHJvbCB7XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTE0Ni1cXHRcXHRcXHRfX0dGUF9OT1dBUk58X19HRlBfUkVUUllfTUFZRkFJTHxfX0dGUF9OT0ZBSUx8XFxcXFxcbm1tL2ludGVybmFsLmg6MTQ3OlxcdFxcdFxcdF9fR0ZQX05PUkVUUll8X19HRlBfTUVNQUxMT0N8X19HRlBfTk9NRU1BTExPQ3xcXFxcXFxubW0vaW50ZXJuYWwuaC0xNDgtXFx0XFx0XFx0X19HRlBfTk9MT0NLREVQKVxcbi0tXFxubW0va3NtLmM9NTY3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGtzbV9ybWFwX2l0ZW0gKmFsbG9jX3JtYXBfaXRlbSh2b2lkKVxcbi0tXFxubW0va3NtLmMtNTcxLVxcdHJtYXBfaXRlbSA9IGttZW1fY2FjaGVfemFsbG9jKHJtYXBfaXRlbV9jYWNoZSwgR0ZQX0tFUk5FTCB8XFxubW0va3NtLmM6NTcyOlxcdFxcdFxcdFxcdFxcdFxcdF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk4pO1xcbm1tL2tzbS5jLTU3My1cXHRpZiAocm1hcF9pdGVtKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI2NDU9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjczMC1cXG5tbS9tZW1jb250cm9sLmM6MjczMTpcXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9OT1JFVFJZKVxcbm1tL21lbWNvbnRyb2wuYy0yNzMyLVxcdFxcdGdvdG8gbm9tZW07XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNDQxPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfbXBvbChnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI0NzItXFx0XFx0XFx0cGFnZSA9IF9fYWxsb2NfZnJvemVuX3BhZ2VzX25vcHJvZihcXG5tbS9tZW1wb2xpY3kuYzoyNDczOlxcdFxcdFxcdFxcdGdmcCB8IF9fR0ZQX1RISVNOT0RFIHwgX19HRlBfTk9SRVRSWSwgb3JkZXIsXFxubW0vbWVtcG9saWN5LmMtMjQ3NC1cXHRcXHRcXHRcXHRuaWQsIE5VTEwsIEFMTE9DX0RFRkFVTFQpO1xcbi0tXFxubW0vbWVtcG9vbC5jPTQ4MD1zdGF0aWMgaW5saW5lIGdmcF90IG1lbXBvb2xfYWRqdXN0X2dmcChnZnBfdCAqZ2ZwX21hc2spXFxubW0vbWVtcG9vbC5jLTQ4MS17XFxubW0vbWVtcG9vbC5jOjQ4MjpcXHQqZ2ZwX21hc2sgfD0gX19HRlBfTk9NRU1BTExPQyB8IF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk47XFxubW0vbWVtcG9vbC5jLTQ4My1cXHRyZXR1cm4gKmdmcF9tYXNrIFxcdTAwMjYgfihfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IF9fR0ZQX0lPKTtcXG4tLVxcbm1tL21pZ3JhdGUuYz0yNjY5PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pc3BsYWNlZF9kc3RfZm9saW8oc3RydWN0IGZvbGlvICpzcmMsXFxuLS1cXG5tbS9taWdyYXRlLmMtMjY3OC1cXHRlbHNlIHtcXG5tbS9taWdyYXRlLmM6MjY3OTpcXHRcXHRnZnAgfD0gR0ZQX0hJR0hVU0VSX01PVkFCTEUgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9SRVRSWSB8XFxubW0vbWlncmF0ZS5jLTI2ODAtXFx0XFx0XFx0X19HRlBfTk9XQVJOO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQwNDQ9X19hbGxvY19wYWdlc19tYXlfb29tKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDA3MS1cXHQgKiB3ZSdyZSBzdGlsbCB1bmRlciBoZWF2eSBwcmVzc3VyZS4gQnV0IG1ha2Ugc3VyZSB0aGF0IHRoaXMgcmVjbGFpbVxcbm1tL3BhZ2VfYWxsb2MuYzo0MDcyOlxcdCAqIGF0dGVtcHQgc2hhbGwgbm90IGRlcGVuZCBvbiBfX0dGUF9ESVJFQ1RfUkVDTEFJTSBcXHUwMDI2XFx1MDAyNiAhX19HRlBfTk9SRVRSWVxcbm1tL3BhZ2VfYWxsb2MuYy00MDczLVxcdCAqIGFsbG9jYXRpb24gd2hpY2ggd2lsbCBuZXZlciBmYWlsIGR1ZSB0byBvb21fbG9jayBhbHJlYWR5IGhlbGQuXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDc4ND1fX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDgwNS1cXHQvKlxcbm1tL3BhZ2VfYWxsb2MuYzo0ODA2OlxcdCAqIENvc3RseSBfX0dGUF9OT1JFVFJZIGNhbGxlcnMgaGF2ZSBhIGNoZWFwIGZhbGxiYWNrLCBzbyBkb24ndCBzdGFsbFxcbm1tL3BhZ2VfYWxsb2MuYy00ODA3LVxcdCAqIHRoZW0gaW4gcmVjbGFpbSBvciBjb21wYWN0aW9uLiBfX0dGUF9USElTTk9ERSBjYWxsZXJzIGFyZSBleGVtcHQuXFxubW0vcGFnZV9hbGxvYy5jLTQ4MDgtXFx0ICovXFxubW0vcGFnZV9hbGxvYy5jOjQ4MDk6XFx0aWYgKGNvc3RseV9vcmRlciBcXHUwMDI2XFx1MDAyNiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9OT1JFVFJZKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3BhZ2VfYWxsb2MuYy00ODEwLVxcdCAgICAhKGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfVEhJU05PREUpKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQ5NzMtXFx0XFx0ICovXFxubW0vcGFnZV9hbGxvYy5jOjQ5NzQ6XFx0XFx0aWYgKGdmcF9oYXNfZmxhZ3MoZ2ZwX21hc2ssIF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9USElTTk9ERSkpXFxubW0vcGFnZV9hbGxvYy5jLTQ5NzUtXFx0XFx0XFx0Z290byBub3BhZ2U7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDk3OS1cXHRcXHQgKiBwcmlvcml0eS4gUmVzdG9yZSBpdCBmb3IgZnVydGhlciByZXRyaWVzLCBpZiB0aG9zZSBhcmVcXG5tbS9wYWdlX2FsbG9jLmM6NDk4MDpcXHRcXHQgKiBhbGxvd2VkLiBXaXRoIF9fR0ZQX05PUkVUUlkgdGhlcmUgd2lsbCBiZSBhIHNpbmdsZSByb3VuZCBvZlxcbm1tL3BhZ2VfYWxsb2MuYy00OTgxLVxcdFxcdCAqIHJlY2xhaW0gYW5kIGNvbXBhY3Rpb24gd2l0aCB0aGUgbG93ZXJlZCBwcmlvcml0eS5cXG5tbS9wYWdlX2FsbG9jLmMtNDk4Mi1cXHRcXHQgKi9cXG5tbS9wYWdlX2FsbG9jLmM6NDk4MzpcXHRcXHRpZiAoIShnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX05PUkVUUlkpKVxcbm1tL3BhZ2VfYWxsb2MuYy00OTg0LVxcdFxcdFxcdGNvbXBhY3RfcHJpb3JpdHkgPSBERUZfQ09NUEFDVF9QUklPUklUWTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00OTkwLVxcdC8qIERvIG5vdCBsb29wIGlmIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQgKi9cXG5tbS9wYWdlX2FsbG9jLmM6NDk5MTpcXHRpZiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9OT1JFVFJZKVxcbm1tL3BhZ2VfYWxsb2MuYy00OTkyLVxcdFxcdGdvdG8gbm9wYWdlO1xcbi0tXFxubW0vcGFnZV9mcmFnX2NhY2hlLmM9NDk9c3RhdGljIHN0cnVjdCBwYWdlICpfX3BhZ2VfZnJhZ19jYWNoZV9yZWZpbGwoc3RydWN0IHBhZ2VfZnJhZ19jYWNoZSAqbmMsXFxuLS1cXG5tbS9wYWdlX2ZyYWdfY2FjaGUuYy01Ny1cXHRnZnBfbWFzayA9IChnZnBfbWFzayBcXHUwMDI2IH5fX0dGUF9ESVJFQ1RfUkVDTEFJTSkgfCAgX19HRlBfQ09NUCB8XFxubW0vcGFnZV9mcmFnX2NhY2hlLmM6NTg6XFx0XFx0ICAgX19HRlBfTk9XQVJOIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0M7XFxubW0vcGFnZV9mcmFnX2NhY2hlLmMtNTktXFx0cGFnZSA9IF9fYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIFBBR0VfRlJBR19DQUNIRV9NQVhfT1JERVIsXFxuLS1cXG5tbS9wZXJjcHUuYz0xNzM1PXZvaWQgX19wZXJjcHUgKnBjcHVfYWxsb2Nfbm9wcm9mKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24sIGJvb2wgcmVzZXJ2ZWQsXFxuLS1cXG5tbS9wZXJjcHUuYy0xNzYwLVxcdCAqL1xcbm1tL3BlcmNwdS5jOjE3NjE6XFx0cGNwdV9nZnAgPSBnZnAgXFx1MDAyNiAoR0ZQX05PSU8gfCBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOKTtcXG5tbS9wZXJjcHUuYy0xNzYyLVxcdGlzX2F0b21pYyA9ICFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApO1xcbi0tXFxubW0vcGVyY3B1LmM9MjAxMz1zdGF0aWMgdm9pZCBwY3B1X2JhbGFuY2VfcG9wdWxhdGVkKHZvaWQpXFxuLS1cXG5tbS9wZXJjcHUuYy0yMDE1LVxcdC8qIGdmcCBmbGFncyBwYXNzZWQgdG8gdW5kZXJseWluZyBhbGxvY2F0b3JzICovXFxubW0vcGVyY3B1LmM6MjAxNjpcXHRjb25zdCBnZnBfdCBnZnAgPSBHRlBfS0VSTkVMIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PV0FSTjtcXG5tbS9wZXJjcHUuYy0yMDE3LVxcdHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaztcXG4tLVxcbm1tL3NobWVtLmM9NTkzND1pbnQgc2htZW1femVyb19zZXR1cF9kZXNjKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXFxuLS1cXG5tbS9zaG1lbS5jLTU5NTgtICpcXG5tbS9zaG1lbS5jOjU5NTk6ICogaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlc19ndHQoKSBtaXhlcyBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOIGluXFxubW0vc2htZW0uYy01OTYwLSAqIHdpdGggdGhlIG1hcHBpbmdfZ2ZwX21hc2soKSwgdG8gYXZvaWQgT09NaW5nIHRoZSBtYWNoaW5lIHVubmVjZXNzYXJpbHkuXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTE4NzE9c3RhdGljIHZvaWQgZmlsbF9wYWdlX2NhY2hlX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy0xODg2LVxcdFxcdGJub2RlID0gKHN0cnVjdCBrdmZyZWVfcmN1X2J1bGtfZGF0YSAqKVxcbm1tL3NsYWJfY29tbW9uLmM6MTg4NzpcXHRcXHRcXHRfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT01FTUFMTE9DIHwgX19HRlBfTk9XQVJOKTtcXG5tbS9zbGFiX2NvbW1vbi5jLTE4ODgtXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTE5MTM9YWRkX3B0cl90b19idWxrX2tyY19sb2NrKHN0cnVjdCBrZnJlZV9yY3VfY3B1ICoqa3JjcCxcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtMTkzMi1cXG5tbS9zbGFiX2NvbW1vbi5jOjE5MzM6XFx0XFx0XFx0Ly8gX19HRlBfTk9SRVRSWSAtIGFsbG93cyBhIGxpZ2h0LXdlaWdodCBkaXJlY3QgcmVjbGFpbVxcbm1tL3NsYWJfY29tbW9uLmMtMTkzNC1cXHRcXHRcXHQvLyB3aGF0IGlzIE9LIGZyb20gbWluaW1pemluZyBvZiBmYWxsYmFjayBoaXR0aW5nIHBvaW50IG9mXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTE5NDQtXFx0XFx0XFx0Ym5vZGUgPSAoc3RydWN0IGt2ZnJlZV9yY3VfYnVsa19kYXRhICopXFxubW0vc2xhYl9jb21tb24uYzoxOTQ1OlxcdFxcdFxcdFxcdF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX05PTUVNQUxMT0MgfCBfX0dGUF9OT1dBUk4pO1xcbm1tL3NsYWJfY29tbW9uLmMtMTk0Ni1cXHRcXHRcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNigqa3JjcCktXFx1MDAzZWxvY2ssICpmbGFncyk7XFxuLS1cXG5tbS9zbHViLmM9MzQ0MT1zdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTM0NTctXFx0ICovXFxubW0vc2x1Yi5jOjM0NTg6XFx0YWxsb2NfZ2ZwID0gKGZsYWdzIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfTk9SRVRSWSkgXFx1MDAyNiB+X19HRlBfTk9GQUlMO1xcbm1tL3NsdWIuYy0zNDU5LVxcdGlmICgoYWxsb2NfZ2ZwIFxcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU0pIFxcdTAwMjZcXHUwMDI2IG9vX29yZGVyKG9vKSBcXHUwMDNlIG9vX29yZGVyKHMtXFx1MDAzZW1pbikpXFxuLS1cXG5tbS92bWFsbG9jLmM9MzgyMD1zdGF0aWMgdm9pZCBkZWZlcl92bV9hcmVhX2NsZWFudXAoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSlcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zODM1LSAqIEdGUF9OT0lPIC0gbWVtYWxsb2Nfbm9pb19zYXZlKClcXG5tbS92bWFsbG9jLmM6MzgzNjogKiBfX0dGUF9SRVRSWV9NQVlGQUlMLCBfX0dGUF9OT1JFVFJZIC0gbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKVxcbm1tL3ZtYWxsb2MuYy0zODM3LSAqIHRvIHByZXZlbnQgT09Nc1xcbi0tXFxubW0vdm1hbGxvYy5jPTM4NDI9bWVtYWxsb2NfYXBwbHlfZ2ZwX3Njb3BlKGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vdm1hbGxvYy5jLTM4NDYtXFx0aWYgKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykgfHxcXG5tbS92bWFsbG9jLmM6Mzg0NzpcXHRcXHRcXHQoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfUkVUUllfTUFZRkFJTCB8IF9fR0ZQX05PUkVUUlkpKSlcXG5tbS92bWFsbG9jLmMtMzg0OC1cXHRcXHRmbGFncyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7XFxuLS1cXG5tbS92bWFsbG9jLmM9Mzg2NT1zdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zOTY5LSAqIFRoaXMgZ2ZwIGxpc3RzIGFsbCBmbGFncyBjdXJyZW50bHkgcGFzc2VkIHRocm91Z2ggdm1hbGxvYy4gQ3VycmVudGx5LFxcbm1tL3ZtYWxsb2MuYzozOTcwOiAqIF9fR0ZQX1pFUk8gaXMgdXNlZCBieSBCUEYgYW5kIF9fR0ZQX05PUkVUUlkgaXMgdXNlZCBieSBwZXJjcHUuIEJvdGggZHJtXFxubW0vdm1hbGxvYy5jLTM5NzEtICogYW5kIEJQRiBhbHNvIHVzZSBHRlBfVVNFUi4gQWRkaXRpb25hbGx5LCB2YXJpb3VzIHVzZXJzIHBhc3NcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zOTc1LVxcdFxcdFxcdFxcdF9fR0ZQX05PRkFJTCB8IF9fR0ZQX1pFUk8gfFxcXFxcXG5tbS92bWFsbG9jLmM6Mzk3NjpcXHRcXHRcXHRcXHRfX0dGUF9OT1JFVFJZIHwgX19HRlBfUkVUUllfTUFZRkFJTCB8XFxcXFxcbm1tL3ZtYWxsb2MuYy0zOTc3LVxcdFxcdFxcdFxcdEdGUF9OT0ZTIHwgR0ZQX05PSU8gfCBHRlBfS0VSTkVMX0FDQ09VTlQgfFxcXFxcXG4tLVxcbm1tL3ZtYWxsb2MuYz0zOTgwPXN0YXRpYyBnZnBfdCB2bWFsbG9jX2ZpeF9mbGFncyhnZnBfdCBmbGFncylcXG4tLVxcbm1tL3ZtYWxsb2MuYy00MDA2LSAqIFN1cHBvcnRlZCBHRlAgY2xhc3NlczogJUdGUF9LRVJORUwsICVHRlBfQVRPTUlDLCAlR0ZQX05PV0FJVCxcXG5tbS92bWFsbG9jLmM6NDAwNzogKiAlX19HRlBfUkVUUllfTUFZRkFJTCwgJV9fR0ZQX05PUkVUUlksICVHRlBfTk9GUyBhbmQgJUdGUF9OT0lPLlxcbm1tL3ZtYWxsb2MuYy00MDA4LSAqIFpvbmUgbW9kaWZpZXJzIGFyZSBub3Qgc3VwcG9ydGVkLlxcbi0tXFxubW0vdm1hbGxvYy5jLTQwMTItICogUmV0cnkgbW9kaWZpZXJzOiBvbmx5ICVfX0dGUF9OT0ZBSUwgaXMgZnVsbHkgc3VwcG9ydGVkO1xcbm1tL3ZtYWxsb2MuYzo0MDEzOiAqICVfX0dGUF9OT1JFVFJZIGFuZCAlX19HRlBfUkVUUllfTUFZRkFJTCBhcmUgc3VwcG9ydGVkIHdpdGggbGltaXRhdGlvbixcXG5tbS92bWFsbG9jLmMtNDAxNC0gKiBpLmUuIHBhZ2UgdGFibGVzIGFyZSBhbGxvY2F0ZWQgd2l0aCBOT1dBSVQgc2VtYW50aWMgc28gdGhleSBtaWdodCBmYWlsXFxuLS1cXG5tbS96c3dhcC5jPTg0MD1zdGF0aWMgYm9vbCB6c3dhcF9jb21wcmVzcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4tLVxcbm1tL3pzd2FwLmMtODk4LVxcbm1tL3pzd2FwLmM6ODk5OlxcdGdmcCA9IEdGUF9OT1dBSVQgfCBfX0dGUF9OT1JFVFJZIHwgX19HRlBfSElHSE1FTSB8IF9fR0ZQX01PVkFCTEU7XFxubW0venN3YXAuYy05MDAtXFx0aGFuZGxlID0genNfbWFsbG9jKHBvb2wtXFx1MDAzZXpzX3Bvb2wsIGRsZW4sIGdmcCwgcGFnZV90b19uaWQocGFnZSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozODo1MC4wMDgyNjQzNzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMxOTQ5MDA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQYWdlIEFsbG9jYXRpb24gd2l0aCBDb3N0bHkgT3JkZXJzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSB0aGUgb3B0aW1hbCBjb25maWd1cmF0aW9uIGFuZCBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIG1lbW9yeSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2hlcmUgXCJjb3N0bHkgb3JkZXJzXCIgY29tZSBpbnRvIHBsYXkuXG5cbkluaXRpYWxseSwgSSdtIGxvb2tpbmcgYXQgaG93IGBfX0dGUF9OT1JFVFJZYCBpcyB1c2VkLCBhbmQgaXQgc2VlbXMgdGhpcyBmbGFnLCBhbG9uZyB3aXRoIGBfX0dGUF9OT1dBUk5gLCBpcyBhcHBsaWVkIHRvIGNlcnRhaW4gYGFsbG9jX2dmcGAgZmxhZ3MgYmFzZWQgb24gdGhlIG9yZGVyIHNpemUgaW4gYSBmZXcgcGxhY2VzOiBpbiBgbW0vc2x1Yi5jYCB3aXRoaW4gYGFsbG9jYXRlX3NsYWJgLCBpbiBgbW0vaHVnZV9tZW1vcnkuY2Agd2l0aCBgdm1hX3RocF9nZnBfbWFza2AsIGFuZCBpbiBgbW0vZmlsZW1hcC5jYC4gVGhpcyBzdWdnZXN0cyBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBmbGFncyBhbmQgaGlnaC1vcmRlciBhbGxvY2F0aW9ucy4gSSBhbHNvIHRvb2sgbm90ZSBvZiBgX19HRlBfRElSRUNUX1JFQ0xBSU1gLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBJIGhhZCBgQ09ORklHX0NPTVBBQ1RJT05gIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpbiBtaW5kLCBhcyB0aG9zZSBzZWVtIHJlbGV2YW50IHRvIGV4ZXJjaXNpbmcgdGhlIFwiY29zdGx5IG9yZGVyXCIgbG9naWMuIEhvd2V2ZXIsIEkgd2FudCB0byBiZSAqc3VyZSouXG5cblNvLCBJIGNoZWNrIHRoZSBjb2RlLCBhbmQgSSBzZWUgdGhhdCB0aGUgcmVsZXZhbnQgY29kZSBpbiBgbW0vcGFnZV9hbGxvYy5jYCAoc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQ4MDUgaW4gYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgKSBpcyAqbm90KiBndWFyZGVkIGJ5IGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzLiBUaGUgY29zdGx5IG9yZGVyIGNoZWNrcyAod2hpY2ggaW5jbHVkZSB0aGUgZmxhZ3MgbWVudGlvbmVkIGVhcmxpZXIpIGFyZSB1bmNvbmRpdGlvbmFsbHkgcHJlc2VudC4gYFBBR0VfQUxMT0NfQ09TVExZX09SREVSYCBpcyBkZWZpbmVkIHVuY29uZGl0aW9uYWxseSBhcyAzLlxuXG5UaGlzIG1lYW5zIGEgKnN0YW5kYXJkKiBrZXJuZWwgc2hvdWxkIGluY2x1ZGUgdGhlIHJlbGV2YW50IGNvZGUsIHRodXMgdGhlIGBFbmFibGVDb25maWdzYCBjYW4gYmUgZW1wdHkuIEhvd2V2ZXIsIGVuYWJsaW5nIGBDT05GSUdfQ09NUEFDVElPTmAgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHdvdWxkIGxpa2VseSAqaW5jcmVhc2UqIHRoZSBsaWtlbGlob29kIG9mIGhpdHRpbmcgdGhlc2UgY29zdGx5IGFsbG9jYXRpb24gcGF0aHMuXG5cbk5leHQsIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHJpZ2h0IGBGb2N1c1N5bWJvbHNgLiBDYW4gSSB1c2UgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgPyBXZWxsLCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBtYWtlcyBpdCBhIHBvb3IgY2hvaWNlLiBJIG5lZWQgdG8gZmluZCB0aGUgKmVudHJ5cG9pbnRzKi5cblxuSSByZS1yZWFkIHRoZSBwcm9tcHQgb24gYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgaG90LXBhdGhzLCB3aGljaCBydWxlcyBvdXQgdmVyeSBnZW5lcmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgZXZlcnl3aGVyZS4gU28sIEkgbmVlZCB0aGUgKnNwZWNpZmljKiBjYWxsZXJzIHRoYXQgd2lsbCBleGVyY2lzZSB0aGUgY29zdGx5IGBfX0dGUF9OT1JFVFJZYCBhbGxvY2F0aW9uIGxvZ2ljLlxuXG5JIGlkZW50aWZpZWQgYSBmZXcgY2FuZGlkYXRlcyBmcm9tIHRoZSBjb2RlOiBgYWxsb2NhdGVfc2xhYmAsIGB2bWFfdGhwX2dmcF9tYXNrYCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIGBhbGxvY19odWdlX3plcm9fZm9saW9gIGFsc28gaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgYWxsb2NfcGFnZXNfbXBvbGAgaW4gYG1tL21lbXBvbGljeS5jYCwgYW5kIHBvdGVudGlhbGx5IGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLiBUaGUgc2xhYiBjYWNoZXMgYXJlIGludGVyZXN0aW5nIChgYWxsb2NhdGVfc2xhYmApIGJlY2F1c2UgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyBoYXBwZW4gdGhlcmUuXG5cbmB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgZGVhbHMgd2l0aCBUSFAgYWxsb2NhdGlvbnMuIGBhbGxvY19odWdlX3plcm9fZm9saW9gIGlzIGFub3RoZXIgcG90ZW50aWFsbHkgZnJ1aXRmdWwgY2FsbGVyLiBUaGVyZWZvcmUsIGBGb2N1c1N5bWJvbHNgIG1pZ2h0IGluY2x1ZGUgZW50cnlwb2ludHMgc3VjaCBhcyBgYWxsb2NhdGVfc2xhYmAsIGB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWRgLCBhbmQgYGFsbG9jX2h1Z2VfemVyb19mb2xpb2AuIEknbGwgZ28gY2hlY2sgYG1tL2h1Z2VfbWVtb3J5LmNgIHNwZWNpZmljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA5NzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjM4OjU2LjMyNzc1NjM2MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExNjI5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hX2FsbG9jX2Fub25fZm9saW9fcG1kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTEzNDc9RVhQT1JUX1NZTUJPTF9HUEwodGhwX2dldF91bm1hcHBlZF9hcmVhKTtcXG5tbS9odWdlX21lbW9yeS5jLTEzNDgtXFxubW0vaHVnZV9tZW1vcnkuYzoxMzQ5OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19hbm9uX2ZvbGlvX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdlX21lbW9yeS5jLTEzNTAtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNDI0PXN0YXRpYyB2bV9mYXVsdF90IF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE0MzEtXFxubW0vaHVnZV9tZW1vcnkuYzoxNDMyOlxcdGZvbGlvID0gdm1hX2FsbG9jX2Fub25fZm9saW9fcG1kKHZtYSwgdm1mLVxcdTAwM2VhZGRyZXNzKTtcXG5tbS9odWdlX21lbW9yeS5jLTE0MzMtXFx0aWYgKHVubGlrZWx5KCFmb2xpbykpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIxMzU9c3RhdGljIHZtX2ZhdWx0X3QgZG9faHVnZV96ZXJvX3dwX3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjE0Mi1cXG5tbS9odWdlX21lbW9yeS5jOjIxNDM6XFx0Zm9saW8gPSB2bWFfYWxsb2NfYW5vbl9mb2xpb19wbWQodm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjE0NC1cXHRpZiAodW5saWtlbHkoIWZvbGlvKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzg6NTYuMzc4OTIxNjExWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NTI5MzIzOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSWRlbnRpZnlpbmcgUG90ZW50aWFsIEJvdHRsZW5lY2tzIGluIE1lbW9yeSBBbGxvY2F0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGFyZWFzIHdoZXJlIHdlJ3JlIHNlZWluZyB0aGUgaGVhdmllc3QgbWVtb3J5IGFsbG9jYXRpb24gY29zdHMuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGxlYWRzIG1lIHRvIHRoZXNlIGZ1bmN0aW9uczogYF9fZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2VgLCBgZG9faHVnZV96ZXJvX3dwX3BtZGAsIGBhbGxvY19odWdlX3plcm9fZm9saW9gLCBhbmQgYGFsbG9jYXRlX3NsYWJgLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgc3VzcGVjdHMgZm9yIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBvcGVyYXRpb25zLlxuXG5CdXQgSSBrbm93IHRoZXJlJ3MgbW9yZSB0byBpdCB0aGFuIGp1c3QgdGhlIG9idmlvdXMuIE15IG5leHQgc3RlcCBpcyB0byB0aGluayBjcml0aWNhbGx5IGFib3V0ICpvdGhlciogZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgdHJpZ2dlcmluZyBjb3N0bHkgYWxsb2NhdGlvbnMsIGV2ZW4gaWYgdGhleSdyZSBub3QgaW1tZWRpYXRlbHkgYXBwYXJlbnQuIExldCdzIHNlZS4uLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGRlYWxpbmcgd2l0aCBmaWxlIG1hcHBpbmcsIHBvdGVudGlhbGx5LCBsaWtlIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgLCBvciwgaW4gdGhlIHNoYXJlZCBtZW1vcnkgc3BhY2UsIHdoYXQgYWJvdXQgYHNobWVtX2FsbG9jX2ZvbGlvYCBvciBgc2htZW1fYWxsb2NfaHVnZWZvbGlvYD8gVGhlc2UgY291bGQgYmUgc2lnbmlmaWNhbnQgY29udHJpYnV0b3JzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgc2htZW0uY2AgdG8gc2VlIGlmIHRob3NlIGFyZSB0aGUgY3VscHJpdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDc1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzg6NTguODMxODU2NjQxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTYzNjQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaG1lbV9hbGxvY19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmM9ODY0PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpmaWxlX3N0YXRzX2F0dHJzW10gPSB7XFxubW0vaHVnZV9tZW1vcnkuYy04NjUtI2lmZGVmIENPTkZJR19TSE1FTVxcbm1tL2h1Z2VfbWVtb3J5LmM6ODY2OlxcdFxcdTAwMjZzaG1lbV9hbGxvY19hdHRyLmF0dHIsXFxubW0vaHVnZV9tZW1vcnkuYy04NjctXFx0XFx1MDAyNnNobWVtX2ZhbGxiYWNrX2F0dHIuYXR0cixcXG4tLVxcbm1tL3NobWVtLmM9MTkxNz1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuLS1cXG5tbS9zaG1lbS5jLTE5MjQtXFxubW0vc2htZW0uYzoxOTI1OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX2FsbG9jX2ZvbGlvKGdmcF90IGdmcCwgaW50IG9yZGVyLFxcbm1tL3NobWVtLmMtMTkyNi1cXHRcXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbywgcGdvZmZfdCBpbmRleClcXG4tLVxcbm1tL3NobWVtLmMtMTkzOC1cXG5tbS9zaG1lbS5jOjE5Mzk6c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fYWxsb2NfYW5kX2FkZF9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG5tbS9zaG1lbS5jLTE5NDAtXFx0XFx0Z2ZwX3QgZ2ZwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0xOTYxLVxcdFxcdFxcdGFsaWduZWRfaW5kZXggPSByb3VuZF9kb3duKGluZGV4LCBwYWdlcyk7XFxubW0vc2htZW0uYzoxOTYyOlxcdFxcdFxcdGZvbGlvID0gc2htZW1fYWxsb2NfZm9saW8oZ2ZwLCBvcmRlciwgaW5mbywgYWxpZ25lZF9pbmRleCk7XFxubW0vc2htZW0uYy0xOTYzLVxcdFxcdFxcdGlmIChmb2xpbykge1xcbi0tXFxubW0vc2htZW0uYy0xOTc0LVxcdFxcdHBhZ2VzID0gMTtcXG5tbS9zaG1lbS5jOjE5NzU6XFx0XFx0Zm9saW8gPSBzaG1lbV9hbGxvY19mb2xpbyhnZnAsIDAsIGluZm8sIGluZGV4KTtcXG5tbS9zaG1lbS5jLTE5NzYtXFx0fVxcbi0tXFxubW0vc2htZW0uYz0yMDg5PXN0YXRpYyBpbnQgc2htZW1fcmVwbGFjZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGdmcF90IGdmcCxcXG4tLVxcbm1tL3NobWVtLmMtMjExMS1cXG5tbS9zaG1lbS5jOjIxMTI6XFx0bmV3ID0gc2htZW1fYWxsb2NfZm9saW8oZ2ZwLCBmb2xpb19vcmRlcihvbGQpLCBpbmZvLCBpbmRleCk7XFxubW0vc2htZW0uYy0yMTEzLVxcdGlmICghbmV3KVxcbi0tXFxubW0vc2htZW0uYz0yNDI4PXN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0yNTE1LVxcdFxcdGh1Z2VfZ2ZwID0gdGhwX3NobWVtX2xpbWl0X2dmcF9tYXNrKGh1Z2VfZ2ZwLCBnZnApO1xcbm1tL3NobWVtLmM6MjUxNjpcXHRcXHRmb2xpbyA9IHNobWVtX2FsbG9jX2FuZF9hZGRfZm9saW8odm1mLCBodWdlX2dmcCxcXG5tbS9zaG1lbS5jLTI1MTctXFx0XFx0XFx0XFx0aW5vZGUsIGluZGV4LCBmYXVsdF9tbSwgb3JkZXJzKTtcXG4tLVxcbm1tL3NobWVtLmMtMjUyNy1cXG5tbS9zaG1lbS5jOjI1Mjg6XFx0Zm9saW8gPSBzaG1lbV9hbGxvY19hbmRfYWRkX2ZvbGlvKHZtZiwgZ2ZwLCBpbm9kZSwgaW5kZXgsIGZhdWx0X21tLCAwKTtcXG5tbS9zaG1lbS5jLTI1MjktXFx0aWYgKElTX0VSUihmb2xpbykpIHtcXG4tLVxcbm1tL3NobWVtLmM9MzE0Mj1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9tZmlsbF9mb2xpb19hbGxvYyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3NobWVtLmMtMzE1NC1cXG5tbS9zaG1lbS5jOjMxNTU6XFx0Zm9saW8gPSBzaG1lbV9hbGxvY19mb2xpbyhnZnAsIDAsIGluZm8sIHBnb2ZmKTtcXG5tbS9zaG1lbS5jLTMxNTYtXFx0aWYgKCFmb2xpbylcXG4tLVxcbm1tL3NobWVtLmM9NTExNT1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnNobWVtX2lub2RlX2NhY2hlcCBfX3JvX2FmdGVyX2luaXQ7XFxubW0vc2htZW0uYy01MTE2LVxcbm1tL3NobWVtLmM6NTExNzpzdGF0aWMgc3RydWN0IGlub2RlICpzaG1lbV9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbm1tL3NobWVtLmMtNTExOC17XFxuLS1cXG5tbS9zaG1lbS5jPTUyNDI9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcyA9IHtcXG5tbS9zaG1lbS5jOjUyNDM6XFx0LmFsbG9jX2lub2RlXFx0PSBzaG1lbV9hbGxvY19pbm9kZSxcXG5tbS9zaG1lbS5jLTUyNDQtXFx0LmZyZWVfaW5vZGVcXHQ9IHNobWVtX2ZyZWVfaW5fY29yZV9pbm9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzg6NTguODgxNDk5NTZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDA1ODMyNDk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGaW5hbCBGdXp6aW5nIENoZWNrIC0gTWVtb3J5IEFsbG9jYXRpb24gU2xvd3BhdGgqKlxuXG5Pa2F5LCBmaW5hbCBjaGVjayB0aW1lLiBMZXQncyBtYWtlIHN1cmUgdGhpcyBhbGwgbGluZXMgdXAuXG5cbjEuICBgV29ydGhGdXp6aW5nYCBpcyBgdHJ1ZWAuIEdvb2QuIFdlJ3JlIG1vZGlmeWluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHNsb3dwYXRoIGxvZ2ljIHJpZ2h0IHRoZXJlIGluIGBtbS9wYWdlX2FsbG9jLmNgLCBzcGVjaWZpY2FsbHkgaG93IGBfX0dGUF9ESVJFQ1RfUkVDTEFJTWAgaXMgaGFuZGxlZCBpbiBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgZm9yIHRob3NlIGJpZyBhbGxvY2F0aW9ucyB3aXRoIGBfX0dGUF9OT1JFVFJZYC4gVGhpcyAqZGVmaW5pdGVseSogaW1wYWN0cyBkaXJlY3QgcmVjbGFpbSBhbmQgbWVtb3J5IGNvbXBhY3Rpb24uIEltcG9ydGFudCBzdHVmZi5cblxuMi4gIGBFbmFibGVDb25maWdzYCBpcyBlbXB0eS4gUmlnaHQsIG1ha2VzIHNlbnNlLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGtlcm5lbCBzdHVmZiB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIE5vIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGhlcmUuIFdlJ3JlIGdldHRpbmcgYXQgYSBjb3JlIGNvbXBvbmVudC5cblxuMy4gIGBGb2N1c1N5bWJvbHNgOiBSaWdodCwgbm8gZ2VuZXJpYyBhbGxvY2F0b3JzIG9yIHBhZ2UgZmF1bHQgaGFuZGxlcnMuIFdlJ3JlIGJlaW5nIHN1cmdpY2FsLiBXZSdyZSB0YXJnZXRpbmcgdGhlIGhpZ2gtb3JkZXIsIGNvc3RseSBhbGxvY2F0aW9ucyB3aXRoIGBfX0dGUF9OT1JFVFJZYC4gU3BlY2lmaWNhbGx5LCB0aGF0IG1lYW5zOlxuXG4gICAgKiAgIGBhbGxvY19odWdlX3plcm9fZm9saW9gIC0gYmlnLCB6ZXJvZWQgZm9saW9zLlxuICAgICogICBgX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZWAgLSBsYXJnZSBhbm9ueW1vdXMgcGFnZXMsIGNyaXRpY2FsIGZvciBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuXG4gICAgKiAgIGBhbGxvY2F0ZV9zbGFiYCAtIHRoZSBzbGFiIGFsbG9jYXRvciwgYWx3YXlzIGEgZ29vZCB0YXJnZXQuXG4gICAgKiAgIGBfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xgIC0gaGFuZGxpbmcgZmlsZSBtYXBwaW5ncyB3aXRoIG1lbW9yeSBwb2xpY2llcywgYWxzbyBrZXkuXG5cbkFscmlnaHQsIHRoYXQgY292ZXJzIGl0LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0OTUsIk91dHB1dFRva2VucyI6MTY5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjM5OjAyLjkzOTgyNzAyNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2NfaHVnZV96ZXJvX2ZvbGlvXCIsXG4gICAgXCJfX2RvX2h1Z2VfcG1kX2Fub255bW91c19wYWdlXCIsXG4gICAgXCJhbGxvY2F0ZV9zbGFiXCIsXG4gICAgXCJfX2ZpbGVtYXBfZ2V0X2ZvbGlvX21wb2xcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHNsb3dwYXRoIGxvZ2ljIGluIG1tL3BhZ2VfYWxsb2MuYyAoX19hbGxvY19wYWdlc19zbG93cGF0aCkgdG8gY2xlYXIgX19HRlBfRElSRUNUX1JFQ0xBSU0gZm9yIGNvc3RseS1vcmRlciBhbGxvY2F0aW9ucyByZXF1ZXN0aW5nIF9fR0ZQX05PUkVUUlkgKHVubGVzcyBfX0dGUF9USElTTk9ERSBpcyBzcGVjaWZpZWQpLiBUaGlzIGRpcmVjdGx5IGFsdGVycyBkaXJlY3QgcmVjbGFpbSBhbmQgY29tcGFjdGlvbiBiZWhhdmlvciBmb3IgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyBzdWNoIGFzIFRIUCBhbmQgbGFyZ2UgZm9saW8gYWxsb2NhdGlvbnMuIEl0IHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIGNvbXBhY3Rpb24gYW5kIGZhbGxiYWNrIGludmFyaWFudHMgaG9sZCB3aXRob3V0IGNhdXNpbmcgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBhbGxvY2F0aW9uIGZhaWx1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFsbG9jX2h1Z2VfemVyb19mb2xpb1wiLFxuICAgIFwiX19kb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZVwiLFxuICAgIFwiYWxsb2NhdGVfc2xhYlwiLFxuICAgIFwiX19maWxlbWFwX2dldF9mb2xpb19tcG9sXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzbG93cGF0aCBsb2dpYyBpbiBtbS9wYWdlX2FsbG9jLmMgKF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgpIHRvIGNsZWFyIF9fR0ZQX0RJUkVDVF9SRUNMQUlNIGZvciBjb3N0bHktb3JkZXIgYWxsb2NhdGlvbnMgcmVxdWVzdGluZyBfX0dGUF9OT1JFVFJZICh1bmxlc3MgX19HRlBfVEhJU05PREUgaXMgc3BlY2lmaWVkKS4gVGhpcyBkaXJlY3RseSBhbHRlcnMgZGlyZWN0IHJlY2xhaW0gYW5kIGNvbXBhY3Rpb24gYmVoYXZpb3IgZm9yIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgc3VjaCBhcyBUSFAgYW5kIGxhcmdlIGZvbGlvIGFsbG9jYXRpb25zLiBJdCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSBjb21wYWN0aW9uIGFuZCBmYWxsYmFjayBpbnZhcmlhbnRzIGhvbGQgd2l0aG91dCBjYXVzaW5nIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYWxsb2NhdGlvbiBmYWlsdXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzk6MDIuOTM5ODU0Nzg2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjIzNTY2MTgwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjM5OjAyLjk0MDI2NjYxNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyMjM1MjQ0Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBhbGxvY2F0b3Igc2xvd3BhdGggKF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgpIHRvIGNsZWFyIF9fR0ZQX0RJUkVDVF9SRUNMQUlNIGZvciBjb3N0bHktb3JkZXIgYWxsb2NhdGlvbnMgdGhhdCBoYXZlIF9fR0ZQX05PUkVUUlkgc2V0IChhbmQgbm90IF9fR0ZQX1RISVNOT0RFKSwgYXZvaWRpbmcgc3RhbGxzIGluIHJlY2xhaW0gYW5kIGNvbXBhY3Rpb24uXFxuXFxuVGhpcyBjaGFuZ2Ugc3RyaWN0bHkgbW9kaWZpZXMgYWxsb2NhdG9yIHJlY2xhaW0gYW5kIGNvbXBhY3Rpb24gYmVoYXZpb3IuIEl0IGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgZG9lcyBub3QgbW9kaWZ5IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIG9yIHplcm9pbmcgKGUuZy4sIF9fR0ZQX1pFUk8pLCBhbmQgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBsZWFrIGluZm8gdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNjEyOGEyOTRhMjRlODRjMDI2NDc1MjA2YjVhMTUyMmZkOTNiZDE0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAyMzozODoxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuY1xuaW5kZXggMTJmYWM5MDg0YzQ4My4uNTQyYzJlYzMxMDYxMyAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfYWxsb2MuY1xuKysrIGIvbW0vcGFnZV9hbGxvYy5jXG5AQCAtNDc4NCwxMCArNDc4NCwxMCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpcbiBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdFx0XHRcdFx0c3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxuIHtcbi1cdGJvb2wgY2FuX2RpcmVjdF9yZWNsYWltID0gZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0RJUkVDVF9SRUNMQUlNO1xuLVx0Ym9vbCBjYW5fY29tcGFjdCA9IGNhbl9kaXJlY3RfcmVjbGFpbSBcdTAwMjZcdTAwMjYgZ2ZwX2NvbXBhY3Rpb25fYWxsb3dlZChnZnBfbWFzayk7XG4tXHRib29sIG5vZmFpbCA9IGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9OT0ZBSUw7XG4gXHRjb25zdCBib29sIGNvc3RseV9vcmRlciA9IG9yZGVyIFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUjtcbitcdGJvb2wgY2FuX2RpcmVjdF9yZWNsYWltO1xuK1x0Ym9vbCBjYW5fY29tcGFjdDtcbitcdGJvb2wgbm9mYWlsO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuIFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzO1xuIFx0dW5zaWduZWQgbG9uZyBkaWRfc29tZV9wcm9ncmVzcztcbkBAIC00ODAyLDYgKzQ4MDIsMTggQEAgX19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0Ym9vbCBjYW5fcmV0cnlfcmVzZXJ2ZXMgPSB0cnVlO1xuIFx0dW5zaWduZWQgbG9uZyBhbGxvY19zdGFydF90aW1lID0gamlmZmllcztcbiBcbitcdC8qXG4rXHQgKiBDb3N0bHkgX19HRlBfTk9SRVRSWSBjYWxsZXJzIGhhdmUgYSBjaGVhcCBmYWxsYmFjaywgc28gZG9uJ3Qgc3RhbGxcbitcdCAqIHRoZW0gaW4gcmVjbGFpbSBvciBjb21wYWN0aW9uLiBfX0dGUF9USElTTk9ERSBjYWxsZXJzIGFyZSBleGVtcHQuXG4rXHQgKi9cbitcdGlmIChjb3N0bHlfb3JkZXIgXHUwMDI2XHUwMDI2IChnZnBfbWFzayBcdTAwMjYgX19HRlBfTk9SRVRSWSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIShnZnBfbWFzayBcdTAwMjYgX19HRlBfVEhJU05PREUpKVxuK1x0XHRnZnBfbWFzayBcdTAwMjY9IH5fX0dGUF9ESVJFQ1RfUkVDTEFJTTtcbitcbitcdGNhbl9kaXJlY3RfcmVjbGFpbSA9IGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTTtcbitcdGNhbl9jb21wYWN0ID0gY2FuX2RpcmVjdF9yZWNsYWltIFx1MDAyNlx1MDAyNiBnZnBfY29tcGFjdGlvbl9hbGxvd2VkKGdmcF9tYXNrKTtcbitcdG5vZmFpbCA9IGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9OT0ZBSUw7XG4rXG4gXHRpZiAodW5saWtlbHkobm9mYWlsKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBBbHNvIHdlIGRvbid0IHN1cHBvcnQgX19HRlBfTk9GQUlMIHdpdGhvdXQgX19HRlBfRElSRUNUX1JFQ0xBSU0sXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQyMzozOTowMi45NDAyNjczODZaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEzMzczMDcyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlzayoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgd2FycmFudCBhIEtNU0FOIGNoZWNrLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBtb2RpZmllZCBjb2RlIHdpdGhpbiBgbW0vcGFnZV9hbGxvYy5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgX19hbGxvY19wYWdlc19zbG93cGF0aGAgZnVuY3Rpb24uXG5cbkkndmUgZ290IHRoZSBiZWZvcmUtYW5kLWFmdGVyIGNvZGUgc25pcHBldHMgaW4gZnJvbnQgb2YgbWUuIExvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIEkgc2VlIHRoYXQgdGhlIG9yZGVyIG9mIGluaXRpYWxpemF0aW9uIG9mIGJvb2xlYW4gdmFyaWFibGVzIGBjYW5fZGlyZWN0X3JlY2xhaW1gLCBgY2FuX2NvbXBhY3RgLCBhbmQgYG5vZmFpbGAgaGFzIGJlZW4gYWx0ZXJlZC4gVGhleSB3ZXJlIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24sIGFuZCBub3cgdGhlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUgbGF0ZXIgb24uIEEgbmV3IGNvbmRpdGlvbmFsIGJsb2NrIGhhcyBiZWVuIGFkZGVkIHRoYXQgbWF5IGNoYW5nZSB0aGUgdmFsdWUgb2YgYGdmcF9tYXNrYC4gVGhpcyBjb25kaXRpb25hbCBibG9jayBub3cgYWZmZWN0cyB0aGUgdmFsdWVzIG9mIGBjYW5fZGlyZWN0X3JlY2xhaW1gIGFuZCBgY2FuX2NvbXBhY3RgLiBJdCBzZWVtcyBsaWtlIHRoZSBjb25kaXRpb25hbCBsb2dpYyBpcyByZWxhdGVkIHRvIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgZGlyZWN0IHJlY2xhaW0gYW5kIGNvbXBhY3Rpb24gZm9yIGxhcmdlciBvcmRlcnMsIGVzcGVjaWFsbHkgaW4gY2FzZXMgd2hlcmUgdGhlIGFsbG9jYXRpb24gbWlnaHQgYmUgY29uc2lkZXJlZCBcImNvc3RseVwiIG9yIHdoZXJlIHdlIGFyZSBhc2tlZCBub3QgdG8gcmV0cnkuXG5cbk15IHByaW1hcnkgY29uY2VybiBub3cgaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpbmFkdmVydGVudGx5IGxlYXZlcyB0aGVzZSBib29sZWFuIHZhcmlhYmxlcyB1bmluaXRpYWxpemVkIGluIHNwZWNpZmljIGV4ZWN1dGlvbiBwYXRocy4gV2hpbGUgdGhlIGNvZGUgKmludGVuZHMqIHRvIGFzc2lnbiB2YWx1ZXMgbGF0ZXIsIHRoZSBjb21waWxlciBtaWdodCBub3QgZ3VhcmFudGVlIHRoYXQgYXNzaWdubWVudC4gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBwYXRocyB0aGF0IGNvdWxkIHNraXAgdGhlIGluaXRpYWxpemF0aW9uPyBJZiBzbywgdGhpcyBpbnRyb2R1Y2VzIGEgY2xhc3NpYyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgcmlzay4gVGhhdCBzYWlkLCBpdCBzZWVtcyBsaWtlIHRoZSB2YXJpYWJsZSBgZ2ZwX21hc2tgIHNob3VsZCBiZSB3ZWxsIGluaXRpYWxpemVkIGJlZm9yZSBpdCBpcyB1c2VkLCBzbyBteSBpbnR1aXRpb24gaXMgdGhhdCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiAqc2hvdWxkKiBiZSBzYWZlLlxuXG5JJ20gZ29pbmcgdG8gc2NhbiB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbW0vcGFnZV9hbGxvYy5jYCBhcm91bmQgbGluZSA0Nzg0LCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIGZ1bmN0aW9uJ3Mgb3ZlcmFsbCBiZWhhdmlvciBhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgdmFyaWFibGVzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBib29sZWFucyBhcmUgdXNlZCBhbmQgd2hhdCB0aGVpciBkZWZhdWx0IHZhbHVlcyB3b3VsZCBtZWFuLiBTcGVjaWZpY2FsbHksIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXhlY3V0aW9uIHBhdGhzIHdpdGhpbiB0aGUgZnVuY3Rpb24gdG8gYXNzZXNzIGlmIGFueSBwYXRoIG1pZ2h0IGNhdXNlIGBjYW5fZGlyZWN0X3JlY2xhaW1gLCBgY2FuX2NvbXBhY3RgLCBvciBgbm9mYWlsYCB0byByZW1haW4gdW5pbml0aWFsaXplZC4gQmFzZWQgb24gdGhpcyBkZWVwZXIgYW5hbHlzaXMsIEkgc2hvdWxkIGJlIGFibGUgdG8gbWFrZSBhIHNvdW5kIGp1ZGdtZW50IG9uIHdoZXRoZXIgS01TQU4gaXMgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzk6MDkuMDc0MDAwNTU3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2FsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDc4MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDc4MDpcXHRcXHR3YXJuX2FsbG9jX3Nob3dfbWVtKGdmcF9tYXNrLCBub2RlbWFzayk7XFxuNDc4MTpcXHR9XFxuNDc4MjpcXHRcXG40NzgzOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKlxcbjQ3ODQ6XFx0X19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxcbjQ3ODU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGFsbG9jX2NvbnRleHQgKmFjKVxcbjQ3ODY6XFx0e1xcbjQ3ODc6XFx0XFx0Y29uc3QgYm9vbCBjb3N0bHlfb3JkZXIgPSBvcmRlciBcXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSO1xcbjQ3ODg6XFx0XFx0Ym9vbCBjYW5fZGlyZWN0X3JlY2xhaW07XFxuNDc4OTpcXHRcXHRib29sIGNhbl9jb21wYWN0O1xcbjQ3OTA6XFx0XFx0Ym9vbCBub2ZhaWw7XFxuNDc5MTpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XFxuNDc5MjpcXHRcXHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3M7XFxuNDc5MzpcXHRcXHR1bnNpZ25lZCBsb25nIGRpZF9zb21lX3Byb2dyZXNzO1xcbjQ3OTQ6XFx0XFx0ZW51bSBjb21wYWN0X3ByaW9yaXR5IGNvbXBhY3RfcHJpb3JpdHk7XFxuNDc5NTpcXHRcXHRlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3RfcmVzdWx0O1xcbjQ3OTY6XFx0XFx0aW50IGNvbXBhY3Rpb25fcmV0cmllcztcXG40Nzk3OlxcdFxcdGludCBub19wcm9ncmVzc19sb29wcztcXG40Nzk4OlxcdFxcdHVuc2lnbmVkIGludCBjcHVzZXRfbWVtc19jb29raWU7XFxuNDc5OTpcXHRcXHR1bnNpZ25lZCBpbnQgem9uZWxpc3RfaXRlcl9jb29raWU7XFxuNDgwMDpcXHRcXHRpbnQgcmVzZXJ2ZV9mbGFncztcXG40ODAxOlxcdFxcdGJvb2wgY29tcGFjdF9maXJzdCA9IGZhbHNlO1xcbjQ4MDI6XFx0XFx0Ym9vbCBjYW5fcmV0cnlfcmVzZXJ2ZXMgPSB0cnVlO1xcbjQ4MDM6XFx0XFx0dW5zaWduZWQgbG9uZyBhbGxvY19zdGFydF90aW1lID0gamlmZmllcztcXG40ODA0OlxcdFxcbjQ4MDU6XFx0XFx0LypcXG40ODA2OlxcdFxcdCAqIENvc3RseSBfX0dGUF9OT1JFVFJZIGNhbGxlcnMgaGF2ZSBhIGNoZWFwIGZhbGxiYWNrLCBzbyBkb24ndCBzdGFsbFxcbjQ4MDc6XFx0XFx0ICogdGhlbSBpbiByZWNsYWltIG9yIGNvbXBhY3Rpb24uIF9fR0ZQX1RISVNOT0RFIGNhbGxlcnMgYXJlIGV4ZW1wdC5cXG40ODA4OlxcdFxcdCAqL1xcbjQ4MDk6XFx0XFx0aWYgKGNvc3RseV9vcmRlciBcXHUwMDI2XFx1MDAyNiAoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9OT1JFVFJZKSBcXHUwMDI2XFx1MDAyNlxcbjQ4MTA6XFx0XFx0ICAgICEoZ2ZwX21hc2sgXFx1MDAyNiBfX0dGUF9USElTTk9ERSkpXFxuNDgxMTpcXHRcXHRcXHRnZnBfbWFzayBcXHUwMDI2PSB+X19HRlBfRElSRUNUX1JFQ0xBSU07XFxuNDgxMjpcXHRcXG40ODEzOlxcdFxcdGNhbl9kaXJlY3RfcmVjbGFpbSA9IGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU07XFxuNDgxNDpcXHRcXHRjYW5fY29tcGFjdCA9IGNhbl9kaXJlY3RfcmVjbGFpbSBcXHUwMDI2XFx1MDAyNiBnZnBfY29tcGFjdGlvbl9hbGxvd2VkKGdmcF9tYXNrKTtcXG40ODE1OlxcdFxcdG5vZmFpbCA9IGdmcF9tYXNrIFxcdTAwMjYgX19HRlBfTk9GQUlMO1xcbjQ4MTY6XFx0XFxuNDgxNzpcXHRcXHRpZiAodW5saWtlbHkobm9mYWlsKSkge1xcbjQ4MTg6XFx0XFx0XFx0LypcXG40ODE5OlxcdFxcdFxcdCAqIEFsc28gd2UgZG9uJ3Qgc3VwcG9ydCBfX0dGUF9OT0ZBSUwgd2l0aG91dCBfX0dGUF9ESVJFQ1RfUkVDTEFJTSxcXG40ODIwOlxcdFxcdFxcdCAqIG90aGVyd2lzZSwgd2UgbWF5IHJlc3VsdCBpbiBsb2NrdXAuXFxuNDgyMTpcXHRcXHRcXHQgKi9cXG40ODIyOlxcdFxcdFxcdFdBUk5fT05fT05DRSghY2FuX2RpcmVjdF9yZWNsYWltKTtcXG40ODIzOlxcdFxcdFxcdC8qXFxuNDgyNDpcXHRcXHRcXHQgKiBQRl9NRU1BTExPQyByZXF1ZXN0IGZyb20gdGhpcyBjb250ZXh0IGlzIHJhdGhlciBiaXphcnJlXFxuNDgyNTpcXHRcXHRcXHQgKiBiZWNhdXNlIHdlIGNhbm5vdCByZWNsYWltIGFueXRoaW5nIGFuZCBvbmx5IGNhbiBsb29wIHdhaXRpbmdcXG40ODI2OlxcdFxcdFxcdCAqIGZvciBzb21lYm9keSB0byBkbyBhIHdvcmsgZm9yIHVzLlxcbjQ4Mjc6XFx0XFx0XFx0ICovXFxuNDgyODpcXHRcXHRcXHRXQVJOX09OX09OQ0UoY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQRl9NRU1BTExPQyk7XFxuNDgyOTpcXHRcXHR9XFxuNDgzMDpcXHRcXG40ODMxOlxcdHJlc3RhcnQ6XFxuNDgzMjpcXHRcXHRjb21wYWN0aW9uX3JldHJpZXMgPSAwO1xcbjQ4MzM6XFx0XFx0bm9fcHJvZ3Jlc3NfbG9vcHMgPSAwO1xcbjQ4MzQ6XFx0XFx0Y29tcGFjdF9yZXN1bHQgPSBDT01QQUNUX1NLSVBQRUQ7XFxuNDgzNTpcXHRcXHRjb21wYWN0X3ByaW9yaXR5ID0gREVGX0NPTVBBQ1RfUFJJT1JJVFk7XFxuNDgzNjpcXHRcXHRjcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpO1xcbjQ4Mzc6XFx0XFx0em9uZWxpc3RfaXRlcl9jb29raWUgPSB6b25lbGlzdF9pdGVyX2JlZ2luKCk7XFxuNDgzODpcXHRcXG40ODM5OlxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDIzOjM5OjA5LjA3NDM0NzI2N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTAxMTQ1MTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFRoaXMgUGF0Y2ggaXMgYSBOby1PcCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyBpdCAqcmVhbGx5KiBkb2luZz8gVGhlIGNvZGUncyBjaGFuZ2luZyB0aGUgYmVoYXZpb3Igb2YgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgIGluIGBtbS9wYWdlX2FsbG9jLmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgY2xlYXJpbmcgYF9fR0ZQX0RJUkVDVF9SRUNMQUlNYCBpbiB0aGUgYGdmcF9tYXNrYCBmb3IgbGFyZ2UgYWxsb2NhdGlvbnMgKG9yZGVyIFx1MDAzZSAzKSB0aGF0IGFyZSBmbGFnZ2VkIHdpdGggYF9fR0ZQX05PUkVUUllgIGJ1dCAqbm90KiBgX19HRlBfVEhJU05PREVgLiBUaGUgZ29hbD8gVG8gcHJldmVudCBzdGFsbGluZyB0aGVzZSBwb3RlbnRpYWxseSBjb3N0bHkgYW5kIG5vbi1yZXRyeWluZyBhbGxvY2F0b3JzIGR1cmluZyBkaXJlY3QgcmVjbGFpbSBvciBjb21wYWN0aW9uLlxuXG5Ob3csIG15IG1pbmQgaW5zdGFudGx5IGp1bXBzIHRvOiBEb2VzIHRoaXMgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeT8gRG9lcyBpdCBzb21laG93IGNhdXNlIHVzIHRvIHJlYWQgb3IgbGVhayB1bmluaXRpYWxpemVkIGRhdGE/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdDpcblxuMS4gICoqVW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmU/KiogTm9wZS4gQWxsIGxvY2FsIHZhcmlhYmxlcyBoZXJlIGFyZSBpbW1lZGlhdGVseSBhc3NpZ25lZCB2YWx1ZXMuIFNhZmUuXG4yLiAgKipNZW1vcnkgaW5pdGlhbGl6YXRpb24gc2VtYW50aWNzIGNoYW5nZWQ/KiogTm8sIGl0IGp1c3QgbW9kaWZpZXMgYSBmbGFnLCBzcGVjaWZpY2FsbHkgYF9fR0ZQX0RJUkVDVF9SRUNMQUlNYCwgbm90aGluZyBhYm91dCBpbml0aWFsaXppbmcgbWVtb3J5IHdpdGggc2F5IGBfX0dGUF9aRVJPYCBpcyBhbHRlcmVkLlxuMy4gICoqU3RydWN0dXJlIHBhY2tpbmcsIHBhZGRpbmcsIG9yIGFueSBkYXRhIHRyYW5zZmVycz8qKiBObywgbm8gY2hhbmdlIHRoZXJlLlxuNC4gICoqQW55IG90aGVyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyoqIFN0aWxsIG5vLlxuXG5TbywgaW4gbXkgZXhwZXJ0IG9waW5pb24sICoqTmVlZHNLTVNBTiBpcyBkZWZpbml0ZWx5IGZhbHNlIGhlcmUuKiogVGhpcyBpcyBhIGNsZWFyLWN1dCBjYXNlLlxuXG5Ob3csIGxldCdzIGFydGljdWxhdGUgdGhlIHJlYXNvbmluZywgZXNwZWNpYWxseSBjb250cmFzdGluZyBLTVNBTiBhbmQgS0FTQU4sIGZvciBnb29kIG1lYXN1cmUuIEhlcmXigJlzIGhvdyBJJ20gdGhpbmtpbmcgYWJvdXQgaXQ6XG5cbktNU0FOIGlzIG91ciB0b29sIGZvciBjYXRjaGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkc+KAlHN0dWZmIGxlYWtpbmcgZnJvbSBzdGFjaywgaGVhcCwgb3IgcGFnZSBhbGxvY2F0aW9ucywgYW5kIGltcG9ydGFudGx5LCBpbmZvcm1hdGlvbiBsZWFrcyAqYWNyb3NzKiBzZWN1cml0eSBib3VuZGFyaWVzIGxpa2UgZnJvbSB0aGUga2VybmVsIHRvIHVzZXJzcGFjZS4gS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBhbGwgYWJvdXQgbWVtb3J5ICpzYWZldHkqIHZpb2xhdGlvbnM6IG91dC1vZi1ib3VuZHMgYWNjZXNzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCB0aGUgdXN1YWwgc3VzcGVjdHMuXG5cblRoaXMgcGF0Y2g/IEl0J3MgZnVuZGFtZW50YWxseSBhbHRlcmluZyBhbGxvY2F0b3IgKmJlaGF2aW9yKi4gSXQncyBhIGhldXJpc3RpYyBjaGFuZ2U6IHR3ZWFraW5nIHRoZSByZWNsYWltL2NvbXBhY3Rpb24gbG9naWMgZm9yIGxhcmdlLCBuby1yZXRyeSBhbGxvY2F0aW9ucy4gVGhlIHBhdGNoIG1vZGlmaWVzIGEgZmxhZyBhbmQgbm90aGluZyBtb3JlLiBJdCBkb2Vzbid0IGludHJvZHVjZSBvciBhbHRlciBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEl0IGRvZXNuJ3QgY29weSB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLiBJdCBkb2Vzbid0IHRvdWNoIGhvdyBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQuIE5vIEtNU0FOLXNwZWNpZmljIGNoZWNrcyBhcmUgcmVxdWlyZWQuXG5cblNvLCBJJ20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYC4gVGhpcyBvbmUgaXMgY2xlYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMDAsIk91dHB1dFRva2VucyI6MTQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMjM6Mzk6MTUuMTc1NDk0NjdaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGFsbG9jYXRvciBzbG93cGF0aCAoX19hbGxvY19wYWdlc19zbG93cGF0aCkgdG8gY2xlYXIgX19HRlBfRElSRUNUX1JFQ0xBSU0gZm9yIGNvc3RseS1vcmRlciBhbGxvY2F0aW9ucyB0aGF0IGhhdmUgX19HRlBfTk9SRVRSWSBzZXQgKGFuZCBub3QgX19HRlBfVEhJU05PREUpLCBhdm9pZGluZyBzdGFsbHMgaW4gcmVjbGFpbSBhbmQgY29tcGFjdGlvbi5cXG5cXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBtb2RpZmllcyBhbGxvY2F0b3IgcmVjbGFpbSBhbmQgY29tcGFjdGlvbiBiZWhhdmlvci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gb3IgemVyb2luZyAoZS5nLiwgX19HRlBfWkVSTyksIGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIGxlYWsgaW5mbyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIGFsbG9jYXRvciBzbG93cGF0aCAoX19hbGxvY19wYWdlc19zbG93cGF0aCkgdG8gY2xlYXIgX19HRlBfRElSRUNUX1JFQ0xBSU0gZm9yIGNvc3RseS1vcmRlciBhbGxvY2F0aW9ucyB0aGF0IGhhdmUgX19HRlBfTk9SRVRSWSBzZXQgKGFuZCBub3QgX19HRlBfVEhJU05PREUpLCBhdm9pZGluZyBzdGFsbHMgaW4gcmVjbGFpbSBhbmQgY29tcGFjdGlvbi5cXG5cXG5UaGlzIGNoYW5nZSBzdHJpY3RseSBtb2RpZmllcyBhbGxvY2F0b3IgcmVjbGFpbSBhbmQgY29tcGFjdGlvbiBiZWhhdmlvci4gSXQgZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBkb2VzIG5vdCBtb2RpZnkgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gb3IgemVyb2luZyAoZS5nLiwgX19HRlBfWkVSTyksIGFuZCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIGxlYWsgaW5mbyB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowckbr4[1] Phase: Succeeded StartedAt: 2026-09-05 23:39:26 +0000 UTC FinishedAt: 2026-09-05 23:39:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 23:39:26 +0000 UTC FinishedAt: 2026-09-05 23:39:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2] Phase: Succeeded StartedAt: 2026-09-05 23:39:26 +0000 UTC FinishedAt: 2026-09-06 03:21:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-05 23:39:26 +0000 UTC FinishedAt: 2026-09-06 03:21:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-05 23:39:26 +0000 UTC FinishedAt: 2026-09-05 23:39:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-05 23:39:26 +0000 UTC FinishedAt: 2026-09-05 23:39:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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-workflowckbr4/series-workflowckbr4-convert-artifact-1216467349/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-05 23:39:36 +0000 UTC FinishedAt: 2026-09-05 23:55:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-05 23:39:36 +0000 UTC FinishedAt: 2026-09-05 23:55:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5ad76de2-5d88-4474-a150-4694e8ef42a4,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-workflowckbr4/series-workflowckbr4-convert-artifact-1216467349/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": "986437f8-a073-4c49-b268-404d4d8fbd17", "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-workflowckbr4/series-workflowckbr4-build-action-2168596987/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-05 23:39:36 +0000 UTC FinishedAt: 2026-09-05 23:55:18 +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:*5ad76de2-5d88-4474-a150-4694e8ef42a4,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-workflowckbr4/series-workflowckbr4-convert-artifact-1216467349/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": "986437f8-a073-4c49-b268-404d4d8fbd17", "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-workflowckbr4/series-workflowckbr4-build-action-2168596987/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-05 23:55:28 +0000 UTC FinishedAt: 2026-09-05 23:55:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-05 23:55:28 +0000 UTC FinishedAt: 2026-09-05 23:55:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-05 23:55:28 +0000 UTC FinishedAt: 2026-09-05 23:55:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-05 23:55:28 +0000 UTC FinishedAt: 2026-09-05 23:55:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-workflowckbr4/series-workflowckbr4-convert-artifact-2165715312/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-05 23:55:38 +0000 UTC FinishedAt: 2026-09-05 23:57:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-05 23:55:38 +0000 UTC FinishedAt: 2026-09-05 23:57:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*986437f8-a073-4c49-b268-404d4d8fbd17,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-workflowckbr4/series-workflowckbr4-build-action-2168596987/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-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-05 23:57:32 +0000 UTC FinishedAt: 2026-09-05 23:57:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-05 23:57:32 +0000 UTC FinishedAt: 2026-09-05 23:57:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-05 23:57:32 +0000 UTC FinishedAt: 2026-09-06 00:13:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-05 23:57:32 +0000 UTC FinishedAt: 2026-09-06 00:13:28 +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:*5ad76de2-5d88-4474-a150-4694e8ef42a4,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-workflowckbr4/series-workflowckbr4-convert-artifact-2165715312/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": "20c97c59-c194-4059-9df9-55271447db66", "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-workflowckbr4/series-workflowckbr4-build-action-295735916/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-05 23:57:32 +0000 UTC FinishedAt: 2026-09-06 00:13:17 +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:*5ad76de2-5d88-4474-a150-4694e8ef42a4,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-workflowckbr4/series-workflowckbr4-convert-artifact-2165715312/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": "20c97c59-c194-4059-9df9-55271447db66", "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-workflowckbr4/series-workflowckbr4-build-action-295735916/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-06 00:13:28 +0000 UTC FinishedAt: 2026-09-06 00:13:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-06 00:13:28 +0000 UTC FinishedAt: 2026-09-06 00:13:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-06 00:13:28 +0000 UTC FinishedAt: 2026-09-06 00:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-06 00:13:28 +0000 UTC FinishedAt: 2026-09-06 00:15:12 +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:*20c97c59-c194-4059-9df9-55271447db66,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-workflowckbr4/series-workflowckbr4-build-action-295735916/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-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-06 00:15:22 +0000 UTC FinishedAt: 2026-09-06 03:21:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-06 00:15:22 +0000 UTC FinishedAt: 2026-09-06 03:21:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"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:*986437f8-a073-4c49-b268-404d4d8fbd17,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*20c97c59-c194-4059-9df9-55271447db66,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-workflowckbr4/series-workflowckbr4-build-action-2168596987/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-workflowckbr4/series-workflowckbr4-build-action-295735916/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-06 00:15:22 +0000 UTC FinishedAt: 2026-09-06 00:15:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-06 00:15:22 +0000 UTC FinishedAt: 2026-09-06 00:15:28 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"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-workflowckbr4/series-workflowckbr4-convert-artifact-4095663849/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-06 00:15:22 +0000 UTC FinishedAt: 2026-09-06 00:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-06 00:15:22 +0000 UTC FinishedAt: 2026-09-06 00:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-06 00:15:22 +0000 UTC FinishedAt: 2026-09-06 00:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-06 00:15:32 +0000 UTC FinishedAt: 2026-09-06 03:21:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowckbr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["alloc_huge_zero_folio","__do_huge_pmd_anonymous_page","allocate_slab","__filemap_get_folio_mpol"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f72ae81fdb796ab3a7cca5904b40f4481f5fdb1e","config_name":"upstream-apparmor-kasan.config","series_id":"b394e1ba-75a8-4da7-b722-4cb7ec7ccb27","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-09-06 00:15:32 +0000 UTC FinishedAt: 2026-09-06 03:21:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*986437f8-a073-4c49-b268-404d4d8fbd17,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*20c97c59-c194-4059-9df9-55271447db66,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-workflowckbr4/series-workflowckbr4-build-action-2168596987/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-workflowckbr4/series-workflowckbr4-build-action-295735916/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-workflowckbr4/series-workflowckbr4-convert-artifact-4095663849/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,}